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

struct  S165C7_nt  {
  int s165c7f0[2];
  void  mf165c7(); // _ZN9S165C7_nt7mf165c7Ev
};
//SIG(-1 S165C7_nt) C1{ m Fi[2]}


void  S165C7_nt ::mf165c7(){}

//skip512 S165C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S165C6_nt  {
  int s165c6f0;
  __tsi64 s165c6f1;
  void *s165c6f2[4];
  int s165c6f3[2];
  void *s165c6f4;
  ::S165C7_nt s165c6f5;
  void *s165c6f6[2];
  virtual  ~S165C6_nt(); // _ZN9S165C6_ntD1Ev
  virtual void  v3(); // _ZN9S165C6_nt2v3Ev
  virtual void  v4(); // _ZN9S165C6_nt2v4Ev
  virtual void  v5(); // _ZN9S165C6_nt2v5Ev
  virtual void  v6(); // _ZN9S165C6_nt2v6Ev
  virtual void  v7(); // _ZN9S165C6_nt2v7Ev
  virtual void  v8(); // _ZN9S165C6_nt2v8Ev
  virtual void  v9(); // _ZN9S165C6_nt2v9Ev
  virtual void  v10(); // _ZN9S165C6_nt3v10Ev
  virtual void  v11(); // _ZN9S165C6_nt3v11Ev
  virtual void  v12(); // _ZN9S165C6_nt3v12Ev
  virtual void  v13(); // _ZN9S165C6_nt3v13Ev
  virtual void  v14(); // _ZN9S165C6_nt3v14Ev
  virtual void  v15(); // _ZN9S165C6_nt3v15Ev
  virtual void  v16(); // _ZN9S165C6_nt3v16Ev
  virtual void  v17(); // _ZN9S165C6_nt3v17Ev
  virtual void  v18(); // _ZN9S165C6_nt3v18Ev
  virtual void  v19(); // _ZN9S165C6_nt3v19Ev
  virtual void  v20(); // _ZN9S165C6_nt3v20Ev
  virtual void  v21(); // _ZN9S165C6_nt3v21Ev
  virtual void  v22(); // _ZN9S165C6_nt3v22Ev
  virtual void  v23(); // _ZN9S165C6_nt3v23Ev
  virtual void  v24(); // _ZN9S165C6_nt3v24Ev
  virtual void  v25(); // _ZN9S165C6_nt3v25Ev
  virtual void  v26(); // _ZN9S165C6_nt3v26Ev
  virtual void  v27(); // _ZN9S165C6_nt3v27Ev
  virtual void  v28(); // _ZN9S165C6_nt3v28Ev
  virtual void  v29(); // _ZN9S165C6_nt3v29Ev
  virtual void  v30(); // _ZN9S165C6_nt3v30Ev
  virtual void  v31(); // _ZN9S165C6_nt3v31Ev
  virtual void  v32(); // _ZN9S165C6_nt3v32Ev
  virtual void  v33(); // _ZN9S165C6_nt3v33Ev
  virtual void  v34(); // _ZN9S165C6_nt3v34Ev
  virtual void  v35(); // _ZN9S165C6_nt3v35Ev
  virtual void  v36(); // _ZN9S165C6_nt3v36Ev
  virtual void  v37(); // _ZN9S165C6_nt3v37Ev
  virtual void  v38(); // _ZN9S165C6_nt3v38Ev
  virtual void  v39(); // _ZN9S165C6_nt3v39Ev
  virtual void  v40(); // _ZN9S165C6_nt3v40Ev
  virtual void  v41(); // _ZN9S165C6_nt3v41Ev
  virtual void  v42(); // _ZN9S165C6_nt3v42Ev
  virtual void  v43(); // _ZN9S165C6_nt3v43Ev
  virtual void  v44(); // _ZN9S165C6_nt3v44Ev
  virtual void  v45(); // _ZN9S165C6_nt3v45Ev
  virtual void  v46(); // _ZN9S165C6_nt3v46Ev
  virtual void  v47(); // _ZN9S165C6_nt3v47Ev
  virtual void  v48(); // _ZN9S165C6_nt3v48Ev
  virtual void  v49(); // _ZN9S165C6_nt3v49Ev
  virtual void  v50(); // _ZN9S165C6_nt3v50Ev
  virtual void  v51(); // _ZN9S165C6_nt3v51Ev
  virtual void  v52(); // _ZN9S165C6_nt3v52Ev
  virtual void  v53(); // _ZN9S165C6_nt3v53Ev
  virtual void  v54(); // _ZN9S165C6_nt3v54Ev
  virtual void  v55(); // _ZN9S165C6_nt3v55Ev
  virtual void  v56(); // _ZN9S165C6_nt3v56Ev
  virtual void  v57(); // _ZN9S165C6_nt3v57Ev
  virtual void  v58(); // _ZN9S165C6_nt3v58Ev
  virtual void  v59(); // _ZN9S165C6_nt3v59Ev
  virtual void  v60(); // _ZN9S165C6_nt3v60Ev
  virtual void  v61(); // _ZN9S165C6_nt3v61Ev
  virtual void  v62(); // _ZN9S165C6_nt3v62Ev
  virtual void  v63(); // _ZN9S165C6_nt3v63Ev
  virtual void  v64(); // _ZN9S165C6_nt3v64Ev
  virtual void  v65(); // _ZN9S165C6_nt3v65Ev
  virtual void  v66(); // _ZN9S165C6_nt3v66Ev
  S165C6_nt(); // tgen
};
//SIG(-1 S165C6_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]}


 S165C6_nt ::~S165C6_nt(){ note_dtor("S165C6_nt", this);}
void  S165C6_nt ::v3(){vfunc_called(this, "_ZN9S165C6_nt2v3Ev");}
void  S165C6_nt ::v4(){vfunc_called(this, "_ZN9S165C6_nt2v4Ev");}
void  S165C6_nt ::v5(){vfunc_called(this, "_ZN9S165C6_nt2v5Ev");}
void  S165C6_nt ::v6(){vfunc_called(this, "_ZN9S165C6_nt2v6Ev");}
void  S165C6_nt ::v7(){vfunc_called(this, "_ZN9S165C6_nt2v7Ev");}
void  S165C6_nt ::v8(){vfunc_called(this, "_ZN9S165C6_nt2v8Ev");}
void  S165C6_nt ::v9(){vfunc_called(this, "_ZN9S165C6_nt2v9Ev");}
void  S165C6_nt ::v10(){vfunc_called(this, "_ZN9S165C6_nt3v10Ev");}
void  S165C6_nt ::v11(){vfunc_called(this, "_ZN9S165C6_nt3v11Ev");}
void  S165C6_nt ::v12(){vfunc_called(this, "_ZN9S165C6_nt3v12Ev");}
void  S165C6_nt ::v13(){vfunc_called(this, "_ZN9S165C6_nt3v13Ev");}
void  S165C6_nt ::v14(){vfunc_called(this, "_ZN9S165C6_nt3v14Ev");}
void  S165C6_nt ::v15(){vfunc_called(this, "_ZN9S165C6_nt3v15Ev");}
void  S165C6_nt ::v16(){vfunc_called(this, "_ZN9S165C6_nt3v16Ev");}
void  S165C6_nt ::v17(){vfunc_called(this, "_ZN9S165C6_nt3v17Ev");}
void  S165C6_nt ::v18(){vfunc_called(this, "_ZN9S165C6_nt3v18Ev");}
void  S165C6_nt ::v19(){vfunc_called(this, "_ZN9S165C6_nt3v19Ev");}
void  S165C6_nt ::v20(){vfunc_called(this, "_ZN9S165C6_nt3v20Ev");}
void  S165C6_nt ::v21(){vfunc_called(this, "_ZN9S165C6_nt3v21Ev");}
void  S165C6_nt ::v22(){vfunc_called(this, "_ZN9S165C6_nt3v22Ev");}
void  S165C6_nt ::v23(){vfunc_called(this, "_ZN9S165C6_nt3v23Ev");}
void  S165C6_nt ::v24(){vfunc_called(this, "_ZN9S165C6_nt3v24Ev");}
void  S165C6_nt ::v25(){vfunc_called(this, "_ZN9S165C6_nt3v25Ev");}
void  S165C6_nt ::v26(){vfunc_called(this, "_ZN9S165C6_nt3v26Ev");}
void  S165C6_nt ::v27(){vfunc_called(this, "_ZN9S165C6_nt3v27Ev");}
void  S165C6_nt ::v28(){vfunc_called(this, "_ZN9S165C6_nt3v28Ev");}
void  S165C6_nt ::v29(){vfunc_called(this, "_ZN9S165C6_nt3v29Ev");}
void  S165C6_nt ::v30(){vfunc_called(this, "_ZN9S165C6_nt3v30Ev");}
void  S165C6_nt ::v31(){vfunc_called(this, "_ZN9S165C6_nt3v31Ev");}
void  S165C6_nt ::v32(){vfunc_called(this, "_ZN9S165C6_nt3v32Ev");}
void  S165C6_nt ::v33(){vfunc_called(this, "_ZN9S165C6_nt3v33Ev");}
void  S165C6_nt ::v34(){vfunc_called(this, "_ZN9S165C6_nt3v34Ev");}
void  S165C6_nt ::v35(){vfunc_called(this, "_ZN9S165C6_nt3v35Ev");}
void  S165C6_nt ::v36(){vfunc_called(this, "_ZN9S165C6_nt3v36Ev");}
void  S165C6_nt ::v37(){vfunc_called(this, "_ZN9S165C6_nt3v37Ev");}
void  S165C6_nt ::v38(){vfunc_called(this, "_ZN9S165C6_nt3v38Ev");}
void  S165C6_nt ::v39(){vfunc_called(this, "_ZN9S165C6_nt3v39Ev");}
void  S165C6_nt ::v40(){vfunc_called(this, "_ZN9S165C6_nt3v40Ev");}
void  S165C6_nt ::v41(){vfunc_called(this, "_ZN9S165C6_nt3v41Ev");}
void  S165C6_nt ::v42(){vfunc_called(this, "_ZN9S165C6_nt3v42Ev");}
void  S165C6_nt ::v43(){vfunc_called(this, "_ZN9S165C6_nt3v43Ev");}
void  S165C6_nt ::v44(){vfunc_called(this, "_ZN9S165C6_nt3v44Ev");}
void  S165C6_nt ::v45(){vfunc_called(this, "_ZN9S165C6_nt3v45Ev");}
void  S165C6_nt ::v46(){vfunc_called(this, "_ZN9S165C6_nt3v46Ev");}
void  S165C6_nt ::v47(){vfunc_called(this, "_ZN9S165C6_nt3v47Ev");}
void  S165C6_nt ::v48(){vfunc_called(this, "_ZN9S165C6_nt3v48Ev");}
void  S165C6_nt ::v49(){vfunc_called(this, "_ZN9S165C6_nt3v49Ev");}
void  S165C6_nt ::v50(){vfunc_called(this, "_ZN9S165C6_nt3v50Ev");}
void  S165C6_nt ::v51(){vfunc_called(this, "_ZN9S165C6_nt3v51Ev");}
void  S165C6_nt ::v52(){vfunc_called(this, "_ZN9S165C6_nt3v52Ev");}
void  S165C6_nt ::v53(){vfunc_called(this, "_ZN9S165C6_nt3v53Ev");}
void  S165C6_nt ::v54(){vfunc_called(this, "_ZN9S165C6_nt3v54Ev");}
void  S165C6_nt ::v55(){vfunc_called(this, "_ZN9S165C6_nt3v55Ev");}
void  S165C6_nt ::v56(){vfunc_called(this, "_ZN9S165C6_nt3v56Ev");}
void  S165C6_nt ::v57(){vfunc_called(this, "_ZN9S165C6_nt3v57Ev");}
void  S165C6_nt ::v58(){vfunc_called(this, "_ZN9S165C6_nt3v58Ev");}
void  S165C6_nt ::v59(){vfunc_called(this, "_ZN9S165C6_nt3v59Ev");}
void  S165C6_nt ::v60(){vfunc_called(this, "_ZN9S165C6_nt3v60Ev");}
void  S165C6_nt ::v61(){vfunc_called(this, "_ZN9S165C6_nt3v61Ev");}
void  S165C6_nt ::v62(){vfunc_called(this, "_ZN9S165C6_nt3v62Ev");}
void  S165C6_nt ::v63(){vfunc_called(this, "_ZN9S165C6_nt3v63Ev");}
void  S165C6_nt ::v64(){vfunc_called(this, "_ZN9S165C6_nt3v64Ev");}
void  S165C6_nt ::v65(){vfunc_called(this, "_ZN9S165C6_nt3v65Ev");}
void  S165C6_nt ::v66(){vfunc_called(this, "_ZN9S165C6_nt3v66Ev");}
S165C6_nt ::S165C6_nt(){ note_ctor("S165C6_nt", this);} // tgen

//skip512 S165C6_nt

#else // __cplusplus

extern void _ZN9S165C6_ntC1Ev();
extern void _ZN9S165C6_ntD1Ev();
Name_Map name_map_S165C6_nt[] = {
  NSPAIR(_ZN9S165C6_ntC1Ev),
  NSPAIR(_ZN9S165C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S165C6_nt[];
extern void _ZN9S165C6_ntD1Ev();
extern void _ZN9S165C6_ntD0Ev();
extern void _ZN9S165C6_nt2v3Ev();
extern void _ZN9S165C6_nt2v4Ev();
extern void _ZN9S165C6_nt2v5Ev();
extern void _ZN9S165C6_nt2v6Ev();
extern void _ZN9S165C6_nt2v7Ev();
extern void _ZN9S165C6_nt2v8Ev();
extern void _ZN9S165C6_nt2v9Ev();
extern void _ZN9S165C6_nt3v10Ev();
extern void _ZN9S165C6_nt3v11Ev();
extern void _ZN9S165C6_nt3v12Ev();
extern void _ZN9S165C6_nt3v13Ev();
extern void _ZN9S165C6_nt3v14Ev();
extern void _ZN9S165C6_nt3v15Ev();
extern void _ZN9S165C6_nt3v16Ev();
extern void _ZN9S165C6_nt3v17Ev();
extern void _ZN9S165C6_nt3v18Ev();
extern void _ZN9S165C6_nt3v19Ev();
extern void _ZN9S165C6_nt3v20Ev();
extern void _ZN9S165C6_nt3v21Ev();
extern void _ZN9S165C6_nt3v22Ev();
extern void _ZN9S165C6_nt3v23Ev();
extern void _ZN9S165C6_nt3v24Ev();
extern void _ZN9S165C6_nt3v25Ev();
extern void _ZN9S165C6_nt3v26Ev();
extern void _ZN9S165C6_nt3v27Ev();
extern void _ZN9S165C6_nt3v28Ev();
extern void _ZN9S165C6_nt3v29Ev();
extern void _ZN9S165C6_nt3v30Ev();
extern void _ZN9S165C6_nt3v31Ev();
extern void _ZN9S165C6_nt3v32Ev();
extern void _ZN9S165C6_nt3v33Ev();
extern void _ZN9S165C6_nt3v34Ev();
extern void _ZN9S165C6_nt3v35Ev();
extern void _ZN9S165C6_nt3v36Ev();
extern void _ZN9S165C6_nt3v37Ev();
extern void _ZN9S165C6_nt3v38Ev();
extern void _ZN9S165C6_nt3v39Ev();
extern void _ZN9S165C6_nt3v40Ev();
extern void _ZN9S165C6_nt3v41Ev();
extern void _ZN9S165C6_nt3v42Ev();
extern void _ZN9S165C6_nt3v43Ev();
extern void _ZN9S165C6_nt3v44Ev();
extern void _ZN9S165C6_nt3v45Ev();
extern void _ZN9S165C6_nt3v46Ev();
extern void _ZN9S165C6_nt3v47Ev();
extern void _ZN9S165C6_nt3v48Ev();
extern void _ZN9S165C6_nt3v49Ev();
extern void _ZN9S165C6_nt3v50Ev();
extern void _ZN9S165C6_nt3v51Ev();
extern void _ZN9S165C6_nt3v52Ev();
extern void _ZN9S165C6_nt3v53Ev();
extern void _ZN9S165C6_nt3v54Ev();
extern void _ZN9S165C6_nt3v55Ev();
extern void _ZN9S165C6_nt3v56Ev();
extern void _ZN9S165C6_nt3v57Ev();
extern void _ZN9S165C6_nt3v58Ev();
extern void _ZN9S165C6_nt3v59Ev();
extern void _ZN9S165C6_nt3v60Ev();
extern void _ZN9S165C6_nt3v61Ev();
extern void _ZN9S165C6_nt3v62Ev();
extern void _ZN9S165C6_nt3v63Ev();
extern void _ZN9S165C6_nt3v64Ev();
extern void _ZN9S165C6_nt3v65Ev();
extern void _ZN9S165C6_nt3v66Ev();
static  VTBL_ENTRY vtc_S165C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S165C6_nt[0]),
  (VTBL_ENTRY)&_ZN9S165C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S165C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v66Ev,
};
extern VTBL_ENTRY _ZTI9S165C6_nt[];
VTBL_ENTRY *P__ZTI9S165C6_nt = _ZTI9S165C6_nt; 
extern  VTBL_ENTRY _ZTV9S165C6_nt[];
Class_Descriptor cd_S165C6_nt = {  "S165C6_nt", // class name
  0,0,//no base classes
  &(vtc_S165C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S165C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S165C6_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  S165C10_nt  {
  void *s165c10f0;
  int s165c10f1[2];
  void  mf165c10(); // _ZN10S165C10_nt8mf165c10Ev
};
//SIG(-1 S165C10_nt) C1{ m Fp Fi[2]}


void  S165C10_nt ::mf165c10(){}

//skip512 S165C10_nt

#else // __cplusplus

Class_Descriptor cd_S165C10_nt = {  "S165C10_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  S165C9_nt  : S165C10_nt {
};
//SIG(-1 S165C9_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S165C9_nt

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
static Base_Class bases_S165C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S165C9_nt = {  "S165C9_nt", // class name
  bases_S165C9_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  S165C8_nt  : S165C9_nt {
};
//SIG(-1 S165C8_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S165C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
extern Class_Descriptor cd_S165C9_nt;
static Base_Class bases_S165C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S165C9_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  S165C11_nt  {
  int s165c11f0;
  void  mf165c11(); // _ZN10S165C11_nt8mf165c11Ev
};
//SIG(-1 S165C11_nt) C1{ m Fi}


void  S165C11_nt ::mf165c11(){}

//skip512 S165C11_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S165C11_nt[];
VTBL_ENTRY *P__ZTI10S165C11_nt = _ZTI10S165C11_nt; 
Class_Descriptor cd_S165C11_nt = {  "S165C11_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S165C11_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  S165C15  : S165C10_nt {
};
//SIG(-1 S165C15) C1{ BC2{ m Fp Fi[2]}}



static void Test_S165C15()
{
  extern Class_Descriptor cd_S165C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S165C15, buf);
    S165C15 &lv = *(new (buf) S165C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S165C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S165C15)");
    check_base_class_offset(lv, (S165C10_nt*), 0, "S165C15");
    test_class_info(&lv, &cd_S165C15);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS165C15(Test_S165C15, "S165C15", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
static Base_Class bases_S165C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S165C15 = {  "S165C15", // class name
  bases_S165C15, 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  S165C14  : S165C15 {
};
//SIG(-1 S165C14) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S165C14()
{
  extern Class_Descriptor cd_S165C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S165C14, buf);
    S165C14 &lv = *(new (buf) S165C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S165C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S165C14)");
    check_base_class_offset(lv, (S165C10_nt*)(S165C15*), 0, "S165C14");
    check_base_class_offset(lv, (S165C15*), 0, "S165C14");
    test_class_info(&lv, &cd_S165C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS165C14(Test_S165C14, "S165C14", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
extern Class_Descriptor cd_S165C15;
static Base_Class bases_S165C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S165C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S165C14 = {  "S165C14", // class name
  bases_S165C14, 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  S165C16_nt  {
  int s165c16f0[3];
  void  mf165c16(); // _ZN10S165C16_nt8mf165c16Ev
};
//SIG(-1 S165C16_nt) C1{ m Fi[3]}


void  S165C16_nt ::mf165c16(){}

//skip512 S165C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S165C21()
{
  extern Class_Descriptor cd_S165C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S165C21, buf);
    S165C21 &lv = *(new (buf) S165C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S165C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S165C21)");
    check_base_class_offset(lv, (S165C10_nt*), 0, "S165C21");
    test_class_info(&lv, &cd_S165C21);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS165C21(Test_S165C21, "S165C21", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
static Base_Class bases_S165C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S165C21 = {  "S165C21", // class name
  bases_S165C21, 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  S165C20  : S165C21 {
};
//SIG(-1 S165C20) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S165C20()
{
  extern Class_Descriptor cd_S165C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S165C20, buf);
    S165C20 &lv = *(new (buf) S165C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S165C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S165C20)");
    check_base_class_offset(lv, (S165C10_nt*)(S165C21*), 0, "S165C20");
    check_base_class_offset(lv, (S165C21*), 0, "S165C20");
    test_class_info(&lv, &cd_S165C20);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS165C20(Test_S165C20, "S165C20", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
extern Class_Descriptor cd_S165C21;
static Base_Class bases_S165C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S165C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S165C20 = {  "S165C20", // class name
  bases_S165C20, 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  S165C5_nt  : S165C6_nt {
  ::S165C8_nt s165c5f0;
  ::S165C8_nt s165c5f1;
  ::S165C11_nt s165c5f2;
  int s165c5f3;
  char s165c5f4[4];
  void *s165c5f5[2];
  ::S165C8_nt s165c5f6;
  unsigned int s165c5f7:1;
  unsigned int s165c5f8:1;
  unsigned int s165c5f9:1;
  unsigned int s165c5f10:1;
  unsigned int s165c5f11:1;
  unsigned int s165c5f12:1;
  unsigned int s165c5f13:1;
  unsigned int s165c5f14:1;
  unsigned int s165c5f15:1;
  unsigned int s165c5f16:1;
  unsigned int s165c5f17:1;
  unsigned int s165c5f18:1;
  unsigned int s165c5f19:1;
  unsigned int s165c5f20:1;
  unsigned int s165c5f21:1;
  unsigned int s165c5f22:1;
  unsigned int s165c5f23:1;
  unsigned int s165c5f24:1;
  unsigned int s165c5f25:1;
  unsigned int s165c5f26:1;
  unsigned int s165c5f27:1;
  unsigned int s165c5f28:1;
  unsigned int s165c5f29:1;
  unsigned int s165c5f30:1;
  unsigned int s165c5f31:1;
  unsigned int s165c5f32:1;
  unsigned int s165c5f33:1;
  unsigned int s165c5f34:1;
  unsigned int s165c5f35:1;
  unsigned int s165c5f36:1;
  unsigned int s165c5f37:1;
  unsigned int s165c5f38:1;
  unsigned int s165c5f39:1;
  unsigned int s165c5f40:1;
  unsigned int s165c5f41:1;
  unsigned int s165c5f42:1;
  unsigned int s165c5f43:1;
  unsigned int s165c5f44:1;
  unsigned int s165c5f45:1;
  unsigned int s165c5f46:1;
  unsigned int s165c5f47:1;
  unsigned int s165c5f48:1;
  unsigned int s165c5f49:1;
  unsigned int s165c5f50:1;
  unsigned int s165c5f51:1;
  unsigned int s165c5f52:1;
  unsigned int s165c5f53:1;
  unsigned int s165c5f54:1;
  unsigned int s165c5f55:1;
  unsigned int s165c5f56:1;
  unsigned int s165c5f57:1;
  unsigned int s165c5f58:1;
  unsigned int s165c5f59:1;
  unsigned int s165c5f60:1;
  unsigned int s165c5f61:1;
  unsigned int s165c5f62:1;
  unsigned int s165c5f63:1;
  unsigned int s165c5f64:1;
  unsigned int s165c5f65:1;
  unsigned int s165c5f66:1;
  unsigned int s165c5f67:1;
  unsigned int s165c5f68:1;
  unsigned int s165c5f69:1;
  unsigned int s165c5f70:1;
  unsigned int s165c5f71:1;
  unsigned int s165c5f72:1;
  unsigned int s165c5f73:1;
  unsigned int s165c5f74:1;
  unsigned int s165c5f75:1;
  unsigned int s165c5f76:1;
  unsigned int s165c5f77:1;
  unsigned int s165c5f78:1;
  unsigned int s165c5f79:1;
  unsigned int s165c5f80:1;
  unsigned int s165c5f81:1;
  unsigned int s165c5f82:1;
  unsigned int s165c5f83:1;
  int s165c5f84[5];
  void *s165c5f85[2];
  int s165c5f86[3];
  ::S165C7_nt s165c5f87;
  ::S165C7_nt s165c5f88;
  ::S165C7_nt s165c5f89;
  ::S165C14 s165c5f90;
  ::S165C14 s165c5f91;
  int s165c5f92;
  void *s165c5f93[2];
  ::S165C16_nt s165c5f94;
  ::S165C16_nt s165c5f95;
  ::S165C16_nt s165c5f96;
  ::S165C16_nt s165c5f97;
  void *s165c5f98;
  ::S165C7_nt s165c5f99;
  ::S165C14 s165c5f100;
  ::S165C16_nt s165c5f101;
  ::S165C16_nt s165c5f102;
  int s165c5f103;
  ::S165C16_nt s165c5f104;
  ::S165C16_nt s165c5f105;
  void *s165c5f106;
  int s165c5f107;
  char s165c5f108;
  ::S165C16_nt s165c5f109;
  ::S165C16_nt s165c5f110;
  void *s165c5f111;
  int s165c5f112;
  void *s165c5f113;
  ::S165C14 s165c5f114;
  ::S165C20 s165c5f115;
  ::S165C20 s165c5f116;
  virtual  ~S165C5_nt(); // _ZN9S165C5_ntD1Ev
  virtual void  v67(); // _ZN9S165C5_nt3v67Ev
  virtual void  v68(); // _ZN9S165C5_nt3v68Ev
  virtual void  v69(); // _ZN9S165C5_nt3v69Ev
  virtual void  v70(); // _ZN9S165C5_nt3v70Ev
  virtual void  v71(); // _ZN9S165C5_nt3v71Ev
  virtual void  v72(); // _ZN9S165C5_nt3v72Ev
  virtual void  v73(); // _ZN9S165C5_nt3v73Ev
  virtual void  v74(); // _ZN9S165C5_nt3v74Ev
  virtual void  v75(); // _ZN9S165C5_nt3v75Ev
  virtual void  v76(); // _ZN9S165C5_nt3v76Ev
  virtual void  v77(); // _ZN9S165C5_nt3v77Ev
  virtual void  v78(); // _ZN9S165C5_nt3v78Ev
  virtual void  v79(); // _ZN9S165C5_nt3v79Ev
  virtual void  v80(); // _ZN9S165C5_nt3v80Ev
  virtual void  v81(); // _ZN9S165C5_nt3v81Ev
  virtual void  v82(); // _ZN9S165C5_nt3v82Ev
  virtual void  v83(); // _ZN9S165C5_nt3v83Ev
  virtual void  v84(); // _ZN9S165C5_nt3v84Ev
  virtual void  v85(); // _ZN9S165C5_nt3v85Ev
  virtual void  v86(); // _ZN9S165C5_nt3v86Ev
  virtual void  v87(); // _ZN9S165C5_nt3v87Ev
  virtual void  v88(); // _ZN9S165C5_nt3v88Ev
  virtual void  v89(); // _ZN9S165C5_nt3v89Ev
  virtual void  v90(); // _ZN9S165C5_nt3v90Ev
  virtual void  v91(); // _ZN9S165C5_nt3v91Ev
  virtual void  v92(); // _ZN9S165C5_nt3v92Ev
  virtual void  v93(); // _ZN9S165C5_nt3v93Ev
  virtual void  v94(); // _ZN9S165C5_nt3v94Ev
  virtual void  v95(); // _ZN9S165C5_nt3v95Ev
  virtual void  v96(); // _ZN9S165C5_nt3v96Ev
  virtual void  v97(); // _ZN9S165C5_nt3v97Ev
  virtual void  v98(); // _ZN9S165C5_nt3v98Ev
  virtual void  v99(); // _ZN9S165C5_nt3v99Ev
  virtual void  v100(); // _ZN9S165C5_nt4v100Ev
  virtual void  v101(); // _ZN9S165C5_nt4v101Ev
  virtual void  v102(); // _ZN9S165C5_nt4v102Ev
  virtual void  v103(); // _ZN9S165C5_nt4v103Ev
  virtual void  v104(); // _ZN9S165C5_nt4v104Ev
  virtual void  v105(); // _ZN9S165C5_nt4v105Ev
  virtual void  v106(); // _ZN9S165C5_nt4v106Ev
  virtual void  v107(); // _ZN9S165C5_nt4v107Ev
  virtual void  v108(); // _ZN9S165C5_nt4v108Ev
  virtual void  v109(); // _ZN9S165C5_nt4v109Ev
  virtual void  v110(); // _ZN9S165C5_nt4v110Ev
  virtual void  v111(); // _ZN9S165C5_nt4v111Ev
  virtual void  v112(); // _ZN9S165C5_nt4v112Ev
  virtual void  v113(); // _ZN9S165C5_nt4v113Ev
  virtual void  v114(); // _ZN9S165C5_nt4v114Ev
  virtual void  v115(); // _ZN9S165C5_nt4v115Ev
  virtual void  v116(); // _ZN9S165C5_nt4v116Ev
  virtual void  v117(); // _ZN9S165C5_nt4v117Ev
  virtual void  v118(); // _ZN9S165C5_nt4v118Ev
  virtual void  v119(); // _ZN9S165C5_nt4v119Ev
  virtual void  v120(); // _ZN9S165C5_nt4v120Ev
  virtual void  v121(); // _ZN9S165C5_nt4v121Ev
  virtual void  v122(); // _ZN9S165C5_nt4v122Ev
  virtual void  v123(); // _ZN9S165C5_nt4v123Ev
  virtual void  v124(); // _ZN9S165C5_nt4v124Ev
  virtual void  v125(); // _ZN9S165C5_nt4v125Ev
  virtual void  v126(); // _ZN9S165C5_nt4v126Ev
  virtual void  v127(); // _ZN9S165C5_nt4v127Ev
  virtual void  v128(); // _ZN9S165C5_nt4v128Ev
  virtual void  v129(); // _ZN9S165C5_nt4v129Ev
  virtual void  v130(); // _ZN9S165C5_nt4v130Ev
  virtual void  v131(); // _ZN9S165C5_nt4v131Ev
  virtual void  v132(); // _ZN9S165C5_nt4v132Ev
  virtual void  v133(); // _ZN9S165C5_nt4v133Ev
  virtual void  v134(); // _ZN9S165C5_nt4v134Ev
  virtual void  v135(); // _ZN9S165C5_nt4v135Ev
  virtual void  v136(); // _ZN9S165C5_nt4v136Ev
  virtual void  v137(); // _ZN9S165C5_nt4v137Ev
  virtual void  v138(); // _ZN9S165C5_nt4v138Ev
  virtual void  v139(); // _ZN9S165C5_nt4v139Ev
  virtual void  v140(); // _ZN9S165C5_nt4v140Ev
  virtual void  v141(); // _ZN9S165C5_nt4v141Ev
  virtual void  v142(); // _ZN9S165C5_nt4v142Ev
  virtual void  v143(); // _ZN9S165C5_nt4v143Ev
  virtual void  v144(); // _ZN9S165C5_nt4v144Ev
  virtual void  v145(); // _ZN9S165C5_nt4v145Ev
  virtual void  v146(); // _ZN9S165C5_nt4v146Ev
  virtual void  v147(); // _ZN9S165C5_nt4v147Ev
  virtual void  v148(); // _ZN9S165C5_nt4v148Ev
  virtual void  v149(); // _ZN9S165C5_nt4v149Ev
  virtual void  v150(); // _ZN9S165C5_nt4v150Ev
  virtual void  v151(); // _ZN9S165C5_nt4v151Ev
  virtual void  v152(); // _ZN9S165C5_nt4v152Ev
  virtual void  v153(); // _ZN9S165C5_nt4v153Ev
  virtual void  v154(); // _ZN9S165C5_nt4v154Ev
  virtual void  v155(); // _ZN9S165C5_nt4v155Ev
  virtual void  v156(); // _ZN9S165C5_nt4v156Ev
  virtual void  v157(); // _ZN9S165C5_nt4v157Ev
  virtual void  v158(); // _ZN9S165C5_nt4v158Ev
  virtual void  v159(); // _ZN9S165C5_nt4v159Ev
  virtual void  v160(); // _ZN9S165C5_nt4v160Ev
  virtual void  v161(); // _ZN9S165C5_nt4v161Ev
  virtual void  v162(); // _ZN9S165C5_nt4v162Ev
  virtual void  v163(); // _ZN9S165C5_nt4v163Ev
  virtual void  v164(); // _ZN9S165C5_nt4v164Ev
  virtual void  v165(); // _ZN9S165C5_nt4v165Ev
  virtual void  v166(); // _ZN9S165C5_nt4v166Ev
  virtual void  v167(); // _ZN9S165C5_nt4v167Ev
  virtual void  v168(); // _ZN9S165C5_nt4v168Ev
  virtual void  v169(); // _ZN9S165C5_nt4v169Ev
  virtual void  v170(); // _ZN9S165C5_nt4v170Ev
  virtual void  v171(); // _ZN9S165C5_nt4v171Ev
  virtual void  v172(); // _ZN9S165C5_nt4v172Ev
  virtual void  v173(); // _ZN9S165C5_nt4v173Ev
  virtual void  v174(); // _ZN9S165C5_nt4v174Ev
  virtual void  v175(); // _ZN9S165C5_nt4v175Ev
  virtual void  v176(); // _ZN9S165C5_nt4v176Ev
  virtual void  v177(); // _ZN9S165C5_nt4v177Ev
  virtual void  v178(); // _ZN9S165C5_nt4v178Ev
  virtual void  v179(); // _ZN9S165C5_nt4v179Ev
  virtual void  v180(); // _ZN9S165C5_nt4v180Ev
  virtual void  v181(); // _ZN9S165C5_nt4v181Ev
  virtual void  v182(); // _ZN9S165C5_nt4v182Ev
  virtual void  v183(); // _ZN9S165C5_nt4v183Ev
  virtual void  v184(); // _ZN9S165C5_nt4v184Ev
  virtual void  v185(); // _ZN9S165C5_nt4v185Ev
  virtual void  v186(); // _ZN9S165C5_nt4v186Ev
  virtual void  v187(); // _ZN9S165C5_nt4v187Ev
  virtual void  v188(); // _ZN9S165C5_nt4v188Ev
  virtual void  v189(); // _ZN9S165C5_nt4v189Ev
  virtual void  v190(); // _ZN9S165C5_nt4v190Ev
  virtual void  v191(); // _ZN9S165C5_nt4v191Ev
  virtual void  v192(); // _ZN9S165C5_nt4v192Ev
  virtual void  v193(); // _ZN9S165C5_nt4v193Ev
  virtual void  v194(); // _ZN9S165C5_nt4v194Ev
  virtual void  v195(); // _ZN9S165C5_nt4v195Ev
  virtual void  v196(); // _ZN9S165C5_nt4v196Ev
  virtual void  v197(); // _ZN9S165C5_nt4v197Ev
  virtual void  v198(); // _ZN9S165C5_nt4v198Ev
  virtual void  v199(); // _ZN9S165C5_nt4v199Ev
  virtual void  v200(); // _ZN9S165C5_nt4v200Ev
  virtual void  v201(); // _ZN9S165C5_nt4v201Ev
  virtual void  v202(); // _ZN9S165C5_nt4v202Ev
  virtual void  v203(); // _ZN9S165C5_nt4v203Ev
  virtual void  v204(); // _ZN9S165C5_nt4v204Ev
  virtual void  v205(); // _ZN9S165C5_nt4v205Ev
  virtual void  v206(); // _ZN9S165C5_nt4v206Ev
  virtual void  v207(); // _ZN9S165C5_nt4v207Ev
  virtual void  v208(); // _ZN9S165C5_nt4v208Ev
  virtual void  v209(); // _ZN9S165C5_nt4v209Ev
  S165C5_nt(); // tgen
};
//SIG(-1 S165C5_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}


 S165C5_nt ::~S165C5_nt(){ note_dtor("S165C5_nt", this);}
void  S165C5_nt ::v67(){vfunc_called(this, "_ZN9S165C5_nt3v67Ev");}
void  S165C5_nt ::v68(){vfunc_called(this, "_ZN9S165C5_nt3v68Ev");}
void  S165C5_nt ::v69(){vfunc_called(this, "_ZN9S165C5_nt3v69Ev");}
void  S165C5_nt ::v70(){vfunc_called(this, "_ZN9S165C5_nt3v70Ev");}
void  S165C5_nt ::v71(){vfunc_called(this, "_ZN9S165C5_nt3v71Ev");}
void  S165C5_nt ::v72(){vfunc_called(this, "_ZN9S165C5_nt3v72Ev");}
void  S165C5_nt ::v73(){vfunc_called(this, "_ZN9S165C5_nt3v73Ev");}
void  S165C5_nt ::v74(){vfunc_called(this, "_ZN9S165C5_nt3v74Ev");}
void  S165C5_nt ::v75(){vfunc_called(this, "_ZN9S165C5_nt3v75Ev");}
void  S165C5_nt ::v76(){vfunc_called(this, "_ZN9S165C5_nt3v76Ev");}
void  S165C5_nt ::v77(){vfunc_called(this, "_ZN9S165C5_nt3v77Ev");}
void  S165C5_nt ::v78(){vfunc_called(this, "_ZN9S165C5_nt3v78Ev");}
void  S165C5_nt ::v79(){vfunc_called(this, "_ZN9S165C5_nt3v79Ev");}
void  S165C5_nt ::v80(){vfunc_called(this, "_ZN9S165C5_nt3v80Ev");}
void  S165C5_nt ::v81(){vfunc_called(this, "_ZN9S165C5_nt3v81Ev");}
void  S165C5_nt ::v82(){vfunc_called(this, "_ZN9S165C5_nt3v82Ev");}
void  S165C5_nt ::v83(){vfunc_called(this, "_ZN9S165C5_nt3v83Ev");}
void  S165C5_nt ::v84(){vfunc_called(this, "_ZN9S165C5_nt3v84Ev");}
void  S165C5_nt ::v85(){vfunc_called(this, "_ZN9S165C5_nt3v85Ev");}
void  S165C5_nt ::v86(){vfunc_called(this, "_ZN9S165C5_nt3v86Ev");}
void  S165C5_nt ::v87(){vfunc_called(this, "_ZN9S165C5_nt3v87Ev");}
void  S165C5_nt ::v88(){vfunc_called(this, "_ZN9S165C5_nt3v88Ev");}
void  S165C5_nt ::v89(){vfunc_called(this, "_ZN9S165C5_nt3v89Ev");}
void  S165C5_nt ::v90(){vfunc_called(this, "_ZN9S165C5_nt3v90Ev");}
void  S165C5_nt ::v91(){vfunc_called(this, "_ZN9S165C5_nt3v91Ev");}
void  S165C5_nt ::v92(){vfunc_called(this, "_ZN9S165C5_nt3v92Ev");}
void  S165C5_nt ::v93(){vfunc_called(this, "_ZN9S165C5_nt3v93Ev");}
void  S165C5_nt ::v94(){vfunc_called(this, "_ZN9S165C5_nt3v94Ev");}
void  S165C5_nt ::v95(){vfunc_called(this, "_ZN9S165C5_nt3v95Ev");}
void  S165C5_nt ::v96(){vfunc_called(this, "_ZN9S165C5_nt3v96Ev");}
void  S165C5_nt ::v97(){vfunc_called(this, "_ZN9S165C5_nt3v97Ev");}
void  S165C5_nt ::v98(){vfunc_called(this, "_ZN9S165C5_nt3v98Ev");}
void  S165C5_nt ::v99(){vfunc_called(this, "_ZN9S165C5_nt3v99Ev");}
void  S165C5_nt ::v100(){vfunc_called(this, "_ZN9S165C5_nt4v100Ev");}
void  S165C5_nt ::v101(){vfunc_called(this, "_ZN9S165C5_nt4v101Ev");}
void  S165C5_nt ::v102(){vfunc_called(this, "_ZN9S165C5_nt4v102Ev");}
void  S165C5_nt ::v103(){vfunc_called(this, "_ZN9S165C5_nt4v103Ev");}
void  S165C5_nt ::v104(){vfunc_called(this, "_ZN9S165C5_nt4v104Ev");}
void  S165C5_nt ::v105(){vfunc_called(this, "_ZN9S165C5_nt4v105Ev");}
void  S165C5_nt ::v106(){vfunc_called(this, "_ZN9S165C5_nt4v106Ev");}
void  S165C5_nt ::v107(){vfunc_called(this, "_ZN9S165C5_nt4v107Ev");}
void  S165C5_nt ::v108(){vfunc_called(this, "_ZN9S165C5_nt4v108Ev");}
void  S165C5_nt ::v109(){vfunc_called(this, "_ZN9S165C5_nt4v109Ev");}
void  S165C5_nt ::v110(){vfunc_called(this, "_ZN9S165C5_nt4v110Ev");}
void  S165C5_nt ::v111(){vfunc_called(this, "_ZN9S165C5_nt4v111Ev");}
void  S165C5_nt ::v112(){vfunc_called(this, "_ZN9S165C5_nt4v112Ev");}
void  S165C5_nt ::v113(){vfunc_called(this, "_ZN9S165C5_nt4v113Ev");}
void  S165C5_nt ::v114(){vfunc_called(this, "_ZN9S165C5_nt4v114Ev");}
void  S165C5_nt ::v115(){vfunc_called(this, "_ZN9S165C5_nt4v115Ev");}
void  S165C5_nt ::v116(){vfunc_called(this, "_ZN9S165C5_nt4v116Ev");}
void  S165C5_nt ::v117(){vfunc_called(this, "_ZN9S165C5_nt4v117Ev");}
void  S165C5_nt ::v118(){vfunc_called(this, "_ZN9S165C5_nt4v118Ev");}
void  S165C5_nt ::v119(){vfunc_called(this, "_ZN9S165C5_nt4v119Ev");}
void  S165C5_nt ::v120(){vfunc_called(this, "_ZN9S165C5_nt4v120Ev");}
void  S165C5_nt ::v121(){vfunc_called(this, "_ZN9S165C5_nt4v121Ev");}
void  S165C5_nt ::v122(){vfunc_called(this, "_ZN9S165C5_nt4v122Ev");}
void  S165C5_nt ::v123(){vfunc_called(this, "_ZN9S165C5_nt4v123Ev");}
void  S165C5_nt ::v124(){vfunc_called(this, "_ZN9S165C5_nt4v124Ev");}
void  S165C5_nt ::v125(){vfunc_called(this, "_ZN9S165C5_nt4v125Ev");}
void  S165C5_nt ::v126(){vfunc_called(this, "_ZN9S165C5_nt4v126Ev");}
void  S165C5_nt ::v127(){vfunc_called(this, "_ZN9S165C5_nt4v127Ev");}
void  S165C5_nt ::v128(){vfunc_called(this, "_ZN9S165C5_nt4v128Ev");}
void  S165C5_nt ::v129(){vfunc_called(this, "_ZN9S165C5_nt4v129Ev");}
void  S165C5_nt ::v130(){vfunc_called(this, "_ZN9S165C5_nt4v130Ev");}
void  S165C5_nt ::v131(){vfunc_called(this, "_ZN9S165C5_nt4v131Ev");}
void  S165C5_nt ::v132(){vfunc_called(this, "_ZN9S165C5_nt4v132Ev");}
void  S165C5_nt ::v133(){vfunc_called(this, "_ZN9S165C5_nt4v133Ev");}
void  S165C5_nt ::v134(){vfunc_called(this, "_ZN9S165C5_nt4v134Ev");}
void  S165C5_nt ::v135(){vfunc_called(this, "_ZN9S165C5_nt4v135Ev");}
void  S165C5_nt ::v136(){vfunc_called(this, "_ZN9S165C5_nt4v136Ev");}
void  S165C5_nt ::v137(){vfunc_called(this, "_ZN9S165C5_nt4v137Ev");}
void  S165C5_nt ::v138(){vfunc_called(this, "_ZN9S165C5_nt4v138Ev");}
void  S165C5_nt ::v139(){vfunc_called(this, "_ZN9S165C5_nt4v139Ev");}
void  S165C5_nt ::v140(){vfunc_called(this, "_ZN9S165C5_nt4v140Ev");}
void  S165C5_nt ::v141(){vfunc_called(this, "_ZN9S165C5_nt4v141Ev");}
void  S165C5_nt ::v142(){vfunc_called(this, "_ZN9S165C5_nt4v142Ev");}
void  S165C5_nt ::v143(){vfunc_called(this, "_ZN9S165C5_nt4v143Ev");}
void  S165C5_nt ::v144(){vfunc_called(this, "_ZN9S165C5_nt4v144Ev");}
void  S165C5_nt ::v145(){vfunc_called(this, "_ZN9S165C5_nt4v145Ev");}
void  S165C5_nt ::v146(){vfunc_called(this, "_ZN9S165C5_nt4v146Ev");}
void  S165C5_nt ::v147(){vfunc_called(this, "_ZN9S165C5_nt4v147Ev");}
void  S165C5_nt ::v148(){vfunc_called(this, "_ZN9S165C5_nt4v148Ev");}
void  S165C5_nt ::v149(){vfunc_called(this, "_ZN9S165C5_nt4v149Ev");}
void  S165C5_nt ::v150(){vfunc_called(this, "_ZN9S165C5_nt4v150Ev");}
void  S165C5_nt ::v151(){vfunc_called(this, "_ZN9S165C5_nt4v151Ev");}
void  S165C5_nt ::v152(){vfunc_called(this, "_ZN9S165C5_nt4v152Ev");}
void  S165C5_nt ::v153(){vfunc_called(this, "_ZN9S165C5_nt4v153Ev");}
void  S165C5_nt ::v154(){vfunc_called(this, "_ZN9S165C5_nt4v154Ev");}
void  S165C5_nt ::v155(){vfunc_called(this, "_ZN9S165C5_nt4v155Ev");}
void  S165C5_nt ::v156(){vfunc_called(this, "_ZN9S165C5_nt4v156Ev");}
void  S165C5_nt ::v157(){vfunc_called(this, "_ZN9S165C5_nt4v157Ev");}
void  S165C5_nt ::v158(){vfunc_called(this, "_ZN9S165C5_nt4v158Ev");}
void  S165C5_nt ::v159(){vfunc_called(this, "_ZN9S165C5_nt4v159Ev");}
void  S165C5_nt ::v160(){vfunc_called(this, "_ZN9S165C5_nt4v160Ev");}
void  S165C5_nt ::v161(){vfunc_called(this, "_ZN9S165C5_nt4v161Ev");}
void  S165C5_nt ::v162(){vfunc_called(this, "_ZN9S165C5_nt4v162Ev");}
void  S165C5_nt ::v163(){vfunc_called(this, "_ZN9S165C5_nt4v163Ev");}
void  S165C5_nt ::v164(){vfunc_called(this, "_ZN9S165C5_nt4v164Ev");}
void  S165C5_nt ::v165(){vfunc_called(this, "_ZN9S165C5_nt4v165Ev");}
void  S165C5_nt ::v166(){vfunc_called(this, "_ZN9S165C5_nt4v166Ev");}
void  S165C5_nt ::v167(){vfunc_called(this, "_ZN9S165C5_nt4v167Ev");}
void  S165C5_nt ::v168(){vfunc_called(this, "_ZN9S165C5_nt4v168Ev");}
void  S165C5_nt ::v169(){vfunc_called(this, "_ZN9S165C5_nt4v169Ev");}
void  S165C5_nt ::v170(){vfunc_called(this, "_ZN9S165C5_nt4v170Ev");}
void  S165C5_nt ::v171(){vfunc_called(this, "_ZN9S165C5_nt4v171Ev");}
void  S165C5_nt ::v172(){vfunc_called(this, "_ZN9S165C5_nt4v172Ev");}
void  S165C5_nt ::v173(){vfunc_called(this, "_ZN9S165C5_nt4v173Ev");}
void  S165C5_nt ::v174(){vfunc_called(this, "_ZN9S165C5_nt4v174Ev");}
void  S165C5_nt ::v175(){vfunc_called(this, "_ZN9S165C5_nt4v175Ev");}
void  S165C5_nt ::v176(){vfunc_called(this, "_ZN9S165C5_nt4v176Ev");}
void  S165C5_nt ::v177(){vfunc_called(this, "_ZN9S165C5_nt4v177Ev");}
void  S165C5_nt ::v178(){vfunc_called(this, "_ZN9S165C5_nt4v178Ev");}
void  S165C5_nt ::v179(){vfunc_called(this, "_ZN9S165C5_nt4v179Ev");}
void  S165C5_nt ::v180(){vfunc_called(this, "_ZN9S165C5_nt4v180Ev");}
void  S165C5_nt ::v181(){vfunc_called(this, "_ZN9S165C5_nt4v181Ev");}
void  S165C5_nt ::v182(){vfunc_called(this, "_ZN9S165C5_nt4v182Ev");}
void  S165C5_nt ::v183(){vfunc_called(this, "_ZN9S165C5_nt4v183Ev");}
void  S165C5_nt ::v184(){vfunc_called(this, "_ZN9S165C5_nt4v184Ev");}
void  S165C5_nt ::v185(){vfunc_called(this, "_ZN9S165C5_nt4v185Ev");}
void  S165C5_nt ::v186(){vfunc_called(this, "_ZN9S165C5_nt4v186Ev");}
void  S165C5_nt ::v187(){vfunc_called(this, "_ZN9S165C5_nt4v187Ev");}
void  S165C5_nt ::v188(){vfunc_called(this, "_ZN9S165C5_nt4v188Ev");}
void  S165C5_nt ::v189(){vfunc_called(this, "_ZN9S165C5_nt4v189Ev");}
void  S165C5_nt ::v190(){vfunc_called(this, "_ZN9S165C5_nt4v190Ev");}
void  S165C5_nt ::v191(){vfunc_called(this, "_ZN9S165C5_nt4v191Ev");}
void  S165C5_nt ::v192(){vfunc_called(this, "_ZN9S165C5_nt4v192Ev");}
void  S165C5_nt ::v193(){vfunc_called(this, "_ZN9S165C5_nt4v193Ev");}
void  S165C5_nt ::v194(){vfunc_called(this, "_ZN9S165C5_nt4v194Ev");}
void  S165C5_nt ::v195(){vfunc_called(this, "_ZN9S165C5_nt4v195Ev");}
void  S165C5_nt ::v196(){vfunc_called(this, "_ZN9S165C5_nt4v196Ev");}
void  S165C5_nt ::v197(){vfunc_called(this, "_ZN9S165C5_nt4v197Ev");}
void  S165C5_nt ::v198(){vfunc_called(this, "_ZN9S165C5_nt4v198Ev");}
void  S165C5_nt ::v199(){vfunc_called(this, "_ZN9S165C5_nt4v199Ev");}
void  S165C5_nt ::v200(){vfunc_called(this, "_ZN9S165C5_nt4v200Ev");}
void  S165C5_nt ::v201(){vfunc_called(this, "_ZN9S165C5_nt4v201Ev");}
void  S165C5_nt ::v202(){vfunc_called(this, "_ZN9S165C5_nt4v202Ev");}
void  S165C5_nt ::v203(){vfunc_called(this, "_ZN9S165C5_nt4v203Ev");}
void  S165C5_nt ::v204(){vfunc_called(this, "_ZN9S165C5_nt4v204Ev");}
void  S165C5_nt ::v205(){vfunc_called(this, "_ZN9S165C5_nt4v205Ev");}
void  S165C5_nt ::v206(){vfunc_called(this, "_ZN9S165C5_nt4v206Ev");}
void  S165C5_nt ::v207(){vfunc_called(this, "_ZN9S165C5_nt4v207Ev");}
void  S165C5_nt ::v208(){vfunc_called(this, "_ZN9S165C5_nt4v208Ev");}
void  S165C5_nt ::v209(){vfunc_called(this, "_ZN9S165C5_nt4v209Ev");}
S165C5_nt ::S165C5_nt(){ note_ctor("S165C5_nt", this);} // tgen

//skip512 S165C5_nt

#else // __cplusplus

extern void _ZN9S165C5_ntC1Ev();
extern void _ZN9S165C5_ntD1Ev();
Name_Map name_map_S165C5_nt[] = {
  NSPAIR(_ZN9S165C5_ntC1Ev),
  NSPAIR(_ZN9S165C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S165C6_nt;
extern VTBL_ENTRY _ZTI9S165C6_nt[];
extern  VTBL_ENTRY _ZTV9S165C6_nt[];
static Base_Class bases_S165C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C6_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 _ZTI9S165C5_nt[];
extern void _ZN9S165C5_ntD1Ev();
extern void _ZN9S165C5_ntD0Ev();
extern void _ZN9S165C6_nt2v3Ev();
extern void _ZN9S165C6_nt2v4Ev();
extern void _ZN9S165C6_nt2v5Ev();
extern void _ZN9S165C6_nt2v6Ev();
extern void _ZN9S165C6_nt2v7Ev();
extern void _ZN9S165C6_nt2v8Ev();
extern void _ZN9S165C6_nt2v9Ev();
extern void _ZN9S165C6_nt3v10Ev();
extern void _ZN9S165C6_nt3v11Ev();
extern void _ZN9S165C6_nt3v12Ev();
extern void _ZN9S165C6_nt3v13Ev();
extern void _ZN9S165C6_nt3v14Ev();
extern void _ZN9S165C6_nt3v15Ev();
extern void _ZN9S165C6_nt3v16Ev();
extern void _ZN9S165C6_nt3v17Ev();
extern void _ZN9S165C6_nt3v18Ev();
extern void _ZN9S165C6_nt3v19Ev();
extern void _ZN9S165C6_nt3v20Ev();
extern void _ZN9S165C6_nt3v21Ev();
extern void _ZN9S165C6_nt3v22Ev();
extern void _ZN9S165C6_nt3v23Ev();
extern void _ZN9S165C6_nt3v24Ev();
extern void _ZN9S165C6_nt3v25Ev();
extern void _ZN9S165C6_nt3v26Ev();
extern void _ZN9S165C6_nt3v27Ev();
extern void _ZN9S165C6_nt3v28Ev();
extern void _ZN9S165C6_nt3v29Ev();
extern void _ZN9S165C6_nt3v30Ev();
extern void _ZN9S165C6_nt3v31Ev();
extern void _ZN9S165C6_nt3v32Ev();
extern void _ZN9S165C6_nt3v33Ev();
extern void _ZN9S165C6_nt3v34Ev();
extern void _ZN9S165C6_nt3v35Ev();
extern void _ZN9S165C6_nt3v36Ev();
extern void _ZN9S165C6_nt3v37Ev();
extern void _ZN9S165C6_nt3v38Ev();
extern void _ZN9S165C6_nt3v39Ev();
extern void _ZN9S165C6_nt3v40Ev();
extern void _ZN9S165C6_nt3v41Ev();
extern void _ZN9S165C6_nt3v42Ev();
extern void _ZN9S165C6_nt3v43Ev();
extern void _ZN9S165C6_nt3v44Ev();
extern void _ZN9S165C6_nt3v45Ev();
extern void _ZN9S165C6_nt3v46Ev();
extern void _ZN9S165C6_nt3v47Ev();
extern void _ZN9S165C6_nt3v48Ev();
extern void _ZN9S165C6_nt3v49Ev();
extern void _ZN9S165C6_nt3v50Ev();
extern void _ZN9S165C6_nt3v51Ev();
extern void _ZN9S165C6_nt3v52Ev();
extern void _ZN9S165C6_nt3v53Ev();
extern void _ZN9S165C6_nt3v54Ev();
extern void _ZN9S165C6_nt3v55Ev();
extern void _ZN9S165C6_nt3v56Ev();
extern void _ZN9S165C6_nt3v57Ev();
extern void _ZN9S165C6_nt3v58Ev();
extern void _ZN9S165C6_nt3v59Ev();
extern void _ZN9S165C6_nt3v60Ev();
extern void _ZN9S165C6_nt3v61Ev();
extern void _ZN9S165C6_nt3v62Ev();
extern void _ZN9S165C6_nt3v63Ev();
extern void _ZN9S165C6_nt3v64Ev();
extern void _ZN9S165C6_nt3v65Ev();
extern void _ZN9S165C6_nt3v66Ev();
extern void _ZN9S165C5_nt3v67Ev();
extern void _ZN9S165C5_nt3v68Ev();
extern void _ZN9S165C5_nt3v69Ev();
extern void _ZN9S165C5_nt3v70Ev();
extern void _ZN9S165C5_nt3v71Ev();
extern void _ZN9S165C5_nt3v72Ev();
extern void _ZN9S165C5_nt3v73Ev();
extern void _ZN9S165C5_nt3v74Ev();
extern void _ZN9S165C5_nt3v75Ev();
extern void _ZN9S165C5_nt3v76Ev();
extern void _ZN9S165C5_nt3v77Ev();
extern void _ZN9S165C5_nt3v78Ev();
extern void _ZN9S165C5_nt3v79Ev();
extern void _ZN9S165C5_nt3v80Ev();
extern void _ZN9S165C5_nt3v81Ev();
extern void _ZN9S165C5_nt3v82Ev();
extern void _ZN9S165C5_nt3v83Ev();
extern void _ZN9S165C5_nt3v84Ev();
extern void _ZN9S165C5_nt3v85Ev();
extern void _ZN9S165C5_nt3v86Ev();
extern void _ZN9S165C5_nt3v87Ev();
extern void _ZN9S165C5_nt3v88Ev();
extern void _ZN9S165C5_nt3v89Ev();
extern void _ZN9S165C5_nt3v90Ev();
extern void _ZN9S165C5_nt3v91Ev();
extern void _ZN9S165C5_nt3v92Ev();
extern void _ZN9S165C5_nt3v93Ev();
extern void _ZN9S165C5_nt3v94Ev();
extern void _ZN9S165C5_nt3v95Ev();
extern void _ZN9S165C5_nt3v96Ev();
extern void _ZN9S165C5_nt3v97Ev();
extern void _ZN9S165C5_nt3v98Ev();
extern void _ZN9S165C5_nt3v99Ev();
extern void _ZN9S165C5_nt4v100Ev();
extern void _ZN9S165C5_nt4v101Ev();
extern void _ZN9S165C5_nt4v102Ev();
extern void _ZN9S165C5_nt4v103Ev();
extern void _ZN9S165C5_nt4v104Ev();
extern void _ZN9S165C5_nt4v105Ev();
extern void _ZN9S165C5_nt4v106Ev();
extern void _ZN9S165C5_nt4v107Ev();
extern void _ZN9S165C5_nt4v108Ev();
extern void _ZN9S165C5_nt4v109Ev();
extern void _ZN9S165C5_nt4v110Ev();
extern void _ZN9S165C5_nt4v111Ev();
extern void _ZN9S165C5_nt4v112Ev();
extern void _ZN9S165C5_nt4v113Ev();
extern void _ZN9S165C5_nt4v114Ev();
extern void _ZN9S165C5_nt4v115Ev();
extern void _ZN9S165C5_nt4v116Ev();
extern void _ZN9S165C5_nt4v117Ev();
extern void _ZN9S165C5_nt4v118Ev();
extern void _ZN9S165C5_nt4v119Ev();
extern void _ZN9S165C5_nt4v120Ev();
extern void _ZN9S165C5_nt4v121Ev();
extern void _ZN9S165C5_nt4v122Ev();
extern void _ZN9S165C5_nt4v123Ev();
extern void _ZN9S165C5_nt4v124Ev();
extern void _ZN9S165C5_nt4v125Ev();
extern void _ZN9S165C5_nt4v126Ev();
extern void _ZN9S165C5_nt4v127Ev();
extern void _ZN9S165C5_nt4v128Ev();
extern void _ZN9S165C5_nt4v129Ev();
extern void _ZN9S165C5_nt4v130Ev();
extern void _ZN9S165C5_nt4v131Ev();
extern void _ZN9S165C5_nt4v132Ev();
extern void _ZN9S165C5_nt4v133Ev();
extern void _ZN9S165C5_nt4v134Ev();
extern void _ZN9S165C5_nt4v135Ev();
extern void _ZN9S165C5_nt4v136Ev();
extern void _ZN9S165C5_nt4v137Ev();
extern void _ZN9S165C5_nt4v138Ev();
extern void _ZN9S165C5_nt4v139Ev();
extern void _ZN9S165C5_nt4v140Ev();
extern void _ZN9S165C5_nt4v141Ev();
extern void _ZN9S165C5_nt4v142Ev();
extern void _ZN9S165C5_nt4v143Ev();
extern void _ZN9S165C5_nt4v144Ev();
extern void _ZN9S165C5_nt4v145Ev();
extern void _ZN9S165C5_nt4v146Ev();
extern void _ZN9S165C5_nt4v147Ev();
extern void _ZN9S165C5_nt4v148Ev();
extern void _ZN9S165C5_nt4v149Ev();
extern void _ZN9S165C5_nt4v150Ev();
extern void _ZN9S165C5_nt4v151Ev();
extern void _ZN9S165C5_nt4v152Ev();
extern void _ZN9S165C5_nt4v153Ev();
extern void _ZN9S165C5_nt4v154Ev();
extern void _ZN9S165C5_nt4v155Ev();
extern void _ZN9S165C5_nt4v156Ev();
extern void _ZN9S165C5_nt4v157Ev();
extern void _ZN9S165C5_nt4v158Ev();
extern void _ZN9S165C5_nt4v159Ev();
extern void _ZN9S165C5_nt4v160Ev();
extern void _ZN9S165C5_nt4v161Ev();
extern void _ZN9S165C5_nt4v162Ev();
extern void _ZN9S165C5_nt4v163Ev();
extern void _ZN9S165C5_nt4v164Ev();
extern void _ZN9S165C5_nt4v165Ev();
extern void _ZN9S165C5_nt4v166Ev();
extern void _ZN9S165C5_nt4v167Ev();
extern void _ZN9S165C5_nt4v168Ev();
extern void _ZN9S165C5_nt4v169Ev();
extern void _ZN9S165C5_nt4v170Ev();
extern void _ZN9S165C5_nt4v171Ev();
extern void _ZN9S165C5_nt4v172Ev();
extern void _ZN9S165C5_nt4v173Ev();
extern void _ZN9S165C5_nt4v174Ev();
extern void _ZN9S165C5_nt4v175Ev();
extern void _ZN9S165C5_nt4v176Ev();
extern void _ZN9S165C5_nt4v177Ev();
extern void _ZN9S165C5_nt4v178Ev();
extern void _ZN9S165C5_nt4v179Ev();
extern void _ZN9S165C5_nt4v180Ev();
extern void _ZN9S165C5_nt4v181Ev();
extern void _ZN9S165C5_nt4v182Ev();
extern void _ZN9S165C5_nt4v183Ev();
extern void _ZN9S165C5_nt4v184Ev();
extern void _ZN9S165C5_nt4v185Ev();
extern void _ZN9S165C5_nt4v186Ev();
extern void _ZN9S165C5_nt4v187Ev();
extern void _ZN9S165C5_nt4v188Ev();
extern void _ZN9S165C5_nt4v189Ev();
extern void _ZN9S165C5_nt4v190Ev();
extern void _ZN9S165C5_nt4v191Ev();
extern void _ZN9S165C5_nt4v192Ev();
extern void _ZN9S165C5_nt4v193Ev();
extern void _ZN9S165C5_nt4v194Ev();
extern void _ZN9S165C5_nt4v195Ev();
extern void _ZN9S165C5_nt4v196Ev();
extern void _ZN9S165C5_nt4v197Ev();
extern void _ZN9S165C5_nt4v198Ev();
extern void _ZN9S165C5_nt4v199Ev();
extern void _ZN9S165C5_nt4v200Ev();
extern void _ZN9S165C5_nt4v201Ev();
extern void _ZN9S165C5_nt4v202Ev();
extern void _ZN9S165C5_nt4v203Ev();
extern void _ZN9S165C5_nt4v204Ev();
extern void _ZN9S165C5_nt4v205Ev();
extern void _ZN9S165C5_nt4v206Ev();
extern void _ZN9S165C5_nt4v207Ev();
extern void _ZN9S165C5_nt4v208Ev();
extern void _ZN9S165C5_nt4v209Ev();
static  VTBL_ENTRY vtc_S165C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S165C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S165C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S165C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v209Ev,
};
extern VTBL_ENTRY _ZTI9S165C5_nt[];
VTBL_ENTRY *P__ZTI9S165C5_nt = _ZTI9S165C5_nt; 
extern  VTBL_ENTRY _ZTV9S165C5_nt[];
Class_Descriptor cd_S165C5_nt = {  "S165C5_nt", // class name
  bases_S165C5_nt, 1,
  &(vtc_S165C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI9S165C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S165C5_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  S165C26  : S165C10_nt {
};
//SIG(-1 S165C26) C1{ BC2{ m Fp Fi[2]}}



static void Test_S165C26()
{
  extern Class_Descriptor cd_S165C26;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S165C26, buf);
    S165C26 &lv = *(new (buf) S165C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S165C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S165C26)");
    check_base_class_offset(lv, (S165C10_nt*), 0, "S165C26");
    test_class_info(&lv, &cd_S165C26);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS165C26(Test_S165C26, "S165C26", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
static Base_Class bases_S165C26[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S165C26 = {  "S165C26", // class name
  bases_S165C26, 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  S165C25  : S165C26 {
};
//SIG(-1 S165C25) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S165C25()
{
  extern Class_Descriptor cd_S165C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S165C25, buf);
    S165C25 &lv = *(new (buf) S165C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S165C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S165C25)");
    check_base_class_offset(lv, (S165C10_nt*)(S165C26*), 0, "S165C25");
    check_base_class_offset(lv, (S165C26*), 0, "S165C25");
    test_class_info(&lv, &cd_S165C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS165C25(Test_S165C25, "S165C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
extern Class_Descriptor cd_S165C26;
static Base_Class bases_S165C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S165C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S165C25 = {  "S165C25", // class name
  bases_S165C25, 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  S165C24_nt  : S165C25 {
};
//SIG(-1 S165C24_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S165C24_nt

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
extern Class_Descriptor cd_S165C26;
extern Class_Descriptor cd_S165C25;
static Base_Class bases_S165C24_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S165C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S165C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S165C4_nt  : S165C5_nt {
  int s165c4f0[3];
  void *s165c4f1[2];
  int s165c4f2;
  void *s165c4f3[2];
  unsigned int s165c4f4:1;
  unsigned int s165c4f5:1;
  unsigned int s165c4f6:1;
  unsigned int s165c4f7:1;
  unsigned int s165c4f8:1;
  unsigned int s165c4f9:1;
  unsigned int s165c4f10:1;
  unsigned int s165c4f11:1;
  unsigned int s165c4f12:1;
  unsigned int s165c4f13:1;
  unsigned int s165c4f14:1;
  unsigned int s165c4f15:1;
  unsigned int s165c4f16:1;
  unsigned int s165c4f17:1;
  unsigned int s165c4f18:1;
  unsigned int s165c4f19:1;
  unsigned int s165c4f20:1;
  unsigned int s165c4f21:1;
  unsigned int s165c4f22:1;
  unsigned int s165c4f23:1;
  unsigned int s165c4f24:1;
  unsigned int s165c4f25:1;
  unsigned int s165c4f26:1;
  unsigned int s165c4f27:1;
  unsigned int s165c4f28:1;
  unsigned int s165c4f29:1;
  unsigned int s165c4f30:1;
  unsigned int s165c4f31:1;
  unsigned int s165c4f32:1;
  unsigned int s165c4f33:1;
  unsigned int s165c4f34:1;
  unsigned int s165c4f35:1;
  unsigned int s165c4f36:1;
  unsigned int s165c4f37:1;
  unsigned int s165c4f38:1;
  unsigned int s165c4f39:1;
  unsigned int s165c4f40:1;
  unsigned int s165c4f41:1;
  unsigned int s165c4f42:1;
  unsigned int s165c4f43:1;
  unsigned int s165c4f44:1;
  unsigned int s165c4f45:1;
  unsigned int s165c4f46:1;
  unsigned int s165c4f47:1;
  unsigned int s165c4f48:1;
  unsigned int s165c4f49:1;
  unsigned int s165c4f50:1;
  unsigned int s165c4f51:1;
  unsigned int s165c4f52:1;
  unsigned int s165c4f53:1;
  int s165c4f54[5];
  char s165c4f55[4];
  int s165c4f56[10];
  void *s165c4f57[2];
  int s165c4f58[4];
  ::S165C16_nt s165c4f59;
  int s165c4f60[19];
  ::S165C16_nt s165c4f61;
  int s165c4f62[2];
  void *s165c4f63;
  int s165c4f64[5];
  ::S165C16_nt s165c4f65;
  ::S165C16_nt s165c4f66;
  int s165c4f67;
  void *s165c4f68;
  int s165c4f69;
  ::S165C16_nt s165c4f70;
  int s165c4f71;
  void *s165c4f72;
  int s165c4f73[3];
  ::S165C24_nt s165c4f74;
  void *s165c4f75[3];
  ::S165C7_nt s165c4f76;
  ::S165C7_nt s165c4f77;
  void *s165c4f78;
  int s165c4f79;
  ::S165C16_nt s165c4f80;
  void *s165c4f81;
  ::S165C16_nt s165c4f82;
  void *s165c4f83[2];
  int s165c4f84[2];
  void *s165c4f85;
  int s165c4f86[2];
  void *s165c4f87;
  int s165c4f88[3];
  void *s165c4f89[3];
  ::S165C16_nt s165c4f90;
  ::S165C16_nt s165c4f91;
  int s165c4f92;
  void *s165c4f93[2];
  int s165c4f94;
  virtual  ~S165C4_nt(); // _ZN9S165C4_ntD1Ev
  virtual void  v210(); // _ZN9S165C4_nt4v210Ev
  virtual void  v211(); // _ZN9S165C4_nt4v211Ev
  virtual void  v212(); // _ZN9S165C4_nt4v212Ev
  virtual void  v213(); // _ZN9S165C4_nt4v213Ev
  virtual void  v214(); // _ZN9S165C4_nt4v214Ev
  virtual void  v215(); // _ZN9S165C4_nt4v215Ev
  virtual void  v216(); // _ZN9S165C4_nt4v216Ev
  virtual void  v217(); // _ZN9S165C4_nt4v217Ev
  virtual void  v218(); // _ZN9S165C4_nt4v218Ev
  virtual void  v219(); // _ZN9S165C4_nt4v219Ev
  virtual void  v220(); // _ZN9S165C4_nt4v220Ev
  virtual void  v221(); // _ZN9S165C4_nt4v221Ev
  virtual void  v222(); // _ZN9S165C4_nt4v222Ev
  virtual void  v223(); // _ZN9S165C4_nt4v223Ev
  virtual void  v224(); // _ZN9S165C4_nt4v224Ev
  virtual void  v225(); // _ZN9S165C4_nt4v225Ev
  virtual void  v226(); // _ZN9S165C4_nt4v226Ev
  virtual void  v227(); // _ZN9S165C4_nt4v227Ev
  virtual void  v228(); // _ZN9S165C4_nt4v228Ev
  virtual void  v229(); // _ZN9S165C4_nt4v229Ev
  virtual void  v230(); // _ZN9S165C4_nt4v230Ev
  virtual void  v231(); // _ZN9S165C4_nt4v231Ev
  virtual void  v232(); // _ZN9S165C4_nt4v232Ev
  virtual void  v233(); // _ZN9S165C4_nt4v233Ev
  virtual void  v234(); // _ZN9S165C4_nt4v234Ev
  virtual void  v235(); // _ZN9S165C4_nt4v235Ev
  virtual void  v236(); // _ZN9S165C4_nt4v236Ev
  virtual void  v237(); // _ZN9S165C4_nt4v237Ev
  virtual void  v238(); // _ZN9S165C4_nt4v238Ev
  virtual void  v239(); // _ZN9S165C4_nt4v239Ev
  virtual void  v240(); // _ZN9S165C4_nt4v240Ev
  virtual void  v241(); // _ZN9S165C4_nt4v241Ev
  virtual void  v242(); // _ZN9S165C4_nt4v242Ev
  virtual void  v243(); // _ZN9S165C4_nt4v243Ev
  virtual void  v244(); // _ZN9S165C4_nt4v244Ev
  virtual void  v245(); // _ZN9S165C4_nt4v245Ev
  virtual void  v246(); // _ZN9S165C4_nt4v246Ev
  virtual void  v247(); // _ZN9S165C4_nt4v247Ev
  virtual void  v248(); // _ZN9S165C4_nt4v248Ev
  virtual void  v249(); // _ZN9S165C4_nt4v249Ev
  virtual void  v250(); // _ZN9S165C4_nt4v250Ev
  virtual void  v251(); // _ZN9S165C4_nt4v251Ev
  virtual void  v252(); // _ZN9S165C4_nt4v252Ev
  virtual void  v253(); // _ZN9S165C4_nt4v253Ev
  virtual void  v254(); // _ZN9S165C4_nt4v254Ev
  virtual void  v255(); // _ZN9S165C4_nt4v255Ev
  virtual void  v256(); // _ZN9S165C4_nt4v256Ev
  virtual void  v257(); // _ZN9S165C4_nt4v257Ev
  virtual void  v258(); // _ZN9S165C4_nt4v258Ev
  virtual void  v259(); // _ZN9S165C4_nt4v259Ev
  virtual void  v260(); // _ZN9S165C4_nt4v260Ev
  virtual void  v261(); // _ZN9S165C4_nt4v261Ev
  virtual void  v262(); // _ZN9S165C4_nt4v262Ev
  virtual void  v263(); // _ZN9S165C4_nt4v263Ev
  virtual void  v264(); // _ZN9S165C4_nt4v264Ev
  virtual void  v265(); // _ZN9S165C4_nt4v265Ev
  virtual void  v266(); // _ZN9S165C4_nt4v266Ev
  virtual void  v267(); // _ZN9S165C4_nt4v267Ev
  virtual void  v268(); // _ZN9S165C4_nt4v268Ev
  virtual void  v269(); // _ZN9S165C4_nt4v269Ev
  virtual void  v270(); // _ZN9S165C4_nt4v270Ev
  virtual void  v271(); // _ZN9S165C4_nt4v271Ev
  virtual void  v272(); // _ZN9S165C4_nt4v272Ev
  virtual void  v273(); // _ZN9S165C4_nt4v273Ev
  virtual void  v274(); // _ZN9S165C4_nt4v274Ev
  virtual void  v275(); // _ZN9S165C4_nt4v275Ev
  virtual void  v276(); // _ZN9S165C4_nt4v276Ev
  virtual void  v277(); // _ZN9S165C4_nt4v277Ev
  virtual void  v278(); // _ZN9S165C4_nt4v278Ev
  virtual void  v279(); // _ZN9S165C4_nt4v279Ev
  virtual void  v280(); // _ZN9S165C4_nt4v280Ev
  virtual void  v281(); // _ZN9S165C4_nt4v281Ev
  virtual void  v282(); // _ZN9S165C4_nt4v282Ev
  virtual void  v283(); // _ZN9S165C4_nt4v283Ev
  virtual void  v284(); // _ZN9S165C4_nt4v284Ev
  virtual void  v285(); // _ZN9S165C4_nt4v285Ev
  virtual void  v286(); // _ZN9S165C4_nt4v286Ev
  virtual void  v287(); // _ZN9S165C4_nt4v287Ev
  virtual void  v288(); // _ZN9S165C4_nt4v288Ev
  virtual void  v289(); // _ZN9S165C4_nt4v289Ev
  virtual void  v290(); // _ZN9S165C4_nt4v290Ev
  virtual void  v291(); // _ZN9S165C4_nt4v291Ev
  virtual void  v292(); // _ZN9S165C4_nt4v292Ev
  virtual void  v293(); // _ZN9S165C4_nt4v293Ev
  virtual void  v294(); // _ZN9S165C4_nt4v294Ev
  virtual void  v295(); // _ZN9S165C4_nt4v295Ev
  virtual void  v296(); // _ZN9S165C4_nt4v296Ev
  virtual void  v297(); // _ZN9S165C4_nt4v297Ev
  virtual void  v298(); // _ZN9S165C4_nt4v298Ev
  virtual void  v299(); // _ZN9S165C4_nt4v299Ev
  virtual void  v300(); // _ZN9S165C4_nt4v300Ev
  virtual void  v301(); // _ZN9S165C4_nt4v301Ev
  virtual void  v302(); // _ZN9S165C4_nt4v302Ev
  virtual void  v303(); // _ZN9S165C4_nt4v303Ev
  virtual void  v304(); // _ZN9S165C4_nt4v304Ev
  virtual void  v305(); // _ZN9S165C4_nt4v305Ev
  virtual void  v306(); // _ZN9S165C4_nt4v306Ev
  virtual void  v307(); // _ZN9S165C4_nt4v307Ev
  S165C4_nt(); // tgen
};
//SIG(-1 S165C4_nt) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 v213 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 v227 v228 v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241 v242 v243 v244 v245 v246 v247 v248 v249 v250 v251 v252 v253 v254 v255 v256 v257 v258 v259 v260 v261 v262 v263 v264 v265 v266 v267 v268 v269 v270 v271 v272 v273 v274 v275 v276 v277 v278 v279 v280 v281 v282 v283 v284 v285 v286 v287 v288 v289 v290 v291 v292 v293 v294 v295 v296 v297 v298 v299 v300 v301 v302 v303 v304 v305 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 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 Fi[3] Fp[2] Fi Fp[2] 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] Fc[4] Fi[10] Fp[2] Fi[4] FC11 Fi[19] FC11 Fi[2] Fp Fi[5] FC11 FC11 Fi Fp Fi FC11 Fi Fp Fi[3] FC14{ BC15{ BC16{ BC7}}} Fp[3] FC4 FC4 Fp Fi FC11 Fp FC11 Fp[2] Fi[2] Fp Fi[2] Fp Fi[3] Fp[3] FC11 FC11 Fi Fp[2] Fi}


 S165C4_nt ::~S165C4_nt(){ note_dtor("S165C4_nt", this);}
void  S165C4_nt ::v210(){vfunc_called(this, "_ZN9S165C4_nt4v210Ev");}
void  S165C4_nt ::v211(){vfunc_called(this, "_ZN9S165C4_nt4v211Ev");}
void  S165C4_nt ::v212(){vfunc_called(this, "_ZN9S165C4_nt4v212Ev");}
void  S165C4_nt ::v213(){vfunc_called(this, "_ZN9S165C4_nt4v213Ev");}
void  S165C4_nt ::v214(){vfunc_called(this, "_ZN9S165C4_nt4v214Ev");}
void  S165C4_nt ::v215(){vfunc_called(this, "_ZN9S165C4_nt4v215Ev");}
void  S165C4_nt ::v216(){vfunc_called(this, "_ZN9S165C4_nt4v216Ev");}
void  S165C4_nt ::v217(){vfunc_called(this, "_ZN9S165C4_nt4v217Ev");}
void  S165C4_nt ::v218(){vfunc_called(this, "_ZN9S165C4_nt4v218Ev");}
void  S165C4_nt ::v219(){vfunc_called(this, "_ZN9S165C4_nt4v219Ev");}
void  S165C4_nt ::v220(){vfunc_called(this, "_ZN9S165C4_nt4v220Ev");}
void  S165C4_nt ::v221(){vfunc_called(this, "_ZN9S165C4_nt4v221Ev");}
void  S165C4_nt ::v222(){vfunc_called(this, "_ZN9S165C4_nt4v222Ev");}
void  S165C4_nt ::v223(){vfunc_called(this, "_ZN9S165C4_nt4v223Ev");}
void  S165C4_nt ::v224(){vfunc_called(this, "_ZN9S165C4_nt4v224Ev");}
void  S165C4_nt ::v225(){vfunc_called(this, "_ZN9S165C4_nt4v225Ev");}
void  S165C4_nt ::v226(){vfunc_called(this, "_ZN9S165C4_nt4v226Ev");}
void  S165C4_nt ::v227(){vfunc_called(this, "_ZN9S165C4_nt4v227Ev");}
void  S165C4_nt ::v228(){vfunc_called(this, "_ZN9S165C4_nt4v228Ev");}
void  S165C4_nt ::v229(){vfunc_called(this, "_ZN9S165C4_nt4v229Ev");}
void  S165C4_nt ::v230(){vfunc_called(this, "_ZN9S165C4_nt4v230Ev");}
void  S165C4_nt ::v231(){vfunc_called(this, "_ZN9S165C4_nt4v231Ev");}
void  S165C4_nt ::v232(){vfunc_called(this, "_ZN9S165C4_nt4v232Ev");}
void  S165C4_nt ::v233(){vfunc_called(this, "_ZN9S165C4_nt4v233Ev");}
void  S165C4_nt ::v234(){vfunc_called(this, "_ZN9S165C4_nt4v234Ev");}
void  S165C4_nt ::v235(){vfunc_called(this, "_ZN9S165C4_nt4v235Ev");}
void  S165C4_nt ::v236(){vfunc_called(this, "_ZN9S165C4_nt4v236Ev");}
void  S165C4_nt ::v237(){vfunc_called(this, "_ZN9S165C4_nt4v237Ev");}
void  S165C4_nt ::v238(){vfunc_called(this, "_ZN9S165C4_nt4v238Ev");}
void  S165C4_nt ::v239(){vfunc_called(this, "_ZN9S165C4_nt4v239Ev");}
void  S165C4_nt ::v240(){vfunc_called(this, "_ZN9S165C4_nt4v240Ev");}
void  S165C4_nt ::v241(){vfunc_called(this, "_ZN9S165C4_nt4v241Ev");}
void  S165C4_nt ::v242(){vfunc_called(this, "_ZN9S165C4_nt4v242Ev");}
void  S165C4_nt ::v243(){vfunc_called(this, "_ZN9S165C4_nt4v243Ev");}
void  S165C4_nt ::v244(){vfunc_called(this, "_ZN9S165C4_nt4v244Ev");}
void  S165C4_nt ::v245(){vfunc_called(this, "_ZN9S165C4_nt4v245Ev");}
void  S165C4_nt ::v246(){vfunc_called(this, "_ZN9S165C4_nt4v246Ev");}
void  S165C4_nt ::v247(){vfunc_called(this, "_ZN9S165C4_nt4v247Ev");}
void  S165C4_nt ::v248(){vfunc_called(this, "_ZN9S165C4_nt4v248Ev");}
void  S165C4_nt ::v249(){vfunc_called(this, "_ZN9S165C4_nt4v249Ev");}
void  S165C4_nt ::v250(){vfunc_called(this, "_ZN9S165C4_nt4v250Ev");}
void  S165C4_nt ::v251(){vfunc_called(this, "_ZN9S165C4_nt4v251Ev");}
void  S165C4_nt ::v252(){vfunc_called(this, "_ZN9S165C4_nt4v252Ev");}
void  S165C4_nt ::v253(){vfunc_called(this, "_ZN9S165C4_nt4v253Ev");}
void  S165C4_nt ::v254(){vfunc_called(this, "_ZN9S165C4_nt4v254Ev");}
void  S165C4_nt ::v255(){vfunc_called(this, "_ZN9S165C4_nt4v255Ev");}
void  S165C4_nt ::v256(){vfunc_called(this, "_ZN9S165C4_nt4v256Ev");}
void  S165C4_nt ::v257(){vfunc_called(this, "_ZN9S165C4_nt4v257Ev");}
void  S165C4_nt ::v258(){vfunc_called(this, "_ZN9S165C4_nt4v258Ev");}
void  S165C4_nt ::v259(){vfunc_called(this, "_ZN9S165C4_nt4v259Ev");}
void  S165C4_nt ::v260(){vfunc_called(this, "_ZN9S165C4_nt4v260Ev");}
void  S165C4_nt ::v261(){vfunc_called(this, "_ZN9S165C4_nt4v261Ev");}
void  S165C4_nt ::v262(){vfunc_called(this, "_ZN9S165C4_nt4v262Ev");}
void  S165C4_nt ::v263(){vfunc_called(this, "_ZN9S165C4_nt4v263Ev");}
void  S165C4_nt ::v264(){vfunc_called(this, "_ZN9S165C4_nt4v264Ev");}
void  S165C4_nt ::v265(){vfunc_called(this, "_ZN9S165C4_nt4v265Ev");}
void  S165C4_nt ::v266(){vfunc_called(this, "_ZN9S165C4_nt4v266Ev");}
void  S165C4_nt ::v267(){vfunc_called(this, "_ZN9S165C4_nt4v267Ev");}
void  S165C4_nt ::v268(){vfunc_called(this, "_ZN9S165C4_nt4v268Ev");}
void  S165C4_nt ::v269(){vfunc_called(this, "_ZN9S165C4_nt4v269Ev");}
void  S165C4_nt ::v270(){vfunc_called(this, "_ZN9S165C4_nt4v270Ev");}
void  S165C4_nt ::v271(){vfunc_called(this, "_ZN9S165C4_nt4v271Ev");}
void  S165C4_nt ::v272(){vfunc_called(this, "_ZN9S165C4_nt4v272Ev");}
void  S165C4_nt ::v273(){vfunc_called(this, "_ZN9S165C4_nt4v273Ev");}
void  S165C4_nt ::v274(){vfunc_called(this, "_ZN9S165C4_nt4v274Ev");}
void  S165C4_nt ::v275(){vfunc_called(this, "_ZN9S165C4_nt4v275Ev");}
void  S165C4_nt ::v276(){vfunc_called(this, "_ZN9S165C4_nt4v276Ev");}
void  S165C4_nt ::v277(){vfunc_called(this, "_ZN9S165C4_nt4v277Ev");}
void  S165C4_nt ::v278(){vfunc_called(this, "_ZN9S165C4_nt4v278Ev");}
void  S165C4_nt ::v279(){vfunc_called(this, "_ZN9S165C4_nt4v279Ev");}
void  S165C4_nt ::v280(){vfunc_called(this, "_ZN9S165C4_nt4v280Ev");}
void  S165C4_nt ::v281(){vfunc_called(this, "_ZN9S165C4_nt4v281Ev");}
void  S165C4_nt ::v282(){vfunc_called(this, "_ZN9S165C4_nt4v282Ev");}
void  S165C4_nt ::v283(){vfunc_called(this, "_ZN9S165C4_nt4v283Ev");}
void  S165C4_nt ::v284(){vfunc_called(this, "_ZN9S165C4_nt4v284Ev");}
void  S165C4_nt ::v285(){vfunc_called(this, "_ZN9S165C4_nt4v285Ev");}
void  S165C4_nt ::v286(){vfunc_called(this, "_ZN9S165C4_nt4v286Ev");}
void  S165C4_nt ::v287(){vfunc_called(this, "_ZN9S165C4_nt4v287Ev");}
void  S165C4_nt ::v288(){vfunc_called(this, "_ZN9S165C4_nt4v288Ev");}
void  S165C4_nt ::v289(){vfunc_called(this, "_ZN9S165C4_nt4v289Ev");}
void  S165C4_nt ::v290(){vfunc_called(this, "_ZN9S165C4_nt4v290Ev");}
void  S165C4_nt ::v291(){vfunc_called(this, "_ZN9S165C4_nt4v291Ev");}
void  S165C4_nt ::v292(){vfunc_called(this, "_ZN9S165C4_nt4v292Ev");}
void  S165C4_nt ::v293(){vfunc_called(this, "_ZN9S165C4_nt4v293Ev");}
void  S165C4_nt ::v294(){vfunc_called(this, "_ZN9S165C4_nt4v294Ev");}
void  S165C4_nt ::v295(){vfunc_called(this, "_ZN9S165C4_nt4v295Ev");}
void  S165C4_nt ::v296(){vfunc_called(this, "_ZN9S165C4_nt4v296Ev");}
void  S165C4_nt ::v297(){vfunc_called(this, "_ZN9S165C4_nt4v297Ev");}
void  S165C4_nt ::v298(){vfunc_called(this, "_ZN9S165C4_nt4v298Ev");}
void  S165C4_nt ::v299(){vfunc_called(this, "_ZN9S165C4_nt4v299Ev");}
void  S165C4_nt ::v300(){vfunc_called(this, "_ZN9S165C4_nt4v300Ev");}
void  S165C4_nt ::v301(){vfunc_called(this, "_ZN9S165C4_nt4v301Ev");}
void  S165C4_nt ::v302(){vfunc_called(this, "_ZN9S165C4_nt4v302Ev");}
void  S165C4_nt ::v303(){vfunc_called(this, "_ZN9S165C4_nt4v303Ev");}
void  S165C4_nt ::v304(){vfunc_called(this, "_ZN9S165C4_nt4v304Ev");}
void  S165C4_nt ::v305(){vfunc_called(this, "_ZN9S165C4_nt4v305Ev");}
void  S165C4_nt ::v306(){vfunc_called(this, "_ZN9S165C4_nt4v306Ev");}
void  S165C4_nt ::v307(){vfunc_called(this, "_ZN9S165C4_nt4v307Ev");}
S165C4_nt ::S165C4_nt(){ note_ctor("S165C4_nt", this);} // tgen

//skip512 S165C4_nt

#else // __cplusplus

extern void _ZN9S165C4_ntC1Ev();
extern void _ZN9S165C4_ntD1Ev();
Name_Map name_map_S165C4_nt[] = {
  NSPAIR(_ZN9S165C4_ntC1Ev),
  NSPAIR(_ZN9S165C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S165C6_nt;
extern VTBL_ENTRY _ZTI9S165C6_nt[];
extern  VTBL_ENTRY _ZTV9S165C6_nt[];
extern Class_Descriptor cd_S165C5_nt;
extern VTBL_ENTRY _ZTI9S165C5_nt[];
extern  VTBL_ENTRY _ZTV9S165C5_nt[];
static Base_Class bases_S165C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C6_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_S165C5_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 _ZTI9S165C4_nt[];
extern void _ZN9S165C4_ntD1Ev();
extern void _ZN9S165C4_ntD0Ev();
extern void _ZN9S165C6_nt2v3Ev();
extern void _ZN9S165C6_nt2v4Ev();
extern void _ZN9S165C6_nt2v5Ev();
extern void _ZN9S165C6_nt2v6Ev();
extern void _ZN9S165C6_nt2v7Ev();
extern void _ZN9S165C6_nt2v8Ev();
extern void _ZN9S165C6_nt2v9Ev();
extern void _ZN9S165C6_nt3v10Ev();
extern void _ZN9S165C6_nt3v11Ev();
extern void _ZN9S165C6_nt3v12Ev();
extern void _ZN9S165C6_nt3v13Ev();
extern void _ZN9S165C6_nt3v14Ev();
extern void _ZN9S165C6_nt3v15Ev();
extern void _ZN9S165C6_nt3v16Ev();
extern void _ZN9S165C6_nt3v17Ev();
extern void _ZN9S165C6_nt3v18Ev();
extern void _ZN9S165C6_nt3v19Ev();
extern void _ZN9S165C6_nt3v20Ev();
extern void _ZN9S165C6_nt3v21Ev();
extern void _ZN9S165C6_nt3v22Ev();
extern void _ZN9S165C6_nt3v23Ev();
extern void _ZN9S165C6_nt3v24Ev();
extern void _ZN9S165C6_nt3v25Ev();
extern void _ZN9S165C6_nt3v26Ev();
extern void _ZN9S165C6_nt3v27Ev();
extern void _ZN9S165C6_nt3v28Ev();
extern void _ZN9S165C6_nt3v29Ev();
extern void _ZN9S165C6_nt3v30Ev();
extern void _ZN9S165C6_nt3v31Ev();
extern void _ZN9S165C6_nt3v32Ev();
extern void _ZN9S165C6_nt3v33Ev();
extern void _ZN9S165C6_nt3v34Ev();
extern void _ZN9S165C6_nt3v35Ev();
extern void _ZN9S165C6_nt3v36Ev();
extern void _ZN9S165C6_nt3v37Ev();
extern void _ZN9S165C6_nt3v38Ev();
extern void _ZN9S165C6_nt3v39Ev();
extern void _ZN9S165C6_nt3v40Ev();
extern void _ZN9S165C6_nt3v41Ev();
extern void _ZN9S165C6_nt3v42Ev();
extern void _ZN9S165C6_nt3v43Ev();
extern void _ZN9S165C6_nt3v44Ev();
extern void _ZN9S165C6_nt3v45Ev();
extern void _ZN9S165C6_nt3v46Ev();
extern void _ZN9S165C6_nt3v47Ev();
extern void _ZN9S165C6_nt3v48Ev();
extern void _ZN9S165C6_nt3v49Ev();
extern void _ZN9S165C6_nt3v50Ev();
extern void _ZN9S165C6_nt3v51Ev();
extern void _ZN9S165C6_nt3v52Ev();
extern void _ZN9S165C6_nt3v53Ev();
extern void _ZN9S165C6_nt3v54Ev();
extern void _ZN9S165C6_nt3v55Ev();
extern void _ZN9S165C6_nt3v56Ev();
extern void _ZN9S165C6_nt3v57Ev();
extern void _ZN9S165C6_nt3v58Ev();
extern void _ZN9S165C6_nt3v59Ev();
extern void _ZN9S165C6_nt3v60Ev();
extern void _ZN9S165C6_nt3v61Ev();
extern void _ZN9S165C6_nt3v62Ev();
extern void _ZN9S165C6_nt3v63Ev();
extern void _ZN9S165C6_nt3v64Ev();
extern void _ZN9S165C6_nt3v65Ev();
extern void _ZN9S165C6_nt3v66Ev();
extern void _ZN9S165C5_nt3v67Ev();
extern void _ZN9S165C5_nt3v68Ev();
extern void _ZN9S165C5_nt3v69Ev();
extern void _ZN9S165C5_nt3v70Ev();
extern void _ZN9S165C5_nt3v71Ev();
extern void _ZN9S165C5_nt3v72Ev();
extern void _ZN9S165C5_nt3v73Ev();
extern void _ZN9S165C5_nt3v74Ev();
extern void _ZN9S165C5_nt3v75Ev();
extern void _ZN9S165C5_nt3v76Ev();
extern void _ZN9S165C5_nt3v77Ev();
extern void _ZN9S165C5_nt3v78Ev();
extern void _ZN9S165C5_nt3v79Ev();
extern void _ZN9S165C5_nt3v80Ev();
extern void _ZN9S165C5_nt3v81Ev();
extern void _ZN9S165C5_nt3v82Ev();
extern void _ZN9S165C5_nt3v83Ev();
extern void _ZN9S165C5_nt3v84Ev();
extern void _ZN9S165C5_nt3v85Ev();
extern void _ZN9S165C5_nt3v86Ev();
extern void _ZN9S165C5_nt3v87Ev();
extern void _ZN9S165C5_nt3v88Ev();
extern void _ZN9S165C5_nt3v89Ev();
extern void _ZN9S165C5_nt3v90Ev();
extern void _ZN9S165C5_nt3v91Ev();
extern void _ZN9S165C5_nt3v92Ev();
extern void _ZN9S165C5_nt3v93Ev();
extern void _ZN9S165C5_nt3v94Ev();
extern void _ZN9S165C5_nt3v95Ev();
extern void _ZN9S165C5_nt3v96Ev();
extern void _ZN9S165C5_nt3v97Ev();
extern void _ZN9S165C5_nt3v98Ev();
extern void _ZN9S165C5_nt3v99Ev();
extern void _ZN9S165C5_nt4v100Ev();
extern void _ZN9S165C5_nt4v101Ev();
extern void _ZN9S165C5_nt4v102Ev();
extern void _ZN9S165C5_nt4v103Ev();
extern void _ZN9S165C5_nt4v104Ev();
extern void _ZN9S165C5_nt4v105Ev();
extern void _ZN9S165C5_nt4v106Ev();
extern void _ZN9S165C5_nt4v107Ev();
extern void _ZN9S165C5_nt4v108Ev();
extern void _ZN9S165C5_nt4v109Ev();
extern void _ZN9S165C5_nt4v110Ev();
extern void _ZN9S165C5_nt4v111Ev();
extern void _ZN9S165C5_nt4v112Ev();
extern void _ZN9S165C5_nt4v113Ev();
extern void _ZN9S165C5_nt4v114Ev();
extern void _ZN9S165C5_nt4v115Ev();
extern void _ZN9S165C5_nt4v116Ev();
extern void _ZN9S165C5_nt4v117Ev();
extern void _ZN9S165C5_nt4v118Ev();
extern void _ZN9S165C5_nt4v119Ev();
extern void _ZN9S165C5_nt4v120Ev();
extern void _ZN9S165C5_nt4v121Ev();
extern void _ZN9S165C5_nt4v122Ev();
extern void _ZN9S165C5_nt4v123Ev();
extern void _ZN9S165C5_nt4v124Ev();
extern void _ZN9S165C5_nt4v125Ev();
extern void _ZN9S165C5_nt4v126Ev();
extern void _ZN9S165C5_nt4v127Ev();
extern void _ZN9S165C5_nt4v128Ev();
extern void _ZN9S165C5_nt4v129Ev();
extern void _ZN9S165C5_nt4v130Ev();
extern void _ZN9S165C5_nt4v131Ev();
extern void _ZN9S165C5_nt4v132Ev();
extern void _ZN9S165C5_nt4v133Ev();
extern void _ZN9S165C5_nt4v134Ev();
extern void _ZN9S165C5_nt4v135Ev();
extern void _ZN9S165C5_nt4v136Ev();
extern void _ZN9S165C5_nt4v137Ev();
extern void _ZN9S165C5_nt4v138Ev();
extern void _ZN9S165C5_nt4v139Ev();
extern void _ZN9S165C5_nt4v140Ev();
extern void _ZN9S165C5_nt4v141Ev();
extern void _ZN9S165C5_nt4v142Ev();
extern void _ZN9S165C5_nt4v143Ev();
extern void _ZN9S165C5_nt4v144Ev();
extern void _ZN9S165C5_nt4v145Ev();
extern void _ZN9S165C5_nt4v146Ev();
extern void _ZN9S165C5_nt4v147Ev();
extern void _ZN9S165C5_nt4v148Ev();
extern void _ZN9S165C5_nt4v149Ev();
extern void _ZN9S165C5_nt4v150Ev();
extern void _ZN9S165C5_nt4v151Ev();
extern void _ZN9S165C5_nt4v152Ev();
extern void _ZN9S165C5_nt4v153Ev();
extern void _ZN9S165C5_nt4v154Ev();
extern void _ZN9S165C5_nt4v155Ev();
extern void _ZN9S165C5_nt4v156Ev();
extern void _ZN9S165C5_nt4v157Ev();
extern void _ZN9S165C5_nt4v158Ev();
extern void _ZN9S165C5_nt4v159Ev();
extern void _ZN9S165C5_nt4v160Ev();
extern void _ZN9S165C5_nt4v161Ev();
extern void _ZN9S165C5_nt4v162Ev();
extern void _ZN9S165C5_nt4v163Ev();
extern void _ZN9S165C5_nt4v164Ev();
extern void _ZN9S165C5_nt4v165Ev();
extern void _ZN9S165C5_nt4v166Ev();
extern void _ZN9S165C5_nt4v167Ev();
extern void _ZN9S165C5_nt4v168Ev();
extern void _ZN9S165C5_nt4v169Ev();
extern void _ZN9S165C5_nt4v170Ev();
extern void _ZN9S165C5_nt4v171Ev();
extern void _ZN9S165C5_nt4v172Ev();
extern void _ZN9S165C5_nt4v173Ev();
extern void _ZN9S165C5_nt4v174Ev();
extern void _ZN9S165C5_nt4v175Ev();
extern void _ZN9S165C5_nt4v176Ev();
extern void _ZN9S165C5_nt4v177Ev();
extern void _ZN9S165C5_nt4v178Ev();
extern void _ZN9S165C5_nt4v179Ev();
extern void _ZN9S165C5_nt4v180Ev();
extern void _ZN9S165C5_nt4v181Ev();
extern void _ZN9S165C5_nt4v182Ev();
extern void _ZN9S165C5_nt4v183Ev();
extern void _ZN9S165C5_nt4v184Ev();
extern void _ZN9S165C5_nt4v185Ev();
extern void _ZN9S165C5_nt4v186Ev();
extern void _ZN9S165C5_nt4v187Ev();
extern void _ZN9S165C5_nt4v188Ev();
extern void _ZN9S165C5_nt4v189Ev();
extern void _ZN9S165C5_nt4v190Ev();
extern void _ZN9S165C5_nt4v191Ev();
extern void _ZN9S165C5_nt4v192Ev();
extern void _ZN9S165C5_nt4v193Ev();
extern void _ZN9S165C5_nt4v194Ev();
extern void _ZN9S165C5_nt4v195Ev();
extern void _ZN9S165C5_nt4v196Ev();
extern void _ZN9S165C5_nt4v197Ev();
extern void _ZN9S165C5_nt4v198Ev();
extern void _ZN9S165C5_nt4v199Ev();
extern void _ZN9S165C5_nt4v200Ev();
extern void _ZN9S165C5_nt4v201Ev();
extern void _ZN9S165C5_nt4v202Ev();
extern void _ZN9S165C5_nt4v203Ev();
extern void _ZN9S165C5_nt4v204Ev();
extern void _ZN9S165C5_nt4v205Ev();
extern void _ZN9S165C5_nt4v206Ev();
extern void _ZN9S165C5_nt4v207Ev();
extern void _ZN9S165C5_nt4v208Ev();
extern void _ZN9S165C5_nt4v209Ev();
extern void _ZN9S165C4_nt4v210Ev();
extern void _ZN9S165C4_nt4v211Ev();
extern void _ZN9S165C4_nt4v212Ev();
extern void _ZN9S165C4_nt4v213Ev();
extern void _ZN9S165C4_nt4v214Ev();
extern void _ZN9S165C4_nt4v215Ev();
extern void _ZN9S165C4_nt4v216Ev();
extern void _ZN9S165C4_nt4v217Ev();
extern void _ZN9S165C4_nt4v218Ev();
extern void _ZN9S165C4_nt4v219Ev();
extern void _ZN9S165C4_nt4v220Ev();
extern void _ZN9S165C4_nt4v221Ev();
extern void _ZN9S165C4_nt4v222Ev();
extern void _ZN9S165C4_nt4v223Ev();
extern void _ZN9S165C4_nt4v224Ev();
extern void _ZN9S165C4_nt4v225Ev();
extern void _ZN9S165C4_nt4v226Ev();
extern void _ZN9S165C4_nt4v227Ev();
extern void _ZN9S165C4_nt4v228Ev();
extern void _ZN9S165C4_nt4v229Ev();
extern void _ZN9S165C4_nt4v230Ev();
extern void _ZN9S165C4_nt4v231Ev();
extern void _ZN9S165C4_nt4v232Ev();
extern void _ZN9S165C4_nt4v233Ev();
extern void _ZN9S165C4_nt4v234Ev();
extern void _ZN9S165C4_nt4v235Ev();
extern void _ZN9S165C4_nt4v236Ev();
extern void _ZN9S165C4_nt4v237Ev();
extern void _ZN9S165C4_nt4v238Ev();
extern void _ZN9S165C4_nt4v239Ev();
extern void _ZN9S165C4_nt4v240Ev();
extern void _ZN9S165C4_nt4v241Ev();
extern void _ZN9S165C4_nt4v242Ev();
extern void _ZN9S165C4_nt4v243Ev();
extern void _ZN9S165C4_nt4v244Ev();
extern void _ZN9S165C4_nt4v245Ev();
extern void _ZN9S165C4_nt4v246Ev();
extern void _ZN9S165C4_nt4v247Ev();
extern void _ZN9S165C4_nt4v248Ev();
extern void _ZN9S165C4_nt4v249Ev();
extern void _ZN9S165C4_nt4v250Ev();
extern void _ZN9S165C4_nt4v251Ev();
extern void _ZN9S165C4_nt4v252Ev();
extern void _ZN9S165C4_nt4v253Ev();
extern void _ZN9S165C4_nt4v254Ev();
extern void _ZN9S165C4_nt4v255Ev();
extern void _ZN9S165C4_nt4v256Ev();
extern void _ZN9S165C4_nt4v257Ev();
extern void _ZN9S165C4_nt4v258Ev();
extern void _ZN9S165C4_nt4v259Ev();
extern void _ZN9S165C4_nt4v260Ev();
extern void _ZN9S165C4_nt4v261Ev();
extern void _ZN9S165C4_nt4v262Ev();
extern void _ZN9S165C4_nt4v263Ev();
extern void _ZN9S165C4_nt4v264Ev();
extern void _ZN9S165C4_nt4v265Ev();
extern void _ZN9S165C4_nt4v266Ev();
extern void _ZN9S165C4_nt4v267Ev();
extern void _ZN9S165C4_nt4v268Ev();
extern void _ZN9S165C4_nt4v269Ev();
extern void _ZN9S165C4_nt4v270Ev();
extern void _ZN9S165C4_nt4v271Ev();
extern void _ZN9S165C4_nt4v272Ev();
extern void _ZN9S165C4_nt4v273Ev();
extern void _ZN9S165C4_nt4v274Ev();
extern void _ZN9S165C4_nt4v275Ev();
extern void _ZN9S165C4_nt4v276Ev();
extern void _ZN9S165C4_nt4v277Ev();
extern void _ZN9S165C4_nt4v278Ev();
extern void _ZN9S165C4_nt4v279Ev();
extern void _ZN9S165C4_nt4v280Ev();
extern void _ZN9S165C4_nt4v281Ev();
extern void _ZN9S165C4_nt4v282Ev();
extern void _ZN9S165C4_nt4v283Ev();
extern void _ZN9S165C4_nt4v284Ev();
extern void _ZN9S165C4_nt4v285Ev();
extern void _ZN9S165C4_nt4v286Ev();
extern void _ZN9S165C4_nt4v287Ev();
extern void _ZN9S165C4_nt4v288Ev();
extern void _ZN9S165C4_nt4v289Ev();
extern void _ZN9S165C4_nt4v290Ev();
extern void _ZN9S165C4_nt4v291Ev();
extern void _ZN9S165C4_nt4v292Ev();
extern void _ZN9S165C4_nt4v293Ev();
extern void _ZN9S165C4_nt4v294Ev();
extern void _ZN9S165C4_nt4v295Ev();
extern void _ZN9S165C4_nt4v296Ev();
extern void _ZN9S165C4_nt4v297Ev();
extern void _ZN9S165C4_nt4v298Ev();
extern void _ZN9S165C4_nt4v299Ev();
extern void _ZN9S165C4_nt4v300Ev();
extern void _ZN9S165C4_nt4v301Ev();
extern void _ZN9S165C4_nt4v302Ev();
extern void _ZN9S165C4_nt4v303Ev();
extern void _ZN9S165C4_nt4v304Ev();
extern void _ZN9S165C4_nt4v305Ev();
extern void _ZN9S165C4_nt4v306Ev();
extern void _ZN9S165C4_nt4v307Ev();
static  VTBL_ENTRY vtc_S165C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S165C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S165C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S165C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v219Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v220Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v221Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v222Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v223Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v224Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v225Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v226Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v227Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v228Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v229Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v230Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v231Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v232Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v233Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v234Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v235Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v236Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v237Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v238Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v239Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v240Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v241Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v242Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v243Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v244Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v245Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v246Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v247Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v248Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v249Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v250Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v251Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v252Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v253Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v254Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v255Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v256Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v257Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v258Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v259Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v260Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v261Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v262Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v263Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v264Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v265Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v266Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v267Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v268Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v269Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v270Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v271Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v272Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v273Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v274Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v275Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v276Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v277Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v278Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v279Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v280Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v281Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v282Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v283Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v284Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v285Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v286Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v287Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v288Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v289Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v290Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v291Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v292Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v293Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v294Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v295Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v296Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v297Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v298Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v299Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v300Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v301Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v302Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v303Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v304Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v305Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v306Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v307Ev,
};
extern VTBL_ENTRY _ZTI9S165C4_nt[];
VTBL_ENTRY *P__ZTI9S165C4_nt = _ZTI9S165C4_nt; 
extern  VTBL_ENTRY _ZTV9S165C4_nt[];
Class_Descriptor cd_S165C4_nt = {  "S165C4_nt", // class name
  bases_S165C4_nt, 2,
  &(vtc_S165C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1200,936), // object size
  NSPAIRA(_ZTI9S165C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S165C4_nt),309, //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  S165C28  : S165C10_nt {
};
//SIG(-1 S165C28) C1{ BC2{ m Fp Fi[2]}}



static void Test_S165C28()
{
  extern Class_Descriptor cd_S165C28;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S165C28, buf);
    S165C28 &lv = *(new (buf) S165C28());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S165C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S165C28)");
    check_base_class_offset(lv, (S165C10_nt*), 0, "S165C28");
    test_class_info(&lv, &cd_S165C28);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS165C28(Test_S165C28, "S165C28", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
static Base_Class bases_S165C28[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S165C28 = {  "S165C28", // class name
  bases_S165C28, 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  S165C27  : S165C28 {
};
//SIG(-1 S165C27) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S165C27()
{
  extern Class_Descriptor cd_S165C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S165C27, buf);
    S165C27 &lv = *(new (buf) S165C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S165C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S165C27)");
    check_base_class_offset(lv, (S165C10_nt*)(S165C28*), 0, "S165C27");
    check_base_class_offset(lv, (S165C28*), 0, "S165C27");
    test_class_info(&lv, &cd_S165C27);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS165C27(Test_S165C27, "S165C27", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
extern Class_Descriptor cd_S165C28;
static Base_Class bases_S165C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S165C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S165C27 = {  "S165C27", // class name
  bases_S165C27, 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  S165C3_nt  : S165C4_nt {
  void *s165c3f0;
  unsigned int s165c3f1:1;
  unsigned int s165c3f2:1;
  unsigned int s165c3f3:1;
  unsigned int s165c3f4:1;
  unsigned int s165c3f5:1;
  unsigned int s165c3f6:1;
  unsigned int s165c3f7:1;
  unsigned int s165c3f8:1;
  unsigned int s165c3f9:1;
  unsigned int s165c3f10:1;
  unsigned int s165c3f11:1;
  unsigned int s165c3f12:1;
  ::S165C27 s165c3f13;
  int s165c3f14;
  ::S165C16_nt s165c3f15;
  int s165c3f16[3];
  ::S165C16_nt s165c3f17;
  int s165c3f18[2];
  void *s165c3f19;
  int s165c3f20[2];
  char s165c3f21;
  int s165c3f22[8];
  virtual  ~S165C3_nt(); // _ZN9S165C3_ntD1Ev
  virtual void  v308(); // _ZN9S165C3_nt4v308Ev
  virtual void  v309(); // _ZN9S165C3_nt4v309Ev
  virtual void  v310(); // _ZN9S165C3_nt4v310Ev
  virtual void  v311(); // _ZN9S165C3_nt4v311Ev
  virtual void  v312(); // _ZN9S165C3_nt4v312Ev
  virtual void  v313(); // _ZN9S165C3_nt4v313Ev
  virtual void  v314(); // _ZN9S165C3_nt4v314Ev
  virtual void  v315(); // _ZN9S165C3_nt4v315Ev
  virtual void  v316(); // _ZN9S165C3_nt4v316Ev
  virtual void  v317(); // _ZN9S165C3_nt4v317Ev
  virtual void  v318(); // _ZN9S165C3_nt4v318Ev
  virtual void  v319(); // _ZN9S165C3_nt4v319Ev
  virtual void  v320(); // _ZN9S165C3_nt4v320Ev
  virtual void  v321(); // _ZN9S165C3_nt4v321Ev
  virtual void  v322(); // _ZN9S165C3_nt4v322Ev
  virtual void  v323(); // _ZN9S165C3_nt4v323Ev
  virtual void  v324(); // _ZN9S165C3_nt4v324Ev
  virtual void  v325(); // _ZN9S165C3_nt4v325Ev
  virtual void  v326(); // _ZN9S165C3_nt4v326Ev
  virtual void  v327(); // _ZN9S165C3_nt4v327Ev
  virtual void  v328(); // _ZN9S165C3_nt4v328Ev
  virtual void  v329(); // _ZN9S165C3_nt4v329Ev
  S165C3_nt(); // tgen
};
//SIG(-1 S165C3_nt) 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 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 v213 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 v227 v228 v229 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC6 FC9{ m Fi} Fi Fc[4] Fp[2] FC6 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] FC5 FC5 FC5 FC10{ BC11{ BC8}} FC10 Fi Fp[2] FC12{ m Fi[3]} FC12 FC12 FC12 Fp FC5 FC10 FC12 FC12 Fi FC12 FC12 Fp Fi Fc FC12 FC12 Fp Fi Fp FC10 FC13{ BC14{ BC8}} FC13} vd v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241 v242 v243 v244 v245 v246 v247 v248 v249 v250 v251 v252 v253 v254 v255 v256 v257 v258 v259 v260 v261 v262 v263 v264 v265 v266 v267 v268 v269 v270 v271 v272 v273 v274 v275 v276 v277 v278 v279 v280 v281 v282 v283 v284 v285 v286 v287 v288 v289 v290 v291 v292 v293 v294 v295 v296 v297 v298 v299 v300 v301 v302 v303 v304 v305 v306 v307 v308 v309 v310 v311 v312 v313 v314 v315 v316 v317 v318 v319 v320 v321 v322 v323 v324 v325 v326 v327 Fi[3] Fp[2] Fi Fp[2] 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] Fc[4] Fi[10] Fp[2] Fi[4] FC12 Fi[19] FC12 Fi[2] Fp Fi[5] FC12 FC12 Fi Fp Fi FC12 Fi Fp Fi[3] FC15{ BC16{ BC17{ BC8}}} Fp[3] FC5 FC5 Fp Fi FC12 Fp FC12 Fp[2] Fi[2] Fp Fi[2] Fp Fi[3] Fp[3] FC12 FC12 Fi Fp[2] Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC18{ BC19{ BC8}} Fi FC12 Fi[3] FC12 Fi[2] Fp Fi[2] Fc Fi[8]}


 S165C3_nt ::~S165C3_nt(){ note_dtor("S165C3_nt", this);}
void  S165C3_nt ::v308(){vfunc_called(this, "_ZN9S165C3_nt4v308Ev");}
void  S165C3_nt ::v309(){vfunc_called(this, "_ZN9S165C3_nt4v309Ev");}
void  S165C3_nt ::v310(){vfunc_called(this, "_ZN9S165C3_nt4v310Ev");}
void  S165C3_nt ::v311(){vfunc_called(this, "_ZN9S165C3_nt4v311Ev");}
void  S165C3_nt ::v312(){vfunc_called(this, "_ZN9S165C3_nt4v312Ev");}
void  S165C3_nt ::v313(){vfunc_called(this, "_ZN9S165C3_nt4v313Ev");}
void  S165C3_nt ::v314(){vfunc_called(this, "_ZN9S165C3_nt4v314Ev");}
void  S165C3_nt ::v315(){vfunc_called(this, "_ZN9S165C3_nt4v315Ev");}
void  S165C3_nt ::v316(){vfunc_called(this, "_ZN9S165C3_nt4v316Ev");}
void  S165C3_nt ::v317(){vfunc_called(this, "_ZN9S165C3_nt4v317Ev");}
void  S165C3_nt ::v318(){vfunc_called(this, "_ZN9S165C3_nt4v318Ev");}
void  S165C3_nt ::v319(){vfunc_called(this, "_ZN9S165C3_nt4v319Ev");}
void  S165C3_nt ::v320(){vfunc_called(this, "_ZN9S165C3_nt4v320Ev");}
void  S165C3_nt ::v321(){vfunc_called(this, "_ZN9S165C3_nt4v321Ev");}
void  S165C3_nt ::v322(){vfunc_called(this, "_ZN9S165C3_nt4v322Ev");}
void  S165C3_nt ::v323(){vfunc_called(this, "_ZN9S165C3_nt4v323Ev");}
void  S165C3_nt ::v324(){vfunc_called(this, "_ZN9S165C3_nt4v324Ev");}
void  S165C3_nt ::v325(){vfunc_called(this, "_ZN9S165C3_nt4v325Ev");}
void  S165C3_nt ::v326(){vfunc_called(this, "_ZN9S165C3_nt4v326Ev");}
void  S165C3_nt ::v327(){vfunc_called(this, "_ZN9S165C3_nt4v327Ev");}
void  S165C3_nt ::v328(){vfunc_called(this, "_ZN9S165C3_nt4v328Ev");}
void  S165C3_nt ::v329(){vfunc_called(this, "_ZN9S165C3_nt4v329Ev");}
S165C3_nt ::S165C3_nt(){ note_ctor("S165C3_nt", this);} // tgen

//skip512 S165C3_nt

#else // __cplusplus

extern void _ZN9S165C3_ntC1Ev();
extern void _ZN9S165C3_ntD1Ev();
Name_Map name_map_S165C3_nt[] = {
  NSPAIR(_ZN9S165C3_ntC1Ev),
  NSPAIR(_ZN9S165C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S165C6_nt;
extern VTBL_ENTRY _ZTI9S165C6_nt[];
extern  VTBL_ENTRY _ZTV9S165C6_nt[];
extern Class_Descriptor cd_S165C5_nt;
extern VTBL_ENTRY _ZTI9S165C5_nt[];
extern  VTBL_ENTRY _ZTV9S165C5_nt[];
extern Class_Descriptor cd_S165C4_nt;
extern VTBL_ENTRY _ZTI9S165C4_nt[];
extern  VTBL_ENTRY _ZTV9S165C4_nt[];
static Base_Class bases_S165C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C6_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_S165C5_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_S165C4_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 _ZTI9S165C3_nt[];
extern void _ZN9S165C3_ntD1Ev();
extern void _ZN9S165C3_ntD0Ev();
extern void _ZN9S165C6_nt2v3Ev();
extern void _ZN9S165C6_nt2v4Ev();
extern void _ZN9S165C6_nt2v5Ev();
extern void _ZN9S165C6_nt2v6Ev();
extern void _ZN9S165C6_nt2v7Ev();
extern void _ZN9S165C6_nt2v8Ev();
extern void _ZN9S165C6_nt2v9Ev();
extern void _ZN9S165C6_nt3v10Ev();
extern void _ZN9S165C6_nt3v11Ev();
extern void _ZN9S165C6_nt3v12Ev();
extern void _ZN9S165C6_nt3v13Ev();
extern void _ZN9S165C6_nt3v14Ev();
extern void _ZN9S165C6_nt3v15Ev();
extern void _ZN9S165C6_nt3v16Ev();
extern void _ZN9S165C6_nt3v17Ev();
extern void _ZN9S165C6_nt3v18Ev();
extern void _ZN9S165C6_nt3v19Ev();
extern void _ZN9S165C6_nt3v20Ev();
extern void _ZN9S165C6_nt3v21Ev();
extern void _ZN9S165C6_nt3v22Ev();
extern void _ZN9S165C6_nt3v23Ev();
extern void _ZN9S165C6_nt3v24Ev();
extern void _ZN9S165C6_nt3v25Ev();
extern void _ZN9S165C6_nt3v26Ev();
extern void _ZN9S165C6_nt3v27Ev();
extern void _ZN9S165C6_nt3v28Ev();
extern void _ZN9S165C6_nt3v29Ev();
extern void _ZN9S165C6_nt3v30Ev();
extern void _ZN9S165C6_nt3v31Ev();
extern void _ZN9S165C6_nt3v32Ev();
extern void _ZN9S165C6_nt3v33Ev();
extern void _ZN9S165C6_nt3v34Ev();
extern void _ZN9S165C6_nt3v35Ev();
extern void _ZN9S165C6_nt3v36Ev();
extern void _ZN9S165C6_nt3v37Ev();
extern void _ZN9S165C6_nt3v38Ev();
extern void _ZN9S165C6_nt3v39Ev();
extern void _ZN9S165C6_nt3v40Ev();
extern void _ZN9S165C6_nt3v41Ev();
extern void _ZN9S165C6_nt3v42Ev();
extern void _ZN9S165C6_nt3v43Ev();
extern void _ZN9S165C6_nt3v44Ev();
extern void _ZN9S165C6_nt3v45Ev();
extern void _ZN9S165C6_nt3v46Ev();
extern void _ZN9S165C6_nt3v47Ev();
extern void _ZN9S165C6_nt3v48Ev();
extern void _ZN9S165C6_nt3v49Ev();
extern void _ZN9S165C6_nt3v50Ev();
extern void _ZN9S165C6_nt3v51Ev();
extern void _ZN9S165C6_nt3v52Ev();
extern void _ZN9S165C6_nt3v53Ev();
extern void _ZN9S165C6_nt3v54Ev();
extern void _ZN9S165C6_nt3v55Ev();
extern void _ZN9S165C6_nt3v56Ev();
extern void _ZN9S165C6_nt3v57Ev();
extern void _ZN9S165C6_nt3v58Ev();
extern void _ZN9S165C6_nt3v59Ev();
extern void _ZN9S165C6_nt3v60Ev();
extern void _ZN9S165C6_nt3v61Ev();
extern void _ZN9S165C6_nt3v62Ev();
extern void _ZN9S165C6_nt3v63Ev();
extern void _ZN9S165C6_nt3v64Ev();
extern void _ZN9S165C6_nt3v65Ev();
extern void _ZN9S165C6_nt3v66Ev();
extern void _ZN9S165C5_nt3v67Ev();
extern void _ZN9S165C5_nt3v68Ev();
extern void _ZN9S165C5_nt3v69Ev();
extern void _ZN9S165C5_nt3v70Ev();
extern void _ZN9S165C5_nt3v71Ev();
extern void _ZN9S165C5_nt3v72Ev();
extern void _ZN9S165C5_nt3v73Ev();
extern void _ZN9S165C5_nt3v74Ev();
extern void _ZN9S165C5_nt3v75Ev();
extern void _ZN9S165C5_nt3v76Ev();
extern void _ZN9S165C5_nt3v77Ev();
extern void _ZN9S165C5_nt3v78Ev();
extern void _ZN9S165C5_nt3v79Ev();
extern void _ZN9S165C5_nt3v80Ev();
extern void _ZN9S165C5_nt3v81Ev();
extern void _ZN9S165C5_nt3v82Ev();
extern void _ZN9S165C5_nt3v83Ev();
extern void _ZN9S165C5_nt3v84Ev();
extern void _ZN9S165C5_nt3v85Ev();
extern void _ZN9S165C5_nt3v86Ev();
extern void _ZN9S165C5_nt3v87Ev();
extern void _ZN9S165C5_nt3v88Ev();
extern void _ZN9S165C5_nt3v89Ev();
extern void _ZN9S165C5_nt3v90Ev();
extern void _ZN9S165C5_nt3v91Ev();
extern void _ZN9S165C5_nt3v92Ev();
extern void _ZN9S165C5_nt3v93Ev();
extern void _ZN9S165C5_nt3v94Ev();
extern void _ZN9S165C5_nt3v95Ev();
extern void _ZN9S165C5_nt3v96Ev();
extern void _ZN9S165C5_nt3v97Ev();
extern void _ZN9S165C5_nt3v98Ev();
extern void _ZN9S165C5_nt3v99Ev();
extern void _ZN9S165C5_nt4v100Ev();
extern void _ZN9S165C5_nt4v101Ev();
extern void _ZN9S165C5_nt4v102Ev();
extern void _ZN9S165C5_nt4v103Ev();
extern void _ZN9S165C5_nt4v104Ev();
extern void _ZN9S165C5_nt4v105Ev();
extern void _ZN9S165C5_nt4v106Ev();
extern void _ZN9S165C5_nt4v107Ev();
extern void _ZN9S165C5_nt4v108Ev();
extern void _ZN9S165C5_nt4v109Ev();
extern void _ZN9S165C5_nt4v110Ev();
extern void _ZN9S165C5_nt4v111Ev();
extern void _ZN9S165C5_nt4v112Ev();
extern void _ZN9S165C5_nt4v113Ev();
extern void _ZN9S165C5_nt4v114Ev();
extern void _ZN9S165C5_nt4v115Ev();
extern void _ZN9S165C5_nt4v116Ev();
extern void _ZN9S165C5_nt4v117Ev();
extern void _ZN9S165C5_nt4v118Ev();
extern void _ZN9S165C5_nt4v119Ev();
extern void _ZN9S165C5_nt4v120Ev();
extern void _ZN9S165C5_nt4v121Ev();
extern void _ZN9S165C5_nt4v122Ev();
extern void _ZN9S165C5_nt4v123Ev();
extern void _ZN9S165C5_nt4v124Ev();
extern void _ZN9S165C5_nt4v125Ev();
extern void _ZN9S165C5_nt4v126Ev();
extern void _ZN9S165C5_nt4v127Ev();
extern void _ZN9S165C5_nt4v128Ev();
extern void _ZN9S165C5_nt4v129Ev();
extern void _ZN9S165C5_nt4v130Ev();
extern void _ZN9S165C5_nt4v131Ev();
extern void _ZN9S165C5_nt4v132Ev();
extern void _ZN9S165C5_nt4v133Ev();
extern void _ZN9S165C5_nt4v134Ev();
extern void _ZN9S165C5_nt4v135Ev();
extern void _ZN9S165C5_nt4v136Ev();
extern void _ZN9S165C5_nt4v137Ev();
extern void _ZN9S165C5_nt4v138Ev();
extern void _ZN9S165C5_nt4v139Ev();
extern void _ZN9S165C5_nt4v140Ev();
extern void _ZN9S165C5_nt4v141Ev();
extern void _ZN9S165C5_nt4v142Ev();
extern void _ZN9S165C5_nt4v143Ev();
extern void _ZN9S165C5_nt4v144Ev();
extern void _ZN9S165C5_nt4v145Ev();
extern void _ZN9S165C5_nt4v146Ev();
extern void _ZN9S165C5_nt4v147Ev();
extern void _ZN9S165C5_nt4v148Ev();
extern void _ZN9S165C5_nt4v149Ev();
extern void _ZN9S165C5_nt4v150Ev();
extern void _ZN9S165C5_nt4v151Ev();
extern void _ZN9S165C5_nt4v152Ev();
extern void _ZN9S165C5_nt4v153Ev();
extern void _ZN9S165C5_nt4v154Ev();
extern void _ZN9S165C5_nt4v155Ev();
extern void _ZN9S165C5_nt4v156Ev();
extern void _ZN9S165C5_nt4v157Ev();
extern void _ZN9S165C5_nt4v158Ev();
extern void _ZN9S165C5_nt4v159Ev();
extern void _ZN9S165C5_nt4v160Ev();
extern void _ZN9S165C5_nt4v161Ev();
extern void _ZN9S165C5_nt4v162Ev();
extern void _ZN9S165C5_nt4v163Ev();
extern void _ZN9S165C5_nt4v164Ev();
extern void _ZN9S165C5_nt4v165Ev();
extern void _ZN9S165C5_nt4v166Ev();
extern void _ZN9S165C5_nt4v167Ev();
extern void _ZN9S165C5_nt4v168Ev();
extern void _ZN9S165C5_nt4v169Ev();
extern void _ZN9S165C5_nt4v170Ev();
extern void _ZN9S165C5_nt4v171Ev();
extern void _ZN9S165C5_nt4v172Ev();
extern void _ZN9S165C5_nt4v173Ev();
extern void _ZN9S165C5_nt4v174Ev();
extern void _ZN9S165C5_nt4v175Ev();
extern void _ZN9S165C5_nt4v176Ev();
extern void _ZN9S165C5_nt4v177Ev();
extern void _ZN9S165C5_nt4v178Ev();
extern void _ZN9S165C5_nt4v179Ev();
extern void _ZN9S165C5_nt4v180Ev();
extern void _ZN9S165C5_nt4v181Ev();
extern void _ZN9S165C5_nt4v182Ev();
extern void _ZN9S165C5_nt4v183Ev();
extern void _ZN9S165C5_nt4v184Ev();
extern void _ZN9S165C5_nt4v185Ev();
extern void _ZN9S165C5_nt4v186Ev();
extern void _ZN9S165C5_nt4v187Ev();
extern void _ZN9S165C5_nt4v188Ev();
extern void _ZN9S165C5_nt4v189Ev();
extern void _ZN9S165C5_nt4v190Ev();
extern void _ZN9S165C5_nt4v191Ev();
extern void _ZN9S165C5_nt4v192Ev();
extern void _ZN9S165C5_nt4v193Ev();
extern void _ZN9S165C5_nt4v194Ev();
extern void _ZN9S165C5_nt4v195Ev();
extern void _ZN9S165C5_nt4v196Ev();
extern void _ZN9S165C5_nt4v197Ev();
extern void _ZN9S165C5_nt4v198Ev();
extern void _ZN9S165C5_nt4v199Ev();
extern void _ZN9S165C5_nt4v200Ev();
extern void _ZN9S165C5_nt4v201Ev();
extern void _ZN9S165C5_nt4v202Ev();
extern void _ZN9S165C5_nt4v203Ev();
extern void _ZN9S165C5_nt4v204Ev();
extern void _ZN9S165C5_nt4v205Ev();
extern void _ZN9S165C5_nt4v206Ev();
extern void _ZN9S165C5_nt4v207Ev();
extern void _ZN9S165C5_nt4v208Ev();
extern void _ZN9S165C5_nt4v209Ev();
extern void _ZN9S165C4_nt4v210Ev();
extern void _ZN9S165C4_nt4v211Ev();
extern void _ZN9S165C4_nt4v212Ev();
extern void _ZN9S165C4_nt4v213Ev();
extern void _ZN9S165C4_nt4v214Ev();
extern void _ZN9S165C4_nt4v215Ev();
extern void _ZN9S165C4_nt4v216Ev();
extern void _ZN9S165C4_nt4v217Ev();
extern void _ZN9S165C4_nt4v218Ev();
extern void _ZN9S165C4_nt4v219Ev();
extern void _ZN9S165C4_nt4v220Ev();
extern void _ZN9S165C4_nt4v221Ev();
extern void _ZN9S165C4_nt4v222Ev();
extern void _ZN9S165C4_nt4v223Ev();
extern void _ZN9S165C4_nt4v224Ev();
extern void _ZN9S165C4_nt4v225Ev();
extern void _ZN9S165C4_nt4v226Ev();
extern void _ZN9S165C4_nt4v227Ev();
extern void _ZN9S165C4_nt4v228Ev();
extern void _ZN9S165C4_nt4v229Ev();
extern void _ZN9S165C4_nt4v230Ev();
extern void _ZN9S165C4_nt4v231Ev();
extern void _ZN9S165C4_nt4v232Ev();
extern void _ZN9S165C4_nt4v233Ev();
extern void _ZN9S165C4_nt4v234Ev();
extern void _ZN9S165C4_nt4v235Ev();
extern void _ZN9S165C4_nt4v236Ev();
extern void _ZN9S165C4_nt4v237Ev();
extern void _ZN9S165C4_nt4v238Ev();
extern void _ZN9S165C4_nt4v239Ev();
extern void _ZN9S165C4_nt4v240Ev();
extern void _ZN9S165C4_nt4v241Ev();
extern void _ZN9S165C4_nt4v242Ev();
extern void _ZN9S165C4_nt4v243Ev();
extern void _ZN9S165C4_nt4v244Ev();
extern void _ZN9S165C4_nt4v245Ev();
extern void _ZN9S165C4_nt4v246Ev();
extern void _ZN9S165C4_nt4v247Ev();
extern void _ZN9S165C4_nt4v248Ev();
extern void _ZN9S165C4_nt4v249Ev();
extern void _ZN9S165C4_nt4v250Ev();
extern void _ZN9S165C4_nt4v251Ev();
extern void _ZN9S165C4_nt4v252Ev();
extern void _ZN9S165C4_nt4v253Ev();
extern void _ZN9S165C4_nt4v254Ev();
extern void _ZN9S165C4_nt4v255Ev();
extern void _ZN9S165C4_nt4v256Ev();
extern void _ZN9S165C4_nt4v257Ev();
extern void _ZN9S165C4_nt4v258Ev();
extern void _ZN9S165C4_nt4v259Ev();
extern void _ZN9S165C4_nt4v260Ev();
extern void _ZN9S165C4_nt4v261Ev();
extern void _ZN9S165C4_nt4v262Ev();
extern void _ZN9S165C4_nt4v263Ev();
extern void _ZN9S165C4_nt4v264Ev();
extern void _ZN9S165C4_nt4v265Ev();
extern void _ZN9S165C4_nt4v266Ev();
extern void _ZN9S165C4_nt4v267Ev();
extern void _ZN9S165C4_nt4v268Ev();
extern void _ZN9S165C4_nt4v269Ev();
extern void _ZN9S165C4_nt4v270Ev();
extern void _ZN9S165C4_nt4v271Ev();
extern void _ZN9S165C4_nt4v272Ev();
extern void _ZN9S165C4_nt4v273Ev();
extern void _ZN9S165C4_nt4v274Ev();
extern void _ZN9S165C4_nt4v275Ev();
extern void _ZN9S165C4_nt4v276Ev();
extern void _ZN9S165C4_nt4v277Ev();
extern void _ZN9S165C4_nt4v278Ev();
extern void _ZN9S165C4_nt4v279Ev();
extern void _ZN9S165C4_nt4v280Ev();
extern void _ZN9S165C4_nt4v281Ev();
extern void _ZN9S165C4_nt4v282Ev();
extern void _ZN9S165C4_nt4v283Ev();
extern void _ZN9S165C4_nt4v284Ev();
extern void _ZN9S165C4_nt4v285Ev();
extern void _ZN9S165C4_nt4v286Ev();
extern void _ZN9S165C4_nt4v287Ev();
extern void _ZN9S165C4_nt4v288Ev();
extern void _ZN9S165C4_nt4v289Ev();
extern void _ZN9S165C4_nt4v290Ev();
extern void _ZN9S165C4_nt4v291Ev();
extern void _ZN9S165C4_nt4v292Ev();
extern void _ZN9S165C4_nt4v293Ev();
extern void _ZN9S165C4_nt4v294Ev();
extern void _ZN9S165C4_nt4v295Ev();
extern void _ZN9S165C4_nt4v296Ev();
extern void _ZN9S165C4_nt4v297Ev();
extern void _ZN9S165C4_nt4v298Ev();
extern void _ZN9S165C4_nt4v299Ev();
extern void _ZN9S165C4_nt4v300Ev();
extern void _ZN9S165C4_nt4v301Ev();
extern void _ZN9S165C4_nt4v302Ev();
extern void _ZN9S165C4_nt4v303Ev();
extern void _ZN9S165C4_nt4v304Ev();
extern void _ZN9S165C4_nt4v305Ev();
extern void _ZN9S165C4_nt4v306Ev();
extern void _ZN9S165C4_nt4v307Ev();
extern void _ZN9S165C3_nt4v308Ev();
extern void _ZN9S165C3_nt4v309Ev();
extern void _ZN9S165C3_nt4v310Ev();
extern void _ZN9S165C3_nt4v311Ev();
extern void _ZN9S165C3_nt4v312Ev();
extern void _ZN9S165C3_nt4v313Ev();
extern void _ZN9S165C3_nt4v314Ev();
extern void _ZN9S165C3_nt4v315Ev();
extern void _ZN9S165C3_nt4v316Ev();
extern void _ZN9S165C3_nt4v317Ev();
extern void _ZN9S165C3_nt4v318Ev();
extern void _ZN9S165C3_nt4v319Ev();
extern void _ZN9S165C3_nt4v320Ev();
extern void _ZN9S165C3_nt4v321Ev();
extern void _ZN9S165C3_nt4v322Ev();
extern void _ZN9S165C3_nt4v323Ev();
extern void _ZN9S165C3_nt4v324Ev();
extern void _ZN9S165C3_nt4v325Ev();
extern void _ZN9S165C3_nt4v326Ev();
extern void _ZN9S165C3_nt4v327Ev();
extern void _ZN9S165C3_nt4v328Ev();
extern void _ZN9S165C3_nt4v329Ev();
static  VTBL_ENTRY vtc_S165C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S165C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S165C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S165C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v219Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v220Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v221Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v222Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v223Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v224Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v225Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v226Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v227Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v228Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v229Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v230Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v231Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v232Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v233Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v234Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v235Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v236Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v237Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v238Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v239Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v240Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v241Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v242Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v243Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v244Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v245Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v246Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v247Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v248Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v249Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v250Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v251Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v252Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v253Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v254Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v255Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v256Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v257Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v258Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v259Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v260Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v261Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v262Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v263Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v264Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v265Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v266Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v267Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v268Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v269Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v270Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v271Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v272Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v273Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v274Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v275Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v276Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v277Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v278Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v279Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v280Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v281Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v282Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v283Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v284Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v285Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v286Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v287Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v288Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v289Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v290Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v291Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v292Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v293Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v294Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v295Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v296Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v297Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v298Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v299Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v300Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v301Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v302Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v303Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v304Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v305Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v306Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v307Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v308Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v309Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v310Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v311Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v312Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v313Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v314Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v315Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v316Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v317Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v318Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v319Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v320Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v321Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v322Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v323Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v324Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v325Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v326Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v327Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v328Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v329Ev,
};
extern VTBL_ENTRY _ZTI9S165C3_nt[];
VTBL_ENTRY *P__ZTI9S165C3_nt = _ZTI9S165C3_nt; 
extern  VTBL_ENTRY _ZTV9S165C3_nt[];
Class_Descriptor cd_S165C3_nt = {  "S165C3_nt", // class name
  bases_S165C3_nt, 3,
  &(vtc_S165C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1336,1052), // object size
  NSPAIRA(_ZTI9S165C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S165C3_nt),331, //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  S165C33_nt  {
  int s165c33f0[4];
  void  mf165c33(); // _ZN10S165C33_nt8mf165c33Ev
};
//SIG(-1 S165C33_nt) C1{ m Fi[4]}


void  S165C33_nt ::mf165c33(){}

//skip512 S165C33_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S165C32_nt  {
  ::S165C16_nt s165c32f0;
  ::S165C33_nt s165c32f1;
  ::S165C16_nt s165c32f2;
  ::S165C16_nt s165c32f3;
  char s165c32f4;
  void  mf165c32(); // _ZN10S165C32_nt8mf165c32Ev
};
//SIG(-1 S165C32_nt) C1{ m FC2{ m Fi[3]} FC3{ m Fi[4]} FC2 FC2 Fc}


void  S165C32_nt ::mf165c32(){}

//skip512 S165C32_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S165C31_nt  {
  ::S165C32_nt s165c31f0;
  char s165c31f1[4];
  unsigned int s165c31f2:1;
  int s165c31f3;
};
//SIG(-1 S165C31_nt) C1{ FC2{ m FC3{ m Fi[3]} FC4{ m Fi[4]} FC3 FC3 Fc} Fc[4] Fi:1 Fi}



//skip512 S165C31_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S165C2_nt  : S165C3_nt {
  void *s165c2f0;
  ::S165C27 s165c2f1;
  ::S165C16_nt s165c2f2;
  ::S165C16_nt s165c2f3;
  unsigned int s165c2f4:1;
  unsigned int s165c2f5:1;
  unsigned int s165c2f6:1;
  unsigned int s165c2f7:1;
  unsigned int s165c2f8:1;
  unsigned int s165c2f9:1;
  unsigned int s165c2f10:1;
  unsigned int s165c2f11:1;
  unsigned int s165c2f12:1;
  unsigned int s165c2f13:1;
  unsigned int s165c2f14:1;
  unsigned int s165c2f15:1;
  unsigned int s165c2f16:1;
  int s165c2f17[4];
  void *s165c2f18[2];
  int s165c2f19[8];
  void *s165c2f20[5];
  int s165c2f21[13];
  ::S165C16_nt s165c2f22;
  int s165c2f23[3];
  ::S165C31_nt s165c2f24;
  int s165c2f25[2];
  virtual  ~S165C2_nt(); // _ZN9S165C2_ntD1Ev
  virtual void  v330(); // _ZN9S165C2_nt4v330Ev
  virtual void  v331(); // _ZN9S165C2_nt4v331Ev
  virtual void  v332(); // _ZN9S165C2_nt4v332Ev
  virtual void  v333(); // _ZN9S165C2_nt4v333Ev
  virtual void  v334(); // _ZN9S165C2_nt4v334Ev
  virtual void  v335(); // _ZN9S165C2_nt4v335Ev
  virtual void  v336(); // _ZN9S165C2_nt4v336Ev
  virtual void  v337(); // _ZN9S165C2_nt4v337Ev
  virtual void  v338(); // _ZN9S165C2_nt4v338Ev
  virtual void  v339(); // _ZN9S165C2_nt4v339Ev
  virtual void  v340(); // _ZN9S165C2_nt4v340Ev
  virtual void  v341(); // _ZN9S165C2_nt4v341Ev
  virtual void  v342(); // _ZN9S165C2_nt4v342Ev
  virtual void  v343(); // _ZN9S165C2_nt4v343Ev
  virtual void  v344(); // _ZN9S165C2_nt4v344Ev
  virtual void  v345(); // _ZN9S165C2_nt4v345Ev
  virtual void  v346(); // _ZN9S165C2_nt4v346Ev
  virtual void  v347(); // _ZN9S165C2_nt4v347Ev
  virtual void  v348(); // _ZN9S165C2_nt4v348Ev
  virtual void  v349(); // _ZN9S165C2_nt4v349Ev
  virtual void  v350(); // _ZN9S165C2_nt4v350Ev
  virtual void  v351(); // _ZN9S165C2_nt4v351Ev
  virtual void  v352(); // _ZN9S165C2_nt4v352Ev
  virtual void  v353(); // _ZN9S165C2_nt4v353Ev
  S165C2_nt(); // tgen
};
//SIG(-1 S165C2_nt) C1{ BC2{ BC3{ BC4{ BC5{ 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 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd 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 v213 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 v227 v228 v229 v230 v231 FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC7 FC10{ m Fi} Fi Fc[4] Fp[2] FC7 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] FC6 FC6 FC6 FC11{ BC12{ BC9}} FC11 Fi Fp[2] FC13{ m Fi[3]} FC13 FC13 FC13 Fp FC6 FC11 FC13 FC13 Fi FC13 FC13 Fp Fi Fc FC13 FC13 Fp Fi Fp FC11 FC14{ BC15{ BC9}} FC14} vd v232 v233 v234 v235 v236 v237 v238 v239 v240 v241 v242 v243 v244 v245 v246 v247 v248 v249 v250 v251 v252 v253 v254 v255 v256 v257 v258 v259 v260 v261 v262 v263 v264 v265 v266 v267 v268 v269 v270 v271 v272 v273 v274 v275 v276 v277 v278 v279 v280 v281 v282 v283 v284 v285 v286 v287 v288 v289 v290 v291 v292 v293 v294 v295 v296 v297 v298 v299 v300 v301 v302 v303 v304 v305 v306 v307 v308 v309 v310 v311 v312 v313 v314 v315 v316 v317 v318 v319 v320 v321 v322 v323 v324 v325 v326 v327 v328 v329 Fi[3] Fp[2] Fi Fp[2] 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] Fc[4] Fi[10] Fp[2] Fi[4] FC13 Fi[19] FC13 Fi[2] Fp Fi[5] FC13 FC13 Fi Fp Fi FC13 Fi Fp Fi[3] FC16{ BC17{ BC18{ BC9}}} Fp[3] FC6 FC6 Fp Fi FC13 Fp FC13 Fp[2] Fi[2] Fp Fi[2] Fp Fi[3] Fp[3] FC13 FC13 Fi Fp[2] Fi} vd v330 v331 v332 v333 v334 v335 v336 v337 v338 v339 v340 v341 v342 v343 v344 v345 v346 v347 v348 v349 v350 v351 Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC19{ BC20{ BC9}} Fi FC13 Fi[3] FC13 Fi[2] Fp Fi[2] Fc Fi[8]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp FC19 FC13 FC13 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[4] Fp[2] Fi[8] Fp[5] Fi[13] FC13 Fi[3] FC21{ FC22{ m FC13 FC23{ m Fi[4]} FC13 FC13 Fc} Fc[4] Fi:1 Fi} Fi[2]}


 S165C2_nt ::~S165C2_nt(){ note_dtor("S165C2_nt", this);}
void  S165C2_nt ::v330(){vfunc_called(this, "_ZN9S165C2_nt4v330Ev");}
void  S165C2_nt ::v331(){vfunc_called(this, "_ZN9S165C2_nt4v331Ev");}
void  S165C2_nt ::v332(){vfunc_called(this, "_ZN9S165C2_nt4v332Ev");}
void  S165C2_nt ::v333(){vfunc_called(this, "_ZN9S165C2_nt4v333Ev");}
void  S165C2_nt ::v334(){vfunc_called(this, "_ZN9S165C2_nt4v334Ev");}
void  S165C2_nt ::v335(){vfunc_called(this, "_ZN9S165C2_nt4v335Ev");}
void  S165C2_nt ::v336(){vfunc_called(this, "_ZN9S165C2_nt4v336Ev");}
void  S165C2_nt ::v337(){vfunc_called(this, "_ZN9S165C2_nt4v337Ev");}
void  S165C2_nt ::v338(){vfunc_called(this, "_ZN9S165C2_nt4v338Ev");}
void  S165C2_nt ::v339(){vfunc_called(this, "_ZN9S165C2_nt4v339Ev");}
void  S165C2_nt ::v340(){vfunc_called(this, "_ZN9S165C2_nt4v340Ev");}
void  S165C2_nt ::v341(){vfunc_called(this, "_ZN9S165C2_nt4v341Ev");}
void  S165C2_nt ::v342(){vfunc_called(this, "_ZN9S165C2_nt4v342Ev");}
void  S165C2_nt ::v343(){vfunc_called(this, "_ZN9S165C2_nt4v343Ev");}
void  S165C2_nt ::v344(){vfunc_called(this, "_ZN9S165C2_nt4v344Ev");}
void  S165C2_nt ::v345(){vfunc_called(this, "_ZN9S165C2_nt4v345Ev");}
void  S165C2_nt ::v346(){vfunc_called(this, "_ZN9S165C2_nt4v346Ev");}
void  S165C2_nt ::v347(){vfunc_called(this, "_ZN9S165C2_nt4v347Ev");}
void  S165C2_nt ::v348(){vfunc_called(this, "_ZN9S165C2_nt4v348Ev");}
void  S165C2_nt ::v349(){vfunc_called(this, "_ZN9S165C2_nt4v349Ev");}
void  S165C2_nt ::v350(){vfunc_called(this, "_ZN9S165C2_nt4v350Ev");}
void  S165C2_nt ::v351(){vfunc_called(this, "_ZN9S165C2_nt4v351Ev");}
void  S165C2_nt ::v352(){vfunc_called(this, "_ZN9S165C2_nt4v352Ev");}
void  S165C2_nt ::v353(){vfunc_called(this, "_ZN9S165C2_nt4v353Ev");}
S165C2_nt ::S165C2_nt(){ note_ctor("S165C2_nt", this);} // tgen

//skip512 S165C2_nt

#else // __cplusplus

extern void _ZN9S165C2_ntC1Ev();
extern void _ZN9S165C2_ntD1Ev();
Name_Map name_map_S165C2_nt[] = {
  NSPAIR(_ZN9S165C2_ntC1Ev),
  NSPAIR(_ZN9S165C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S165C6_nt;
extern VTBL_ENTRY _ZTI9S165C6_nt[];
extern  VTBL_ENTRY _ZTV9S165C6_nt[];
extern Class_Descriptor cd_S165C5_nt;
extern VTBL_ENTRY _ZTI9S165C5_nt[];
extern  VTBL_ENTRY _ZTV9S165C5_nt[];
extern Class_Descriptor cd_S165C4_nt;
extern VTBL_ENTRY _ZTI9S165C4_nt[];
extern  VTBL_ENTRY _ZTV9S165C4_nt[];
extern Class_Descriptor cd_S165C3_nt;
extern VTBL_ENTRY _ZTI9S165C3_nt[];
extern  VTBL_ENTRY _ZTV9S165C3_nt[];
static Base_Class bases_S165C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C6_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_S165C5_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_S165C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S165C3_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 _ZTI9S165C2_nt[];
extern void _ZN9S165C2_ntD1Ev();
extern void _ZN9S165C2_ntD0Ev();
extern void _ZN9S165C6_nt2v3Ev();
extern void _ZN9S165C6_nt2v4Ev();
extern void _ZN9S165C6_nt2v5Ev();
extern void _ZN9S165C6_nt2v6Ev();
extern void _ZN9S165C6_nt2v7Ev();
extern void _ZN9S165C6_nt2v8Ev();
extern void _ZN9S165C6_nt2v9Ev();
extern void _ZN9S165C6_nt3v10Ev();
extern void _ZN9S165C6_nt3v11Ev();
extern void _ZN9S165C6_nt3v12Ev();
extern void _ZN9S165C6_nt3v13Ev();
extern void _ZN9S165C6_nt3v14Ev();
extern void _ZN9S165C6_nt3v15Ev();
extern void _ZN9S165C6_nt3v16Ev();
extern void _ZN9S165C6_nt3v17Ev();
extern void _ZN9S165C6_nt3v18Ev();
extern void _ZN9S165C6_nt3v19Ev();
extern void _ZN9S165C6_nt3v20Ev();
extern void _ZN9S165C6_nt3v21Ev();
extern void _ZN9S165C6_nt3v22Ev();
extern void _ZN9S165C6_nt3v23Ev();
extern void _ZN9S165C6_nt3v24Ev();
extern void _ZN9S165C6_nt3v25Ev();
extern void _ZN9S165C6_nt3v26Ev();
extern void _ZN9S165C6_nt3v27Ev();
extern void _ZN9S165C6_nt3v28Ev();
extern void _ZN9S165C6_nt3v29Ev();
extern void _ZN9S165C6_nt3v30Ev();
extern void _ZN9S165C6_nt3v31Ev();
extern void _ZN9S165C6_nt3v32Ev();
extern void _ZN9S165C6_nt3v33Ev();
extern void _ZN9S165C6_nt3v34Ev();
extern void _ZN9S165C6_nt3v35Ev();
extern void _ZN9S165C6_nt3v36Ev();
extern void _ZN9S165C6_nt3v37Ev();
extern void _ZN9S165C6_nt3v38Ev();
extern void _ZN9S165C6_nt3v39Ev();
extern void _ZN9S165C6_nt3v40Ev();
extern void _ZN9S165C6_nt3v41Ev();
extern void _ZN9S165C6_nt3v42Ev();
extern void _ZN9S165C6_nt3v43Ev();
extern void _ZN9S165C6_nt3v44Ev();
extern void _ZN9S165C6_nt3v45Ev();
extern void _ZN9S165C6_nt3v46Ev();
extern void _ZN9S165C6_nt3v47Ev();
extern void _ZN9S165C6_nt3v48Ev();
extern void _ZN9S165C6_nt3v49Ev();
extern void _ZN9S165C6_nt3v50Ev();
extern void _ZN9S165C6_nt3v51Ev();
extern void _ZN9S165C6_nt3v52Ev();
extern void _ZN9S165C6_nt3v53Ev();
extern void _ZN9S165C6_nt3v54Ev();
extern void _ZN9S165C6_nt3v55Ev();
extern void _ZN9S165C6_nt3v56Ev();
extern void _ZN9S165C6_nt3v57Ev();
extern void _ZN9S165C6_nt3v58Ev();
extern void _ZN9S165C6_nt3v59Ev();
extern void _ZN9S165C6_nt3v60Ev();
extern void _ZN9S165C6_nt3v61Ev();
extern void _ZN9S165C6_nt3v62Ev();
extern void _ZN9S165C6_nt3v63Ev();
extern void _ZN9S165C6_nt3v64Ev();
extern void _ZN9S165C6_nt3v65Ev();
extern void _ZN9S165C6_nt3v66Ev();
extern void _ZN9S165C5_nt3v67Ev();
extern void _ZN9S165C5_nt3v68Ev();
extern void _ZN9S165C5_nt3v69Ev();
extern void _ZN9S165C5_nt3v70Ev();
extern void _ZN9S165C5_nt3v71Ev();
extern void _ZN9S165C5_nt3v72Ev();
extern void _ZN9S165C5_nt3v73Ev();
extern void _ZN9S165C5_nt3v74Ev();
extern void _ZN9S165C5_nt3v75Ev();
extern void _ZN9S165C5_nt3v76Ev();
extern void _ZN9S165C5_nt3v77Ev();
extern void _ZN9S165C5_nt3v78Ev();
extern void _ZN9S165C5_nt3v79Ev();
extern void _ZN9S165C5_nt3v80Ev();
extern void _ZN9S165C5_nt3v81Ev();
extern void _ZN9S165C5_nt3v82Ev();
extern void _ZN9S165C5_nt3v83Ev();
extern void _ZN9S165C5_nt3v84Ev();
extern void _ZN9S165C5_nt3v85Ev();
extern void _ZN9S165C5_nt3v86Ev();
extern void _ZN9S165C5_nt3v87Ev();
extern void _ZN9S165C5_nt3v88Ev();
extern void _ZN9S165C5_nt3v89Ev();
extern void _ZN9S165C5_nt3v90Ev();
extern void _ZN9S165C5_nt3v91Ev();
extern void _ZN9S165C5_nt3v92Ev();
extern void _ZN9S165C5_nt3v93Ev();
extern void _ZN9S165C5_nt3v94Ev();
extern void _ZN9S165C5_nt3v95Ev();
extern void _ZN9S165C5_nt3v96Ev();
extern void _ZN9S165C5_nt3v97Ev();
extern void _ZN9S165C5_nt3v98Ev();
extern void _ZN9S165C5_nt3v99Ev();
extern void _ZN9S165C5_nt4v100Ev();
extern void _ZN9S165C5_nt4v101Ev();
extern void _ZN9S165C5_nt4v102Ev();
extern void _ZN9S165C5_nt4v103Ev();
extern void _ZN9S165C5_nt4v104Ev();
extern void _ZN9S165C5_nt4v105Ev();
extern void _ZN9S165C5_nt4v106Ev();
extern void _ZN9S165C5_nt4v107Ev();
extern void _ZN9S165C5_nt4v108Ev();
extern void _ZN9S165C5_nt4v109Ev();
extern void _ZN9S165C5_nt4v110Ev();
extern void _ZN9S165C5_nt4v111Ev();
extern void _ZN9S165C5_nt4v112Ev();
extern void _ZN9S165C5_nt4v113Ev();
extern void _ZN9S165C5_nt4v114Ev();
extern void _ZN9S165C5_nt4v115Ev();
extern void _ZN9S165C5_nt4v116Ev();
extern void _ZN9S165C5_nt4v117Ev();
extern void _ZN9S165C5_nt4v118Ev();
extern void _ZN9S165C5_nt4v119Ev();
extern void _ZN9S165C5_nt4v120Ev();
extern void _ZN9S165C5_nt4v121Ev();
extern void _ZN9S165C5_nt4v122Ev();
extern void _ZN9S165C5_nt4v123Ev();
extern void _ZN9S165C5_nt4v124Ev();
extern void _ZN9S165C5_nt4v125Ev();
extern void _ZN9S165C5_nt4v126Ev();
extern void _ZN9S165C5_nt4v127Ev();
extern void _ZN9S165C5_nt4v128Ev();
extern void _ZN9S165C5_nt4v129Ev();
extern void _ZN9S165C5_nt4v130Ev();
extern void _ZN9S165C5_nt4v131Ev();
extern void _ZN9S165C5_nt4v132Ev();
extern void _ZN9S165C5_nt4v133Ev();
extern void _ZN9S165C5_nt4v134Ev();
extern void _ZN9S165C5_nt4v135Ev();
extern void _ZN9S165C5_nt4v136Ev();
extern void _ZN9S165C5_nt4v137Ev();
extern void _ZN9S165C5_nt4v138Ev();
extern void _ZN9S165C5_nt4v139Ev();
extern void _ZN9S165C5_nt4v140Ev();
extern void _ZN9S165C5_nt4v141Ev();
extern void _ZN9S165C5_nt4v142Ev();
extern void _ZN9S165C5_nt4v143Ev();
extern void _ZN9S165C5_nt4v144Ev();
extern void _ZN9S165C5_nt4v145Ev();
extern void _ZN9S165C5_nt4v146Ev();
extern void _ZN9S165C5_nt4v147Ev();
extern void _ZN9S165C5_nt4v148Ev();
extern void _ZN9S165C5_nt4v149Ev();
extern void _ZN9S165C5_nt4v150Ev();
extern void _ZN9S165C5_nt4v151Ev();
extern void _ZN9S165C5_nt4v152Ev();
extern void _ZN9S165C5_nt4v153Ev();
extern void _ZN9S165C5_nt4v154Ev();
extern void _ZN9S165C5_nt4v155Ev();
extern void _ZN9S165C5_nt4v156Ev();
extern void _ZN9S165C5_nt4v157Ev();
extern void _ZN9S165C5_nt4v158Ev();
extern void _ZN9S165C5_nt4v159Ev();
extern void _ZN9S165C5_nt4v160Ev();
extern void _ZN9S165C5_nt4v161Ev();
extern void _ZN9S165C5_nt4v162Ev();
extern void _ZN9S165C5_nt4v163Ev();
extern void _ZN9S165C5_nt4v164Ev();
extern void _ZN9S165C5_nt4v165Ev();
extern void _ZN9S165C5_nt4v166Ev();
extern void _ZN9S165C5_nt4v167Ev();
extern void _ZN9S165C5_nt4v168Ev();
extern void _ZN9S165C5_nt4v169Ev();
extern void _ZN9S165C5_nt4v170Ev();
extern void _ZN9S165C5_nt4v171Ev();
extern void _ZN9S165C5_nt4v172Ev();
extern void _ZN9S165C5_nt4v173Ev();
extern void _ZN9S165C5_nt4v174Ev();
extern void _ZN9S165C5_nt4v175Ev();
extern void _ZN9S165C5_nt4v176Ev();
extern void _ZN9S165C5_nt4v177Ev();
extern void _ZN9S165C5_nt4v178Ev();
extern void _ZN9S165C5_nt4v179Ev();
extern void _ZN9S165C5_nt4v180Ev();
extern void _ZN9S165C5_nt4v181Ev();
extern void _ZN9S165C5_nt4v182Ev();
extern void _ZN9S165C5_nt4v183Ev();
extern void _ZN9S165C5_nt4v184Ev();
extern void _ZN9S165C5_nt4v185Ev();
extern void _ZN9S165C5_nt4v186Ev();
extern void _ZN9S165C5_nt4v187Ev();
extern void _ZN9S165C5_nt4v188Ev();
extern void _ZN9S165C5_nt4v189Ev();
extern void _ZN9S165C5_nt4v190Ev();
extern void _ZN9S165C5_nt4v191Ev();
extern void _ZN9S165C5_nt4v192Ev();
extern void _ZN9S165C5_nt4v193Ev();
extern void _ZN9S165C5_nt4v194Ev();
extern void _ZN9S165C5_nt4v195Ev();
extern void _ZN9S165C5_nt4v196Ev();
extern void _ZN9S165C5_nt4v197Ev();
extern void _ZN9S165C5_nt4v198Ev();
extern void _ZN9S165C5_nt4v199Ev();
extern void _ZN9S165C5_nt4v200Ev();
extern void _ZN9S165C5_nt4v201Ev();
extern void _ZN9S165C5_nt4v202Ev();
extern void _ZN9S165C5_nt4v203Ev();
extern void _ZN9S165C5_nt4v204Ev();
extern void _ZN9S165C5_nt4v205Ev();
extern void _ZN9S165C5_nt4v206Ev();
extern void _ZN9S165C5_nt4v207Ev();
extern void _ZN9S165C5_nt4v208Ev();
extern void _ZN9S165C5_nt4v209Ev();
extern void _ZN9S165C4_nt4v210Ev();
extern void _ZN9S165C4_nt4v211Ev();
extern void _ZN9S165C4_nt4v212Ev();
extern void _ZN9S165C4_nt4v213Ev();
extern void _ZN9S165C4_nt4v214Ev();
extern void _ZN9S165C4_nt4v215Ev();
extern void _ZN9S165C4_nt4v216Ev();
extern void _ZN9S165C4_nt4v217Ev();
extern void _ZN9S165C4_nt4v218Ev();
extern void _ZN9S165C4_nt4v219Ev();
extern void _ZN9S165C4_nt4v220Ev();
extern void _ZN9S165C4_nt4v221Ev();
extern void _ZN9S165C4_nt4v222Ev();
extern void _ZN9S165C4_nt4v223Ev();
extern void _ZN9S165C4_nt4v224Ev();
extern void _ZN9S165C4_nt4v225Ev();
extern void _ZN9S165C4_nt4v226Ev();
extern void _ZN9S165C4_nt4v227Ev();
extern void _ZN9S165C4_nt4v228Ev();
extern void _ZN9S165C4_nt4v229Ev();
extern void _ZN9S165C4_nt4v230Ev();
extern void _ZN9S165C4_nt4v231Ev();
extern void _ZN9S165C4_nt4v232Ev();
extern void _ZN9S165C4_nt4v233Ev();
extern void _ZN9S165C4_nt4v234Ev();
extern void _ZN9S165C4_nt4v235Ev();
extern void _ZN9S165C4_nt4v236Ev();
extern void _ZN9S165C4_nt4v237Ev();
extern void _ZN9S165C4_nt4v238Ev();
extern void _ZN9S165C4_nt4v239Ev();
extern void _ZN9S165C4_nt4v240Ev();
extern void _ZN9S165C4_nt4v241Ev();
extern void _ZN9S165C4_nt4v242Ev();
extern void _ZN9S165C4_nt4v243Ev();
extern void _ZN9S165C4_nt4v244Ev();
extern void _ZN9S165C4_nt4v245Ev();
extern void _ZN9S165C4_nt4v246Ev();
extern void _ZN9S165C4_nt4v247Ev();
extern void _ZN9S165C4_nt4v248Ev();
extern void _ZN9S165C4_nt4v249Ev();
extern void _ZN9S165C4_nt4v250Ev();
extern void _ZN9S165C4_nt4v251Ev();
extern void _ZN9S165C4_nt4v252Ev();
extern void _ZN9S165C4_nt4v253Ev();
extern void _ZN9S165C4_nt4v254Ev();
extern void _ZN9S165C4_nt4v255Ev();
extern void _ZN9S165C4_nt4v256Ev();
extern void _ZN9S165C4_nt4v257Ev();
extern void _ZN9S165C4_nt4v258Ev();
extern void _ZN9S165C4_nt4v259Ev();
extern void _ZN9S165C4_nt4v260Ev();
extern void _ZN9S165C4_nt4v261Ev();
extern void _ZN9S165C4_nt4v262Ev();
extern void _ZN9S165C4_nt4v263Ev();
extern void _ZN9S165C4_nt4v264Ev();
extern void _ZN9S165C4_nt4v265Ev();
extern void _ZN9S165C4_nt4v266Ev();
extern void _ZN9S165C4_nt4v267Ev();
extern void _ZN9S165C4_nt4v268Ev();
extern void _ZN9S165C4_nt4v269Ev();
extern void _ZN9S165C4_nt4v270Ev();
extern void _ZN9S165C4_nt4v271Ev();
extern void _ZN9S165C4_nt4v272Ev();
extern void _ZN9S165C4_nt4v273Ev();
extern void _ZN9S165C4_nt4v274Ev();
extern void _ZN9S165C4_nt4v275Ev();
extern void _ZN9S165C4_nt4v276Ev();
extern void _ZN9S165C4_nt4v277Ev();
extern void _ZN9S165C4_nt4v278Ev();
extern void _ZN9S165C4_nt4v279Ev();
extern void _ZN9S165C4_nt4v280Ev();
extern void _ZN9S165C4_nt4v281Ev();
extern void _ZN9S165C4_nt4v282Ev();
extern void _ZN9S165C4_nt4v283Ev();
extern void _ZN9S165C4_nt4v284Ev();
extern void _ZN9S165C4_nt4v285Ev();
extern void _ZN9S165C4_nt4v286Ev();
extern void _ZN9S165C4_nt4v287Ev();
extern void _ZN9S165C4_nt4v288Ev();
extern void _ZN9S165C4_nt4v289Ev();
extern void _ZN9S165C4_nt4v290Ev();
extern void _ZN9S165C4_nt4v291Ev();
extern void _ZN9S165C4_nt4v292Ev();
extern void _ZN9S165C4_nt4v293Ev();
extern void _ZN9S165C4_nt4v294Ev();
extern void _ZN9S165C4_nt4v295Ev();
extern void _ZN9S165C4_nt4v296Ev();
extern void _ZN9S165C4_nt4v297Ev();
extern void _ZN9S165C4_nt4v298Ev();
extern void _ZN9S165C4_nt4v299Ev();
extern void _ZN9S165C4_nt4v300Ev();
extern void _ZN9S165C4_nt4v301Ev();
extern void _ZN9S165C4_nt4v302Ev();
extern void _ZN9S165C4_nt4v303Ev();
extern void _ZN9S165C4_nt4v304Ev();
extern void _ZN9S165C4_nt4v305Ev();
extern void _ZN9S165C4_nt4v306Ev();
extern void _ZN9S165C4_nt4v307Ev();
extern void _ZN9S165C3_nt4v308Ev();
extern void _ZN9S165C3_nt4v309Ev();
extern void _ZN9S165C3_nt4v310Ev();
extern void _ZN9S165C3_nt4v311Ev();
extern void _ZN9S165C3_nt4v312Ev();
extern void _ZN9S165C3_nt4v313Ev();
extern void _ZN9S165C3_nt4v314Ev();
extern void _ZN9S165C3_nt4v315Ev();
extern void _ZN9S165C3_nt4v316Ev();
extern void _ZN9S165C3_nt4v317Ev();
extern void _ZN9S165C3_nt4v318Ev();
extern void _ZN9S165C3_nt4v319Ev();
extern void _ZN9S165C3_nt4v320Ev();
extern void _ZN9S165C3_nt4v321Ev();
extern void _ZN9S165C3_nt4v322Ev();
extern void _ZN9S165C3_nt4v323Ev();
extern void _ZN9S165C3_nt4v324Ev();
extern void _ZN9S165C3_nt4v325Ev();
extern void _ZN9S165C3_nt4v326Ev();
extern void _ZN9S165C3_nt4v327Ev();
extern void _ZN9S165C3_nt4v328Ev();
extern void _ZN9S165C3_nt4v329Ev();
extern void _ZN9S165C2_nt4v330Ev();
extern void _ZN9S165C2_nt4v331Ev();
extern void _ZN9S165C2_nt4v332Ev();
extern void _ZN9S165C2_nt4v333Ev();
extern void _ZN9S165C2_nt4v334Ev();
extern void _ZN9S165C2_nt4v335Ev();
extern void _ZN9S165C2_nt4v336Ev();
extern void _ZN9S165C2_nt4v337Ev();
extern void _ZN9S165C2_nt4v338Ev();
extern void _ZN9S165C2_nt4v339Ev();
extern void _ZN9S165C2_nt4v340Ev();
extern void _ZN9S165C2_nt4v341Ev();
extern void _ZN9S165C2_nt4v342Ev();
extern void _ZN9S165C2_nt4v343Ev();
extern void _ZN9S165C2_nt4v344Ev();
extern void _ZN9S165C2_nt4v345Ev();
extern void _ZN9S165C2_nt4v346Ev();
extern void _ZN9S165C2_nt4v347Ev();
extern void _ZN9S165C2_nt4v348Ev();
extern void _ZN9S165C2_nt4v349Ev();
extern void _ZN9S165C2_nt4v350Ev();
extern void _ZN9S165C2_nt4v351Ev();
extern void _ZN9S165C2_nt4v352Ev();
extern void _ZN9S165C2_nt4v353Ev();
static  VTBL_ENTRY vtc_S165C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S165C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S165C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S165C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v219Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v220Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v221Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v222Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v223Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v224Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v225Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v226Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v227Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v228Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v229Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v230Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v231Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v232Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v233Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v234Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v235Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v236Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v237Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v238Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v239Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v240Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v241Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v242Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v243Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v244Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v245Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v246Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v247Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v248Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v249Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v250Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v251Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v252Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v253Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v254Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v255Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v256Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v257Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v258Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v259Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v260Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v261Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v262Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v263Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v264Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v265Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v266Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v267Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v268Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v269Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v270Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v271Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v272Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v273Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v274Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v275Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v276Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v277Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v278Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v279Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v280Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v281Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v282Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v283Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v284Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v285Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v286Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v287Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v288Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v289Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v290Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v291Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v292Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v293Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v294Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v295Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v296Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v297Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v298Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v299Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v300Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v301Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v302Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v303Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v304Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v305Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v306Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v307Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v308Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v309Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v310Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v311Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v312Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v313Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v314Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v315Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v316Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v317Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v318Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v319Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v320Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v321Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v322Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v323Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v324Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v325Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v326Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v327Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v328Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v329Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v330Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v331Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v332Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v333Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v334Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v335Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v336Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v337Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v338Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v339Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v340Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v341Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v342Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v343Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v344Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v345Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v346Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v347Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v348Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v349Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v350Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v351Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v352Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v353Ev,
};
extern VTBL_ENTRY _ZTI9S165C2_nt[];
VTBL_ENTRY *P__ZTI9S165C2_nt = _ZTI9S165C2_nt; 
extern  VTBL_ENTRY _ZTV9S165C2_nt[];
Class_Descriptor cd_S165C2_nt = {  "S165C2_nt", // class name
  bases_S165C2_nt, 4,
  &(vtc_S165C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1648,1324), // object size
  NSPAIRA(_ZTI9S165C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S165C2_nt),355, //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  S165C1  : S165C2_nt {
  virtual  ~S165C1(); // _ZN6S165C1D1Ev
  virtual void  v1(); // _ZN6S165C12v1Ev
  virtual void  v2(); // _ZN6S165C12v2Ev
  S165C1(); // tgen
};
//SIG(1 S165C1) 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 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 FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC8 FC11{ m Fi} Fi Fc[4] Fp[2] FC8 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] FC7 FC7 FC7 FC12{ BC13{ BC10}} FC12 Fi Fp[2] FC14{ m Fi[3]} FC14 FC14 FC14 Fp FC7 FC12 FC14 FC14 Fi FC14 FC14 Fp Fi Fc FC14 FC14 Fp Fi Fp FC12 FC15{ BC16{ BC10}} FC15} vd v210 v211 v212 v213 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 v227 v228 v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241 v242 v243 v244 v245 v246 v247 v248 v249 v250 v251 v252 v253 v254 v255 v256 v257 v258 v259 v260 v261 v262 v263 v264 v265 v266 v267 v268 v269 v270 v271 v272 v273 v274 v275 v276 v277 v278 v279 v280 v281 v282 v283 v284 v285 v286 v287 v288 v289 v290 v291 v292 v293 v294 v295 v296 v297 v298 v299 v300 v301 v302 v303 v304 v305 v306 v307 Fi[3] Fp[2] Fi Fp[2] 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] Fc[4] Fi[10] Fp[2] Fi[4] FC14 Fi[19] FC14 Fi[2] Fp Fi[5] FC14 FC14 Fi Fp Fi FC14 Fi Fp Fi[3] FC17{ BC18{ BC19{ BC10}}} Fp[3] FC7 FC7 Fp Fi FC14 Fp FC14 Fp[2] Fi[2] Fp Fi[2] Fp Fi[3] Fp[3] FC14 FC14 Fi Fp[2] Fi} vd v308 v309 v310 v311 v312 v313 v314 v315 v316 v317 v318 v319 v320 v321 v322 v323 v324 v325 v326 v327 v328 v329 Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC20{ BC21{ BC10}} Fi FC14 Fi[3] FC14 Fi[2] Fp Fi[2] Fc Fi[8]} vd v330 v331 v332 v333 v334 v335 v336 v337 v338 v339 v340 v341 v342 v343 v344 v345 v346 v347 v348 v349 v350 v351 v352 v353 Fp FC20 FC14 FC14 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[4] Fp[2] Fi[8] Fp[5] Fi[13] FC14 Fi[3] FC22{ FC23{ m FC14 FC24{ m Fi[4]} FC14 FC14 Fc} Fc[4] Fi:1 Fi} Fi[2]} vd v1 v2}


 S165C1 ::~S165C1(){ note_dtor("S165C1", this);}
void  S165C1 ::v1(){vfunc_called(this, "_ZN6S165C12v1Ev");}
void  S165C1 ::v2(){vfunc_called(this, "_ZN6S165C12v2Ev");}
S165C1 ::S165C1(){ note_ctor("S165C1", this);} // tgen

static void Test_S165C1()
{
  extern Class_Descriptor cd_S165C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(207,332)];
    init_test(&cd_S165C1, buf);
    S165C1 *dp, &lv = *(dp=new (buf) S165C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1648,1324), "sizeof(S165C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S165C1)");
    check_base_class_offset(lv, (S165C6_nt*)(S165C5_nt*)(S165C4_nt*)(S165C3_nt*)(S165C2_nt*), 0, "S165C1");
    check_base_class_offset(lv, (S165C5_nt*)(S165C4_nt*)(S165C3_nt*)(S165C2_nt*), 0, "S165C1");
    check_base_class_offset(lv, (S165C4_nt*)(S165C3_nt*)(S165C2_nt*), 0, "S165C1");
    check_base_class_offset(lv, (S165C3_nt*)(S165C2_nt*), 0, "S165C1");
    check_base_class_offset(lv, (S165C2_nt*), 0, "S165C1");
    test_class_info(&lv, &cd_S165C1);
    dp->~S165C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS165C1(Test_S165C1, "S165C1", ABISELECT(1648,1324));

#else // __cplusplus

extern void _ZN6S165C1C1Ev();
extern void _ZN6S165C1D1Ev();
Name_Map name_map_S165C1[] = {
  NSPAIR(_ZN6S165C1C1Ev),
  NSPAIR(_ZN6S165C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S165C6_nt;
extern VTBL_ENTRY _ZTI9S165C6_nt[];
extern  VTBL_ENTRY _ZTV9S165C6_nt[];
extern Class_Descriptor cd_S165C5_nt;
extern VTBL_ENTRY _ZTI9S165C5_nt[];
extern  VTBL_ENTRY _ZTV9S165C5_nt[];
extern Class_Descriptor cd_S165C4_nt;
extern VTBL_ENTRY _ZTI9S165C4_nt[];
extern  VTBL_ENTRY _ZTV9S165C4_nt[];
extern Class_Descriptor cd_S165C3_nt;
extern VTBL_ENTRY _ZTI9S165C3_nt[];
extern  VTBL_ENTRY _ZTV9S165C3_nt[];
extern Class_Descriptor cd_S165C2_nt;
extern VTBL_ENTRY _ZTI9S165C2_nt[];
extern  VTBL_ENTRY _ZTV9S165C2_nt[];
static Base_Class bases_S165C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C6_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_S165C5_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_S165C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S165C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S165C2_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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S165C1[];
extern void _ZN6S165C1D1Ev();
extern void _ZN6S165C1D0Ev();
extern void _ZN9S165C6_nt2v3Ev();
extern void _ZN9S165C6_nt2v4Ev();
extern void _ZN9S165C6_nt2v5Ev();
extern void _ZN9S165C6_nt2v6Ev();
extern void _ZN9S165C6_nt2v7Ev();
extern void _ZN9S165C6_nt2v8Ev();
extern void _ZN9S165C6_nt2v9Ev();
extern void _ZN9S165C6_nt3v10Ev();
extern void _ZN9S165C6_nt3v11Ev();
extern void _ZN9S165C6_nt3v12Ev();
extern void _ZN9S165C6_nt3v13Ev();
extern void _ZN9S165C6_nt3v14Ev();
extern void _ZN9S165C6_nt3v15Ev();
extern void _ZN9S165C6_nt3v16Ev();
extern void _ZN9S165C6_nt3v17Ev();
extern void _ZN9S165C6_nt3v18Ev();
extern void _ZN9S165C6_nt3v19Ev();
extern void _ZN9S165C6_nt3v20Ev();
extern void _ZN9S165C6_nt3v21Ev();
extern void _ZN9S165C6_nt3v22Ev();
extern void _ZN9S165C6_nt3v23Ev();
extern void _ZN9S165C6_nt3v24Ev();
extern void _ZN9S165C6_nt3v25Ev();
extern void _ZN9S165C6_nt3v26Ev();
extern void _ZN9S165C6_nt3v27Ev();
extern void _ZN9S165C6_nt3v28Ev();
extern void _ZN9S165C6_nt3v29Ev();
extern void _ZN9S165C6_nt3v30Ev();
extern void _ZN9S165C6_nt3v31Ev();
extern void _ZN9S165C6_nt3v32Ev();
extern void _ZN9S165C6_nt3v33Ev();
extern void _ZN9S165C6_nt3v34Ev();
extern void _ZN9S165C6_nt3v35Ev();
extern void _ZN9S165C6_nt3v36Ev();
extern void _ZN9S165C6_nt3v37Ev();
extern void _ZN9S165C6_nt3v38Ev();
extern void _ZN9S165C6_nt3v39Ev();
extern void _ZN9S165C6_nt3v40Ev();
extern void _ZN9S165C6_nt3v41Ev();
extern void _ZN9S165C6_nt3v42Ev();
extern void _ZN9S165C6_nt3v43Ev();
extern void _ZN9S165C6_nt3v44Ev();
extern void _ZN9S165C6_nt3v45Ev();
extern void _ZN9S165C6_nt3v46Ev();
extern void _ZN9S165C6_nt3v47Ev();
extern void _ZN9S165C6_nt3v48Ev();
extern void _ZN9S165C6_nt3v49Ev();
extern void _ZN9S165C6_nt3v50Ev();
extern void _ZN9S165C6_nt3v51Ev();
extern void _ZN9S165C6_nt3v52Ev();
extern void _ZN9S165C6_nt3v53Ev();
extern void _ZN9S165C6_nt3v54Ev();
extern void _ZN9S165C6_nt3v55Ev();
extern void _ZN9S165C6_nt3v56Ev();
extern void _ZN9S165C6_nt3v57Ev();
extern void _ZN9S165C6_nt3v58Ev();
extern void _ZN9S165C6_nt3v59Ev();
extern void _ZN9S165C6_nt3v60Ev();
extern void _ZN9S165C6_nt3v61Ev();
extern void _ZN9S165C6_nt3v62Ev();
extern void _ZN9S165C6_nt3v63Ev();
extern void _ZN9S165C6_nt3v64Ev();
extern void _ZN9S165C6_nt3v65Ev();
extern void _ZN9S165C6_nt3v66Ev();
extern void _ZN9S165C5_nt3v67Ev();
extern void _ZN9S165C5_nt3v68Ev();
extern void _ZN9S165C5_nt3v69Ev();
extern void _ZN9S165C5_nt3v70Ev();
extern void _ZN9S165C5_nt3v71Ev();
extern void _ZN9S165C5_nt3v72Ev();
extern void _ZN9S165C5_nt3v73Ev();
extern void _ZN9S165C5_nt3v74Ev();
extern void _ZN9S165C5_nt3v75Ev();
extern void _ZN9S165C5_nt3v76Ev();
extern void _ZN9S165C5_nt3v77Ev();
extern void _ZN9S165C5_nt3v78Ev();
extern void _ZN9S165C5_nt3v79Ev();
extern void _ZN9S165C5_nt3v80Ev();
extern void _ZN9S165C5_nt3v81Ev();
extern void _ZN9S165C5_nt3v82Ev();
extern void _ZN9S165C5_nt3v83Ev();
extern void _ZN9S165C5_nt3v84Ev();
extern void _ZN9S165C5_nt3v85Ev();
extern void _ZN9S165C5_nt3v86Ev();
extern void _ZN9S165C5_nt3v87Ev();
extern void _ZN9S165C5_nt3v88Ev();
extern void _ZN9S165C5_nt3v89Ev();
extern void _ZN9S165C5_nt3v90Ev();
extern void _ZN9S165C5_nt3v91Ev();
extern void _ZN9S165C5_nt3v92Ev();
extern void _ZN9S165C5_nt3v93Ev();
extern void _ZN9S165C5_nt3v94Ev();
extern void _ZN9S165C5_nt3v95Ev();
extern void _ZN9S165C5_nt3v96Ev();
extern void _ZN9S165C5_nt3v97Ev();
extern void _ZN9S165C5_nt3v98Ev();
extern void _ZN9S165C5_nt3v99Ev();
extern void _ZN9S165C5_nt4v100Ev();
extern void _ZN9S165C5_nt4v101Ev();
extern void _ZN9S165C5_nt4v102Ev();
extern void _ZN9S165C5_nt4v103Ev();
extern void _ZN9S165C5_nt4v104Ev();
extern void _ZN9S165C5_nt4v105Ev();
extern void _ZN9S165C5_nt4v106Ev();
extern void _ZN9S165C5_nt4v107Ev();
extern void _ZN9S165C5_nt4v108Ev();
extern void _ZN9S165C5_nt4v109Ev();
extern void _ZN9S165C5_nt4v110Ev();
extern void _ZN9S165C5_nt4v111Ev();
extern void _ZN9S165C5_nt4v112Ev();
extern void _ZN9S165C5_nt4v113Ev();
extern void _ZN9S165C5_nt4v114Ev();
extern void _ZN9S165C5_nt4v115Ev();
extern void _ZN9S165C5_nt4v116Ev();
extern void _ZN9S165C5_nt4v117Ev();
extern void _ZN9S165C5_nt4v118Ev();
extern void _ZN9S165C5_nt4v119Ev();
extern void _ZN9S165C5_nt4v120Ev();
extern void _ZN9S165C5_nt4v121Ev();
extern void _ZN9S165C5_nt4v122Ev();
extern void _ZN9S165C5_nt4v123Ev();
extern void _ZN9S165C5_nt4v124Ev();
extern void _ZN9S165C5_nt4v125Ev();
extern void _ZN9S165C5_nt4v126Ev();
extern void _ZN9S165C5_nt4v127Ev();
extern void _ZN9S165C5_nt4v128Ev();
extern void _ZN9S165C5_nt4v129Ev();
extern void _ZN9S165C5_nt4v130Ev();
extern void _ZN9S165C5_nt4v131Ev();
extern void _ZN9S165C5_nt4v132Ev();
extern void _ZN9S165C5_nt4v133Ev();
extern void _ZN9S165C5_nt4v134Ev();
extern void _ZN9S165C5_nt4v135Ev();
extern void _ZN9S165C5_nt4v136Ev();
extern void _ZN9S165C5_nt4v137Ev();
extern void _ZN9S165C5_nt4v138Ev();
extern void _ZN9S165C5_nt4v139Ev();
extern void _ZN9S165C5_nt4v140Ev();
extern void _ZN9S165C5_nt4v141Ev();
extern void _ZN9S165C5_nt4v142Ev();
extern void _ZN9S165C5_nt4v143Ev();
extern void _ZN9S165C5_nt4v144Ev();
extern void _ZN9S165C5_nt4v145Ev();
extern void _ZN9S165C5_nt4v146Ev();
extern void _ZN9S165C5_nt4v147Ev();
extern void _ZN9S165C5_nt4v148Ev();
extern void _ZN9S165C5_nt4v149Ev();
extern void _ZN9S165C5_nt4v150Ev();
extern void _ZN9S165C5_nt4v151Ev();
extern void _ZN9S165C5_nt4v152Ev();
extern void _ZN9S165C5_nt4v153Ev();
extern void _ZN9S165C5_nt4v154Ev();
extern void _ZN9S165C5_nt4v155Ev();
extern void _ZN9S165C5_nt4v156Ev();
extern void _ZN9S165C5_nt4v157Ev();
extern void _ZN9S165C5_nt4v158Ev();
extern void _ZN9S165C5_nt4v159Ev();
extern void _ZN9S165C5_nt4v160Ev();
extern void _ZN9S165C5_nt4v161Ev();
extern void _ZN9S165C5_nt4v162Ev();
extern void _ZN9S165C5_nt4v163Ev();
extern void _ZN9S165C5_nt4v164Ev();
extern void _ZN9S165C5_nt4v165Ev();
extern void _ZN9S165C5_nt4v166Ev();
extern void _ZN9S165C5_nt4v167Ev();
extern void _ZN9S165C5_nt4v168Ev();
extern void _ZN9S165C5_nt4v169Ev();
extern void _ZN9S165C5_nt4v170Ev();
extern void _ZN9S165C5_nt4v171Ev();
extern void _ZN9S165C5_nt4v172Ev();
extern void _ZN9S165C5_nt4v173Ev();
extern void _ZN9S165C5_nt4v174Ev();
extern void _ZN9S165C5_nt4v175Ev();
extern void _ZN9S165C5_nt4v176Ev();
extern void _ZN9S165C5_nt4v177Ev();
extern void _ZN9S165C5_nt4v178Ev();
extern void _ZN9S165C5_nt4v179Ev();
extern void _ZN9S165C5_nt4v180Ev();
extern void _ZN9S165C5_nt4v181Ev();
extern void _ZN9S165C5_nt4v182Ev();
extern void _ZN9S165C5_nt4v183Ev();
extern void _ZN9S165C5_nt4v184Ev();
extern void _ZN9S165C5_nt4v185Ev();
extern void _ZN9S165C5_nt4v186Ev();
extern void _ZN9S165C5_nt4v187Ev();
extern void _ZN9S165C5_nt4v188Ev();
extern void _ZN9S165C5_nt4v189Ev();
extern void _ZN9S165C5_nt4v190Ev();
extern void _ZN9S165C5_nt4v191Ev();
extern void _ZN9S165C5_nt4v192Ev();
extern void _ZN9S165C5_nt4v193Ev();
extern void _ZN9S165C5_nt4v194Ev();
extern void _ZN9S165C5_nt4v195Ev();
extern void _ZN9S165C5_nt4v196Ev();
extern void _ZN9S165C5_nt4v197Ev();
extern void _ZN9S165C5_nt4v198Ev();
extern void _ZN9S165C5_nt4v199Ev();
extern void _ZN9S165C5_nt4v200Ev();
extern void _ZN9S165C5_nt4v201Ev();
extern void _ZN9S165C5_nt4v202Ev();
extern void _ZN9S165C5_nt4v203Ev();
extern void _ZN9S165C5_nt4v204Ev();
extern void _ZN9S165C5_nt4v205Ev();
extern void _ZN9S165C5_nt4v206Ev();
extern void _ZN9S165C5_nt4v207Ev();
extern void _ZN9S165C5_nt4v208Ev();
extern void _ZN9S165C5_nt4v209Ev();
extern void _ZN9S165C4_nt4v210Ev();
extern void _ZN9S165C4_nt4v211Ev();
extern void _ZN9S165C4_nt4v212Ev();
extern void _ZN9S165C4_nt4v213Ev();
extern void _ZN9S165C4_nt4v214Ev();
extern void _ZN9S165C4_nt4v215Ev();
extern void _ZN9S165C4_nt4v216Ev();
extern void _ZN9S165C4_nt4v217Ev();
extern void _ZN9S165C4_nt4v218Ev();
extern void _ZN9S165C4_nt4v219Ev();
extern void _ZN9S165C4_nt4v220Ev();
extern void _ZN9S165C4_nt4v221Ev();
extern void _ZN9S165C4_nt4v222Ev();
extern void _ZN9S165C4_nt4v223Ev();
extern void _ZN9S165C4_nt4v224Ev();
extern void _ZN9S165C4_nt4v225Ev();
extern void _ZN9S165C4_nt4v226Ev();
extern void _ZN9S165C4_nt4v227Ev();
extern void _ZN9S165C4_nt4v228Ev();
extern void _ZN9S165C4_nt4v229Ev();
extern void _ZN9S165C4_nt4v230Ev();
extern void _ZN9S165C4_nt4v231Ev();
extern void _ZN9S165C4_nt4v232Ev();
extern void _ZN9S165C4_nt4v233Ev();
extern void _ZN9S165C4_nt4v234Ev();
extern void _ZN9S165C4_nt4v235Ev();
extern void _ZN9S165C4_nt4v236Ev();
extern void _ZN9S165C4_nt4v237Ev();
extern void _ZN9S165C4_nt4v238Ev();
extern void _ZN9S165C4_nt4v239Ev();
extern void _ZN9S165C4_nt4v240Ev();
extern void _ZN9S165C4_nt4v241Ev();
extern void _ZN9S165C4_nt4v242Ev();
extern void _ZN9S165C4_nt4v243Ev();
extern void _ZN9S165C4_nt4v244Ev();
extern void _ZN9S165C4_nt4v245Ev();
extern void _ZN9S165C4_nt4v246Ev();
extern void _ZN9S165C4_nt4v247Ev();
extern void _ZN9S165C4_nt4v248Ev();
extern void _ZN9S165C4_nt4v249Ev();
extern void _ZN9S165C4_nt4v250Ev();
extern void _ZN9S165C4_nt4v251Ev();
extern void _ZN9S165C4_nt4v252Ev();
extern void _ZN9S165C4_nt4v253Ev();
extern void _ZN9S165C4_nt4v254Ev();
extern void _ZN9S165C4_nt4v255Ev();
extern void _ZN9S165C4_nt4v256Ev();
extern void _ZN9S165C4_nt4v257Ev();
extern void _ZN9S165C4_nt4v258Ev();
extern void _ZN9S165C4_nt4v259Ev();
extern void _ZN9S165C4_nt4v260Ev();
extern void _ZN9S165C4_nt4v261Ev();
extern void _ZN9S165C4_nt4v262Ev();
extern void _ZN9S165C4_nt4v263Ev();
extern void _ZN9S165C4_nt4v264Ev();
extern void _ZN9S165C4_nt4v265Ev();
extern void _ZN9S165C4_nt4v266Ev();
extern void _ZN9S165C4_nt4v267Ev();
extern void _ZN9S165C4_nt4v268Ev();
extern void _ZN9S165C4_nt4v269Ev();
extern void _ZN9S165C4_nt4v270Ev();
extern void _ZN9S165C4_nt4v271Ev();
extern void _ZN9S165C4_nt4v272Ev();
extern void _ZN9S165C4_nt4v273Ev();
extern void _ZN9S165C4_nt4v274Ev();
extern void _ZN9S165C4_nt4v275Ev();
extern void _ZN9S165C4_nt4v276Ev();
extern void _ZN9S165C4_nt4v277Ev();
extern void _ZN9S165C4_nt4v278Ev();
extern void _ZN9S165C4_nt4v279Ev();
extern void _ZN9S165C4_nt4v280Ev();
extern void _ZN9S165C4_nt4v281Ev();
extern void _ZN9S165C4_nt4v282Ev();
extern void _ZN9S165C4_nt4v283Ev();
extern void _ZN9S165C4_nt4v284Ev();
extern void _ZN9S165C4_nt4v285Ev();
extern void _ZN9S165C4_nt4v286Ev();
extern void _ZN9S165C4_nt4v287Ev();
extern void _ZN9S165C4_nt4v288Ev();
extern void _ZN9S165C4_nt4v289Ev();
extern void _ZN9S165C4_nt4v290Ev();
extern void _ZN9S165C4_nt4v291Ev();
extern void _ZN9S165C4_nt4v292Ev();
extern void _ZN9S165C4_nt4v293Ev();
extern void _ZN9S165C4_nt4v294Ev();
extern void _ZN9S165C4_nt4v295Ev();
extern void _ZN9S165C4_nt4v296Ev();
extern void _ZN9S165C4_nt4v297Ev();
extern void _ZN9S165C4_nt4v298Ev();
extern void _ZN9S165C4_nt4v299Ev();
extern void _ZN9S165C4_nt4v300Ev();
extern void _ZN9S165C4_nt4v301Ev();
extern void _ZN9S165C4_nt4v302Ev();
extern void _ZN9S165C4_nt4v303Ev();
extern void _ZN9S165C4_nt4v304Ev();
extern void _ZN9S165C4_nt4v305Ev();
extern void _ZN9S165C4_nt4v306Ev();
extern void _ZN9S165C4_nt4v307Ev();
extern void _ZN9S165C3_nt4v308Ev();
extern void _ZN9S165C3_nt4v309Ev();
extern void _ZN9S165C3_nt4v310Ev();
extern void _ZN9S165C3_nt4v311Ev();
extern void _ZN9S165C3_nt4v312Ev();
extern void _ZN9S165C3_nt4v313Ev();
extern void _ZN9S165C3_nt4v314Ev();
extern void _ZN9S165C3_nt4v315Ev();
extern void _ZN9S165C3_nt4v316Ev();
extern void _ZN9S165C3_nt4v317Ev();
extern void _ZN9S165C3_nt4v318Ev();
extern void _ZN9S165C3_nt4v319Ev();
extern void _ZN9S165C3_nt4v320Ev();
extern void _ZN9S165C3_nt4v321Ev();
extern void _ZN9S165C3_nt4v322Ev();
extern void _ZN9S165C3_nt4v323Ev();
extern void _ZN9S165C3_nt4v324Ev();
extern void _ZN9S165C3_nt4v325Ev();
extern void _ZN9S165C3_nt4v326Ev();
extern void _ZN9S165C3_nt4v327Ev();
extern void _ZN9S165C3_nt4v328Ev();
extern void _ZN9S165C3_nt4v329Ev();
extern void _ZN9S165C2_nt4v330Ev();
extern void _ZN9S165C2_nt4v331Ev();
extern void _ZN9S165C2_nt4v332Ev();
extern void _ZN9S165C2_nt4v333Ev();
extern void _ZN9S165C2_nt4v334Ev();
extern void _ZN9S165C2_nt4v335Ev();
extern void _ZN9S165C2_nt4v336Ev();
extern void _ZN9S165C2_nt4v337Ev();
extern void _ZN9S165C2_nt4v338Ev();
extern void _ZN9S165C2_nt4v339Ev();
extern void _ZN9S165C2_nt4v340Ev();
extern void _ZN9S165C2_nt4v341Ev();
extern void _ZN9S165C2_nt4v342Ev();
extern void _ZN9S165C2_nt4v343Ev();
extern void _ZN9S165C2_nt4v344Ev();
extern void _ZN9S165C2_nt4v345Ev();
extern void _ZN9S165C2_nt4v346Ev();
extern void _ZN9S165C2_nt4v347Ev();
extern void _ZN9S165C2_nt4v348Ev();
extern void _ZN9S165C2_nt4v349Ev();
extern void _ZN9S165C2_nt4v350Ev();
extern void _ZN9S165C2_nt4v351Ev();
extern void _ZN9S165C2_nt4v352Ev();
extern void _ZN9S165C2_nt4v353Ev();
extern void _ZN6S165C12v1Ev();
extern void _ZN6S165C12v2Ev();
static  VTBL_ENTRY vtc_S165C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S165C1[0]),
  (VTBL_ENTRY)&_ZN6S165C1D1Ev,
  (VTBL_ENTRY)&_ZN6S165C1D0Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S165C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S165C5_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v219Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v220Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v221Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v222Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v223Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v224Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v225Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v226Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v227Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v228Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v229Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v230Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v231Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v232Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v233Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v234Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v235Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v236Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v237Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v238Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v239Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v240Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v241Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v242Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v243Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v244Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v245Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v246Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v247Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v248Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v249Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v250Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v251Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v252Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v253Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v254Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v255Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v256Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v257Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v258Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v259Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v260Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v261Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v262Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v263Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v264Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v265Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v266Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v267Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v268Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v269Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v270Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v271Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v272Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v273Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v274Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v275Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v276Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v277Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v278Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v279Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v280Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v281Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v282Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v283Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v284Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v285Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v286Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v287Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v288Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v289Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v290Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v291Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v292Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v293Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v294Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v295Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v296Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v297Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v298Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v299Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v300Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v301Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v302Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v303Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v304Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v305Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v306Ev,
  (VTBL_ENTRY)&_ZN9S165C4_nt4v307Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v308Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v309Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v310Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v311Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v312Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v313Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v314Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v315Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v316Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v317Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v318Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v319Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v320Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v321Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v322Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v323Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v324Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v325Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v326Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v327Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v328Ev,
  (VTBL_ENTRY)&_ZN9S165C3_nt4v329Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v330Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v331Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v332Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v333Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v334Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v335Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v336Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v337Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v338Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v339Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v340Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v341Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v342Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v343Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v344Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v345Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v346Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v347Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v348Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v349Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v350Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v351Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v352Ev,
  (VTBL_ENTRY)&_ZN9S165C2_nt4v353Ev,
  (VTBL_ENTRY)&_ZN6S165C12v1Ev,
  (VTBL_ENTRY)&_ZN6S165C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S165C1[];
extern  VTBL_ENTRY _ZTV6S165C1[];
Class_Descriptor cd_S165C1 = {  "S165C1", // class name
  bases_S165C1, 5,
  &(vtc_S165C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1648,1324), // object size
  NSPAIRA(_ZTI6S165C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S165C1),357, //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  S615C5  {
  int s615c5f0;
  __tsi64 s615c5f1;
  void *s615c5f2[4];
  int s615c5f3[2];
  void *s615c5f4;
  ::S165C7_nt s615c5f5;
  void *s615c5f6[2];
  virtual  ~S615C5(); // _ZN6S615C5D1Ev
  virtual void  v5(); // _ZN6S615C52v5Ev
  virtual void  v6(); // _ZN6S615C52v6Ev
  virtual void  v7(); // _ZN6S615C52v7Ev
  virtual void  v8(); // _ZN6S615C52v8Ev
  virtual void  v9(); // _ZN6S615C52v9Ev
  virtual void  v10(); // _ZN6S615C53v10Ev
  virtual void  v11(); // _ZN6S615C53v11Ev
  virtual void  v12(); // _ZN6S615C53v12Ev
  virtual void  v13(); // _ZN6S615C53v13Ev
  virtual void  v14(); // _ZN6S615C53v14Ev
  virtual void  v15(); // _ZN6S615C53v15Ev
  virtual void  v16(); // _ZN6S615C53v16Ev
  virtual void  v17(); // _ZN6S615C53v17Ev
  virtual void  v18(); // _ZN6S615C53v18Ev
  virtual void  v19(); // _ZN6S615C53v19Ev
  virtual void  v20(); // _ZN6S615C53v20Ev
  virtual void  v21(); // _ZN6S615C53v21Ev
  virtual void  v22(); // _ZN6S615C53v22Ev
  virtual void  v23(); // _ZN6S615C53v23Ev
  virtual void  v24(); // _ZN6S615C53v24Ev
  virtual void  v25(); // _ZN6S615C53v25Ev
  virtual void  v26(); // _ZN6S615C53v26Ev
  virtual void  v27(); // _ZN6S615C53v27Ev
  virtual void  v28(); // _ZN6S615C53v28Ev
  virtual void  v29(); // _ZN6S615C53v29Ev
  virtual void  v30(); // _ZN6S615C53v30Ev
  virtual void  v31(); // _ZN6S615C53v31Ev
  virtual void  v32(); // _ZN6S615C53v32Ev
  virtual void  v33(); // _ZN6S615C53v33Ev
  virtual void  v34(); // _ZN6S615C53v34Ev
  virtual void  v35(); // _ZN6S615C53v35Ev
  virtual void  v36(); // _ZN6S615C53v36Ev
  virtual void  v37(); // _ZN6S615C53v37Ev
  virtual void  v38(); // _ZN6S615C53v38Ev
  virtual void  v39(); // _ZN6S615C53v39Ev
  virtual void  v40(); // _ZN6S615C53v40Ev
  virtual void  v41(); // _ZN6S615C53v41Ev
  virtual void  v42(); // _ZN6S615C53v42Ev
  virtual void  v43(); // _ZN6S615C53v43Ev
  virtual void  v44(); // _ZN6S615C53v44Ev
  virtual void  v45(); // _ZN6S615C53v45Ev
  virtual void  v46(); // _ZN6S615C53v46Ev
  virtual void  v47(); // _ZN6S615C53v47Ev
  virtual void  v48(); // _ZN6S615C53v48Ev
  virtual void  v49(); // _ZN6S615C53v49Ev
  virtual void  v50(); // _ZN6S615C53v50Ev
  virtual void  v51(); // _ZN6S615C53v51Ev
  virtual void  v52(); // _ZN6S615C53v52Ev
  virtual void  v53(); // _ZN6S615C53v53Ev
  virtual void  v54(); // _ZN6S615C53v54Ev
  virtual void  v55(); // _ZN6S615C53v55Ev
  virtual void  v56(); // _ZN6S615C53v56Ev
  virtual void  v57(); // _ZN6S615C53v57Ev
  virtual void  v58(); // _ZN6S615C53v58Ev
  virtual void  v59(); // _ZN6S615C53v59Ev
  virtual void  v60(); // _ZN6S615C53v60Ev
  virtual void  v61(); // _ZN6S615C53v61Ev
  virtual void  v62(); // _ZN6S615C53v62Ev
  virtual void  v63(); // _ZN6S615C53v63Ev
  virtual void  v64(); // _ZN6S615C53v64Ev
  virtual void  v65(); // _ZN6S615C53v65Ev
  virtual void  v66(); // _ZN6S615C53v66Ev
  virtual void  v67(); // _ZN6S615C53v67Ev
  virtual void  v68(); // _ZN6S615C53v68Ev
  S615C5(); // tgen
};
//SIG(-1 S615C5) 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]}


 S615C5 ::~S615C5(){ note_dtor("S615C5", this);}
void  S615C5 ::v5(){vfunc_called(this, "_ZN6S615C52v5Ev");}
void  S615C5 ::v6(){vfunc_called(this, "_ZN6S615C52v6Ev");}
void  S615C5 ::v7(){vfunc_called(this, "_ZN6S615C52v7Ev");}
void  S615C5 ::v8(){vfunc_called(this, "_ZN6S615C52v8Ev");}
void  S615C5 ::v9(){vfunc_called(this, "_ZN6S615C52v9Ev");}
void  S615C5 ::v10(){vfunc_called(this, "_ZN6S615C53v10Ev");}
void  S615C5 ::v11(){vfunc_called(this, "_ZN6S615C53v11Ev");}
void  S615C5 ::v12(){vfunc_called(this, "_ZN6S615C53v12Ev");}
void  S615C5 ::v13(){vfunc_called(this, "_ZN6S615C53v13Ev");}
void  S615C5 ::v14(){vfunc_called(this, "_ZN6S615C53v14Ev");}
void  S615C5 ::v15(){vfunc_called(this, "_ZN6S615C53v15Ev");}
void  S615C5 ::v16(){vfunc_called(this, "_ZN6S615C53v16Ev");}
void  S615C5 ::v17(){vfunc_called(this, "_ZN6S615C53v17Ev");}
void  S615C5 ::v18(){vfunc_called(this, "_ZN6S615C53v18Ev");}
void  S615C5 ::v19(){vfunc_called(this, "_ZN6S615C53v19Ev");}
void  S615C5 ::v20(){vfunc_called(this, "_ZN6S615C53v20Ev");}
void  S615C5 ::v21(){vfunc_called(this, "_ZN6S615C53v21Ev");}
void  S615C5 ::v22(){vfunc_called(this, "_ZN6S615C53v22Ev");}
void  S615C5 ::v23(){vfunc_called(this, "_ZN6S615C53v23Ev");}
void  S615C5 ::v24(){vfunc_called(this, "_ZN6S615C53v24Ev");}
void  S615C5 ::v25(){vfunc_called(this, "_ZN6S615C53v25Ev");}
void  S615C5 ::v26(){vfunc_called(this, "_ZN6S615C53v26Ev");}
void  S615C5 ::v27(){vfunc_called(this, "_ZN6S615C53v27Ev");}
void  S615C5 ::v28(){vfunc_called(this, "_ZN6S615C53v28Ev");}
void  S615C5 ::v29(){vfunc_called(this, "_ZN6S615C53v29Ev");}
void  S615C5 ::v30(){vfunc_called(this, "_ZN6S615C53v30Ev");}
void  S615C5 ::v31(){vfunc_called(this, "_ZN6S615C53v31Ev");}
void  S615C5 ::v32(){vfunc_called(this, "_ZN6S615C53v32Ev");}
void  S615C5 ::v33(){vfunc_called(this, "_ZN6S615C53v33Ev");}
void  S615C5 ::v34(){vfunc_called(this, "_ZN6S615C53v34Ev");}
void  S615C5 ::v35(){vfunc_called(this, "_ZN6S615C53v35Ev");}
void  S615C5 ::v36(){vfunc_called(this, "_ZN6S615C53v36Ev");}
void  S615C5 ::v37(){vfunc_called(this, "_ZN6S615C53v37Ev");}
void  S615C5 ::v38(){vfunc_called(this, "_ZN6S615C53v38Ev");}
void  S615C5 ::v39(){vfunc_called(this, "_ZN6S615C53v39Ev");}
void  S615C5 ::v40(){vfunc_called(this, "_ZN6S615C53v40Ev");}
void  S615C5 ::v41(){vfunc_called(this, "_ZN6S615C53v41Ev");}
void  S615C5 ::v42(){vfunc_called(this, "_ZN6S615C53v42Ev");}
void  S615C5 ::v43(){vfunc_called(this, "_ZN6S615C53v43Ev");}
void  S615C5 ::v44(){vfunc_called(this, "_ZN6S615C53v44Ev");}
void  S615C5 ::v45(){vfunc_called(this, "_ZN6S615C53v45Ev");}
void  S615C5 ::v46(){vfunc_called(this, "_ZN6S615C53v46Ev");}
void  S615C5 ::v47(){vfunc_called(this, "_ZN6S615C53v47Ev");}
void  S615C5 ::v48(){vfunc_called(this, "_ZN6S615C53v48Ev");}
void  S615C5 ::v49(){vfunc_called(this, "_ZN6S615C53v49Ev");}
void  S615C5 ::v50(){vfunc_called(this, "_ZN6S615C53v50Ev");}
void  S615C5 ::v51(){vfunc_called(this, "_ZN6S615C53v51Ev");}
void  S615C5 ::v52(){vfunc_called(this, "_ZN6S615C53v52Ev");}
void  S615C5 ::v53(){vfunc_called(this, "_ZN6S615C53v53Ev");}
void  S615C5 ::v54(){vfunc_called(this, "_ZN6S615C53v54Ev");}
void  S615C5 ::v55(){vfunc_called(this, "_ZN6S615C53v55Ev");}
void  S615C5 ::v56(){vfunc_called(this, "_ZN6S615C53v56Ev");}
void  S615C5 ::v57(){vfunc_called(this, "_ZN6S615C53v57Ev");}
void  S615C5 ::v58(){vfunc_called(this, "_ZN6S615C53v58Ev");}
void  S615C5 ::v59(){vfunc_called(this, "_ZN6S615C53v59Ev");}
void  S615C5 ::v60(){vfunc_called(this, "_ZN6S615C53v60Ev");}
void  S615C5 ::v61(){vfunc_called(this, "_ZN6S615C53v61Ev");}
void  S615C5 ::v62(){vfunc_called(this, "_ZN6S615C53v62Ev");}
void  S615C5 ::v63(){vfunc_called(this, "_ZN6S615C53v63Ev");}
void  S615C5 ::v64(){vfunc_called(this, "_ZN6S615C53v64Ev");}
void  S615C5 ::v65(){vfunc_called(this, "_ZN6S615C53v65Ev");}
void  S615C5 ::v66(){vfunc_called(this, "_ZN6S615C53v66Ev");}
void  S615C5 ::v67(){vfunc_called(this, "_ZN6S615C53v67Ev");}
void  S615C5 ::v68(){vfunc_called(this, "_ZN6S615C53v68Ev");}
S615C5 ::S615C5(){ note_ctor("S615C5", this);} // tgen

static void Test_S615C5()
{
  extern Class_Descriptor cd_S615C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S615C5, buf);
    S615C5 *dp, &lv = *(dp=new (buf) S615C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S615C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S615C5)");
    check_field_offset(lv, s615c5f0, ABISELECT(8,4), "S615C5.s615c5f0");
    check_field_offset(lv, s615c5f1, ABISELECT(16,8), "S615C5.s615c5f1");
    check_field_offset(lv, s615c5f2, ABISELECT(24,16), "S615C5.s615c5f2");
    check_field_offset(lv, s615c5f3, ABISELECT(56,32), "S615C5.s615c5f3");
    check_field_offset(lv, s615c5f4, ABISELECT(64,40), "S615C5.s615c5f4");
    check_field_offset(lv, s615c5f5, ABISELECT(72,44), "S615C5.s615c5f5");
    check_field_offset(lv, s615c5f6, ABISELECT(80,52), "S615C5.s615c5f6");
    test_class_info(&lv, &cd_S615C5);
    dp->~S615C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS615C5(Test_S615C5, "S615C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S615C5C1Ev();
extern void _ZN6S615C5D1Ev();
Name_Map name_map_S615C5[] = {
  NSPAIR(_ZN6S615C5C1Ev),
  NSPAIR(_ZN6S615C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S615C5[];
extern void _ZN6S615C5D1Ev();
extern void _ZN6S615C5D0Ev();
extern void _ZN6S615C52v5Ev();
extern void _ZN6S615C52v6Ev();
extern void _ZN6S615C52v7Ev();
extern void _ZN6S615C52v8Ev();
extern void _ZN6S615C52v9Ev();
extern void _ZN6S615C53v10Ev();
extern void _ZN6S615C53v11Ev();
extern void _ZN6S615C53v12Ev();
extern void _ZN6S615C53v13Ev();
extern void _ZN6S615C53v14Ev();
extern void _ZN6S615C53v15Ev();
extern void _ZN6S615C53v16Ev();
extern void _ZN6S615C53v17Ev();
extern void _ZN6S615C53v18Ev();
extern void _ZN6S615C53v19Ev();
extern void _ZN6S615C53v20Ev();
extern void _ZN6S615C53v21Ev();
extern void _ZN6S615C53v22Ev();
extern void _ZN6S615C53v23Ev();
extern void _ZN6S615C53v24Ev();
extern void _ZN6S615C53v25Ev();
extern void _ZN6S615C53v26Ev();
extern void _ZN6S615C53v27Ev();
extern void _ZN6S615C53v28Ev();
extern void _ZN6S615C53v29Ev();
extern void _ZN6S615C53v30Ev();
extern void _ZN6S615C53v31Ev();
extern void _ZN6S615C53v32Ev();
extern void _ZN6S615C53v33Ev();
extern void _ZN6S615C53v34Ev();
extern void _ZN6S615C53v35Ev();
extern void _ZN6S615C53v36Ev();
extern void _ZN6S615C53v37Ev();
extern void _ZN6S615C53v38Ev();
extern void _ZN6S615C53v39Ev();
extern void _ZN6S615C53v40Ev();
extern void _ZN6S615C53v41Ev();
extern void _ZN6S615C53v42Ev();
extern void _ZN6S615C53v43Ev();
extern void _ZN6S615C53v44Ev();
extern void _ZN6S615C53v45Ev();
extern void _ZN6S615C53v46Ev();
extern void _ZN6S615C53v47Ev();
extern void _ZN6S615C53v48Ev();
extern void _ZN6S615C53v49Ev();
extern void _ZN6S615C53v50Ev();
extern void _ZN6S615C53v51Ev();
extern void _ZN6S615C53v52Ev();
extern void _ZN6S615C53v53Ev();
extern void _ZN6S615C53v54Ev();
extern void _ZN6S615C53v55Ev();
extern void _ZN6S615C53v56Ev();
extern void _ZN6S615C53v57Ev();
extern void _ZN6S615C53v58Ev();
extern void _ZN6S615C53v59Ev();
extern void _ZN6S615C53v60Ev();
extern void _ZN6S615C53v61Ev();
extern void _ZN6S615C53v62Ev();
extern void _ZN6S615C53v63Ev();
extern void _ZN6S615C53v64Ev();
extern void _ZN6S615C53v65Ev();
extern void _ZN6S615C53v66Ev();
extern void _ZN6S615C53v67Ev();
extern void _ZN6S615C53v68Ev();
static  VTBL_ENTRY vtc_S615C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S615C5[0]),
  (VTBL_ENTRY)&_ZN6S615C5D1Ev,
  (VTBL_ENTRY)&_ZN6S615C5D0Ev,
  (VTBL_ENTRY)&_ZN6S615C52v5Ev,
  (VTBL_ENTRY)&_ZN6S615C52v6Ev,
  (VTBL_ENTRY)&_ZN6S615C52v7Ev,
  (VTBL_ENTRY)&_ZN6S615C52v8Ev,
  (VTBL_ENTRY)&_ZN6S615C52v9Ev,
  (VTBL_ENTRY)&_ZN6S615C53v10Ev,
  (VTBL_ENTRY)&_ZN6S615C53v11Ev,
  (VTBL_ENTRY)&_ZN6S615C53v12Ev,
  (VTBL_ENTRY)&_ZN6S615C53v13Ev,
  (VTBL_ENTRY)&_ZN6S615C53v14Ev,
  (VTBL_ENTRY)&_ZN6S615C53v15Ev,
  (VTBL_ENTRY)&_ZN6S615C53v16Ev,
  (VTBL_ENTRY)&_ZN6S615C53v17Ev,
  (VTBL_ENTRY)&_ZN6S615C53v18Ev,
  (VTBL_ENTRY)&_ZN6S615C53v19Ev,
  (VTBL_ENTRY)&_ZN6S615C53v20Ev,
  (VTBL_ENTRY)&_ZN6S615C53v21Ev,
  (VTBL_ENTRY)&_ZN6S615C53v22Ev,
  (VTBL_ENTRY)&_ZN6S615C53v23Ev,
  (VTBL_ENTRY)&_ZN6S615C53v24Ev,
  (VTBL_ENTRY)&_ZN6S615C53v25Ev,
  (VTBL_ENTRY)&_ZN6S615C53v26Ev,
  (VTBL_ENTRY)&_ZN6S615C53v27Ev,
  (VTBL_ENTRY)&_ZN6S615C53v28Ev,
  (VTBL_ENTRY)&_ZN6S615C53v29Ev,
  (VTBL_ENTRY)&_ZN6S615C53v30Ev,
  (VTBL_ENTRY)&_ZN6S615C53v31Ev,
  (VTBL_ENTRY)&_ZN6S615C53v32Ev,
  (VTBL_ENTRY)&_ZN6S615C53v33Ev,
  (VTBL_ENTRY)&_ZN6S615C53v34Ev,
  (VTBL_ENTRY)&_ZN6S615C53v35Ev,
  (VTBL_ENTRY)&_ZN6S615C53v36Ev,
  (VTBL_ENTRY)&_ZN6S615C53v37Ev,
  (VTBL_ENTRY)&_ZN6S615C53v38Ev,
  (VTBL_ENTRY)&_ZN6S615C53v39Ev,
  (VTBL_ENTRY)&_ZN6S615C53v40Ev,
  (VTBL_ENTRY)&_ZN6S615C53v41Ev,
  (VTBL_ENTRY)&_ZN6S615C53v42Ev,
  (VTBL_ENTRY)&_ZN6S615C53v43Ev,
  (VTBL_ENTRY)&_ZN6S615C53v44Ev,
  (VTBL_ENTRY)&_ZN6S615C53v45Ev,
  (VTBL_ENTRY)&_ZN6S615C53v46Ev,
  (VTBL_ENTRY)&_ZN6S615C53v47Ev,
  (VTBL_ENTRY)&_ZN6S615C53v48Ev,
  (VTBL_ENTRY)&_ZN6S615C53v49Ev,
  (VTBL_ENTRY)&_ZN6S615C53v50Ev,
  (VTBL_ENTRY)&_ZN6S615C53v51Ev,
  (VTBL_ENTRY)&_ZN6S615C53v52Ev,
  (VTBL_ENTRY)&_ZN6S615C53v53Ev,
  (VTBL_ENTRY)&_ZN6S615C53v54Ev,
  (VTBL_ENTRY)&_ZN6S615C53v55Ev,
  (VTBL_ENTRY)&_ZN6S615C53v56Ev,
  (VTBL_ENTRY)&_ZN6S615C53v57Ev,
  (VTBL_ENTRY)&_ZN6S615C53v58Ev,
  (VTBL_ENTRY)&_ZN6S615C53v59Ev,
  (VTBL_ENTRY)&_ZN6S615C53v60Ev,
  (VTBL_ENTRY)&_ZN6S615C53v61Ev,
  (VTBL_ENTRY)&_ZN6S615C53v62Ev,
  (VTBL_ENTRY)&_ZN6S615C53v63Ev,
  (VTBL_ENTRY)&_ZN6S615C53v64Ev,
  (VTBL_ENTRY)&_ZN6S615C53v65Ev,
  (VTBL_ENTRY)&_ZN6S615C53v66Ev,
  (VTBL_ENTRY)&_ZN6S615C53v67Ev,
  (VTBL_ENTRY)&_ZN6S615C53v68Ev,
};
extern VTBL_ENTRY _ZTI6S615C5[];
extern  VTBL_ENTRY _ZTV6S615C5[];
Class_Descriptor cd_S615C5 = {  "S615C5", // class name
  0,0,//no base classes
  &(vtc_S615C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S615C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S615C5),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  S615C12_nt  {
  ::S165C33_nt s615c12f0;
  ::S165C16_nt s615c12f1;
  int s615c12f2;
  void  mf615c12(); // _ZN10S615C12_nt8mf615c12Ev
};
//SIG(-1 S615C12_nt) C1{ m FC2{ m Fi[4]} FC3{ m Fi[3]} Fi}


void  S615C12_nt ::mf615c12(){}

//skip512 S615C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S615C4  : S615C5 {
  void *s615c4f0;
  ::S165C27 s615c4f1;
  ::S165C7_nt s615c4f2;
  ::S165C25 s615c4f3;
  ::S615C12_nt s615c4f4;
  int s615c4f5;
  unsigned int s615c4f6:1;
  unsigned int s615c4f7:1;
  unsigned int s615c4f8:1;
  unsigned int s615c4f9:1;
  int s615c4f10[11];
  virtual  ~S615C4(); // _ZN6S615C4D1Ev
  virtual void  v69(); // _ZN6S615C43v69Ev
  virtual void  v70(); // _ZN6S615C43v70Ev
  virtual void  v71(); // _ZN6S615C43v71Ev
  virtual void  v72(); // _ZN6S615C43v72Ev
  virtual void  v73(); // _ZN6S615C43v73Ev
  virtual void  v74(); // _ZN6S615C43v74Ev
  virtual void  v75(); // _ZN6S615C43v75Ev
  virtual void  v76(); // _ZN6S615C43v76Ev
  virtual void  v77(); // _ZN6S615C43v77Ev
  virtual void  v78(); // _ZN6S615C43v78Ev
  virtual void  v79(); // _ZN6S615C43v79Ev
  virtual void  v80(); // _ZN6S615C43v80Ev
  virtual void  v81(); // _ZN6S615C43v81Ev
  virtual void  v82(); // _ZN6S615C43v82Ev
  virtual void  v83(); // _ZN6S615C43v83Ev
  virtual void  v84(); // _ZN6S615C43v84Ev
  virtual void  v85(); // _ZN6S615C43v85Ev
  virtual void  v86(); // _ZN6S615C43v86Ev
  virtual void  v87(); // _ZN6S615C43v87Ev
  virtual void  v88(); // _ZN6S615C43v88Ev
  virtual void  v89(); // _ZN6S615C43v89Ev
  virtual void  v90(); // _ZN6S615C43v90Ev
  virtual void  v91(); // _ZN6S615C43v91Ev
  virtual void  v92(); // _ZN6S615C43v92Ev
  virtual void  v93(); // _ZN6S615C43v93Ev
  virtual void  v94(); // _ZN6S615C43v94Ev
  virtual void  v95(); // _ZN6S615C43v95Ev
  S615C4(); // tgen
};
//SIG(-1 S615C4) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S615C4 ::~S615C4(){ note_dtor("S615C4", this);}
void  S615C4 ::v69(){vfunc_called(this, "_ZN6S615C43v69Ev");}
void  S615C4 ::v70(){vfunc_called(this, "_ZN6S615C43v70Ev");}
void  S615C4 ::v71(){vfunc_called(this, "_ZN6S615C43v71Ev");}
void  S615C4 ::v72(){vfunc_called(this, "_ZN6S615C43v72Ev");}
void  S615C4 ::v73(){vfunc_called(this, "_ZN6S615C43v73Ev");}
void  S615C4 ::v74(){vfunc_called(this, "_ZN6S615C43v74Ev");}
void  S615C4 ::v75(){vfunc_called(this, "_ZN6S615C43v75Ev");}
void  S615C4 ::v76(){vfunc_called(this, "_ZN6S615C43v76Ev");}
void  S615C4 ::v77(){vfunc_called(this, "_ZN6S615C43v77Ev");}
void  S615C4 ::v78(){vfunc_called(this, "_ZN6S615C43v78Ev");}
void  S615C4 ::v79(){vfunc_called(this, "_ZN6S615C43v79Ev");}
void  S615C4 ::v80(){vfunc_called(this, "_ZN6S615C43v80Ev");}
void  S615C4 ::v81(){vfunc_called(this, "_ZN6S615C43v81Ev");}
void  S615C4 ::v82(){vfunc_called(this, "_ZN6S615C43v82Ev");}
void  S615C4 ::v83(){vfunc_called(this, "_ZN6S615C43v83Ev");}
void  S615C4 ::v84(){vfunc_called(this, "_ZN6S615C43v84Ev");}
void  S615C4 ::v85(){vfunc_called(this, "_ZN6S615C43v85Ev");}
void  S615C4 ::v86(){vfunc_called(this, "_ZN6S615C43v86Ev");}
void  S615C4 ::v87(){vfunc_called(this, "_ZN6S615C43v87Ev");}
void  S615C4 ::v88(){vfunc_called(this, "_ZN6S615C43v88Ev");}
void  S615C4 ::v89(){vfunc_called(this, "_ZN6S615C43v89Ev");}
void  S615C4 ::v90(){vfunc_called(this, "_ZN6S615C43v90Ev");}
void  S615C4 ::v91(){vfunc_called(this, "_ZN6S615C43v91Ev");}
void  S615C4 ::v92(){vfunc_called(this, "_ZN6S615C43v92Ev");}
void  S615C4 ::v93(){vfunc_called(this, "_ZN6S615C43v93Ev");}
void  S615C4 ::v94(){vfunc_called(this, "_ZN6S615C43v94Ev");}
void  S615C4 ::v95(){vfunc_called(this, "_ZN6S615C43v95Ev");}
S615C4 ::S615C4(){ note_ctor("S615C4", this);} // tgen

static void Test_S615C4()
{
  extern Class_Descriptor cd_S615C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S615C4, buf);
    S615C4 *dp, &lv = *(dp=new (buf) S615C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S615C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S615C4)");
    check_base_class_offset(lv, (S615C5*), 0, "S615C4");
    check_field_offset(lv, s615c4f0, ABISELECT(96,60), "S615C4.s615c4f0");
    check_field_offset(lv, s615c4f1, ABISELECT(104,64), "S615C4.s615c4f1");
    check_field_offset(lv, s615c4f2, ABISELECT(120,76), "S615C4.s615c4f2");
    check_field_offset(lv, s615c4f3, ABISELECT(128,84), "S615C4.s615c4f3");
    check_field_offset(lv, s615c4f4, ABISELECT(144,96), "S615C4.s615c4f4");
    check_field_offset(lv, s615c4f5, ABISELECT(176,128), "S615C4.s615c4f5");
    set_bf_and_test(lv, s615c4f6, ABISELECT(180,132), 0, 1, 1, "S615C4");
    set_bf_and_test(lv, s615c4f7, ABISELECT(180,132), 1, 1, 1, "S615C4");
    set_bf_and_test(lv, s615c4f8, ABISELECT(180,132), 2, 1, 1, "S615C4");
    set_bf_and_test(lv, s615c4f9, ABISELECT(180,132), 3, 1, 1, "S615C4");
    check_field_offset(lv, s615c4f10, ABISELECT(184,136), "S615C4.s615c4f10");
    test_class_info(&lv, &cd_S615C4);
    dp->~S615C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS615C4(Test_S615C4, "S615C4", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S615C4C1Ev();
extern void _ZN6S615C4D1Ev();
Name_Map name_map_S615C4[] = {
  NSPAIR(_ZN6S615C4C1Ev),
  NSPAIR(_ZN6S615C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S615C5;
extern VTBL_ENTRY _ZTI6S615C5[];
extern  VTBL_ENTRY _ZTV6S615C5[];
static Base_Class bases_S615C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S615C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S615C4[];
extern void _ZN6S615C4D1Ev();
extern void _ZN6S615C4D0Ev();
extern void _ZN6S615C52v5Ev();
extern void _ZN6S615C52v6Ev();
extern void _ZN6S615C52v7Ev();
extern void _ZN6S615C52v8Ev();
extern void _ZN6S615C52v9Ev();
extern void _ZN6S615C53v10Ev();
extern void _ZN6S615C53v11Ev();
extern void _ZN6S615C53v12Ev();
extern void _ZN6S615C53v13Ev();
extern void _ZN6S615C53v14Ev();
extern void _ZN6S615C53v15Ev();
extern void _ZN6S615C53v16Ev();
extern void _ZN6S615C53v17Ev();
extern void _ZN6S615C53v18Ev();
extern void _ZN6S615C53v19Ev();
extern void _ZN6S615C53v20Ev();
extern void _ZN6S615C53v21Ev();
extern void _ZN6S615C53v22Ev();
extern void _ZN6S615C53v23Ev();
extern void _ZN6S615C53v24Ev();
extern void _ZN6S615C53v25Ev();
extern void _ZN6S615C53v26Ev();
extern void _ZN6S615C53v27Ev();
extern void _ZN6S615C53v28Ev();
extern void _ZN6S615C53v29Ev();
extern void _ZN6S615C53v30Ev();
extern void _ZN6S615C53v31Ev();
extern void _ZN6S615C53v32Ev();
extern void _ZN6S615C53v33Ev();
extern void _ZN6S615C53v34Ev();
extern void _ZN6S615C53v35Ev();
extern void _ZN6S615C53v36Ev();
extern void _ZN6S615C53v37Ev();
extern void _ZN6S615C53v38Ev();
extern void _ZN6S615C53v39Ev();
extern void _ZN6S615C53v40Ev();
extern void _ZN6S615C53v41Ev();
extern void _ZN6S615C53v42Ev();
extern void _ZN6S615C53v43Ev();
extern void _ZN6S615C53v44Ev();
extern void _ZN6S615C53v45Ev();
extern void _ZN6S615C53v46Ev();
extern void _ZN6S615C53v47Ev();
extern void _ZN6S615C53v48Ev();
extern void _ZN6S615C53v49Ev();
extern void _ZN6S615C53v50Ev();
extern void _ZN6S615C53v51Ev();
extern void _ZN6S615C53v52Ev();
extern void _ZN6S615C53v53Ev();
extern void _ZN6S615C53v54Ev();
extern void _ZN6S615C53v55Ev();
extern void _ZN6S615C53v56Ev();
extern void _ZN6S615C53v57Ev();
extern void _ZN6S615C53v58Ev();
extern void _ZN6S615C53v59Ev();
extern void _ZN6S615C53v60Ev();
extern void _ZN6S615C53v61Ev();
extern void _ZN6S615C53v62Ev();
extern void _ZN6S615C53v63Ev();
extern void _ZN6S615C53v64Ev();
extern void _ZN6S615C53v65Ev();
extern void _ZN6S615C53v66Ev();
extern void _ZN6S615C53v67Ev();
extern void _ZN6S615C53v68Ev();
extern void _ZN6S615C43v69Ev();
extern void _ZN6S615C43v70Ev();
extern void _ZN6S615C43v71Ev();
extern void _ZN6S615C43v72Ev();
extern void _ZN6S615C43v73Ev();
extern void _ZN6S615C43v74Ev();
extern void _ZN6S615C43v75Ev();
extern void _ZN6S615C43v76Ev();
extern void _ZN6S615C43v77Ev();
extern void _ZN6S615C43v78Ev();
extern void _ZN6S615C43v79Ev();
extern void _ZN6S615C43v80Ev();
extern void _ZN6S615C43v81Ev();
extern void _ZN6S615C43v82Ev();
extern void _ZN6S615C43v83Ev();
extern void _ZN6S615C43v84Ev();
extern void _ZN6S615C43v85Ev();
extern void _ZN6S615C43v86Ev();
extern void _ZN6S615C43v87Ev();
extern void _ZN6S615C43v88Ev();
extern void _ZN6S615C43v89Ev();
extern void _ZN6S615C43v90Ev();
extern void _ZN6S615C43v91Ev();
extern void _ZN6S615C43v92Ev();
extern void _ZN6S615C43v93Ev();
extern void _ZN6S615C43v94Ev();
extern void _ZN6S615C43v95Ev();
static  VTBL_ENTRY vtc_S615C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S615C4[0]),
  (VTBL_ENTRY)&_ZN6S615C4D1Ev,
  (VTBL_ENTRY)&_ZN6S615C4D0Ev,
  (VTBL_ENTRY)&_ZN6S615C52v5Ev,
  (VTBL_ENTRY)&_ZN6S615C52v6Ev,
  (VTBL_ENTRY)&_ZN6S615C52v7Ev,
  (VTBL_ENTRY)&_ZN6S615C52v8Ev,
  (VTBL_ENTRY)&_ZN6S615C52v9Ev,
  (VTBL_ENTRY)&_ZN6S615C53v10Ev,
  (VTBL_ENTRY)&_ZN6S615C53v11Ev,
  (VTBL_ENTRY)&_ZN6S615C53v12Ev,
  (VTBL_ENTRY)&_ZN6S615C53v13Ev,
  (VTBL_ENTRY)&_ZN6S615C53v14Ev,
  (VTBL_ENTRY)&_ZN6S615C53v15Ev,
  (VTBL_ENTRY)&_ZN6S615C53v16Ev,
  (VTBL_ENTRY)&_ZN6S615C53v17Ev,
  (VTBL_ENTRY)&_ZN6S615C53v18Ev,
  (VTBL_ENTRY)&_ZN6S615C53v19Ev,
  (VTBL_ENTRY)&_ZN6S615C53v20Ev,
  (VTBL_ENTRY)&_ZN6S615C53v21Ev,
  (VTBL_ENTRY)&_ZN6S615C53v22Ev,
  (VTBL_ENTRY)&_ZN6S615C53v23Ev,
  (VTBL_ENTRY)&_ZN6S615C53v24Ev,
  (VTBL_ENTRY)&_ZN6S615C53v25Ev,
  (VTBL_ENTRY)&_ZN6S615C53v26Ev,
  (VTBL_ENTRY)&_ZN6S615C53v27Ev,
  (VTBL_ENTRY)&_ZN6S615C53v28Ev,
  (VTBL_ENTRY)&_ZN6S615C53v29Ev,
  (VTBL_ENTRY)&_ZN6S615C53v30Ev,
  (VTBL_ENTRY)&_ZN6S615C53v31Ev,
  (VTBL_ENTRY)&_ZN6S615C53v32Ev,
  (VTBL_ENTRY)&_ZN6S615C53v33Ev,
  (VTBL_ENTRY)&_ZN6S615C53v34Ev,
  (VTBL_ENTRY)&_ZN6S615C53v35Ev,
  (VTBL_ENTRY)&_ZN6S615C53v36Ev,
  (VTBL_ENTRY)&_ZN6S615C53v37Ev,
  (VTBL_ENTRY)&_ZN6S615C53v38Ev,
  (VTBL_ENTRY)&_ZN6S615C53v39Ev,
  (VTBL_ENTRY)&_ZN6S615C53v40Ev,
  (VTBL_ENTRY)&_ZN6S615C53v41Ev,
  (VTBL_ENTRY)&_ZN6S615C53v42Ev,
  (VTBL_ENTRY)&_ZN6S615C53v43Ev,
  (VTBL_ENTRY)&_ZN6S615C53v44Ev,
  (VTBL_ENTRY)&_ZN6S615C53v45Ev,
  (VTBL_ENTRY)&_ZN6S615C53v46Ev,
  (VTBL_ENTRY)&_ZN6S615C53v47Ev,
  (VTBL_ENTRY)&_ZN6S615C53v48Ev,
  (VTBL_ENTRY)&_ZN6S615C53v49Ev,
  (VTBL_ENTRY)&_ZN6S615C53v50Ev,
  (VTBL_ENTRY)&_ZN6S615C53v51Ev,
  (VTBL_ENTRY)&_ZN6S615C53v52Ev,
  (VTBL_ENTRY)&_ZN6S615C53v53Ev,
  (VTBL_ENTRY)&_ZN6S615C53v54Ev,
  (VTBL_ENTRY)&_ZN6S615C53v55Ev,
  (VTBL_ENTRY)&_ZN6S615C53v56Ev,
  (VTBL_ENTRY)&_ZN6S615C53v57Ev,
  (VTBL_ENTRY)&_ZN6S615C53v58Ev,
  (VTBL_ENTRY)&_ZN6S615C53v59Ev,
  (VTBL_ENTRY)&_ZN6S615C53v60Ev,
  (VTBL_ENTRY)&_ZN6S615C53v61Ev,
  (VTBL_ENTRY)&_ZN6S615C53v62Ev,
  (VTBL_ENTRY)&_ZN6S615C53v63Ev,
  (VTBL_ENTRY)&_ZN6S615C53v64Ev,
  (VTBL_ENTRY)&_ZN6S615C53v65Ev,
  (VTBL_ENTRY)&_ZN6S615C53v66Ev,
  (VTBL_ENTRY)&_ZN6S615C53v67Ev,
  (VTBL_ENTRY)&_ZN6S615C53v68Ev,
  (VTBL_ENTRY)&_ZN6S615C43v69Ev,
  (VTBL_ENTRY)&_ZN6S615C43v70Ev,
  (VTBL_ENTRY)&_ZN6S615C43v71Ev,
  (VTBL_ENTRY)&_ZN6S615C43v72Ev,
  (VTBL_ENTRY)&_ZN6S615C43v73Ev,
  (VTBL_ENTRY)&_ZN6S615C43v74Ev,
  (VTBL_ENTRY)&_ZN6S615C43v75Ev,
  (VTBL_ENTRY)&_ZN6S615C43v76Ev,
  (VTBL_ENTRY)&_ZN6S615C43v77Ev,
  (VTBL_ENTRY)&_ZN6S615C43v78Ev,
  (VTBL_ENTRY)&_ZN6S615C43v79Ev,
  (VTBL_ENTRY)&_ZN6S615C43v80Ev,
  (VTBL_ENTRY)&_ZN6S615C43v81Ev,
  (VTBL_ENTRY)&_ZN6S615C43v82Ev,
  (VTBL_ENTRY)&_ZN6S615C43v83Ev,
  (VTBL_ENTRY)&_ZN6S615C43v84Ev,
  (VTBL_ENTRY)&_ZN6S615C43v85Ev,
  (VTBL_ENTRY)&_ZN6S615C43v86Ev,
  (VTBL_ENTRY)&_ZN6S615C43v87Ev,
  (VTBL_ENTRY)&_ZN6S615C43v88Ev,
  (VTBL_ENTRY)&_ZN6S615C43v89Ev,
  (VTBL_ENTRY)&_ZN6S615C43v90Ev,
  (VTBL_ENTRY)&_ZN6S615C43v91Ev,
  (VTBL_ENTRY)&_ZN6S615C43v92Ev,
  (VTBL_ENTRY)&_ZN6S615C43v93Ev,
  (VTBL_ENTRY)&_ZN6S615C43v94Ev,
  (VTBL_ENTRY)&_ZN6S615C43v95Ev,
};
extern VTBL_ENTRY _ZTI6S615C4[];
extern  VTBL_ENTRY _ZTV6S615C4[];
Class_Descriptor cd_S615C4 = {  "S615C4", // class name
  bases_S615C4, 1,
  &(vtc_S615C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S615C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S615C4),95, //virtual function table var
  2, // 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  S615C3  : S615C4 {
  ::S165C20 s615c3f0;
  unsigned int s615c3f1:1;
  virtual  ~S615C3(); // _ZN6S615C3D1Ev
  virtual void  v96(); // _ZN6S615C33v96Ev
  virtual void  v97(); // _ZN6S615C33v97Ev
  virtual void  v98(); // _ZN6S615C33v98Ev
  virtual void  v99(); // _ZN6S615C33v99Ev
  virtual void  v100(); // _ZN6S615C34v100Ev
  virtual void  v101(); // _ZN6S615C34v101Ev
  virtual void  v102(); // _ZN6S615C34v102Ev
  virtual void  v103(); // _ZN6S615C34v103Ev
  virtual void  v104(); // _ZN6S615C34v104Ev
  virtual void  v105(); // _ZN6S615C34v105Ev
  virtual void  v106(); // _ZN6S615C34v106Ev
  virtual void  v107(); // _ZN6S615C34v107Ev
  virtual void  v108(); // _ZN6S615C34v108Ev
  virtual void  v109(); // _ZN6S615C34v109Ev
  virtual void  v110(); // _ZN6S615C34v110Ev
  virtual void  v111(); // _ZN6S615C34v111Ev
  virtual void  v112(); // _ZN6S615C34v112Ev
  virtual void  v113(); // _ZN6S615C34v113Ev
  S615C3(); // tgen
};
//SIG(-1 S615C3) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S615C3 ::~S615C3(){ note_dtor("S615C3", this);}
void  S615C3 ::v96(){vfunc_called(this, "_ZN6S615C33v96Ev");}
void  S615C3 ::v97(){vfunc_called(this, "_ZN6S615C33v97Ev");}
void  S615C3 ::v98(){vfunc_called(this, "_ZN6S615C33v98Ev");}
void  S615C3 ::v99(){vfunc_called(this, "_ZN6S615C33v99Ev");}
void  S615C3 ::v100(){vfunc_called(this, "_ZN6S615C34v100Ev");}
void  S615C3 ::v101(){vfunc_called(this, "_ZN6S615C34v101Ev");}
void  S615C3 ::v102(){vfunc_called(this, "_ZN6S615C34v102Ev");}
void  S615C3 ::v103(){vfunc_called(this, "_ZN6S615C34v103Ev");}
void  S615C3 ::v104(){vfunc_called(this, "_ZN6S615C34v104Ev");}
void  S615C3 ::v105(){vfunc_called(this, "_ZN6S615C34v105Ev");}
void  S615C3 ::v106(){vfunc_called(this, "_ZN6S615C34v106Ev");}
void  S615C3 ::v107(){vfunc_called(this, "_ZN6S615C34v107Ev");}
void  S615C3 ::v108(){vfunc_called(this, "_ZN6S615C34v108Ev");}
void  S615C3 ::v109(){vfunc_called(this, "_ZN6S615C34v109Ev");}
void  S615C3 ::v110(){vfunc_called(this, "_ZN6S615C34v110Ev");}
void  S615C3 ::v111(){vfunc_called(this, "_ZN6S615C34v111Ev");}
void  S615C3 ::v112(){vfunc_called(this, "_ZN6S615C34v112Ev");}
void  S615C3 ::v113(){vfunc_called(this, "_ZN6S615C34v113Ev");}
S615C3 ::S615C3(){ note_ctor("S615C3", this);} // tgen

static void Test_S615C3()
{
  extern Class_Descriptor cd_S615C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S615C3, buf);
    S615C3 *dp, &lv = *(dp=new (buf) S615C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S615C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S615C3)");
    check_base_class_offset(lv, (S615C5*)(S615C4*), 0, "S615C3");
    check_base_class_offset(lv, (S615C4*), 0, "S615C3");
    check_field_offset(lv, s615c3f0, ABISELECT(232,180), "S615C3.s615c3f0");
    set_bf_and_test(lv, s615c3f1, ABISELECT(248,192), 0, 1, 1, "S615C3");
    test_class_info(&lv, &cd_S615C3);
    dp->~S615C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS615C3(Test_S615C3, "S615C3", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S615C3C1Ev();
extern void _ZN6S615C3D1Ev();
Name_Map name_map_S615C3[] = {
  NSPAIR(_ZN6S615C3C1Ev),
  NSPAIR(_ZN6S615C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S615C5;
extern VTBL_ENTRY _ZTI6S615C5[];
extern  VTBL_ENTRY _ZTV6S615C5[];
extern Class_Descriptor cd_S615C4;
extern VTBL_ENTRY _ZTI6S615C4[];
extern  VTBL_ENTRY _ZTV6S615C4[];
static Base_Class bases_S615C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S615C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S615C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S615C3[];
extern void _ZN6S615C3D1Ev();
extern void _ZN6S615C3D0Ev();
extern void _ZN6S615C52v5Ev();
extern void _ZN6S615C52v6Ev();
extern void _ZN6S615C52v7Ev();
extern void _ZN6S615C52v8Ev();
extern void _ZN6S615C52v9Ev();
extern void _ZN6S615C53v10Ev();
extern void _ZN6S615C53v11Ev();
extern void _ZN6S615C53v12Ev();
extern void _ZN6S615C53v13Ev();
extern void _ZN6S615C53v14Ev();
extern void _ZN6S615C53v15Ev();
extern void _ZN6S615C53v16Ev();
extern void _ZN6S615C53v17Ev();
extern void _ZN6S615C53v18Ev();
extern void _ZN6S615C53v19Ev();
extern void _ZN6S615C53v20Ev();
extern void _ZN6S615C53v21Ev();
extern void _ZN6S615C53v22Ev();
extern void _ZN6S615C53v23Ev();
extern void _ZN6S615C53v24Ev();
extern void _ZN6S615C53v25Ev();
extern void _ZN6S615C53v26Ev();
extern void _ZN6S615C53v27Ev();
extern void _ZN6S615C53v28Ev();
extern void _ZN6S615C53v29Ev();
extern void _ZN6S615C53v30Ev();
extern void _ZN6S615C53v31Ev();
extern void _ZN6S615C53v32Ev();
extern void _ZN6S615C53v33Ev();
extern void _ZN6S615C53v34Ev();
extern void _ZN6S615C53v35Ev();
extern void _ZN6S615C53v36Ev();
extern void _ZN6S615C53v37Ev();
extern void _ZN6S615C53v38Ev();
extern void _ZN6S615C53v39Ev();
extern void _ZN6S615C53v40Ev();
extern void _ZN6S615C53v41Ev();
extern void _ZN6S615C53v42Ev();
extern void _ZN6S615C53v43Ev();
extern void _ZN6S615C53v44Ev();
extern void _ZN6S615C53v45Ev();
extern void _ZN6S615C53v46Ev();
extern void _ZN6S615C53v47Ev();
extern void _ZN6S615C53v48Ev();
extern void _ZN6S615C53v49Ev();
extern void _ZN6S615C53v50Ev();
extern void _ZN6S615C53v51Ev();
extern void _ZN6S615C53v52Ev();
extern void _ZN6S615C53v53Ev();
extern void _ZN6S615C53v54Ev();
extern void _ZN6S615C53v55Ev();
extern void _ZN6S615C53v56Ev();
extern void _ZN6S615C53v57Ev();
extern void _ZN6S615C53v58Ev();
extern void _ZN6S615C53v59Ev();
extern void _ZN6S615C53v60Ev();
extern void _ZN6S615C53v61Ev();
extern void _ZN6S615C53v62Ev();
extern void _ZN6S615C53v63Ev();
extern void _ZN6S615C53v64Ev();
extern void _ZN6S615C53v65Ev();
extern void _ZN6S615C53v66Ev();
extern void _ZN6S615C53v67Ev();
extern void _ZN6S615C53v68Ev();
extern void _ZN6S615C43v69Ev();
extern void _ZN6S615C43v70Ev();
extern void _ZN6S615C43v71Ev();
extern void _ZN6S615C43v72Ev();
extern void _ZN6S615C43v73Ev();
extern void _ZN6S615C43v74Ev();
extern void _ZN6S615C43v75Ev();
extern void _ZN6S615C43v76Ev();
extern void _ZN6S615C43v77Ev();
extern void _ZN6S615C43v78Ev();
extern void _ZN6S615C43v79Ev();
extern void _ZN6S615C43v80Ev();
extern void _ZN6S615C43v81Ev();
extern void _ZN6S615C43v82Ev();
extern void _ZN6S615C43v83Ev();
extern void _ZN6S615C43v84Ev();
extern void _ZN6S615C43v85Ev();
extern void _ZN6S615C43v86Ev();
extern void _ZN6S615C43v87Ev();
extern void _ZN6S615C43v88Ev();
extern void _ZN6S615C43v89Ev();
extern void _ZN6S615C43v90Ev();
extern void _ZN6S615C43v91Ev();
extern void _ZN6S615C43v92Ev();
extern void _ZN6S615C43v93Ev();
extern void _ZN6S615C43v94Ev();
extern void _ZN6S615C43v95Ev();
extern void _ZN6S615C33v96Ev();
extern void _ZN6S615C33v97Ev();
extern void _ZN6S615C33v98Ev();
extern void _ZN6S615C33v99Ev();
extern void _ZN6S615C34v100Ev();
extern void _ZN6S615C34v101Ev();
extern void _ZN6S615C34v102Ev();
extern void _ZN6S615C34v103Ev();
extern void _ZN6S615C34v104Ev();
extern void _ZN6S615C34v105Ev();
extern void _ZN6S615C34v106Ev();
extern void _ZN6S615C34v107Ev();
extern void _ZN6S615C34v108Ev();
extern void _ZN6S615C34v109Ev();
extern void _ZN6S615C34v110Ev();
extern void _ZN6S615C34v111Ev();
extern void _ZN6S615C34v112Ev();
extern void _ZN6S615C34v113Ev();
static  VTBL_ENTRY vtc_S615C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S615C3[0]),
  (VTBL_ENTRY)&_ZN6S615C3D1Ev,
  (VTBL_ENTRY)&_ZN6S615C3D0Ev,
  (VTBL_ENTRY)&_ZN6S615C52v5Ev,
  (VTBL_ENTRY)&_ZN6S615C52v6Ev,
  (VTBL_ENTRY)&_ZN6S615C52v7Ev,
  (VTBL_ENTRY)&_ZN6S615C52v8Ev,
  (VTBL_ENTRY)&_ZN6S615C52v9Ev,
  (VTBL_ENTRY)&_ZN6S615C53v10Ev,
  (VTBL_ENTRY)&_ZN6S615C53v11Ev,
  (VTBL_ENTRY)&_ZN6S615C53v12Ev,
  (VTBL_ENTRY)&_ZN6S615C53v13Ev,
  (VTBL_ENTRY)&_ZN6S615C53v14Ev,
  (VTBL_ENTRY)&_ZN6S615C53v15Ev,
  (VTBL_ENTRY)&_ZN6S615C53v16Ev,
  (VTBL_ENTRY)&_ZN6S615C53v17Ev,
  (VTBL_ENTRY)&_ZN6S615C53v18Ev,
  (VTBL_ENTRY)&_ZN6S615C53v19Ev,
  (VTBL_ENTRY)&_ZN6S615C53v20Ev,
  (VTBL_ENTRY)&_ZN6S615C53v21Ev,
  (VTBL_ENTRY)&_ZN6S615C53v22Ev,
  (VTBL_ENTRY)&_ZN6S615C53v23Ev,
  (VTBL_ENTRY)&_ZN6S615C53v24Ev,
  (VTBL_ENTRY)&_ZN6S615C53v25Ev,
  (VTBL_ENTRY)&_ZN6S615C53v26Ev,
  (VTBL_ENTRY)&_ZN6S615C53v27Ev,
  (VTBL_ENTRY)&_ZN6S615C53v28Ev,
  (VTBL_ENTRY)&_ZN6S615C53v29Ev,
  (VTBL_ENTRY)&_ZN6S615C53v30Ev,
  (VTBL_ENTRY)&_ZN6S615C53v31Ev,
  (VTBL_ENTRY)&_ZN6S615C53v32Ev,
  (VTBL_ENTRY)&_ZN6S615C53v33Ev,
  (VTBL_ENTRY)&_ZN6S615C53v34Ev,
  (VTBL_ENTRY)&_ZN6S615C53v35Ev,
  (VTBL_ENTRY)&_ZN6S615C53v36Ev,
  (VTBL_ENTRY)&_ZN6S615C53v37Ev,
  (VTBL_ENTRY)&_ZN6S615C53v38Ev,
  (VTBL_ENTRY)&_ZN6S615C53v39Ev,
  (VTBL_ENTRY)&_ZN6S615C53v40Ev,
  (VTBL_ENTRY)&_ZN6S615C53v41Ev,
  (VTBL_ENTRY)&_ZN6S615C53v42Ev,
  (VTBL_ENTRY)&_ZN6S615C53v43Ev,
  (VTBL_ENTRY)&_ZN6S615C53v44Ev,
  (VTBL_ENTRY)&_ZN6S615C53v45Ev,
  (VTBL_ENTRY)&_ZN6S615C53v46Ev,
  (VTBL_ENTRY)&_ZN6S615C53v47Ev,
  (VTBL_ENTRY)&_ZN6S615C53v48Ev,
  (VTBL_ENTRY)&_ZN6S615C53v49Ev,
  (VTBL_ENTRY)&_ZN6S615C53v50Ev,
  (VTBL_ENTRY)&_ZN6S615C53v51Ev,
  (VTBL_ENTRY)&_ZN6S615C53v52Ev,
  (VTBL_ENTRY)&_ZN6S615C53v53Ev,
  (VTBL_ENTRY)&_ZN6S615C53v54Ev,
  (VTBL_ENTRY)&_ZN6S615C53v55Ev,
  (VTBL_ENTRY)&_ZN6S615C53v56Ev,
  (VTBL_ENTRY)&_ZN6S615C53v57Ev,
  (VTBL_ENTRY)&_ZN6S615C53v58Ev,
  (VTBL_ENTRY)&_ZN6S615C53v59Ev,
  (VTBL_ENTRY)&_ZN6S615C53v60Ev,
  (VTBL_ENTRY)&_ZN6S615C53v61Ev,
  (VTBL_ENTRY)&_ZN6S615C53v62Ev,
  (VTBL_ENTRY)&_ZN6S615C53v63Ev,
  (VTBL_ENTRY)&_ZN6S615C53v64Ev,
  (VTBL_ENTRY)&_ZN6S615C53v65Ev,
  (VTBL_ENTRY)&_ZN6S615C53v66Ev,
  (VTBL_ENTRY)&_ZN6S615C53v67Ev,
  (VTBL_ENTRY)&_ZN6S615C53v68Ev,
  (VTBL_ENTRY)&_ZN6S615C43v69Ev,
  (VTBL_ENTRY)&_ZN6S615C43v70Ev,
  (VTBL_ENTRY)&_ZN6S615C43v71Ev,
  (VTBL_ENTRY)&_ZN6S615C43v72Ev,
  (VTBL_ENTRY)&_ZN6S615C43v73Ev,
  (VTBL_ENTRY)&_ZN6S615C43v74Ev,
  (VTBL_ENTRY)&_ZN6S615C43v75Ev,
  (VTBL_ENTRY)&_ZN6S615C43v76Ev,
  (VTBL_ENTRY)&_ZN6S615C43v77Ev,
  (VTBL_ENTRY)&_ZN6S615C43v78Ev,
  (VTBL_ENTRY)&_ZN6S615C43v79Ev,
  (VTBL_ENTRY)&_ZN6S615C43v80Ev,
  (VTBL_ENTRY)&_ZN6S615C43v81Ev,
  (VTBL_ENTRY)&_ZN6S615C43v82Ev,
  (VTBL_ENTRY)&_ZN6S615C43v83Ev,
  (VTBL_ENTRY)&_ZN6S615C43v84Ev,
  (VTBL_ENTRY)&_ZN6S615C43v85Ev,
  (VTBL_ENTRY)&_ZN6S615C43v86Ev,
  (VTBL_ENTRY)&_ZN6S615C43v87Ev,
  (VTBL_ENTRY)&_ZN6S615C43v88Ev,
  (VTBL_ENTRY)&_ZN6S615C43v89Ev,
  (VTBL_ENTRY)&_ZN6S615C43v90Ev,
  (VTBL_ENTRY)&_ZN6S615C43v91Ev,
  (VTBL_ENTRY)&_ZN6S615C43v92Ev,
  (VTBL_ENTRY)&_ZN6S615C43v93Ev,
  (VTBL_ENTRY)&_ZN6S615C43v94Ev,
  (VTBL_ENTRY)&_ZN6S615C43v95Ev,
  (VTBL_ENTRY)&_ZN6S615C33v96Ev,
  (VTBL_ENTRY)&_ZN6S615C33v97Ev,
  (VTBL_ENTRY)&_ZN6S615C33v98Ev,
  (VTBL_ENTRY)&_ZN6S615C33v99Ev,
  (VTBL_ENTRY)&_ZN6S615C34v100Ev,
  (VTBL_ENTRY)&_ZN6S615C34v101Ev,
  (VTBL_ENTRY)&_ZN6S615C34v102Ev,
  (VTBL_ENTRY)&_ZN6S615C34v103Ev,
  (VTBL_ENTRY)&_ZN6S615C34v104Ev,
  (VTBL_ENTRY)&_ZN6S615C34v105Ev,
  (VTBL_ENTRY)&_ZN6S615C34v106Ev,
  (VTBL_ENTRY)&_ZN6S615C34v107Ev,
  (VTBL_ENTRY)&_ZN6S615C34v108Ev,
  (VTBL_ENTRY)&_ZN6S615C34v109Ev,
  (VTBL_ENTRY)&_ZN6S615C34v110Ev,
  (VTBL_ENTRY)&_ZN6S615C34v111Ev,
  (VTBL_ENTRY)&_ZN6S615C34v112Ev,
  (VTBL_ENTRY)&_ZN6S615C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S615C3[];
extern  VTBL_ENTRY _ZTV6S615C3[];
Class_Descriptor cd_S615C3 = {  "S615C3", // class name
  bases_S615C3, 2,
  &(vtc_S615C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S615C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S615C3),113, //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  S615C17_nt  {
  int s615c17f0[2];
  void  mf615c17(); // _ZN10S615C17_nt8mf615c17Ev
};
//SIG(-1 S615C17_nt) C1{ m Fi[2]}


void  S615C17_nt ::mf615c17(){}

//skip512 S615C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S615C23()
{
  extern Class_Descriptor cd_S615C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S615C23, buf);
    S615C23 &lv = *(new (buf) S615C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S615C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S615C23)");
    check_base_class_offset(lv, (S165C10_nt*), 0, "S615C23");
    test_class_info(&lv, &cd_S615C23);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS615C23(Test_S615C23, "S615C23", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
static Base_Class bases_S615C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S615C23 = {  "S615C23", // class name
  bases_S615C23, 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  S615C22_nt  : S615C23 {
};
//SIG(-1 S615C22_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S615C22_nt

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
extern Class_Descriptor cd_S615C23;
static Base_Class bases_S615C22_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S615C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S615C2  : S615C3 {
  ::S615C17_nt s615c2f0;
  ::S615C17_nt s615c2f1;
  unsigned int s615c2f2:1;
  unsigned int s615c2f3:1;
  int s615c2f4;
  char s615c2f5;
  ::S165C14 s615c2f6;
  ::S165C8_nt s615c2f7;
  void *s615c2f8;
  ::S615C17_nt s615c2f9;
  ::S615C17_nt s615c2f10;
  ::S615C22_nt s615c2f11;
  ::S165C7_nt s615c2f12;
  ::S165C7_nt s615c2f13;
  ::S165C7_nt s615c2f14;
  ::S165C7_nt s615c2f15;
  ::S165C7_nt s615c2f16;
  ::S165C7_nt s615c2f17;
  ::S165C7_nt s615c2f18;
  ::S165C7_nt s615c2f19;
  ::S165C7_nt s615c2f20;
  ::S615C22_nt s615c2f21;
  int s615c2f22;
  virtual  ~S615C2(); // _ZN6S615C2D1Ev
  virtual void  v114(); // _ZN6S615C24v114Ev
  virtual void  v115(); // _ZN6S615C24v115Ev
  virtual void  v116(); // _ZN6S615C24v116Ev
  virtual void  v117(); // _ZN6S615C24v117Ev
  virtual void  v118(); // _ZN6S615C24v118Ev
  virtual void  v119(); // _ZN6S615C24v119Ev
  virtual void  v120(); // _ZN6S615C24v120Ev
  virtual void  v121(); // _ZN6S615C24v121Ev
  virtual void  v122(); // _ZN6S615C24v122Ev
  virtual void  v123(); // _ZN6S615C24v123Ev
  virtual void  v124(); // _ZN6S615C24v124Ev
  virtual void  v125(); // _ZN6S615C24v125Ev
  virtual void  v126(); // _ZN6S615C24v126Ev
  virtual void  v127(); // _ZN6S615C24v127Ev
  virtual void  v128(); // _ZN6S615C24v128Ev
  virtual void  v129(); // _ZN6S615C24v129Ev
  S615C2(); // tgen
};
//SIG(-1 S615C2) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd 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 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 FC16{ m Fi[2]} FC16 Fi:1 Fi:1 Fi Fc FC17{ BC18{ BC8}} FC19{ BC20{ BC8}} Fp FC16 FC16 FC21{ BC22{ BC8}} FC5 FC5 FC5 FC5 FC5 FC5 FC5 FC5 FC5 FC21 Fi}


 S615C2 ::~S615C2(){ note_dtor("S615C2", this);}
void  S615C2 ::v114(){vfunc_called(this, "_ZN6S615C24v114Ev");}
void  S615C2 ::v115(){vfunc_called(this, "_ZN6S615C24v115Ev");}
void  S615C2 ::v116(){vfunc_called(this, "_ZN6S615C24v116Ev");}
void  S615C2 ::v117(){vfunc_called(this, "_ZN6S615C24v117Ev");}
void  S615C2 ::v118(){vfunc_called(this, "_ZN6S615C24v118Ev");}
void  S615C2 ::v119(){vfunc_called(this, "_ZN6S615C24v119Ev");}
void  S615C2 ::v120(){vfunc_called(this, "_ZN6S615C24v120Ev");}
void  S615C2 ::v121(){vfunc_called(this, "_ZN6S615C24v121Ev");}
void  S615C2 ::v122(){vfunc_called(this, "_ZN6S615C24v122Ev");}
void  S615C2 ::v123(){vfunc_called(this, "_ZN6S615C24v123Ev");}
void  S615C2 ::v124(){vfunc_called(this, "_ZN6S615C24v124Ev");}
void  S615C2 ::v125(){vfunc_called(this, "_ZN6S615C24v125Ev");}
void  S615C2 ::v126(){vfunc_called(this, "_ZN6S615C24v126Ev");}
void  S615C2 ::v127(){vfunc_called(this, "_ZN6S615C24v127Ev");}
void  S615C2 ::v128(){vfunc_called(this, "_ZN6S615C24v128Ev");}
void  S615C2 ::v129(){vfunc_called(this, "_ZN6S615C24v129Ev");}
S615C2 ::S615C2(){ note_ctor("S615C2", this);} // tgen

static void Test_S615C2()
{
  extern Class_Descriptor cd_S615C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(57,93)];
    init_test(&cd_S615C2, buf);
    S615C2 *dp, &lv = *(dp=new (buf) S615C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,368), "sizeof(S615C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S615C2)");
    check_base_class_offset(lv, (S615C5*)(S615C4*)(S615C3*), 0, "S615C2");
    check_base_class_offset(lv, (S615C4*)(S615C3*), 0, "S615C2");
    check_base_class_offset(lv, (S615C3*), 0, "S615C2");
    check_field_offset(lv, s615c2f0, ABISELECT(252,196), "S615C2.s615c2f0");
    check_field_offset(lv, s615c2f1, ABISELECT(260,204), "S615C2.s615c2f1");
    set_bf_and_test(lv, s615c2f2, ABISELECT(268,212), 0, 1, 1, "S615C2");
    set_bf_and_test(lv, s615c2f3, ABISELECT(268,212), 1, 1, 1, "S615C2");
    check_field_offset(lv, s615c2f4, ABISELECT(272,216), "S615C2.s615c2f4");
    check_field_offset(lv, s615c2f5, ABISELECT(276,220), "S615C2.s615c2f5");
    check_field_offset(lv, s615c2f6, ABISELECT(280,224), "S615C2.s615c2f6");
    check_field_offset(lv, s615c2f7, ABISELECT(296,236), "S615C2.s615c2f7");
    check_field_offset(lv, s615c2f8, ABISELECT(312,248), "S615C2.s615c2f8");
    check_field_offset(lv, s615c2f9, ABISELECT(320,252), "S615C2.s615c2f9");
    check_field_offset(lv, s615c2f10, ABISELECT(328,260), "S615C2.s615c2f10");
    check_field_offset(lv, s615c2f11, ABISELECT(336,268), "S615C2.s615c2f11");
    check_field_offset(lv, s615c2f12, ABISELECT(352,280), "S615C2.s615c2f12");
    check_field_offset(lv, s615c2f13, ABISELECT(360,288), "S615C2.s615c2f13");
    check_field_offset(lv, s615c2f14, ABISELECT(368,296), "S615C2.s615c2f14");
    check_field_offset(lv, s615c2f15, ABISELECT(376,304), "S615C2.s615c2f15");
    check_field_offset(lv, s615c2f16, ABISELECT(384,312), "S615C2.s615c2f16");
    check_field_offset(lv, s615c2f17, ABISELECT(392,320), "S615C2.s615c2f17");
    check_field_offset(lv, s615c2f18, ABISELECT(400,328), "S615C2.s615c2f18");
    check_field_offset(lv, s615c2f19, ABISELECT(408,336), "S615C2.s615c2f19");
    check_field_offset(lv, s615c2f20, ABISELECT(416,344), "S615C2.s615c2f20");
    check_field_offset(lv, s615c2f21, ABISELECT(424,352), "S615C2.s615c2f21");
    check_field_offset(lv, s615c2f22, ABISELECT(440,364), "S615C2.s615c2f22");
    test_class_info(&lv, &cd_S615C2);
    dp->~S615C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS615C2(Test_S615C2, "S615C2", ABISELECT(448,368));

#else // __cplusplus

extern void _ZN6S615C2C1Ev();
extern void _ZN6S615C2D1Ev();
Name_Map name_map_S615C2[] = {
  NSPAIR(_ZN6S615C2C1Ev),
  NSPAIR(_ZN6S615C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S615C5;
extern VTBL_ENTRY _ZTI6S615C5[];
extern  VTBL_ENTRY _ZTV6S615C5[];
extern Class_Descriptor cd_S615C4;
extern VTBL_ENTRY _ZTI6S615C4[];
extern  VTBL_ENTRY _ZTV6S615C4[];
extern Class_Descriptor cd_S615C3;
extern VTBL_ENTRY _ZTI6S615C3[];
extern  VTBL_ENTRY _ZTV6S615C3[];
static Base_Class bases_S615C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S615C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S615C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S615C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S615C2[];
extern void _ZN6S615C2D1Ev();
extern void _ZN6S615C2D0Ev();
extern void _ZN6S615C52v5Ev();
extern void _ZN6S615C52v6Ev();
extern void _ZN6S615C52v7Ev();
extern void _ZN6S615C52v8Ev();
extern void _ZN6S615C52v9Ev();
extern void _ZN6S615C53v10Ev();
extern void _ZN6S615C53v11Ev();
extern void _ZN6S615C53v12Ev();
extern void _ZN6S615C53v13Ev();
extern void _ZN6S615C53v14Ev();
extern void _ZN6S615C53v15Ev();
extern void _ZN6S615C53v16Ev();
extern void _ZN6S615C53v17Ev();
extern void _ZN6S615C53v18Ev();
extern void _ZN6S615C53v19Ev();
extern void _ZN6S615C53v20Ev();
extern void _ZN6S615C53v21Ev();
extern void _ZN6S615C53v22Ev();
extern void _ZN6S615C53v23Ev();
extern void _ZN6S615C53v24Ev();
extern void _ZN6S615C53v25Ev();
extern void _ZN6S615C53v26Ev();
extern void _ZN6S615C53v27Ev();
extern void _ZN6S615C53v28Ev();
extern void _ZN6S615C53v29Ev();
extern void _ZN6S615C53v30Ev();
extern void _ZN6S615C53v31Ev();
extern void _ZN6S615C53v32Ev();
extern void _ZN6S615C53v33Ev();
extern void _ZN6S615C53v34Ev();
extern void _ZN6S615C53v35Ev();
extern void _ZN6S615C53v36Ev();
extern void _ZN6S615C53v37Ev();
extern void _ZN6S615C53v38Ev();
extern void _ZN6S615C53v39Ev();
extern void _ZN6S615C53v40Ev();
extern void _ZN6S615C53v41Ev();
extern void _ZN6S615C53v42Ev();
extern void _ZN6S615C53v43Ev();
extern void _ZN6S615C53v44Ev();
extern void _ZN6S615C53v45Ev();
extern void _ZN6S615C53v46Ev();
extern void _ZN6S615C53v47Ev();
extern void _ZN6S615C53v48Ev();
extern void _ZN6S615C53v49Ev();
extern void _ZN6S615C53v50Ev();
extern void _ZN6S615C53v51Ev();
extern void _ZN6S615C53v52Ev();
extern void _ZN6S615C53v53Ev();
extern void _ZN6S615C53v54Ev();
extern void _ZN6S615C53v55Ev();
extern void _ZN6S615C53v56Ev();
extern void _ZN6S615C53v57Ev();
extern void _ZN6S615C53v58Ev();
extern void _ZN6S615C53v59Ev();
extern void _ZN6S615C53v60Ev();
extern void _ZN6S615C53v61Ev();
extern void _ZN6S615C53v62Ev();
extern void _ZN6S615C53v63Ev();
extern void _ZN6S615C53v64Ev();
extern void _ZN6S615C53v65Ev();
extern void _ZN6S615C53v66Ev();
extern void _ZN6S615C53v67Ev();
extern void _ZN6S615C53v68Ev();
extern void _ZN6S615C43v69Ev();
extern void _ZN6S615C43v70Ev();
extern void _ZN6S615C43v71Ev();
extern void _ZN6S615C43v72Ev();
extern void _ZN6S615C43v73Ev();
extern void _ZN6S615C43v74Ev();
extern void _ZN6S615C43v75Ev();
extern void _ZN6S615C43v76Ev();
extern void _ZN6S615C43v77Ev();
extern void _ZN6S615C43v78Ev();
extern void _ZN6S615C43v79Ev();
extern void _ZN6S615C43v80Ev();
extern void _ZN6S615C43v81Ev();
extern void _ZN6S615C43v82Ev();
extern void _ZN6S615C43v83Ev();
extern void _ZN6S615C43v84Ev();
extern void _ZN6S615C43v85Ev();
extern void _ZN6S615C43v86Ev();
extern void _ZN6S615C43v87Ev();
extern void _ZN6S615C43v88Ev();
extern void _ZN6S615C43v89Ev();
extern void _ZN6S615C43v90Ev();
extern void _ZN6S615C43v91Ev();
extern void _ZN6S615C43v92Ev();
extern void _ZN6S615C43v93Ev();
extern void _ZN6S615C43v94Ev();
extern void _ZN6S615C43v95Ev();
extern void _ZN6S615C33v96Ev();
extern void _ZN6S615C33v97Ev();
extern void _ZN6S615C33v98Ev();
extern void _ZN6S615C33v99Ev();
extern void _ZN6S615C34v100Ev();
extern void _ZN6S615C34v101Ev();
extern void _ZN6S615C34v102Ev();
extern void _ZN6S615C34v103Ev();
extern void _ZN6S615C34v104Ev();
extern void _ZN6S615C34v105Ev();
extern void _ZN6S615C34v106Ev();
extern void _ZN6S615C34v107Ev();
extern void _ZN6S615C34v108Ev();
extern void _ZN6S615C34v109Ev();
extern void _ZN6S615C34v110Ev();
extern void _ZN6S615C34v111Ev();
extern void _ZN6S615C34v112Ev();
extern void _ZN6S615C34v113Ev();
extern void _ZN6S615C24v114Ev();
extern void _ZN6S615C24v115Ev();
extern void _ZN6S615C24v116Ev();
extern void _ZN6S615C24v117Ev();
extern void _ZN6S615C24v118Ev();
extern void _ZN6S615C24v119Ev();
extern void _ZN6S615C24v120Ev();
extern void _ZN6S615C24v121Ev();
extern void _ZN6S615C24v122Ev();
extern void _ZN6S615C24v123Ev();
extern void _ZN6S615C24v124Ev();
extern void _ZN6S615C24v125Ev();
extern void _ZN6S615C24v126Ev();
extern void _ZN6S615C24v127Ev();
extern void _ZN6S615C24v128Ev();
extern void _ZN6S615C24v129Ev();
static  VTBL_ENTRY vtc_S615C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S615C2[0]),
  (VTBL_ENTRY)&_ZN6S615C2D1Ev,
  (VTBL_ENTRY)&_ZN6S615C2D0Ev,
  (VTBL_ENTRY)&_ZN6S615C52v5Ev,
  (VTBL_ENTRY)&_ZN6S615C52v6Ev,
  (VTBL_ENTRY)&_ZN6S615C52v7Ev,
  (VTBL_ENTRY)&_ZN6S615C52v8Ev,
  (VTBL_ENTRY)&_ZN6S615C52v9Ev,
  (VTBL_ENTRY)&_ZN6S615C53v10Ev,
  (VTBL_ENTRY)&_ZN6S615C53v11Ev,
  (VTBL_ENTRY)&_ZN6S615C53v12Ev,
  (VTBL_ENTRY)&_ZN6S615C53v13Ev,
  (VTBL_ENTRY)&_ZN6S615C53v14Ev,
  (VTBL_ENTRY)&_ZN6S615C53v15Ev,
  (VTBL_ENTRY)&_ZN6S615C53v16Ev,
  (VTBL_ENTRY)&_ZN6S615C53v17Ev,
  (VTBL_ENTRY)&_ZN6S615C53v18Ev,
  (VTBL_ENTRY)&_ZN6S615C53v19Ev,
  (VTBL_ENTRY)&_ZN6S615C53v20Ev,
  (VTBL_ENTRY)&_ZN6S615C53v21Ev,
  (VTBL_ENTRY)&_ZN6S615C53v22Ev,
  (VTBL_ENTRY)&_ZN6S615C53v23Ev,
  (VTBL_ENTRY)&_ZN6S615C53v24Ev,
  (VTBL_ENTRY)&_ZN6S615C53v25Ev,
  (VTBL_ENTRY)&_ZN6S615C53v26Ev,
  (VTBL_ENTRY)&_ZN6S615C53v27Ev,
  (VTBL_ENTRY)&_ZN6S615C53v28Ev,
  (VTBL_ENTRY)&_ZN6S615C53v29Ev,
  (VTBL_ENTRY)&_ZN6S615C53v30Ev,
  (VTBL_ENTRY)&_ZN6S615C53v31Ev,
  (VTBL_ENTRY)&_ZN6S615C53v32Ev,
  (VTBL_ENTRY)&_ZN6S615C53v33Ev,
  (VTBL_ENTRY)&_ZN6S615C53v34Ev,
  (VTBL_ENTRY)&_ZN6S615C53v35Ev,
  (VTBL_ENTRY)&_ZN6S615C53v36Ev,
  (VTBL_ENTRY)&_ZN6S615C53v37Ev,
  (VTBL_ENTRY)&_ZN6S615C53v38Ev,
  (VTBL_ENTRY)&_ZN6S615C53v39Ev,
  (VTBL_ENTRY)&_ZN6S615C53v40Ev,
  (VTBL_ENTRY)&_ZN6S615C53v41Ev,
  (VTBL_ENTRY)&_ZN6S615C53v42Ev,
  (VTBL_ENTRY)&_ZN6S615C53v43Ev,
  (VTBL_ENTRY)&_ZN6S615C53v44Ev,
  (VTBL_ENTRY)&_ZN6S615C53v45Ev,
  (VTBL_ENTRY)&_ZN6S615C53v46Ev,
  (VTBL_ENTRY)&_ZN6S615C53v47Ev,
  (VTBL_ENTRY)&_ZN6S615C53v48Ev,
  (VTBL_ENTRY)&_ZN6S615C53v49Ev,
  (VTBL_ENTRY)&_ZN6S615C53v50Ev,
  (VTBL_ENTRY)&_ZN6S615C53v51Ev,
  (VTBL_ENTRY)&_ZN6S615C53v52Ev,
  (VTBL_ENTRY)&_ZN6S615C53v53Ev,
  (VTBL_ENTRY)&_ZN6S615C53v54Ev,
  (VTBL_ENTRY)&_ZN6S615C53v55Ev,
  (VTBL_ENTRY)&_ZN6S615C53v56Ev,
  (VTBL_ENTRY)&_ZN6S615C53v57Ev,
  (VTBL_ENTRY)&_ZN6S615C53v58Ev,
  (VTBL_ENTRY)&_ZN6S615C53v59Ev,
  (VTBL_ENTRY)&_ZN6S615C53v60Ev,
  (VTBL_ENTRY)&_ZN6S615C53v61Ev,
  (VTBL_ENTRY)&_ZN6S615C53v62Ev,
  (VTBL_ENTRY)&_ZN6S615C53v63Ev,
  (VTBL_ENTRY)&_ZN6S615C53v64Ev,
  (VTBL_ENTRY)&_ZN6S615C53v65Ev,
  (VTBL_ENTRY)&_ZN6S615C53v66Ev,
  (VTBL_ENTRY)&_ZN6S615C53v67Ev,
  (VTBL_ENTRY)&_ZN6S615C53v68Ev,
  (VTBL_ENTRY)&_ZN6S615C43v69Ev,
  (VTBL_ENTRY)&_ZN6S615C43v70Ev,
  (VTBL_ENTRY)&_ZN6S615C43v71Ev,
  (VTBL_ENTRY)&_ZN6S615C43v72Ev,
  (VTBL_ENTRY)&_ZN6S615C43v73Ev,
  (VTBL_ENTRY)&_ZN6S615C43v74Ev,
  (VTBL_ENTRY)&_ZN6S615C43v75Ev,
  (VTBL_ENTRY)&_ZN6S615C43v76Ev,
  (VTBL_ENTRY)&_ZN6S615C43v77Ev,
  (VTBL_ENTRY)&_ZN6S615C43v78Ev,
  (VTBL_ENTRY)&_ZN6S615C43v79Ev,
  (VTBL_ENTRY)&_ZN6S615C43v80Ev,
  (VTBL_ENTRY)&_ZN6S615C43v81Ev,
  (VTBL_ENTRY)&_ZN6S615C43v82Ev,
  (VTBL_ENTRY)&_ZN6S615C43v83Ev,
  (VTBL_ENTRY)&_ZN6S615C43v84Ev,
  (VTBL_ENTRY)&_ZN6S615C43v85Ev,
  (VTBL_ENTRY)&_ZN6S615C43v86Ev,
  (VTBL_ENTRY)&_ZN6S615C43v87Ev,
  (VTBL_ENTRY)&_ZN6S615C43v88Ev,
  (VTBL_ENTRY)&_ZN6S615C43v89Ev,
  (VTBL_ENTRY)&_ZN6S615C43v90Ev,
  (VTBL_ENTRY)&_ZN6S615C43v91Ev,
  (VTBL_ENTRY)&_ZN6S615C43v92Ev,
  (VTBL_ENTRY)&_ZN6S615C43v93Ev,
  (VTBL_ENTRY)&_ZN6S615C43v94Ev,
  (VTBL_ENTRY)&_ZN6S615C43v95Ev,
  (VTBL_ENTRY)&_ZN6S615C33v96Ev,
  (VTBL_ENTRY)&_ZN6S615C33v97Ev,
  (VTBL_ENTRY)&_ZN6S615C33v98Ev,
  (VTBL_ENTRY)&_ZN6S615C33v99Ev,
  (VTBL_ENTRY)&_ZN6S615C34v100Ev,
  (VTBL_ENTRY)&_ZN6S615C34v101Ev,
  (VTBL_ENTRY)&_ZN6S615C34v102Ev,
  (VTBL_ENTRY)&_ZN6S615C34v103Ev,
  (VTBL_ENTRY)&_ZN6S615C34v104Ev,
  (VTBL_ENTRY)&_ZN6S615C34v105Ev,
  (VTBL_ENTRY)&_ZN6S615C34v106Ev,
  (VTBL_ENTRY)&_ZN6S615C34v107Ev,
  (VTBL_ENTRY)&_ZN6S615C34v108Ev,
  (VTBL_ENTRY)&_ZN6S615C34v109Ev,
  (VTBL_ENTRY)&_ZN6S615C34v110Ev,
  (VTBL_ENTRY)&_ZN6S615C34v111Ev,
  (VTBL_ENTRY)&_ZN6S615C34v112Ev,
  (VTBL_ENTRY)&_ZN6S615C34v113Ev,
  (VTBL_ENTRY)&_ZN6S615C24v114Ev,
  (VTBL_ENTRY)&_ZN6S615C24v115Ev,
  (VTBL_ENTRY)&_ZN6S615C24v116Ev,
  (VTBL_ENTRY)&_ZN6S615C24v117Ev,
  (VTBL_ENTRY)&_ZN6S615C24v118Ev,
  (VTBL_ENTRY)&_ZN6S615C24v119Ev,
  (VTBL_ENTRY)&_ZN6S615C24v120Ev,
  (VTBL_ENTRY)&_ZN6S615C24v121Ev,
  (VTBL_ENTRY)&_ZN6S615C24v122Ev,
  (VTBL_ENTRY)&_ZN6S615C24v123Ev,
  (VTBL_ENTRY)&_ZN6S615C24v124Ev,
  (VTBL_ENTRY)&_ZN6S615C24v125Ev,
  (VTBL_ENTRY)&_ZN6S615C24v126Ev,
  (VTBL_ENTRY)&_ZN6S615C24v127Ev,
  (VTBL_ENTRY)&_ZN6S615C24v128Ev,
  (VTBL_ENTRY)&_ZN6S615C24v129Ev,
};
extern VTBL_ENTRY _ZTI6S615C2[];
extern  VTBL_ENTRY _ZTV6S615C2[];
Class_Descriptor cd_S615C2 = {  "S615C2", // class name
  bases_S615C2, 3,
  &(vtc_S615C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,368), // object size
  NSPAIRA(_ZTI6S615C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S615C2),129, //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  S615C1  : S615C2 {
  int s615c1f0[2];
  unsigned int s615c1f1:1;
  unsigned int s615c1f2:1;
  unsigned int s615c1f3:1;
  unsigned int s615c1f4:1;
  unsigned int s615c1f5:1;
  void *s615c1f6;
  ::S165C7_nt s615c1f7;
  ::S615C17_nt s615c1f8;
  int s615c1f9[3];
  virtual  ~S615C1(); // _ZN6S615C1D1Ev
  virtual void  v1(); // _ZN6S615C12v1Ev
  virtual void  v2(); // _ZN6S615C12v2Ev
  virtual void  v3(); // _ZN6S615C12v3Ev
  virtual void  v4(); // _ZN6S615C12v4Ev
  S615C1(); // tgen
};
//SIG(1 S615C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 FC15{ BC16{ BC9}} Fi:1} vd v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 FC17{ m Fi[2]} FC17 Fi:1 Fi:1 Fi Fc FC18{ BC19{ BC9}} FC20{ BC21{ BC9}} Fp FC17 FC17 FC22{ BC23{ BC9}} FC6 FC6 FC6 FC6 FC6 FC6 FC6 FC6 FC6 FC22 Fi} vd v1 v2 v3 v4 Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp FC6 FC17 Fi[3]}


 S615C1 ::~S615C1(){ note_dtor("S615C1", this);}
void  S615C1 ::v1(){vfunc_called(this, "_ZN6S615C12v1Ev");}
void  S615C1 ::v2(){vfunc_called(this, "_ZN6S615C12v2Ev");}
void  S615C1 ::v3(){vfunc_called(this, "_ZN6S615C12v3Ev");}
void  S615C1 ::v4(){vfunc_called(this, "_ZN6S615C12v4Ev");}
S615C1 ::S615C1(){ note_ctor("S615C1", this);} // tgen

static void Test_S615C1()
{
  extern Class_Descriptor cd_S615C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(63,104)];
    init_test(&cd_S615C1, buf);
    S615C1 *dp, &lv = *(dp=new (buf) S615C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,412), "sizeof(S615C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S615C1)");
    check_base_class_offset(lv, (S615C5*)(S615C4*)(S615C3*)(S615C2*), 0, "S615C1");
    check_base_class_offset(lv, (S615C4*)(S615C3*)(S615C2*), 0, "S615C1");
    check_base_class_offset(lv, (S615C3*)(S615C2*), 0, "S615C1");
    check_base_class_offset(lv, (S615C2*), 0, "S615C1");
    check_field_offset(lv, s615c1f0, ABISELECT(444,368), "S615C1.s615c1f0");
    set_bf_and_test(lv, s615c1f1, ABISELECT(452,376), 0, 1, 1, "S615C1");
    set_bf_and_test(lv, s615c1f2, ABISELECT(452,376), 1, 1, 1, "S615C1");
    set_bf_and_test(lv, s615c1f3, ABISELECT(452,376), 2, 1, 1, "S615C1");
    set_bf_and_test(lv, s615c1f4, ABISELECT(452,376), 3, 1, 1, "S615C1");
    set_bf_and_test(lv, s615c1f5, ABISELECT(452,376), 4, 1, 1, "S615C1");
    check_field_offset(lv, s615c1f6, ABISELECT(456,380), "S615C1.s615c1f6");
    check_field_offset(lv, s615c1f7, ABISELECT(464,384), "S615C1.s615c1f7");
    check_field_offset(lv, s615c1f8, ABISELECT(472,392), "S615C1.s615c1f8");
    check_field_offset(lv, s615c1f9, ABISELECT(480,400), "S615C1.s615c1f9");
    test_class_info(&lv, &cd_S615C1);
    dp->~S615C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS615C1(Test_S615C1, "S615C1", ABISELECT(496,412));

#else // __cplusplus

extern void _ZN6S615C1C1Ev();
extern void _ZN6S615C1D1Ev();
Name_Map name_map_S615C1[] = {
  NSPAIR(_ZN6S615C1C1Ev),
  NSPAIR(_ZN6S615C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S615C5;
extern VTBL_ENTRY _ZTI6S615C5[];
extern  VTBL_ENTRY _ZTV6S615C5[];
extern Class_Descriptor cd_S615C4;
extern VTBL_ENTRY _ZTI6S615C4[];
extern  VTBL_ENTRY _ZTV6S615C4[];
extern Class_Descriptor cd_S615C3;
extern VTBL_ENTRY _ZTI6S615C3[];
extern  VTBL_ENTRY _ZTV6S615C3[];
extern Class_Descriptor cd_S615C2;
extern VTBL_ENTRY _ZTI6S615C2[];
extern  VTBL_ENTRY _ZTV6S615C2[];
static Base_Class bases_S615C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S615C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S615C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S615C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S615C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S615C1[];
extern void _ZN6S615C1D1Ev();
extern void _ZN6S615C1D0Ev();
extern void _ZN6S615C52v5Ev();
extern void _ZN6S615C52v6Ev();
extern void _ZN6S615C52v7Ev();
extern void _ZN6S615C52v8Ev();
extern void _ZN6S615C52v9Ev();
extern void _ZN6S615C53v10Ev();
extern void _ZN6S615C53v11Ev();
extern void _ZN6S615C53v12Ev();
extern void _ZN6S615C53v13Ev();
extern void _ZN6S615C53v14Ev();
extern void _ZN6S615C53v15Ev();
extern void _ZN6S615C53v16Ev();
extern void _ZN6S615C53v17Ev();
extern void _ZN6S615C53v18Ev();
extern void _ZN6S615C53v19Ev();
extern void _ZN6S615C53v20Ev();
extern void _ZN6S615C53v21Ev();
extern void _ZN6S615C53v22Ev();
extern void _ZN6S615C53v23Ev();
extern void _ZN6S615C53v24Ev();
extern void _ZN6S615C53v25Ev();
extern void _ZN6S615C53v26Ev();
extern void _ZN6S615C53v27Ev();
extern void _ZN6S615C53v28Ev();
extern void _ZN6S615C53v29Ev();
extern void _ZN6S615C53v30Ev();
extern void _ZN6S615C53v31Ev();
extern void _ZN6S615C53v32Ev();
extern void _ZN6S615C53v33Ev();
extern void _ZN6S615C53v34Ev();
extern void _ZN6S615C53v35Ev();
extern void _ZN6S615C53v36Ev();
extern void _ZN6S615C53v37Ev();
extern void _ZN6S615C53v38Ev();
extern void _ZN6S615C53v39Ev();
extern void _ZN6S615C53v40Ev();
extern void _ZN6S615C53v41Ev();
extern void _ZN6S615C53v42Ev();
extern void _ZN6S615C53v43Ev();
extern void _ZN6S615C53v44Ev();
extern void _ZN6S615C53v45Ev();
extern void _ZN6S615C53v46Ev();
extern void _ZN6S615C53v47Ev();
extern void _ZN6S615C53v48Ev();
extern void _ZN6S615C53v49Ev();
extern void _ZN6S615C53v50Ev();
extern void _ZN6S615C53v51Ev();
extern void _ZN6S615C53v52Ev();
extern void _ZN6S615C53v53Ev();
extern void _ZN6S615C53v54Ev();
extern void _ZN6S615C53v55Ev();
extern void _ZN6S615C53v56Ev();
extern void _ZN6S615C53v57Ev();
extern void _ZN6S615C53v58Ev();
extern void _ZN6S615C53v59Ev();
extern void _ZN6S615C53v60Ev();
extern void _ZN6S615C53v61Ev();
extern void _ZN6S615C53v62Ev();
extern void _ZN6S615C53v63Ev();
extern void _ZN6S615C53v64Ev();
extern void _ZN6S615C53v65Ev();
extern void _ZN6S615C53v66Ev();
extern void _ZN6S615C53v67Ev();
extern void _ZN6S615C53v68Ev();
extern void _ZN6S615C43v69Ev();
extern void _ZN6S615C43v70Ev();
extern void _ZN6S615C43v71Ev();
extern void _ZN6S615C43v72Ev();
extern void _ZN6S615C43v73Ev();
extern void _ZN6S615C43v74Ev();
extern void _ZN6S615C43v75Ev();
extern void _ZN6S615C43v76Ev();
extern void _ZN6S615C43v77Ev();
extern void _ZN6S615C43v78Ev();
extern void _ZN6S615C43v79Ev();
extern void _ZN6S615C43v80Ev();
extern void _ZN6S615C43v81Ev();
extern void _ZN6S615C43v82Ev();
extern void _ZN6S615C43v83Ev();
extern void _ZN6S615C43v84Ev();
extern void _ZN6S615C43v85Ev();
extern void _ZN6S615C43v86Ev();
extern void _ZN6S615C43v87Ev();
extern void _ZN6S615C43v88Ev();
extern void _ZN6S615C43v89Ev();
extern void _ZN6S615C43v90Ev();
extern void _ZN6S615C43v91Ev();
extern void _ZN6S615C43v92Ev();
extern void _ZN6S615C43v93Ev();
extern void _ZN6S615C43v94Ev();
extern void _ZN6S615C43v95Ev();
extern void _ZN6S615C33v96Ev();
extern void _ZN6S615C33v97Ev();
extern void _ZN6S615C33v98Ev();
extern void _ZN6S615C33v99Ev();
extern void _ZN6S615C34v100Ev();
extern void _ZN6S615C34v101Ev();
extern void _ZN6S615C34v102Ev();
extern void _ZN6S615C34v103Ev();
extern void _ZN6S615C34v104Ev();
extern void _ZN6S615C34v105Ev();
extern void _ZN6S615C34v106Ev();
extern void _ZN6S615C34v107Ev();
extern void _ZN6S615C34v108Ev();
extern void _ZN6S615C34v109Ev();
extern void _ZN6S615C34v110Ev();
extern void _ZN6S615C34v111Ev();
extern void _ZN6S615C34v112Ev();
extern void _ZN6S615C34v113Ev();
extern void _ZN6S615C24v114Ev();
extern void _ZN6S615C24v115Ev();
extern void _ZN6S615C24v116Ev();
extern void _ZN6S615C24v117Ev();
extern void _ZN6S615C24v118Ev();
extern void _ZN6S615C24v119Ev();
extern void _ZN6S615C24v120Ev();
extern void _ZN6S615C24v121Ev();
extern void _ZN6S615C24v122Ev();
extern void _ZN6S615C24v123Ev();
extern void _ZN6S615C24v124Ev();
extern void _ZN6S615C24v125Ev();
extern void _ZN6S615C24v126Ev();
extern void _ZN6S615C24v127Ev();
extern void _ZN6S615C24v128Ev();
extern void _ZN6S615C24v129Ev();
extern void _ZN6S615C12v1Ev();
extern void _ZN6S615C12v2Ev();
extern void _ZN6S615C12v3Ev();
extern void _ZN6S615C12v4Ev();
static  VTBL_ENTRY vtc_S615C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S615C1[0]),
  (VTBL_ENTRY)&_ZN6S615C1D1Ev,
  (VTBL_ENTRY)&_ZN6S615C1D0Ev,
  (VTBL_ENTRY)&_ZN6S615C52v5Ev,
  (VTBL_ENTRY)&_ZN6S615C52v6Ev,
  (VTBL_ENTRY)&_ZN6S615C52v7Ev,
  (VTBL_ENTRY)&_ZN6S615C52v8Ev,
  (VTBL_ENTRY)&_ZN6S615C52v9Ev,
  (VTBL_ENTRY)&_ZN6S615C53v10Ev,
  (VTBL_ENTRY)&_ZN6S615C53v11Ev,
  (VTBL_ENTRY)&_ZN6S615C53v12Ev,
  (VTBL_ENTRY)&_ZN6S615C53v13Ev,
  (VTBL_ENTRY)&_ZN6S615C53v14Ev,
  (VTBL_ENTRY)&_ZN6S615C53v15Ev,
  (VTBL_ENTRY)&_ZN6S615C53v16Ev,
  (VTBL_ENTRY)&_ZN6S615C53v17Ev,
  (VTBL_ENTRY)&_ZN6S615C53v18Ev,
  (VTBL_ENTRY)&_ZN6S615C53v19Ev,
  (VTBL_ENTRY)&_ZN6S615C53v20Ev,
  (VTBL_ENTRY)&_ZN6S615C53v21Ev,
  (VTBL_ENTRY)&_ZN6S615C53v22Ev,
  (VTBL_ENTRY)&_ZN6S615C53v23Ev,
  (VTBL_ENTRY)&_ZN6S615C53v24Ev,
  (VTBL_ENTRY)&_ZN6S615C53v25Ev,
  (VTBL_ENTRY)&_ZN6S615C53v26Ev,
  (VTBL_ENTRY)&_ZN6S615C53v27Ev,
  (VTBL_ENTRY)&_ZN6S615C53v28Ev,
  (VTBL_ENTRY)&_ZN6S615C53v29Ev,
  (VTBL_ENTRY)&_ZN6S615C53v30Ev,
  (VTBL_ENTRY)&_ZN6S615C53v31Ev,
  (VTBL_ENTRY)&_ZN6S615C53v32Ev,
  (VTBL_ENTRY)&_ZN6S615C53v33Ev,
  (VTBL_ENTRY)&_ZN6S615C53v34Ev,
  (VTBL_ENTRY)&_ZN6S615C53v35Ev,
  (VTBL_ENTRY)&_ZN6S615C53v36Ev,
  (VTBL_ENTRY)&_ZN6S615C53v37Ev,
  (VTBL_ENTRY)&_ZN6S615C53v38Ev,
  (VTBL_ENTRY)&_ZN6S615C53v39Ev,
  (VTBL_ENTRY)&_ZN6S615C53v40Ev,
  (VTBL_ENTRY)&_ZN6S615C53v41Ev,
  (VTBL_ENTRY)&_ZN6S615C53v42Ev,
  (VTBL_ENTRY)&_ZN6S615C53v43Ev,
  (VTBL_ENTRY)&_ZN6S615C53v44Ev,
  (VTBL_ENTRY)&_ZN6S615C53v45Ev,
  (VTBL_ENTRY)&_ZN6S615C53v46Ev,
  (VTBL_ENTRY)&_ZN6S615C53v47Ev,
  (VTBL_ENTRY)&_ZN6S615C53v48Ev,
  (VTBL_ENTRY)&_ZN6S615C53v49Ev,
  (VTBL_ENTRY)&_ZN6S615C53v50Ev,
  (VTBL_ENTRY)&_ZN6S615C53v51Ev,
  (VTBL_ENTRY)&_ZN6S615C53v52Ev,
  (VTBL_ENTRY)&_ZN6S615C53v53Ev,
  (VTBL_ENTRY)&_ZN6S615C53v54Ev,
  (VTBL_ENTRY)&_ZN6S615C53v55Ev,
  (VTBL_ENTRY)&_ZN6S615C53v56Ev,
  (VTBL_ENTRY)&_ZN6S615C53v57Ev,
  (VTBL_ENTRY)&_ZN6S615C53v58Ev,
  (VTBL_ENTRY)&_ZN6S615C53v59Ev,
  (VTBL_ENTRY)&_ZN6S615C53v60Ev,
  (VTBL_ENTRY)&_ZN6S615C53v61Ev,
  (VTBL_ENTRY)&_ZN6S615C53v62Ev,
  (VTBL_ENTRY)&_ZN6S615C53v63Ev,
  (VTBL_ENTRY)&_ZN6S615C53v64Ev,
  (VTBL_ENTRY)&_ZN6S615C53v65Ev,
  (VTBL_ENTRY)&_ZN6S615C53v66Ev,
  (VTBL_ENTRY)&_ZN6S615C53v67Ev,
  (VTBL_ENTRY)&_ZN6S615C53v68Ev,
  (VTBL_ENTRY)&_ZN6S615C43v69Ev,
  (VTBL_ENTRY)&_ZN6S615C43v70Ev,
  (VTBL_ENTRY)&_ZN6S615C43v71Ev,
  (VTBL_ENTRY)&_ZN6S615C43v72Ev,
  (VTBL_ENTRY)&_ZN6S615C43v73Ev,
  (VTBL_ENTRY)&_ZN6S615C43v74Ev,
  (VTBL_ENTRY)&_ZN6S615C43v75Ev,
  (VTBL_ENTRY)&_ZN6S615C43v76Ev,
  (VTBL_ENTRY)&_ZN6S615C43v77Ev,
  (VTBL_ENTRY)&_ZN6S615C43v78Ev,
  (VTBL_ENTRY)&_ZN6S615C43v79Ev,
  (VTBL_ENTRY)&_ZN6S615C43v80Ev,
  (VTBL_ENTRY)&_ZN6S615C43v81Ev,
  (VTBL_ENTRY)&_ZN6S615C43v82Ev,
  (VTBL_ENTRY)&_ZN6S615C43v83Ev,
  (VTBL_ENTRY)&_ZN6S615C43v84Ev,
  (VTBL_ENTRY)&_ZN6S615C43v85Ev,
  (VTBL_ENTRY)&_ZN6S615C43v86Ev,
  (VTBL_ENTRY)&_ZN6S615C43v87Ev,
  (VTBL_ENTRY)&_ZN6S615C43v88Ev,
  (VTBL_ENTRY)&_ZN6S615C43v89Ev,
  (VTBL_ENTRY)&_ZN6S615C43v90Ev,
  (VTBL_ENTRY)&_ZN6S615C43v91Ev,
  (VTBL_ENTRY)&_ZN6S615C43v92Ev,
  (VTBL_ENTRY)&_ZN6S615C43v93Ev,
  (VTBL_ENTRY)&_ZN6S615C43v94Ev,
  (VTBL_ENTRY)&_ZN6S615C43v95Ev,
  (VTBL_ENTRY)&_ZN6S615C33v96Ev,
  (VTBL_ENTRY)&_ZN6S615C33v97Ev,
  (VTBL_ENTRY)&_ZN6S615C33v98Ev,
  (VTBL_ENTRY)&_ZN6S615C33v99Ev,
  (VTBL_ENTRY)&_ZN6S615C34v100Ev,
  (VTBL_ENTRY)&_ZN6S615C34v101Ev,
  (VTBL_ENTRY)&_ZN6S615C34v102Ev,
  (VTBL_ENTRY)&_ZN6S615C34v103Ev,
  (VTBL_ENTRY)&_ZN6S615C34v104Ev,
  (VTBL_ENTRY)&_ZN6S615C34v105Ev,
  (VTBL_ENTRY)&_ZN6S615C34v106Ev,
  (VTBL_ENTRY)&_ZN6S615C34v107Ev,
  (VTBL_ENTRY)&_ZN6S615C34v108Ev,
  (VTBL_ENTRY)&_ZN6S615C34v109Ev,
  (VTBL_ENTRY)&_ZN6S615C34v110Ev,
  (VTBL_ENTRY)&_ZN6S615C34v111Ev,
  (VTBL_ENTRY)&_ZN6S615C34v112Ev,
  (VTBL_ENTRY)&_ZN6S615C34v113Ev,
  (VTBL_ENTRY)&_ZN6S615C24v114Ev,
  (VTBL_ENTRY)&_ZN6S615C24v115Ev,
  (VTBL_ENTRY)&_ZN6S615C24v116Ev,
  (VTBL_ENTRY)&_ZN6S615C24v117Ev,
  (VTBL_ENTRY)&_ZN6S615C24v118Ev,
  (VTBL_ENTRY)&_ZN6S615C24v119Ev,
  (VTBL_ENTRY)&_ZN6S615C24v120Ev,
  (VTBL_ENTRY)&_ZN6S615C24v121Ev,
  (VTBL_ENTRY)&_ZN6S615C24v122Ev,
  (VTBL_ENTRY)&_ZN6S615C24v123Ev,
  (VTBL_ENTRY)&_ZN6S615C24v124Ev,
  (VTBL_ENTRY)&_ZN6S615C24v125Ev,
  (VTBL_ENTRY)&_ZN6S615C24v126Ev,
  (VTBL_ENTRY)&_ZN6S615C24v127Ev,
  (VTBL_ENTRY)&_ZN6S615C24v128Ev,
  (VTBL_ENTRY)&_ZN6S615C24v129Ev,
  (VTBL_ENTRY)&_ZN6S615C12v1Ev,
  (VTBL_ENTRY)&_ZN6S615C12v2Ev,
  (VTBL_ENTRY)&_ZN6S615C12v3Ev,
  (VTBL_ENTRY)&_ZN6S615C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S615C1[];
extern  VTBL_ENTRY _ZTV6S615C1[];
Class_Descriptor cd_S615C1 = {  "S615C1", // class name
  bases_S615C1, 4,
  &(vtc_S615C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,412), // object size
  NSPAIRA(_ZTI6S615C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S615C1),133, //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  S477C5  {
  int s477c5f0;
  __tsi64 s477c5f1;
  void *s477c5f2[4];
  int s477c5f3[2];
  void *s477c5f4;
  ::S615C17_nt s477c5f5;
  void *s477c5f6[2];
  virtual  ~S477C5(); // _ZN6S477C5D1Ev
  virtual void  v11(); // _ZN6S477C53v11Ev
  virtual void  v12(); // _ZN6S477C53v12Ev
  virtual void  v13(); // _ZN6S477C53v13Ev
  virtual void  v14(); // _ZN6S477C53v14Ev
  virtual void  v15(); // _ZN6S477C53v15Ev
  virtual void  v16(); // _ZN6S477C53v16Ev
  virtual void  v17(); // _ZN6S477C53v17Ev
  virtual void  v18(); // _ZN6S477C53v18Ev
  virtual void  v19(); // _ZN6S477C53v19Ev
  virtual void  v20(); // _ZN6S477C53v20Ev
  virtual void  v21(); // _ZN6S477C53v21Ev
  virtual void  v22(); // _ZN6S477C53v22Ev
  virtual void  v23(); // _ZN6S477C53v23Ev
  virtual void  v24(); // _ZN6S477C53v24Ev
  virtual void  v25(); // _ZN6S477C53v25Ev
  virtual void  v26(); // _ZN6S477C53v26Ev
  virtual void  v27(); // _ZN6S477C53v27Ev
  virtual void  v28(); // _ZN6S477C53v28Ev
  virtual void  v29(); // _ZN6S477C53v29Ev
  virtual void  v30(); // _ZN6S477C53v30Ev
  virtual void  v31(); // _ZN6S477C53v31Ev
  virtual void  v32(); // _ZN6S477C53v32Ev
  virtual void  v33(); // _ZN6S477C53v33Ev
  virtual void  v34(); // _ZN6S477C53v34Ev
  virtual void  v35(); // _ZN6S477C53v35Ev
  virtual void  v36(); // _ZN6S477C53v36Ev
  virtual void  v37(); // _ZN6S477C53v37Ev
  virtual void  v38(); // _ZN6S477C53v38Ev
  virtual void  v39(); // _ZN6S477C53v39Ev
  virtual void  v40(); // _ZN6S477C53v40Ev
  virtual void  v41(); // _ZN6S477C53v41Ev
  virtual void  v42(); // _ZN6S477C53v42Ev
  virtual void  v43(); // _ZN6S477C53v43Ev
  virtual void  v44(); // _ZN6S477C53v44Ev
  virtual void  v45(); // _ZN6S477C53v45Ev
  virtual void  v46(); // _ZN6S477C53v46Ev
  virtual void  v47(); // _ZN6S477C53v47Ev
  virtual void  v48(); // _ZN6S477C53v48Ev
  virtual void  v49(); // _ZN6S477C53v49Ev
  virtual void  v50(); // _ZN6S477C53v50Ev
  virtual void  v51(); // _ZN6S477C53v51Ev
  virtual void  v52(); // _ZN6S477C53v52Ev
  virtual void  v53(); // _ZN6S477C53v53Ev
  virtual void  v54(); // _ZN6S477C53v54Ev
  virtual void  v55(); // _ZN6S477C53v55Ev
  virtual void  v56(); // _ZN6S477C53v56Ev
  virtual void  v57(); // _ZN6S477C53v57Ev
  virtual void  v58(); // _ZN6S477C53v58Ev
  virtual void  v59(); // _ZN6S477C53v59Ev
  virtual void  v60(); // _ZN6S477C53v60Ev
  virtual void  v61(); // _ZN6S477C53v61Ev
  virtual void  v62(); // _ZN6S477C53v62Ev
  virtual void  v63(); // _ZN6S477C53v63Ev
  virtual void  v64(); // _ZN6S477C53v64Ev
  virtual void  v65(); // _ZN6S477C53v65Ev
  virtual void  v66(); // _ZN6S477C53v66Ev
  virtual void  v67(); // _ZN6S477C53v67Ev
  virtual void  v68(); // _ZN6S477C53v68Ev
  virtual void  v69(); // _ZN6S477C53v69Ev
  virtual void  v70(); // _ZN6S477C53v70Ev
  virtual void  v71(); // _ZN6S477C53v71Ev
  virtual void  v72(); // _ZN6S477C53v72Ev
  virtual void  v73(); // _ZN6S477C53v73Ev
  virtual void  v74(); // _ZN6S477C53v74Ev
  S477C5(); // tgen
};
//SIG(-1 S477C5) 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]}


 S477C5 ::~S477C5(){ note_dtor("S477C5", this);}
void  S477C5 ::v11(){vfunc_called(this, "_ZN6S477C53v11Ev");}
void  S477C5 ::v12(){vfunc_called(this, "_ZN6S477C53v12Ev");}
void  S477C5 ::v13(){vfunc_called(this, "_ZN6S477C53v13Ev");}
void  S477C5 ::v14(){vfunc_called(this, "_ZN6S477C53v14Ev");}
void  S477C5 ::v15(){vfunc_called(this, "_ZN6S477C53v15Ev");}
void  S477C5 ::v16(){vfunc_called(this, "_ZN6S477C53v16Ev");}
void  S477C5 ::v17(){vfunc_called(this, "_ZN6S477C53v17Ev");}
void  S477C5 ::v18(){vfunc_called(this, "_ZN6S477C53v18Ev");}
void  S477C5 ::v19(){vfunc_called(this, "_ZN6S477C53v19Ev");}
void  S477C5 ::v20(){vfunc_called(this, "_ZN6S477C53v20Ev");}
void  S477C5 ::v21(){vfunc_called(this, "_ZN6S477C53v21Ev");}
void  S477C5 ::v22(){vfunc_called(this, "_ZN6S477C53v22Ev");}
void  S477C5 ::v23(){vfunc_called(this, "_ZN6S477C53v23Ev");}
void  S477C5 ::v24(){vfunc_called(this, "_ZN6S477C53v24Ev");}
void  S477C5 ::v25(){vfunc_called(this, "_ZN6S477C53v25Ev");}
void  S477C5 ::v26(){vfunc_called(this, "_ZN6S477C53v26Ev");}
void  S477C5 ::v27(){vfunc_called(this, "_ZN6S477C53v27Ev");}
void  S477C5 ::v28(){vfunc_called(this, "_ZN6S477C53v28Ev");}
void  S477C5 ::v29(){vfunc_called(this, "_ZN6S477C53v29Ev");}
void  S477C5 ::v30(){vfunc_called(this, "_ZN6S477C53v30Ev");}
void  S477C5 ::v31(){vfunc_called(this, "_ZN6S477C53v31Ev");}
void  S477C5 ::v32(){vfunc_called(this, "_ZN6S477C53v32Ev");}
void  S477C5 ::v33(){vfunc_called(this, "_ZN6S477C53v33Ev");}
void  S477C5 ::v34(){vfunc_called(this, "_ZN6S477C53v34Ev");}
void  S477C5 ::v35(){vfunc_called(this, "_ZN6S477C53v35Ev");}
void  S477C5 ::v36(){vfunc_called(this, "_ZN6S477C53v36Ev");}
void  S477C5 ::v37(){vfunc_called(this, "_ZN6S477C53v37Ev");}
void  S477C5 ::v38(){vfunc_called(this, "_ZN6S477C53v38Ev");}
void  S477C5 ::v39(){vfunc_called(this, "_ZN6S477C53v39Ev");}
void  S477C5 ::v40(){vfunc_called(this, "_ZN6S477C53v40Ev");}
void  S477C5 ::v41(){vfunc_called(this, "_ZN6S477C53v41Ev");}
void  S477C5 ::v42(){vfunc_called(this, "_ZN6S477C53v42Ev");}
void  S477C5 ::v43(){vfunc_called(this, "_ZN6S477C53v43Ev");}
void  S477C5 ::v44(){vfunc_called(this, "_ZN6S477C53v44Ev");}
void  S477C5 ::v45(){vfunc_called(this, "_ZN6S477C53v45Ev");}
void  S477C5 ::v46(){vfunc_called(this, "_ZN6S477C53v46Ev");}
void  S477C5 ::v47(){vfunc_called(this, "_ZN6S477C53v47Ev");}
void  S477C5 ::v48(){vfunc_called(this, "_ZN6S477C53v48Ev");}
void  S477C5 ::v49(){vfunc_called(this, "_ZN6S477C53v49Ev");}
void  S477C5 ::v50(){vfunc_called(this, "_ZN6S477C53v50Ev");}
void  S477C5 ::v51(){vfunc_called(this, "_ZN6S477C53v51Ev");}
void  S477C5 ::v52(){vfunc_called(this, "_ZN6S477C53v52Ev");}
void  S477C5 ::v53(){vfunc_called(this, "_ZN6S477C53v53Ev");}
void  S477C5 ::v54(){vfunc_called(this, "_ZN6S477C53v54Ev");}
void  S477C5 ::v55(){vfunc_called(this, "_ZN6S477C53v55Ev");}
void  S477C5 ::v56(){vfunc_called(this, "_ZN6S477C53v56Ev");}
void  S477C5 ::v57(){vfunc_called(this, "_ZN6S477C53v57Ev");}
void  S477C5 ::v58(){vfunc_called(this, "_ZN6S477C53v58Ev");}
void  S477C5 ::v59(){vfunc_called(this, "_ZN6S477C53v59Ev");}
void  S477C5 ::v60(){vfunc_called(this, "_ZN6S477C53v60Ev");}
void  S477C5 ::v61(){vfunc_called(this, "_ZN6S477C53v61Ev");}
void  S477C5 ::v62(){vfunc_called(this, "_ZN6S477C53v62Ev");}
void  S477C5 ::v63(){vfunc_called(this, "_ZN6S477C53v63Ev");}
void  S477C5 ::v64(){vfunc_called(this, "_ZN6S477C53v64Ev");}
void  S477C5 ::v65(){vfunc_called(this, "_ZN6S477C53v65Ev");}
void  S477C5 ::v66(){vfunc_called(this, "_ZN6S477C53v66Ev");}
void  S477C5 ::v67(){vfunc_called(this, "_ZN6S477C53v67Ev");}
void  S477C5 ::v68(){vfunc_called(this, "_ZN6S477C53v68Ev");}
void  S477C5 ::v69(){vfunc_called(this, "_ZN6S477C53v69Ev");}
void  S477C5 ::v70(){vfunc_called(this, "_ZN6S477C53v70Ev");}
void  S477C5 ::v71(){vfunc_called(this, "_ZN6S477C53v71Ev");}
void  S477C5 ::v72(){vfunc_called(this, "_ZN6S477C53v72Ev");}
void  S477C5 ::v73(){vfunc_called(this, "_ZN6S477C53v73Ev");}
void  S477C5 ::v74(){vfunc_called(this, "_ZN6S477C53v74Ev");}
S477C5 ::S477C5(){ note_ctor("S477C5", this);} // tgen

static void Test_S477C5()
{
  extern Class_Descriptor cd_S477C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S477C5, buf);
    S477C5 *dp, &lv = *(dp=new (buf) S477C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S477C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S477C5)");
    check_field_offset(lv, s477c5f0, ABISELECT(8,4), "S477C5.s477c5f0");
    check_field_offset(lv, s477c5f1, ABISELECT(16,8), "S477C5.s477c5f1");
    check_field_offset(lv, s477c5f2, ABISELECT(24,16), "S477C5.s477c5f2");
    check_field_offset(lv, s477c5f3, ABISELECT(56,32), "S477C5.s477c5f3");
    check_field_offset(lv, s477c5f4, ABISELECT(64,40), "S477C5.s477c5f4");
    check_field_offset(lv, s477c5f5, ABISELECT(72,44), "S477C5.s477c5f5");
    check_field_offset(lv, s477c5f6, ABISELECT(80,52), "S477C5.s477c5f6");
    test_class_info(&lv, &cd_S477C5);
    dp->~S477C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS477C5(Test_S477C5, "S477C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S477C5C1Ev();
extern void _ZN6S477C5D1Ev();
Name_Map name_map_S477C5[] = {
  NSPAIR(_ZN6S477C5C1Ev),
  NSPAIR(_ZN6S477C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S477C5[];
extern void _ZN6S477C5D1Ev();
extern void _ZN6S477C5D0Ev();
extern void _ZN6S477C53v11Ev();
extern void _ZN6S477C53v12Ev();
extern void _ZN6S477C53v13Ev();
extern void _ZN6S477C53v14Ev();
extern void _ZN6S477C53v15Ev();
extern void _ZN6S477C53v16Ev();
extern void _ZN6S477C53v17Ev();
extern void _ZN6S477C53v18Ev();
extern void _ZN6S477C53v19Ev();
extern void _ZN6S477C53v20Ev();
extern void _ZN6S477C53v21Ev();
extern void _ZN6S477C53v22Ev();
extern void _ZN6S477C53v23Ev();
extern void _ZN6S477C53v24Ev();
extern void _ZN6S477C53v25Ev();
extern void _ZN6S477C53v26Ev();
extern void _ZN6S477C53v27Ev();
extern void _ZN6S477C53v28Ev();
extern void _ZN6S477C53v29Ev();
extern void _ZN6S477C53v30Ev();
extern void _ZN6S477C53v31Ev();
extern void _ZN6S477C53v32Ev();
extern void _ZN6S477C53v33Ev();
extern void _ZN6S477C53v34Ev();
extern void _ZN6S477C53v35Ev();
extern void _ZN6S477C53v36Ev();
extern void _ZN6S477C53v37Ev();
extern void _ZN6S477C53v38Ev();
extern void _ZN6S477C53v39Ev();
extern void _ZN6S477C53v40Ev();
extern void _ZN6S477C53v41Ev();
extern void _ZN6S477C53v42Ev();
extern void _ZN6S477C53v43Ev();
extern void _ZN6S477C53v44Ev();
extern void _ZN6S477C53v45Ev();
extern void _ZN6S477C53v46Ev();
extern void _ZN6S477C53v47Ev();
extern void _ZN6S477C53v48Ev();
extern void _ZN6S477C53v49Ev();
extern void _ZN6S477C53v50Ev();
extern void _ZN6S477C53v51Ev();
extern void _ZN6S477C53v52Ev();
extern void _ZN6S477C53v53Ev();
extern void _ZN6S477C53v54Ev();
extern void _ZN6S477C53v55Ev();
extern void _ZN6S477C53v56Ev();
extern void _ZN6S477C53v57Ev();
extern void _ZN6S477C53v58Ev();
extern void _ZN6S477C53v59Ev();
extern void _ZN6S477C53v60Ev();
extern void _ZN6S477C53v61Ev();
extern void _ZN6S477C53v62Ev();
extern void _ZN6S477C53v63Ev();
extern void _ZN6S477C53v64Ev();
extern void _ZN6S477C53v65Ev();
extern void _ZN6S477C53v66Ev();
extern void _ZN6S477C53v67Ev();
extern void _ZN6S477C53v68Ev();
extern void _ZN6S477C53v69Ev();
extern void _ZN6S477C53v70Ev();
extern void _ZN6S477C53v71Ev();
extern void _ZN6S477C53v72Ev();
extern void _ZN6S477C53v73Ev();
extern void _ZN6S477C53v74Ev();
static  VTBL_ENTRY vtc_S477C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S477C5[0]),
  (VTBL_ENTRY)&_ZN6S477C5D1Ev,
  (VTBL_ENTRY)&_ZN6S477C5D0Ev,
  (VTBL_ENTRY)&_ZN6S477C53v11Ev,
  (VTBL_ENTRY)&_ZN6S477C53v12Ev,
  (VTBL_ENTRY)&_ZN6S477C53v13Ev,
  (VTBL_ENTRY)&_ZN6S477C53v14Ev,
  (VTBL_ENTRY)&_ZN6S477C53v15Ev,
  (VTBL_ENTRY)&_ZN6S477C53v16Ev,
  (VTBL_ENTRY)&_ZN6S477C53v17Ev,
  (VTBL_ENTRY)&_ZN6S477C53v18Ev,
  (VTBL_ENTRY)&_ZN6S477C53v19Ev,
  (VTBL_ENTRY)&_ZN6S477C53v20Ev,
  (VTBL_ENTRY)&_ZN6S477C53v21Ev,
  (VTBL_ENTRY)&_ZN6S477C53v22Ev,
  (VTBL_ENTRY)&_ZN6S477C53v23Ev,
  (VTBL_ENTRY)&_ZN6S477C53v24Ev,
  (VTBL_ENTRY)&_ZN6S477C53v25Ev,
  (VTBL_ENTRY)&_ZN6S477C53v26Ev,
  (VTBL_ENTRY)&_ZN6S477C53v27Ev,
  (VTBL_ENTRY)&_ZN6S477C53v28Ev,
  (VTBL_ENTRY)&_ZN6S477C53v29Ev,
  (VTBL_ENTRY)&_ZN6S477C53v30Ev,
  (VTBL_ENTRY)&_ZN6S477C53v31Ev,
  (VTBL_ENTRY)&_ZN6S477C53v32Ev,
  (VTBL_ENTRY)&_ZN6S477C53v33Ev,
  (VTBL_ENTRY)&_ZN6S477C53v34Ev,
  (VTBL_ENTRY)&_ZN6S477C53v35Ev,
  (VTBL_ENTRY)&_ZN6S477C53v36Ev,
  (VTBL_ENTRY)&_ZN6S477C53v37Ev,
  (VTBL_ENTRY)&_ZN6S477C53v38Ev,
  (VTBL_ENTRY)&_ZN6S477C53v39Ev,
  (VTBL_ENTRY)&_ZN6S477C53v40Ev,
  (VTBL_ENTRY)&_ZN6S477C53v41Ev,
  (VTBL_ENTRY)&_ZN6S477C53v42Ev,
  (VTBL_ENTRY)&_ZN6S477C53v43Ev,
  (VTBL_ENTRY)&_ZN6S477C53v44Ev,
  (VTBL_ENTRY)&_ZN6S477C53v45Ev,
  (VTBL_ENTRY)&_ZN6S477C53v46Ev,
  (VTBL_ENTRY)&_ZN6S477C53v47Ev,
  (VTBL_ENTRY)&_ZN6S477C53v48Ev,
  (VTBL_ENTRY)&_ZN6S477C53v49Ev,
  (VTBL_ENTRY)&_ZN6S477C53v50Ev,
  (VTBL_ENTRY)&_ZN6S477C53v51Ev,
  (VTBL_ENTRY)&_ZN6S477C53v52Ev,
  (VTBL_ENTRY)&_ZN6S477C53v53Ev,
  (VTBL_ENTRY)&_ZN6S477C53v54Ev,
  (VTBL_ENTRY)&_ZN6S477C53v55Ev,
  (VTBL_ENTRY)&_ZN6S477C53v56Ev,
  (VTBL_ENTRY)&_ZN6S477C53v57Ev,
  (VTBL_ENTRY)&_ZN6S477C53v58Ev,
  (VTBL_ENTRY)&_ZN6S477C53v59Ev,
  (VTBL_ENTRY)&_ZN6S477C53v60Ev,
  (VTBL_ENTRY)&_ZN6S477C53v61Ev,
  (VTBL_ENTRY)&_ZN6S477C53v62Ev,
  (VTBL_ENTRY)&_ZN6S477C53v63Ev,
  (VTBL_ENTRY)&_ZN6S477C53v64Ev,
  (VTBL_ENTRY)&_ZN6S477C53v65Ev,
  (VTBL_ENTRY)&_ZN6S477C53v66Ev,
  (VTBL_ENTRY)&_ZN6S477C53v67Ev,
  (VTBL_ENTRY)&_ZN6S477C53v68Ev,
  (VTBL_ENTRY)&_ZN6S477C53v69Ev,
  (VTBL_ENTRY)&_ZN6S477C53v70Ev,
  (VTBL_ENTRY)&_ZN6S477C53v71Ev,
  (VTBL_ENTRY)&_ZN6S477C53v72Ev,
  (VTBL_ENTRY)&_ZN6S477C53v73Ev,
  (VTBL_ENTRY)&_ZN6S477C53v74Ev,
};
extern VTBL_ENTRY _ZTI6S477C5[];
extern  VTBL_ENTRY _ZTV6S477C5[];
Class_Descriptor cd_S477C5 = {  "S477C5", // class name
  0,0,//no base classes
  &(vtc_S477C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S477C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S477C5),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  S477C4  : S477C5 {
  void *s477c4f0;
  ::S615C22_nt s477c4f1;
  ::S615C17_nt s477c4f2;
  ::S165C27 s477c4f3;
  ::S615C12_nt s477c4f4;
  int s477c4f5;
  unsigned int s477c4f6:1;
  unsigned int s477c4f7:1;
  unsigned int s477c4f8:1;
  unsigned int s477c4f9:1;
  int s477c4f10[11];
  virtual  ~S477C4(); // _ZN6S477C4D1Ev
  virtual void  v75(); // _ZN6S477C43v75Ev
  virtual void  v76(); // _ZN6S477C43v76Ev
  virtual void  v77(); // _ZN6S477C43v77Ev
  virtual void  v78(); // _ZN6S477C43v78Ev
  virtual void  v79(); // _ZN6S477C43v79Ev
  virtual void  v80(); // _ZN6S477C43v80Ev
  virtual void  v81(); // _ZN6S477C43v81Ev
  virtual void  v82(); // _ZN6S477C43v82Ev
  virtual void  v83(); // _ZN6S477C43v83Ev
  virtual void  v84(); // _ZN6S477C43v84Ev
  virtual void  v85(); // _ZN6S477C43v85Ev
  virtual void  v86(); // _ZN6S477C43v86Ev
  virtual void  v87(); // _ZN6S477C43v87Ev
  virtual void  v88(); // _ZN6S477C43v88Ev
  virtual void  v89(); // _ZN6S477C43v89Ev
  virtual void  v90(); // _ZN6S477C43v90Ev
  virtual void  v91(); // _ZN6S477C43v91Ev
  virtual void  v92(); // _ZN6S477C43v92Ev
  virtual void  v93(); // _ZN6S477C43v93Ev
  virtual void  v94(); // _ZN6S477C43v94Ev
  virtual void  v95(); // _ZN6S477C43v95Ev
  virtual void  v96(); // _ZN6S477C43v96Ev
  virtual void  v97(); // _ZN6S477C43v97Ev
  virtual void  v98(); // _ZN6S477C43v98Ev
  virtual void  v99(); // _ZN6S477C43v99Ev
  virtual void  v100(); // _ZN6S477C44v100Ev
  virtual void  v101(); // _ZN6S477C44v101Ev
  S477C4(); // tgen
};
//SIG(-1 S477C4) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S477C4 ::~S477C4(){ note_dtor("S477C4", this);}
void  S477C4 ::v75(){vfunc_called(this, "_ZN6S477C43v75Ev");}
void  S477C4 ::v76(){vfunc_called(this, "_ZN6S477C43v76Ev");}
void  S477C4 ::v77(){vfunc_called(this, "_ZN6S477C43v77Ev");}
void  S477C4 ::v78(){vfunc_called(this, "_ZN6S477C43v78Ev");}
void  S477C4 ::v79(){vfunc_called(this, "_ZN6S477C43v79Ev");}
void  S477C4 ::v80(){vfunc_called(this, "_ZN6S477C43v80Ev");}
void  S477C4 ::v81(){vfunc_called(this, "_ZN6S477C43v81Ev");}
void  S477C4 ::v82(){vfunc_called(this, "_ZN6S477C43v82Ev");}
void  S477C4 ::v83(){vfunc_called(this, "_ZN6S477C43v83Ev");}
void  S477C4 ::v84(){vfunc_called(this, "_ZN6S477C43v84Ev");}
void  S477C4 ::v85(){vfunc_called(this, "_ZN6S477C43v85Ev");}
void  S477C4 ::v86(){vfunc_called(this, "_ZN6S477C43v86Ev");}
void  S477C4 ::v87(){vfunc_called(this, "_ZN6S477C43v87Ev");}
void  S477C4 ::v88(){vfunc_called(this, "_ZN6S477C43v88Ev");}
void  S477C4 ::v89(){vfunc_called(this, "_ZN6S477C43v89Ev");}
void  S477C4 ::v90(){vfunc_called(this, "_ZN6S477C43v90Ev");}
void  S477C4 ::v91(){vfunc_called(this, "_ZN6S477C43v91Ev");}
void  S477C4 ::v92(){vfunc_called(this, "_ZN6S477C43v92Ev");}
void  S477C4 ::v93(){vfunc_called(this, "_ZN6S477C43v93Ev");}
void  S477C4 ::v94(){vfunc_called(this, "_ZN6S477C43v94Ev");}
void  S477C4 ::v95(){vfunc_called(this, "_ZN6S477C43v95Ev");}
void  S477C4 ::v96(){vfunc_called(this, "_ZN6S477C43v96Ev");}
void  S477C4 ::v97(){vfunc_called(this, "_ZN6S477C43v97Ev");}
void  S477C4 ::v98(){vfunc_called(this, "_ZN6S477C43v98Ev");}
void  S477C4 ::v99(){vfunc_called(this, "_ZN6S477C43v99Ev");}
void  S477C4 ::v100(){vfunc_called(this, "_ZN6S477C44v100Ev");}
void  S477C4 ::v101(){vfunc_called(this, "_ZN6S477C44v101Ev");}
S477C4 ::S477C4(){ note_ctor("S477C4", this);} // tgen

static void Test_S477C4()
{
  extern Class_Descriptor cd_S477C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S477C4, buf);
    S477C4 *dp, &lv = *(dp=new (buf) S477C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S477C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S477C4)");
    check_base_class_offset(lv, (S477C5*), 0, "S477C4");
    check_field_offset(lv, s477c4f0, ABISELECT(96,60), "S477C4.s477c4f0");
    check_field_offset(lv, s477c4f1, ABISELECT(104,64), "S477C4.s477c4f1");
    check_field_offset(lv, s477c4f2, ABISELECT(120,76), "S477C4.s477c4f2");
    check_field_offset(lv, s477c4f3, ABISELECT(128,84), "S477C4.s477c4f3");
    check_field_offset(lv, s477c4f4, ABISELECT(144,96), "S477C4.s477c4f4");
    check_field_offset(lv, s477c4f5, ABISELECT(176,128), "S477C4.s477c4f5");
    set_bf_and_test(lv, s477c4f6, ABISELECT(180,132), 0, 1, 1, "S477C4");
    set_bf_and_test(lv, s477c4f7, ABISELECT(180,132), 1, 1, 1, "S477C4");
    set_bf_and_test(lv, s477c4f8, ABISELECT(180,132), 2, 1, 1, "S477C4");
    set_bf_and_test(lv, s477c4f9, ABISELECT(180,132), 3, 1, 1, "S477C4");
    check_field_offset(lv, s477c4f10, ABISELECT(184,136), "S477C4.s477c4f10");
    test_class_info(&lv, &cd_S477C4);
    dp->~S477C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS477C4(Test_S477C4, "S477C4", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S477C4C1Ev();
extern void _ZN6S477C4D1Ev();
Name_Map name_map_S477C4[] = {
  NSPAIR(_ZN6S477C4C1Ev),
  NSPAIR(_ZN6S477C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S477C5;
extern VTBL_ENTRY _ZTI6S477C5[];
extern  VTBL_ENTRY _ZTV6S477C5[];
static Base_Class bases_S477C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S477C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S477C4[];
extern void _ZN6S477C4D1Ev();
extern void _ZN6S477C4D0Ev();
extern void _ZN6S477C53v11Ev();
extern void _ZN6S477C53v12Ev();
extern void _ZN6S477C53v13Ev();
extern void _ZN6S477C53v14Ev();
extern void _ZN6S477C53v15Ev();
extern void _ZN6S477C53v16Ev();
extern void _ZN6S477C53v17Ev();
extern void _ZN6S477C53v18Ev();
extern void _ZN6S477C53v19Ev();
extern void _ZN6S477C53v20Ev();
extern void _ZN6S477C53v21Ev();
extern void _ZN6S477C53v22Ev();
extern void _ZN6S477C53v23Ev();
extern void _ZN6S477C53v24Ev();
extern void _ZN6S477C53v25Ev();
extern void _ZN6S477C53v26Ev();
extern void _ZN6S477C53v27Ev();
extern void _ZN6S477C53v28Ev();
extern void _ZN6S477C53v29Ev();
extern void _ZN6S477C53v30Ev();
extern void _ZN6S477C53v31Ev();
extern void _ZN6S477C53v32Ev();
extern void _ZN6S477C53v33Ev();
extern void _ZN6S477C53v34Ev();
extern void _ZN6S477C53v35Ev();
extern void _ZN6S477C53v36Ev();
extern void _ZN6S477C53v37Ev();
extern void _ZN6S477C53v38Ev();
extern void _ZN6S477C53v39Ev();
extern void _ZN6S477C53v40Ev();
extern void _ZN6S477C53v41Ev();
extern void _ZN6S477C53v42Ev();
extern void _ZN6S477C53v43Ev();
extern void _ZN6S477C53v44Ev();
extern void _ZN6S477C53v45Ev();
extern void _ZN6S477C53v46Ev();
extern void _ZN6S477C53v47Ev();
extern void _ZN6S477C53v48Ev();
extern void _ZN6S477C53v49Ev();
extern void _ZN6S477C53v50Ev();
extern void _ZN6S477C53v51Ev();
extern void _ZN6S477C53v52Ev();
extern void _ZN6S477C53v53Ev();
extern void _ZN6S477C53v54Ev();
extern void _ZN6S477C53v55Ev();
extern void _ZN6S477C53v56Ev();
extern void _ZN6S477C53v57Ev();
extern void _ZN6S477C53v58Ev();
extern void _ZN6S477C53v59Ev();
extern void _ZN6S477C53v60Ev();
extern void _ZN6S477C53v61Ev();
extern void _ZN6S477C53v62Ev();
extern void _ZN6S477C53v63Ev();
extern void _ZN6S477C53v64Ev();
extern void _ZN6S477C53v65Ev();
extern void _ZN6S477C53v66Ev();
extern void _ZN6S477C53v67Ev();
extern void _ZN6S477C53v68Ev();
extern void _ZN6S477C53v69Ev();
extern void _ZN6S477C53v70Ev();
extern void _ZN6S477C53v71Ev();
extern void _ZN6S477C53v72Ev();
extern void _ZN6S477C53v73Ev();
extern void _ZN6S477C53v74Ev();
extern void _ZN6S477C43v75Ev();
extern void _ZN6S477C43v76Ev();
extern void _ZN6S477C43v77Ev();
extern void _ZN6S477C43v78Ev();
extern void _ZN6S477C43v79Ev();
extern void _ZN6S477C43v80Ev();
extern void _ZN6S477C43v81Ev();
extern void _ZN6S477C43v82Ev();
extern void _ZN6S477C43v83Ev();
extern void _ZN6S477C43v84Ev();
extern void _ZN6S477C43v85Ev();
extern void _ZN6S477C43v86Ev();
extern void _ZN6S477C43v87Ev();
extern void _ZN6S477C43v88Ev();
extern void _ZN6S477C43v89Ev();
extern void _ZN6S477C43v90Ev();
extern void _ZN6S477C43v91Ev();
extern void _ZN6S477C43v92Ev();
extern void _ZN6S477C43v93Ev();
extern void _ZN6S477C43v94Ev();
extern void _ZN6S477C43v95Ev();
extern void _ZN6S477C43v96Ev();
extern void _ZN6S477C43v97Ev();
extern void _ZN6S477C43v98Ev();
extern void _ZN6S477C43v99Ev();
extern void _ZN6S477C44v100Ev();
extern void _ZN6S477C44v101Ev();
static  VTBL_ENTRY vtc_S477C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S477C4[0]),
  (VTBL_ENTRY)&_ZN6S477C4D1Ev,
  (VTBL_ENTRY)&_ZN6S477C4D0Ev,
  (VTBL_ENTRY)&_ZN6S477C53v11Ev,
  (VTBL_ENTRY)&_ZN6S477C53v12Ev,
  (VTBL_ENTRY)&_ZN6S477C53v13Ev,
  (VTBL_ENTRY)&_ZN6S477C53v14Ev,
  (VTBL_ENTRY)&_ZN6S477C53v15Ev,
  (VTBL_ENTRY)&_ZN6S477C53v16Ev,
  (VTBL_ENTRY)&_ZN6S477C53v17Ev,
  (VTBL_ENTRY)&_ZN6S477C53v18Ev,
  (VTBL_ENTRY)&_ZN6S477C53v19Ev,
  (VTBL_ENTRY)&_ZN6S477C53v20Ev,
  (VTBL_ENTRY)&_ZN6S477C53v21Ev,
  (VTBL_ENTRY)&_ZN6S477C53v22Ev,
  (VTBL_ENTRY)&_ZN6S477C53v23Ev,
  (VTBL_ENTRY)&_ZN6S477C53v24Ev,
  (VTBL_ENTRY)&_ZN6S477C53v25Ev,
  (VTBL_ENTRY)&_ZN6S477C53v26Ev,
  (VTBL_ENTRY)&_ZN6S477C53v27Ev,
  (VTBL_ENTRY)&_ZN6S477C53v28Ev,
  (VTBL_ENTRY)&_ZN6S477C53v29Ev,
  (VTBL_ENTRY)&_ZN6S477C53v30Ev,
  (VTBL_ENTRY)&_ZN6S477C53v31Ev,
  (VTBL_ENTRY)&_ZN6S477C53v32Ev,
  (VTBL_ENTRY)&_ZN6S477C53v33Ev,
  (VTBL_ENTRY)&_ZN6S477C53v34Ev,
  (VTBL_ENTRY)&_ZN6S477C53v35Ev,
  (VTBL_ENTRY)&_ZN6S477C53v36Ev,
  (VTBL_ENTRY)&_ZN6S477C53v37Ev,
  (VTBL_ENTRY)&_ZN6S477C53v38Ev,
  (VTBL_ENTRY)&_ZN6S477C53v39Ev,
  (VTBL_ENTRY)&_ZN6S477C53v40Ev,
  (VTBL_ENTRY)&_ZN6S477C53v41Ev,
  (VTBL_ENTRY)&_ZN6S477C53v42Ev,
  (VTBL_ENTRY)&_ZN6S477C53v43Ev,
  (VTBL_ENTRY)&_ZN6S477C53v44Ev,
  (VTBL_ENTRY)&_ZN6S477C53v45Ev,
  (VTBL_ENTRY)&_ZN6S477C53v46Ev,
  (VTBL_ENTRY)&_ZN6S477C53v47Ev,
  (VTBL_ENTRY)&_ZN6S477C53v48Ev,
  (VTBL_ENTRY)&_ZN6S477C53v49Ev,
  (VTBL_ENTRY)&_ZN6S477C53v50Ev,
  (VTBL_ENTRY)&_ZN6S477C53v51Ev,
  (VTBL_ENTRY)&_ZN6S477C53v52Ev,
  (VTBL_ENTRY)&_ZN6S477C53v53Ev,
  (VTBL_ENTRY)&_ZN6S477C53v54Ev,
  (VTBL_ENTRY)&_ZN6S477C53v55Ev,
  (VTBL_ENTRY)&_ZN6S477C53v56Ev,
  (VTBL_ENTRY)&_ZN6S477C53v57Ev,
  (VTBL_ENTRY)&_ZN6S477C53v58Ev,
  (VTBL_ENTRY)&_ZN6S477C53v59Ev,
  (VTBL_ENTRY)&_ZN6S477C53v60Ev,
  (VTBL_ENTRY)&_ZN6S477C53v61Ev,
  (VTBL_ENTRY)&_ZN6S477C53v62Ev,
  (VTBL_ENTRY)&_ZN6S477C53v63Ev,
  (VTBL_ENTRY)&_ZN6S477C53v64Ev,
  (VTBL_ENTRY)&_ZN6S477C53v65Ev,
  (VTBL_ENTRY)&_ZN6S477C53v66Ev,
  (VTBL_ENTRY)&_ZN6S477C53v67Ev,
  (VTBL_ENTRY)&_ZN6S477C53v68Ev,
  (VTBL_ENTRY)&_ZN6S477C53v69Ev,
  (VTBL_ENTRY)&_ZN6S477C53v70Ev,
  (VTBL_ENTRY)&_ZN6S477C53v71Ev,
  (VTBL_ENTRY)&_ZN6S477C53v72Ev,
  (VTBL_ENTRY)&_ZN6S477C53v73Ev,
  (VTBL_ENTRY)&_ZN6S477C53v74Ev,
  (VTBL_ENTRY)&_ZN6S477C43v75Ev,
  (VTBL_ENTRY)&_ZN6S477C43v76Ev,
  (VTBL_ENTRY)&_ZN6S477C43v77Ev,
  (VTBL_ENTRY)&_ZN6S477C43v78Ev,
  (VTBL_ENTRY)&_ZN6S477C43v79Ev,
  (VTBL_ENTRY)&_ZN6S477C43v80Ev,
  (VTBL_ENTRY)&_ZN6S477C43v81Ev,
  (VTBL_ENTRY)&_ZN6S477C43v82Ev,
  (VTBL_ENTRY)&_ZN6S477C43v83Ev,
  (VTBL_ENTRY)&_ZN6S477C43v84Ev,
  (VTBL_ENTRY)&_ZN6S477C43v85Ev,
  (VTBL_ENTRY)&_ZN6S477C43v86Ev,
  (VTBL_ENTRY)&_ZN6S477C43v87Ev,
  (VTBL_ENTRY)&_ZN6S477C43v88Ev,
  (VTBL_ENTRY)&_ZN6S477C43v89Ev,
  (VTBL_ENTRY)&_ZN6S477C43v90Ev,
  (VTBL_ENTRY)&_ZN6S477C43v91Ev,
  (VTBL_ENTRY)&_ZN6S477C43v92Ev,
  (VTBL_ENTRY)&_ZN6S477C43v93Ev,
  (VTBL_ENTRY)&_ZN6S477C43v94Ev,
  (VTBL_ENTRY)&_ZN6S477C43v95Ev,
  (VTBL_ENTRY)&_ZN6S477C43v96Ev,
  (VTBL_ENTRY)&_ZN6S477C43v97Ev,
  (VTBL_ENTRY)&_ZN6S477C43v98Ev,
  (VTBL_ENTRY)&_ZN6S477C43v99Ev,
  (VTBL_ENTRY)&_ZN6S477C44v100Ev,
  (VTBL_ENTRY)&_ZN6S477C44v101Ev,
};
extern VTBL_ENTRY _ZTI6S477C4[];
extern  VTBL_ENTRY _ZTV6S477C4[];
Class_Descriptor cd_S477C4 = {  "S477C4", // class name
  bases_S477C4, 1,
  &(vtc_S477C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S477C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S477C4),95, //virtual function table var
  2, // 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  S477C3  : S477C4 {
  ::S615C17_nt s477c3f0;
  int s477c3f1;
  unsigned int s477c3f2:1;
  unsigned int s477c3f3:1;
  unsigned int s477c3f4:1;
  unsigned int s477c3f5:1;
  unsigned int s477c3f6:1;
  unsigned int s477c3f7:1;
  unsigned int s477c3f8:1;
  unsigned int s477c3f9:1;
  unsigned int s477c3f10:1;
  unsigned int s477c3f11:1;
  unsigned int s477c3f12:1;
  unsigned int s477c3f13:1;
  unsigned int s477c3f14:1;
  int s477c3f15[2];
  void *s477c3f16;
  int s477c3f17[2];
  ::S615C17_nt s477c3f18;
  int s477c3f19;
  void *s477c3f20[2];
  char s477c3f21[6];
  virtual  ~S477C3(); // _ZN6S477C3D1Ev
  virtual void  v102(); // _ZN6S477C34v102Ev
  virtual void  v103(); // _ZN6S477C34v103Ev
  virtual void  v104(); // _ZN6S477C34v104Ev
  virtual void  v105(); // _ZN6S477C34v105Ev
  virtual void  v106(); // _ZN6S477C34v106Ev
  virtual void  v107(); // _ZN6S477C34v107Ev
  virtual void  v108(); // _ZN6S477C34v108Ev
  virtual void  v109(); // _ZN6S477C34v109Ev
  virtual void  v110(); // _ZN6S477C34v110Ev
  virtual void  v111(); // _ZN6S477C34v111Ev
  virtual void  v112(); // _ZN6S477C34v112Ev
  virtual void  v113(); // _ZN6S477C34v113Ev
  virtual void  v114(); // _ZN6S477C34v114Ev
  virtual void  v115(); // _ZN6S477C34v115Ev
  virtual void  v116(); // _ZN6S477C34v116Ev
  virtual void  v117(); // _ZN6S477C34v117Ev
  virtual void  v118(); // _ZN6S477C34v118Ev
  virtual void  v119(); // _ZN6S477C34v119Ev
  virtual void  v120(); // _ZN6S477C34v120Ev
  virtual void  v121(); // _ZN6S477C34v121Ev
  virtual void  v122(); // _ZN6S477C34v122Ev
  virtual void  v123(); // _ZN6S477C34v123Ev
  virtual void  v124(); // _ZN6S477C34v124Ev
  virtual void  v125(); // _ZN6S477C34v125Ev
  virtual void  v126(); // _ZN6S477C34v126Ev
  S477C3(); // tgen
};
//SIG(-1 S477C3) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} 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 FC4 Fi 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[2] Fp Fi[2] FC4 Fi Fp[2] Fc[6]}


 S477C3 ::~S477C3(){ note_dtor("S477C3", this);}
void  S477C3 ::v102(){vfunc_called(this, "_ZN6S477C34v102Ev");}
void  S477C3 ::v103(){vfunc_called(this, "_ZN6S477C34v103Ev");}
void  S477C3 ::v104(){vfunc_called(this, "_ZN6S477C34v104Ev");}
void  S477C3 ::v105(){vfunc_called(this, "_ZN6S477C34v105Ev");}
void  S477C3 ::v106(){vfunc_called(this, "_ZN6S477C34v106Ev");}
void  S477C3 ::v107(){vfunc_called(this, "_ZN6S477C34v107Ev");}
void  S477C3 ::v108(){vfunc_called(this, "_ZN6S477C34v108Ev");}
void  S477C3 ::v109(){vfunc_called(this, "_ZN6S477C34v109Ev");}
void  S477C3 ::v110(){vfunc_called(this, "_ZN6S477C34v110Ev");}
void  S477C3 ::v111(){vfunc_called(this, "_ZN6S477C34v111Ev");}
void  S477C3 ::v112(){vfunc_called(this, "_ZN6S477C34v112Ev");}
void  S477C3 ::v113(){vfunc_called(this, "_ZN6S477C34v113Ev");}
void  S477C3 ::v114(){vfunc_called(this, "_ZN6S477C34v114Ev");}
void  S477C3 ::v115(){vfunc_called(this, "_ZN6S477C34v115Ev");}
void  S477C3 ::v116(){vfunc_called(this, "_ZN6S477C34v116Ev");}
void  S477C3 ::v117(){vfunc_called(this, "_ZN6S477C34v117Ev");}
void  S477C3 ::v118(){vfunc_called(this, "_ZN6S477C34v118Ev");}
void  S477C3 ::v119(){vfunc_called(this, "_ZN6S477C34v119Ev");}
void  S477C3 ::v120(){vfunc_called(this, "_ZN6S477C34v120Ev");}
void  S477C3 ::v121(){vfunc_called(this, "_ZN6S477C34v121Ev");}
void  S477C3 ::v122(){vfunc_called(this, "_ZN6S477C34v122Ev");}
void  S477C3 ::v123(){vfunc_called(this, "_ZN6S477C34v123Ev");}
void  S477C3 ::v124(){vfunc_called(this, "_ZN6S477C34v124Ev");}
void  S477C3 ::v125(){vfunc_called(this, "_ZN6S477C34v125Ev");}
void  S477C3 ::v126(){vfunc_called(this, "_ZN6S477C34v126Ev");}
S477C3 ::S477C3(){ note_ctor("S477C3", this);} // tgen

static void Test_S477C3()
{
  extern Class_Descriptor cd_S477C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,62)];
    init_test(&cd_S477C3, buf);
    S477C3 *dp, &lv = *(dp=new (buf) S477C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,244), "sizeof(S477C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S477C3)");
    check_base_class_offset(lv, (S477C5*)(S477C4*), 0, "S477C3");
    check_base_class_offset(lv, (S477C4*), 0, "S477C3");
    check_field_offset(lv, s477c3f0, ABISELECT(228,180), "S477C3.s477c3f0");
    check_field_offset(lv, s477c3f1, ABISELECT(236,188), "S477C3.s477c3f1");
    set_bf_and_test(lv, s477c3f2, ABISELECT(240,192), 0, 1, 1, "S477C3");
    set_bf_and_test(lv, s477c3f3, ABISELECT(240,192), 1, 1, 1, "S477C3");
    set_bf_and_test(lv, s477c3f4, ABISELECT(240,192), 2, 1, 1, "S477C3");
    set_bf_and_test(lv, s477c3f5, ABISELECT(240,192), 3, 1, 1, "S477C3");
    set_bf_and_test(lv, s477c3f6, ABISELECT(240,192), 4, 1, 1, "S477C3");
    set_bf_and_test(lv, s477c3f7, ABISELECT(240,192), 5, 1, 1, "S477C3");
    set_bf_and_test(lv, s477c3f8, ABISELECT(240,192), 6, 1, 1, "S477C3");
    set_bf_and_test(lv, s477c3f9, ABISELECT(240,192), 7, 1, 1, "S477C3");
    set_bf_and_test(lv, s477c3f10, ABISELECT(241,193), 0, 1, 1, "S477C3");
    set_bf_and_test(lv, s477c3f11, ABISELECT(241,193), 1, 1, 1, "S477C3");
    set_bf_and_test(lv, s477c3f12, ABISELECT(241,193), 2, 1, 1, "S477C3");
    set_bf_and_test(lv, s477c3f13, ABISELECT(241,193), 3, 1, 1, "S477C3");
    set_bf_and_test(lv, s477c3f14, ABISELECT(241,193), 4, 1, 1, "S477C3");
    check_field_offset(lv, s477c3f15, ABISELECT(244,196), "S477C3.s477c3f15");
    check_field_offset(lv, s477c3f16, ABISELECT(256,204), "S477C3.s477c3f16");
    check_field_offset(lv, s477c3f17, ABISELECT(264,208), "S477C3.s477c3f17");
    check_field_offset(lv, s477c3f18, ABISELECT(272,216), "S477C3.s477c3f18");
    check_field_offset(lv, s477c3f19, ABISELECT(280,224), "S477C3.s477c3f19");
    check_field_offset(lv, s477c3f20, ABISELECT(288,228), "S477C3.s477c3f20");
    check_field_offset(lv, s477c3f21, ABISELECT(304,236), "S477C3.s477c3f21");
    test_class_info(&lv, &cd_S477C3);
    dp->~S477C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS477C3(Test_S477C3, "S477C3", ABISELECT(312,244));

#else // __cplusplus

extern void _ZN6S477C3C1Ev();
extern void _ZN6S477C3D1Ev();
Name_Map name_map_S477C3[] = {
  NSPAIR(_ZN6S477C3C1Ev),
  NSPAIR(_ZN6S477C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S477C5;
extern VTBL_ENTRY _ZTI6S477C5[];
extern  VTBL_ENTRY _ZTV6S477C5[];
extern Class_Descriptor cd_S477C4;
extern VTBL_ENTRY _ZTI6S477C4[];
extern  VTBL_ENTRY _ZTV6S477C4[];
static Base_Class bases_S477C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S477C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S477C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S477C3[];
extern void _ZN6S477C3D1Ev();
extern void _ZN6S477C3D0Ev();
extern void _ZN6S477C53v11Ev();
extern void _ZN6S477C53v12Ev();
extern void _ZN6S477C53v13Ev();
extern void _ZN6S477C53v14Ev();
extern void _ZN6S477C53v15Ev();
extern void _ZN6S477C53v16Ev();
extern void _ZN6S477C53v17Ev();
extern void _ZN6S477C53v18Ev();
extern void _ZN6S477C53v19Ev();
extern void _ZN6S477C53v20Ev();
extern void _ZN6S477C53v21Ev();
extern void _ZN6S477C53v22Ev();
extern void _ZN6S477C53v23Ev();
extern void _ZN6S477C53v24Ev();
extern void _ZN6S477C53v25Ev();
extern void _ZN6S477C53v26Ev();
extern void _ZN6S477C53v27Ev();
extern void _ZN6S477C53v28Ev();
extern void _ZN6S477C53v29Ev();
extern void _ZN6S477C53v30Ev();
extern void _ZN6S477C53v31Ev();
extern void _ZN6S477C53v32Ev();
extern void _ZN6S477C53v33Ev();
extern void _ZN6S477C53v34Ev();
extern void _ZN6S477C53v35Ev();
extern void _ZN6S477C53v36Ev();
extern void _ZN6S477C53v37Ev();
extern void _ZN6S477C53v38Ev();
extern void _ZN6S477C53v39Ev();
extern void _ZN6S477C53v40Ev();
extern void _ZN6S477C53v41Ev();
extern void _ZN6S477C53v42Ev();
extern void _ZN6S477C53v43Ev();
extern void _ZN6S477C53v44Ev();
extern void _ZN6S477C53v45Ev();
extern void _ZN6S477C53v46Ev();
extern void _ZN6S477C53v47Ev();
extern void _ZN6S477C53v48Ev();
extern void _ZN6S477C53v49Ev();
extern void _ZN6S477C53v50Ev();
extern void _ZN6S477C53v51Ev();
extern void _ZN6S477C53v52Ev();
extern void _ZN6S477C53v53Ev();
extern void _ZN6S477C53v54Ev();
extern void _ZN6S477C53v55Ev();
extern void _ZN6S477C53v56Ev();
extern void _ZN6S477C53v57Ev();
extern void _ZN6S477C53v58Ev();
extern void _ZN6S477C53v59Ev();
extern void _ZN6S477C53v60Ev();
extern void _ZN6S477C53v61Ev();
extern void _ZN6S477C53v62Ev();
extern void _ZN6S477C53v63Ev();
extern void _ZN6S477C53v64Ev();
extern void _ZN6S477C53v65Ev();
extern void _ZN6S477C53v66Ev();
extern void _ZN6S477C53v67Ev();
extern void _ZN6S477C53v68Ev();
extern void _ZN6S477C53v69Ev();
extern void _ZN6S477C53v70Ev();
extern void _ZN6S477C53v71Ev();
extern void _ZN6S477C53v72Ev();
extern void _ZN6S477C53v73Ev();
extern void _ZN6S477C53v74Ev();
extern void _ZN6S477C43v75Ev();
extern void _ZN6S477C43v76Ev();
extern void _ZN6S477C43v77Ev();
extern void _ZN6S477C43v78Ev();
extern void _ZN6S477C43v79Ev();
extern void _ZN6S477C43v80Ev();
extern void _ZN6S477C43v81Ev();
extern void _ZN6S477C43v82Ev();
extern void _ZN6S477C43v83Ev();
extern void _ZN6S477C43v84Ev();
extern void _ZN6S477C43v85Ev();
extern void _ZN6S477C43v86Ev();
extern void _ZN6S477C43v87Ev();
extern void _ZN6S477C43v88Ev();
extern void _ZN6S477C43v89Ev();
extern void _ZN6S477C43v90Ev();
extern void _ZN6S477C43v91Ev();
extern void _ZN6S477C43v92Ev();
extern void _ZN6S477C43v93Ev();
extern void _ZN6S477C43v94Ev();
extern void _ZN6S477C43v95Ev();
extern void _ZN6S477C43v96Ev();
extern void _ZN6S477C43v97Ev();
extern void _ZN6S477C43v98Ev();
extern void _ZN6S477C43v99Ev();
extern void _ZN6S477C44v100Ev();
extern void _ZN6S477C44v101Ev();
extern void _ZN6S477C34v102Ev();
extern void _ZN6S477C34v103Ev();
extern void _ZN6S477C34v104Ev();
extern void _ZN6S477C34v105Ev();
extern void _ZN6S477C34v106Ev();
extern void _ZN6S477C34v107Ev();
extern void _ZN6S477C34v108Ev();
extern void _ZN6S477C34v109Ev();
extern void _ZN6S477C34v110Ev();
extern void _ZN6S477C34v111Ev();
extern void _ZN6S477C34v112Ev();
extern void _ZN6S477C34v113Ev();
extern void _ZN6S477C34v114Ev();
extern void _ZN6S477C34v115Ev();
extern void _ZN6S477C34v116Ev();
extern void _ZN6S477C34v117Ev();
extern void _ZN6S477C34v118Ev();
extern void _ZN6S477C34v119Ev();
extern void _ZN6S477C34v120Ev();
extern void _ZN6S477C34v121Ev();
extern void _ZN6S477C34v122Ev();
extern void _ZN6S477C34v123Ev();
extern void _ZN6S477C34v124Ev();
extern void _ZN6S477C34v125Ev();
extern void _ZN6S477C34v126Ev();
static  VTBL_ENTRY vtc_S477C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S477C3[0]),
  (VTBL_ENTRY)&_ZN6S477C3D1Ev,
  (VTBL_ENTRY)&_ZN6S477C3D0Ev,
  (VTBL_ENTRY)&_ZN6S477C53v11Ev,
  (VTBL_ENTRY)&_ZN6S477C53v12Ev,
  (VTBL_ENTRY)&_ZN6S477C53v13Ev,
  (VTBL_ENTRY)&_ZN6S477C53v14Ev,
  (VTBL_ENTRY)&_ZN6S477C53v15Ev,
  (VTBL_ENTRY)&_ZN6S477C53v16Ev,
  (VTBL_ENTRY)&_ZN6S477C53v17Ev,
  (VTBL_ENTRY)&_ZN6S477C53v18Ev,
  (VTBL_ENTRY)&_ZN6S477C53v19Ev,
  (VTBL_ENTRY)&_ZN6S477C53v20Ev,
  (VTBL_ENTRY)&_ZN6S477C53v21Ev,
  (VTBL_ENTRY)&_ZN6S477C53v22Ev,
  (VTBL_ENTRY)&_ZN6S477C53v23Ev,
  (VTBL_ENTRY)&_ZN6S477C53v24Ev,
  (VTBL_ENTRY)&_ZN6S477C53v25Ev,
  (VTBL_ENTRY)&_ZN6S477C53v26Ev,
  (VTBL_ENTRY)&_ZN6S477C53v27Ev,
  (VTBL_ENTRY)&_ZN6S477C53v28Ev,
  (VTBL_ENTRY)&_ZN6S477C53v29Ev,
  (VTBL_ENTRY)&_ZN6S477C53v30Ev,
  (VTBL_ENTRY)&_ZN6S477C53v31Ev,
  (VTBL_ENTRY)&_ZN6S477C53v32Ev,
  (VTBL_ENTRY)&_ZN6S477C53v33Ev,
  (VTBL_ENTRY)&_ZN6S477C53v34Ev,
  (VTBL_ENTRY)&_ZN6S477C53v35Ev,
  (VTBL_ENTRY)&_ZN6S477C53v36Ev,
  (VTBL_ENTRY)&_ZN6S477C53v37Ev,
  (VTBL_ENTRY)&_ZN6S477C53v38Ev,
  (VTBL_ENTRY)&_ZN6S477C53v39Ev,
  (VTBL_ENTRY)&_ZN6S477C53v40Ev,
  (VTBL_ENTRY)&_ZN6S477C53v41Ev,
  (VTBL_ENTRY)&_ZN6S477C53v42Ev,
  (VTBL_ENTRY)&_ZN6S477C53v43Ev,
  (VTBL_ENTRY)&_ZN6S477C53v44Ev,
  (VTBL_ENTRY)&_ZN6S477C53v45Ev,
  (VTBL_ENTRY)&_ZN6S477C53v46Ev,
  (VTBL_ENTRY)&_ZN6S477C53v47Ev,
  (VTBL_ENTRY)&_ZN6S477C53v48Ev,
  (VTBL_ENTRY)&_ZN6S477C53v49Ev,
  (VTBL_ENTRY)&_ZN6S477C53v50Ev,
  (VTBL_ENTRY)&_ZN6S477C53v51Ev,
  (VTBL_ENTRY)&_ZN6S477C53v52Ev,
  (VTBL_ENTRY)&_ZN6S477C53v53Ev,
  (VTBL_ENTRY)&_ZN6S477C53v54Ev,
  (VTBL_ENTRY)&_ZN6S477C53v55Ev,
  (VTBL_ENTRY)&_ZN6S477C53v56Ev,
  (VTBL_ENTRY)&_ZN6S477C53v57Ev,
  (VTBL_ENTRY)&_ZN6S477C53v58Ev,
  (VTBL_ENTRY)&_ZN6S477C53v59Ev,
  (VTBL_ENTRY)&_ZN6S477C53v60Ev,
  (VTBL_ENTRY)&_ZN6S477C53v61Ev,
  (VTBL_ENTRY)&_ZN6S477C53v62Ev,
  (VTBL_ENTRY)&_ZN6S477C53v63Ev,
  (VTBL_ENTRY)&_ZN6S477C53v64Ev,
  (VTBL_ENTRY)&_ZN6S477C53v65Ev,
  (VTBL_ENTRY)&_ZN6S477C53v66Ev,
  (VTBL_ENTRY)&_ZN6S477C53v67Ev,
  (VTBL_ENTRY)&_ZN6S477C53v68Ev,
  (VTBL_ENTRY)&_ZN6S477C53v69Ev,
  (VTBL_ENTRY)&_ZN6S477C53v70Ev,
  (VTBL_ENTRY)&_ZN6S477C53v71Ev,
  (VTBL_ENTRY)&_ZN6S477C53v72Ev,
  (VTBL_ENTRY)&_ZN6S477C53v73Ev,
  (VTBL_ENTRY)&_ZN6S477C53v74Ev,
  (VTBL_ENTRY)&_ZN6S477C43v75Ev,
  (VTBL_ENTRY)&_ZN6S477C43v76Ev,
  (VTBL_ENTRY)&_ZN6S477C43v77Ev,
  (VTBL_ENTRY)&_ZN6S477C43v78Ev,
  (VTBL_ENTRY)&_ZN6S477C43v79Ev,
  (VTBL_ENTRY)&_ZN6S477C43v80Ev,
  (VTBL_ENTRY)&_ZN6S477C43v81Ev,
  (VTBL_ENTRY)&_ZN6S477C43v82Ev,
  (VTBL_ENTRY)&_ZN6S477C43v83Ev,
  (VTBL_ENTRY)&_ZN6S477C43v84Ev,
  (VTBL_ENTRY)&_ZN6S477C43v85Ev,
  (VTBL_ENTRY)&_ZN6S477C43v86Ev,
  (VTBL_ENTRY)&_ZN6S477C43v87Ev,
  (VTBL_ENTRY)&_ZN6S477C43v88Ev,
  (VTBL_ENTRY)&_ZN6S477C43v89Ev,
  (VTBL_ENTRY)&_ZN6S477C43v90Ev,
  (VTBL_ENTRY)&_ZN6S477C43v91Ev,
  (VTBL_ENTRY)&_ZN6S477C43v92Ev,
  (VTBL_ENTRY)&_ZN6S477C43v93Ev,
  (VTBL_ENTRY)&_ZN6S477C43v94Ev,
  (VTBL_ENTRY)&_ZN6S477C43v95Ev,
  (VTBL_ENTRY)&_ZN6S477C43v96Ev,
  (VTBL_ENTRY)&_ZN6S477C43v97Ev,
  (VTBL_ENTRY)&_ZN6S477C43v98Ev,
  (VTBL_ENTRY)&_ZN6S477C43v99Ev,
  (VTBL_ENTRY)&_ZN6S477C44v100Ev,
  (VTBL_ENTRY)&_ZN6S477C44v101Ev,
  (VTBL_ENTRY)&_ZN6S477C34v102Ev,
  (VTBL_ENTRY)&_ZN6S477C34v103Ev,
  (VTBL_ENTRY)&_ZN6S477C34v104Ev,
  (VTBL_ENTRY)&_ZN6S477C34v105Ev,
  (VTBL_ENTRY)&_ZN6S477C34v106Ev,
  (VTBL_ENTRY)&_ZN6S477C34v107Ev,
  (VTBL_ENTRY)&_ZN6S477C34v108Ev,
  (VTBL_ENTRY)&_ZN6S477C34v109Ev,
  (VTBL_ENTRY)&_ZN6S477C34v110Ev,
  (VTBL_ENTRY)&_ZN6S477C34v111Ev,
  (VTBL_ENTRY)&_ZN6S477C34v112Ev,
  (VTBL_ENTRY)&_ZN6S477C34v113Ev,
  (VTBL_ENTRY)&_ZN6S477C34v114Ev,
  (VTBL_ENTRY)&_ZN6S477C34v115Ev,
  (VTBL_ENTRY)&_ZN6S477C34v116Ev,
  (VTBL_ENTRY)&_ZN6S477C34v117Ev,
  (VTBL_ENTRY)&_ZN6S477C34v118Ev,
  (VTBL_ENTRY)&_ZN6S477C34v119Ev,
  (VTBL_ENTRY)&_ZN6S477C34v120Ev,
  (VTBL_ENTRY)&_ZN6S477C34v121Ev,
  (VTBL_ENTRY)&_ZN6S477C34v122Ev,
  (VTBL_ENTRY)&_ZN6S477C34v123Ev,
  (VTBL_ENTRY)&_ZN6S477C34v124Ev,
  (VTBL_ENTRY)&_ZN6S477C34v125Ev,
  (VTBL_ENTRY)&_ZN6S477C34v126Ev,
};
extern VTBL_ENTRY _ZTI6S477C3[];
extern  VTBL_ENTRY _ZTV6S477C3[];
Class_Descriptor cd_S477C3 = {  "S477C3", // class name
  bases_S477C3, 2,
  &(vtc_S477C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,244), // object size
  NSPAIRA(_ZTI6S477C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S477C3),120, //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  S477C2  : S477C3 {
  ::S165C25 s477c2f0;
  virtual  ~S477C2(); // _ZN6S477C2D1Ev
  virtual void  v127(); // _ZN6S477C24v127Ev
  virtual void  v128(); // _ZN6S477C24v128Ev
  virtual void  v129(); // _ZN6S477C24v129Ev
  virtual void  v130(); // _ZN6S477C24v130Ev
  virtual void  v131(); // _ZN6S477C24v131Ev
  virtual void  v132(); // _ZN6S477C24v132Ev
  virtual void  v133(); // _ZN6S477C24v133Ev
  S477C2(); // tgen
};
//SIG(-1 S477C2) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd 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 FC5 Fi 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[2] Fp Fi[2] FC5 Fi Fp[2] Fc[6]} vd v1 v2 v3 v4 v5 v6 v7 FC14{ BC15{ BC8}}}


 S477C2 ::~S477C2(){ note_dtor("S477C2", this);}
void  S477C2 ::v127(){vfunc_called(this, "_ZN6S477C24v127Ev");}
void  S477C2 ::v128(){vfunc_called(this, "_ZN6S477C24v128Ev");}
void  S477C2 ::v129(){vfunc_called(this, "_ZN6S477C24v129Ev");}
void  S477C2 ::v130(){vfunc_called(this, "_ZN6S477C24v130Ev");}
void  S477C2 ::v131(){vfunc_called(this, "_ZN6S477C24v131Ev");}
void  S477C2 ::v132(){vfunc_called(this, "_ZN6S477C24v132Ev");}
void  S477C2 ::v133(){vfunc_called(this, "_ZN6S477C24v133Ev");}
S477C2 ::S477C2(){ note_ctor("S477C2", this);} // tgen

static void Test_S477C2()
{
  extern Class_Descriptor cd_S477C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,65)];
    init_test(&cd_S477C2, buf);
    S477C2 *dp, &lv = *(dp=new (buf) S477C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,256), "sizeof(S477C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S477C2)");
    check_base_class_offset(lv, (S477C5*)(S477C4*)(S477C3*), 0, "S477C2");
    check_base_class_offset(lv, (S477C4*)(S477C3*), 0, "S477C2");
    check_base_class_offset(lv, (S477C3*), 0, "S477C2");
    check_field_offset(lv, s477c2f0, ABISELECT(312,244), "S477C2.s477c2f0");
    test_class_info(&lv, &cd_S477C2);
    dp->~S477C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS477C2(Test_S477C2, "S477C2", ABISELECT(328,256));

#else // __cplusplus

extern void _ZN6S477C2C1Ev();
extern void _ZN6S477C2D1Ev();
Name_Map name_map_S477C2[] = {
  NSPAIR(_ZN6S477C2C1Ev),
  NSPAIR(_ZN6S477C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S477C5;
extern VTBL_ENTRY _ZTI6S477C5[];
extern  VTBL_ENTRY _ZTV6S477C5[];
extern Class_Descriptor cd_S477C4;
extern VTBL_ENTRY _ZTI6S477C4[];
extern  VTBL_ENTRY _ZTV6S477C4[];
extern Class_Descriptor cd_S477C3;
extern VTBL_ENTRY _ZTI6S477C3[];
extern  VTBL_ENTRY _ZTV6S477C3[];
static Base_Class bases_S477C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S477C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S477C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S477C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S477C2[];
extern void _ZN6S477C2D1Ev();
extern void _ZN6S477C2D0Ev();
extern void _ZN6S477C53v11Ev();
extern void _ZN6S477C53v12Ev();
extern void _ZN6S477C53v13Ev();
extern void _ZN6S477C53v14Ev();
extern void _ZN6S477C53v15Ev();
extern void _ZN6S477C53v16Ev();
extern void _ZN6S477C53v17Ev();
extern void _ZN6S477C53v18Ev();
extern void _ZN6S477C53v19Ev();
extern void _ZN6S477C53v20Ev();
extern void _ZN6S477C53v21Ev();
extern void _ZN6S477C53v22Ev();
extern void _ZN6S477C53v23Ev();
extern void _ZN6S477C53v24Ev();
extern void _ZN6S477C53v25Ev();
extern void _ZN6S477C53v26Ev();
extern void _ZN6S477C53v27Ev();
extern void _ZN6S477C53v28Ev();
extern void _ZN6S477C53v29Ev();
extern void _ZN6S477C53v30Ev();
extern void _ZN6S477C53v31Ev();
extern void _ZN6S477C53v32Ev();
extern void _ZN6S477C53v33Ev();
extern void _ZN6S477C53v34Ev();
extern void _ZN6S477C53v35Ev();
extern void _ZN6S477C53v36Ev();
extern void _ZN6S477C53v37Ev();
extern void _ZN6S477C53v38Ev();
extern void _ZN6S477C53v39Ev();
extern void _ZN6S477C53v40Ev();
extern void _ZN6S477C53v41Ev();
extern void _ZN6S477C53v42Ev();
extern void _ZN6S477C53v43Ev();
extern void _ZN6S477C53v44Ev();
extern void _ZN6S477C53v45Ev();
extern void _ZN6S477C53v46Ev();
extern void _ZN6S477C53v47Ev();
extern void _ZN6S477C53v48Ev();
extern void _ZN6S477C53v49Ev();
extern void _ZN6S477C53v50Ev();
extern void _ZN6S477C53v51Ev();
extern void _ZN6S477C53v52Ev();
extern void _ZN6S477C53v53Ev();
extern void _ZN6S477C53v54Ev();
extern void _ZN6S477C53v55Ev();
extern void _ZN6S477C53v56Ev();
extern void _ZN6S477C53v57Ev();
extern void _ZN6S477C53v58Ev();
extern void _ZN6S477C53v59Ev();
extern void _ZN6S477C53v60Ev();
extern void _ZN6S477C53v61Ev();
extern void _ZN6S477C53v62Ev();
extern void _ZN6S477C53v63Ev();
extern void _ZN6S477C53v64Ev();
extern void _ZN6S477C53v65Ev();
extern void _ZN6S477C53v66Ev();
extern void _ZN6S477C53v67Ev();
extern void _ZN6S477C53v68Ev();
extern void _ZN6S477C53v69Ev();
extern void _ZN6S477C53v70Ev();
extern void _ZN6S477C53v71Ev();
extern void _ZN6S477C53v72Ev();
extern void _ZN6S477C53v73Ev();
extern void _ZN6S477C53v74Ev();
extern void _ZN6S477C43v75Ev();
extern void _ZN6S477C43v76Ev();
extern void _ZN6S477C43v77Ev();
extern void _ZN6S477C43v78Ev();
extern void _ZN6S477C43v79Ev();
extern void _ZN6S477C43v80Ev();
extern void _ZN6S477C43v81Ev();
extern void _ZN6S477C43v82Ev();
extern void _ZN6S477C43v83Ev();
extern void _ZN6S477C43v84Ev();
extern void _ZN6S477C43v85Ev();
extern void _ZN6S477C43v86Ev();
extern void _ZN6S477C43v87Ev();
extern void _ZN6S477C43v88Ev();
extern void _ZN6S477C43v89Ev();
extern void _ZN6S477C43v90Ev();
extern void _ZN6S477C43v91Ev();
extern void _ZN6S477C43v92Ev();
extern void _ZN6S477C43v93Ev();
extern void _ZN6S477C43v94Ev();
extern void _ZN6S477C43v95Ev();
extern void _ZN6S477C43v96Ev();
extern void _ZN6S477C43v97Ev();
extern void _ZN6S477C43v98Ev();
extern void _ZN6S477C43v99Ev();
extern void _ZN6S477C44v100Ev();
extern void _ZN6S477C44v101Ev();
extern void _ZN6S477C34v102Ev();
extern void _ZN6S477C34v103Ev();
extern void _ZN6S477C34v104Ev();
extern void _ZN6S477C34v105Ev();
extern void _ZN6S477C34v106Ev();
extern void _ZN6S477C34v107Ev();
extern void _ZN6S477C34v108Ev();
extern void _ZN6S477C34v109Ev();
extern void _ZN6S477C34v110Ev();
extern void _ZN6S477C34v111Ev();
extern void _ZN6S477C34v112Ev();
extern void _ZN6S477C34v113Ev();
extern void _ZN6S477C34v114Ev();
extern void _ZN6S477C34v115Ev();
extern void _ZN6S477C34v116Ev();
extern void _ZN6S477C34v117Ev();
extern void _ZN6S477C34v118Ev();
extern void _ZN6S477C34v119Ev();
extern void _ZN6S477C34v120Ev();
extern void _ZN6S477C34v121Ev();
extern void _ZN6S477C34v122Ev();
extern void _ZN6S477C34v123Ev();
extern void _ZN6S477C34v124Ev();
extern void _ZN6S477C34v125Ev();
extern void _ZN6S477C34v126Ev();
extern void _ZN6S477C24v127Ev();
extern void _ZN6S477C24v128Ev();
extern void _ZN6S477C24v129Ev();
extern void _ZN6S477C24v130Ev();
extern void _ZN6S477C24v131Ev();
extern void _ZN6S477C24v132Ev();
extern void _ZN6S477C24v133Ev();
static  VTBL_ENTRY vtc_S477C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S477C2[0]),
  (VTBL_ENTRY)&_ZN6S477C2D1Ev,
  (VTBL_ENTRY)&_ZN6S477C2D0Ev,
  (VTBL_ENTRY)&_ZN6S477C53v11Ev,
  (VTBL_ENTRY)&_ZN6S477C53v12Ev,
  (VTBL_ENTRY)&_ZN6S477C53v13Ev,
  (VTBL_ENTRY)&_ZN6S477C53v14Ev,
  (VTBL_ENTRY)&_ZN6S477C53v15Ev,
  (VTBL_ENTRY)&_ZN6S477C53v16Ev,
  (VTBL_ENTRY)&_ZN6S477C53v17Ev,
  (VTBL_ENTRY)&_ZN6S477C53v18Ev,
  (VTBL_ENTRY)&_ZN6S477C53v19Ev,
  (VTBL_ENTRY)&_ZN6S477C53v20Ev,
  (VTBL_ENTRY)&_ZN6S477C53v21Ev,
  (VTBL_ENTRY)&_ZN6S477C53v22Ev,
  (VTBL_ENTRY)&_ZN6S477C53v23Ev,
  (VTBL_ENTRY)&_ZN6S477C53v24Ev,
  (VTBL_ENTRY)&_ZN6S477C53v25Ev,
  (VTBL_ENTRY)&_ZN6S477C53v26Ev,
  (VTBL_ENTRY)&_ZN6S477C53v27Ev,
  (VTBL_ENTRY)&_ZN6S477C53v28Ev,
  (VTBL_ENTRY)&_ZN6S477C53v29Ev,
  (VTBL_ENTRY)&_ZN6S477C53v30Ev,
  (VTBL_ENTRY)&_ZN6S477C53v31Ev,
  (VTBL_ENTRY)&_ZN6S477C53v32Ev,
  (VTBL_ENTRY)&_ZN6S477C53v33Ev,
  (VTBL_ENTRY)&_ZN6S477C53v34Ev,
  (VTBL_ENTRY)&_ZN6S477C53v35Ev,
  (VTBL_ENTRY)&_ZN6S477C53v36Ev,
  (VTBL_ENTRY)&_ZN6S477C53v37Ev,
  (VTBL_ENTRY)&_ZN6S477C53v38Ev,
  (VTBL_ENTRY)&_ZN6S477C53v39Ev,
  (VTBL_ENTRY)&_ZN6S477C53v40Ev,
  (VTBL_ENTRY)&_ZN6S477C53v41Ev,
  (VTBL_ENTRY)&_ZN6S477C53v42Ev,
  (VTBL_ENTRY)&_ZN6S477C53v43Ev,
  (VTBL_ENTRY)&_ZN6S477C53v44Ev,
  (VTBL_ENTRY)&_ZN6S477C53v45Ev,
  (VTBL_ENTRY)&_ZN6S477C53v46Ev,
  (VTBL_ENTRY)&_ZN6S477C53v47Ev,
  (VTBL_ENTRY)&_ZN6S477C53v48Ev,
  (VTBL_ENTRY)&_ZN6S477C53v49Ev,
  (VTBL_ENTRY)&_ZN6S477C53v50Ev,
  (VTBL_ENTRY)&_ZN6S477C53v51Ev,
  (VTBL_ENTRY)&_ZN6S477C53v52Ev,
  (VTBL_ENTRY)&_ZN6S477C53v53Ev,
  (VTBL_ENTRY)&_ZN6S477C53v54Ev,
  (VTBL_ENTRY)&_ZN6S477C53v55Ev,
  (VTBL_ENTRY)&_ZN6S477C53v56Ev,
  (VTBL_ENTRY)&_ZN6S477C53v57Ev,
  (VTBL_ENTRY)&_ZN6S477C53v58Ev,
  (VTBL_ENTRY)&_ZN6S477C53v59Ev,
  (VTBL_ENTRY)&_ZN6S477C53v60Ev,
  (VTBL_ENTRY)&_ZN6S477C53v61Ev,
  (VTBL_ENTRY)&_ZN6S477C53v62Ev,
  (VTBL_ENTRY)&_ZN6S477C53v63Ev,
  (VTBL_ENTRY)&_ZN6S477C53v64Ev,
  (VTBL_ENTRY)&_ZN6S477C53v65Ev,
  (VTBL_ENTRY)&_ZN6S477C53v66Ev,
  (VTBL_ENTRY)&_ZN6S477C53v67Ev,
  (VTBL_ENTRY)&_ZN6S477C53v68Ev,
  (VTBL_ENTRY)&_ZN6S477C53v69Ev,
  (VTBL_ENTRY)&_ZN6S477C53v70Ev,
  (VTBL_ENTRY)&_ZN6S477C53v71Ev,
  (VTBL_ENTRY)&_ZN6S477C53v72Ev,
  (VTBL_ENTRY)&_ZN6S477C53v73Ev,
  (VTBL_ENTRY)&_ZN6S477C53v74Ev,
  (VTBL_ENTRY)&_ZN6S477C43v75Ev,
  (VTBL_ENTRY)&_ZN6S477C43v76Ev,
  (VTBL_ENTRY)&_ZN6S477C43v77Ev,
  (VTBL_ENTRY)&_ZN6S477C43v78Ev,
  (VTBL_ENTRY)&_ZN6S477C43v79Ev,
  (VTBL_ENTRY)&_ZN6S477C43v80Ev,
  (VTBL_ENTRY)&_ZN6S477C43v81Ev,
  (VTBL_ENTRY)&_ZN6S477C43v82Ev,
  (VTBL_ENTRY)&_ZN6S477C43v83Ev,
  (VTBL_ENTRY)&_ZN6S477C43v84Ev,
  (VTBL_ENTRY)&_ZN6S477C43v85Ev,
  (VTBL_ENTRY)&_ZN6S477C43v86Ev,
  (VTBL_ENTRY)&_ZN6S477C43v87Ev,
  (VTBL_ENTRY)&_ZN6S477C43v88Ev,
  (VTBL_ENTRY)&_ZN6S477C43v89Ev,
  (VTBL_ENTRY)&_ZN6S477C43v90Ev,
  (VTBL_ENTRY)&_ZN6S477C43v91Ev,
  (VTBL_ENTRY)&_ZN6S477C43v92Ev,
  (VTBL_ENTRY)&_ZN6S477C43v93Ev,
  (VTBL_ENTRY)&_ZN6S477C43v94Ev,
  (VTBL_ENTRY)&_ZN6S477C43v95Ev,
  (VTBL_ENTRY)&_ZN6S477C43v96Ev,
  (VTBL_ENTRY)&_ZN6S477C43v97Ev,
  (VTBL_ENTRY)&_ZN6S477C43v98Ev,
  (VTBL_ENTRY)&_ZN6S477C43v99Ev,
  (VTBL_ENTRY)&_ZN6S477C44v100Ev,
  (VTBL_ENTRY)&_ZN6S477C44v101Ev,
  (VTBL_ENTRY)&_ZN6S477C34v102Ev,
  (VTBL_ENTRY)&_ZN6S477C34v103Ev,
  (VTBL_ENTRY)&_ZN6S477C34v104Ev,
  (VTBL_ENTRY)&_ZN6S477C34v105Ev,
  (VTBL_ENTRY)&_ZN6S477C34v106Ev,
  (VTBL_ENTRY)&_ZN6S477C34v107Ev,
  (VTBL_ENTRY)&_ZN6S477C34v108Ev,
  (VTBL_ENTRY)&_ZN6S477C34v109Ev,
  (VTBL_ENTRY)&_ZN6S477C34v110Ev,
  (VTBL_ENTRY)&_ZN6S477C34v111Ev,
  (VTBL_ENTRY)&_ZN6S477C34v112Ev,
  (VTBL_ENTRY)&_ZN6S477C34v113Ev,
  (VTBL_ENTRY)&_ZN6S477C34v114Ev,
  (VTBL_ENTRY)&_ZN6S477C34v115Ev,
  (VTBL_ENTRY)&_ZN6S477C34v116Ev,
  (VTBL_ENTRY)&_ZN6S477C34v117Ev,
  (VTBL_ENTRY)&_ZN6S477C34v118Ev,
  (VTBL_ENTRY)&_ZN6S477C34v119Ev,
  (VTBL_ENTRY)&_ZN6S477C34v120Ev,
  (VTBL_ENTRY)&_ZN6S477C34v121Ev,
  (VTBL_ENTRY)&_ZN6S477C34v122Ev,
  (VTBL_ENTRY)&_ZN6S477C34v123Ev,
  (VTBL_ENTRY)&_ZN6S477C34v124Ev,
  (VTBL_ENTRY)&_ZN6S477C34v125Ev,
  (VTBL_ENTRY)&_ZN6S477C34v126Ev,
  (VTBL_ENTRY)&_ZN6S477C24v127Ev,
  (VTBL_ENTRY)&_ZN6S477C24v128Ev,
  (VTBL_ENTRY)&_ZN6S477C24v129Ev,
  (VTBL_ENTRY)&_ZN6S477C24v130Ev,
  (VTBL_ENTRY)&_ZN6S477C24v131Ev,
  (VTBL_ENTRY)&_ZN6S477C24v132Ev,
  (VTBL_ENTRY)&_ZN6S477C24v133Ev,
};
extern VTBL_ENTRY _ZTI6S477C2[];
extern  VTBL_ENTRY _ZTV6S477C2[];
Class_Descriptor cd_S477C2 = {  "S477C2", // class name
  bases_S477C2, 3,
  &(vtc_S477C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,256), // object size
  NSPAIRA(_ZTI6S477C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S477C2),127, //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  S477C1  : S477C2 {
  ::S165C7_nt s477c1f0;
  ::S165C7_nt s477c1f1;
  ::S165C7_nt s477c1f2;
  ::S165C7_nt s477c1f3;
  ::S615C17_nt s477c1f4;
  ::S615C17_nt s477c1f5;
  ::S615C17_nt s477c1f6;
  ::S615C17_nt s477c1f7;
  ::S615C17_nt s477c1f8;
  ::S615C17_nt s477c1f9;
  ::S615C17_nt s477c1f10;
  ::S615C17_nt s477c1f11;
  ::S615C17_nt s477c1f12;
  virtual  ~S477C1(); // _ZN6S477C1D1Ev
  virtual void  v1(); // _ZN6S477C12v1Ev
  virtual void  v2(); // _ZN6S477C12v2Ev
  virtual void  v3(); // _ZN6S477C12v3Ev
  virtual void  v4(); // _ZN6S477C12v4Ev
  virtual void  v5(); // _ZN6S477C12v5Ev
  virtual void  v6(); // _ZN6S477C12v6Ev
  virtual void  v7(); // _ZN6S477C12v7Ev
  virtual void  v8(); // _ZN6S477C12v8Ev
  virtual void  v9(); // _ZN6S477C12v9Ev
  virtual void  v10(); // _ZN6S477C13v10Ev
  S477C1(); // tgen
};
//SIG(1 S477C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v97 v98 v99 v100 v101 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd 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 FC6 Fi 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[2] Fp Fi[2] FC6 Fi Fp[2] Fc[6]} vd v127 v128 v129 v130 v131 v132 v133 FC15{ BC16{ BC9}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC17{ m Fi[2]} FC17 FC17 FC17 FC6 FC6 FC6 FC6 FC6 FC6 FC6 FC6 FC6}


 S477C1 ::~S477C1(){ note_dtor("S477C1", this);}
void  S477C1 ::v1(){vfunc_called(this, "_ZN6S477C12v1Ev");}
void  S477C1 ::v2(){vfunc_called(this, "_ZN6S477C12v2Ev");}
void  S477C1 ::v3(){vfunc_called(this, "_ZN6S477C12v3Ev");}
void  S477C1 ::v4(){vfunc_called(this, "_ZN6S477C12v4Ev");}
void  S477C1 ::v5(){vfunc_called(this, "_ZN6S477C12v5Ev");}
void  S477C1 ::v6(){vfunc_called(this, "_ZN6S477C12v6Ev");}
void  S477C1 ::v7(){vfunc_called(this, "_ZN6S477C12v7Ev");}
void  S477C1 ::v8(){vfunc_called(this, "_ZN6S477C12v8Ev");}
void  S477C1 ::v9(){vfunc_called(this, "_ZN6S477C12v9Ev");}
void  S477C1 ::v10(){vfunc_called(this, "_ZN6S477C13v10Ev");}
S477C1 ::S477C1(){ note_ctor("S477C1", this);} // tgen

static void Test_S477C1()
{
  extern Class_Descriptor cd_S477C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,91)];
    init_test(&cd_S477C1, buf);
    S477C1 *dp, &lv = *(dp=new (buf) S477C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,360), "sizeof(S477C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S477C1)");
    check_base_class_offset(lv, (S477C5*)(S477C4*)(S477C3*)(S477C2*), 0, "S477C1");
    check_base_class_offset(lv, (S477C4*)(S477C3*)(S477C2*), 0, "S477C1");
    check_base_class_offset(lv, (S477C3*)(S477C2*), 0, "S477C1");
    check_base_class_offset(lv, (S477C2*), 0, "S477C1");
    check_field_offset(lv, s477c1f0, ABISELECT(328,256), "S477C1.s477c1f0");
    check_field_offset(lv, s477c1f1, ABISELECT(336,264), "S477C1.s477c1f1");
    check_field_offset(lv, s477c1f2, ABISELECT(344,272), "S477C1.s477c1f2");
    check_field_offset(lv, s477c1f3, ABISELECT(352,280), "S477C1.s477c1f3");
    check_field_offset(lv, s477c1f4, ABISELECT(360,288), "S477C1.s477c1f4");
    check_field_offset(lv, s477c1f5, ABISELECT(368,296), "S477C1.s477c1f5");
    check_field_offset(lv, s477c1f6, ABISELECT(376,304), "S477C1.s477c1f6");
    check_field_offset(lv, s477c1f7, ABISELECT(384,312), "S477C1.s477c1f7");
    check_field_offset(lv, s477c1f8, ABISELECT(392,320), "S477C1.s477c1f8");
    check_field_offset(lv, s477c1f9, ABISELECT(400,328), "S477C1.s477c1f9");
    check_field_offset(lv, s477c1f10, ABISELECT(408,336), "S477C1.s477c1f10");
    check_field_offset(lv, s477c1f11, ABISELECT(416,344), "S477C1.s477c1f11");
    check_field_offset(lv, s477c1f12, ABISELECT(424,352), "S477C1.s477c1f12");
    test_class_info(&lv, &cd_S477C1);
    dp->~S477C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS477C1(Test_S477C1, "S477C1", ABISELECT(432,360));

#else // __cplusplus

extern void _ZN6S477C1C1Ev();
extern void _ZN6S477C1D1Ev();
Name_Map name_map_S477C1[] = {
  NSPAIR(_ZN6S477C1C1Ev),
  NSPAIR(_ZN6S477C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S477C5;
extern VTBL_ENTRY _ZTI6S477C5[];
extern  VTBL_ENTRY _ZTV6S477C5[];
extern Class_Descriptor cd_S477C4;
extern VTBL_ENTRY _ZTI6S477C4[];
extern  VTBL_ENTRY _ZTV6S477C4[];
extern Class_Descriptor cd_S477C3;
extern VTBL_ENTRY _ZTI6S477C3[];
extern  VTBL_ENTRY _ZTV6S477C3[];
extern Class_Descriptor cd_S477C2;
extern VTBL_ENTRY _ZTI6S477C2[];
extern  VTBL_ENTRY _ZTV6S477C2[];
static Base_Class bases_S477C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S477C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S477C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S477C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S477C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S477C1[];
extern void _ZN6S477C1D1Ev();
extern void _ZN6S477C1D0Ev();
extern void _ZN6S477C53v11Ev();
extern void _ZN6S477C53v12Ev();
extern void _ZN6S477C53v13Ev();
extern void _ZN6S477C53v14Ev();
extern void _ZN6S477C53v15Ev();
extern void _ZN6S477C53v16Ev();
extern void _ZN6S477C53v17Ev();
extern void _ZN6S477C53v18Ev();
extern void _ZN6S477C53v19Ev();
extern void _ZN6S477C53v20Ev();
extern void _ZN6S477C53v21Ev();
extern void _ZN6S477C53v22Ev();
extern void _ZN6S477C53v23Ev();
extern void _ZN6S477C53v24Ev();
extern void _ZN6S477C53v25Ev();
extern void _ZN6S477C53v26Ev();
extern void _ZN6S477C53v27Ev();
extern void _ZN6S477C53v28Ev();
extern void _ZN6S477C53v29Ev();
extern void _ZN6S477C53v30Ev();
extern void _ZN6S477C53v31Ev();
extern void _ZN6S477C53v32Ev();
extern void _ZN6S477C53v33Ev();
extern void _ZN6S477C53v34Ev();
extern void _ZN6S477C53v35Ev();
extern void _ZN6S477C53v36Ev();
extern void _ZN6S477C53v37Ev();
extern void _ZN6S477C53v38Ev();
extern void _ZN6S477C53v39Ev();
extern void _ZN6S477C53v40Ev();
extern void _ZN6S477C53v41Ev();
extern void _ZN6S477C53v42Ev();
extern void _ZN6S477C53v43Ev();
extern void _ZN6S477C53v44Ev();
extern void _ZN6S477C53v45Ev();
extern void _ZN6S477C53v46Ev();
extern void _ZN6S477C53v47Ev();
extern void _ZN6S477C53v48Ev();
extern void _ZN6S477C53v49Ev();
extern void _ZN6S477C53v50Ev();
extern void _ZN6S477C53v51Ev();
extern void _ZN6S477C53v52Ev();
extern void _ZN6S477C53v53Ev();
extern void _ZN6S477C53v54Ev();
extern void _ZN6S477C53v55Ev();
extern void _ZN6S477C53v56Ev();
extern void _ZN6S477C53v57Ev();
extern void _ZN6S477C53v58Ev();
extern void _ZN6S477C53v59Ev();
extern void _ZN6S477C53v60Ev();
extern void _ZN6S477C53v61Ev();
extern void _ZN6S477C53v62Ev();
extern void _ZN6S477C53v63Ev();
extern void _ZN6S477C53v64Ev();
extern void _ZN6S477C53v65Ev();
extern void _ZN6S477C53v66Ev();
extern void _ZN6S477C53v67Ev();
extern void _ZN6S477C53v68Ev();
extern void _ZN6S477C53v69Ev();
extern void _ZN6S477C53v70Ev();
extern void _ZN6S477C53v71Ev();
extern void _ZN6S477C53v72Ev();
extern void _ZN6S477C53v73Ev();
extern void _ZN6S477C53v74Ev();
extern void _ZN6S477C43v75Ev();
extern void _ZN6S477C43v76Ev();
extern void _ZN6S477C43v77Ev();
extern void _ZN6S477C43v78Ev();
extern void _ZN6S477C43v79Ev();
extern void _ZN6S477C43v80Ev();
extern void _ZN6S477C43v81Ev();
extern void _ZN6S477C43v82Ev();
extern void _ZN6S477C43v83Ev();
extern void _ZN6S477C43v84Ev();
extern void _ZN6S477C43v85Ev();
extern void _ZN6S477C43v86Ev();
extern void _ZN6S477C43v87Ev();
extern void _ZN6S477C43v88Ev();
extern void _ZN6S477C43v89Ev();
extern void _ZN6S477C43v90Ev();
extern void _ZN6S477C43v91Ev();
extern void _ZN6S477C43v92Ev();
extern void _ZN6S477C43v93Ev();
extern void _ZN6S477C43v94Ev();
extern void _ZN6S477C43v95Ev();
extern void _ZN6S477C43v96Ev();
extern void _ZN6S477C43v97Ev();
extern void _ZN6S477C43v98Ev();
extern void _ZN6S477C43v99Ev();
extern void _ZN6S477C44v100Ev();
extern void _ZN6S477C44v101Ev();
extern void _ZN6S477C34v102Ev();
extern void _ZN6S477C34v103Ev();
extern void _ZN6S477C34v104Ev();
extern void _ZN6S477C34v105Ev();
extern void _ZN6S477C34v106Ev();
extern void _ZN6S477C34v107Ev();
extern void _ZN6S477C34v108Ev();
extern void _ZN6S477C34v109Ev();
extern void _ZN6S477C34v110Ev();
extern void _ZN6S477C34v111Ev();
extern void _ZN6S477C34v112Ev();
extern void _ZN6S477C34v113Ev();
extern void _ZN6S477C34v114Ev();
extern void _ZN6S477C34v115Ev();
extern void _ZN6S477C34v116Ev();
extern void _ZN6S477C34v117Ev();
extern void _ZN6S477C34v118Ev();
extern void _ZN6S477C34v119Ev();
extern void _ZN6S477C34v120Ev();
extern void _ZN6S477C34v121Ev();
extern void _ZN6S477C34v122Ev();
extern void _ZN6S477C34v123Ev();
extern void _ZN6S477C34v124Ev();
extern void _ZN6S477C34v125Ev();
extern void _ZN6S477C34v126Ev();
extern void _ZN6S477C24v127Ev();
extern void _ZN6S477C24v128Ev();
extern void _ZN6S477C24v129Ev();
extern void _ZN6S477C24v130Ev();
extern void _ZN6S477C24v131Ev();
extern void _ZN6S477C24v132Ev();
extern void _ZN6S477C24v133Ev();
extern void _ZN6S477C12v1Ev();
extern void _ZN6S477C12v2Ev();
extern void _ZN6S477C12v3Ev();
extern void _ZN6S477C12v4Ev();
extern void _ZN6S477C12v5Ev();
extern void _ZN6S477C12v6Ev();
extern void _ZN6S477C12v7Ev();
extern void _ZN6S477C12v8Ev();
extern void _ZN6S477C12v9Ev();
extern void _ZN6S477C13v10Ev();
static  VTBL_ENTRY vtc_S477C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S477C1[0]),
  (VTBL_ENTRY)&_ZN6S477C1D1Ev,
  (VTBL_ENTRY)&_ZN6S477C1D0Ev,
  (VTBL_ENTRY)&_ZN6S477C53v11Ev,
  (VTBL_ENTRY)&_ZN6S477C53v12Ev,
  (VTBL_ENTRY)&_ZN6S477C53v13Ev,
  (VTBL_ENTRY)&_ZN6S477C53v14Ev,
  (VTBL_ENTRY)&_ZN6S477C53v15Ev,
  (VTBL_ENTRY)&_ZN6S477C53v16Ev,
  (VTBL_ENTRY)&_ZN6S477C53v17Ev,
  (VTBL_ENTRY)&_ZN6S477C53v18Ev,
  (VTBL_ENTRY)&_ZN6S477C53v19Ev,
  (VTBL_ENTRY)&_ZN6S477C53v20Ev,
  (VTBL_ENTRY)&_ZN6S477C53v21Ev,
  (VTBL_ENTRY)&_ZN6S477C53v22Ev,
  (VTBL_ENTRY)&_ZN6S477C53v23Ev,
  (VTBL_ENTRY)&_ZN6S477C53v24Ev,
  (VTBL_ENTRY)&_ZN6S477C53v25Ev,
  (VTBL_ENTRY)&_ZN6S477C53v26Ev,
  (VTBL_ENTRY)&_ZN6S477C53v27Ev,
  (VTBL_ENTRY)&_ZN6S477C53v28Ev,
  (VTBL_ENTRY)&_ZN6S477C53v29Ev,
  (VTBL_ENTRY)&_ZN6S477C53v30Ev,
  (VTBL_ENTRY)&_ZN6S477C53v31Ev,
  (VTBL_ENTRY)&_ZN6S477C53v32Ev,
  (VTBL_ENTRY)&_ZN6S477C53v33Ev,
  (VTBL_ENTRY)&_ZN6S477C53v34Ev,
  (VTBL_ENTRY)&_ZN6S477C53v35Ev,
  (VTBL_ENTRY)&_ZN6S477C53v36Ev,
  (VTBL_ENTRY)&_ZN6S477C53v37Ev,
  (VTBL_ENTRY)&_ZN6S477C53v38Ev,
  (VTBL_ENTRY)&_ZN6S477C53v39Ev,
  (VTBL_ENTRY)&_ZN6S477C53v40Ev,
  (VTBL_ENTRY)&_ZN6S477C53v41Ev,
  (VTBL_ENTRY)&_ZN6S477C53v42Ev,
  (VTBL_ENTRY)&_ZN6S477C53v43Ev,
  (VTBL_ENTRY)&_ZN6S477C53v44Ev,
  (VTBL_ENTRY)&_ZN6S477C53v45Ev,
  (VTBL_ENTRY)&_ZN6S477C53v46Ev,
  (VTBL_ENTRY)&_ZN6S477C53v47Ev,
  (VTBL_ENTRY)&_ZN6S477C53v48Ev,
  (VTBL_ENTRY)&_ZN6S477C53v49Ev,
  (VTBL_ENTRY)&_ZN6S477C53v50Ev,
  (VTBL_ENTRY)&_ZN6S477C53v51Ev,
  (VTBL_ENTRY)&_ZN6S477C53v52Ev,
  (VTBL_ENTRY)&_ZN6S477C53v53Ev,
  (VTBL_ENTRY)&_ZN6S477C53v54Ev,
  (VTBL_ENTRY)&_ZN6S477C53v55Ev,
  (VTBL_ENTRY)&_ZN6S477C53v56Ev,
  (VTBL_ENTRY)&_ZN6S477C53v57Ev,
  (VTBL_ENTRY)&_ZN6S477C53v58Ev,
  (VTBL_ENTRY)&_ZN6S477C53v59Ev,
  (VTBL_ENTRY)&_ZN6S477C53v60Ev,
  (VTBL_ENTRY)&_ZN6S477C53v61Ev,
  (VTBL_ENTRY)&_ZN6S477C53v62Ev,
  (VTBL_ENTRY)&_ZN6S477C53v63Ev,
  (VTBL_ENTRY)&_ZN6S477C53v64Ev,
  (VTBL_ENTRY)&_ZN6S477C53v65Ev,
  (VTBL_ENTRY)&_ZN6S477C53v66Ev,
  (VTBL_ENTRY)&_ZN6S477C53v67Ev,
  (VTBL_ENTRY)&_ZN6S477C53v68Ev,
  (VTBL_ENTRY)&_ZN6S477C53v69Ev,
  (VTBL_ENTRY)&_ZN6S477C53v70Ev,
  (VTBL_ENTRY)&_ZN6S477C53v71Ev,
  (VTBL_ENTRY)&_ZN6S477C53v72Ev,
  (VTBL_ENTRY)&_ZN6S477C53v73Ev,
  (VTBL_ENTRY)&_ZN6S477C53v74Ev,
  (VTBL_ENTRY)&_ZN6S477C43v75Ev,
  (VTBL_ENTRY)&_ZN6S477C43v76Ev,
  (VTBL_ENTRY)&_ZN6S477C43v77Ev,
  (VTBL_ENTRY)&_ZN6S477C43v78Ev,
  (VTBL_ENTRY)&_ZN6S477C43v79Ev,
  (VTBL_ENTRY)&_ZN6S477C43v80Ev,
  (VTBL_ENTRY)&_ZN6S477C43v81Ev,
  (VTBL_ENTRY)&_ZN6S477C43v82Ev,
  (VTBL_ENTRY)&_ZN6S477C43v83Ev,
  (VTBL_ENTRY)&_ZN6S477C43v84Ev,
  (VTBL_ENTRY)&_ZN6S477C43v85Ev,
  (VTBL_ENTRY)&_ZN6S477C43v86Ev,
  (VTBL_ENTRY)&_ZN6S477C43v87Ev,
  (VTBL_ENTRY)&_ZN6S477C43v88Ev,
  (VTBL_ENTRY)&_ZN6S477C43v89Ev,
  (VTBL_ENTRY)&_ZN6S477C43v90Ev,
  (VTBL_ENTRY)&_ZN6S477C43v91Ev,
  (VTBL_ENTRY)&_ZN6S477C43v92Ev,
  (VTBL_ENTRY)&_ZN6S477C43v93Ev,
  (VTBL_ENTRY)&_ZN6S477C43v94Ev,
  (VTBL_ENTRY)&_ZN6S477C43v95Ev,
  (VTBL_ENTRY)&_ZN6S477C43v96Ev,
  (VTBL_ENTRY)&_ZN6S477C43v97Ev,
  (VTBL_ENTRY)&_ZN6S477C43v98Ev,
  (VTBL_ENTRY)&_ZN6S477C43v99Ev,
  (VTBL_ENTRY)&_ZN6S477C44v100Ev,
  (VTBL_ENTRY)&_ZN6S477C44v101Ev,
  (VTBL_ENTRY)&_ZN6S477C34v102Ev,
  (VTBL_ENTRY)&_ZN6S477C34v103Ev,
  (VTBL_ENTRY)&_ZN6S477C34v104Ev,
  (VTBL_ENTRY)&_ZN6S477C34v105Ev,
  (VTBL_ENTRY)&_ZN6S477C34v106Ev,
  (VTBL_ENTRY)&_ZN6S477C34v107Ev,
  (VTBL_ENTRY)&_ZN6S477C34v108Ev,
  (VTBL_ENTRY)&_ZN6S477C34v109Ev,
  (VTBL_ENTRY)&_ZN6S477C34v110Ev,
  (VTBL_ENTRY)&_ZN6S477C34v111Ev,
  (VTBL_ENTRY)&_ZN6S477C34v112Ev,
  (VTBL_ENTRY)&_ZN6S477C34v113Ev,
  (VTBL_ENTRY)&_ZN6S477C34v114Ev,
  (VTBL_ENTRY)&_ZN6S477C34v115Ev,
  (VTBL_ENTRY)&_ZN6S477C34v116Ev,
  (VTBL_ENTRY)&_ZN6S477C34v117Ev,
  (VTBL_ENTRY)&_ZN6S477C34v118Ev,
  (VTBL_ENTRY)&_ZN6S477C34v119Ev,
  (VTBL_ENTRY)&_ZN6S477C34v120Ev,
  (VTBL_ENTRY)&_ZN6S477C34v121Ev,
  (VTBL_ENTRY)&_ZN6S477C34v122Ev,
  (VTBL_ENTRY)&_ZN6S477C34v123Ev,
  (VTBL_ENTRY)&_ZN6S477C34v124Ev,
  (VTBL_ENTRY)&_ZN6S477C34v125Ev,
  (VTBL_ENTRY)&_ZN6S477C34v126Ev,
  (VTBL_ENTRY)&_ZN6S477C24v127Ev,
  (VTBL_ENTRY)&_ZN6S477C24v128Ev,
  (VTBL_ENTRY)&_ZN6S477C24v129Ev,
  (VTBL_ENTRY)&_ZN6S477C24v130Ev,
  (VTBL_ENTRY)&_ZN6S477C24v131Ev,
  (VTBL_ENTRY)&_ZN6S477C24v132Ev,
  (VTBL_ENTRY)&_ZN6S477C24v133Ev,
  (VTBL_ENTRY)&_ZN6S477C12v1Ev,
  (VTBL_ENTRY)&_ZN6S477C12v2Ev,
  (VTBL_ENTRY)&_ZN6S477C12v3Ev,
  (VTBL_ENTRY)&_ZN6S477C12v4Ev,
  (VTBL_ENTRY)&_ZN6S477C12v5Ev,
  (VTBL_ENTRY)&_ZN6S477C12v6Ev,
  (VTBL_ENTRY)&_ZN6S477C12v7Ev,
  (VTBL_ENTRY)&_ZN6S477C12v8Ev,
  (VTBL_ENTRY)&_ZN6S477C12v9Ev,
  (VTBL_ENTRY)&_ZN6S477C13v10Ev,
};
extern VTBL_ENTRY _ZTI6S477C1[];
extern  VTBL_ENTRY _ZTV6S477C1[];
Class_Descriptor cd_S477C1 = {  "S477C1", // class name
  bases_S477C1, 4,
  &(vtc_S477C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(432,360), // object size
  NSPAIRA(_ZTI6S477C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S477C1),137, //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  S93C7  {
  int s93c7f0;
  __tsi64 s93c7f1;
  void *s93c7f2[4];
  int s93c7f3[2];
  void *s93c7f4;
  ::S615C17_nt s93c7f5;
  void *s93c7f6[2];
  virtual  ~S93C7(); // _ZN5S93C7D1Ev
  virtual void  v5(); // _ZN5S93C72v5Ev
  virtual void  v6(); // _ZN5S93C72v6Ev
  virtual void  v7(); // _ZN5S93C72v7Ev
  virtual void  v8(); // _ZN5S93C72v8Ev
  virtual void  v9(); // _ZN5S93C72v9Ev
  virtual void  v10(); // _ZN5S93C73v10Ev
  virtual void  v11(); // _ZN5S93C73v11Ev
  virtual void  v12(); // _ZN5S93C73v12Ev
  virtual void  v13(); // _ZN5S93C73v13Ev
  virtual void  v14(); // _ZN5S93C73v14Ev
  virtual void  v15(); // _ZN5S93C73v15Ev
  virtual void  v16(); // _ZN5S93C73v16Ev
  virtual void  v17(); // _ZN5S93C73v17Ev
  virtual void  v18(); // _ZN5S93C73v18Ev
  virtual void  v19(); // _ZN5S93C73v19Ev
  virtual void  v20(); // _ZN5S93C73v20Ev
  virtual void  v21(); // _ZN5S93C73v21Ev
  virtual void  v22(); // _ZN5S93C73v22Ev
  virtual void  v23(); // _ZN5S93C73v23Ev
  virtual void  v24(); // _ZN5S93C73v24Ev
  virtual void  v25(); // _ZN5S93C73v25Ev
  virtual void  v26(); // _ZN5S93C73v26Ev
  virtual void  v27(); // _ZN5S93C73v27Ev
  virtual void  v28(); // _ZN5S93C73v28Ev
  virtual void  v29(); // _ZN5S93C73v29Ev
  virtual void  v30(); // _ZN5S93C73v30Ev
  virtual void  v31(); // _ZN5S93C73v31Ev
  virtual void  v32(); // _ZN5S93C73v32Ev
  virtual void  v33(); // _ZN5S93C73v33Ev
  virtual void  v34(); // _ZN5S93C73v34Ev
  virtual void  v35(); // _ZN5S93C73v35Ev
  virtual void  v36(); // _ZN5S93C73v36Ev
  virtual void  v37(); // _ZN5S93C73v37Ev
  virtual void  v38(); // _ZN5S93C73v38Ev
  virtual void  v39(); // _ZN5S93C73v39Ev
  virtual void  v40(); // _ZN5S93C73v40Ev
  virtual void  v41(); // _ZN5S93C73v41Ev
  virtual void  v42(); // _ZN5S93C73v42Ev
  virtual void  v43(); // _ZN5S93C73v43Ev
  virtual void  v44(); // _ZN5S93C73v44Ev
  virtual void  v45(); // _ZN5S93C73v45Ev
  virtual void  v46(); // _ZN5S93C73v46Ev
  virtual void  v47(); // _ZN5S93C73v47Ev
  virtual void  v48(); // _ZN5S93C73v48Ev
  virtual void  v49(); // _ZN5S93C73v49Ev
  virtual void  v50(); // _ZN5S93C73v50Ev
  virtual void  v51(); // _ZN5S93C73v51Ev
  virtual void  v52(); // _ZN5S93C73v52Ev
  virtual void  v53(); // _ZN5S93C73v53Ev
  virtual void  v54(); // _ZN5S93C73v54Ev
  virtual void  v55(); // _ZN5S93C73v55Ev
  virtual void  v56(); // _ZN5S93C73v56Ev
  virtual void  v57(); // _ZN5S93C73v57Ev
  virtual void  v58(); // _ZN5S93C73v58Ev
  virtual void  v59(); // _ZN5S93C73v59Ev
  virtual void  v60(); // _ZN5S93C73v60Ev
  virtual void  v61(); // _ZN5S93C73v61Ev
  virtual void  v62(); // _ZN5S93C73v62Ev
  virtual void  v63(); // _ZN5S93C73v63Ev
  virtual void  v64(); // _ZN5S93C73v64Ev
  virtual void  v65(); // _ZN5S93C73v65Ev
  virtual void  v66(); // _ZN5S93C73v66Ev
  virtual void  v67(); // _ZN5S93C73v67Ev
  virtual void  v68(); // _ZN5S93C73v68Ev
  S93C7(); // tgen
};
//SIG(-1 S93C7) 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]}


 S93C7 ::~S93C7(){ note_dtor("S93C7", this);}
void  S93C7 ::v5(){vfunc_called(this, "_ZN5S93C72v5Ev");}
void  S93C7 ::v6(){vfunc_called(this, "_ZN5S93C72v6Ev");}
void  S93C7 ::v7(){vfunc_called(this, "_ZN5S93C72v7Ev");}
void  S93C7 ::v8(){vfunc_called(this, "_ZN5S93C72v8Ev");}
void  S93C7 ::v9(){vfunc_called(this, "_ZN5S93C72v9Ev");}
void  S93C7 ::v10(){vfunc_called(this, "_ZN5S93C73v10Ev");}
void  S93C7 ::v11(){vfunc_called(this, "_ZN5S93C73v11Ev");}
void  S93C7 ::v12(){vfunc_called(this, "_ZN5S93C73v12Ev");}
void  S93C7 ::v13(){vfunc_called(this, "_ZN5S93C73v13Ev");}
void  S93C7 ::v14(){vfunc_called(this, "_ZN5S93C73v14Ev");}
void  S93C7 ::v15(){vfunc_called(this, "_ZN5S93C73v15Ev");}
void  S93C7 ::v16(){vfunc_called(this, "_ZN5S93C73v16Ev");}
void  S93C7 ::v17(){vfunc_called(this, "_ZN5S93C73v17Ev");}
void  S93C7 ::v18(){vfunc_called(this, "_ZN5S93C73v18Ev");}
void  S93C7 ::v19(){vfunc_called(this, "_ZN5S93C73v19Ev");}
void  S93C7 ::v20(){vfunc_called(this, "_ZN5S93C73v20Ev");}
void  S93C7 ::v21(){vfunc_called(this, "_ZN5S93C73v21Ev");}
void  S93C7 ::v22(){vfunc_called(this, "_ZN5S93C73v22Ev");}
void  S93C7 ::v23(){vfunc_called(this, "_ZN5S93C73v23Ev");}
void  S93C7 ::v24(){vfunc_called(this, "_ZN5S93C73v24Ev");}
void  S93C7 ::v25(){vfunc_called(this, "_ZN5S93C73v25Ev");}
void  S93C7 ::v26(){vfunc_called(this, "_ZN5S93C73v26Ev");}
void  S93C7 ::v27(){vfunc_called(this, "_ZN5S93C73v27Ev");}
void  S93C7 ::v28(){vfunc_called(this, "_ZN5S93C73v28Ev");}
void  S93C7 ::v29(){vfunc_called(this, "_ZN5S93C73v29Ev");}
void  S93C7 ::v30(){vfunc_called(this, "_ZN5S93C73v30Ev");}
void  S93C7 ::v31(){vfunc_called(this, "_ZN5S93C73v31Ev");}
void  S93C7 ::v32(){vfunc_called(this, "_ZN5S93C73v32Ev");}
void  S93C7 ::v33(){vfunc_called(this, "_ZN5S93C73v33Ev");}
void  S93C7 ::v34(){vfunc_called(this, "_ZN5S93C73v34Ev");}
void  S93C7 ::v35(){vfunc_called(this, "_ZN5S93C73v35Ev");}
void  S93C7 ::v36(){vfunc_called(this, "_ZN5S93C73v36Ev");}
void  S93C7 ::v37(){vfunc_called(this, "_ZN5S93C73v37Ev");}
void  S93C7 ::v38(){vfunc_called(this, "_ZN5S93C73v38Ev");}
void  S93C7 ::v39(){vfunc_called(this, "_ZN5S93C73v39Ev");}
void  S93C7 ::v40(){vfunc_called(this, "_ZN5S93C73v40Ev");}
void  S93C7 ::v41(){vfunc_called(this, "_ZN5S93C73v41Ev");}
void  S93C7 ::v42(){vfunc_called(this, "_ZN5S93C73v42Ev");}
void  S93C7 ::v43(){vfunc_called(this, "_ZN5S93C73v43Ev");}
void  S93C7 ::v44(){vfunc_called(this, "_ZN5S93C73v44Ev");}
void  S93C7 ::v45(){vfunc_called(this, "_ZN5S93C73v45Ev");}
void  S93C7 ::v46(){vfunc_called(this, "_ZN5S93C73v46Ev");}
void  S93C7 ::v47(){vfunc_called(this, "_ZN5S93C73v47Ev");}
void  S93C7 ::v48(){vfunc_called(this, "_ZN5S93C73v48Ev");}
void  S93C7 ::v49(){vfunc_called(this, "_ZN5S93C73v49Ev");}
void  S93C7 ::v50(){vfunc_called(this, "_ZN5S93C73v50Ev");}
void  S93C7 ::v51(){vfunc_called(this, "_ZN5S93C73v51Ev");}
void  S93C7 ::v52(){vfunc_called(this, "_ZN5S93C73v52Ev");}
void  S93C7 ::v53(){vfunc_called(this, "_ZN5S93C73v53Ev");}
void  S93C7 ::v54(){vfunc_called(this, "_ZN5S93C73v54Ev");}
void  S93C7 ::v55(){vfunc_called(this, "_ZN5S93C73v55Ev");}
void  S93C7 ::v56(){vfunc_called(this, "_ZN5S93C73v56Ev");}
void  S93C7 ::v57(){vfunc_called(this, "_ZN5S93C73v57Ev");}
void  S93C7 ::v58(){vfunc_called(this, "_ZN5S93C73v58Ev");}
void  S93C7 ::v59(){vfunc_called(this, "_ZN5S93C73v59Ev");}
void  S93C7 ::v60(){vfunc_called(this, "_ZN5S93C73v60Ev");}
void  S93C7 ::v61(){vfunc_called(this, "_ZN5S93C73v61Ev");}
void  S93C7 ::v62(){vfunc_called(this, "_ZN5S93C73v62Ev");}
void  S93C7 ::v63(){vfunc_called(this, "_ZN5S93C73v63Ev");}
void  S93C7 ::v64(){vfunc_called(this, "_ZN5S93C73v64Ev");}
void  S93C7 ::v65(){vfunc_called(this, "_ZN5S93C73v65Ev");}
void  S93C7 ::v66(){vfunc_called(this, "_ZN5S93C73v66Ev");}
void  S93C7 ::v67(){vfunc_called(this, "_ZN5S93C73v67Ev");}
void  S93C7 ::v68(){vfunc_called(this, "_ZN5S93C73v68Ev");}
S93C7 ::S93C7(){ note_ctor("S93C7", this);} // tgen

static void Test_S93C7()
{
  extern Class_Descriptor cd_S93C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S93C7, buf);
    S93C7 *dp, &lv = *(dp=new (buf) S93C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S93C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S93C7)");
    check_field_offset(lv, s93c7f0, ABISELECT(8,4), "S93C7.s93c7f0");
    check_field_offset(lv, s93c7f1, ABISELECT(16,8), "S93C7.s93c7f1");
    check_field_offset(lv, s93c7f2, ABISELECT(24,16), "S93C7.s93c7f2");
    check_field_offset(lv, s93c7f3, ABISELECT(56,32), "S93C7.s93c7f3");
    check_field_offset(lv, s93c7f4, ABISELECT(64,40), "S93C7.s93c7f4");
    check_field_offset(lv, s93c7f5, ABISELECT(72,44), "S93C7.s93c7f5");
    check_field_offset(lv, s93c7f6, ABISELECT(80,52), "S93C7.s93c7f6");
    test_class_info(&lv, &cd_S93C7);
    dp->~S93C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS93C7(Test_S93C7, "S93C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S93C7C1Ev();
extern void _ZN5S93C7D1Ev();
Name_Map name_map_S93C7[] = {
  NSPAIR(_ZN5S93C7C1Ev),
  NSPAIR(_ZN5S93C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S93C7[];
extern void _ZN5S93C7D1Ev();
extern void _ZN5S93C7D0Ev();
extern void _ZN5S93C72v5Ev();
extern void _ZN5S93C72v6Ev();
extern void _ZN5S93C72v7Ev();
extern void _ZN5S93C72v8Ev();
extern void _ZN5S93C72v9Ev();
extern void _ZN5S93C73v10Ev();
extern void _ZN5S93C73v11Ev();
extern void _ZN5S93C73v12Ev();
extern void _ZN5S93C73v13Ev();
extern void _ZN5S93C73v14Ev();
extern void _ZN5S93C73v15Ev();
extern void _ZN5S93C73v16Ev();
extern void _ZN5S93C73v17Ev();
extern void _ZN5S93C73v18Ev();
extern void _ZN5S93C73v19Ev();
extern void _ZN5S93C73v20Ev();
extern void _ZN5S93C73v21Ev();
extern void _ZN5S93C73v22Ev();
extern void _ZN5S93C73v23Ev();
extern void _ZN5S93C73v24Ev();
extern void _ZN5S93C73v25Ev();
extern void _ZN5S93C73v26Ev();
extern void _ZN5S93C73v27Ev();
extern void _ZN5S93C73v28Ev();
extern void _ZN5S93C73v29Ev();
extern void _ZN5S93C73v30Ev();
extern void _ZN5S93C73v31Ev();
extern void _ZN5S93C73v32Ev();
extern void _ZN5S93C73v33Ev();
extern void _ZN5S93C73v34Ev();
extern void _ZN5S93C73v35Ev();
extern void _ZN5S93C73v36Ev();
extern void _ZN5S93C73v37Ev();
extern void _ZN5S93C73v38Ev();
extern void _ZN5S93C73v39Ev();
extern void _ZN5S93C73v40Ev();
extern void _ZN5S93C73v41Ev();
extern void _ZN5S93C73v42Ev();
extern void _ZN5S93C73v43Ev();
extern void _ZN5S93C73v44Ev();
extern void _ZN5S93C73v45Ev();
extern void _ZN5S93C73v46Ev();
extern void _ZN5S93C73v47Ev();
extern void _ZN5S93C73v48Ev();
extern void _ZN5S93C73v49Ev();
extern void _ZN5S93C73v50Ev();
extern void _ZN5S93C73v51Ev();
extern void _ZN5S93C73v52Ev();
extern void _ZN5S93C73v53Ev();
extern void _ZN5S93C73v54Ev();
extern void _ZN5S93C73v55Ev();
extern void _ZN5S93C73v56Ev();
extern void _ZN5S93C73v57Ev();
extern void _ZN5S93C73v58Ev();
extern void _ZN5S93C73v59Ev();
extern void _ZN5S93C73v60Ev();
extern void _ZN5S93C73v61Ev();
extern void _ZN5S93C73v62Ev();
extern void _ZN5S93C73v63Ev();
extern void _ZN5S93C73v64Ev();
extern void _ZN5S93C73v65Ev();
extern void _ZN5S93C73v66Ev();
extern void _ZN5S93C73v67Ev();
extern void _ZN5S93C73v68Ev();
static  VTBL_ENTRY vtc_S93C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S93C7[0]),
  (VTBL_ENTRY)&_ZN5S93C7D1Ev,
  (VTBL_ENTRY)&_ZN5S93C7D0Ev,
  (VTBL_ENTRY)&_ZN5S93C72v5Ev,
  (VTBL_ENTRY)&_ZN5S93C72v6Ev,
  (VTBL_ENTRY)&_ZN5S93C72v7Ev,
  (VTBL_ENTRY)&_ZN5S93C72v8Ev,
  (VTBL_ENTRY)&_ZN5S93C72v9Ev,
  (VTBL_ENTRY)&_ZN5S93C73v10Ev,
  (VTBL_ENTRY)&_ZN5S93C73v11Ev,
  (VTBL_ENTRY)&_ZN5S93C73v12Ev,
  (VTBL_ENTRY)&_ZN5S93C73v13Ev,
  (VTBL_ENTRY)&_ZN5S93C73v14Ev,
  (VTBL_ENTRY)&_ZN5S93C73v15Ev,
  (VTBL_ENTRY)&_ZN5S93C73v16Ev,
  (VTBL_ENTRY)&_ZN5S93C73v17Ev,
  (VTBL_ENTRY)&_ZN5S93C73v18Ev,
  (VTBL_ENTRY)&_ZN5S93C73v19Ev,
  (VTBL_ENTRY)&_ZN5S93C73v20Ev,
  (VTBL_ENTRY)&_ZN5S93C73v21Ev,
  (VTBL_ENTRY)&_ZN5S93C73v22Ev,
  (VTBL_ENTRY)&_ZN5S93C73v23Ev,
  (VTBL_ENTRY)&_ZN5S93C73v24Ev,
  (VTBL_ENTRY)&_ZN5S93C73v25Ev,
  (VTBL_ENTRY)&_ZN5S93C73v26Ev,
  (VTBL_ENTRY)&_ZN5S93C73v27Ev,
  (VTBL_ENTRY)&_ZN5S93C73v28Ev,
  (VTBL_ENTRY)&_ZN5S93C73v29Ev,
  (VTBL_ENTRY)&_ZN5S93C73v30Ev,
  (VTBL_ENTRY)&_ZN5S93C73v31Ev,
  (VTBL_ENTRY)&_ZN5S93C73v32Ev,
  (VTBL_ENTRY)&_ZN5S93C73v33Ev,
  (VTBL_ENTRY)&_ZN5S93C73v34Ev,
  (VTBL_ENTRY)&_ZN5S93C73v35Ev,
  (VTBL_ENTRY)&_ZN5S93C73v36Ev,
  (VTBL_ENTRY)&_ZN5S93C73v37Ev,
  (VTBL_ENTRY)&_ZN5S93C73v38Ev,
  (VTBL_ENTRY)&_ZN5S93C73v39Ev,
  (VTBL_ENTRY)&_ZN5S93C73v40Ev,
  (VTBL_ENTRY)&_ZN5S93C73v41Ev,
  (VTBL_ENTRY)&_ZN5S93C73v42Ev,
  (VTBL_ENTRY)&_ZN5S93C73v43Ev,
  (VTBL_ENTRY)&_ZN5S93C73v44Ev,
  (VTBL_ENTRY)&_ZN5S93C73v45Ev,
  (VTBL_ENTRY)&_ZN5S93C73v46Ev,
  (VTBL_ENTRY)&_ZN5S93C73v47Ev,
  (VTBL_ENTRY)&_ZN5S93C73v48Ev,
  (VTBL_ENTRY)&_ZN5S93C73v49Ev,
  (VTBL_ENTRY)&_ZN5S93C73v50Ev,
  (VTBL_ENTRY)&_ZN5S93C73v51Ev,
  (VTBL_ENTRY)&_ZN5S93C73v52Ev,
  (VTBL_ENTRY)&_ZN5S93C73v53Ev,
  (VTBL_ENTRY)&_ZN5S93C73v54Ev,
  (VTBL_ENTRY)&_ZN5S93C73v55Ev,
  (VTBL_ENTRY)&_ZN5S93C73v56Ev,
  (VTBL_ENTRY)&_ZN5S93C73v57Ev,
  (VTBL_ENTRY)&_ZN5S93C73v58Ev,
  (VTBL_ENTRY)&_ZN5S93C73v59Ev,
  (VTBL_ENTRY)&_ZN5S93C73v60Ev,
  (VTBL_ENTRY)&_ZN5S93C73v61Ev,
  (VTBL_ENTRY)&_ZN5S93C73v62Ev,
  (VTBL_ENTRY)&_ZN5S93C73v63Ev,
  (VTBL_ENTRY)&_ZN5S93C73v64Ev,
  (VTBL_ENTRY)&_ZN5S93C73v65Ev,
  (VTBL_ENTRY)&_ZN5S93C73v66Ev,
  (VTBL_ENTRY)&_ZN5S93C73v67Ev,
  (VTBL_ENTRY)&_ZN5S93C73v68Ev,
};
extern VTBL_ENTRY _ZTI5S93C7[];
extern  VTBL_ENTRY _ZTV5S93C7[];
Class_Descriptor cd_S93C7 = {  "S93C7", // class name
  0,0,//no base classes
  &(vtc_S93C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S93C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S93C7),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  S93C6  : S93C7 {
  void *s93c6f0;
  ::S615C22_nt s93c6f1;
  ::S615C17_nt s93c6f2;
  ::S165C27 s93c6f3;
  ::S615C12_nt s93c6f4;
  int s93c6f5;
  unsigned int s93c6f6:1;
  unsigned int s93c6f7:1;
  unsigned int s93c6f8:1;
  unsigned int s93c6f9:1;
  int s93c6f10[11];
  virtual  ~S93C6(); // _ZN5S93C6D1Ev
  virtual void  v69(); // _ZN5S93C63v69Ev
  virtual void  v70(); // _ZN5S93C63v70Ev
  virtual void  v71(); // _ZN5S93C63v71Ev
  virtual void  v72(); // _ZN5S93C63v72Ev
  virtual void  v73(); // _ZN5S93C63v73Ev
  virtual void  v74(); // _ZN5S93C63v74Ev
  virtual void  v75(); // _ZN5S93C63v75Ev
  virtual void  v76(); // _ZN5S93C63v76Ev
  virtual void  v77(); // _ZN5S93C63v77Ev
  virtual void  v78(); // _ZN5S93C63v78Ev
  virtual void  v79(); // _ZN5S93C63v79Ev
  virtual void  v80(); // _ZN5S93C63v80Ev
  virtual void  v81(); // _ZN5S93C63v81Ev
  virtual void  v82(); // _ZN5S93C63v82Ev
  virtual void  v83(); // _ZN5S93C63v83Ev
  virtual void  v84(); // _ZN5S93C63v84Ev
  virtual void  v85(); // _ZN5S93C63v85Ev
  virtual void  v86(); // _ZN5S93C63v86Ev
  virtual void  v87(); // _ZN5S93C63v87Ev
  virtual void  v88(); // _ZN5S93C63v88Ev
  virtual void  v89(); // _ZN5S93C63v89Ev
  virtual void  v90(); // _ZN5S93C63v90Ev
  virtual void  v91(); // _ZN5S93C63v91Ev
  virtual void  v92(); // _ZN5S93C63v92Ev
  virtual void  v93(); // _ZN5S93C63v93Ev
  virtual void  v94(); // _ZN5S93C63v94Ev
  virtual void  v95(); // _ZN5S93C63v95Ev
  S93C6(); // tgen
};
//SIG(-1 S93C6) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S93C6 ::~S93C6(){ note_dtor("S93C6", this);}
void  S93C6 ::v69(){vfunc_called(this, "_ZN5S93C63v69Ev");}
void  S93C6 ::v70(){vfunc_called(this, "_ZN5S93C63v70Ev");}
void  S93C6 ::v71(){vfunc_called(this, "_ZN5S93C63v71Ev");}
void  S93C6 ::v72(){vfunc_called(this, "_ZN5S93C63v72Ev");}
void  S93C6 ::v73(){vfunc_called(this, "_ZN5S93C63v73Ev");}
void  S93C6 ::v74(){vfunc_called(this, "_ZN5S93C63v74Ev");}
void  S93C6 ::v75(){vfunc_called(this, "_ZN5S93C63v75Ev");}
void  S93C6 ::v76(){vfunc_called(this, "_ZN5S93C63v76Ev");}
void  S93C6 ::v77(){vfunc_called(this, "_ZN5S93C63v77Ev");}
void  S93C6 ::v78(){vfunc_called(this, "_ZN5S93C63v78Ev");}
void  S93C6 ::v79(){vfunc_called(this, "_ZN5S93C63v79Ev");}
void  S93C6 ::v80(){vfunc_called(this, "_ZN5S93C63v80Ev");}
void  S93C6 ::v81(){vfunc_called(this, "_ZN5S93C63v81Ev");}
void  S93C6 ::v82(){vfunc_called(this, "_ZN5S93C63v82Ev");}
void  S93C6 ::v83(){vfunc_called(this, "_ZN5S93C63v83Ev");}
void  S93C6 ::v84(){vfunc_called(this, "_ZN5S93C63v84Ev");}
void  S93C6 ::v85(){vfunc_called(this, "_ZN5S93C63v85Ev");}
void  S93C6 ::v86(){vfunc_called(this, "_ZN5S93C63v86Ev");}
void  S93C6 ::v87(){vfunc_called(this, "_ZN5S93C63v87Ev");}
void  S93C6 ::v88(){vfunc_called(this, "_ZN5S93C63v88Ev");}
void  S93C6 ::v89(){vfunc_called(this, "_ZN5S93C63v89Ev");}
void  S93C6 ::v90(){vfunc_called(this, "_ZN5S93C63v90Ev");}
void  S93C6 ::v91(){vfunc_called(this, "_ZN5S93C63v91Ev");}
void  S93C6 ::v92(){vfunc_called(this, "_ZN5S93C63v92Ev");}
void  S93C6 ::v93(){vfunc_called(this, "_ZN5S93C63v93Ev");}
void  S93C6 ::v94(){vfunc_called(this, "_ZN5S93C63v94Ev");}
void  S93C6 ::v95(){vfunc_called(this, "_ZN5S93C63v95Ev");}
S93C6 ::S93C6(){ note_ctor("S93C6", this);} // tgen

static void Test_S93C6()
{
  extern Class_Descriptor cd_S93C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S93C6, buf);
    S93C6 *dp, &lv = *(dp=new (buf) S93C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S93C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S93C6)");
    check_base_class_offset(lv, (S93C7*), 0, "S93C6");
    check_field_offset(lv, s93c6f0, ABISELECT(96,60), "S93C6.s93c6f0");
    check_field_offset(lv, s93c6f1, ABISELECT(104,64), "S93C6.s93c6f1");
    check_field_offset(lv, s93c6f2, ABISELECT(120,76), "S93C6.s93c6f2");
    check_field_offset(lv, s93c6f3, ABISELECT(128,84), "S93C6.s93c6f3");
    check_field_offset(lv, s93c6f4, ABISELECT(144,96), "S93C6.s93c6f4");
    check_field_offset(lv, s93c6f5, ABISELECT(176,128), "S93C6.s93c6f5");
    set_bf_and_test(lv, s93c6f6, ABISELECT(180,132), 0, 1, 1, "S93C6");
    set_bf_and_test(lv, s93c6f7, ABISELECT(180,132), 1, 1, 1, "S93C6");
    set_bf_and_test(lv, s93c6f8, ABISELECT(180,132), 2, 1, 1, "S93C6");
    set_bf_and_test(lv, s93c6f9, ABISELECT(180,132), 3, 1, 1, "S93C6");
    check_field_offset(lv, s93c6f10, ABISELECT(184,136), "S93C6.s93c6f10");
    test_class_info(&lv, &cd_S93C6);
    dp->~S93C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS93C6(Test_S93C6, "S93C6", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN5S93C6C1Ev();
extern void _ZN5S93C6D1Ev();
Name_Map name_map_S93C6[] = {
  NSPAIR(_ZN5S93C6C1Ev),
  NSPAIR(_ZN5S93C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S93C7;
extern VTBL_ENTRY _ZTI5S93C7[];
extern  VTBL_ENTRY _ZTV5S93C7[];
static Base_Class bases_S93C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S93C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S93C6[];
extern void _ZN5S93C6D1Ev();
extern void _ZN5S93C6D0Ev();
extern void _ZN5S93C72v5Ev();
extern void _ZN5S93C72v6Ev();
extern void _ZN5S93C72v7Ev();
extern void _ZN5S93C72v8Ev();
extern void _ZN5S93C72v9Ev();
extern void _ZN5S93C73v10Ev();
extern void _ZN5S93C73v11Ev();
extern void _ZN5S93C73v12Ev();
extern void _ZN5S93C73v13Ev();
extern void _ZN5S93C73v14Ev();
extern void _ZN5S93C73v15Ev();
extern void _ZN5S93C73v16Ev();
extern void _ZN5S93C73v17Ev();
extern void _ZN5S93C73v18Ev();
extern void _ZN5S93C73v19Ev();
extern void _ZN5S93C73v20Ev();
extern void _ZN5S93C73v21Ev();
extern void _ZN5S93C73v22Ev();
extern void _ZN5S93C73v23Ev();
extern void _ZN5S93C73v24Ev();
extern void _ZN5S93C73v25Ev();
extern void _ZN5S93C73v26Ev();
extern void _ZN5S93C73v27Ev();
extern void _ZN5S93C73v28Ev();
extern void _ZN5S93C73v29Ev();
extern void _ZN5S93C73v30Ev();
extern void _ZN5S93C73v31Ev();
extern void _ZN5S93C73v32Ev();
extern void _ZN5S93C73v33Ev();
extern void _ZN5S93C73v34Ev();
extern void _ZN5S93C73v35Ev();
extern void _ZN5S93C73v36Ev();
extern void _ZN5S93C73v37Ev();
extern void _ZN5S93C73v38Ev();
extern void _ZN5S93C73v39Ev();
extern void _ZN5S93C73v40Ev();
extern void _ZN5S93C73v41Ev();
extern void _ZN5S93C73v42Ev();
extern void _ZN5S93C73v43Ev();
extern void _ZN5S93C73v44Ev();
extern void _ZN5S93C73v45Ev();
extern void _ZN5S93C73v46Ev();
extern void _ZN5S93C73v47Ev();
extern void _ZN5S93C73v48Ev();
extern void _ZN5S93C73v49Ev();
extern void _ZN5S93C73v50Ev();
extern void _ZN5S93C73v51Ev();
extern void _ZN5S93C73v52Ev();
extern void _ZN5S93C73v53Ev();
extern void _ZN5S93C73v54Ev();
extern void _ZN5S93C73v55Ev();
extern void _ZN5S93C73v56Ev();
extern void _ZN5S93C73v57Ev();
extern void _ZN5S93C73v58Ev();
extern void _ZN5S93C73v59Ev();
extern void _ZN5S93C73v60Ev();
extern void _ZN5S93C73v61Ev();
extern void _ZN5S93C73v62Ev();
extern void _ZN5S93C73v63Ev();
extern void _ZN5S93C73v64Ev();
extern void _ZN5S93C73v65Ev();
extern void _ZN5S93C73v66Ev();
extern void _ZN5S93C73v67Ev();
extern void _ZN5S93C73v68Ev();
extern void _ZN5S93C63v69Ev();
extern void _ZN5S93C63v70Ev();
extern void _ZN5S93C63v71Ev();
extern void _ZN5S93C63v72Ev();
extern void _ZN5S93C63v73Ev();
extern void _ZN5S93C63v74Ev();
extern void _ZN5S93C63v75Ev();
extern void _ZN5S93C63v76Ev();
extern void _ZN5S93C63v77Ev();
extern void _ZN5S93C63v78Ev();
extern void _ZN5S93C63v79Ev();
extern void _ZN5S93C63v80Ev();
extern void _ZN5S93C63v81Ev();
extern void _ZN5S93C63v82Ev();
extern void _ZN5S93C63v83Ev();
extern void _ZN5S93C63v84Ev();
extern void _ZN5S93C63v85Ev();
extern void _ZN5S93C63v86Ev();
extern void _ZN5S93C63v87Ev();
extern void _ZN5S93C63v88Ev();
extern void _ZN5S93C63v89Ev();
extern void _ZN5S93C63v90Ev();
extern void _ZN5S93C63v91Ev();
extern void _ZN5S93C63v92Ev();
extern void _ZN5S93C63v93Ev();
extern void _ZN5S93C63v94Ev();
extern void _ZN5S93C63v95Ev();
static  VTBL_ENTRY vtc_S93C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S93C6[0]),
  (VTBL_ENTRY)&_ZN5S93C6D1Ev,
  (VTBL_ENTRY)&_ZN5S93C6D0Ev,
  (VTBL_ENTRY)&_ZN5S93C72v5Ev,
  (VTBL_ENTRY)&_ZN5S93C72v6Ev,
  (VTBL_ENTRY)&_ZN5S93C72v7Ev,
  (VTBL_ENTRY)&_ZN5S93C72v8Ev,
  (VTBL_ENTRY)&_ZN5S93C72v9Ev,
  (VTBL_ENTRY)&_ZN5S93C73v10Ev,
  (VTBL_ENTRY)&_ZN5S93C73v11Ev,
  (VTBL_ENTRY)&_ZN5S93C73v12Ev,
  (VTBL_ENTRY)&_ZN5S93C73v13Ev,
  (VTBL_ENTRY)&_ZN5S93C73v14Ev,
  (VTBL_ENTRY)&_ZN5S93C73v15Ev,
  (VTBL_ENTRY)&_ZN5S93C73v16Ev,
  (VTBL_ENTRY)&_ZN5S93C73v17Ev,
  (VTBL_ENTRY)&_ZN5S93C73v18Ev,
  (VTBL_ENTRY)&_ZN5S93C73v19Ev,
  (VTBL_ENTRY)&_ZN5S93C73v20Ev,
  (VTBL_ENTRY)&_ZN5S93C73v21Ev,
  (VTBL_ENTRY)&_ZN5S93C73v22Ev,
  (VTBL_ENTRY)&_ZN5S93C73v23Ev,
  (VTBL_ENTRY)&_ZN5S93C73v24Ev,
  (VTBL_ENTRY)&_ZN5S93C73v25Ev,
  (VTBL_ENTRY)&_ZN5S93C73v26Ev,
  (VTBL_ENTRY)&_ZN5S93C73v27Ev,
  (VTBL_ENTRY)&_ZN5S93C73v28Ev,
  (VTBL_ENTRY)&_ZN5S93C73v29Ev,
  (VTBL_ENTRY)&_ZN5S93C73v30Ev,
  (VTBL_ENTRY)&_ZN5S93C73v31Ev,
  (VTBL_ENTRY)&_ZN5S93C73v32Ev,
  (VTBL_ENTRY)&_ZN5S93C73v33Ev,
  (VTBL_ENTRY)&_ZN5S93C73v34Ev,
  (VTBL_ENTRY)&_ZN5S93C73v35Ev,
  (VTBL_ENTRY)&_ZN5S93C73v36Ev,
  (VTBL_ENTRY)&_ZN5S93C73v37Ev,
  (VTBL_ENTRY)&_ZN5S93C73v38Ev,
  (VTBL_ENTRY)&_ZN5S93C73v39Ev,
  (VTBL_ENTRY)&_ZN5S93C73v40Ev,
  (VTBL_ENTRY)&_ZN5S93C73v41Ev,
  (VTBL_ENTRY)&_ZN5S93C73v42Ev,
  (VTBL_ENTRY)&_ZN5S93C73v43Ev,
  (VTBL_ENTRY)&_ZN5S93C73v44Ev,
  (VTBL_ENTRY)&_ZN5S93C73v45Ev,
  (VTBL_ENTRY)&_ZN5S93C73v46Ev,
  (VTBL_ENTRY)&_ZN5S93C73v47Ev,
  (VTBL_ENTRY)&_ZN5S93C73v48Ev,
  (VTBL_ENTRY)&_ZN5S93C73v49Ev,
  (VTBL_ENTRY)&_ZN5S93C73v50Ev,
  (VTBL_ENTRY)&_ZN5S93C73v51Ev,
  (VTBL_ENTRY)&_ZN5S93C73v52Ev,
  (VTBL_ENTRY)&_ZN5S93C73v53Ev,
  (VTBL_ENTRY)&_ZN5S93C73v54Ev,
  (VTBL_ENTRY)&_ZN5S93C73v55Ev,
  (VTBL_ENTRY)&_ZN5S93C73v56Ev,
  (VTBL_ENTRY)&_ZN5S93C73v57Ev,
  (VTBL_ENTRY)&_ZN5S93C73v58Ev,
  (VTBL_ENTRY)&_ZN5S93C73v59Ev,
  (VTBL_ENTRY)&_ZN5S93C73v60Ev,
  (VTBL_ENTRY)&_ZN5S93C73v61Ev,
  (VTBL_ENTRY)&_ZN5S93C73v62Ev,
  (VTBL_ENTRY)&_ZN5S93C73v63Ev,
  (VTBL_ENTRY)&_ZN5S93C73v64Ev,
  (VTBL_ENTRY)&_ZN5S93C73v65Ev,
  (VTBL_ENTRY)&_ZN5S93C73v66Ev,
  (VTBL_ENTRY)&_ZN5S93C73v67Ev,
  (VTBL_ENTRY)&_ZN5S93C73v68Ev,
  (VTBL_ENTRY)&_ZN5S93C63v69Ev,
  (VTBL_ENTRY)&_ZN5S93C63v70Ev,
  (VTBL_ENTRY)&_ZN5S93C63v71Ev,
  (VTBL_ENTRY)&_ZN5S93C63v72Ev,
  (VTBL_ENTRY)&_ZN5S93C63v73Ev,
  (VTBL_ENTRY)&_ZN5S93C63v74Ev,
  (VTBL_ENTRY)&_ZN5S93C63v75Ev,
  (VTBL_ENTRY)&_ZN5S93C63v76Ev,
  (VTBL_ENTRY)&_ZN5S93C63v77Ev,
  (VTBL_ENTRY)&_ZN5S93C63v78Ev,
  (VTBL_ENTRY)&_ZN5S93C63v79Ev,
  (VTBL_ENTRY)&_ZN5S93C63v80Ev,
  (VTBL_ENTRY)&_ZN5S93C63v81Ev,
  (VTBL_ENTRY)&_ZN5S93C63v82Ev,
  (VTBL_ENTRY)&_ZN5S93C63v83Ev,
  (VTBL_ENTRY)&_ZN5S93C63v84Ev,
  (VTBL_ENTRY)&_ZN5S93C63v85Ev,
  (VTBL_ENTRY)&_ZN5S93C63v86Ev,
  (VTBL_ENTRY)&_ZN5S93C63v87Ev,
  (VTBL_ENTRY)&_ZN5S93C63v88Ev,
  (VTBL_ENTRY)&_ZN5S93C63v89Ev,
  (VTBL_ENTRY)&_ZN5S93C63v90Ev,
  (VTBL_ENTRY)&_ZN5S93C63v91Ev,
  (VTBL_ENTRY)&_ZN5S93C63v92Ev,
  (VTBL_ENTRY)&_ZN5S93C63v93Ev,
  (VTBL_ENTRY)&_ZN5S93C63v94Ev,
  (VTBL_ENTRY)&_ZN5S93C63v95Ev,
};
extern VTBL_ENTRY _ZTI5S93C6[];
extern  VTBL_ENTRY _ZTV5S93C6[];
Class_Descriptor cd_S93C6 = {  "S93C6", // class name
  bases_S93C6, 1,
  &(vtc_S93C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI5S93C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S93C6),95, //virtual function table var
  2, // 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  S93C5  : S93C6 {
  ::S165C25 s93c5f0;
  unsigned int s93c5f1:1;
  virtual  ~S93C5(); // _ZN5S93C5D1Ev
  virtual void  v96(); // _ZN5S93C53v96Ev
  virtual void  v97(); // _ZN5S93C53v97Ev
  virtual void  v98(); // _ZN5S93C53v98Ev
  virtual void  v99(); // _ZN5S93C53v99Ev
  virtual void  v100(); // _ZN5S93C54v100Ev
  virtual void  v101(); // _ZN5S93C54v101Ev
  virtual void  v102(); // _ZN5S93C54v102Ev
  virtual void  v103(); // _ZN5S93C54v103Ev
  virtual void  v104(); // _ZN5S93C54v104Ev
  virtual void  v105(); // _ZN5S93C54v105Ev
  virtual void  v106(); // _ZN5S93C54v106Ev
  virtual void  v107(); // _ZN5S93C54v107Ev
  virtual void  v108(); // _ZN5S93C54v108Ev
  virtual void  v109(); // _ZN5S93C54v109Ev
  virtual void  v110(); // _ZN5S93C54v110Ev
  virtual void  v111(); // _ZN5S93C54v111Ev
  virtual void  v112(); // _ZN5S93C54v112Ev
  virtual void  v113(); // _ZN5S93C54v113Ev
  S93C5(); // tgen
};
//SIG(-1 S93C5) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S93C5 ::~S93C5(){ note_dtor("S93C5", this);}
void  S93C5 ::v96(){vfunc_called(this, "_ZN5S93C53v96Ev");}
void  S93C5 ::v97(){vfunc_called(this, "_ZN5S93C53v97Ev");}
void  S93C5 ::v98(){vfunc_called(this, "_ZN5S93C53v98Ev");}
void  S93C5 ::v99(){vfunc_called(this, "_ZN5S93C53v99Ev");}
void  S93C5 ::v100(){vfunc_called(this, "_ZN5S93C54v100Ev");}
void  S93C5 ::v101(){vfunc_called(this, "_ZN5S93C54v101Ev");}
void  S93C5 ::v102(){vfunc_called(this, "_ZN5S93C54v102Ev");}
void  S93C5 ::v103(){vfunc_called(this, "_ZN5S93C54v103Ev");}
void  S93C5 ::v104(){vfunc_called(this, "_ZN5S93C54v104Ev");}
void  S93C5 ::v105(){vfunc_called(this, "_ZN5S93C54v105Ev");}
void  S93C5 ::v106(){vfunc_called(this, "_ZN5S93C54v106Ev");}
void  S93C5 ::v107(){vfunc_called(this, "_ZN5S93C54v107Ev");}
void  S93C5 ::v108(){vfunc_called(this, "_ZN5S93C54v108Ev");}
void  S93C5 ::v109(){vfunc_called(this, "_ZN5S93C54v109Ev");}
void  S93C5 ::v110(){vfunc_called(this, "_ZN5S93C54v110Ev");}
void  S93C5 ::v111(){vfunc_called(this, "_ZN5S93C54v111Ev");}
void  S93C5 ::v112(){vfunc_called(this, "_ZN5S93C54v112Ev");}
void  S93C5 ::v113(){vfunc_called(this, "_ZN5S93C54v113Ev");}
S93C5 ::S93C5(){ note_ctor("S93C5", this);} // tgen

static void Test_S93C5()
{
  extern Class_Descriptor cd_S93C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S93C5, buf);
    S93C5 *dp, &lv = *(dp=new (buf) S93C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S93C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S93C5)");
    check_base_class_offset(lv, (S93C7*)(S93C6*), 0, "S93C5");
    check_base_class_offset(lv, (S93C6*), 0, "S93C5");
    check_field_offset(lv, s93c5f0, ABISELECT(232,180), "S93C5.s93c5f0");
    set_bf_and_test(lv, s93c5f1, ABISELECT(248,192), 0, 1, 1, "S93C5");
    test_class_info(&lv, &cd_S93C5);
    dp->~S93C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS93C5(Test_S93C5, "S93C5", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN5S93C5C1Ev();
extern void _ZN5S93C5D1Ev();
Name_Map name_map_S93C5[] = {
  NSPAIR(_ZN5S93C5C1Ev),
  NSPAIR(_ZN5S93C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S93C7;
extern VTBL_ENTRY _ZTI5S93C7[];
extern  VTBL_ENTRY _ZTV5S93C7[];
extern Class_Descriptor cd_S93C6;
extern VTBL_ENTRY _ZTI5S93C6[];
extern  VTBL_ENTRY _ZTV5S93C6[];
static Base_Class bases_S93C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S93C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S93C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI5S93C5[];
extern void _ZN5S93C5D1Ev();
extern void _ZN5S93C5D0Ev();
extern void _ZN5S93C72v5Ev();
extern void _ZN5S93C72v6Ev();
extern void _ZN5S93C72v7Ev();
extern void _ZN5S93C72v8Ev();
extern void _ZN5S93C72v9Ev();
extern void _ZN5S93C73v10Ev();
extern void _ZN5S93C73v11Ev();
extern void _ZN5S93C73v12Ev();
extern void _ZN5S93C73v13Ev();
extern void _ZN5S93C73v14Ev();
extern void _ZN5S93C73v15Ev();
extern void _ZN5S93C73v16Ev();
extern void _ZN5S93C73v17Ev();
extern void _ZN5S93C73v18Ev();
extern void _ZN5S93C73v19Ev();
extern void _ZN5S93C73v20Ev();
extern void _ZN5S93C73v21Ev();
extern void _ZN5S93C73v22Ev();
extern void _ZN5S93C73v23Ev();
extern void _ZN5S93C73v24Ev();
extern void _ZN5S93C73v25Ev();
extern void _ZN5S93C73v26Ev();
extern void _ZN5S93C73v27Ev();
extern void _ZN5S93C73v28Ev();
extern void _ZN5S93C73v29Ev();
extern void _ZN5S93C73v30Ev();
extern void _ZN5S93C73v31Ev();
extern void _ZN5S93C73v32Ev();
extern void _ZN5S93C73v33Ev();
extern void _ZN5S93C73v34Ev();
extern void _ZN5S93C73v35Ev();
extern void _ZN5S93C73v36Ev();
extern void _ZN5S93C73v37Ev();
extern void _ZN5S93C73v38Ev();
extern void _ZN5S93C73v39Ev();
extern void _ZN5S93C73v40Ev();
extern void _ZN5S93C73v41Ev();
extern void _ZN5S93C73v42Ev();
extern void _ZN5S93C73v43Ev();
extern void _ZN5S93C73v44Ev();
extern void _ZN5S93C73v45Ev();
extern void _ZN5S93C73v46Ev();
extern void _ZN5S93C73v47Ev();
extern void _ZN5S93C73v48Ev();
extern void _ZN5S93C73v49Ev();
extern void _ZN5S93C73v50Ev();
extern void _ZN5S93C73v51Ev();
extern void _ZN5S93C73v52Ev();
extern void _ZN5S93C73v53Ev();
extern void _ZN5S93C73v54Ev();
extern void _ZN5S93C73v55Ev();
extern void _ZN5S93C73v56Ev();
extern void _ZN5S93C73v57Ev();
extern void _ZN5S93C73v58Ev();
extern void _ZN5S93C73v59Ev();
extern void _ZN5S93C73v60Ev();
extern void _ZN5S93C73v61Ev();
extern void _ZN5S93C73v62Ev();
extern void _ZN5S93C73v63Ev();
extern void _ZN5S93C73v64Ev();
extern void _ZN5S93C73v65Ev();
extern void _ZN5S93C73v66Ev();
extern void _ZN5S93C73v67Ev();
extern void _ZN5S93C73v68Ev();
extern void _ZN5S93C63v69Ev();
extern void _ZN5S93C63v70Ev();
extern void _ZN5S93C63v71Ev();
extern void _ZN5S93C63v72Ev();
extern void _ZN5S93C63v73Ev();
extern void _ZN5S93C63v74Ev();
extern void _ZN5S93C63v75Ev();
extern void _ZN5S93C63v76Ev();
extern void _ZN5S93C63v77Ev();
extern void _ZN5S93C63v78Ev();
extern void _ZN5S93C63v79Ev();
extern void _ZN5S93C63v80Ev();
extern void _ZN5S93C63v81Ev();
extern void _ZN5S93C63v82Ev();
extern void _ZN5S93C63v83Ev();
extern void _ZN5S93C63v84Ev();
extern void _ZN5S93C63v85Ev();
extern void _ZN5S93C63v86Ev();
extern void _ZN5S93C63v87Ev();
extern void _ZN5S93C63v88Ev();
extern void _ZN5S93C63v89Ev();
extern void _ZN5S93C63v90Ev();
extern void _ZN5S93C63v91Ev();
extern void _ZN5S93C63v92Ev();
extern void _ZN5S93C63v93Ev();
extern void _ZN5S93C63v94Ev();
extern void _ZN5S93C63v95Ev();
extern void _ZN5S93C53v96Ev();
extern void _ZN5S93C53v97Ev();
extern void _ZN5S93C53v98Ev();
extern void _ZN5S93C53v99Ev();
extern void _ZN5S93C54v100Ev();
extern void _ZN5S93C54v101Ev();
extern void _ZN5S93C54v102Ev();
extern void _ZN5S93C54v103Ev();
extern void _ZN5S93C54v104Ev();
extern void _ZN5S93C54v105Ev();
extern void _ZN5S93C54v106Ev();
extern void _ZN5S93C54v107Ev();
extern void _ZN5S93C54v108Ev();
extern void _ZN5S93C54v109Ev();
extern void _ZN5S93C54v110Ev();
extern void _ZN5S93C54v111Ev();
extern void _ZN5S93C54v112Ev();
extern void _ZN5S93C54v113Ev();
static  VTBL_ENTRY vtc_S93C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S93C5[0]),
  (VTBL_ENTRY)&_ZN5S93C5D1Ev,
  (VTBL_ENTRY)&_ZN5S93C5D0Ev,
  (VTBL_ENTRY)&_ZN5S93C72v5Ev,
  (VTBL_ENTRY)&_ZN5S93C72v6Ev,
  (VTBL_ENTRY)&_ZN5S93C72v7Ev,
  (VTBL_ENTRY)&_ZN5S93C72v8Ev,
  (VTBL_ENTRY)&_ZN5S93C72v9Ev,
  (VTBL_ENTRY)&_ZN5S93C73v10Ev,
  (VTBL_ENTRY)&_ZN5S93C73v11Ev,
  (VTBL_ENTRY)&_ZN5S93C73v12Ev,
  (VTBL_ENTRY)&_ZN5S93C73v13Ev,
  (VTBL_ENTRY)&_ZN5S93C73v14Ev,
  (VTBL_ENTRY)&_ZN5S93C73v15Ev,
  (VTBL_ENTRY)&_ZN5S93C73v16Ev,
  (VTBL_ENTRY)&_ZN5S93C73v17Ev,
  (VTBL_ENTRY)&_ZN5S93C73v18Ev,
  (VTBL_ENTRY)&_ZN5S93C73v19Ev,
  (VTBL_ENTRY)&_ZN5S93C73v20Ev,
  (VTBL_ENTRY)&_ZN5S93C73v21Ev,
  (VTBL_ENTRY)&_ZN5S93C73v22Ev,
  (VTBL_ENTRY)&_ZN5S93C73v23Ev,
  (VTBL_ENTRY)&_ZN5S93C73v24Ev,
  (VTBL_ENTRY)&_ZN5S93C73v25Ev,
  (VTBL_ENTRY)&_ZN5S93C73v26Ev,
  (VTBL_ENTRY)&_ZN5S93C73v27Ev,
  (VTBL_ENTRY)&_ZN5S93C73v28Ev,
  (VTBL_ENTRY)&_ZN5S93C73v29Ev,
  (VTBL_ENTRY)&_ZN5S93C73v30Ev,
  (VTBL_ENTRY)&_ZN5S93C73v31Ev,
  (VTBL_ENTRY)&_ZN5S93C73v32Ev,
  (VTBL_ENTRY)&_ZN5S93C73v33Ev,
  (VTBL_ENTRY)&_ZN5S93C73v34Ev,
  (VTBL_ENTRY)&_ZN5S93C73v35Ev,
  (VTBL_ENTRY)&_ZN5S93C73v36Ev,
  (VTBL_ENTRY)&_ZN5S93C73v37Ev,
  (VTBL_ENTRY)&_ZN5S93C73v38Ev,
  (VTBL_ENTRY)&_ZN5S93C73v39Ev,
  (VTBL_ENTRY)&_ZN5S93C73v40Ev,
  (VTBL_ENTRY)&_ZN5S93C73v41Ev,
  (VTBL_ENTRY)&_ZN5S93C73v42Ev,
  (VTBL_ENTRY)&_ZN5S93C73v43Ev,
  (VTBL_ENTRY)&_ZN5S93C73v44Ev,
  (VTBL_ENTRY)&_ZN5S93C73v45Ev,
  (VTBL_ENTRY)&_ZN5S93C73v46Ev,
  (VTBL_ENTRY)&_ZN5S93C73v47Ev,
  (VTBL_ENTRY)&_ZN5S93C73v48Ev,
  (VTBL_ENTRY)&_ZN5S93C73v49Ev,
  (VTBL_ENTRY)&_ZN5S93C73v50Ev,
  (VTBL_ENTRY)&_ZN5S93C73v51Ev,
  (VTBL_ENTRY)&_ZN5S93C73v52Ev,
  (VTBL_ENTRY)&_ZN5S93C73v53Ev,
  (VTBL_ENTRY)&_ZN5S93C73v54Ev,
  (VTBL_ENTRY)&_ZN5S93C73v55Ev,
  (VTBL_ENTRY)&_ZN5S93C73v56Ev,
  (VTBL_ENTRY)&_ZN5S93C73v57Ev,
  (VTBL_ENTRY)&_ZN5S93C73v58Ev,
  (VTBL_ENTRY)&_ZN5S93C73v59Ev,
  (VTBL_ENTRY)&_ZN5S93C73v60Ev,
  (VTBL_ENTRY)&_ZN5S93C73v61Ev,
  (VTBL_ENTRY)&_ZN5S93C73v62Ev,
  (VTBL_ENTRY)&_ZN5S93C73v63Ev,
  (VTBL_ENTRY)&_ZN5S93C73v64Ev,
  (VTBL_ENTRY)&_ZN5S93C73v65Ev,
  (VTBL_ENTRY)&_ZN5S93C73v66Ev,
  (VTBL_ENTRY)&_ZN5S93C73v67Ev,
  (VTBL_ENTRY)&_ZN5S93C73v68Ev,
  (VTBL_ENTRY)&_ZN5S93C63v69Ev,
  (VTBL_ENTRY)&_ZN5S93C63v70Ev,
  (VTBL_ENTRY)&_ZN5S93C63v71Ev,
  (VTBL_ENTRY)&_ZN5S93C63v72Ev,
  (VTBL_ENTRY)&_ZN5S93C63v73Ev,
  (VTBL_ENTRY)&_ZN5S93C63v74Ev,
  (VTBL_ENTRY)&_ZN5S93C63v75Ev,
  (VTBL_ENTRY)&_ZN5S93C63v76Ev,
  (VTBL_ENTRY)&_ZN5S93C63v77Ev,
  (VTBL_ENTRY)&_ZN5S93C63v78Ev,
  (VTBL_ENTRY)&_ZN5S93C63v79Ev,
  (VTBL_ENTRY)&_ZN5S93C63v80Ev,
  (VTBL_ENTRY)&_ZN5S93C63v81Ev,
  (VTBL_ENTRY)&_ZN5S93C63v82Ev,
  (VTBL_ENTRY)&_ZN5S93C63v83Ev,
  (VTBL_ENTRY)&_ZN5S93C63v84Ev,
  (VTBL_ENTRY)&_ZN5S93C63v85Ev,
  (VTBL_ENTRY)&_ZN5S93C63v86Ev,
  (VTBL_ENTRY)&_ZN5S93C63v87Ev,
  (VTBL_ENTRY)&_ZN5S93C63v88Ev,
  (VTBL_ENTRY)&_ZN5S93C63v89Ev,
  (VTBL_ENTRY)&_ZN5S93C63v90Ev,
  (VTBL_ENTRY)&_ZN5S93C63v91Ev,
  (VTBL_ENTRY)&_ZN5S93C63v92Ev,
  (VTBL_ENTRY)&_ZN5S93C63v93Ev,
  (VTBL_ENTRY)&_ZN5S93C63v94Ev,
  (VTBL_ENTRY)&_ZN5S93C63v95Ev,
  (VTBL_ENTRY)&_ZN5S93C53v96Ev,
  (VTBL_ENTRY)&_ZN5S93C53v97Ev,
  (VTBL_ENTRY)&_ZN5S93C53v98Ev,
  (VTBL_ENTRY)&_ZN5S93C53v99Ev,
  (VTBL_ENTRY)&_ZN5S93C54v100Ev,
  (VTBL_ENTRY)&_ZN5S93C54v101Ev,
  (VTBL_ENTRY)&_ZN5S93C54v102Ev,
  (VTBL_ENTRY)&_ZN5S93C54v103Ev,
  (VTBL_ENTRY)&_ZN5S93C54v104Ev,
  (VTBL_ENTRY)&_ZN5S93C54v105Ev,
  (VTBL_ENTRY)&_ZN5S93C54v106Ev,
  (VTBL_ENTRY)&_ZN5S93C54v107Ev,
  (VTBL_ENTRY)&_ZN5S93C54v108Ev,
  (VTBL_ENTRY)&_ZN5S93C54v109Ev,
  (VTBL_ENTRY)&_ZN5S93C54v110Ev,
  (VTBL_ENTRY)&_ZN5S93C54v111Ev,
  (VTBL_ENTRY)&_ZN5S93C54v112Ev,
  (VTBL_ENTRY)&_ZN5S93C54v113Ev,
};
extern VTBL_ENTRY _ZTI5S93C5[];
extern  VTBL_ENTRY _ZTV5S93C5[];
Class_Descriptor cd_S93C5 = {  "S93C5", // class name
  bases_S93C5, 2,
  &(vtc_S93C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI5S93C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S93C5),113, //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  S93C4  : S93C5 {
  ::S165C20 s93c4f0;
  int s93c4f1[2];
  unsigned int s93c4f2:1;
  virtual  ~S93C4(); // _ZN5S93C4D1Ev
  virtual void  v114(); // _ZN5S93C44v114Ev
  virtual void  v115(); // _ZN5S93C44v115Ev
  virtual void  v116(); // _ZN5S93C44v116Ev
  virtual void  v117(); // _ZN5S93C44v117Ev
  virtual void  v118(); // _ZN5S93C44v118Ev
  virtual void  v119(); // _ZN5S93C44v119Ev
  virtual void  v120(); // _ZN5S93C44v120Ev
  S93C4(); // tgen
};
//SIG(-1 S93C4) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 FC16{ BC17{ BC8}} Fi[2] Fi:1}


 S93C4 ::~S93C4(){ note_dtor("S93C4", this);}
void  S93C4 ::v114(){vfunc_called(this, "_ZN5S93C44v114Ev");}
void  S93C4 ::v115(){vfunc_called(this, "_ZN5S93C44v115Ev");}
void  S93C4 ::v116(){vfunc_called(this, "_ZN5S93C44v116Ev");}
void  S93C4 ::v117(){vfunc_called(this, "_ZN5S93C44v117Ev");}
void  S93C4 ::v118(){vfunc_called(this, "_ZN5S93C44v118Ev");}
void  S93C4 ::v119(){vfunc_called(this, "_ZN5S93C44v119Ev");}
void  S93C4 ::v120(){vfunc_called(this, "_ZN5S93C44v120Ev");}
S93C4 ::S93C4(){ note_ctor("S93C4", this);} // tgen

static void Test_S93C4()
{
  extern Class_Descriptor cd_S93C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,56)];
    init_test(&cd_S93C4, buf);
    S93C4 *dp, &lv = *(dp=new (buf) S93C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,220), "sizeof(S93C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S93C4)");
    check_base_class_offset(lv, (S93C7*)(S93C6*)(S93C5*), 0, "S93C4");
    check_base_class_offset(lv, (S93C6*)(S93C5*), 0, "S93C4");
    check_base_class_offset(lv, (S93C5*), 0, "S93C4");
    check_field_offset(lv, s93c4f0, ABISELECT(256,196), "S93C4.s93c4f0");
    check_field_offset(lv, s93c4f1, ABISELECT(272,208), "S93C4.s93c4f1");
    set_bf_and_test(lv, s93c4f2, ABISELECT(280,216), 0, 1, 1, "S93C4");
    test_class_info(&lv, &cd_S93C4);
    dp->~S93C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS93C4(Test_S93C4, "S93C4", ABISELECT(288,220));

#else // __cplusplus

extern void _ZN5S93C4C1Ev();
extern void _ZN5S93C4D1Ev();
Name_Map name_map_S93C4[] = {
  NSPAIR(_ZN5S93C4C1Ev),
  NSPAIR(_ZN5S93C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S93C7;
extern VTBL_ENTRY _ZTI5S93C7[];
extern  VTBL_ENTRY _ZTV5S93C7[];
extern Class_Descriptor cd_S93C6;
extern VTBL_ENTRY _ZTI5S93C6[];
extern  VTBL_ENTRY _ZTV5S93C6[];
extern Class_Descriptor cd_S93C5;
extern VTBL_ENTRY _ZTI5S93C5[];
extern  VTBL_ENTRY _ZTV5S93C5[];
static Base_Class bases_S93C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S93C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S93C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S93C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S93C4[];
extern void _ZN5S93C4D1Ev();
extern void _ZN5S93C4D0Ev();
extern void _ZN5S93C72v5Ev();
extern void _ZN5S93C72v6Ev();
extern void _ZN5S93C72v7Ev();
extern void _ZN5S93C72v8Ev();
extern void _ZN5S93C72v9Ev();
extern void _ZN5S93C73v10Ev();
extern void _ZN5S93C73v11Ev();
extern void _ZN5S93C73v12Ev();
extern void _ZN5S93C73v13Ev();
extern void _ZN5S93C73v14Ev();
extern void _ZN5S93C73v15Ev();
extern void _ZN5S93C73v16Ev();
extern void _ZN5S93C73v17Ev();
extern void _ZN5S93C73v18Ev();
extern void _ZN5S93C73v19Ev();
extern void _ZN5S93C73v20Ev();
extern void _ZN5S93C73v21Ev();
extern void _ZN5S93C73v22Ev();
extern void _ZN5S93C73v23Ev();
extern void _ZN5S93C73v24Ev();
extern void _ZN5S93C73v25Ev();
extern void _ZN5S93C73v26Ev();
extern void _ZN5S93C73v27Ev();
extern void _ZN5S93C73v28Ev();
extern void _ZN5S93C73v29Ev();
extern void _ZN5S93C73v30Ev();
extern void _ZN5S93C73v31Ev();
extern void _ZN5S93C73v32Ev();
extern void _ZN5S93C73v33Ev();
extern void _ZN5S93C73v34Ev();
extern void _ZN5S93C73v35Ev();
extern void _ZN5S93C73v36Ev();
extern void _ZN5S93C73v37Ev();
extern void _ZN5S93C73v38Ev();
extern void _ZN5S93C73v39Ev();
extern void _ZN5S93C73v40Ev();
extern void _ZN5S93C73v41Ev();
extern void _ZN5S93C73v42Ev();
extern void _ZN5S93C73v43Ev();
extern void _ZN5S93C73v44Ev();
extern void _ZN5S93C73v45Ev();
extern void _ZN5S93C73v46Ev();
extern void _ZN5S93C73v47Ev();
extern void _ZN5S93C73v48Ev();
extern void _ZN5S93C73v49Ev();
extern void _ZN5S93C73v50Ev();
extern void _ZN5S93C73v51Ev();
extern void _ZN5S93C73v52Ev();
extern void _ZN5S93C73v53Ev();
extern void _ZN5S93C73v54Ev();
extern void _ZN5S93C73v55Ev();
extern void _ZN5S93C73v56Ev();
extern void _ZN5S93C73v57Ev();
extern void _ZN5S93C73v58Ev();
extern void _ZN5S93C73v59Ev();
extern void _ZN5S93C73v60Ev();
extern void _ZN5S93C73v61Ev();
extern void _ZN5S93C73v62Ev();
extern void _ZN5S93C73v63Ev();
extern void _ZN5S93C73v64Ev();
extern void _ZN5S93C73v65Ev();
extern void _ZN5S93C73v66Ev();
extern void _ZN5S93C73v67Ev();
extern void _ZN5S93C73v68Ev();
extern void _ZN5S93C63v69Ev();
extern void _ZN5S93C63v70Ev();
extern void _ZN5S93C63v71Ev();
extern void _ZN5S93C63v72Ev();
extern void _ZN5S93C63v73Ev();
extern void _ZN5S93C63v74Ev();
extern void _ZN5S93C63v75Ev();
extern void _ZN5S93C63v76Ev();
extern void _ZN5S93C63v77Ev();
extern void _ZN5S93C63v78Ev();
extern void _ZN5S93C63v79Ev();
extern void _ZN5S93C63v80Ev();
extern void _ZN5S93C63v81Ev();
extern void _ZN5S93C63v82Ev();
extern void _ZN5S93C63v83Ev();
extern void _ZN5S93C63v84Ev();
extern void _ZN5S93C63v85Ev();
extern void _ZN5S93C63v86Ev();
extern void _ZN5S93C63v87Ev();
extern void _ZN5S93C63v88Ev();
extern void _ZN5S93C63v89Ev();
extern void _ZN5S93C63v90Ev();
extern void _ZN5S93C63v91Ev();
extern void _ZN5S93C63v92Ev();
extern void _ZN5S93C63v93Ev();
extern void _ZN5S93C63v94Ev();
extern void _ZN5S93C63v95Ev();
extern void _ZN5S93C53v96Ev();
extern void _ZN5S93C53v97Ev();
extern void _ZN5S93C53v98Ev();
extern void _ZN5S93C53v99Ev();
extern void _ZN5S93C54v100Ev();
extern void _ZN5S93C54v101Ev();
extern void _ZN5S93C54v102Ev();
extern void _ZN5S93C54v103Ev();
extern void _ZN5S93C54v104Ev();
extern void _ZN5S93C54v105Ev();
extern void _ZN5S93C54v106Ev();
extern void _ZN5S93C54v107Ev();
extern void _ZN5S93C54v108Ev();
extern void _ZN5S93C54v109Ev();
extern void _ZN5S93C54v110Ev();
extern void _ZN5S93C54v111Ev();
extern void _ZN5S93C54v112Ev();
extern void _ZN5S93C54v113Ev();
extern void _ZN5S93C44v114Ev();
extern void _ZN5S93C44v115Ev();
extern void _ZN5S93C44v116Ev();
extern void _ZN5S93C44v117Ev();
extern void _ZN5S93C44v118Ev();
extern void _ZN5S93C44v119Ev();
extern void _ZN5S93C44v120Ev();
static  VTBL_ENTRY vtc_S93C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S93C4[0]),
  (VTBL_ENTRY)&_ZN5S93C4D1Ev,
  (VTBL_ENTRY)&_ZN5S93C4D0Ev,
  (VTBL_ENTRY)&_ZN5S93C72v5Ev,
  (VTBL_ENTRY)&_ZN5S93C72v6Ev,
  (VTBL_ENTRY)&_ZN5S93C72v7Ev,
  (VTBL_ENTRY)&_ZN5S93C72v8Ev,
  (VTBL_ENTRY)&_ZN5S93C72v9Ev,
  (VTBL_ENTRY)&_ZN5S93C73v10Ev,
  (VTBL_ENTRY)&_ZN5S93C73v11Ev,
  (VTBL_ENTRY)&_ZN5S93C73v12Ev,
  (VTBL_ENTRY)&_ZN5S93C73v13Ev,
  (VTBL_ENTRY)&_ZN5S93C73v14Ev,
  (VTBL_ENTRY)&_ZN5S93C73v15Ev,
  (VTBL_ENTRY)&_ZN5S93C73v16Ev,
  (VTBL_ENTRY)&_ZN5S93C73v17Ev,
  (VTBL_ENTRY)&_ZN5S93C73v18Ev,
  (VTBL_ENTRY)&_ZN5S93C73v19Ev,
  (VTBL_ENTRY)&_ZN5S93C73v20Ev,
  (VTBL_ENTRY)&_ZN5S93C73v21Ev,
  (VTBL_ENTRY)&_ZN5S93C73v22Ev,
  (VTBL_ENTRY)&_ZN5S93C73v23Ev,
  (VTBL_ENTRY)&_ZN5S93C73v24Ev,
  (VTBL_ENTRY)&_ZN5S93C73v25Ev,
  (VTBL_ENTRY)&_ZN5S93C73v26Ev,
  (VTBL_ENTRY)&_ZN5S93C73v27Ev,
  (VTBL_ENTRY)&_ZN5S93C73v28Ev,
  (VTBL_ENTRY)&_ZN5S93C73v29Ev,
  (VTBL_ENTRY)&_ZN5S93C73v30Ev,
  (VTBL_ENTRY)&_ZN5S93C73v31Ev,
  (VTBL_ENTRY)&_ZN5S93C73v32Ev,
  (VTBL_ENTRY)&_ZN5S93C73v33Ev,
  (VTBL_ENTRY)&_ZN5S93C73v34Ev,
  (VTBL_ENTRY)&_ZN5S93C73v35Ev,
  (VTBL_ENTRY)&_ZN5S93C73v36Ev,
  (VTBL_ENTRY)&_ZN5S93C73v37Ev,
  (VTBL_ENTRY)&_ZN5S93C73v38Ev,
  (VTBL_ENTRY)&_ZN5S93C73v39Ev,
  (VTBL_ENTRY)&_ZN5S93C73v40Ev,
  (VTBL_ENTRY)&_ZN5S93C73v41Ev,
  (VTBL_ENTRY)&_ZN5S93C73v42Ev,
  (VTBL_ENTRY)&_ZN5S93C73v43Ev,
  (VTBL_ENTRY)&_ZN5S93C73v44Ev,
  (VTBL_ENTRY)&_ZN5S93C73v45Ev,
  (VTBL_ENTRY)&_ZN5S93C73v46Ev,
  (VTBL_ENTRY)&_ZN5S93C73v47Ev,
  (VTBL_ENTRY)&_ZN5S93C73v48Ev,
  (VTBL_ENTRY)&_ZN5S93C73v49Ev,
  (VTBL_ENTRY)&_ZN5S93C73v50Ev,
  (VTBL_ENTRY)&_ZN5S93C73v51Ev,
  (VTBL_ENTRY)&_ZN5S93C73v52Ev,
  (VTBL_ENTRY)&_ZN5S93C73v53Ev,
  (VTBL_ENTRY)&_ZN5S93C73v54Ev,
  (VTBL_ENTRY)&_ZN5S93C73v55Ev,
  (VTBL_ENTRY)&_ZN5S93C73v56Ev,
  (VTBL_ENTRY)&_ZN5S93C73v57Ev,
  (VTBL_ENTRY)&_ZN5S93C73v58Ev,
  (VTBL_ENTRY)&_ZN5S93C73v59Ev,
  (VTBL_ENTRY)&_ZN5S93C73v60Ev,
  (VTBL_ENTRY)&_ZN5S93C73v61Ev,
  (VTBL_ENTRY)&_ZN5S93C73v62Ev,
  (VTBL_ENTRY)&_ZN5S93C73v63Ev,
  (VTBL_ENTRY)&_ZN5S93C73v64Ev,
  (VTBL_ENTRY)&_ZN5S93C73v65Ev,
  (VTBL_ENTRY)&_ZN5S93C73v66Ev,
  (VTBL_ENTRY)&_ZN5S93C73v67Ev,
  (VTBL_ENTRY)&_ZN5S93C73v68Ev,
  (VTBL_ENTRY)&_ZN5S93C63v69Ev,
  (VTBL_ENTRY)&_ZN5S93C63v70Ev,
  (VTBL_ENTRY)&_ZN5S93C63v71Ev,
  (VTBL_ENTRY)&_ZN5S93C63v72Ev,
  (VTBL_ENTRY)&_ZN5S93C63v73Ev,
  (VTBL_ENTRY)&_ZN5S93C63v74Ev,
  (VTBL_ENTRY)&_ZN5S93C63v75Ev,
  (VTBL_ENTRY)&_ZN5S93C63v76Ev,
  (VTBL_ENTRY)&_ZN5S93C63v77Ev,
  (VTBL_ENTRY)&_ZN5S93C63v78Ev,
  (VTBL_ENTRY)&_ZN5S93C63v79Ev,
  (VTBL_ENTRY)&_ZN5S93C63v80Ev,
  (VTBL_ENTRY)&_ZN5S93C63v81Ev,
  (VTBL_ENTRY)&_ZN5S93C63v82Ev,
  (VTBL_ENTRY)&_ZN5S93C63v83Ev,
  (VTBL_ENTRY)&_ZN5S93C63v84Ev,
  (VTBL_ENTRY)&_ZN5S93C63v85Ev,
  (VTBL_ENTRY)&_ZN5S93C63v86Ev,
  (VTBL_ENTRY)&_ZN5S93C63v87Ev,
  (VTBL_ENTRY)&_ZN5S93C63v88Ev,
  (VTBL_ENTRY)&_ZN5S93C63v89Ev,
  (VTBL_ENTRY)&_ZN5S93C63v90Ev,
  (VTBL_ENTRY)&_ZN5S93C63v91Ev,
  (VTBL_ENTRY)&_ZN5S93C63v92Ev,
  (VTBL_ENTRY)&_ZN5S93C63v93Ev,
  (VTBL_ENTRY)&_ZN5S93C63v94Ev,
  (VTBL_ENTRY)&_ZN5S93C63v95Ev,
  (VTBL_ENTRY)&_ZN5S93C53v96Ev,
  (VTBL_ENTRY)&_ZN5S93C53v97Ev,
  (VTBL_ENTRY)&_ZN5S93C53v98Ev,
  (VTBL_ENTRY)&_ZN5S93C53v99Ev,
  (VTBL_ENTRY)&_ZN5S93C54v100Ev,
  (VTBL_ENTRY)&_ZN5S93C54v101Ev,
  (VTBL_ENTRY)&_ZN5S93C54v102Ev,
  (VTBL_ENTRY)&_ZN5S93C54v103Ev,
  (VTBL_ENTRY)&_ZN5S93C54v104Ev,
  (VTBL_ENTRY)&_ZN5S93C54v105Ev,
  (VTBL_ENTRY)&_ZN5S93C54v106Ev,
  (VTBL_ENTRY)&_ZN5S93C54v107Ev,
  (VTBL_ENTRY)&_ZN5S93C54v108Ev,
  (VTBL_ENTRY)&_ZN5S93C54v109Ev,
  (VTBL_ENTRY)&_ZN5S93C54v110Ev,
  (VTBL_ENTRY)&_ZN5S93C54v111Ev,
  (VTBL_ENTRY)&_ZN5S93C54v112Ev,
  (VTBL_ENTRY)&_ZN5S93C54v113Ev,
  (VTBL_ENTRY)&_ZN5S93C44v114Ev,
  (VTBL_ENTRY)&_ZN5S93C44v115Ev,
  (VTBL_ENTRY)&_ZN5S93C44v116Ev,
  (VTBL_ENTRY)&_ZN5S93C44v117Ev,
  (VTBL_ENTRY)&_ZN5S93C44v118Ev,
  (VTBL_ENTRY)&_ZN5S93C44v119Ev,
  (VTBL_ENTRY)&_ZN5S93C44v120Ev,
};
extern VTBL_ENTRY _ZTI5S93C4[];
extern  VTBL_ENTRY _ZTV5S93C4[];
Class_Descriptor cd_S93C4 = {  "S93C4", // class name
  bases_S93C4, 3,
  &(vtc_S93C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,220), // object size
  NSPAIRA(_ZTI5S93C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S93C4),120, //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  S93C3  : S93C4 {
  int s93c3f0;
  ::S165C20 s93c3f1;
  int s93c3f2;
  virtual  ~S93C3(); // _ZN5S93C3D1Ev
  virtual void  v121(); // _ZN5S93C34v121Ev
  virtual void  v122(); // _ZN5S93C34v122Ev
  virtual void  v123(); // _ZN5S93C34v123Ev
  virtual void  v124(); // _ZN5S93C34v124Ev
  virtual void  v125(); // _ZN5S93C34v125Ev
  virtual void  v126(); // _ZN5S93C34v126Ev
  S93C3(); // tgen
};
//SIG(-1 S93C3) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v93 v94 v95 v96 v97 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC15{ BC16{ BC9}} Fi:1} vd v116 v117 v118 v119 v120 v121 v122 FC17{ BC18{ BC9}} Fi[2] Fi:1} vd v1 v2 v3 v4 v5 v6 Fi FC17 Fi}


 S93C3 ::~S93C3(){ note_dtor("S93C3", this);}
void  S93C3 ::v121(){vfunc_called(this, "_ZN5S93C34v121Ev");}
void  S93C3 ::v122(){vfunc_called(this, "_ZN5S93C34v122Ev");}
void  S93C3 ::v123(){vfunc_called(this, "_ZN5S93C34v123Ev");}
void  S93C3 ::v124(){vfunc_called(this, "_ZN5S93C34v124Ev");}
void  S93C3 ::v125(){vfunc_called(this, "_ZN5S93C34v125Ev");}
void  S93C3 ::v126(){vfunc_called(this, "_ZN5S93C34v126Ev");}
S93C3 ::S93C3(){ note_ctor("S93C3", this);} // tgen

static void Test_S93C3()
{
  extern Class_Descriptor cd_S93C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,61)];
    init_test(&cd_S93C3, buf);
    S93C3 *dp, &lv = *(dp=new (buf) S93C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,240), "sizeof(S93C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S93C3)");
    check_base_class_offset(lv, (S93C7*)(S93C6*)(S93C5*)(S93C4*), 0, "S93C3");
    check_base_class_offset(lv, (S93C6*)(S93C5*)(S93C4*), 0, "S93C3");
    check_base_class_offset(lv, (S93C5*)(S93C4*), 0, "S93C3");
    check_base_class_offset(lv, (S93C4*), 0, "S93C3");
    check_field_offset(lv, s93c3f0, ABISELECT(284,220), "S93C3.s93c3f0");
    check_field_offset(lv, s93c3f1, ABISELECT(288,224), "S93C3.s93c3f1");
    check_field_offset(lv, s93c3f2, ABISELECT(304,236), "S93C3.s93c3f2");
    test_class_info(&lv, &cd_S93C3);
    dp->~S93C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS93C3(Test_S93C3, "S93C3", ABISELECT(312,240));

#else // __cplusplus

extern void _ZN5S93C3C1Ev();
extern void _ZN5S93C3D1Ev();
Name_Map name_map_S93C3[] = {
  NSPAIR(_ZN5S93C3C1Ev),
  NSPAIR(_ZN5S93C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S93C7;
extern VTBL_ENTRY _ZTI5S93C7[];
extern  VTBL_ENTRY _ZTV5S93C7[];
extern Class_Descriptor cd_S93C6;
extern VTBL_ENTRY _ZTI5S93C6[];
extern  VTBL_ENTRY _ZTV5S93C6[];
extern Class_Descriptor cd_S93C5;
extern VTBL_ENTRY _ZTI5S93C5[];
extern  VTBL_ENTRY _ZTV5S93C5[];
extern Class_Descriptor cd_S93C4;
extern VTBL_ENTRY _ZTI5S93C4[];
extern  VTBL_ENTRY _ZTV5S93C4[];
static Base_Class bases_S93C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S93C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S93C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S93C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S93C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S93C3[];
extern void _ZN5S93C3D1Ev();
extern void _ZN5S93C3D0Ev();
extern void _ZN5S93C72v5Ev();
extern void _ZN5S93C72v6Ev();
extern void _ZN5S93C72v7Ev();
extern void _ZN5S93C72v8Ev();
extern void _ZN5S93C72v9Ev();
extern void _ZN5S93C73v10Ev();
extern void _ZN5S93C73v11Ev();
extern void _ZN5S93C73v12Ev();
extern void _ZN5S93C73v13Ev();
extern void _ZN5S93C73v14Ev();
extern void _ZN5S93C73v15Ev();
extern void _ZN5S93C73v16Ev();
extern void _ZN5S93C73v17Ev();
extern void _ZN5S93C73v18Ev();
extern void _ZN5S93C73v19Ev();
extern void _ZN5S93C73v20Ev();
extern void _ZN5S93C73v21Ev();
extern void _ZN5S93C73v22Ev();
extern void _ZN5S93C73v23Ev();
extern void _ZN5S93C73v24Ev();
extern void _ZN5S93C73v25Ev();
extern void _ZN5S93C73v26Ev();
extern void _ZN5S93C73v27Ev();
extern void _ZN5S93C73v28Ev();
extern void _ZN5S93C73v29Ev();
extern void _ZN5S93C73v30Ev();
extern void _ZN5S93C73v31Ev();
extern void _ZN5S93C73v32Ev();
extern void _ZN5S93C73v33Ev();
extern void _ZN5S93C73v34Ev();
extern void _ZN5S93C73v35Ev();
extern void _ZN5S93C73v36Ev();
extern void _ZN5S93C73v37Ev();
extern void _ZN5S93C73v38Ev();
extern void _ZN5S93C73v39Ev();
extern void _ZN5S93C73v40Ev();
extern void _ZN5S93C73v41Ev();
extern void _ZN5S93C73v42Ev();
extern void _ZN5S93C73v43Ev();
extern void _ZN5S93C73v44Ev();
extern void _ZN5S93C73v45Ev();
extern void _ZN5S93C73v46Ev();
extern void _ZN5S93C73v47Ev();
extern void _ZN5S93C73v48Ev();
extern void _ZN5S93C73v49Ev();
extern void _ZN5S93C73v50Ev();
extern void _ZN5S93C73v51Ev();
extern void _ZN5S93C73v52Ev();
extern void _ZN5S93C73v53Ev();
extern void _ZN5S93C73v54Ev();
extern void _ZN5S93C73v55Ev();
extern void _ZN5S93C73v56Ev();
extern void _ZN5S93C73v57Ev();
extern void _ZN5S93C73v58Ev();
extern void _ZN5S93C73v59Ev();
extern void _ZN5S93C73v60Ev();
extern void _ZN5S93C73v61Ev();
extern void _ZN5S93C73v62Ev();
extern void _ZN5S93C73v63Ev();
extern void _ZN5S93C73v64Ev();
extern void _ZN5S93C73v65Ev();
extern void _ZN5S93C73v66Ev();
extern void _ZN5S93C73v67Ev();
extern void _ZN5S93C73v68Ev();
extern void _ZN5S93C63v69Ev();
extern void _ZN5S93C63v70Ev();
extern void _ZN5S93C63v71Ev();
extern void _ZN5S93C63v72Ev();
extern void _ZN5S93C63v73Ev();
extern void _ZN5S93C63v74Ev();
extern void _ZN5S93C63v75Ev();
extern void _ZN5S93C63v76Ev();
extern void _ZN5S93C63v77Ev();
extern void _ZN5S93C63v78Ev();
extern void _ZN5S93C63v79Ev();
extern void _ZN5S93C63v80Ev();
extern void _ZN5S93C63v81Ev();
extern void _ZN5S93C63v82Ev();
extern void _ZN5S93C63v83Ev();
extern void _ZN5S93C63v84Ev();
extern void _ZN5S93C63v85Ev();
extern void _ZN5S93C63v86Ev();
extern void _ZN5S93C63v87Ev();
extern void _ZN5S93C63v88Ev();
extern void _ZN5S93C63v89Ev();
extern void _ZN5S93C63v90Ev();
extern void _ZN5S93C63v91Ev();
extern void _ZN5S93C63v92Ev();
extern void _ZN5S93C63v93Ev();
extern void _ZN5S93C63v94Ev();
extern void _ZN5S93C63v95Ev();
extern void _ZN5S93C53v96Ev();
extern void _ZN5S93C53v97Ev();
extern void _ZN5S93C53v98Ev();
extern void _ZN5S93C53v99Ev();
extern void _ZN5S93C54v100Ev();
extern void _ZN5S93C54v101Ev();
extern void _ZN5S93C54v102Ev();
extern void _ZN5S93C54v103Ev();
extern void _ZN5S93C54v104Ev();
extern void _ZN5S93C54v105Ev();
extern void _ZN5S93C54v106Ev();
extern void _ZN5S93C54v107Ev();
extern void _ZN5S93C54v108Ev();
extern void _ZN5S93C54v109Ev();
extern void _ZN5S93C54v110Ev();
extern void _ZN5S93C54v111Ev();
extern void _ZN5S93C54v112Ev();
extern void _ZN5S93C54v113Ev();
extern void _ZN5S93C44v114Ev();
extern void _ZN5S93C44v115Ev();
extern void _ZN5S93C44v116Ev();
extern void _ZN5S93C44v117Ev();
extern void _ZN5S93C44v118Ev();
extern void _ZN5S93C44v119Ev();
extern void _ZN5S93C44v120Ev();
extern void _ZN5S93C34v121Ev();
extern void _ZN5S93C34v122Ev();
extern void _ZN5S93C34v123Ev();
extern void _ZN5S93C34v124Ev();
extern void _ZN5S93C34v125Ev();
extern void _ZN5S93C34v126Ev();
static  VTBL_ENTRY vtc_S93C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S93C3[0]),
  (VTBL_ENTRY)&_ZN5S93C3D1Ev,
  (VTBL_ENTRY)&_ZN5S93C3D0Ev,
  (VTBL_ENTRY)&_ZN5S93C72v5Ev,
  (VTBL_ENTRY)&_ZN5S93C72v6Ev,
  (VTBL_ENTRY)&_ZN5S93C72v7Ev,
  (VTBL_ENTRY)&_ZN5S93C72v8Ev,
  (VTBL_ENTRY)&_ZN5S93C72v9Ev,
  (VTBL_ENTRY)&_ZN5S93C73v10Ev,
  (VTBL_ENTRY)&_ZN5S93C73v11Ev,
  (VTBL_ENTRY)&_ZN5S93C73v12Ev,
  (VTBL_ENTRY)&_ZN5S93C73v13Ev,
  (VTBL_ENTRY)&_ZN5S93C73v14Ev,
  (VTBL_ENTRY)&_ZN5S93C73v15Ev,
  (VTBL_ENTRY)&_ZN5S93C73v16Ev,
  (VTBL_ENTRY)&_ZN5S93C73v17Ev,
  (VTBL_ENTRY)&_ZN5S93C73v18Ev,
  (VTBL_ENTRY)&_ZN5S93C73v19Ev,
  (VTBL_ENTRY)&_ZN5S93C73v20Ev,
  (VTBL_ENTRY)&_ZN5S93C73v21Ev,
  (VTBL_ENTRY)&_ZN5S93C73v22Ev,
  (VTBL_ENTRY)&_ZN5S93C73v23Ev,
  (VTBL_ENTRY)&_ZN5S93C73v24Ev,
  (VTBL_ENTRY)&_ZN5S93C73v25Ev,
  (VTBL_ENTRY)&_ZN5S93C73v26Ev,
  (VTBL_ENTRY)&_ZN5S93C73v27Ev,
  (VTBL_ENTRY)&_ZN5S93C73v28Ev,
  (VTBL_ENTRY)&_ZN5S93C73v29Ev,
  (VTBL_ENTRY)&_ZN5S93C73v30Ev,
  (VTBL_ENTRY)&_ZN5S93C73v31Ev,
  (VTBL_ENTRY)&_ZN5S93C73v32Ev,
  (VTBL_ENTRY)&_ZN5S93C73v33Ev,
  (VTBL_ENTRY)&_ZN5S93C73v34Ev,
  (VTBL_ENTRY)&_ZN5S93C73v35Ev,
  (VTBL_ENTRY)&_ZN5S93C73v36Ev,
  (VTBL_ENTRY)&_ZN5S93C73v37Ev,
  (VTBL_ENTRY)&_ZN5S93C73v38Ev,
  (VTBL_ENTRY)&_ZN5S93C73v39Ev,
  (VTBL_ENTRY)&_ZN5S93C73v40Ev,
  (VTBL_ENTRY)&_ZN5S93C73v41Ev,
  (VTBL_ENTRY)&_ZN5S93C73v42Ev,
  (VTBL_ENTRY)&_ZN5S93C73v43Ev,
  (VTBL_ENTRY)&_ZN5S93C73v44Ev,
  (VTBL_ENTRY)&_ZN5S93C73v45Ev,
  (VTBL_ENTRY)&_ZN5S93C73v46Ev,
  (VTBL_ENTRY)&_ZN5S93C73v47Ev,
  (VTBL_ENTRY)&_ZN5S93C73v48Ev,
  (VTBL_ENTRY)&_ZN5S93C73v49Ev,
  (VTBL_ENTRY)&_ZN5S93C73v50Ev,
  (VTBL_ENTRY)&_ZN5S93C73v51Ev,
  (VTBL_ENTRY)&_ZN5S93C73v52Ev,
  (VTBL_ENTRY)&_ZN5S93C73v53Ev,
  (VTBL_ENTRY)&_ZN5S93C73v54Ev,
  (VTBL_ENTRY)&_ZN5S93C73v55Ev,
  (VTBL_ENTRY)&_ZN5S93C73v56Ev,
  (VTBL_ENTRY)&_ZN5S93C73v57Ev,
  (VTBL_ENTRY)&_ZN5S93C73v58Ev,
  (VTBL_ENTRY)&_ZN5S93C73v59Ev,
  (VTBL_ENTRY)&_ZN5S93C73v60Ev,
  (VTBL_ENTRY)&_ZN5S93C73v61Ev,
  (VTBL_ENTRY)&_ZN5S93C73v62Ev,
  (VTBL_ENTRY)&_ZN5S93C73v63Ev,
  (VTBL_ENTRY)&_ZN5S93C73v64Ev,
  (VTBL_ENTRY)&_ZN5S93C73v65Ev,
  (VTBL_ENTRY)&_ZN5S93C73v66Ev,
  (VTBL_ENTRY)&_ZN5S93C73v67Ev,
  (VTBL_ENTRY)&_ZN5S93C73v68Ev,
  (VTBL_ENTRY)&_ZN5S93C63v69Ev,
  (VTBL_ENTRY)&_ZN5S93C63v70Ev,
  (VTBL_ENTRY)&_ZN5S93C63v71Ev,
  (VTBL_ENTRY)&_ZN5S93C63v72Ev,
  (VTBL_ENTRY)&_ZN5S93C63v73Ev,
  (VTBL_ENTRY)&_ZN5S93C63v74Ev,
  (VTBL_ENTRY)&_ZN5S93C63v75Ev,
  (VTBL_ENTRY)&_ZN5S93C63v76Ev,
  (VTBL_ENTRY)&_ZN5S93C63v77Ev,
  (VTBL_ENTRY)&_ZN5S93C63v78Ev,
  (VTBL_ENTRY)&_ZN5S93C63v79Ev,
  (VTBL_ENTRY)&_ZN5S93C63v80Ev,
  (VTBL_ENTRY)&_ZN5S93C63v81Ev,
  (VTBL_ENTRY)&_ZN5S93C63v82Ev,
  (VTBL_ENTRY)&_ZN5S93C63v83Ev,
  (VTBL_ENTRY)&_ZN5S93C63v84Ev,
  (VTBL_ENTRY)&_ZN5S93C63v85Ev,
  (VTBL_ENTRY)&_ZN5S93C63v86Ev,
  (VTBL_ENTRY)&_ZN5S93C63v87Ev,
  (VTBL_ENTRY)&_ZN5S93C63v88Ev,
  (VTBL_ENTRY)&_ZN5S93C63v89Ev,
  (VTBL_ENTRY)&_ZN5S93C63v90Ev,
  (VTBL_ENTRY)&_ZN5S93C63v91Ev,
  (VTBL_ENTRY)&_ZN5S93C63v92Ev,
  (VTBL_ENTRY)&_ZN5S93C63v93Ev,
  (VTBL_ENTRY)&_ZN5S93C63v94Ev,
  (VTBL_ENTRY)&_ZN5S93C63v95Ev,
  (VTBL_ENTRY)&_ZN5S93C53v96Ev,
  (VTBL_ENTRY)&_ZN5S93C53v97Ev,
  (VTBL_ENTRY)&_ZN5S93C53v98Ev,
  (VTBL_ENTRY)&_ZN5S93C53v99Ev,
  (VTBL_ENTRY)&_ZN5S93C54v100Ev,
  (VTBL_ENTRY)&_ZN5S93C54v101Ev,
  (VTBL_ENTRY)&_ZN5S93C54v102Ev,
  (VTBL_ENTRY)&_ZN5S93C54v103Ev,
  (VTBL_ENTRY)&_ZN5S93C54v104Ev,
  (VTBL_ENTRY)&_ZN5S93C54v105Ev,
  (VTBL_ENTRY)&_ZN5S93C54v106Ev,
  (VTBL_ENTRY)&_ZN5S93C54v107Ev,
  (VTBL_ENTRY)&_ZN5S93C54v108Ev,
  (VTBL_ENTRY)&_ZN5S93C54v109Ev,
  (VTBL_ENTRY)&_ZN5S93C54v110Ev,
  (VTBL_ENTRY)&_ZN5S93C54v111Ev,
  (VTBL_ENTRY)&_ZN5S93C54v112Ev,
  (VTBL_ENTRY)&_ZN5S93C54v113Ev,
  (VTBL_ENTRY)&_ZN5S93C44v114Ev,
  (VTBL_ENTRY)&_ZN5S93C44v115Ev,
  (VTBL_ENTRY)&_ZN5S93C44v116Ev,
  (VTBL_ENTRY)&_ZN5S93C44v117Ev,
  (VTBL_ENTRY)&_ZN5S93C44v118Ev,
  (VTBL_ENTRY)&_ZN5S93C44v119Ev,
  (VTBL_ENTRY)&_ZN5S93C44v120Ev,
  (VTBL_ENTRY)&_ZN5S93C34v121Ev,
  (VTBL_ENTRY)&_ZN5S93C34v122Ev,
  (VTBL_ENTRY)&_ZN5S93C34v123Ev,
  (VTBL_ENTRY)&_ZN5S93C34v124Ev,
  (VTBL_ENTRY)&_ZN5S93C34v125Ev,
  (VTBL_ENTRY)&_ZN5S93C34v126Ev,
};
extern VTBL_ENTRY _ZTI5S93C3[];
extern  VTBL_ENTRY _ZTV5S93C3[];
Class_Descriptor cd_S93C3 = {  "S93C3", // class name
  bases_S93C3, 4,
  &(vtc_S93C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,240), // object size
  NSPAIRA(_ZTI5S93C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S93C3),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S93C2  : S93C3 {
  unsigned int s93c2f0:1;
  unsigned int s93c2f1:1;
  int s93c2f2[3];
  unsigned int s93c2f3:1;
  char s93c2f4;
  int s93c2f5;
  void *s93c2f6;
  virtual  ~S93C2(); // _ZN5S93C2D1Ev
  virtual void  v127(); // _ZN5S93C24v127Ev
  virtual void  v128(); // _ZN5S93C24v128Ev
  virtual void  v129(); // _ZN5S93C24v129Ev
  virtual void  v130(); // _ZN5S93C24v130Ev
  virtual void  v131(); // _ZN5S93C24v131Ev
  virtual void  v132(); // _ZN5S93C24v132Ev
  virtual void  v133(); // _ZN5S93C24v133Ev
  virtual void  v134(); // _ZN5S93C24v134Ev
  virtual void  v135(); // _ZN5S93C24v135Ev
  S93C2(); // tgen
};
//SIG(-1 S93C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fp FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC7 FC11{ BC12{ BC10}} FC13{ m FC14{ m Fi[4]} FC15{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 FC16{ BC17{ BC10}} Fi:1} vd v119 v120 v121 v122 v123 v124 v125 FC18{ BC19{ BC10}} Fi[2] Fi:1} vd v126 v127 v128 v129 v130 v131 Fi FC18 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi:1 Fi:1 Fi[3] Fi:1 Fc Fi Fp}


 S93C2 ::~S93C2(){ note_dtor("S93C2", this);}
void  S93C2 ::v127(){vfunc_called(this, "_ZN5S93C24v127Ev");}
void  S93C2 ::v128(){vfunc_called(this, "_ZN5S93C24v128Ev");}
void  S93C2 ::v129(){vfunc_called(this, "_ZN5S93C24v129Ev");}
void  S93C2 ::v130(){vfunc_called(this, "_ZN5S93C24v130Ev");}
void  S93C2 ::v131(){vfunc_called(this, "_ZN5S93C24v131Ev");}
void  S93C2 ::v132(){vfunc_called(this, "_ZN5S93C24v132Ev");}
void  S93C2 ::v133(){vfunc_called(this, "_ZN5S93C24v133Ev");}
void  S93C2 ::v134(){vfunc_called(this, "_ZN5S93C24v134Ev");}
void  S93C2 ::v135(){vfunc_called(this, "_ZN5S93C24v135Ev");}
S93C2 ::S93C2(){ note_ctor("S93C2", this);} // tgen

static void Test_S93C2()
{
  extern Class_Descriptor cd_S93C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,68)];
    init_test(&cd_S93C2, buf);
    S93C2 *dp, &lv = *(dp=new (buf) S93C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,268), "sizeof(S93C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S93C2)");
    check_base_class_offset(lv, (S93C7*)(S93C6*)(S93C5*)(S93C4*)(S93C3*), 0, "S93C2");
    check_base_class_offset(lv, (S93C6*)(S93C5*)(S93C4*)(S93C3*), 0, "S93C2");
    check_base_class_offset(lv, (S93C5*)(S93C4*)(S93C3*), 0, "S93C2");
    check_base_class_offset(lv, (S93C4*)(S93C3*), 0, "S93C2");
    check_base_class_offset(lv, (S93C3*), 0, "S93C2");
    set_bf_and_test(lv, s93c2f0, ABISELECT(308,240), 0, 1, 1, "S93C2");
    set_bf_and_test(lv, s93c2f1, ABISELECT(308,240), 1, 1, 1, "S93C2");
    check_field_offset(lv, s93c2f2, ABISELECT(312,244), "S93C2.s93c2f2");
    set_bf_and_test(lv, s93c2f3, ABISELECT(324,256), 0, 1, 1, "S93C2");
    check_field_offset(lv, s93c2f4, ABISELECT(325,257), "S93C2.s93c2f4");
    check_field_offset(lv, s93c2f5, ABISELECT(328,260), "S93C2.s93c2f5");
    check_field_offset(lv, s93c2f6, ABISELECT(336,264), "S93C2.s93c2f6");
    test_class_info(&lv, &cd_S93C2);
    dp->~S93C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS93C2(Test_S93C2, "S93C2", ABISELECT(344,268));

#else // __cplusplus

extern void _ZN5S93C2C1Ev();
extern void _ZN5S93C2D1Ev();
Name_Map name_map_S93C2[] = {
  NSPAIR(_ZN5S93C2C1Ev),
  NSPAIR(_ZN5S93C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S93C7;
extern VTBL_ENTRY _ZTI5S93C7[];
extern  VTBL_ENTRY _ZTV5S93C7[];
extern Class_Descriptor cd_S93C6;
extern VTBL_ENTRY _ZTI5S93C6[];
extern  VTBL_ENTRY _ZTV5S93C6[];
extern Class_Descriptor cd_S93C5;
extern VTBL_ENTRY _ZTI5S93C5[];
extern  VTBL_ENTRY _ZTV5S93C5[];
extern Class_Descriptor cd_S93C4;
extern VTBL_ENTRY _ZTI5S93C4[];
extern  VTBL_ENTRY _ZTV5S93C4[];
extern Class_Descriptor cd_S93C3;
extern VTBL_ENTRY _ZTI5S93C3[];
extern  VTBL_ENTRY _ZTV5S93C3[];
static Base_Class bases_S93C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S93C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S93C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S93C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S93C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S93C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S93C2[];
extern void _ZN5S93C2D1Ev();
extern void _ZN5S93C2D0Ev();
extern void _ZN5S93C72v5Ev();
extern void _ZN5S93C72v6Ev();
extern void _ZN5S93C72v7Ev();
extern void _ZN5S93C72v8Ev();
extern void _ZN5S93C72v9Ev();
extern void _ZN5S93C73v10Ev();
extern void _ZN5S93C73v11Ev();
extern void _ZN5S93C73v12Ev();
extern void _ZN5S93C73v13Ev();
extern void _ZN5S93C73v14Ev();
extern void _ZN5S93C73v15Ev();
extern void _ZN5S93C73v16Ev();
extern void _ZN5S93C73v17Ev();
extern void _ZN5S93C73v18Ev();
extern void _ZN5S93C73v19Ev();
extern void _ZN5S93C73v20Ev();
extern void _ZN5S93C73v21Ev();
extern void _ZN5S93C73v22Ev();
extern void _ZN5S93C73v23Ev();
extern void _ZN5S93C73v24Ev();
extern void _ZN5S93C73v25Ev();
extern void _ZN5S93C73v26Ev();
extern void _ZN5S93C73v27Ev();
extern void _ZN5S93C73v28Ev();
extern void _ZN5S93C73v29Ev();
extern void _ZN5S93C73v30Ev();
extern void _ZN5S93C73v31Ev();
extern void _ZN5S93C73v32Ev();
extern void _ZN5S93C73v33Ev();
extern void _ZN5S93C73v34Ev();
extern void _ZN5S93C73v35Ev();
extern void _ZN5S93C73v36Ev();
extern void _ZN5S93C73v37Ev();
extern void _ZN5S93C73v38Ev();
extern void _ZN5S93C73v39Ev();
extern void _ZN5S93C73v40Ev();
extern void _ZN5S93C73v41Ev();
extern void _ZN5S93C73v42Ev();
extern void _ZN5S93C73v43Ev();
extern void _ZN5S93C73v44Ev();
extern void _ZN5S93C73v45Ev();
extern void _ZN5S93C73v46Ev();
extern void _ZN5S93C73v47Ev();
extern void _ZN5S93C73v48Ev();
extern void _ZN5S93C73v49Ev();
extern void _ZN5S93C73v50Ev();
extern void _ZN5S93C73v51Ev();
extern void _ZN5S93C73v52Ev();
extern void _ZN5S93C73v53Ev();
extern void _ZN5S93C73v54Ev();
extern void _ZN5S93C73v55Ev();
extern void _ZN5S93C73v56Ev();
extern void _ZN5S93C73v57Ev();
extern void _ZN5S93C73v58Ev();
extern void _ZN5S93C73v59Ev();
extern void _ZN5S93C73v60Ev();
extern void _ZN5S93C73v61Ev();
extern void _ZN5S93C73v62Ev();
extern void _ZN5S93C73v63Ev();
extern void _ZN5S93C73v64Ev();
extern void _ZN5S93C73v65Ev();
extern void _ZN5S93C73v66Ev();
extern void _ZN5S93C73v67Ev();
extern void _ZN5S93C73v68Ev();
extern void _ZN5S93C63v69Ev();
extern void _ZN5S93C63v70Ev();
extern void _ZN5S93C63v71Ev();
extern void _ZN5S93C63v72Ev();
extern void _ZN5S93C63v73Ev();
extern void _ZN5S93C63v74Ev();
extern void _ZN5S93C63v75Ev();
extern void _ZN5S93C63v76Ev();
extern void _ZN5S93C63v77Ev();
extern void _ZN5S93C63v78Ev();
extern void _ZN5S93C63v79Ev();
extern void _ZN5S93C63v80Ev();
extern void _ZN5S93C63v81Ev();
extern void _ZN5S93C63v82Ev();
extern void _ZN5S93C63v83Ev();
extern void _ZN5S93C63v84Ev();
extern void _ZN5S93C63v85Ev();
extern void _ZN5S93C63v86Ev();
extern void _ZN5S93C63v87Ev();
extern void _ZN5S93C63v88Ev();
extern void _ZN5S93C63v89Ev();
extern void _ZN5S93C63v90Ev();
extern void _ZN5S93C63v91Ev();
extern void _ZN5S93C63v92Ev();
extern void _ZN5S93C63v93Ev();
extern void _ZN5S93C63v94Ev();
extern void _ZN5S93C63v95Ev();
extern void _ZN5S93C53v96Ev();
extern void _ZN5S93C53v97Ev();
extern void _ZN5S93C53v98Ev();
extern void _ZN5S93C53v99Ev();
extern void _ZN5S93C54v100Ev();
extern void _ZN5S93C54v101Ev();
extern void _ZN5S93C54v102Ev();
extern void _ZN5S93C54v103Ev();
extern void _ZN5S93C54v104Ev();
extern void _ZN5S93C54v105Ev();
extern void _ZN5S93C54v106Ev();
extern void _ZN5S93C54v107Ev();
extern void _ZN5S93C54v108Ev();
extern void _ZN5S93C54v109Ev();
extern void _ZN5S93C54v110Ev();
extern void _ZN5S93C54v111Ev();
extern void _ZN5S93C54v112Ev();
extern void _ZN5S93C54v113Ev();
extern void _ZN5S93C44v114Ev();
extern void _ZN5S93C44v115Ev();
extern void _ZN5S93C44v116Ev();
extern void _ZN5S93C44v117Ev();
extern void _ZN5S93C44v118Ev();
extern void _ZN5S93C44v119Ev();
extern void _ZN5S93C44v120Ev();
extern void _ZN5S93C34v121Ev();
extern void _ZN5S93C34v122Ev();
extern void _ZN5S93C34v123Ev();
extern void _ZN5S93C34v124Ev();
extern void _ZN5S93C34v125Ev();
extern void _ZN5S93C34v126Ev();
extern void _ZN5S93C24v127Ev();
extern void _ZN5S93C24v128Ev();
extern void _ZN5S93C24v129Ev();
extern void _ZN5S93C24v130Ev();
extern void _ZN5S93C24v131Ev();
extern void _ZN5S93C24v132Ev();
extern void _ZN5S93C24v133Ev();
extern void _ZN5S93C24v134Ev();
extern void _ZN5S93C24v135Ev();
static  VTBL_ENTRY vtc_S93C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S93C2[0]),
  (VTBL_ENTRY)&_ZN5S93C2D1Ev,
  (VTBL_ENTRY)&_ZN5S93C2D0Ev,
  (VTBL_ENTRY)&_ZN5S93C72v5Ev,
  (VTBL_ENTRY)&_ZN5S93C72v6Ev,
  (VTBL_ENTRY)&_ZN5S93C72v7Ev,
  (VTBL_ENTRY)&_ZN5S93C72v8Ev,
  (VTBL_ENTRY)&_ZN5S93C72v9Ev,
  (VTBL_ENTRY)&_ZN5S93C73v10Ev,
  (VTBL_ENTRY)&_ZN5S93C73v11Ev,
  (VTBL_ENTRY)&_ZN5S93C73v12Ev,
  (VTBL_ENTRY)&_ZN5S93C73v13Ev,
  (VTBL_ENTRY)&_ZN5S93C73v14Ev,
  (VTBL_ENTRY)&_ZN5S93C73v15Ev,
  (VTBL_ENTRY)&_ZN5S93C73v16Ev,
  (VTBL_ENTRY)&_ZN5S93C73v17Ev,
  (VTBL_ENTRY)&_ZN5S93C73v18Ev,
  (VTBL_ENTRY)&_ZN5S93C73v19Ev,
  (VTBL_ENTRY)&_ZN5S93C73v20Ev,
  (VTBL_ENTRY)&_ZN5S93C73v21Ev,
  (VTBL_ENTRY)&_ZN5S93C73v22Ev,
  (VTBL_ENTRY)&_ZN5S93C73v23Ev,
  (VTBL_ENTRY)&_ZN5S93C73v24Ev,
  (VTBL_ENTRY)&_ZN5S93C73v25Ev,
  (VTBL_ENTRY)&_ZN5S93C73v26Ev,
  (VTBL_ENTRY)&_ZN5S93C73v27Ev,
  (VTBL_ENTRY)&_ZN5S93C73v28Ev,
  (VTBL_ENTRY)&_ZN5S93C73v29Ev,
  (VTBL_ENTRY)&_ZN5S93C73v30Ev,
  (VTBL_ENTRY)&_ZN5S93C73v31Ev,
  (VTBL_ENTRY)&_ZN5S93C73v32Ev,
  (VTBL_ENTRY)&_ZN5S93C73v33Ev,
  (VTBL_ENTRY)&_ZN5S93C73v34Ev,
  (VTBL_ENTRY)&_ZN5S93C73v35Ev,
  (VTBL_ENTRY)&_ZN5S93C73v36Ev,
  (VTBL_ENTRY)&_ZN5S93C73v37Ev,
  (VTBL_ENTRY)&_ZN5S93C73v38Ev,
  (VTBL_ENTRY)&_ZN5S93C73v39Ev,
  (VTBL_ENTRY)&_ZN5S93C73v40Ev,
  (VTBL_ENTRY)&_ZN5S93C73v41Ev,
  (VTBL_ENTRY)&_ZN5S93C73v42Ev,
  (VTBL_ENTRY)&_ZN5S93C73v43Ev,
  (VTBL_ENTRY)&_ZN5S93C73v44Ev,
  (VTBL_ENTRY)&_ZN5S93C73v45Ev,
  (VTBL_ENTRY)&_ZN5S93C73v46Ev,
  (VTBL_ENTRY)&_ZN5S93C73v47Ev,
  (VTBL_ENTRY)&_ZN5S93C73v48Ev,
  (VTBL_ENTRY)&_ZN5S93C73v49Ev,
  (VTBL_ENTRY)&_ZN5S93C73v50Ev,
  (VTBL_ENTRY)&_ZN5S93C73v51Ev,
  (VTBL_ENTRY)&_ZN5S93C73v52Ev,
  (VTBL_ENTRY)&_ZN5S93C73v53Ev,
  (VTBL_ENTRY)&_ZN5S93C73v54Ev,
  (VTBL_ENTRY)&_ZN5S93C73v55Ev,
  (VTBL_ENTRY)&_ZN5S93C73v56Ev,
  (VTBL_ENTRY)&_ZN5S93C73v57Ev,
  (VTBL_ENTRY)&_ZN5S93C73v58Ev,
  (VTBL_ENTRY)&_ZN5S93C73v59Ev,
  (VTBL_ENTRY)&_ZN5S93C73v60Ev,
  (VTBL_ENTRY)&_ZN5S93C73v61Ev,
  (VTBL_ENTRY)&_ZN5S93C73v62Ev,
  (VTBL_ENTRY)&_ZN5S93C73v63Ev,
  (VTBL_ENTRY)&_ZN5S93C73v64Ev,
  (VTBL_ENTRY)&_ZN5S93C73v65Ev,
  (VTBL_ENTRY)&_ZN5S93C73v66Ev,
  (VTBL_ENTRY)&_ZN5S93C73v67Ev,
  (VTBL_ENTRY)&_ZN5S93C73v68Ev,
  (VTBL_ENTRY)&_ZN5S93C63v69Ev,
  (VTBL_ENTRY)&_ZN5S93C63v70Ev,
  (VTBL_ENTRY)&_ZN5S93C63v71Ev,
  (VTBL_ENTRY)&_ZN5S93C63v72Ev,
  (VTBL_ENTRY)&_ZN5S93C63v73Ev,
  (VTBL_ENTRY)&_ZN5S93C63v74Ev,
  (VTBL_ENTRY)&_ZN5S93C63v75Ev,
  (VTBL_ENTRY)&_ZN5S93C63v76Ev,
  (VTBL_ENTRY)&_ZN5S93C63v77Ev,
  (VTBL_ENTRY)&_ZN5S93C63v78Ev,
  (VTBL_ENTRY)&_ZN5S93C63v79Ev,
  (VTBL_ENTRY)&_ZN5S93C63v80Ev,
  (VTBL_ENTRY)&_ZN5S93C63v81Ev,
  (VTBL_ENTRY)&_ZN5S93C63v82Ev,
  (VTBL_ENTRY)&_ZN5S93C63v83Ev,
  (VTBL_ENTRY)&_ZN5S93C63v84Ev,
  (VTBL_ENTRY)&_ZN5S93C63v85Ev,
  (VTBL_ENTRY)&_ZN5S93C63v86Ev,
  (VTBL_ENTRY)&_ZN5S93C63v87Ev,
  (VTBL_ENTRY)&_ZN5S93C63v88Ev,
  (VTBL_ENTRY)&_ZN5S93C63v89Ev,
  (VTBL_ENTRY)&_ZN5S93C63v90Ev,
  (VTBL_ENTRY)&_ZN5S93C63v91Ev,
  (VTBL_ENTRY)&_ZN5S93C63v92Ev,
  (VTBL_ENTRY)&_ZN5S93C63v93Ev,
  (VTBL_ENTRY)&_ZN5S93C63v94Ev,
  (VTBL_ENTRY)&_ZN5S93C63v95Ev,
  (VTBL_ENTRY)&_ZN5S93C53v96Ev,
  (VTBL_ENTRY)&_ZN5S93C53v97Ev,
  (VTBL_ENTRY)&_ZN5S93C53v98Ev,
  (VTBL_ENTRY)&_ZN5S93C53v99Ev,
  (VTBL_ENTRY)&_ZN5S93C54v100Ev,
  (VTBL_ENTRY)&_ZN5S93C54v101Ev,
  (VTBL_ENTRY)&_ZN5S93C54v102Ev,
  (VTBL_ENTRY)&_ZN5S93C54v103Ev,
  (VTBL_ENTRY)&_ZN5S93C54v104Ev,
  (VTBL_ENTRY)&_ZN5S93C54v105Ev,
  (VTBL_ENTRY)&_ZN5S93C54v106Ev,
  (VTBL_ENTRY)&_ZN5S93C54v107Ev,
  (VTBL_ENTRY)&_ZN5S93C54v108Ev,
  (VTBL_ENTRY)&_ZN5S93C54v109Ev,
  (VTBL_ENTRY)&_ZN5S93C54v110Ev,
  (VTBL_ENTRY)&_ZN5S93C54v111Ev,
  (VTBL_ENTRY)&_ZN5S93C54v112Ev,
  (VTBL_ENTRY)&_ZN5S93C54v113Ev,
  (VTBL_ENTRY)&_ZN5S93C44v114Ev,
  (VTBL_ENTRY)&_ZN5S93C44v115Ev,
  (VTBL_ENTRY)&_ZN5S93C44v116Ev,
  (VTBL_ENTRY)&_ZN5S93C44v117Ev,
  (VTBL_ENTRY)&_ZN5S93C44v118Ev,
  (VTBL_ENTRY)&_ZN5S93C44v119Ev,
  (VTBL_ENTRY)&_ZN5S93C44v120Ev,
  (VTBL_ENTRY)&_ZN5S93C34v121Ev,
  (VTBL_ENTRY)&_ZN5S93C34v122Ev,
  (VTBL_ENTRY)&_ZN5S93C34v123Ev,
  (VTBL_ENTRY)&_ZN5S93C34v124Ev,
  (VTBL_ENTRY)&_ZN5S93C34v125Ev,
  (VTBL_ENTRY)&_ZN5S93C34v126Ev,
  (VTBL_ENTRY)&_ZN5S93C24v127Ev,
  (VTBL_ENTRY)&_ZN5S93C24v128Ev,
  (VTBL_ENTRY)&_ZN5S93C24v129Ev,
  (VTBL_ENTRY)&_ZN5S93C24v130Ev,
  (VTBL_ENTRY)&_ZN5S93C24v131Ev,
  (VTBL_ENTRY)&_ZN5S93C24v132Ev,
  (VTBL_ENTRY)&_ZN5S93C24v133Ev,
  (VTBL_ENTRY)&_ZN5S93C24v134Ev,
  (VTBL_ENTRY)&_ZN5S93C24v135Ev,
};
extern VTBL_ENTRY _ZTI5S93C2[];
extern  VTBL_ENTRY _ZTV5S93C2[];
Class_Descriptor cd_S93C2 = {  "S93C2", // class name
  bases_S93C2, 5,
  &(vtc_S93C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,268), // object size
  NSPAIRA(_ZTI5S93C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S93C2),135, //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  S93C1  : S93C2 {
  void *s93c1f0[2];
  virtual  ~S93C1(); // _ZN5S93C1D1Ev
  virtual void  v1(); // _ZN5S93C12v1Ev
  virtual void  v2(); // _ZN5S93C12v2Ev
  virtual void  v3(); // _ZN5S93C12v3Ev
  virtual void  v4(); // _ZN5S93C12v4Ev
  S93C1(); // tgen
};
//SIG(1 S93C1) 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 v91 v92 v93 v94 v95 Fp FC9{ BC10{ BC11{ m Fp Fi[2]}}} FC8 FC12{ BC13{ BC11}} FC14{ m FC15{ m Fi[4]} FC16{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 FC17{ BC18{ BC11}} Fi:1} vd v114 v115 v116 v117 v118 v119 v120 FC19{ BC20{ BC11}} Fi[2] Fi:1} vd v121 v122 v123 v124 v125 v126 Fi FC19 Fi} vd v127 v128 v129 v130 v131 v132 v133 v134 v135 Fi:1 Fi:1 Fi[3] Fi:1 Fc Fi Fp} vd v1 v2 v3 v4 Fp[2]}


 S93C1 ::~S93C1(){ note_dtor("S93C1", this);}
void  S93C1 ::v1(){vfunc_called(this, "_ZN5S93C12v1Ev");}
void  S93C1 ::v2(){vfunc_called(this, "_ZN5S93C12v2Ev");}
void  S93C1 ::v3(){vfunc_called(this, "_ZN5S93C12v3Ev");}
void  S93C1 ::v4(){vfunc_called(this, "_ZN5S93C12v4Ev");}
S93C1 ::S93C1(){ note_ctor("S93C1", this);} // tgen

static void Test_S93C1()
{
  extern Class_Descriptor cd_S93C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,70)];
    init_test(&cd_S93C1, buf);
    S93C1 *dp, &lv = *(dp=new (buf) S93C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,276), "sizeof(S93C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S93C1)");
    check_base_class_offset(lv, (S93C7*)(S93C6*)(S93C5*)(S93C4*)(S93C3*)(S93C2*), 0, "S93C1");
    check_base_class_offset(lv, (S93C6*)(S93C5*)(S93C4*)(S93C3*)(S93C2*), 0, "S93C1");
    check_base_class_offset(lv, (S93C5*)(S93C4*)(S93C3*)(S93C2*), 0, "S93C1");
    check_base_class_offset(lv, (S93C4*)(S93C3*)(S93C2*), 0, "S93C1");
    check_base_class_offset(lv, (S93C3*)(S93C2*), 0, "S93C1");
    check_base_class_offset(lv, (S93C2*), 0, "S93C1");
    check_field_offset(lv, s93c1f0, ABISELECT(344,268), "S93C1.s93c1f0");
    test_class_info(&lv, &cd_S93C1);
    dp->~S93C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS93C1(Test_S93C1, "S93C1", ABISELECT(360,276));

#else // __cplusplus

extern void _ZN5S93C1C1Ev();
extern void _ZN5S93C1D1Ev();
Name_Map name_map_S93C1[] = {
  NSPAIR(_ZN5S93C1C1Ev),
  NSPAIR(_ZN5S93C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S93C7;
extern VTBL_ENTRY _ZTI5S93C7[];
extern  VTBL_ENTRY _ZTV5S93C7[];
extern Class_Descriptor cd_S93C6;
extern VTBL_ENTRY _ZTI5S93C6[];
extern  VTBL_ENTRY _ZTV5S93C6[];
extern Class_Descriptor cd_S93C5;
extern VTBL_ENTRY _ZTI5S93C5[];
extern  VTBL_ENTRY _ZTV5S93C5[];
extern Class_Descriptor cd_S93C4;
extern VTBL_ENTRY _ZTI5S93C4[];
extern  VTBL_ENTRY _ZTV5S93C4[];
extern Class_Descriptor cd_S93C3;
extern VTBL_ENTRY _ZTI5S93C3[];
extern  VTBL_ENTRY _ZTV5S93C3[];
extern Class_Descriptor cd_S93C2;
extern VTBL_ENTRY _ZTI5S93C2[];
extern  VTBL_ENTRY _ZTV5S93C2[];
static Base_Class bases_S93C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S93C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S93C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S93C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S93C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S93C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S93C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S93C1[];
extern void _ZN5S93C1D1Ev();
extern void _ZN5S93C1D0Ev();
extern void _ZN5S93C72v5Ev();
extern void _ZN5S93C72v6Ev();
extern void _ZN5S93C72v7Ev();
extern void _ZN5S93C72v8Ev();
extern void _ZN5S93C72v9Ev();
extern void _ZN5S93C73v10Ev();
extern void _ZN5S93C73v11Ev();
extern void _ZN5S93C73v12Ev();
extern void _ZN5S93C73v13Ev();
extern void _ZN5S93C73v14Ev();
extern void _ZN5S93C73v15Ev();
extern void _ZN5S93C73v16Ev();
extern void _ZN5S93C73v17Ev();
extern void _ZN5S93C73v18Ev();
extern void _ZN5S93C73v19Ev();
extern void _ZN5S93C73v20Ev();
extern void _ZN5S93C73v21Ev();
extern void _ZN5S93C73v22Ev();
extern void _ZN5S93C73v23Ev();
extern void _ZN5S93C73v24Ev();
extern void _ZN5S93C73v25Ev();
extern void _ZN5S93C73v26Ev();
extern void _ZN5S93C73v27Ev();
extern void _ZN5S93C73v28Ev();
extern void _ZN5S93C73v29Ev();
extern void _ZN5S93C73v30Ev();
extern void _ZN5S93C73v31Ev();
extern void _ZN5S93C73v32Ev();
extern void _ZN5S93C73v33Ev();
extern void _ZN5S93C73v34Ev();
extern void _ZN5S93C73v35Ev();
extern void _ZN5S93C73v36Ev();
extern void _ZN5S93C73v37Ev();
extern void _ZN5S93C73v38Ev();
extern void _ZN5S93C73v39Ev();
extern void _ZN5S93C73v40Ev();
extern void _ZN5S93C73v41Ev();
extern void _ZN5S93C73v42Ev();
extern void _ZN5S93C73v43Ev();
extern void _ZN5S93C73v44Ev();
extern void _ZN5S93C73v45Ev();
extern void _ZN5S93C73v46Ev();
extern void _ZN5S93C73v47Ev();
extern void _ZN5S93C73v48Ev();
extern void _ZN5S93C73v49Ev();
extern void _ZN5S93C73v50Ev();
extern void _ZN5S93C73v51Ev();
extern void _ZN5S93C73v52Ev();
extern void _ZN5S93C73v53Ev();
extern void _ZN5S93C73v54Ev();
extern void _ZN5S93C73v55Ev();
extern void _ZN5S93C73v56Ev();
extern void _ZN5S93C73v57Ev();
extern void _ZN5S93C73v58Ev();
extern void _ZN5S93C73v59Ev();
extern void _ZN5S93C73v60Ev();
extern void _ZN5S93C73v61Ev();
extern void _ZN5S93C73v62Ev();
extern void _ZN5S93C73v63Ev();
extern void _ZN5S93C73v64Ev();
extern void _ZN5S93C73v65Ev();
extern void _ZN5S93C73v66Ev();
extern void _ZN5S93C73v67Ev();
extern void _ZN5S93C73v68Ev();
extern void _ZN5S93C63v69Ev();
extern void _ZN5S93C63v70Ev();
extern void _ZN5S93C63v71Ev();
extern void _ZN5S93C63v72Ev();
extern void _ZN5S93C63v73Ev();
extern void _ZN5S93C63v74Ev();
extern void _ZN5S93C63v75Ev();
extern void _ZN5S93C63v76Ev();
extern void _ZN5S93C63v77Ev();
extern void _ZN5S93C63v78Ev();
extern void _ZN5S93C63v79Ev();
extern void _ZN5S93C63v80Ev();
extern void _ZN5S93C63v81Ev();
extern void _ZN5S93C63v82Ev();
extern void _ZN5S93C63v83Ev();
extern void _ZN5S93C63v84Ev();
extern void _ZN5S93C63v85Ev();
extern void _ZN5S93C63v86Ev();
extern void _ZN5S93C63v87Ev();
extern void _ZN5S93C63v88Ev();
extern void _ZN5S93C63v89Ev();
extern void _ZN5S93C63v90Ev();
extern void _ZN5S93C63v91Ev();
extern void _ZN5S93C63v92Ev();
extern void _ZN5S93C63v93Ev();
extern void _ZN5S93C63v94Ev();
extern void _ZN5S93C63v95Ev();
extern void _ZN5S93C53v96Ev();
extern void _ZN5S93C53v97Ev();
extern void _ZN5S93C53v98Ev();
extern void _ZN5S93C53v99Ev();
extern void _ZN5S93C54v100Ev();
extern void _ZN5S93C54v101Ev();
extern void _ZN5S93C54v102Ev();
extern void _ZN5S93C54v103Ev();
extern void _ZN5S93C54v104Ev();
extern void _ZN5S93C54v105Ev();
extern void _ZN5S93C54v106Ev();
extern void _ZN5S93C54v107Ev();
extern void _ZN5S93C54v108Ev();
extern void _ZN5S93C54v109Ev();
extern void _ZN5S93C54v110Ev();
extern void _ZN5S93C54v111Ev();
extern void _ZN5S93C54v112Ev();
extern void _ZN5S93C54v113Ev();
extern void _ZN5S93C44v114Ev();
extern void _ZN5S93C44v115Ev();
extern void _ZN5S93C44v116Ev();
extern void _ZN5S93C44v117Ev();
extern void _ZN5S93C44v118Ev();
extern void _ZN5S93C44v119Ev();
extern void _ZN5S93C44v120Ev();
extern void _ZN5S93C34v121Ev();
extern void _ZN5S93C34v122Ev();
extern void _ZN5S93C34v123Ev();
extern void _ZN5S93C34v124Ev();
extern void _ZN5S93C34v125Ev();
extern void _ZN5S93C34v126Ev();
extern void _ZN5S93C24v127Ev();
extern void _ZN5S93C24v128Ev();
extern void _ZN5S93C24v129Ev();
extern void _ZN5S93C24v130Ev();
extern void _ZN5S93C24v131Ev();
extern void _ZN5S93C24v132Ev();
extern void _ZN5S93C24v133Ev();
extern void _ZN5S93C24v134Ev();
extern void _ZN5S93C24v135Ev();
extern void _ZN5S93C12v1Ev();
extern void _ZN5S93C12v2Ev();
extern void _ZN5S93C12v3Ev();
extern void _ZN5S93C12v4Ev();
static  VTBL_ENTRY vtc_S93C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S93C1[0]),
  (VTBL_ENTRY)&_ZN5S93C1D1Ev,
  (VTBL_ENTRY)&_ZN5S93C1D0Ev,
  (VTBL_ENTRY)&_ZN5S93C72v5Ev,
  (VTBL_ENTRY)&_ZN5S93C72v6Ev,
  (VTBL_ENTRY)&_ZN5S93C72v7Ev,
  (VTBL_ENTRY)&_ZN5S93C72v8Ev,
  (VTBL_ENTRY)&_ZN5S93C72v9Ev,
  (VTBL_ENTRY)&_ZN5S93C73v10Ev,
  (VTBL_ENTRY)&_ZN5S93C73v11Ev,
  (VTBL_ENTRY)&_ZN5S93C73v12Ev,
  (VTBL_ENTRY)&_ZN5S93C73v13Ev,
  (VTBL_ENTRY)&_ZN5S93C73v14Ev,
  (VTBL_ENTRY)&_ZN5S93C73v15Ev,
  (VTBL_ENTRY)&_ZN5S93C73v16Ev,
  (VTBL_ENTRY)&_ZN5S93C73v17Ev,
  (VTBL_ENTRY)&_ZN5S93C73v18Ev,
  (VTBL_ENTRY)&_ZN5S93C73v19Ev,
  (VTBL_ENTRY)&_ZN5S93C73v20Ev,
  (VTBL_ENTRY)&_ZN5S93C73v21Ev,
  (VTBL_ENTRY)&_ZN5S93C73v22Ev,
  (VTBL_ENTRY)&_ZN5S93C73v23Ev,
  (VTBL_ENTRY)&_ZN5S93C73v24Ev,
  (VTBL_ENTRY)&_ZN5S93C73v25Ev,
  (VTBL_ENTRY)&_ZN5S93C73v26Ev,
  (VTBL_ENTRY)&_ZN5S93C73v27Ev,
  (VTBL_ENTRY)&_ZN5S93C73v28Ev,
  (VTBL_ENTRY)&_ZN5S93C73v29Ev,
  (VTBL_ENTRY)&_ZN5S93C73v30Ev,
  (VTBL_ENTRY)&_ZN5S93C73v31Ev,
  (VTBL_ENTRY)&_ZN5S93C73v32Ev,
  (VTBL_ENTRY)&_ZN5S93C73v33Ev,
  (VTBL_ENTRY)&_ZN5S93C73v34Ev,
  (VTBL_ENTRY)&_ZN5S93C73v35Ev,
  (VTBL_ENTRY)&_ZN5S93C73v36Ev,
  (VTBL_ENTRY)&_ZN5S93C73v37Ev,
  (VTBL_ENTRY)&_ZN5S93C73v38Ev,
  (VTBL_ENTRY)&_ZN5S93C73v39Ev,
  (VTBL_ENTRY)&_ZN5S93C73v40Ev,
  (VTBL_ENTRY)&_ZN5S93C73v41Ev,
  (VTBL_ENTRY)&_ZN5S93C73v42Ev,
  (VTBL_ENTRY)&_ZN5S93C73v43Ev,
  (VTBL_ENTRY)&_ZN5S93C73v44Ev,
  (VTBL_ENTRY)&_ZN5S93C73v45Ev,
  (VTBL_ENTRY)&_ZN5S93C73v46Ev,
  (VTBL_ENTRY)&_ZN5S93C73v47Ev,
  (VTBL_ENTRY)&_ZN5S93C73v48Ev,
  (VTBL_ENTRY)&_ZN5S93C73v49Ev,
  (VTBL_ENTRY)&_ZN5S93C73v50Ev,
  (VTBL_ENTRY)&_ZN5S93C73v51Ev,
  (VTBL_ENTRY)&_ZN5S93C73v52Ev,
  (VTBL_ENTRY)&_ZN5S93C73v53Ev,
  (VTBL_ENTRY)&_ZN5S93C73v54Ev,
  (VTBL_ENTRY)&_ZN5S93C73v55Ev,
  (VTBL_ENTRY)&_ZN5S93C73v56Ev,
  (VTBL_ENTRY)&_ZN5S93C73v57Ev,
  (VTBL_ENTRY)&_ZN5S93C73v58Ev,
  (VTBL_ENTRY)&_ZN5S93C73v59Ev,
  (VTBL_ENTRY)&_ZN5S93C73v60Ev,
  (VTBL_ENTRY)&_ZN5S93C73v61Ev,
  (VTBL_ENTRY)&_ZN5S93C73v62Ev,
  (VTBL_ENTRY)&_ZN5S93C73v63Ev,
  (VTBL_ENTRY)&_ZN5S93C73v64Ev,
  (VTBL_ENTRY)&_ZN5S93C73v65Ev,
  (VTBL_ENTRY)&_ZN5S93C73v66Ev,
  (VTBL_ENTRY)&_ZN5S93C73v67Ev,
  (VTBL_ENTRY)&_ZN5S93C73v68Ev,
  (VTBL_ENTRY)&_ZN5S93C63v69Ev,
  (VTBL_ENTRY)&_ZN5S93C63v70Ev,
  (VTBL_ENTRY)&_ZN5S93C63v71Ev,
  (VTBL_ENTRY)&_ZN5S93C63v72Ev,
  (VTBL_ENTRY)&_ZN5S93C63v73Ev,
  (VTBL_ENTRY)&_ZN5S93C63v74Ev,
  (VTBL_ENTRY)&_ZN5S93C63v75Ev,
  (VTBL_ENTRY)&_ZN5S93C63v76Ev,
  (VTBL_ENTRY)&_ZN5S93C63v77Ev,
  (VTBL_ENTRY)&_ZN5S93C63v78Ev,
  (VTBL_ENTRY)&_ZN5S93C63v79Ev,
  (VTBL_ENTRY)&_ZN5S93C63v80Ev,
  (VTBL_ENTRY)&_ZN5S93C63v81Ev,
  (VTBL_ENTRY)&_ZN5S93C63v82Ev,
  (VTBL_ENTRY)&_ZN5S93C63v83Ev,
  (VTBL_ENTRY)&_ZN5S93C63v84Ev,
  (VTBL_ENTRY)&_ZN5S93C63v85Ev,
  (VTBL_ENTRY)&_ZN5S93C63v86Ev,
  (VTBL_ENTRY)&_ZN5S93C63v87Ev,
  (VTBL_ENTRY)&_ZN5S93C63v88Ev,
  (VTBL_ENTRY)&_ZN5S93C63v89Ev,
  (VTBL_ENTRY)&_ZN5S93C63v90Ev,
  (VTBL_ENTRY)&_ZN5S93C63v91Ev,
  (VTBL_ENTRY)&_ZN5S93C63v92Ev,
  (VTBL_ENTRY)&_ZN5S93C63v93Ev,
  (VTBL_ENTRY)&_ZN5S93C63v94Ev,
  (VTBL_ENTRY)&_ZN5S93C63v95Ev,
  (VTBL_ENTRY)&_ZN5S93C53v96Ev,
  (VTBL_ENTRY)&_ZN5S93C53v97Ev,
  (VTBL_ENTRY)&_ZN5S93C53v98Ev,
  (VTBL_ENTRY)&_ZN5S93C53v99Ev,
  (VTBL_ENTRY)&_ZN5S93C54v100Ev,
  (VTBL_ENTRY)&_ZN5S93C54v101Ev,
  (VTBL_ENTRY)&_ZN5S93C54v102Ev,
  (VTBL_ENTRY)&_ZN5S93C54v103Ev,
  (VTBL_ENTRY)&_ZN5S93C54v104Ev,
  (VTBL_ENTRY)&_ZN5S93C54v105Ev,
  (VTBL_ENTRY)&_ZN5S93C54v106Ev,
  (VTBL_ENTRY)&_ZN5S93C54v107Ev,
  (VTBL_ENTRY)&_ZN5S93C54v108Ev,
  (VTBL_ENTRY)&_ZN5S93C54v109Ev,
  (VTBL_ENTRY)&_ZN5S93C54v110Ev,
  (VTBL_ENTRY)&_ZN5S93C54v111Ev,
  (VTBL_ENTRY)&_ZN5S93C54v112Ev,
  (VTBL_ENTRY)&_ZN5S93C54v113Ev,
  (VTBL_ENTRY)&_ZN5S93C44v114Ev,
  (VTBL_ENTRY)&_ZN5S93C44v115Ev,
  (VTBL_ENTRY)&_ZN5S93C44v116Ev,
  (VTBL_ENTRY)&_ZN5S93C44v117Ev,
  (VTBL_ENTRY)&_ZN5S93C44v118Ev,
  (VTBL_ENTRY)&_ZN5S93C44v119Ev,
  (VTBL_ENTRY)&_ZN5S93C44v120Ev,
  (VTBL_ENTRY)&_ZN5S93C34v121Ev,
  (VTBL_ENTRY)&_ZN5S93C34v122Ev,
  (VTBL_ENTRY)&_ZN5S93C34v123Ev,
  (VTBL_ENTRY)&_ZN5S93C34v124Ev,
  (VTBL_ENTRY)&_ZN5S93C34v125Ev,
  (VTBL_ENTRY)&_ZN5S93C34v126Ev,
  (VTBL_ENTRY)&_ZN5S93C24v127Ev,
  (VTBL_ENTRY)&_ZN5S93C24v128Ev,
  (VTBL_ENTRY)&_ZN5S93C24v129Ev,
  (VTBL_ENTRY)&_ZN5S93C24v130Ev,
  (VTBL_ENTRY)&_ZN5S93C24v131Ev,
  (VTBL_ENTRY)&_ZN5S93C24v132Ev,
  (VTBL_ENTRY)&_ZN5S93C24v133Ev,
  (VTBL_ENTRY)&_ZN5S93C24v134Ev,
  (VTBL_ENTRY)&_ZN5S93C24v135Ev,
  (VTBL_ENTRY)&_ZN5S93C12v1Ev,
  (VTBL_ENTRY)&_ZN5S93C12v2Ev,
  (VTBL_ENTRY)&_ZN5S93C12v3Ev,
  (VTBL_ENTRY)&_ZN5S93C12v4Ev,
};
extern VTBL_ENTRY _ZTI5S93C1[];
extern  VTBL_ENTRY _ZTV5S93C1[];
Class_Descriptor cd_S93C1 = {  "S93C1", // class name
  bases_S93C1, 6,
  &(vtc_S93C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,276), // object size
  NSPAIRA(_ZTI5S93C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S93C1),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  S563C5  {
  int s563c5f0;
  __tsi64 s563c5f1;
  void *s563c5f2[4];
  int s563c5f3[2];
  void *s563c5f4;
  ::S615C17_nt s563c5f5;
  void *s563c5f6[2];
  virtual  ~S563C5(); // _ZN6S563C5D1Ev
  virtual void  v4(); // _ZN6S563C52v4Ev
  virtual void  v5(); // _ZN6S563C52v5Ev
  virtual void  v6(); // _ZN6S563C52v6Ev
  virtual void  v7(); // _ZN6S563C52v7Ev
  virtual void  v8(); // _ZN6S563C52v8Ev
  virtual void  v9(); // _ZN6S563C52v9Ev
  virtual void  v10(); // _ZN6S563C53v10Ev
  virtual void  v11(); // _ZN6S563C53v11Ev
  virtual void  v12(); // _ZN6S563C53v12Ev
  virtual void  v13(); // _ZN6S563C53v13Ev
  virtual void  v14(); // _ZN6S563C53v14Ev
  virtual void  v15(); // _ZN6S563C53v15Ev
  virtual void  v16(); // _ZN6S563C53v16Ev
  virtual void  v17(); // _ZN6S563C53v17Ev
  virtual void  v18(); // _ZN6S563C53v18Ev
  virtual void  v19(); // _ZN6S563C53v19Ev
  virtual void  v20(); // _ZN6S563C53v20Ev
  virtual void  v21(); // _ZN6S563C53v21Ev
  virtual void  v22(); // _ZN6S563C53v22Ev
  virtual void  v23(); // _ZN6S563C53v23Ev
  virtual void  v24(); // _ZN6S563C53v24Ev
  virtual void  v25(); // _ZN6S563C53v25Ev
  virtual void  v26(); // _ZN6S563C53v26Ev
  virtual void  v27(); // _ZN6S563C53v27Ev
  virtual void  v28(); // _ZN6S563C53v28Ev
  virtual void  v29(); // _ZN6S563C53v29Ev
  virtual void  v30(); // _ZN6S563C53v30Ev
  virtual void  v31(); // _ZN6S563C53v31Ev
  virtual void  v32(); // _ZN6S563C53v32Ev
  virtual void  v33(); // _ZN6S563C53v33Ev
  virtual void  v34(); // _ZN6S563C53v34Ev
  virtual void  v35(); // _ZN6S563C53v35Ev
  virtual void  v36(); // _ZN6S563C53v36Ev
  virtual void  v37(); // _ZN6S563C53v37Ev
  virtual void  v38(); // _ZN6S563C53v38Ev
  virtual void  v39(); // _ZN6S563C53v39Ev
  virtual void  v40(); // _ZN6S563C53v40Ev
  virtual void  v41(); // _ZN6S563C53v41Ev
  virtual void  v42(); // _ZN6S563C53v42Ev
  virtual void  v43(); // _ZN6S563C53v43Ev
  virtual void  v44(); // _ZN6S563C53v44Ev
  virtual void  v45(); // _ZN6S563C53v45Ev
  virtual void  v46(); // _ZN6S563C53v46Ev
  virtual void  v47(); // _ZN6S563C53v47Ev
  virtual void  v48(); // _ZN6S563C53v48Ev
  virtual void  v49(); // _ZN6S563C53v49Ev
  virtual void  v50(); // _ZN6S563C53v50Ev
  virtual void  v51(); // _ZN6S563C53v51Ev
  virtual void  v52(); // _ZN6S563C53v52Ev
  virtual void  v53(); // _ZN6S563C53v53Ev
  virtual void  v54(); // _ZN6S563C53v54Ev
  virtual void  v55(); // _ZN6S563C53v55Ev
  virtual void  v56(); // _ZN6S563C53v56Ev
  virtual void  v57(); // _ZN6S563C53v57Ev
  virtual void  v58(); // _ZN6S563C53v58Ev
  virtual void  v59(); // _ZN6S563C53v59Ev
  virtual void  v60(); // _ZN6S563C53v60Ev
  virtual void  v61(); // _ZN6S563C53v61Ev
  virtual void  v62(); // _ZN6S563C53v62Ev
  virtual void  v63(); // _ZN6S563C53v63Ev
  virtual void  v64(); // _ZN6S563C53v64Ev
  virtual void  v65(); // _ZN6S563C53v65Ev
  virtual void  v66(); // _ZN6S563C53v66Ev
  virtual void  v67(); // _ZN6S563C53v67Ev
  S563C5(); // tgen
};
//SIG(-1 S563C5) 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]}


 S563C5 ::~S563C5(){ note_dtor("S563C5", this);}
void  S563C5 ::v4(){vfunc_called(this, "_ZN6S563C52v4Ev");}
void  S563C5 ::v5(){vfunc_called(this, "_ZN6S563C52v5Ev");}
void  S563C5 ::v6(){vfunc_called(this, "_ZN6S563C52v6Ev");}
void  S563C5 ::v7(){vfunc_called(this, "_ZN6S563C52v7Ev");}
void  S563C5 ::v8(){vfunc_called(this, "_ZN6S563C52v8Ev");}
void  S563C5 ::v9(){vfunc_called(this, "_ZN6S563C52v9Ev");}
void  S563C5 ::v10(){vfunc_called(this, "_ZN6S563C53v10Ev");}
void  S563C5 ::v11(){vfunc_called(this, "_ZN6S563C53v11Ev");}
void  S563C5 ::v12(){vfunc_called(this, "_ZN6S563C53v12Ev");}
void  S563C5 ::v13(){vfunc_called(this, "_ZN6S563C53v13Ev");}
void  S563C5 ::v14(){vfunc_called(this, "_ZN6S563C53v14Ev");}
void  S563C5 ::v15(){vfunc_called(this, "_ZN6S563C53v15Ev");}
void  S563C5 ::v16(){vfunc_called(this, "_ZN6S563C53v16Ev");}
void  S563C5 ::v17(){vfunc_called(this, "_ZN6S563C53v17Ev");}
void  S563C5 ::v18(){vfunc_called(this, "_ZN6S563C53v18Ev");}
void  S563C5 ::v19(){vfunc_called(this, "_ZN6S563C53v19Ev");}
void  S563C5 ::v20(){vfunc_called(this, "_ZN6S563C53v20Ev");}
void  S563C5 ::v21(){vfunc_called(this, "_ZN6S563C53v21Ev");}
void  S563C5 ::v22(){vfunc_called(this, "_ZN6S563C53v22Ev");}
void  S563C5 ::v23(){vfunc_called(this, "_ZN6S563C53v23Ev");}
void  S563C5 ::v24(){vfunc_called(this, "_ZN6S563C53v24Ev");}
void  S563C5 ::v25(){vfunc_called(this, "_ZN6S563C53v25Ev");}
void  S563C5 ::v26(){vfunc_called(this, "_ZN6S563C53v26Ev");}
void  S563C5 ::v27(){vfunc_called(this, "_ZN6S563C53v27Ev");}
void  S563C5 ::v28(){vfunc_called(this, "_ZN6S563C53v28Ev");}
void  S563C5 ::v29(){vfunc_called(this, "_ZN6S563C53v29Ev");}
void  S563C5 ::v30(){vfunc_called(this, "_ZN6S563C53v30Ev");}
void  S563C5 ::v31(){vfunc_called(this, "_ZN6S563C53v31Ev");}
void  S563C5 ::v32(){vfunc_called(this, "_ZN6S563C53v32Ev");}
void  S563C5 ::v33(){vfunc_called(this, "_ZN6S563C53v33Ev");}
void  S563C5 ::v34(){vfunc_called(this, "_ZN6S563C53v34Ev");}
void  S563C5 ::v35(){vfunc_called(this, "_ZN6S563C53v35Ev");}
void  S563C5 ::v36(){vfunc_called(this, "_ZN6S563C53v36Ev");}
void  S563C5 ::v37(){vfunc_called(this, "_ZN6S563C53v37Ev");}
void  S563C5 ::v38(){vfunc_called(this, "_ZN6S563C53v38Ev");}
void  S563C5 ::v39(){vfunc_called(this, "_ZN6S563C53v39Ev");}
void  S563C5 ::v40(){vfunc_called(this, "_ZN6S563C53v40Ev");}
void  S563C5 ::v41(){vfunc_called(this, "_ZN6S563C53v41Ev");}
void  S563C5 ::v42(){vfunc_called(this, "_ZN6S563C53v42Ev");}
void  S563C5 ::v43(){vfunc_called(this, "_ZN6S563C53v43Ev");}
void  S563C5 ::v44(){vfunc_called(this, "_ZN6S563C53v44Ev");}
void  S563C5 ::v45(){vfunc_called(this, "_ZN6S563C53v45Ev");}
void  S563C5 ::v46(){vfunc_called(this, "_ZN6S563C53v46Ev");}
void  S563C5 ::v47(){vfunc_called(this, "_ZN6S563C53v47Ev");}
void  S563C5 ::v48(){vfunc_called(this, "_ZN6S563C53v48Ev");}
void  S563C5 ::v49(){vfunc_called(this, "_ZN6S563C53v49Ev");}
void  S563C5 ::v50(){vfunc_called(this, "_ZN6S563C53v50Ev");}
void  S563C5 ::v51(){vfunc_called(this, "_ZN6S563C53v51Ev");}
void  S563C5 ::v52(){vfunc_called(this, "_ZN6S563C53v52Ev");}
void  S563C5 ::v53(){vfunc_called(this, "_ZN6S563C53v53Ev");}
void  S563C5 ::v54(){vfunc_called(this, "_ZN6S563C53v54Ev");}
void  S563C5 ::v55(){vfunc_called(this, "_ZN6S563C53v55Ev");}
void  S563C5 ::v56(){vfunc_called(this, "_ZN6S563C53v56Ev");}
void  S563C5 ::v57(){vfunc_called(this, "_ZN6S563C53v57Ev");}
void  S563C5 ::v58(){vfunc_called(this, "_ZN6S563C53v58Ev");}
void  S563C5 ::v59(){vfunc_called(this, "_ZN6S563C53v59Ev");}
void  S563C5 ::v60(){vfunc_called(this, "_ZN6S563C53v60Ev");}
void  S563C5 ::v61(){vfunc_called(this, "_ZN6S563C53v61Ev");}
void  S563C5 ::v62(){vfunc_called(this, "_ZN6S563C53v62Ev");}
void  S563C5 ::v63(){vfunc_called(this, "_ZN6S563C53v63Ev");}
void  S563C5 ::v64(){vfunc_called(this, "_ZN6S563C53v64Ev");}
void  S563C5 ::v65(){vfunc_called(this, "_ZN6S563C53v65Ev");}
void  S563C5 ::v66(){vfunc_called(this, "_ZN6S563C53v66Ev");}
void  S563C5 ::v67(){vfunc_called(this, "_ZN6S563C53v67Ev");}
S563C5 ::S563C5(){ note_ctor("S563C5", this);} // tgen

static void Test_S563C5()
{
  extern Class_Descriptor cd_S563C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S563C5, buf);
    S563C5 *dp, &lv = *(dp=new (buf) S563C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S563C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S563C5)");
    check_field_offset(lv, s563c5f0, ABISELECT(8,4), "S563C5.s563c5f0");
    check_field_offset(lv, s563c5f1, ABISELECT(16,8), "S563C5.s563c5f1");
    check_field_offset(lv, s563c5f2, ABISELECT(24,16), "S563C5.s563c5f2");
    check_field_offset(lv, s563c5f3, ABISELECT(56,32), "S563C5.s563c5f3");
    check_field_offset(lv, s563c5f4, ABISELECT(64,40), "S563C5.s563c5f4");
    check_field_offset(lv, s563c5f5, ABISELECT(72,44), "S563C5.s563c5f5");
    check_field_offset(lv, s563c5f6, ABISELECT(80,52), "S563C5.s563c5f6");
    test_class_info(&lv, &cd_S563C5);
    dp->~S563C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS563C5(Test_S563C5, "S563C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S563C5C1Ev();
extern void _ZN6S563C5D1Ev();
Name_Map name_map_S563C5[] = {
  NSPAIR(_ZN6S563C5C1Ev),
  NSPAIR(_ZN6S563C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S563C5[];
extern void _ZN6S563C5D1Ev();
extern void _ZN6S563C5D0Ev();
extern void _ZN6S563C52v4Ev();
extern void _ZN6S563C52v5Ev();
extern void _ZN6S563C52v6Ev();
extern void _ZN6S563C52v7Ev();
extern void _ZN6S563C52v8Ev();
extern void _ZN6S563C52v9Ev();
extern void _ZN6S563C53v10Ev();
extern void _ZN6S563C53v11Ev();
extern void _ZN6S563C53v12Ev();
extern void _ZN6S563C53v13Ev();
extern void _ZN6S563C53v14Ev();
extern void _ZN6S563C53v15Ev();
extern void _ZN6S563C53v16Ev();
extern void _ZN6S563C53v17Ev();
extern void _ZN6S563C53v18Ev();
extern void _ZN6S563C53v19Ev();
extern void _ZN6S563C53v20Ev();
extern void _ZN6S563C53v21Ev();
extern void _ZN6S563C53v22Ev();
extern void _ZN6S563C53v23Ev();
extern void _ZN6S563C53v24Ev();
extern void _ZN6S563C53v25Ev();
extern void _ZN6S563C53v26Ev();
extern void _ZN6S563C53v27Ev();
extern void _ZN6S563C53v28Ev();
extern void _ZN6S563C53v29Ev();
extern void _ZN6S563C53v30Ev();
extern void _ZN6S563C53v31Ev();
extern void _ZN6S563C53v32Ev();
extern void _ZN6S563C53v33Ev();
extern void _ZN6S563C53v34Ev();
extern void _ZN6S563C53v35Ev();
extern void _ZN6S563C53v36Ev();
extern void _ZN6S563C53v37Ev();
extern void _ZN6S563C53v38Ev();
extern void _ZN6S563C53v39Ev();
extern void _ZN6S563C53v40Ev();
extern void _ZN6S563C53v41Ev();
extern void _ZN6S563C53v42Ev();
extern void _ZN6S563C53v43Ev();
extern void _ZN6S563C53v44Ev();
extern void _ZN6S563C53v45Ev();
extern void _ZN6S563C53v46Ev();
extern void _ZN6S563C53v47Ev();
extern void _ZN6S563C53v48Ev();
extern void _ZN6S563C53v49Ev();
extern void _ZN6S563C53v50Ev();
extern void _ZN6S563C53v51Ev();
extern void _ZN6S563C53v52Ev();
extern void _ZN6S563C53v53Ev();
extern void _ZN6S563C53v54Ev();
extern void _ZN6S563C53v55Ev();
extern void _ZN6S563C53v56Ev();
extern void _ZN6S563C53v57Ev();
extern void _ZN6S563C53v58Ev();
extern void _ZN6S563C53v59Ev();
extern void _ZN6S563C53v60Ev();
extern void _ZN6S563C53v61Ev();
extern void _ZN6S563C53v62Ev();
extern void _ZN6S563C53v63Ev();
extern void _ZN6S563C53v64Ev();
extern void _ZN6S563C53v65Ev();
extern void _ZN6S563C53v66Ev();
extern void _ZN6S563C53v67Ev();
static  VTBL_ENTRY vtc_S563C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S563C5[0]),
  (VTBL_ENTRY)&_ZN6S563C5D1Ev,
  (VTBL_ENTRY)&_ZN6S563C5D0Ev,
  (VTBL_ENTRY)&_ZN6S563C52v4Ev,
  (VTBL_ENTRY)&_ZN6S563C52v5Ev,
  (VTBL_ENTRY)&_ZN6S563C52v6Ev,
  (VTBL_ENTRY)&_ZN6S563C52v7Ev,
  (VTBL_ENTRY)&_ZN6S563C52v8Ev,
  (VTBL_ENTRY)&_ZN6S563C52v9Ev,
  (VTBL_ENTRY)&_ZN6S563C53v10Ev,
  (VTBL_ENTRY)&_ZN6S563C53v11Ev,
  (VTBL_ENTRY)&_ZN6S563C53v12Ev,
  (VTBL_ENTRY)&_ZN6S563C53v13Ev,
  (VTBL_ENTRY)&_ZN6S563C53v14Ev,
  (VTBL_ENTRY)&_ZN6S563C53v15Ev,
  (VTBL_ENTRY)&_ZN6S563C53v16Ev,
  (VTBL_ENTRY)&_ZN6S563C53v17Ev,
  (VTBL_ENTRY)&_ZN6S563C53v18Ev,
  (VTBL_ENTRY)&_ZN6S563C53v19Ev,
  (VTBL_ENTRY)&_ZN6S563C53v20Ev,
  (VTBL_ENTRY)&_ZN6S563C53v21Ev,
  (VTBL_ENTRY)&_ZN6S563C53v22Ev,
  (VTBL_ENTRY)&_ZN6S563C53v23Ev,
  (VTBL_ENTRY)&_ZN6S563C53v24Ev,
  (VTBL_ENTRY)&_ZN6S563C53v25Ev,
  (VTBL_ENTRY)&_ZN6S563C53v26Ev,
  (VTBL_ENTRY)&_ZN6S563C53v27Ev,
  (VTBL_ENTRY)&_ZN6S563C53v28Ev,
  (VTBL_ENTRY)&_ZN6S563C53v29Ev,
  (VTBL_ENTRY)&_ZN6S563C53v30Ev,
  (VTBL_ENTRY)&_ZN6S563C53v31Ev,
  (VTBL_ENTRY)&_ZN6S563C53v32Ev,
  (VTBL_ENTRY)&_ZN6S563C53v33Ev,
  (VTBL_ENTRY)&_ZN6S563C53v34Ev,
  (VTBL_ENTRY)&_ZN6S563C53v35Ev,
  (VTBL_ENTRY)&_ZN6S563C53v36Ev,
  (VTBL_ENTRY)&_ZN6S563C53v37Ev,
  (VTBL_ENTRY)&_ZN6S563C53v38Ev,
  (VTBL_ENTRY)&_ZN6S563C53v39Ev,
  (VTBL_ENTRY)&_ZN6S563C53v40Ev,
  (VTBL_ENTRY)&_ZN6S563C53v41Ev,
  (VTBL_ENTRY)&_ZN6S563C53v42Ev,
  (VTBL_ENTRY)&_ZN6S563C53v43Ev,
  (VTBL_ENTRY)&_ZN6S563C53v44Ev,
  (VTBL_ENTRY)&_ZN6S563C53v45Ev,
  (VTBL_ENTRY)&_ZN6S563C53v46Ev,
  (VTBL_ENTRY)&_ZN6S563C53v47Ev,
  (VTBL_ENTRY)&_ZN6S563C53v48Ev,
  (VTBL_ENTRY)&_ZN6S563C53v49Ev,
  (VTBL_ENTRY)&_ZN6S563C53v50Ev,
  (VTBL_ENTRY)&_ZN6S563C53v51Ev,
  (VTBL_ENTRY)&_ZN6S563C53v52Ev,
  (VTBL_ENTRY)&_ZN6S563C53v53Ev,
  (VTBL_ENTRY)&_ZN6S563C53v54Ev,
  (VTBL_ENTRY)&_ZN6S563C53v55Ev,
  (VTBL_ENTRY)&_ZN6S563C53v56Ev,
  (VTBL_ENTRY)&_ZN6S563C53v57Ev,
  (VTBL_ENTRY)&_ZN6S563C53v58Ev,
  (VTBL_ENTRY)&_ZN6S563C53v59Ev,
  (VTBL_ENTRY)&_ZN6S563C53v60Ev,
  (VTBL_ENTRY)&_ZN6S563C53v61Ev,
  (VTBL_ENTRY)&_ZN6S563C53v62Ev,
  (VTBL_ENTRY)&_ZN6S563C53v63Ev,
  (VTBL_ENTRY)&_ZN6S563C53v64Ev,
  (VTBL_ENTRY)&_ZN6S563C53v65Ev,
  (VTBL_ENTRY)&_ZN6S563C53v66Ev,
  (VTBL_ENTRY)&_ZN6S563C53v67Ev,
};
extern VTBL_ENTRY _ZTI6S563C5[];
extern  VTBL_ENTRY _ZTV6S563C5[];
Class_Descriptor cd_S563C5 = {  "S563C5", // class name
  0,0,//no base classes
  &(vtc_S563C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S563C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S563C5),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  S563C4  : S563C5 {
  void *s563c4f0;
  ::S615C22_nt s563c4f1;
  ::S615C17_nt s563c4f2;
  ::S165C27 s563c4f3;
  ::S615C12_nt s563c4f4;
  int s563c4f5;
  unsigned int s563c4f6:1;
  unsigned int s563c4f7:1;
  unsigned int s563c4f8:1;
  unsigned int s563c4f9:1;
  int s563c4f10[11];
  virtual  ~S563C4(); // _ZN6S563C4D1Ev
  virtual void  v68(); // _ZN6S563C43v68Ev
  virtual void  v69(); // _ZN6S563C43v69Ev
  virtual void  v70(); // _ZN6S563C43v70Ev
  virtual void  v71(); // _ZN6S563C43v71Ev
  virtual void  v72(); // _ZN6S563C43v72Ev
  virtual void  v73(); // _ZN6S563C43v73Ev
  virtual void  v74(); // _ZN6S563C43v74Ev
  virtual void  v75(); // _ZN6S563C43v75Ev
  virtual void  v76(); // _ZN6S563C43v76Ev
  virtual void  v77(); // _ZN6S563C43v77Ev
  virtual void  v78(); // _ZN6S563C43v78Ev
  virtual void  v79(); // _ZN6S563C43v79Ev
  virtual void  v80(); // _ZN6S563C43v80Ev
  virtual void  v81(); // _ZN6S563C43v81Ev
  virtual void  v82(); // _ZN6S563C43v82Ev
  virtual void  v83(); // _ZN6S563C43v83Ev
  virtual void  v84(); // _ZN6S563C43v84Ev
  virtual void  v85(); // _ZN6S563C43v85Ev
  virtual void  v86(); // _ZN6S563C43v86Ev
  virtual void  v87(); // _ZN6S563C43v87Ev
  virtual void  v88(); // _ZN6S563C43v88Ev
  virtual void  v89(); // _ZN6S563C43v89Ev
  virtual void  v90(); // _ZN6S563C43v90Ev
  virtual void  v91(); // _ZN6S563C43v91Ev
  virtual void  v92(); // _ZN6S563C43v92Ev
  virtual void  v93(); // _ZN6S563C43v93Ev
  virtual void  v94(); // _ZN6S563C43v94Ev
  S563C4(); // tgen
};
//SIG(-1 S563C4) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S563C4 ::~S563C4(){ note_dtor("S563C4", this);}
void  S563C4 ::v68(){vfunc_called(this, "_ZN6S563C43v68Ev");}
void  S563C4 ::v69(){vfunc_called(this, "_ZN6S563C43v69Ev");}
void  S563C4 ::v70(){vfunc_called(this, "_ZN6S563C43v70Ev");}
void  S563C4 ::v71(){vfunc_called(this, "_ZN6S563C43v71Ev");}
void  S563C4 ::v72(){vfunc_called(this, "_ZN6S563C43v72Ev");}
void  S563C4 ::v73(){vfunc_called(this, "_ZN6S563C43v73Ev");}
void  S563C4 ::v74(){vfunc_called(this, "_ZN6S563C43v74Ev");}
void  S563C4 ::v75(){vfunc_called(this, "_ZN6S563C43v75Ev");}
void  S563C4 ::v76(){vfunc_called(this, "_ZN6S563C43v76Ev");}
void  S563C4 ::v77(){vfunc_called(this, "_ZN6S563C43v77Ev");}
void  S563C4 ::v78(){vfunc_called(this, "_ZN6S563C43v78Ev");}
void  S563C4 ::v79(){vfunc_called(this, "_ZN6S563C43v79Ev");}
void  S563C4 ::v80(){vfunc_called(this, "_ZN6S563C43v80Ev");}
void  S563C4 ::v81(){vfunc_called(this, "_ZN6S563C43v81Ev");}
void  S563C4 ::v82(){vfunc_called(this, "_ZN6S563C43v82Ev");}
void  S563C4 ::v83(){vfunc_called(this, "_ZN6S563C43v83Ev");}
void  S563C4 ::v84(){vfunc_called(this, "_ZN6S563C43v84Ev");}
void  S563C4 ::v85(){vfunc_called(this, "_ZN6S563C43v85Ev");}
void  S563C4 ::v86(){vfunc_called(this, "_ZN6S563C43v86Ev");}
void  S563C4 ::v87(){vfunc_called(this, "_ZN6S563C43v87Ev");}
void  S563C4 ::v88(){vfunc_called(this, "_ZN6S563C43v88Ev");}
void  S563C4 ::v89(){vfunc_called(this, "_ZN6S563C43v89Ev");}
void  S563C4 ::v90(){vfunc_called(this, "_ZN6S563C43v90Ev");}
void  S563C4 ::v91(){vfunc_called(this, "_ZN6S563C43v91Ev");}
void  S563C4 ::v92(){vfunc_called(this, "_ZN6S563C43v92Ev");}
void  S563C4 ::v93(){vfunc_called(this, "_ZN6S563C43v93Ev");}
void  S563C4 ::v94(){vfunc_called(this, "_ZN6S563C43v94Ev");}
S563C4 ::S563C4(){ note_ctor("S563C4", this);} // tgen

static void Test_S563C4()
{
  extern Class_Descriptor cd_S563C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S563C4, buf);
    S563C4 *dp, &lv = *(dp=new (buf) S563C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S563C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S563C4)");
    check_base_class_offset(lv, (S563C5*), 0, "S563C4");
    check_field_offset(lv, s563c4f0, ABISELECT(96,60), "S563C4.s563c4f0");
    check_field_offset(lv, s563c4f1, ABISELECT(104,64), "S563C4.s563c4f1");
    check_field_offset(lv, s563c4f2, ABISELECT(120,76), "S563C4.s563c4f2");
    check_field_offset(lv, s563c4f3, ABISELECT(128,84), "S563C4.s563c4f3");
    check_field_offset(lv, s563c4f4, ABISELECT(144,96), "S563C4.s563c4f4");
    check_field_offset(lv, s563c4f5, ABISELECT(176,128), "S563C4.s563c4f5");
    set_bf_and_test(lv, s563c4f6, ABISELECT(180,132), 0, 1, 1, "S563C4");
    set_bf_and_test(lv, s563c4f7, ABISELECT(180,132), 1, 1, 1, "S563C4");
    set_bf_and_test(lv, s563c4f8, ABISELECT(180,132), 2, 1, 1, "S563C4");
    set_bf_and_test(lv, s563c4f9, ABISELECT(180,132), 3, 1, 1, "S563C4");
    check_field_offset(lv, s563c4f10, ABISELECT(184,136), "S563C4.s563c4f10");
    test_class_info(&lv, &cd_S563C4);
    dp->~S563C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS563C4(Test_S563C4, "S563C4", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S563C4C1Ev();
extern void _ZN6S563C4D1Ev();
Name_Map name_map_S563C4[] = {
  NSPAIR(_ZN6S563C4C1Ev),
  NSPAIR(_ZN6S563C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S563C5;
extern VTBL_ENTRY _ZTI6S563C5[];
extern  VTBL_ENTRY _ZTV6S563C5[];
static Base_Class bases_S563C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S563C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S563C4[];
extern void _ZN6S563C4D1Ev();
extern void _ZN6S563C4D0Ev();
extern void _ZN6S563C52v4Ev();
extern void _ZN6S563C52v5Ev();
extern void _ZN6S563C52v6Ev();
extern void _ZN6S563C52v7Ev();
extern void _ZN6S563C52v8Ev();
extern void _ZN6S563C52v9Ev();
extern void _ZN6S563C53v10Ev();
extern void _ZN6S563C53v11Ev();
extern void _ZN6S563C53v12Ev();
extern void _ZN6S563C53v13Ev();
extern void _ZN6S563C53v14Ev();
extern void _ZN6S563C53v15Ev();
extern void _ZN6S563C53v16Ev();
extern void _ZN6S563C53v17Ev();
extern void _ZN6S563C53v18Ev();
extern void _ZN6S563C53v19Ev();
extern void _ZN6S563C53v20Ev();
extern void _ZN6S563C53v21Ev();
extern void _ZN6S563C53v22Ev();
extern void _ZN6S563C53v23Ev();
extern void _ZN6S563C53v24Ev();
extern void _ZN6S563C53v25Ev();
extern void _ZN6S563C53v26Ev();
extern void _ZN6S563C53v27Ev();
extern void _ZN6S563C53v28Ev();
extern void _ZN6S563C53v29Ev();
extern void _ZN6S563C53v30Ev();
extern void _ZN6S563C53v31Ev();
extern void _ZN6S563C53v32Ev();
extern void _ZN6S563C53v33Ev();
extern void _ZN6S563C53v34Ev();
extern void _ZN6S563C53v35Ev();
extern void _ZN6S563C53v36Ev();
extern void _ZN6S563C53v37Ev();
extern void _ZN6S563C53v38Ev();
extern void _ZN6S563C53v39Ev();
extern void _ZN6S563C53v40Ev();
extern void _ZN6S563C53v41Ev();
extern void _ZN6S563C53v42Ev();
extern void _ZN6S563C53v43Ev();
extern void _ZN6S563C53v44Ev();
extern void _ZN6S563C53v45Ev();
extern void _ZN6S563C53v46Ev();
extern void _ZN6S563C53v47Ev();
extern void _ZN6S563C53v48Ev();
extern void _ZN6S563C53v49Ev();
extern void _ZN6S563C53v50Ev();
extern void _ZN6S563C53v51Ev();
extern void _ZN6S563C53v52Ev();
extern void _ZN6S563C53v53Ev();
extern void _ZN6S563C53v54Ev();
extern void _ZN6S563C53v55Ev();
extern void _ZN6S563C53v56Ev();
extern void _ZN6S563C53v57Ev();
extern void _ZN6S563C53v58Ev();
extern void _ZN6S563C53v59Ev();
extern void _ZN6S563C53v60Ev();
extern void _ZN6S563C53v61Ev();
extern void _ZN6S563C53v62Ev();
extern void _ZN6S563C53v63Ev();
extern void _ZN6S563C53v64Ev();
extern void _ZN6S563C53v65Ev();
extern void _ZN6S563C53v66Ev();
extern void _ZN6S563C53v67Ev();
extern void _ZN6S563C43v68Ev();
extern void _ZN6S563C43v69Ev();
extern void _ZN6S563C43v70Ev();
extern void _ZN6S563C43v71Ev();
extern void _ZN6S563C43v72Ev();
extern void _ZN6S563C43v73Ev();
extern void _ZN6S563C43v74Ev();
extern void _ZN6S563C43v75Ev();
extern void _ZN6S563C43v76Ev();
extern void _ZN6S563C43v77Ev();
extern void _ZN6S563C43v78Ev();
extern void _ZN6S563C43v79Ev();
extern void _ZN6S563C43v80Ev();
extern void _ZN6S563C43v81Ev();
extern void _ZN6S563C43v82Ev();
extern void _ZN6S563C43v83Ev();
extern void _ZN6S563C43v84Ev();
extern void _ZN6S563C43v85Ev();
extern void _ZN6S563C43v86Ev();
extern void _ZN6S563C43v87Ev();
extern void _ZN6S563C43v88Ev();
extern void _ZN6S563C43v89Ev();
extern void _ZN6S563C43v90Ev();
extern void _ZN6S563C43v91Ev();
extern void _ZN6S563C43v92Ev();
extern void _ZN6S563C43v93Ev();
extern void _ZN6S563C43v94Ev();
static  VTBL_ENTRY vtc_S563C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S563C4[0]),
  (VTBL_ENTRY)&_ZN6S563C4D1Ev,
  (VTBL_ENTRY)&_ZN6S563C4D0Ev,
  (VTBL_ENTRY)&_ZN6S563C52v4Ev,
  (VTBL_ENTRY)&_ZN6S563C52v5Ev,
  (VTBL_ENTRY)&_ZN6S563C52v6Ev,
  (VTBL_ENTRY)&_ZN6S563C52v7Ev,
  (VTBL_ENTRY)&_ZN6S563C52v8Ev,
  (VTBL_ENTRY)&_ZN6S563C52v9Ev,
  (VTBL_ENTRY)&_ZN6S563C53v10Ev,
  (VTBL_ENTRY)&_ZN6S563C53v11Ev,
  (VTBL_ENTRY)&_ZN6S563C53v12Ev,
  (VTBL_ENTRY)&_ZN6S563C53v13Ev,
  (VTBL_ENTRY)&_ZN6S563C53v14Ev,
  (VTBL_ENTRY)&_ZN6S563C53v15Ev,
  (VTBL_ENTRY)&_ZN6S563C53v16Ev,
  (VTBL_ENTRY)&_ZN6S563C53v17Ev,
  (VTBL_ENTRY)&_ZN6S563C53v18Ev,
  (VTBL_ENTRY)&_ZN6S563C53v19Ev,
  (VTBL_ENTRY)&_ZN6S563C53v20Ev,
  (VTBL_ENTRY)&_ZN6S563C53v21Ev,
  (VTBL_ENTRY)&_ZN6S563C53v22Ev,
  (VTBL_ENTRY)&_ZN6S563C53v23Ev,
  (VTBL_ENTRY)&_ZN6S563C53v24Ev,
  (VTBL_ENTRY)&_ZN6S563C53v25Ev,
  (VTBL_ENTRY)&_ZN6S563C53v26Ev,
  (VTBL_ENTRY)&_ZN6S563C53v27Ev,
  (VTBL_ENTRY)&_ZN6S563C53v28Ev,
  (VTBL_ENTRY)&_ZN6S563C53v29Ev,
  (VTBL_ENTRY)&_ZN6S563C53v30Ev,
  (VTBL_ENTRY)&_ZN6S563C53v31Ev,
  (VTBL_ENTRY)&_ZN6S563C53v32Ev,
  (VTBL_ENTRY)&_ZN6S563C53v33Ev,
  (VTBL_ENTRY)&_ZN6S563C53v34Ev,
  (VTBL_ENTRY)&_ZN6S563C53v35Ev,
  (VTBL_ENTRY)&_ZN6S563C53v36Ev,
  (VTBL_ENTRY)&_ZN6S563C53v37Ev,
  (VTBL_ENTRY)&_ZN6S563C53v38Ev,
  (VTBL_ENTRY)&_ZN6S563C53v39Ev,
  (VTBL_ENTRY)&_ZN6S563C53v40Ev,
  (VTBL_ENTRY)&_ZN6S563C53v41Ev,
  (VTBL_ENTRY)&_ZN6S563C53v42Ev,
  (VTBL_ENTRY)&_ZN6S563C53v43Ev,
  (VTBL_ENTRY)&_ZN6S563C53v44Ev,
  (VTBL_ENTRY)&_ZN6S563C53v45Ev,
  (VTBL_ENTRY)&_ZN6S563C53v46Ev,
  (VTBL_ENTRY)&_ZN6S563C53v47Ev,
  (VTBL_ENTRY)&_ZN6S563C53v48Ev,
  (VTBL_ENTRY)&_ZN6S563C53v49Ev,
  (VTBL_ENTRY)&_ZN6S563C53v50Ev,
  (VTBL_ENTRY)&_ZN6S563C53v51Ev,
  (VTBL_ENTRY)&_ZN6S563C53v52Ev,
  (VTBL_ENTRY)&_ZN6S563C53v53Ev,
  (VTBL_ENTRY)&_ZN6S563C53v54Ev,
  (VTBL_ENTRY)&_ZN6S563C53v55Ev,
  (VTBL_ENTRY)&_ZN6S563C53v56Ev,
  (VTBL_ENTRY)&_ZN6S563C53v57Ev,
  (VTBL_ENTRY)&_ZN6S563C53v58Ev,
  (VTBL_ENTRY)&_ZN6S563C53v59Ev,
  (VTBL_ENTRY)&_ZN6S563C53v60Ev,
  (VTBL_ENTRY)&_ZN6S563C53v61Ev,
  (VTBL_ENTRY)&_ZN6S563C53v62Ev,
  (VTBL_ENTRY)&_ZN6S563C53v63Ev,
  (VTBL_ENTRY)&_ZN6S563C53v64Ev,
  (VTBL_ENTRY)&_ZN6S563C53v65Ev,
  (VTBL_ENTRY)&_ZN6S563C53v66Ev,
  (VTBL_ENTRY)&_ZN6S563C53v67Ev,
  (VTBL_ENTRY)&_ZN6S563C43v68Ev,
  (VTBL_ENTRY)&_ZN6S563C43v69Ev,
  (VTBL_ENTRY)&_ZN6S563C43v70Ev,
  (VTBL_ENTRY)&_ZN6S563C43v71Ev,
  (VTBL_ENTRY)&_ZN6S563C43v72Ev,
  (VTBL_ENTRY)&_ZN6S563C43v73Ev,
  (VTBL_ENTRY)&_ZN6S563C43v74Ev,
  (VTBL_ENTRY)&_ZN6S563C43v75Ev,
  (VTBL_ENTRY)&_ZN6S563C43v76Ev,
  (VTBL_ENTRY)&_ZN6S563C43v77Ev,
  (VTBL_ENTRY)&_ZN6S563C43v78Ev,
  (VTBL_ENTRY)&_ZN6S563C43v79Ev,
  (VTBL_ENTRY)&_ZN6S563C43v80Ev,
  (VTBL_ENTRY)&_ZN6S563C43v81Ev,
  (VTBL_ENTRY)&_ZN6S563C43v82Ev,
  (VTBL_ENTRY)&_ZN6S563C43v83Ev,
  (VTBL_ENTRY)&_ZN6S563C43v84Ev,
  (VTBL_ENTRY)&_ZN6S563C43v85Ev,
  (VTBL_ENTRY)&_ZN6S563C43v86Ev,
  (VTBL_ENTRY)&_ZN6S563C43v87Ev,
  (VTBL_ENTRY)&_ZN6S563C43v88Ev,
  (VTBL_ENTRY)&_ZN6S563C43v89Ev,
  (VTBL_ENTRY)&_ZN6S563C43v90Ev,
  (VTBL_ENTRY)&_ZN6S563C43v91Ev,
  (VTBL_ENTRY)&_ZN6S563C43v92Ev,
  (VTBL_ENTRY)&_ZN6S563C43v93Ev,
  (VTBL_ENTRY)&_ZN6S563C43v94Ev,
};
extern VTBL_ENTRY _ZTI6S563C4[];
extern  VTBL_ENTRY _ZTV6S563C4[];
Class_Descriptor cd_S563C4 = {  "S563C4", // class name
  bases_S563C4, 1,
  &(vtc_S563C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S563C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S563C4),95, //virtual function table var
  2, // 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  S563C3  : S563C4 {
  ::S615C17_nt s563c3f0;
  int s563c3f1;
  unsigned int s563c3f2:1;
  unsigned int s563c3f3:1;
  unsigned int s563c3f4:1;
  unsigned int s563c3f5:1;
  unsigned int s563c3f6:1;
  unsigned int s563c3f7:1;
  unsigned int s563c3f8:1;
  unsigned int s563c3f9:1;
  unsigned int s563c3f10:1;
  unsigned int s563c3f11:1;
  unsigned int s563c3f12:1;
  unsigned int s563c3f13:1;
  unsigned int s563c3f14:1;
  int s563c3f15[2];
  void *s563c3f16;
  int s563c3f17[2];
  ::S615C17_nt s563c3f18;
  int s563c3f19;
  void *s563c3f20[2];
  char s563c3f21[6];
  virtual  ~S563C3(); // _ZN6S563C3D1Ev
  virtual void  v95(); // _ZN6S563C33v95Ev
  virtual void  v96(); // _ZN6S563C33v96Ev
  virtual void  v97(); // _ZN6S563C33v97Ev
  virtual void  v98(); // _ZN6S563C33v98Ev
  virtual void  v99(); // _ZN6S563C33v99Ev
  virtual void  v100(); // _ZN6S563C34v100Ev
  virtual void  v101(); // _ZN6S563C34v101Ev
  virtual void  v102(); // _ZN6S563C34v102Ev
  virtual void  v103(); // _ZN6S563C34v103Ev
  virtual void  v104(); // _ZN6S563C34v104Ev
  virtual void  v105(); // _ZN6S563C34v105Ev
  virtual void  v106(); // _ZN6S563C34v106Ev
  virtual void  v107(); // _ZN6S563C34v107Ev
  virtual void  v108(); // _ZN6S563C34v108Ev
  virtual void  v109(); // _ZN6S563C34v109Ev
  virtual void  v110(); // _ZN6S563C34v110Ev
  virtual void  v111(); // _ZN6S563C34v111Ev
  virtual void  v112(); // _ZN6S563C34v112Ev
  virtual void  v113(); // _ZN6S563C34v113Ev
  virtual void  v114(); // _ZN6S563C34v114Ev
  virtual void  v115(); // _ZN6S563C34v115Ev
  virtual void  v116(); // _ZN6S563C34v116Ev
  virtual void  v117(); // _ZN6S563C34v117Ev
  virtual void  v118(); // _ZN6S563C34v118Ev
  virtual void  v119(); // _ZN6S563C34v119Ev
  S563C3(); // tgen
};
//SIG(-1 S563C3) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} 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 FC4 Fi 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[2] Fp Fi[2] FC4 Fi Fp[2] Fc[6]}


 S563C3 ::~S563C3(){ note_dtor("S563C3", this);}
void  S563C3 ::v95(){vfunc_called(this, "_ZN6S563C33v95Ev");}
void  S563C3 ::v96(){vfunc_called(this, "_ZN6S563C33v96Ev");}
void  S563C3 ::v97(){vfunc_called(this, "_ZN6S563C33v97Ev");}
void  S563C3 ::v98(){vfunc_called(this, "_ZN6S563C33v98Ev");}
void  S563C3 ::v99(){vfunc_called(this, "_ZN6S563C33v99Ev");}
void  S563C3 ::v100(){vfunc_called(this, "_ZN6S563C34v100Ev");}
void  S563C3 ::v101(){vfunc_called(this, "_ZN6S563C34v101Ev");}
void  S563C3 ::v102(){vfunc_called(this, "_ZN6S563C34v102Ev");}
void  S563C3 ::v103(){vfunc_called(this, "_ZN6S563C34v103Ev");}
void  S563C3 ::v104(){vfunc_called(this, "_ZN6S563C34v104Ev");}
void  S563C3 ::v105(){vfunc_called(this, "_ZN6S563C34v105Ev");}
void  S563C3 ::v106(){vfunc_called(this, "_ZN6S563C34v106Ev");}
void  S563C3 ::v107(){vfunc_called(this, "_ZN6S563C34v107Ev");}
void  S563C3 ::v108(){vfunc_called(this, "_ZN6S563C34v108Ev");}
void  S563C3 ::v109(){vfunc_called(this, "_ZN6S563C34v109Ev");}
void  S563C3 ::v110(){vfunc_called(this, "_ZN6S563C34v110Ev");}
void  S563C3 ::v111(){vfunc_called(this, "_ZN6S563C34v111Ev");}
void  S563C3 ::v112(){vfunc_called(this, "_ZN6S563C34v112Ev");}
void  S563C3 ::v113(){vfunc_called(this, "_ZN6S563C34v113Ev");}
void  S563C3 ::v114(){vfunc_called(this, "_ZN6S563C34v114Ev");}
void  S563C3 ::v115(){vfunc_called(this, "_ZN6S563C34v115Ev");}
void  S563C3 ::v116(){vfunc_called(this, "_ZN6S563C34v116Ev");}
void  S563C3 ::v117(){vfunc_called(this, "_ZN6S563C34v117Ev");}
void  S563C3 ::v118(){vfunc_called(this, "_ZN6S563C34v118Ev");}
void  S563C3 ::v119(){vfunc_called(this, "_ZN6S563C34v119Ev");}
S563C3 ::S563C3(){ note_ctor("S563C3", this);} // tgen

static void Test_S563C3()
{
  extern Class_Descriptor cd_S563C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,62)];
    init_test(&cd_S563C3, buf);
    S563C3 *dp, &lv = *(dp=new (buf) S563C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,244), "sizeof(S563C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S563C3)");
    check_base_class_offset(lv, (S563C5*)(S563C4*), 0, "S563C3");
    check_base_class_offset(lv, (S563C4*), 0, "S563C3");
    check_field_offset(lv, s563c3f0, ABISELECT(228,180), "S563C3.s563c3f0");
    check_field_offset(lv, s563c3f1, ABISELECT(236,188), "S563C3.s563c3f1");
    set_bf_and_test(lv, s563c3f2, ABISELECT(240,192), 0, 1, 1, "S563C3");
    set_bf_and_test(lv, s563c3f3, ABISELECT(240,192), 1, 1, 1, "S563C3");
    set_bf_and_test(lv, s563c3f4, ABISELECT(240,192), 2, 1, 1, "S563C3");
    set_bf_and_test(lv, s563c3f5, ABISELECT(240,192), 3, 1, 1, "S563C3");
    set_bf_and_test(lv, s563c3f6, ABISELECT(240,192), 4, 1, 1, "S563C3");
    set_bf_and_test(lv, s563c3f7, ABISELECT(240,192), 5, 1, 1, "S563C3");
    set_bf_and_test(lv, s563c3f8, ABISELECT(240,192), 6, 1, 1, "S563C3");
    set_bf_and_test(lv, s563c3f9, ABISELECT(240,192), 7, 1, 1, "S563C3");
    set_bf_and_test(lv, s563c3f10, ABISELECT(241,193), 0, 1, 1, "S563C3");
    set_bf_and_test(lv, s563c3f11, ABISELECT(241,193), 1, 1, 1, "S563C3");
    set_bf_and_test(lv, s563c3f12, ABISELECT(241,193), 2, 1, 1, "S563C3");
    set_bf_and_test(lv, s563c3f13, ABISELECT(241,193), 3, 1, 1, "S563C3");
    set_bf_and_test(lv, s563c3f14, ABISELECT(241,193), 4, 1, 1, "S563C3");
    check_field_offset(lv, s563c3f15, ABISELECT(244,196), "S563C3.s563c3f15");
    check_field_offset(lv, s563c3f16, ABISELECT(256,204), "S563C3.s563c3f16");
    check_field_offset(lv, s563c3f17, ABISELECT(264,208), "S563C3.s563c3f17");
    check_field_offset(lv, s563c3f18, ABISELECT(272,216), "S563C3.s563c3f18");
    check_field_offset(lv, s563c3f19, ABISELECT(280,224), "S563C3.s563c3f19");
    check_field_offset(lv, s563c3f20, ABISELECT(288,228), "S563C3.s563c3f20");
    check_field_offset(lv, s563c3f21, ABISELECT(304,236), "S563C3.s563c3f21");
    test_class_info(&lv, &cd_S563C3);
    dp->~S563C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS563C3(Test_S563C3, "S563C3", ABISELECT(312,244));

#else // __cplusplus

extern void _ZN6S563C3C1Ev();
extern void _ZN6S563C3D1Ev();
Name_Map name_map_S563C3[] = {
  NSPAIR(_ZN6S563C3C1Ev),
  NSPAIR(_ZN6S563C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S563C5;
extern VTBL_ENTRY _ZTI6S563C5[];
extern  VTBL_ENTRY _ZTV6S563C5[];
extern Class_Descriptor cd_S563C4;
extern VTBL_ENTRY _ZTI6S563C4[];
extern  VTBL_ENTRY _ZTV6S563C4[];
static Base_Class bases_S563C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S563C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S563C3[];
extern void _ZN6S563C3D1Ev();
extern void _ZN6S563C3D0Ev();
extern void _ZN6S563C52v4Ev();
extern void _ZN6S563C52v5Ev();
extern void _ZN6S563C52v6Ev();
extern void _ZN6S563C52v7Ev();
extern void _ZN6S563C52v8Ev();
extern void _ZN6S563C52v9Ev();
extern void _ZN6S563C53v10Ev();
extern void _ZN6S563C53v11Ev();
extern void _ZN6S563C53v12Ev();
extern void _ZN6S563C53v13Ev();
extern void _ZN6S563C53v14Ev();
extern void _ZN6S563C53v15Ev();
extern void _ZN6S563C53v16Ev();
extern void _ZN6S563C53v17Ev();
extern void _ZN6S563C53v18Ev();
extern void _ZN6S563C53v19Ev();
extern void _ZN6S563C53v20Ev();
extern void _ZN6S563C53v21Ev();
extern void _ZN6S563C53v22Ev();
extern void _ZN6S563C53v23Ev();
extern void _ZN6S563C53v24Ev();
extern void _ZN6S563C53v25Ev();
extern void _ZN6S563C53v26Ev();
extern void _ZN6S563C53v27Ev();
extern void _ZN6S563C53v28Ev();
extern void _ZN6S563C53v29Ev();
extern void _ZN6S563C53v30Ev();
extern void _ZN6S563C53v31Ev();
extern void _ZN6S563C53v32Ev();
extern void _ZN6S563C53v33Ev();
extern void _ZN6S563C53v34Ev();
extern void _ZN6S563C53v35Ev();
extern void _ZN6S563C53v36Ev();
extern void _ZN6S563C53v37Ev();
extern void _ZN6S563C53v38Ev();
extern void _ZN6S563C53v39Ev();
extern void _ZN6S563C53v40Ev();
extern void _ZN6S563C53v41Ev();
extern void _ZN6S563C53v42Ev();
extern void _ZN6S563C53v43Ev();
extern void _ZN6S563C53v44Ev();
extern void _ZN6S563C53v45Ev();
extern void _ZN6S563C53v46Ev();
extern void _ZN6S563C53v47Ev();
extern void _ZN6S563C53v48Ev();
extern void _ZN6S563C53v49Ev();
extern void _ZN6S563C53v50Ev();
extern void _ZN6S563C53v51Ev();
extern void _ZN6S563C53v52Ev();
extern void _ZN6S563C53v53Ev();
extern void _ZN6S563C53v54Ev();
extern void _ZN6S563C53v55Ev();
extern void _ZN6S563C53v56Ev();
extern void _ZN6S563C53v57Ev();
extern void _ZN6S563C53v58Ev();
extern void _ZN6S563C53v59Ev();
extern void _ZN6S563C53v60Ev();
extern void _ZN6S563C53v61Ev();
extern void _ZN6S563C53v62Ev();
extern void _ZN6S563C53v63Ev();
extern void _ZN6S563C53v64Ev();
extern void _ZN6S563C53v65Ev();
extern void _ZN6S563C53v66Ev();
extern void _ZN6S563C53v67Ev();
extern void _ZN6S563C43v68Ev();
extern void _ZN6S563C43v69Ev();
extern void _ZN6S563C43v70Ev();
extern void _ZN6S563C43v71Ev();
extern void _ZN6S563C43v72Ev();
extern void _ZN6S563C43v73Ev();
extern void _ZN6S563C43v74Ev();
extern void _ZN6S563C43v75Ev();
extern void _ZN6S563C43v76Ev();
extern void _ZN6S563C43v77Ev();
extern void _ZN6S563C43v78Ev();
extern void _ZN6S563C43v79Ev();
extern void _ZN6S563C43v80Ev();
extern void _ZN6S563C43v81Ev();
extern void _ZN6S563C43v82Ev();
extern void _ZN6S563C43v83Ev();
extern void _ZN6S563C43v84Ev();
extern void _ZN6S563C43v85Ev();
extern void _ZN6S563C43v86Ev();
extern void _ZN6S563C43v87Ev();
extern void _ZN6S563C43v88Ev();
extern void _ZN6S563C43v89Ev();
extern void _ZN6S563C43v90Ev();
extern void _ZN6S563C43v91Ev();
extern void _ZN6S563C43v92Ev();
extern void _ZN6S563C43v93Ev();
extern void _ZN6S563C43v94Ev();
extern void _ZN6S563C33v95Ev();
extern void _ZN6S563C33v96Ev();
extern void _ZN6S563C33v97Ev();
extern void _ZN6S563C33v98Ev();
extern void _ZN6S563C33v99Ev();
extern void _ZN6S563C34v100Ev();
extern void _ZN6S563C34v101Ev();
extern void _ZN6S563C34v102Ev();
extern void _ZN6S563C34v103Ev();
extern void _ZN6S563C34v104Ev();
extern void _ZN6S563C34v105Ev();
extern void _ZN6S563C34v106Ev();
extern void _ZN6S563C34v107Ev();
extern void _ZN6S563C34v108Ev();
extern void _ZN6S563C34v109Ev();
extern void _ZN6S563C34v110Ev();
extern void _ZN6S563C34v111Ev();
extern void _ZN6S563C34v112Ev();
extern void _ZN6S563C34v113Ev();
extern void _ZN6S563C34v114Ev();
extern void _ZN6S563C34v115Ev();
extern void _ZN6S563C34v116Ev();
extern void _ZN6S563C34v117Ev();
extern void _ZN6S563C34v118Ev();
extern void _ZN6S563C34v119Ev();
static  VTBL_ENTRY vtc_S563C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S563C3[0]),
  (VTBL_ENTRY)&_ZN6S563C3D1Ev,
  (VTBL_ENTRY)&_ZN6S563C3D0Ev,
  (VTBL_ENTRY)&_ZN6S563C52v4Ev,
  (VTBL_ENTRY)&_ZN6S563C52v5Ev,
  (VTBL_ENTRY)&_ZN6S563C52v6Ev,
  (VTBL_ENTRY)&_ZN6S563C52v7Ev,
  (VTBL_ENTRY)&_ZN6S563C52v8Ev,
  (VTBL_ENTRY)&_ZN6S563C52v9Ev,
  (VTBL_ENTRY)&_ZN6S563C53v10Ev,
  (VTBL_ENTRY)&_ZN6S563C53v11Ev,
  (VTBL_ENTRY)&_ZN6S563C53v12Ev,
  (VTBL_ENTRY)&_ZN6S563C53v13Ev,
  (VTBL_ENTRY)&_ZN6S563C53v14Ev,
  (VTBL_ENTRY)&_ZN6S563C53v15Ev,
  (VTBL_ENTRY)&_ZN6S563C53v16Ev,
  (VTBL_ENTRY)&_ZN6S563C53v17Ev,
  (VTBL_ENTRY)&_ZN6S563C53v18Ev,
  (VTBL_ENTRY)&_ZN6S563C53v19Ev,
  (VTBL_ENTRY)&_ZN6S563C53v20Ev,
  (VTBL_ENTRY)&_ZN6S563C53v21Ev,
  (VTBL_ENTRY)&_ZN6S563C53v22Ev,
  (VTBL_ENTRY)&_ZN6S563C53v23Ev,
  (VTBL_ENTRY)&_ZN6S563C53v24Ev,
  (VTBL_ENTRY)&_ZN6S563C53v25Ev,
  (VTBL_ENTRY)&_ZN6S563C53v26Ev,
  (VTBL_ENTRY)&_ZN6S563C53v27Ev,
  (VTBL_ENTRY)&_ZN6S563C53v28Ev,
  (VTBL_ENTRY)&_ZN6S563C53v29Ev,
  (VTBL_ENTRY)&_ZN6S563C53v30Ev,
  (VTBL_ENTRY)&_ZN6S563C53v31Ev,
  (VTBL_ENTRY)&_ZN6S563C53v32Ev,
  (VTBL_ENTRY)&_ZN6S563C53v33Ev,
  (VTBL_ENTRY)&_ZN6S563C53v34Ev,
  (VTBL_ENTRY)&_ZN6S563C53v35Ev,
  (VTBL_ENTRY)&_ZN6S563C53v36Ev,
  (VTBL_ENTRY)&_ZN6S563C53v37Ev,
  (VTBL_ENTRY)&_ZN6S563C53v38Ev,
  (VTBL_ENTRY)&_ZN6S563C53v39Ev,
  (VTBL_ENTRY)&_ZN6S563C53v40Ev,
  (VTBL_ENTRY)&_ZN6S563C53v41Ev,
  (VTBL_ENTRY)&_ZN6S563C53v42Ev,
  (VTBL_ENTRY)&_ZN6S563C53v43Ev,
  (VTBL_ENTRY)&_ZN6S563C53v44Ev,
  (VTBL_ENTRY)&_ZN6S563C53v45Ev,
  (VTBL_ENTRY)&_ZN6S563C53v46Ev,
  (VTBL_ENTRY)&_ZN6S563C53v47Ev,
  (VTBL_ENTRY)&_ZN6S563C53v48Ev,
  (VTBL_ENTRY)&_ZN6S563C53v49Ev,
  (VTBL_ENTRY)&_ZN6S563C53v50Ev,
  (VTBL_ENTRY)&_ZN6S563C53v51Ev,
  (VTBL_ENTRY)&_ZN6S563C53v52Ev,
  (VTBL_ENTRY)&_ZN6S563C53v53Ev,
  (VTBL_ENTRY)&_ZN6S563C53v54Ev,
  (VTBL_ENTRY)&_ZN6S563C53v55Ev,
  (VTBL_ENTRY)&_ZN6S563C53v56Ev,
  (VTBL_ENTRY)&_ZN6S563C53v57Ev,
  (VTBL_ENTRY)&_ZN6S563C53v58Ev,
  (VTBL_ENTRY)&_ZN6S563C53v59Ev,
  (VTBL_ENTRY)&_ZN6S563C53v60Ev,
  (VTBL_ENTRY)&_ZN6S563C53v61Ev,
  (VTBL_ENTRY)&_ZN6S563C53v62Ev,
  (VTBL_ENTRY)&_ZN6S563C53v63Ev,
  (VTBL_ENTRY)&_ZN6S563C53v64Ev,
  (VTBL_ENTRY)&_ZN6S563C53v65Ev,
  (VTBL_ENTRY)&_ZN6S563C53v66Ev,
  (VTBL_ENTRY)&_ZN6S563C53v67Ev,
  (VTBL_ENTRY)&_ZN6S563C43v68Ev,
  (VTBL_ENTRY)&_ZN6S563C43v69Ev,
  (VTBL_ENTRY)&_ZN6S563C43v70Ev,
  (VTBL_ENTRY)&_ZN6S563C43v71Ev,
  (VTBL_ENTRY)&_ZN6S563C43v72Ev,
  (VTBL_ENTRY)&_ZN6S563C43v73Ev,
  (VTBL_ENTRY)&_ZN6S563C43v74Ev,
  (VTBL_ENTRY)&_ZN6S563C43v75Ev,
  (VTBL_ENTRY)&_ZN6S563C43v76Ev,
  (VTBL_ENTRY)&_ZN6S563C43v77Ev,
  (VTBL_ENTRY)&_ZN6S563C43v78Ev,
  (VTBL_ENTRY)&_ZN6S563C43v79Ev,
  (VTBL_ENTRY)&_ZN6S563C43v80Ev,
  (VTBL_ENTRY)&_ZN6S563C43v81Ev,
  (VTBL_ENTRY)&_ZN6S563C43v82Ev,
  (VTBL_ENTRY)&_ZN6S563C43v83Ev,
  (VTBL_ENTRY)&_ZN6S563C43v84Ev,
  (VTBL_ENTRY)&_ZN6S563C43v85Ev,
  (VTBL_ENTRY)&_ZN6S563C43v86Ev,
  (VTBL_ENTRY)&_ZN6S563C43v87Ev,
  (VTBL_ENTRY)&_ZN6S563C43v88Ev,
  (VTBL_ENTRY)&_ZN6S563C43v89Ev,
  (VTBL_ENTRY)&_ZN6S563C43v90Ev,
  (VTBL_ENTRY)&_ZN6S563C43v91Ev,
  (VTBL_ENTRY)&_ZN6S563C43v92Ev,
  (VTBL_ENTRY)&_ZN6S563C43v93Ev,
  (VTBL_ENTRY)&_ZN6S563C43v94Ev,
  (VTBL_ENTRY)&_ZN6S563C33v95Ev,
  (VTBL_ENTRY)&_ZN6S563C33v96Ev,
  (VTBL_ENTRY)&_ZN6S563C33v97Ev,
  (VTBL_ENTRY)&_ZN6S563C33v98Ev,
  (VTBL_ENTRY)&_ZN6S563C33v99Ev,
  (VTBL_ENTRY)&_ZN6S563C34v100Ev,
  (VTBL_ENTRY)&_ZN6S563C34v101Ev,
  (VTBL_ENTRY)&_ZN6S563C34v102Ev,
  (VTBL_ENTRY)&_ZN6S563C34v103Ev,
  (VTBL_ENTRY)&_ZN6S563C34v104Ev,
  (VTBL_ENTRY)&_ZN6S563C34v105Ev,
  (VTBL_ENTRY)&_ZN6S563C34v106Ev,
  (VTBL_ENTRY)&_ZN6S563C34v107Ev,
  (VTBL_ENTRY)&_ZN6S563C34v108Ev,
  (VTBL_ENTRY)&_ZN6S563C34v109Ev,
  (VTBL_ENTRY)&_ZN6S563C34v110Ev,
  (VTBL_ENTRY)&_ZN6S563C34v111Ev,
  (VTBL_ENTRY)&_ZN6S563C34v112Ev,
  (VTBL_ENTRY)&_ZN6S563C34v113Ev,
  (VTBL_ENTRY)&_ZN6S563C34v114Ev,
  (VTBL_ENTRY)&_ZN6S563C34v115Ev,
  (VTBL_ENTRY)&_ZN6S563C34v116Ev,
  (VTBL_ENTRY)&_ZN6S563C34v117Ev,
  (VTBL_ENTRY)&_ZN6S563C34v118Ev,
  (VTBL_ENTRY)&_ZN6S563C34v119Ev,
};
extern VTBL_ENTRY _ZTI6S563C3[];
extern  VTBL_ENTRY _ZTV6S563C3[];
Class_Descriptor cd_S563C3 = {  "S563C3", // class name
  bases_S563C3, 2,
  &(vtc_S563C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,244), // object size
  NSPAIRA(_ZTI6S563C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S563C3),120, //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  S563C2  : S563C3 {
  unsigned int s563c2f0:1;
  unsigned int s563c2f1:1;
  ::S165C25 s563c2f2;
  virtual  ~S563C2(); // _ZN6S563C2D1Ev
  virtual void  v120(); // _ZN6S563C24v120Ev
  virtual void  v121(); // _ZN6S563C24v121Ev
  virtual void  v122(); // _ZN6S563C24v122Ev
  virtual void  v123(); // _ZN6S563C24v123Ev
  virtual void  v124(); // _ZN6S563C24v124Ev
  S563C2(); // tgen
};
//SIG(-1 S563C2) C1{ BC2{ BC3{ BC4{ 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 FC5{ 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 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd 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 FC5 Fi 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[2] Fp Fi[2] FC5 Fi Fp[2] Fc[6]} vd v1 v2 v3 v4 v5 Fi:1 Fi:1 FC14{ BC15{ BC8}}}


 S563C2 ::~S563C2(){ note_dtor("S563C2", this);}
void  S563C2 ::v120(){vfunc_called(this, "_ZN6S563C24v120Ev");}
void  S563C2 ::v121(){vfunc_called(this, "_ZN6S563C24v121Ev");}
void  S563C2 ::v122(){vfunc_called(this, "_ZN6S563C24v122Ev");}
void  S563C2 ::v123(){vfunc_called(this, "_ZN6S563C24v123Ev");}
void  S563C2 ::v124(){vfunc_called(this, "_ZN6S563C24v124Ev");}
S563C2 ::S563C2(){ note_ctor("S563C2", this);} // tgen

static void Test_S563C2()
{
  extern Class_Descriptor cd_S563C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,65)];
    init_test(&cd_S563C2, buf);
    S563C2 *dp, &lv = *(dp=new (buf) S563C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,256), "sizeof(S563C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S563C2)");
    check_base_class_offset(lv, (S563C5*)(S563C4*)(S563C3*), 0, "S563C2");
    check_base_class_offset(lv, (S563C4*)(S563C3*), 0, "S563C2");
    check_base_class_offset(lv, (S563C3*), 0, "S563C2");
    set_bf_and_test(lv, s563c2f0, ABISELECT(310,242), 0, 1, 1, "S563C2");
    set_bf_and_test(lv, s563c2f1, ABISELECT(310,242), 1, 1, 1, "S563C2");
    check_field_offset(lv, s563c2f2, ABISELECT(312,244), "S563C2.s563c2f2");
    test_class_info(&lv, &cd_S563C2);
    dp->~S563C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS563C2(Test_S563C2, "S563C2", ABISELECT(328,256));

#else // __cplusplus

extern void _ZN6S563C2C1Ev();
extern void _ZN6S563C2D1Ev();
Name_Map name_map_S563C2[] = {
  NSPAIR(_ZN6S563C2C1Ev),
  NSPAIR(_ZN6S563C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S563C5;
extern VTBL_ENTRY _ZTI6S563C5[];
extern  VTBL_ENTRY _ZTV6S563C5[];
extern Class_Descriptor cd_S563C4;
extern VTBL_ENTRY _ZTI6S563C4[];
extern  VTBL_ENTRY _ZTV6S563C4[];
extern Class_Descriptor cd_S563C3;
extern VTBL_ENTRY _ZTI6S563C3[];
extern  VTBL_ENTRY _ZTV6S563C3[];
static Base_Class bases_S563C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S563C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S563C2[];
extern void _ZN6S563C2D1Ev();
extern void _ZN6S563C2D0Ev();
extern void _ZN6S563C52v4Ev();
extern void _ZN6S563C52v5Ev();
extern void _ZN6S563C52v6Ev();
extern void _ZN6S563C52v7Ev();
extern void _ZN6S563C52v8Ev();
extern void _ZN6S563C52v9Ev();
extern void _ZN6S563C53v10Ev();
extern void _ZN6S563C53v11Ev();
extern void _ZN6S563C53v12Ev();
extern void _ZN6S563C53v13Ev();
extern void _ZN6S563C53v14Ev();
extern void _ZN6S563C53v15Ev();
extern void _ZN6S563C53v16Ev();
extern void _ZN6S563C53v17Ev();
extern void _ZN6S563C53v18Ev();
extern void _ZN6S563C53v19Ev();
extern void _ZN6S563C53v20Ev();
extern void _ZN6S563C53v21Ev();
extern void _ZN6S563C53v22Ev();
extern void _ZN6S563C53v23Ev();
extern void _ZN6S563C53v24Ev();
extern void _ZN6S563C53v25Ev();
extern void _ZN6S563C53v26Ev();
extern void _ZN6S563C53v27Ev();
extern void _ZN6S563C53v28Ev();
extern void _ZN6S563C53v29Ev();
extern void _ZN6S563C53v30Ev();
extern void _ZN6S563C53v31Ev();
extern void _ZN6S563C53v32Ev();
extern void _ZN6S563C53v33Ev();
extern void _ZN6S563C53v34Ev();
extern void _ZN6S563C53v35Ev();
extern void _ZN6S563C53v36Ev();
extern void _ZN6S563C53v37Ev();
extern void _ZN6S563C53v38Ev();
extern void _ZN6S563C53v39Ev();
extern void _ZN6S563C53v40Ev();
extern void _ZN6S563C53v41Ev();
extern void _ZN6S563C53v42Ev();
extern void _ZN6S563C53v43Ev();
extern void _ZN6S563C53v44Ev();
extern void _ZN6S563C53v45Ev();
extern void _ZN6S563C53v46Ev();
extern void _ZN6S563C53v47Ev();
extern void _ZN6S563C53v48Ev();
extern void _ZN6S563C53v49Ev();
extern void _ZN6S563C53v50Ev();
extern void _ZN6S563C53v51Ev();
extern void _ZN6S563C53v52Ev();
extern void _ZN6S563C53v53Ev();
extern void _ZN6S563C53v54Ev();
extern void _ZN6S563C53v55Ev();
extern void _ZN6S563C53v56Ev();
extern void _ZN6S563C53v57Ev();
extern void _ZN6S563C53v58Ev();
extern void _ZN6S563C53v59Ev();
extern void _ZN6S563C53v60Ev();
extern void _ZN6S563C53v61Ev();
extern void _ZN6S563C53v62Ev();
extern void _ZN6S563C53v63Ev();
extern void _ZN6S563C53v64Ev();
extern void _ZN6S563C53v65Ev();
extern void _ZN6S563C53v66Ev();
extern void _ZN6S563C53v67Ev();
extern void _ZN6S563C43v68Ev();
extern void _ZN6S563C43v69Ev();
extern void _ZN6S563C43v70Ev();
extern void _ZN6S563C43v71Ev();
extern void _ZN6S563C43v72Ev();
extern void _ZN6S563C43v73Ev();
extern void _ZN6S563C43v74Ev();
extern void _ZN6S563C43v75Ev();
extern void _ZN6S563C43v76Ev();
extern void _ZN6S563C43v77Ev();
extern void _ZN6S563C43v78Ev();
extern void _ZN6S563C43v79Ev();
extern void _ZN6S563C43v80Ev();
extern void _ZN6S563C43v81Ev();
extern void _ZN6S563C43v82Ev();
extern void _ZN6S563C43v83Ev();
extern void _ZN6S563C43v84Ev();
extern void _ZN6S563C43v85Ev();
extern void _ZN6S563C43v86Ev();
extern void _ZN6S563C43v87Ev();
extern void _ZN6S563C43v88Ev();
extern void _ZN6S563C43v89Ev();
extern void _ZN6S563C43v90Ev();
extern void _ZN6S563C43v91Ev();
extern void _ZN6S563C43v92Ev();
extern void _ZN6S563C43v93Ev();
extern void _ZN6S563C43v94Ev();
extern void _ZN6S563C33v95Ev();
extern void _ZN6S563C33v96Ev();
extern void _ZN6S563C33v97Ev();
extern void _ZN6S563C33v98Ev();
extern void _ZN6S563C33v99Ev();
extern void _ZN6S563C34v100Ev();
extern void _ZN6S563C34v101Ev();
extern void _ZN6S563C34v102Ev();
extern void _ZN6S563C34v103Ev();
extern void _ZN6S563C34v104Ev();
extern void _ZN6S563C34v105Ev();
extern void _ZN6S563C34v106Ev();
extern void _ZN6S563C34v107Ev();
extern void _ZN6S563C34v108Ev();
extern void _ZN6S563C34v109Ev();
extern void _ZN6S563C34v110Ev();
extern void _ZN6S563C34v111Ev();
extern void _ZN6S563C34v112Ev();
extern void _ZN6S563C34v113Ev();
extern void _ZN6S563C34v114Ev();
extern void _ZN6S563C34v115Ev();
extern void _ZN6S563C34v116Ev();
extern void _ZN6S563C34v117Ev();
extern void _ZN6S563C34v118Ev();
extern void _ZN6S563C34v119Ev();
extern void _ZN6S563C24v120Ev();
extern void _ZN6S563C24v121Ev();
extern void _ZN6S563C24v122Ev();
extern void _ZN6S563C24v123Ev();
extern void _ZN6S563C24v124Ev();
static  VTBL_ENTRY vtc_S563C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S563C2[0]),
  (VTBL_ENTRY)&_ZN6S563C2D1Ev,
  (VTBL_ENTRY)&_ZN6S563C2D0Ev,
  (VTBL_ENTRY)&_ZN6S563C52v4Ev,
  (VTBL_ENTRY)&_ZN6S563C52v5Ev,
  (VTBL_ENTRY)&_ZN6S563C52v6Ev,
  (VTBL_ENTRY)&_ZN6S563C52v7Ev,
  (VTBL_ENTRY)&_ZN6S563C52v8Ev,
  (VTBL_ENTRY)&_ZN6S563C52v9Ev,
  (VTBL_ENTRY)&_ZN6S563C53v10Ev,
  (VTBL_ENTRY)&_ZN6S563C53v11Ev,
  (VTBL_ENTRY)&_ZN6S563C53v12Ev,
  (VTBL_ENTRY)&_ZN6S563C53v13Ev,
  (VTBL_ENTRY)&_ZN6S563C53v14Ev,
  (VTBL_ENTRY)&_ZN6S563C53v15Ev,
  (VTBL_ENTRY)&_ZN6S563C53v16Ev,
  (VTBL_ENTRY)&_ZN6S563C53v17Ev,
  (VTBL_ENTRY)&_ZN6S563C53v18Ev,
  (VTBL_ENTRY)&_ZN6S563C53v19Ev,
  (VTBL_ENTRY)&_ZN6S563C53v20Ev,
  (VTBL_ENTRY)&_ZN6S563C53v21Ev,
  (VTBL_ENTRY)&_ZN6S563C53v22Ev,
  (VTBL_ENTRY)&_ZN6S563C53v23Ev,
  (VTBL_ENTRY)&_ZN6S563C53v24Ev,
  (VTBL_ENTRY)&_ZN6S563C53v25Ev,
  (VTBL_ENTRY)&_ZN6S563C53v26Ev,
  (VTBL_ENTRY)&_ZN6S563C53v27Ev,
  (VTBL_ENTRY)&_ZN6S563C53v28Ev,
  (VTBL_ENTRY)&_ZN6S563C53v29Ev,
  (VTBL_ENTRY)&_ZN6S563C53v30Ev,
  (VTBL_ENTRY)&_ZN6S563C53v31Ev,
  (VTBL_ENTRY)&_ZN6S563C53v32Ev,
  (VTBL_ENTRY)&_ZN6S563C53v33Ev,
  (VTBL_ENTRY)&_ZN6S563C53v34Ev,
  (VTBL_ENTRY)&_ZN6S563C53v35Ev,
  (VTBL_ENTRY)&_ZN6S563C53v36Ev,
  (VTBL_ENTRY)&_ZN6S563C53v37Ev,
  (VTBL_ENTRY)&_ZN6S563C53v38Ev,
  (VTBL_ENTRY)&_ZN6S563C53v39Ev,
  (VTBL_ENTRY)&_ZN6S563C53v40Ev,
  (VTBL_ENTRY)&_ZN6S563C53v41Ev,
  (VTBL_ENTRY)&_ZN6S563C53v42Ev,
  (VTBL_ENTRY)&_ZN6S563C53v43Ev,
  (VTBL_ENTRY)&_ZN6S563C53v44Ev,
  (VTBL_ENTRY)&_ZN6S563C53v45Ev,
  (VTBL_ENTRY)&_ZN6S563C53v46Ev,
  (VTBL_ENTRY)&_ZN6S563C53v47Ev,
  (VTBL_ENTRY)&_ZN6S563C53v48Ev,
  (VTBL_ENTRY)&_ZN6S563C53v49Ev,
  (VTBL_ENTRY)&_ZN6S563C53v50Ev,
  (VTBL_ENTRY)&_ZN6S563C53v51Ev,
  (VTBL_ENTRY)&_ZN6S563C53v52Ev,
  (VTBL_ENTRY)&_ZN6S563C53v53Ev,
  (VTBL_ENTRY)&_ZN6S563C53v54Ev,
  (VTBL_ENTRY)&_ZN6S563C53v55Ev,
  (VTBL_ENTRY)&_ZN6S563C53v56Ev,
  (VTBL_ENTRY)&_ZN6S563C53v57Ev,
  (VTBL_ENTRY)&_ZN6S563C53v58Ev,
  (VTBL_ENTRY)&_ZN6S563C53v59Ev,
  (VTBL_ENTRY)&_ZN6S563C53v60Ev,
  (VTBL_ENTRY)&_ZN6S563C53v61Ev,
  (VTBL_ENTRY)&_ZN6S563C53v62Ev,
  (VTBL_ENTRY)&_ZN6S563C53v63Ev,
  (VTBL_ENTRY)&_ZN6S563C53v64Ev,
  (VTBL_ENTRY)&_ZN6S563C53v65Ev,
  (VTBL_ENTRY)&_ZN6S563C53v66Ev,
  (VTBL_ENTRY)&_ZN6S563C53v67Ev,
  (VTBL_ENTRY)&_ZN6S563C43v68Ev,
  (VTBL_ENTRY)&_ZN6S563C43v69Ev,
  (VTBL_ENTRY)&_ZN6S563C43v70Ev,
  (VTBL_ENTRY)&_ZN6S563C43v71Ev,
  (VTBL_ENTRY)&_ZN6S563C43v72Ev,
  (VTBL_ENTRY)&_ZN6S563C43v73Ev,
  (VTBL_ENTRY)&_ZN6S563C43v74Ev,
  (VTBL_ENTRY)&_ZN6S563C43v75Ev,
  (VTBL_ENTRY)&_ZN6S563C43v76Ev,
  (VTBL_ENTRY)&_ZN6S563C43v77Ev,
  (VTBL_ENTRY)&_ZN6S563C43v78Ev,
  (VTBL_ENTRY)&_ZN6S563C43v79Ev,
  (VTBL_ENTRY)&_ZN6S563C43v80Ev,
  (VTBL_ENTRY)&_ZN6S563C43v81Ev,
  (VTBL_ENTRY)&_ZN6S563C43v82Ev,
  (VTBL_ENTRY)&_ZN6S563C43v83Ev,
  (VTBL_ENTRY)&_ZN6S563C43v84Ev,
  (VTBL_ENTRY)&_ZN6S563C43v85Ev,
  (VTBL_ENTRY)&_ZN6S563C43v86Ev,
  (VTBL_ENTRY)&_ZN6S563C43v87Ev,
  (VTBL_ENTRY)&_ZN6S563C43v88Ev,
  (VTBL_ENTRY)&_ZN6S563C43v89Ev,
  (VTBL_ENTRY)&_ZN6S563C43v90Ev,
  (VTBL_ENTRY)&_ZN6S563C43v91Ev,
  (VTBL_ENTRY)&_ZN6S563C43v92Ev,
  (VTBL_ENTRY)&_ZN6S563C43v93Ev,
  (VTBL_ENTRY)&_ZN6S563C43v94Ev,
  (VTBL_ENTRY)&_ZN6S563C33v95Ev,
  (VTBL_ENTRY)&_ZN6S563C33v96Ev,
  (VTBL_ENTRY)&_ZN6S563C33v97Ev,
  (VTBL_ENTRY)&_ZN6S563C33v98Ev,
  (VTBL_ENTRY)&_ZN6S563C33v99Ev,
  (VTBL_ENTRY)&_ZN6S563C34v100Ev,
  (VTBL_ENTRY)&_ZN6S563C34v101Ev,
  (VTBL_ENTRY)&_ZN6S563C34v102Ev,
  (VTBL_ENTRY)&_ZN6S563C34v103Ev,
  (VTBL_ENTRY)&_ZN6S563C34v104Ev,
  (VTBL_ENTRY)&_ZN6S563C34v105Ev,
  (VTBL_ENTRY)&_ZN6S563C34v106Ev,
  (VTBL_ENTRY)&_ZN6S563C34v107Ev,
  (VTBL_ENTRY)&_ZN6S563C34v108Ev,
  (VTBL_ENTRY)&_ZN6S563C34v109Ev,
  (VTBL_ENTRY)&_ZN6S563C34v110Ev,
  (VTBL_ENTRY)&_ZN6S563C34v111Ev,
  (VTBL_ENTRY)&_ZN6S563C34v112Ev,
  (VTBL_ENTRY)&_ZN6S563C34v113Ev,
  (VTBL_ENTRY)&_ZN6S563C34v114Ev,
  (VTBL_ENTRY)&_ZN6S563C34v115Ev,
  (VTBL_ENTRY)&_ZN6S563C34v116Ev,
  (VTBL_ENTRY)&_ZN6S563C34v117Ev,
  (VTBL_ENTRY)&_ZN6S563C34v118Ev,
  (VTBL_ENTRY)&_ZN6S563C34v119Ev,
  (VTBL_ENTRY)&_ZN6S563C24v120Ev,
  (VTBL_ENTRY)&_ZN6S563C24v121Ev,
  (VTBL_ENTRY)&_ZN6S563C24v122Ev,
  (VTBL_ENTRY)&_ZN6S563C24v123Ev,
  (VTBL_ENTRY)&_ZN6S563C24v124Ev,
};
extern VTBL_ENTRY _ZTI6S563C2[];
extern  VTBL_ENTRY _ZTV6S563C2[];
Class_Descriptor cd_S563C2 = {  "S563C2", // class name
  bases_S563C2, 3,
  &(vtc_S563C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,256), // object size
  NSPAIRA(_ZTI6S563C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S563C2),125, //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  S563C1  : S563C2 {
  ::S615C17_nt s563c1f0;
  ::S615C17_nt s563c1f1;
  ::S615C17_nt s563c1f2;
  ::S615C17_nt s563c1f3;
  ::S615C17_nt s563c1f4;
  virtual  ~S563C1(); // _ZN6S563C1D1Ev
  virtual void  v1(); // _ZN6S563C12v1Ev
  virtual void  v2(); // _ZN6S563C12v2Ev
  virtual void  v3(); // _ZN6S563C12v3Ev
  S563C1(); // tgen
};
//SIG(1 S563C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v90 v91 v92 v93 v94 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd 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 FC6 Fi 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[2] Fp Fi[2] FC6 Fi Fp[2] Fc[6]} vd v120 v121 v122 v123 v124 Fi:1 Fi:1 FC15{ BC16{ BC9}}} vd v1 v2 v3 FC6 FC6 FC6 FC6 FC6}


 S563C1 ::~S563C1(){ note_dtor("S563C1", this);}
void  S563C1 ::v1(){vfunc_called(this, "_ZN6S563C12v1Ev");}
void  S563C1 ::v2(){vfunc_called(this, "_ZN6S563C12v2Ev");}
void  S563C1 ::v3(){vfunc_called(this, "_ZN6S563C12v3Ev");}
S563C1 ::S563C1(){ note_ctor("S563C1", this);} // tgen

static void Test_S563C1()
{
  extern Class_Descriptor cd_S563C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,75)];
    init_test(&cd_S563C1, buf);
    S563C1 *dp, &lv = *(dp=new (buf) S563C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,296), "sizeof(S563C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S563C1)");
    check_base_class_offset(lv, (S563C5*)(S563C4*)(S563C3*)(S563C2*), 0, "S563C1");
    check_base_class_offset(lv, (S563C4*)(S563C3*)(S563C2*), 0, "S563C1");
    check_base_class_offset(lv, (S563C3*)(S563C2*), 0, "S563C1");
    check_base_class_offset(lv, (S563C2*), 0, "S563C1");
    check_field_offset(lv, s563c1f0, ABISELECT(328,256), "S563C1.s563c1f0");
    check_field_offset(lv, s563c1f1, ABISELECT(336,264), "S563C1.s563c1f1");
    check_field_offset(lv, s563c1f2, ABISELECT(344,272), "S563C1.s563c1f2");
    check_field_offset(lv, s563c1f3, ABISELECT(352,280), "S563C1.s563c1f3");
    check_field_offset(lv, s563c1f4, ABISELECT(360,288), "S563C1.s563c1f4");
    test_class_info(&lv, &cd_S563C1);
    dp->~S563C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS563C1(Test_S563C1, "S563C1", ABISELECT(368,296));

#else // __cplusplus

extern void _ZN6S563C1C1Ev();
extern void _ZN6S563C1D1Ev();
Name_Map name_map_S563C1[] = {
  NSPAIR(_ZN6S563C1C1Ev),
  NSPAIR(_ZN6S563C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S563C5;
extern VTBL_ENTRY _ZTI6S563C5[];
extern  VTBL_ENTRY _ZTV6S563C5[];
extern Class_Descriptor cd_S563C4;
extern VTBL_ENTRY _ZTI6S563C4[];
extern  VTBL_ENTRY _ZTV6S563C4[];
extern Class_Descriptor cd_S563C3;
extern VTBL_ENTRY _ZTI6S563C3[];
extern  VTBL_ENTRY _ZTV6S563C3[];
extern Class_Descriptor cd_S563C2;
extern VTBL_ENTRY _ZTI6S563C2[];
extern  VTBL_ENTRY _ZTV6S563C2[];
static Base_Class bases_S563C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S563C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S563C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S563C1[];
extern void _ZN6S563C1D1Ev();
extern void _ZN6S563C1D0Ev();
extern void _ZN6S563C52v4Ev();
extern void _ZN6S563C52v5Ev();
extern void _ZN6S563C52v6Ev();
extern void _ZN6S563C52v7Ev();
extern void _ZN6S563C52v8Ev();
extern void _ZN6S563C52v9Ev();
extern void _ZN6S563C53v10Ev();
extern void _ZN6S563C53v11Ev();
extern void _ZN6S563C53v12Ev();
extern void _ZN6S563C53v13Ev();
extern void _ZN6S563C53v14Ev();
extern void _ZN6S563C53v15Ev();
extern void _ZN6S563C53v16Ev();
extern void _ZN6S563C53v17Ev();
extern void _ZN6S563C53v18Ev();
extern void _ZN6S563C53v19Ev();
extern void _ZN6S563C53v20Ev();
extern void _ZN6S563C53v21Ev();
extern void _ZN6S563C53v22Ev();
extern void _ZN6S563C53v23Ev();
extern void _ZN6S563C53v24Ev();
extern void _ZN6S563C53v25Ev();
extern void _ZN6S563C53v26Ev();
extern void _ZN6S563C53v27Ev();
extern void _ZN6S563C53v28Ev();
extern void _ZN6S563C53v29Ev();
extern void _ZN6S563C53v30Ev();
extern void _ZN6S563C53v31Ev();
extern void _ZN6S563C53v32Ev();
extern void _ZN6S563C53v33Ev();
extern void _ZN6S563C53v34Ev();
extern void _ZN6S563C53v35Ev();
extern void _ZN6S563C53v36Ev();
extern void _ZN6S563C53v37Ev();
extern void _ZN6S563C53v38Ev();
extern void _ZN6S563C53v39Ev();
extern void _ZN6S563C53v40Ev();
extern void _ZN6S563C53v41Ev();
extern void _ZN6S563C53v42Ev();
extern void _ZN6S563C53v43Ev();
extern void _ZN6S563C53v44Ev();
extern void _ZN6S563C53v45Ev();
extern void _ZN6S563C53v46Ev();
extern void _ZN6S563C53v47Ev();
extern void _ZN6S563C53v48Ev();
extern void _ZN6S563C53v49Ev();
extern void _ZN6S563C53v50Ev();
extern void _ZN6S563C53v51Ev();
extern void _ZN6S563C53v52Ev();
extern void _ZN6S563C53v53Ev();
extern void _ZN6S563C53v54Ev();
extern void _ZN6S563C53v55Ev();
extern void _ZN6S563C53v56Ev();
extern void _ZN6S563C53v57Ev();
extern void _ZN6S563C53v58Ev();
extern void _ZN6S563C53v59Ev();
extern void _ZN6S563C53v60Ev();
extern void _ZN6S563C53v61Ev();
extern void _ZN6S563C53v62Ev();
extern void _ZN6S563C53v63Ev();
extern void _ZN6S563C53v64Ev();
extern void _ZN6S563C53v65Ev();
extern void _ZN6S563C53v66Ev();
extern void _ZN6S563C53v67Ev();
extern void _ZN6S563C43v68Ev();
extern void _ZN6S563C43v69Ev();
extern void _ZN6S563C43v70Ev();
extern void _ZN6S563C43v71Ev();
extern void _ZN6S563C43v72Ev();
extern void _ZN6S563C43v73Ev();
extern void _ZN6S563C43v74Ev();
extern void _ZN6S563C43v75Ev();
extern void _ZN6S563C43v76Ev();
extern void _ZN6S563C43v77Ev();
extern void _ZN6S563C43v78Ev();
extern void _ZN6S563C43v79Ev();
extern void _ZN6S563C43v80Ev();
extern void _ZN6S563C43v81Ev();
extern void _ZN6S563C43v82Ev();
extern void _ZN6S563C43v83Ev();
extern void _ZN6S563C43v84Ev();
extern void _ZN6S563C43v85Ev();
extern void _ZN6S563C43v86Ev();
extern void _ZN6S563C43v87Ev();
extern void _ZN6S563C43v88Ev();
extern void _ZN6S563C43v89Ev();
extern void _ZN6S563C43v90Ev();
extern void _ZN6S563C43v91Ev();
extern void _ZN6S563C43v92Ev();
extern void _ZN6S563C43v93Ev();
extern void _ZN6S563C43v94Ev();
extern void _ZN6S563C33v95Ev();
extern void _ZN6S563C33v96Ev();
extern void _ZN6S563C33v97Ev();
extern void _ZN6S563C33v98Ev();
extern void _ZN6S563C33v99Ev();
extern void _ZN6S563C34v100Ev();
extern void _ZN6S563C34v101Ev();
extern void _ZN6S563C34v102Ev();
extern void _ZN6S563C34v103Ev();
extern void _ZN6S563C34v104Ev();
extern void _ZN6S563C34v105Ev();
extern void _ZN6S563C34v106Ev();
extern void _ZN6S563C34v107Ev();
extern void _ZN6S563C34v108Ev();
extern void _ZN6S563C34v109Ev();
extern void _ZN6S563C34v110Ev();
extern void _ZN6S563C34v111Ev();
extern void _ZN6S563C34v112Ev();
extern void _ZN6S563C34v113Ev();
extern void _ZN6S563C34v114Ev();
extern void _ZN6S563C34v115Ev();
extern void _ZN6S563C34v116Ev();
extern void _ZN6S563C34v117Ev();
extern void _ZN6S563C34v118Ev();
extern void _ZN6S563C34v119Ev();
extern void _ZN6S563C24v120Ev();
extern void _ZN6S563C24v121Ev();
extern void _ZN6S563C24v122Ev();
extern void _ZN6S563C24v123Ev();
extern void _ZN6S563C24v124Ev();
extern void _ZN6S563C12v1Ev();
extern void _ZN6S563C12v2Ev();
extern void _ZN6S563C12v3Ev();
static  VTBL_ENTRY vtc_S563C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S563C1[0]),
  (VTBL_ENTRY)&_ZN6S563C1D1Ev,
  (VTBL_ENTRY)&_ZN6S563C1D0Ev,
  (VTBL_ENTRY)&_ZN6S563C52v4Ev,
  (VTBL_ENTRY)&_ZN6S563C52v5Ev,
  (VTBL_ENTRY)&_ZN6S563C52v6Ev,
  (VTBL_ENTRY)&_ZN6S563C52v7Ev,
  (VTBL_ENTRY)&_ZN6S563C52v8Ev,
  (VTBL_ENTRY)&_ZN6S563C52v9Ev,
  (VTBL_ENTRY)&_ZN6S563C53v10Ev,
  (VTBL_ENTRY)&_ZN6S563C53v11Ev,
  (VTBL_ENTRY)&_ZN6S563C53v12Ev,
  (VTBL_ENTRY)&_ZN6S563C53v13Ev,
  (VTBL_ENTRY)&_ZN6S563C53v14Ev,
  (VTBL_ENTRY)&_ZN6S563C53v15Ev,
  (VTBL_ENTRY)&_ZN6S563C53v16Ev,
  (VTBL_ENTRY)&_ZN6S563C53v17Ev,
  (VTBL_ENTRY)&_ZN6S563C53v18Ev,
  (VTBL_ENTRY)&_ZN6S563C53v19Ev,
  (VTBL_ENTRY)&_ZN6S563C53v20Ev,
  (VTBL_ENTRY)&_ZN6S563C53v21Ev,
  (VTBL_ENTRY)&_ZN6S563C53v22Ev,
  (VTBL_ENTRY)&_ZN6S563C53v23Ev,
  (VTBL_ENTRY)&_ZN6S563C53v24Ev,
  (VTBL_ENTRY)&_ZN6S563C53v25Ev,
  (VTBL_ENTRY)&_ZN6S563C53v26Ev,
  (VTBL_ENTRY)&_ZN6S563C53v27Ev,
  (VTBL_ENTRY)&_ZN6S563C53v28Ev,
  (VTBL_ENTRY)&_ZN6S563C53v29Ev,
  (VTBL_ENTRY)&_ZN6S563C53v30Ev,
  (VTBL_ENTRY)&_ZN6S563C53v31Ev,
  (VTBL_ENTRY)&_ZN6S563C53v32Ev,
  (VTBL_ENTRY)&_ZN6S563C53v33Ev,
  (VTBL_ENTRY)&_ZN6S563C53v34Ev,
  (VTBL_ENTRY)&_ZN6S563C53v35Ev,
  (VTBL_ENTRY)&_ZN6S563C53v36Ev,
  (VTBL_ENTRY)&_ZN6S563C53v37Ev,
  (VTBL_ENTRY)&_ZN6S563C53v38Ev,
  (VTBL_ENTRY)&_ZN6S563C53v39Ev,
  (VTBL_ENTRY)&_ZN6S563C53v40Ev,
  (VTBL_ENTRY)&_ZN6S563C53v41Ev,
  (VTBL_ENTRY)&_ZN6S563C53v42Ev,
  (VTBL_ENTRY)&_ZN6S563C53v43Ev,
  (VTBL_ENTRY)&_ZN6S563C53v44Ev,
  (VTBL_ENTRY)&_ZN6S563C53v45Ev,
  (VTBL_ENTRY)&_ZN6S563C53v46Ev,
  (VTBL_ENTRY)&_ZN6S563C53v47Ev,
  (VTBL_ENTRY)&_ZN6S563C53v48Ev,
  (VTBL_ENTRY)&_ZN6S563C53v49Ev,
  (VTBL_ENTRY)&_ZN6S563C53v50Ev,
  (VTBL_ENTRY)&_ZN6S563C53v51Ev,
  (VTBL_ENTRY)&_ZN6S563C53v52Ev,
  (VTBL_ENTRY)&_ZN6S563C53v53Ev,
  (VTBL_ENTRY)&_ZN6S563C53v54Ev,
  (VTBL_ENTRY)&_ZN6S563C53v55Ev,
  (VTBL_ENTRY)&_ZN6S563C53v56Ev,
  (VTBL_ENTRY)&_ZN6S563C53v57Ev,
  (VTBL_ENTRY)&_ZN6S563C53v58Ev,
  (VTBL_ENTRY)&_ZN6S563C53v59Ev,
  (VTBL_ENTRY)&_ZN6S563C53v60Ev,
  (VTBL_ENTRY)&_ZN6S563C53v61Ev,
  (VTBL_ENTRY)&_ZN6S563C53v62Ev,
  (VTBL_ENTRY)&_ZN6S563C53v63Ev,
  (VTBL_ENTRY)&_ZN6S563C53v64Ev,
  (VTBL_ENTRY)&_ZN6S563C53v65Ev,
  (VTBL_ENTRY)&_ZN6S563C53v66Ev,
  (VTBL_ENTRY)&_ZN6S563C53v67Ev,
  (VTBL_ENTRY)&_ZN6S563C43v68Ev,
  (VTBL_ENTRY)&_ZN6S563C43v69Ev,
  (VTBL_ENTRY)&_ZN6S563C43v70Ev,
  (VTBL_ENTRY)&_ZN6S563C43v71Ev,
  (VTBL_ENTRY)&_ZN6S563C43v72Ev,
  (VTBL_ENTRY)&_ZN6S563C43v73Ev,
  (VTBL_ENTRY)&_ZN6S563C43v74Ev,
  (VTBL_ENTRY)&_ZN6S563C43v75Ev,
  (VTBL_ENTRY)&_ZN6S563C43v76Ev,
  (VTBL_ENTRY)&_ZN6S563C43v77Ev,
  (VTBL_ENTRY)&_ZN6S563C43v78Ev,
  (VTBL_ENTRY)&_ZN6S563C43v79Ev,
  (VTBL_ENTRY)&_ZN6S563C43v80Ev,
  (VTBL_ENTRY)&_ZN6S563C43v81Ev,
  (VTBL_ENTRY)&_ZN6S563C43v82Ev,
  (VTBL_ENTRY)&_ZN6S563C43v83Ev,
  (VTBL_ENTRY)&_ZN6S563C43v84Ev,
  (VTBL_ENTRY)&_ZN6S563C43v85Ev,
  (VTBL_ENTRY)&_ZN6S563C43v86Ev,
  (VTBL_ENTRY)&_ZN6S563C43v87Ev,
  (VTBL_ENTRY)&_ZN6S563C43v88Ev,
  (VTBL_ENTRY)&_ZN6S563C43v89Ev,
  (VTBL_ENTRY)&_ZN6S563C43v90Ev,
  (VTBL_ENTRY)&_ZN6S563C43v91Ev,
  (VTBL_ENTRY)&_ZN6S563C43v92Ev,
  (VTBL_ENTRY)&_ZN6S563C43v93Ev,
  (VTBL_ENTRY)&_ZN6S563C43v94Ev,
  (VTBL_ENTRY)&_ZN6S563C33v95Ev,
  (VTBL_ENTRY)&_ZN6S563C33v96Ev,
  (VTBL_ENTRY)&_ZN6S563C33v97Ev,
  (VTBL_ENTRY)&_ZN6S563C33v98Ev,
  (VTBL_ENTRY)&_ZN6S563C33v99Ev,
  (VTBL_ENTRY)&_ZN6S563C34v100Ev,
  (VTBL_ENTRY)&_ZN6S563C34v101Ev,
  (VTBL_ENTRY)&_ZN6S563C34v102Ev,
  (VTBL_ENTRY)&_ZN6S563C34v103Ev,
  (VTBL_ENTRY)&_ZN6S563C34v104Ev,
  (VTBL_ENTRY)&_ZN6S563C34v105Ev,
  (VTBL_ENTRY)&_ZN6S563C34v106Ev,
  (VTBL_ENTRY)&_ZN6S563C34v107Ev,
  (VTBL_ENTRY)&_ZN6S563C34v108Ev,
  (VTBL_ENTRY)&_ZN6S563C34v109Ev,
  (VTBL_ENTRY)&_ZN6S563C34v110Ev,
  (VTBL_ENTRY)&_ZN6S563C34v111Ev,
  (VTBL_ENTRY)&_ZN6S563C34v112Ev,
  (VTBL_ENTRY)&_ZN6S563C34v113Ev,
  (VTBL_ENTRY)&_ZN6S563C34v114Ev,
  (VTBL_ENTRY)&_ZN6S563C34v115Ev,
  (VTBL_ENTRY)&_ZN6S563C34v116Ev,
  (VTBL_ENTRY)&_ZN6S563C34v117Ev,
  (VTBL_ENTRY)&_ZN6S563C34v118Ev,
  (VTBL_ENTRY)&_ZN6S563C34v119Ev,
  (VTBL_ENTRY)&_ZN6S563C24v120Ev,
  (VTBL_ENTRY)&_ZN6S563C24v121Ev,
  (VTBL_ENTRY)&_ZN6S563C24v122Ev,
  (VTBL_ENTRY)&_ZN6S563C24v123Ev,
  (VTBL_ENTRY)&_ZN6S563C24v124Ev,
  (VTBL_ENTRY)&_ZN6S563C12v1Ev,
  (VTBL_ENTRY)&_ZN6S563C12v2Ev,
  (VTBL_ENTRY)&_ZN6S563C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S563C1[];
extern  VTBL_ENTRY _ZTV6S563C1[];
Class_Descriptor cd_S563C1 = {  "S563C1", // class name
  bases_S563C1, 4,
  &(vtc_S563C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,296), // object size
  NSPAIRA(_ZTI6S563C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S563C1),128, //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  S189C6  {
  int s189c6f0;
  __tsi64 s189c6f1;
  void *s189c6f2[4];
  int s189c6f3[2];
  void *s189c6f4;
  ::S615C17_nt s189c6f5;
  void *s189c6f6[2];
  virtual  ~S189C6(); // _ZN6S189C6D1Ev
  virtual void  v4(); // _ZN6S189C62v4Ev
  virtual void  v5(); // _ZN6S189C62v5Ev
  virtual void  v6(); // _ZN6S189C62v6Ev
  virtual void  v7(); // _ZN6S189C62v7Ev
  virtual void  v8(); // _ZN6S189C62v8Ev
  virtual void  v9(); // _ZN6S189C62v9Ev
  virtual void  v10(); // _ZN6S189C63v10Ev
  virtual void  v11(); // _ZN6S189C63v11Ev
  virtual void  v12(); // _ZN6S189C63v12Ev
  virtual void  v13(); // _ZN6S189C63v13Ev
  virtual void  v14(); // _ZN6S189C63v14Ev
  virtual void  v15(); // _ZN6S189C63v15Ev
  virtual void  v16(); // _ZN6S189C63v16Ev
  virtual void  v17(); // _ZN6S189C63v17Ev
  virtual void  v18(); // _ZN6S189C63v18Ev
  virtual void  v19(); // _ZN6S189C63v19Ev
  virtual void  v20(); // _ZN6S189C63v20Ev
  virtual void  v21(); // _ZN6S189C63v21Ev
  virtual void  v22(); // _ZN6S189C63v22Ev
  virtual void  v23(); // _ZN6S189C63v23Ev
  virtual void  v24(); // _ZN6S189C63v24Ev
  virtual void  v25(); // _ZN6S189C63v25Ev
  virtual void  v26(); // _ZN6S189C63v26Ev
  virtual void  v27(); // _ZN6S189C63v27Ev
  virtual void  v28(); // _ZN6S189C63v28Ev
  virtual void  v29(); // _ZN6S189C63v29Ev
  virtual void  v30(); // _ZN6S189C63v30Ev
  virtual void  v31(); // _ZN6S189C63v31Ev
  virtual void  v32(); // _ZN6S189C63v32Ev
  virtual void  v33(); // _ZN6S189C63v33Ev
  virtual void  v34(); // _ZN6S189C63v34Ev
  virtual void  v35(); // _ZN6S189C63v35Ev
  virtual void  v36(); // _ZN6S189C63v36Ev
  virtual void  v37(); // _ZN6S189C63v37Ev
  virtual void  v38(); // _ZN6S189C63v38Ev
  virtual void  v39(); // _ZN6S189C63v39Ev
  virtual void  v40(); // _ZN6S189C63v40Ev
  virtual void  v41(); // _ZN6S189C63v41Ev
  virtual void  v42(); // _ZN6S189C63v42Ev
  virtual void  v43(); // _ZN6S189C63v43Ev
  virtual void  v44(); // _ZN6S189C63v44Ev
  virtual void  v45(); // _ZN6S189C63v45Ev
  virtual void  v46(); // _ZN6S189C63v46Ev
  virtual void  v47(); // _ZN6S189C63v47Ev
  virtual void  v48(); // _ZN6S189C63v48Ev
  virtual void  v49(); // _ZN6S189C63v49Ev
  virtual void  v50(); // _ZN6S189C63v50Ev
  virtual void  v51(); // _ZN6S189C63v51Ev
  virtual void  v52(); // _ZN6S189C63v52Ev
  virtual void  v53(); // _ZN6S189C63v53Ev
  virtual void  v54(); // _ZN6S189C63v54Ev
  virtual void  v55(); // _ZN6S189C63v55Ev
  virtual void  v56(); // _ZN6S189C63v56Ev
  virtual void  v57(); // _ZN6S189C63v57Ev
  virtual void  v58(); // _ZN6S189C63v58Ev
  virtual void  v59(); // _ZN6S189C63v59Ev
  virtual void  v60(); // _ZN6S189C63v60Ev
  virtual void  v61(); // _ZN6S189C63v61Ev
  virtual void  v62(); // _ZN6S189C63v62Ev
  virtual void  v63(); // _ZN6S189C63v63Ev
  virtual void  v64(); // _ZN6S189C63v64Ev
  virtual void  v65(); // _ZN6S189C63v65Ev
  virtual void  v66(); // _ZN6S189C63v66Ev
  virtual void  v67(); // _ZN6S189C63v67Ev
  S189C6(); // tgen
};
//SIG(-1 S189C6) 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]}


 S189C6 ::~S189C6(){ note_dtor("S189C6", this);}
void  S189C6 ::v4(){vfunc_called(this, "_ZN6S189C62v4Ev");}
void  S189C6 ::v5(){vfunc_called(this, "_ZN6S189C62v5Ev");}
void  S189C6 ::v6(){vfunc_called(this, "_ZN6S189C62v6Ev");}
void  S189C6 ::v7(){vfunc_called(this, "_ZN6S189C62v7Ev");}
void  S189C6 ::v8(){vfunc_called(this, "_ZN6S189C62v8Ev");}
void  S189C6 ::v9(){vfunc_called(this, "_ZN6S189C62v9Ev");}
void  S189C6 ::v10(){vfunc_called(this, "_ZN6S189C63v10Ev");}
void  S189C6 ::v11(){vfunc_called(this, "_ZN6S189C63v11Ev");}
void  S189C6 ::v12(){vfunc_called(this, "_ZN6S189C63v12Ev");}
void  S189C6 ::v13(){vfunc_called(this, "_ZN6S189C63v13Ev");}
void  S189C6 ::v14(){vfunc_called(this, "_ZN6S189C63v14Ev");}
void  S189C6 ::v15(){vfunc_called(this, "_ZN6S189C63v15Ev");}
void  S189C6 ::v16(){vfunc_called(this, "_ZN6S189C63v16Ev");}
void  S189C6 ::v17(){vfunc_called(this, "_ZN6S189C63v17Ev");}
void  S189C6 ::v18(){vfunc_called(this, "_ZN6S189C63v18Ev");}
void  S189C6 ::v19(){vfunc_called(this, "_ZN6S189C63v19Ev");}
void  S189C6 ::v20(){vfunc_called(this, "_ZN6S189C63v20Ev");}
void  S189C6 ::v21(){vfunc_called(this, "_ZN6S189C63v21Ev");}
void  S189C6 ::v22(){vfunc_called(this, "_ZN6S189C63v22Ev");}
void  S189C6 ::v23(){vfunc_called(this, "_ZN6S189C63v23Ev");}
void  S189C6 ::v24(){vfunc_called(this, "_ZN6S189C63v24Ev");}
void  S189C6 ::v25(){vfunc_called(this, "_ZN6S189C63v25Ev");}
void  S189C6 ::v26(){vfunc_called(this, "_ZN6S189C63v26Ev");}
void  S189C6 ::v27(){vfunc_called(this, "_ZN6S189C63v27Ev");}
void  S189C6 ::v28(){vfunc_called(this, "_ZN6S189C63v28Ev");}
void  S189C6 ::v29(){vfunc_called(this, "_ZN6S189C63v29Ev");}
void  S189C6 ::v30(){vfunc_called(this, "_ZN6S189C63v30Ev");}
void  S189C6 ::v31(){vfunc_called(this, "_ZN6S189C63v31Ev");}
void  S189C6 ::v32(){vfunc_called(this, "_ZN6S189C63v32Ev");}
void  S189C6 ::v33(){vfunc_called(this, "_ZN6S189C63v33Ev");}
void  S189C6 ::v34(){vfunc_called(this, "_ZN6S189C63v34Ev");}
void  S189C6 ::v35(){vfunc_called(this, "_ZN6S189C63v35Ev");}
void  S189C6 ::v36(){vfunc_called(this, "_ZN6S189C63v36Ev");}
void  S189C6 ::v37(){vfunc_called(this, "_ZN6S189C63v37Ev");}
void  S189C6 ::v38(){vfunc_called(this, "_ZN6S189C63v38Ev");}
void  S189C6 ::v39(){vfunc_called(this, "_ZN6S189C63v39Ev");}
void  S189C6 ::v40(){vfunc_called(this, "_ZN6S189C63v40Ev");}
void  S189C6 ::v41(){vfunc_called(this, "_ZN6S189C63v41Ev");}
void  S189C6 ::v42(){vfunc_called(this, "_ZN6S189C63v42Ev");}
void  S189C6 ::v43(){vfunc_called(this, "_ZN6S189C63v43Ev");}
void  S189C6 ::v44(){vfunc_called(this, "_ZN6S189C63v44Ev");}
void  S189C6 ::v45(){vfunc_called(this, "_ZN6S189C63v45Ev");}
void  S189C6 ::v46(){vfunc_called(this, "_ZN6S189C63v46Ev");}
void  S189C6 ::v47(){vfunc_called(this, "_ZN6S189C63v47Ev");}
void  S189C6 ::v48(){vfunc_called(this, "_ZN6S189C63v48Ev");}
void  S189C6 ::v49(){vfunc_called(this, "_ZN6S189C63v49Ev");}
void  S189C6 ::v50(){vfunc_called(this, "_ZN6S189C63v50Ev");}
void  S189C6 ::v51(){vfunc_called(this, "_ZN6S189C63v51Ev");}
void  S189C6 ::v52(){vfunc_called(this, "_ZN6S189C63v52Ev");}
void  S189C6 ::v53(){vfunc_called(this, "_ZN6S189C63v53Ev");}
void  S189C6 ::v54(){vfunc_called(this, "_ZN6S189C63v54Ev");}
void  S189C6 ::v55(){vfunc_called(this, "_ZN6S189C63v55Ev");}
void  S189C6 ::v56(){vfunc_called(this, "_ZN6S189C63v56Ev");}
void  S189C6 ::v57(){vfunc_called(this, "_ZN6S189C63v57Ev");}
void  S189C6 ::v58(){vfunc_called(this, "_ZN6S189C63v58Ev");}
void  S189C6 ::v59(){vfunc_called(this, "_ZN6S189C63v59Ev");}
void  S189C6 ::v60(){vfunc_called(this, "_ZN6S189C63v60Ev");}
void  S189C6 ::v61(){vfunc_called(this, "_ZN6S189C63v61Ev");}
void  S189C6 ::v62(){vfunc_called(this, "_ZN6S189C63v62Ev");}
void  S189C6 ::v63(){vfunc_called(this, "_ZN6S189C63v63Ev");}
void  S189C6 ::v64(){vfunc_called(this, "_ZN6S189C63v64Ev");}
void  S189C6 ::v65(){vfunc_called(this, "_ZN6S189C63v65Ev");}
void  S189C6 ::v66(){vfunc_called(this, "_ZN6S189C63v66Ev");}
void  S189C6 ::v67(){vfunc_called(this, "_ZN6S189C63v67Ev");}
S189C6 ::S189C6(){ note_ctor("S189C6", this);} // tgen

static void Test_S189C6()
{
  extern Class_Descriptor cd_S189C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S189C6, buf);
    S189C6 *dp, &lv = *(dp=new (buf) S189C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S189C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S189C6)");
    check_field_offset(lv, s189c6f0, ABISELECT(8,4), "S189C6.s189c6f0");
    check_field_offset(lv, s189c6f1, ABISELECT(16,8), "S189C6.s189c6f1");
    check_field_offset(lv, s189c6f2, ABISELECT(24,16), "S189C6.s189c6f2");
    check_field_offset(lv, s189c6f3, ABISELECT(56,32), "S189C6.s189c6f3");
    check_field_offset(lv, s189c6f4, ABISELECT(64,40), "S189C6.s189c6f4");
    check_field_offset(lv, s189c6f5, ABISELECT(72,44), "S189C6.s189c6f5");
    check_field_offset(lv, s189c6f6, ABISELECT(80,52), "S189C6.s189c6f6");
    test_class_info(&lv, &cd_S189C6);
    dp->~S189C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS189C6(Test_S189C6, "S189C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S189C6C1Ev();
extern void _ZN6S189C6D1Ev();
Name_Map name_map_S189C6[] = {
  NSPAIR(_ZN6S189C6C1Ev),
  NSPAIR(_ZN6S189C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S189C6[];
extern void _ZN6S189C6D1Ev();
extern void _ZN6S189C6D0Ev();
extern void _ZN6S189C62v4Ev();
extern void _ZN6S189C62v5Ev();
extern void _ZN6S189C62v6Ev();
extern void _ZN6S189C62v7Ev();
extern void _ZN6S189C62v8Ev();
extern void _ZN6S189C62v9Ev();
extern void _ZN6S189C63v10Ev();
extern void _ZN6S189C63v11Ev();
extern void _ZN6S189C63v12Ev();
extern void _ZN6S189C63v13Ev();
extern void _ZN6S189C63v14Ev();
extern void _ZN6S189C63v15Ev();
extern void _ZN6S189C63v16Ev();
extern void _ZN6S189C63v17Ev();
extern void _ZN6S189C63v18Ev();
extern void _ZN6S189C63v19Ev();
extern void _ZN6S189C63v20Ev();
extern void _ZN6S189C63v21Ev();
extern void _ZN6S189C63v22Ev();
extern void _ZN6S189C63v23Ev();
extern void _ZN6S189C63v24Ev();
extern void _ZN6S189C63v25Ev();
extern void _ZN6S189C63v26Ev();
extern void _ZN6S189C63v27Ev();
extern void _ZN6S189C63v28Ev();
extern void _ZN6S189C63v29Ev();
extern void _ZN6S189C63v30Ev();
extern void _ZN6S189C63v31Ev();
extern void _ZN6S189C63v32Ev();
extern void _ZN6S189C63v33Ev();
extern void _ZN6S189C63v34Ev();
extern void _ZN6S189C63v35Ev();
extern void _ZN6S189C63v36Ev();
extern void _ZN6S189C63v37Ev();
extern void _ZN6S189C63v38Ev();
extern void _ZN6S189C63v39Ev();
extern void _ZN6S189C63v40Ev();
extern void _ZN6S189C63v41Ev();
extern void _ZN6S189C63v42Ev();
extern void _ZN6S189C63v43Ev();
extern void _ZN6S189C63v44Ev();
extern void _ZN6S189C63v45Ev();
extern void _ZN6S189C63v46Ev();
extern void _ZN6S189C63v47Ev();
extern void _ZN6S189C63v48Ev();
extern void _ZN6S189C63v49Ev();
extern void _ZN6S189C63v50Ev();
extern void _ZN6S189C63v51Ev();
extern void _ZN6S189C63v52Ev();
extern void _ZN6S189C63v53Ev();
extern void _ZN6S189C63v54Ev();
extern void _ZN6S189C63v55Ev();
extern void _ZN6S189C63v56Ev();
extern void _ZN6S189C63v57Ev();
extern void _ZN6S189C63v58Ev();
extern void _ZN6S189C63v59Ev();
extern void _ZN6S189C63v60Ev();
extern void _ZN6S189C63v61Ev();
extern void _ZN6S189C63v62Ev();
extern void _ZN6S189C63v63Ev();
extern void _ZN6S189C63v64Ev();
extern void _ZN6S189C63v65Ev();
extern void _ZN6S189C63v66Ev();
extern void _ZN6S189C63v67Ev();
static  VTBL_ENTRY vtc_S189C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S189C6[0]),
  (VTBL_ENTRY)&_ZN6S189C6D1Ev,
  (VTBL_ENTRY)&_ZN6S189C6D0Ev,
  (VTBL_ENTRY)&_ZN6S189C62v4Ev,
  (VTBL_ENTRY)&_ZN6S189C62v5Ev,
  (VTBL_ENTRY)&_ZN6S189C62v6Ev,
  (VTBL_ENTRY)&_ZN6S189C62v7Ev,
  (VTBL_ENTRY)&_ZN6S189C62v8Ev,
  (VTBL_ENTRY)&_ZN6S189C62v9Ev,
  (VTBL_ENTRY)&_ZN6S189C63v10Ev,
  (VTBL_ENTRY)&_ZN6S189C63v11Ev,
  (VTBL_ENTRY)&_ZN6S189C63v12Ev,
  (VTBL_ENTRY)&_ZN6S189C63v13Ev,
  (VTBL_ENTRY)&_ZN6S189C63v14Ev,
  (VTBL_ENTRY)&_ZN6S189C63v15Ev,
  (VTBL_ENTRY)&_ZN6S189C63v16Ev,
  (VTBL_ENTRY)&_ZN6S189C63v17Ev,
  (VTBL_ENTRY)&_ZN6S189C63v18Ev,
  (VTBL_ENTRY)&_ZN6S189C63v19Ev,
  (VTBL_ENTRY)&_ZN6S189C63v20Ev,
  (VTBL_ENTRY)&_ZN6S189C63v21Ev,
  (VTBL_ENTRY)&_ZN6S189C63v22Ev,
  (VTBL_ENTRY)&_ZN6S189C63v23Ev,
  (VTBL_ENTRY)&_ZN6S189C63v24Ev,
  (VTBL_ENTRY)&_ZN6S189C63v25Ev,
  (VTBL_ENTRY)&_ZN6S189C63v26Ev,
  (VTBL_ENTRY)&_ZN6S189C63v27Ev,
  (VTBL_ENTRY)&_ZN6S189C63v28Ev,
  (VTBL_ENTRY)&_ZN6S189C63v29Ev,
  (VTBL_ENTRY)&_ZN6S189C63v30Ev,
  (VTBL_ENTRY)&_ZN6S189C63v31Ev,
  (VTBL_ENTRY)&_ZN6S189C63v32Ev,
  (VTBL_ENTRY)&_ZN6S189C63v33Ev,
  (VTBL_ENTRY)&_ZN6S189C63v34Ev,
  (VTBL_ENTRY)&_ZN6S189C63v35Ev,
  (VTBL_ENTRY)&_ZN6S189C63v36Ev,
  (VTBL_ENTRY)&_ZN6S189C63v37Ev,
  (VTBL_ENTRY)&_ZN6S189C63v38Ev,
  (VTBL_ENTRY)&_ZN6S189C63v39Ev,
  (VTBL_ENTRY)&_ZN6S189C63v40Ev,
  (VTBL_ENTRY)&_ZN6S189C63v41Ev,
  (VTBL_ENTRY)&_ZN6S189C63v42Ev,
  (VTBL_ENTRY)&_ZN6S189C63v43Ev,
  (VTBL_ENTRY)&_ZN6S189C63v44Ev,
  (VTBL_ENTRY)&_ZN6S189C63v45Ev,
  (VTBL_ENTRY)&_ZN6S189C63v46Ev,
  (VTBL_ENTRY)&_ZN6S189C63v47Ev,
  (VTBL_ENTRY)&_ZN6S189C63v48Ev,
  (VTBL_ENTRY)&_ZN6S189C63v49Ev,
  (VTBL_ENTRY)&_ZN6S189C63v50Ev,
  (VTBL_ENTRY)&_ZN6S189C63v51Ev,
  (VTBL_ENTRY)&_ZN6S189C63v52Ev,
  (VTBL_ENTRY)&_ZN6S189C63v53Ev,
  (VTBL_ENTRY)&_ZN6S189C63v54Ev,
  (VTBL_ENTRY)&_ZN6S189C63v55Ev,
  (VTBL_ENTRY)&_ZN6S189C63v56Ev,
  (VTBL_ENTRY)&_ZN6S189C63v57Ev,
  (VTBL_ENTRY)&_ZN6S189C63v58Ev,
  (VTBL_ENTRY)&_ZN6S189C63v59Ev,
  (VTBL_ENTRY)&_ZN6S189C63v60Ev,
  (VTBL_ENTRY)&_ZN6S189C63v61Ev,
  (VTBL_ENTRY)&_ZN6S189C63v62Ev,
  (VTBL_ENTRY)&_ZN6S189C63v63Ev,
  (VTBL_ENTRY)&_ZN6S189C63v64Ev,
  (VTBL_ENTRY)&_ZN6S189C63v65Ev,
  (VTBL_ENTRY)&_ZN6S189C63v66Ev,
  (VTBL_ENTRY)&_ZN6S189C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S189C6[];
extern  VTBL_ENTRY _ZTV6S189C6[];
Class_Descriptor cd_S189C6 = {  "S189C6", // class name
  0,0,//no base classes
  &(vtc_S189C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S189C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S189C6),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  S189C5  : S189C6 {
  void *s189c5f0;
  ::S615C22_nt s189c5f1;
  ::S615C17_nt s189c5f2;
  ::S165C27 s189c5f3;
  ::S615C12_nt s189c5f4;
  int s189c5f5;
  unsigned int s189c5f6:1;
  unsigned int s189c5f7:1;
  unsigned int s189c5f8:1;
  unsigned int s189c5f9:1;
  int s189c5f10[11];
  virtual  ~S189C5(); // _ZN6S189C5D1Ev
  virtual void  v68(); // _ZN6S189C53v68Ev
  virtual void  v69(); // _ZN6S189C53v69Ev
  virtual void  v70(); // _ZN6S189C53v70Ev
  virtual void  v71(); // _ZN6S189C53v71Ev
  virtual void  v72(); // _ZN6S189C53v72Ev
  virtual void  v73(); // _ZN6S189C53v73Ev
  virtual void  v74(); // _ZN6S189C53v74Ev
  virtual void  v75(); // _ZN6S189C53v75Ev
  virtual void  v76(); // _ZN6S189C53v76Ev
  virtual void  v77(); // _ZN6S189C53v77Ev
  virtual void  v78(); // _ZN6S189C53v78Ev
  virtual void  v79(); // _ZN6S189C53v79Ev
  virtual void  v80(); // _ZN6S189C53v80Ev
  virtual void  v81(); // _ZN6S189C53v81Ev
  virtual void  v82(); // _ZN6S189C53v82Ev
  virtual void  v83(); // _ZN6S189C53v83Ev
  virtual void  v84(); // _ZN6S189C53v84Ev
  virtual void  v85(); // _ZN6S189C53v85Ev
  virtual void  v86(); // _ZN6S189C53v86Ev
  virtual void  v87(); // _ZN6S189C53v87Ev
  virtual void  v88(); // _ZN6S189C53v88Ev
  virtual void  v89(); // _ZN6S189C53v89Ev
  virtual void  v90(); // _ZN6S189C53v90Ev
  virtual void  v91(); // _ZN6S189C53v91Ev
  virtual void  v92(); // _ZN6S189C53v92Ev
  virtual void  v93(); // _ZN6S189C53v93Ev
  virtual void  v94(); // _ZN6S189C53v94Ev
  S189C5(); // tgen
};
//SIG(-1 S189C5) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S189C5 ::~S189C5(){ note_dtor("S189C5", this);}
void  S189C5 ::v68(){vfunc_called(this, "_ZN6S189C53v68Ev");}
void  S189C5 ::v69(){vfunc_called(this, "_ZN6S189C53v69Ev");}
void  S189C5 ::v70(){vfunc_called(this, "_ZN6S189C53v70Ev");}
void  S189C5 ::v71(){vfunc_called(this, "_ZN6S189C53v71Ev");}
void  S189C5 ::v72(){vfunc_called(this, "_ZN6S189C53v72Ev");}
void  S189C5 ::v73(){vfunc_called(this, "_ZN6S189C53v73Ev");}
void  S189C5 ::v74(){vfunc_called(this, "_ZN6S189C53v74Ev");}
void  S189C5 ::v75(){vfunc_called(this, "_ZN6S189C53v75Ev");}
void  S189C5 ::v76(){vfunc_called(this, "_ZN6S189C53v76Ev");}
void  S189C5 ::v77(){vfunc_called(this, "_ZN6S189C53v77Ev");}
void  S189C5 ::v78(){vfunc_called(this, "_ZN6S189C53v78Ev");}
void  S189C5 ::v79(){vfunc_called(this, "_ZN6S189C53v79Ev");}
void  S189C5 ::v80(){vfunc_called(this, "_ZN6S189C53v80Ev");}
void  S189C5 ::v81(){vfunc_called(this, "_ZN6S189C53v81Ev");}
void  S189C5 ::v82(){vfunc_called(this, "_ZN6S189C53v82Ev");}
void  S189C5 ::v83(){vfunc_called(this, "_ZN6S189C53v83Ev");}
void  S189C5 ::v84(){vfunc_called(this, "_ZN6S189C53v84Ev");}
void  S189C5 ::v85(){vfunc_called(this, "_ZN6S189C53v85Ev");}
void  S189C5 ::v86(){vfunc_called(this, "_ZN6S189C53v86Ev");}
void  S189C5 ::v87(){vfunc_called(this, "_ZN6S189C53v87Ev");}
void  S189C5 ::v88(){vfunc_called(this, "_ZN6S189C53v88Ev");}
void  S189C5 ::v89(){vfunc_called(this, "_ZN6S189C53v89Ev");}
void  S189C5 ::v90(){vfunc_called(this, "_ZN6S189C53v90Ev");}
void  S189C5 ::v91(){vfunc_called(this, "_ZN6S189C53v91Ev");}
void  S189C5 ::v92(){vfunc_called(this, "_ZN6S189C53v92Ev");}
void  S189C5 ::v93(){vfunc_called(this, "_ZN6S189C53v93Ev");}
void  S189C5 ::v94(){vfunc_called(this, "_ZN6S189C53v94Ev");}
S189C5 ::S189C5(){ note_ctor("S189C5", this);} // tgen

static void Test_S189C5()
{
  extern Class_Descriptor cd_S189C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S189C5, buf);
    S189C5 *dp, &lv = *(dp=new (buf) S189C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S189C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S189C5)");
    check_base_class_offset(lv, (S189C6*), 0, "S189C5");
    check_field_offset(lv, s189c5f0, ABISELECT(96,60), "S189C5.s189c5f0");
    check_field_offset(lv, s189c5f1, ABISELECT(104,64), "S189C5.s189c5f1");
    check_field_offset(lv, s189c5f2, ABISELECT(120,76), "S189C5.s189c5f2");
    check_field_offset(lv, s189c5f3, ABISELECT(128,84), "S189C5.s189c5f3");
    check_field_offset(lv, s189c5f4, ABISELECT(144,96), "S189C5.s189c5f4");
    check_field_offset(lv, s189c5f5, ABISELECT(176,128), "S189C5.s189c5f5");
    set_bf_and_test(lv, s189c5f6, ABISELECT(180,132), 0, 1, 1, "S189C5");
    set_bf_and_test(lv, s189c5f7, ABISELECT(180,132), 1, 1, 1, "S189C5");
    set_bf_and_test(lv, s189c5f8, ABISELECT(180,132), 2, 1, 1, "S189C5");
    set_bf_and_test(lv, s189c5f9, ABISELECT(180,132), 3, 1, 1, "S189C5");
    check_field_offset(lv, s189c5f10, ABISELECT(184,136), "S189C5.s189c5f10");
    test_class_info(&lv, &cd_S189C5);
    dp->~S189C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS189C5(Test_S189C5, "S189C5", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S189C5C1Ev();
extern void _ZN6S189C5D1Ev();
Name_Map name_map_S189C5[] = {
  NSPAIR(_ZN6S189C5C1Ev),
  NSPAIR(_ZN6S189C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S189C6;
extern VTBL_ENTRY _ZTI6S189C6[];
extern  VTBL_ENTRY _ZTV6S189C6[];
static Base_Class bases_S189C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S189C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S189C5[];
extern void _ZN6S189C5D1Ev();
extern void _ZN6S189C5D0Ev();
extern void _ZN6S189C62v4Ev();
extern void _ZN6S189C62v5Ev();
extern void _ZN6S189C62v6Ev();
extern void _ZN6S189C62v7Ev();
extern void _ZN6S189C62v8Ev();
extern void _ZN6S189C62v9Ev();
extern void _ZN6S189C63v10Ev();
extern void _ZN6S189C63v11Ev();
extern void _ZN6S189C63v12Ev();
extern void _ZN6S189C63v13Ev();
extern void _ZN6S189C63v14Ev();
extern void _ZN6S189C63v15Ev();
extern void _ZN6S189C63v16Ev();
extern void _ZN6S189C63v17Ev();
extern void _ZN6S189C63v18Ev();
extern void _ZN6S189C63v19Ev();
extern void _ZN6S189C63v20Ev();
extern void _ZN6S189C63v21Ev();
extern void _ZN6S189C63v22Ev();
extern void _ZN6S189C63v23Ev();
extern void _ZN6S189C63v24Ev();
extern void _ZN6S189C63v25Ev();
extern void _ZN6S189C63v26Ev();
extern void _ZN6S189C63v27Ev();
extern void _ZN6S189C63v28Ev();
extern void _ZN6S189C63v29Ev();
extern void _ZN6S189C63v30Ev();
extern void _ZN6S189C63v31Ev();
extern void _ZN6S189C63v32Ev();
extern void _ZN6S189C63v33Ev();
extern void _ZN6S189C63v34Ev();
extern void _ZN6S189C63v35Ev();
extern void _ZN6S189C63v36Ev();
extern void _ZN6S189C63v37Ev();
extern void _ZN6S189C63v38Ev();
extern void _ZN6S189C63v39Ev();
extern void _ZN6S189C63v40Ev();
extern void _ZN6S189C63v41Ev();
extern void _ZN6S189C63v42Ev();
extern void _ZN6S189C63v43Ev();
extern void _ZN6S189C63v44Ev();
extern void _ZN6S189C63v45Ev();
extern void _ZN6S189C63v46Ev();
extern void _ZN6S189C63v47Ev();
extern void _ZN6S189C63v48Ev();
extern void _ZN6S189C63v49Ev();
extern void _ZN6S189C63v50Ev();
extern void _ZN6S189C63v51Ev();
extern void _ZN6S189C63v52Ev();
extern void _ZN6S189C63v53Ev();
extern void _ZN6S189C63v54Ev();
extern void _ZN6S189C63v55Ev();
extern void _ZN6S189C63v56Ev();
extern void _ZN6S189C63v57Ev();
extern void _ZN6S189C63v58Ev();
extern void _ZN6S189C63v59Ev();
extern void _ZN6S189C63v60Ev();
extern void _ZN6S189C63v61Ev();
extern void _ZN6S189C63v62Ev();
extern void _ZN6S189C63v63Ev();
extern void _ZN6S189C63v64Ev();
extern void _ZN6S189C63v65Ev();
extern void _ZN6S189C63v66Ev();
extern void _ZN6S189C63v67Ev();
extern void _ZN6S189C53v68Ev();
extern void _ZN6S189C53v69Ev();
extern void _ZN6S189C53v70Ev();
extern void _ZN6S189C53v71Ev();
extern void _ZN6S189C53v72Ev();
extern void _ZN6S189C53v73Ev();
extern void _ZN6S189C53v74Ev();
extern void _ZN6S189C53v75Ev();
extern void _ZN6S189C53v76Ev();
extern void _ZN6S189C53v77Ev();
extern void _ZN6S189C53v78Ev();
extern void _ZN6S189C53v79Ev();
extern void _ZN6S189C53v80Ev();
extern void _ZN6S189C53v81Ev();
extern void _ZN6S189C53v82Ev();
extern void _ZN6S189C53v83Ev();
extern void _ZN6S189C53v84Ev();
extern void _ZN6S189C53v85Ev();
extern void _ZN6S189C53v86Ev();
extern void _ZN6S189C53v87Ev();
extern void _ZN6S189C53v88Ev();
extern void _ZN6S189C53v89Ev();
extern void _ZN6S189C53v90Ev();
extern void _ZN6S189C53v91Ev();
extern void _ZN6S189C53v92Ev();
extern void _ZN6S189C53v93Ev();
extern void _ZN6S189C53v94Ev();
static  VTBL_ENTRY vtc_S189C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S189C5[0]),
  (VTBL_ENTRY)&_ZN6S189C5D1Ev,
  (VTBL_ENTRY)&_ZN6S189C5D0Ev,
  (VTBL_ENTRY)&_ZN6S189C62v4Ev,
  (VTBL_ENTRY)&_ZN6S189C62v5Ev,
  (VTBL_ENTRY)&_ZN6S189C62v6Ev,
  (VTBL_ENTRY)&_ZN6S189C62v7Ev,
  (VTBL_ENTRY)&_ZN6S189C62v8Ev,
  (VTBL_ENTRY)&_ZN6S189C62v9Ev,
  (VTBL_ENTRY)&_ZN6S189C63v10Ev,
  (VTBL_ENTRY)&_ZN6S189C63v11Ev,
  (VTBL_ENTRY)&_ZN6S189C63v12Ev,
  (VTBL_ENTRY)&_ZN6S189C63v13Ev,
  (VTBL_ENTRY)&_ZN6S189C63v14Ev,
  (VTBL_ENTRY)&_ZN6S189C63v15Ev,
  (VTBL_ENTRY)&_ZN6S189C63v16Ev,
  (VTBL_ENTRY)&_ZN6S189C63v17Ev,
  (VTBL_ENTRY)&_ZN6S189C63v18Ev,
  (VTBL_ENTRY)&_ZN6S189C63v19Ev,
  (VTBL_ENTRY)&_ZN6S189C63v20Ev,
  (VTBL_ENTRY)&_ZN6S189C63v21Ev,
  (VTBL_ENTRY)&_ZN6S189C63v22Ev,
  (VTBL_ENTRY)&_ZN6S189C63v23Ev,
  (VTBL_ENTRY)&_ZN6S189C63v24Ev,
  (VTBL_ENTRY)&_ZN6S189C63v25Ev,
  (VTBL_ENTRY)&_ZN6S189C63v26Ev,
  (VTBL_ENTRY)&_ZN6S189C63v27Ev,
  (VTBL_ENTRY)&_ZN6S189C63v28Ev,
  (VTBL_ENTRY)&_ZN6S189C63v29Ev,
  (VTBL_ENTRY)&_ZN6S189C63v30Ev,
  (VTBL_ENTRY)&_ZN6S189C63v31Ev,
  (VTBL_ENTRY)&_ZN6S189C63v32Ev,
  (VTBL_ENTRY)&_ZN6S189C63v33Ev,
  (VTBL_ENTRY)&_ZN6S189C63v34Ev,
  (VTBL_ENTRY)&_ZN6S189C63v35Ev,
  (VTBL_ENTRY)&_ZN6S189C63v36Ev,
  (VTBL_ENTRY)&_ZN6S189C63v37Ev,
  (VTBL_ENTRY)&_ZN6S189C63v38Ev,
  (VTBL_ENTRY)&_ZN6S189C63v39Ev,
  (VTBL_ENTRY)&_ZN6S189C63v40Ev,
  (VTBL_ENTRY)&_ZN6S189C63v41Ev,
  (VTBL_ENTRY)&_ZN6S189C63v42Ev,
  (VTBL_ENTRY)&_ZN6S189C63v43Ev,
  (VTBL_ENTRY)&_ZN6S189C63v44Ev,
  (VTBL_ENTRY)&_ZN6S189C63v45Ev,
  (VTBL_ENTRY)&_ZN6S189C63v46Ev,
  (VTBL_ENTRY)&_ZN6S189C63v47Ev,
  (VTBL_ENTRY)&_ZN6S189C63v48Ev,
  (VTBL_ENTRY)&_ZN6S189C63v49Ev,
  (VTBL_ENTRY)&_ZN6S189C63v50Ev,
  (VTBL_ENTRY)&_ZN6S189C63v51Ev,
  (VTBL_ENTRY)&_ZN6S189C63v52Ev,
  (VTBL_ENTRY)&_ZN6S189C63v53Ev,
  (VTBL_ENTRY)&_ZN6S189C63v54Ev,
  (VTBL_ENTRY)&_ZN6S189C63v55Ev,
  (VTBL_ENTRY)&_ZN6S189C63v56Ev,
  (VTBL_ENTRY)&_ZN6S189C63v57Ev,
  (VTBL_ENTRY)&_ZN6S189C63v58Ev,
  (VTBL_ENTRY)&_ZN6S189C63v59Ev,
  (VTBL_ENTRY)&_ZN6S189C63v60Ev,
  (VTBL_ENTRY)&_ZN6S189C63v61Ev,
  (VTBL_ENTRY)&_ZN6S189C63v62Ev,
  (VTBL_ENTRY)&_ZN6S189C63v63Ev,
  (VTBL_ENTRY)&_ZN6S189C63v64Ev,
  (VTBL_ENTRY)&_ZN6S189C63v65Ev,
  (VTBL_ENTRY)&_ZN6S189C63v66Ev,
  (VTBL_ENTRY)&_ZN6S189C63v67Ev,
  (VTBL_ENTRY)&_ZN6S189C53v68Ev,
  (VTBL_ENTRY)&_ZN6S189C53v69Ev,
  (VTBL_ENTRY)&_ZN6S189C53v70Ev,
  (VTBL_ENTRY)&_ZN6S189C53v71Ev,
  (VTBL_ENTRY)&_ZN6S189C53v72Ev,
  (VTBL_ENTRY)&_ZN6S189C53v73Ev,
  (VTBL_ENTRY)&_ZN6S189C53v74Ev,
  (VTBL_ENTRY)&_ZN6S189C53v75Ev,
  (VTBL_ENTRY)&_ZN6S189C53v76Ev,
  (VTBL_ENTRY)&_ZN6S189C53v77Ev,
  (VTBL_ENTRY)&_ZN6S189C53v78Ev,
  (VTBL_ENTRY)&_ZN6S189C53v79Ev,
  (VTBL_ENTRY)&_ZN6S189C53v80Ev,
  (VTBL_ENTRY)&_ZN6S189C53v81Ev,
  (VTBL_ENTRY)&_ZN6S189C53v82Ev,
  (VTBL_ENTRY)&_ZN6S189C53v83Ev,
  (VTBL_ENTRY)&_ZN6S189C53v84Ev,
  (VTBL_ENTRY)&_ZN6S189C53v85Ev,
  (VTBL_ENTRY)&_ZN6S189C53v86Ev,
  (VTBL_ENTRY)&_ZN6S189C53v87Ev,
  (VTBL_ENTRY)&_ZN6S189C53v88Ev,
  (VTBL_ENTRY)&_ZN6S189C53v89Ev,
  (VTBL_ENTRY)&_ZN6S189C53v90Ev,
  (VTBL_ENTRY)&_ZN6S189C53v91Ev,
  (VTBL_ENTRY)&_ZN6S189C53v92Ev,
  (VTBL_ENTRY)&_ZN6S189C53v93Ev,
  (VTBL_ENTRY)&_ZN6S189C53v94Ev,
};
extern VTBL_ENTRY _ZTI6S189C5[];
extern  VTBL_ENTRY _ZTV6S189C5[];
Class_Descriptor cd_S189C5 = {  "S189C5", // class name
  bases_S189C5, 1,
  &(vtc_S189C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S189C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S189C5),95, //virtual function table var
  2, // 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  S189C4  : S189C5 {
  ::S165C25 s189c4f0;
  unsigned int s189c4f1:1;
  virtual  ~S189C4(); // _ZN6S189C4D1Ev
  virtual void  v95(); // _ZN6S189C43v95Ev
  virtual void  v96(); // _ZN6S189C43v96Ev
  virtual void  v97(); // _ZN6S189C43v97Ev
  virtual void  v98(); // _ZN6S189C43v98Ev
  virtual void  v99(); // _ZN6S189C43v99Ev
  virtual void  v100(); // _ZN6S189C44v100Ev
  virtual void  v101(); // _ZN6S189C44v101Ev
  virtual void  v102(); // _ZN6S189C44v102Ev
  virtual void  v103(); // _ZN6S189C44v103Ev
  virtual void  v104(); // _ZN6S189C44v104Ev
  virtual void  v105(); // _ZN6S189C44v105Ev
  virtual void  v106(); // _ZN6S189C44v106Ev
  virtual void  v107(); // _ZN6S189C44v107Ev
  virtual void  v108(); // _ZN6S189C44v108Ev
  virtual void  v109(); // _ZN6S189C44v109Ev
  virtual void  v110(); // _ZN6S189C44v110Ev
  virtual void  v111(); // _ZN6S189C44v111Ev
  virtual void  v112(); // _ZN6S189C44v112Ev
  S189C4(); // tgen
};
//SIG(-1 S189C4) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S189C4 ::~S189C4(){ note_dtor("S189C4", this);}
void  S189C4 ::v95(){vfunc_called(this, "_ZN6S189C43v95Ev");}
void  S189C4 ::v96(){vfunc_called(this, "_ZN6S189C43v96Ev");}
void  S189C4 ::v97(){vfunc_called(this, "_ZN6S189C43v97Ev");}
void  S189C4 ::v98(){vfunc_called(this, "_ZN6S189C43v98Ev");}
void  S189C4 ::v99(){vfunc_called(this, "_ZN6S189C43v99Ev");}
void  S189C4 ::v100(){vfunc_called(this, "_ZN6S189C44v100Ev");}
void  S189C4 ::v101(){vfunc_called(this, "_ZN6S189C44v101Ev");}
void  S189C4 ::v102(){vfunc_called(this, "_ZN6S189C44v102Ev");}
void  S189C4 ::v103(){vfunc_called(this, "_ZN6S189C44v103Ev");}
void  S189C4 ::v104(){vfunc_called(this, "_ZN6S189C44v104Ev");}
void  S189C4 ::v105(){vfunc_called(this, "_ZN6S189C44v105Ev");}
void  S189C4 ::v106(){vfunc_called(this, "_ZN6S189C44v106Ev");}
void  S189C4 ::v107(){vfunc_called(this, "_ZN6S189C44v107Ev");}
void  S189C4 ::v108(){vfunc_called(this, "_ZN6S189C44v108Ev");}
void  S189C4 ::v109(){vfunc_called(this, "_ZN6S189C44v109Ev");}
void  S189C4 ::v110(){vfunc_called(this, "_ZN6S189C44v110Ev");}
void  S189C4 ::v111(){vfunc_called(this, "_ZN6S189C44v111Ev");}
void  S189C4 ::v112(){vfunc_called(this, "_ZN6S189C44v112Ev");}
S189C4 ::S189C4(){ note_ctor("S189C4", this);} // tgen

static void Test_S189C4()
{
  extern Class_Descriptor cd_S189C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S189C4, buf);
    S189C4 *dp, &lv = *(dp=new (buf) S189C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S189C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S189C4)");
    check_base_class_offset(lv, (S189C6*)(S189C5*), 0, "S189C4");
    check_base_class_offset(lv, (S189C5*), 0, "S189C4");
    check_field_offset(lv, s189c4f0, ABISELECT(232,180), "S189C4.s189c4f0");
    set_bf_and_test(lv, s189c4f1, ABISELECT(248,192), 0, 1, 1, "S189C4");
    test_class_info(&lv, &cd_S189C4);
    dp->~S189C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS189C4(Test_S189C4, "S189C4", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S189C4C1Ev();
extern void _ZN6S189C4D1Ev();
Name_Map name_map_S189C4[] = {
  NSPAIR(_ZN6S189C4C1Ev),
  NSPAIR(_ZN6S189C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S189C6;
extern VTBL_ENTRY _ZTI6S189C6[];
extern  VTBL_ENTRY _ZTV6S189C6[];
extern Class_Descriptor cd_S189C5;
extern VTBL_ENTRY _ZTI6S189C5[];
extern  VTBL_ENTRY _ZTV6S189C5[];
static Base_Class bases_S189C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S189C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S189C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S189C4[];
extern void _ZN6S189C4D1Ev();
extern void _ZN6S189C4D0Ev();
extern void _ZN6S189C62v4Ev();
extern void _ZN6S189C62v5Ev();
extern void _ZN6S189C62v6Ev();
extern void _ZN6S189C62v7Ev();
extern void _ZN6S189C62v8Ev();
extern void _ZN6S189C62v9Ev();
extern void _ZN6S189C63v10Ev();
extern void _ZN6S189C63v11Ev();
extern void _ZN6S189C63v12Ev();
extern void _ZN6S189C63v13Ev();
extern void _ZN6S189C63v14Ev();
extern void _ZN6S189C63v15Ev();
extern void _ZN6S189C63v16Ev();
extern void _ZN6S189C63v17Ev();
extern void _ZN6S189C63v18Ev();
extern void _ZN6S189C63v19Ev();
extern void _ZN6S189C63v20Ev();
extern void _ZN6S189C63v21Ev();
extern void _ZN6S189C63v22Ev();
extern void _ZN6S189C63v23Ev();
extern void _ZN6S189C63v24Ev();
extern void _ZN6S189C63v25Ev();
extern void _ZN6S189C63v26Ev();
extern void _ZN6S189C63v27Ev();
extern void _ZN6S189C63v28Ev();
extern void _ZN6S189C63v29Ev();
extern void _ZN6S189C63v30Ev();
extern void _ZN6S189C63v31Ev();
extern void _ZN6S189C63v32Ev();
extern void _ZN6S189C63v33Ev();
extern void _ZN6S189C63v34Ev();
extern void _ZN6S189C63v35Ev();
extern void _ZN6S189C63v36Ev();
extern void _ZN6S189C63v37Ev();
extern void _ZN6S189C63v38Ev();
extern void _ZN6S189C63v39Ev();
extern void _ZN6S189C63v40Ev();
extern void _ZN6S189C63v41Ev();
extern void _ZN6S189C63v42Ev();
extern void _ZN6S189C63v43Ev();
extern void _ZN6S189C63v44Ev();
extern void _ZN6S189C63v45Ev();
extern void _ZN6S189C63v46Ev();
extern void _ZN6S189C63v47Ev();
extern void _ZN6S189C63v48Ev();
extern void _ZN6S189C63v49Ev();
extern void _ZN6S189C63v50Ev();
extern void _ZN6S189C63v51Ev();
extern void _ZN6S189C63v52Ev();
extern void _ZN6S189C63v53Ev();
extern void _ZN6S189C63v54Ev();
extern void _ZN6S189C63v55Ev();
extern void _ZN6S189C63v56Ev();
extern void _ZN6S189C63v57Ev();
extern void _ZN6S189C63v58Ev();
extern void _ZN6S189C63v59Ev();
extern void _ZN6S189C63v60Ev();
extern void _ZN6S189C63v61Ev();
extern void _ZN6S189C63v62Ev();
extern void _ZN6S189C63v63Ev();
extern void _ZN6S189C63v64Ev();
extern void _ZN6S189C63v65Ev();
extern void _ZN6S189C63v66Ev();
extern void _ZN6S189C63v67Ev();
extern void _ZN6S189C53v68Ev();
extern void _ZN6S189C53v69Ev();
extern void _ZN6S189C53v70Ev();
extern void _ZN6S189C53v71Ev();
extern void _ZN6S189C53v72Ev();
extern void _ZN6S189C53v73Ev();
extern void _ZN6S189C53v74Ev();
extern void _ZN6S189C53v75Ev();
extern void _ZN6S189C53v76Ev();
extern void _ZN6S189C53v77Ev();
extern void _ZN6S189C53v78Ev();
extern void _ZN6S189C53v79Ev();
extern void _ZN6S189C53v80Ev();
extern void _ZN6S189C53v81Ev();
extern void _ZN6S189C53v82Ev();
extern void _ZN6S189C53v83Ev();
extern void _ZN6S189C53v84Ev();
extern void _ZN6S189C53v85Ev();
extern void _ZN6S189C53v86Ev();
extern void _ZN6S189C53v87Ev();
extern void _ZN6S189C53v88Ev();
extern void _ZN6S189C53v89Ev();
extern void _ZN6S189C53v90Ev();
extern void _ZN6S189C53v91Ev();
extern void _ZN6S189C53v92Ev();
extern void _ZN6S189C53v93Ev();
extern void _ZN6S189C53v94Ev();
extern void _ZN6S189C43v95Ev();
extern void _ZN6S189C43v96Ev();
extern void _ZN6S189C43v97Ev();
extern void _ZN6S189C43v98Ev();
extern void _ZN6S189C43v99Ev();
extern void _ZN6S189C44v100Ev();
extern void _ZN6S189C44v101Ev();
extern void _ZN6S189C44v102Ev();
extern void _ZN6S189C44v103Ev();
extern void _ZN6S189C44v104Ev();
extern void _ZN6S189C44v105Ev();
extern void _ZN6S189C44v106Ev();
extern void _ZN6S189C44v107Ev();
extern void _ZN6S189C44v108Ev();
extern void _ZN6S189C44v109Ev();
extern void _ZN6S189C44v110Ev();
extern void _ZN6S189C44v111Ev();
extern void _ZN6S189C44v112Ev();
static  VTBL_ENTRY vtc_S189C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S189C4[0]),
  (VTBL_ENTRY)&_ZN6S189C4D1Ev,
  (VTBL_ENTRY)&_ZN6S189C4D0Ev,
  (VTBL_ENTRY)&_ZN6S189C62v4Ev,
  (VTBL_ENTRY)&_ZN6S189C62v5Ev,
  (VTBL_ENTRY)&_ZN6S189C62v6Ev,
  (VTBL_ENTRY)&_ZN6S189C62v7Ev,
  (VTBL_ENTRY)&_ZN6S189C62v8Ev,
  (VTBL_ENTRY)&_ZN6S189C62v9Ev,
  (VTBL_ENTRY)&_ZN6S189C63v10Ev,
  (VTBL_ENTRY)&_ZN6S189C63v11Ev,
  (VTBL_ENTRY)&_ZN6S189C63v12Ev,
  (VTBL_ENTRY)&_ZN6S189C63v13Ev,
  (VTBL_ENTRY)&_ZN6S189C63v14Ev,
  (VTBL_ENTRY)&_ZN6S189C63v15Ev,
  (VTBL_ENTRY)&_ZN6S189C63v16Ev,
  (VTBL_ENTRY)&_ZN6S189C63v17Ev,
  (VTBL_ENTRY)&_ZN6S189C63v18Ev,
  (VTBL_ENTRY)&_ZN6S189C63v19Ev,
  (VTBL_ENTRY)&_ZN6S189C63v20Ev,
  (VTBL_ENTRY)&_ZN6S189C63v21Ev,
  (VTBL_ENTRY)&_ZN6S189C63v22Ev,
  (VTBL_ENTRY)&_ZN6S189C63v23Ev,
  (VTBL_ENTRY)&_ZN6S189C63v24Ev,
  (VTBL_ENTRY)&_ZN6S189C63v25Ev,
  (VTBL_ENTRY)&_ZN6S189C63v26Ev,
  (VTBL_ENTRY)&_ZN6S189C63v27Ev,
  (VTBL_ENTRY)&_ZN6S189C63v28Ev,
  (VTBL_ENTRY)&_ZN6S189C63v29Ev,
  (VTBL_ENTRY)&_ZN6S189C63v30Ev,
  (VTBL_ENTRY)&_ZN6S189C63v31Ev,
  (VTBL_ENTRY)&_ZN6S189C63v32Ev,
  (VTBL_ENTRY)&_ZN6S189C63v33Ev,
  (VTBL_ENTRY)&_ZN6S189C63v34Ev,
  (VTBL_ENTRY)&_ZN6S189C63v35Ev,
  (VTBL_ENTRY)&_ZN6S189C63v36Ev,
  (VTBL_ENTRY)&_ZN6S189C63v37Ev,
  (VTBL_ENTRY)&_ZN6S189C63v38Ev,
  (VTBL_ENTRY)&_ZN6S189C63v39Ev,
  (VTBL_ENTRY)&_ZN6S189C63v40Ev,
  (VTBL_ENTRY)&_ZN6S189C63v41Ev,
  (VTBL_ENTRY)&_ZN6S189C63v42Ev,
  (VTBL_ENTRY)&_ZN6S189C63v43Ev,
  (VTBL_ENTRY)&_ZN6S189C63v44Ev,
  (VTBL_ENTRY)&_ZN6S189C63v45Ev,
  (VTBL_ENTRY)&_ZN6S189C63v46Ev,
  (VTBL_ENTRY)&_ZN6S189C63v47Ev,
  (VTBL_ENTRY)&_ZN6S189C63v48Ev,
  (VTBL_ENTRY)&_ZN6S189C63v49Ev,
  (VTBL_ENTRY)&_ZN6S189C63v50Ev,
  (VTBL_ENTRY)&_ZN6S189C63v51Ev,
  (VTBL_ENTRY)&_ZN6S189C63v52Ev,
  (VTBL_ENTRY)&_ZN6S189C63v53Ev,
  (VTBL_ENTRY)&_ZN6S189C63v54Ev,
  (VTBL_ENTRY)&_ZN6S189C63v55Ev,
  (VTBL_ENTRY)&_ZN6S189C63v56Ev,
  (VTBL_ENTRY)&_ZN6S189C63v57Ev,
  (VTBL_ENTRY)&_ZN6S189C63v58Ev,
  (VTBL_ENTRY)&_ZN6S189C63v59Ev,
  (VTBL_ENTRY)&_ZN6S189C63v60Ev,
  (VTBL_ENTRY)&_ZN6S189C63v61Ev,
  (VTBL_ENTRY)&_ZN6S189C63v62Ev,
  (VTBL_ENTRY)&_ZN6S189C63v63Ev,
  (VTBL_ENTRY)&_ZN6S189C63v64Ev,
  (VTBL_ENTRY)&_ZN6S189C63v65Ev,
  (VTBL_ENTRY)&_ZN6S189C63v66Ev,
  (VTBL_ENTRY)&_ZN6S189C63v67Ev,
  (VTBL_ENTRY)&_ZN6S189C53v68Ev,
  (VTBL_ENTRY)&_ZN6S189C53v69Ev,
  (VTBL_ENTRY)&_ZN6S189C53v70Ev,
  (VTBL_ENTRY)&_ZN6S189C53v71Ev,
  (VTBL_ENTRY)&_ZN6S189C53v72Ev,
  (VTBL_ENTRY)&_ZN6S189C53v73Ev,
  (VTBL_ENTRY)&_ZN6S189C53v74Ev,
  (VTBL_ENTRY)&_ZN6S189C53v75Ev,
  (VTBL_ENTRY)&_ZN6S189C53v76Ev,
  (VTBL_ENTRY)&_ZN6S189C53v77Ev,
  (VTBL_ENTRY)&_ZN6S189C53v78Ev,
  (VTBL_ENTRY)&_ZN6S189C53v79Ev,
  (VTBL_ENTRY)&_ZN6S189C53v80Ev,
  (VTBL_ENTRY)&_ZN6S189C53v81Ev,
  (VTBL_ENTRY)&_ZN6S189C53v82Ev,
  (VTBL_ENTRY)&_ZN6S189C53v83Ev,
  (VTBL_ENTRY)&_ZN6S189C53v84Ev,
  (VTBL_ENTRY)&_ZN6S189C53v85Ev,
  (VTBL_ENTRY)&_ZN6S189C53v86Ev,
  (VTBL_ENTRY)&_ZN6S189C53v87Ev,
  (VTBL_ENTRY)&_ZN6S189C53v88Ev,
  (VTBL_ENTRY)&_ZN6S189C53v89Ev,
  (VTBL_ENTRY)&_ZN6S189C53v90Ev,
  (VTBL_ENTRY)&_ZN6S189C53v91Ev,
  (VTBL_ENTRY)&_ZN6S189C53v92Ev,
  (VTBL_ENTRY)&_ZN6S189C53v93Ev,
  (VTBL_ENTRY)&_ZN6S189C53v94Ev,
  (VTBL_ENTRY)&_ZN6S189C43v95Ev,
  (VTBL_ENTRY)&_ZN6S189C43v96Ev,
  (VTBL_ENTRY)&_ZN6S189C43v97Ev,
  (VTBL_ENTRY)&_ZN6S189C43v98Ev,
  (VTBL_ENTRY)&_ZN6S189C43v99Ev,
  (VTBL_ENTRY)&_ZN6S189C44v100Ev,
  (VTBL_ENTRY)&_ZN6S189C44v101Ev,
  (VTBL_ENTRY)&_ZN6S189C44v102Ev,
  (VTBL_ENTRY)&_ZN6S189C44v103Ev,
  (VTBL_ENTRY)&_ZN6S189C44v104Ev,
  (VTBL_ENTRY)&_ZN6S189C44v105Ev,
  (VTBL_ENTRY)&_ZN6S189C44v106Ev,
  (VTBL_ENTRY)&_ZN6S189C44v107Ev,
  (VTBL_ENTRY)&_ZN6S189C44v108Ev,
  (VTBL_ENTRY)&_ZN6S189C44v109Ev,
  (VTBL_ENTRY)&_ZN6S189C44v110Ev,
  (VTBL_ENTRY)&_ZN6S189C44v111Ev,
  (VTBL_ENTRY)&_ZN6S189C44v112Ev,
};
extern VTBL_ENTRY _ZTI6S189C4[];
extern  VTBL_ENTRY _ZTV6S189C4[];
Class_Descriptor cd_S189C4 = {  "S189C4", // class name
  bases_S189C4, 2,
  &(vtc_S189C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S189C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S189C4),113, //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  S189C3  : S189C4 {
  int s189c3f0[3];
  virtual  ~S189C3(); // _ZN6S189C3D1Ev
  virtual void  v113(); // _ZN6S189C34v113Ev
  virtual void  v114(); // _ZN6S189C34v114Ev
  virtual void  v115(); // _ZN6S189C34v115Ev
  virtual void  v116(); // _ZN6S189C34v116Ev
  virtual void  v117(); // _ZN6S189C34v117Ev
  virtual void  v118(); // _ZN6S189C34v118Ev
  virtual void  v119(); // _ZN6S189C34v119Ev
  S189C3(); // tgen
};
//SIG(-1 S189C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 Fi[3]}


 S189C3 ::~S189C3(){ note_dtor("S189C3", this);}
void  S189C3 ::v113(){vfunc_called(this, "_ZN6S189C34v113Ev");}
void  S189C3 ::v114(){vfunc_called(this, "_ZN6S189C34v114Ev");}
void  S189C3 ::v115(){vfunc_called(this, "_ZN6S189C34v115Ev");}
void  S189C3 ::v116(){vfunc_called(this, "_ZN6S189C34v116Ev");}
void  S189C3 ::v117(){vfunc_called(this, "_ZN6S189C34v117Ev");}
void  S189C3 ::v118(){vfunc_called(this, "_ZN6S189C34v118Ev");}
void  S189C3 ::v119(){vfunc_called(this, "_ZN6S189C34v119Ev");}
S189C3 ::S189C3(){ note_ctor("S189C3", this);} // tgen

static void Test_S189C3()
{
  extern Class_Descriptor cd_S189C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,53)];
    init_test(&cd_S189C3, buf);
    S189C3 *dp, &lv = *(dp=new (buf) S189C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,208), "sizeof(S189C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S189C3)");
    check_base_class_offset(lv, (S189C6*)(S189C5*)(S189C4*), 0, "S189C3");
    check_base_class_offset(lv, (S189C5*)(S189C4*), 0, "S189C3");
    check_base_class_offset(lv, (S189C4*), 0, "S189C3");
    check_field_offset(lv, s189c3f0, ABISELECT(252,196), "S189C3.s189c3f0");
    test_class_info(&lv, &cd_S189C3);
    dp->~S189C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS189C3(Test_S189C3, "S189C3", ABISELECT(264,208));

#else // __cplusplus

extern void _ZN6S189C3C1Ev();
extern void _ZN6S189C3D1Ev();
Name_Map name_map_S189C3[] = {
  NSPAIR(_ZN6S189C3C1Ev),
  NSPAIR(_ZN6S189C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S189C6;
extern VTBL_ENTRY _ZTI6S189C6[];
extern  VTBL_ENTRY _ZTV6S189C6[];
extern Class_Descriptor cd_S189C5;
extern VTBL_ENTRY _ZTI6S189C5[];
extern  VTBL_ENTRY _ZTV6S189C5[];
extern Class_Descriptor cd_S189C4;
extern VTBL_ENTRY _ZTI6S189C4[];
extern  VTBL_ENTRY _ZTV6S189C4[];
static Base_Class bases_S189C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S189C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S189C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S189C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S189C3[];
extern void _ZN6S189C3D1Ev();
extern void _ZN6S189C3D0Ev();
extern void _ZN6S189C62v4Ev();
extern void _ZN6S189C62v5Ev();
extern void _ZN6S189C62v6Ev();
extern void _ZN6S189C62v7Ev();
extern void _ZN6S189C62v8Ev();
extern void _ZN6S189C62v9Ev();
extern void _ZN6S189C63v10Ev();
extern void _ZN6S189C63v11Ev();
extern void _ZN6S189C63v12Ev();
extern void _ZN6S189C63v13Ev();
extern void _ZN6S189C63v14Ev();
extern void _ZN6S189C63v15Ev();
extern void _ZN6S189C63v16Ev();
extern void _ZN6S189C63v17Ev();
extern void _ZN6S189C63v18Ev();
extern void _ZN6S189C63v19Ev();
extern void _ZN6S189C63v20Ev();
extern void _ZN6S189C63v21Ev();
extern void _ZN6S189C63v22Ev();
extern void _ZN6S189C63v23Ev();
extern void _ZN6S189C63v24Ev();
extern void _ZN6S189C63v25Ev();
extern void _ZN6S189C63v26Ev();
extern void _ZN6S189C63v27Ev();
extern void _ZN6S189C63v28Ev();
extern void _ZN6S189C63v29Ev();
extern void _ZN6S189C63v30Ev();
extern void _ZN6S189C63v31Ev();
extern void _ZN6S189C63v32Ev();
extern void _ZN6S189C63v33Ev();
extern void _ZN6S189C63v34Ev();
extern void _ZN6S189C63v35Ev();
extern void _ZN6S189C63v36Ev();
extern void _ZN6S189C63v37Ev();
extern void _ZN6S189C63v38Ev();
extern void _ZN6S189C63v39Ev();
extern void _ZN6S189C63v40Ev();
extern void _ZN6S189C63v41Ev();
extern void _ZN6S189C63v42Ev();
extern void _ZN6S189C63v43Ev();
extern void _ZN6S189C63v44Ev();
extern void _ZN6S189C63v45Ev();
extern void _ZN6S189C63v46Ev();
extern void _ZN6S189C63v47Ev();
extern void _ZN6S189C63v48Ev();
extern void _ZN6S189C63v49Ev();
extern void _ZN6S189C63v50Ev();
extern void _ZN6S189C63v51Ev();
extern void _ZN6S189C63v52Ev();
extern void _ZN6S189C63v53Ev();
extern void _ZN6S189C63v54Ev();
extern void _ZN6S189C63v55Ev();
extern void _ZN6S189C63v56Ev();
extern void _ZN6S189C63v57Ev();
extern void _ZN6S189C63v58Ev();
extern void _ZN6S189C63v59Ev();
extern void _ZN6S189C63v60Ev();
extern void _ZN6S189C63v61Ev();
extern void _ZN6S189C63v62Ev();
extern void _ZN6S189C63v63Ev();
extern void _ZN6S189C63v64Ev();
extern void _ZN6S189C63v65Ev();
extern void _ZN6S189C63v66Ev();
extern void _ZN6S189C63v67Ev();
extern void _ZN6S189C53v68Ev();
extern void _ZN6S189C53v69Ev();
extern void _ZN6S189C53v70Ev();
extern void _ZN6S189C53v71Ev();
extern void _ZN6S189C53v72Ev();
extern void _ZN6S189C53v73Ev();
extern void _ZN6S189C53v74Ev();
extern void _ZN6S189C53v75Ev();
extern void _ZN6S189C53v76Ev();
extern void _ZN6S189C53v77Ev();
extern void _ZN6S189C53v78Ev();
extern void _ZN6S189C53v79Ev();
extern void _ZN6S189C53v80Ev();
extern void _ZN6S189C53v81Ev();
extern void _ZN6S189C53v82Ev();
extern void _ZN6S189C53v83Ev();
extern void _ZN6S189C53v84Ev();
extern void _ZN6S189C53v85Ev();
extern void _ZN6S189C53v86Ev();
extern void _ZN6S189C53v87Ev();
extern void _ZN6S189C53v88Ev();
extern void _ZN6S189C53v89Ev();
extern void _ZN6S189C53v90Ev();
extern void _ZN6S189C53v91Ev();
extern void _ZN6S189C53v92Ev();
extern void _ZN6S189C53v93Ev();
extern void _ZN6S189C53v94Ev();
extern void _ZN6S189C43v95Ev();
extern void _ZN6S189C43v96Ev();
extern void _ZN6S189C43v97Ev();
extern void _ZN6S189C43v98Ev();
extern void _ZN6S189C43v99Ev();
extern void _ZN6S189C44v100Ev();
extern void _ZN6S189C44v101Ev();
extern void _ZN6S189C44v102Ev();
extern void _ZN6S189C44v103Ev();
extern void _ZN6S189C44v104Ev();
extern void _ZN6S189C44v105Ev();
extern void _ZN6S189C44v106Ev();
extern void _ZN6S189C44v107Ev();
extern void _ZN6S189C44v108Ev();
extern void _ZN6S189C44v109Ev();
extern void _ZN6S189C44v110Ev();
extern void _ZN6S189C44v111Ev();
extern void _ZN6S189C44v112Ev();
extern void _ZN6S189C34v113Ev();
extern void _ZN6S189C34v114Ev();
extern void _ZN6S189C34v115Ev();
extern void _ZN6S189C34v116Ev();
extern void _ZN6S189C34v117Ev();
extern void _ZN6S189C34v118Ev();
extern void _ZN6S189C34v119Ev();
static  VTBL_ENTRY vtc_S189C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S189C3[0]),
  (VTBL_ENTRY)&_ZN6S189C3D1Ev,
  (VTBL_ENTRY)&_ZN6S189C3D0Ev,
  (VTBL_ENTRY)&_ZN6S189C62v4Ev,
  (VTBL_ENTRY)&_ZN6S189C62v5Ev,
  (VTBL_ENTRY)&_ZN6S189C62v6Ev,
  (VTBL_ENTRY)&_ZN6S189C62v7Ev,
  (VTBL_ENTRY)&_ZN6S189C62v8Ev,
  (VTBL_ENTRY)&_ZN6S189C62v9Ev,
  (VTBL_ENTRY)&_ZN6S189C63v10Ev,
  (VTBL_ENTRY)&_ZN6S189C63v11Ev,
  (VTBL_ENTRY)&_ZN6S189C63v12Ev,
  (VTBL_ENTRY)&_ZN6S189C63v13Ev,
  (VTBL_ENTRY)&_ZN6S189C63v14Ev,
  (VTBL_ENTRY)&_ZN6S189C63v15Ev,
  (VTBL_ENTRY)&_ZN6S189C63v16Ev,
  (VTBL_ENTRY)&_ZN6S189C63v17Ev,
  (VTBL_ENTRY)&_ZN6S189C63v18Ev,
  (VTBL_ENTRY)&_ZN6S189C63v19Ev,
  (VTBL_ENTRY)&_ZN6S189C63v20Ev,
  (VTBL_ENTRY)&_ZN6S189C63v21Ev,
  (VTBL_ENTRY)&_ZN6S189C63v22Ev,
  (VTBL_ENTRY)&_ZN6S189C63v23Ev,
  (VTBL_ENTRY)&_ZN6S189C63v24Ev,
  (VTBL_ENTRY)&_ZN6S189C63v25Ev,
  (VTBL_ENTRY)&_ZN6S189C63v26Ev,
  (VTBL_ENTRY)&_ZN6S189C63v27Ev,
  (VTBL_ENTRY)&_ZN6S189C63v28Ev,
  (VTBL_ENTRY)&_ZN6S189C63v29Ev,
  (VTBL_ENTRY)&_ZN6S189C63v30Ev,
  (VTBL_ENTRY)&_ZN6S189C63v31Ev,
  (VTBL_ENTRY)&_ZN6S189C63v32Ev,
  (VTBL_ENTRY)&_ZN6S189C63v33Ev,
  (VTBL_ENTRY)&_ZN6S189C63v34Ev,
  (VTBL_ENTRY)&_ZN6S189C63v35Ev,
  (VTBL_ENTRY)&_ZN6S189C63v36Ev,
  (VTBL_ENTRY)&_ZN6S189C63v37Ev,
  (VTBL_ENTRY)&_ZN6S189C63v38Ev,
  (VTBL_ENTRY)&_ZN6S189C63v39Ev,
  (VTBL_ENTRY)&_ZN6S189C63v40Ev,
  (VTBL_ENTRY)&_ZN6S189C63v41Ev,
  (VTBL_ENTRY)&_ZN6S189C63v42Ev,
  (VTBL_ENTRY)&_ZN6S189C63v43Ev,
  (VTBL_ENTRY)&_ZN6S189C63v44Ev,
  (VTBL_ENTRY)&_ZN6S189C63v45Ev,
  (VTBL_ENTRY)&_ZN6S189C63v46Ev,
  (VTBL_ENTRY)&_ZN6S189C63v47Ev,
  (VTBL_ENTRY)&_ZN6S189C63v48Ev,
  (VTBL_ENTRY)&_ZN6S189C63v49Ev,
  (VTBL_ENTRY)&_ZN6S189C63v50Ev,
  (VTBL_ENTRY)&_ZN6S189C63v51Ev,
  (VTBL_ENTRY)&_ZN6S189C63v52Ev,
  (VTBL_ENTRY)&_ZN6S189C63v53Ev,
  (VTBL_ENTRY)&_ZN6S189C63v54Ev,
  (VTBL_ENTRY)&_ZN6S189C63v55Ev,
  (VTBL_ENTRY)&_ZN6S189C63v56Ev,
  (VTBL_ENTRY)&_ZN6S189C63v57Ev,
  (VTBL_ENTRY)&_ZN6S189C63v58Ev,
  (VTBL_ENTRY)&_ZN6S189C63v59Ev,
  (VTBL_ENTRY)&_ZN6S189C63v60Ev,
  (VTBL_ENTRY)&_ZN6S189C63v61Ev,
  (VTBL_ENTRY)&_ZN6S189C63v62Ev,
  (VTBL_ENTRY)&_ZN6S189C63v63Ev,
  (VTBL_ENTRY)&_ZN6S189C63v64Ev,
  (VTBL_ENTRY)&_ZN6S189C63v65Ev,
  (VTBL_ENTRY)&_ZN6S189C63v66Ev,
  (VTBL_ENTRY)&_ZN6S189C63v67Ev,
  (VTBL_ENTRY)&_ZN6S189C53v68Ev,
  (VTBL_ENTRY)&_ZN6S189C53v69Ev,
  (VTBL_ENTRY)&_ZN6S189C53v70Ev,
  (VTBL_ENTRY)&_ZN6S189C53v71Ev,
  (VTBL_ENTRY)&_ZN6S189C53v72Ev,
  (VTBL_ENTRY)&_ZN6S189C53v73Ev,
  (VTBL_ENTRY)&_ZN6S189C53v74Ev,
  (VTBL_ENTRY)&_ZN6S189C53v75Ev,
  (VTBL_ENTRY)&_ZN6S189C53v76Ev,
  (VTBL_ENTRY)&_ZN6S189C53v77Ev,
  (VTBL_ENTRY)&_ZN6S189C53v78Ev,
  (VTBL_ENTRY)&_ZN6S189C53v79Ev,
  (VTBL_ENTRY)&_ZN6S189C53v80Ev,
  (VTBL_ENTRY)&_ZN6S189C53v81Ev,
  (VTBL_ENTRY)&_ZN6S189C53v82Ev,
  (VTBL_ENTRY)&_ZN6S189C53v83Ev,
  (VTBL_ENTRY)&_ZN6S189C53v84Ev,
  (VTBL_ENTRY)&_ZN6S189C53v85Ev,
  (VTBL_ENTRY)&_ZN6S189C53v86Ev,
  (VTBL_ENTRY)&_ZN6S189C53v87Ev,
  (VTBL_ENTRY)&_ZN6S189C53v88Ev,
  (VTBL_ENTRY)&_ZN6S189C53v89Ev,
  (VTBL_ENTRY)&_ZN6S189C53v90Ev,
  (VTBL_ENTRY)&_ZN6S189C53v91Ev,
  (VTBL_ENTRY)&_ZN6S189C53v92Ev,
  (VTBL_ENTRY)&_ZN6S189C53v93Ev,
  (VTBL_ENTRY)&_ZN6S189C53v94Ev,
  (VTBL_ENTRY)&_ZN6S189C43v95Ev,
  (VTBL_ENTRY)&_ZN6S189C43v96Ev,
  (VTBL_ENTRY)&_ZN6S189C43v97Ev,
  (VTBL_ENTRY)&_ZN6S189C43v98Ev,
  (VTBL_ENTRY)&_ZN6S189C43v99Ev,
  (VTBL_ENTRY)&_ZN6S189C44v100Ev,
  (VTBL_ENTRY)&_ZN6S189C44v101Ev,
  (VTBL_ENTRY)&_ZN6S189C44v102Ev,
  (VTBL_ENTRY)&_ZN6S189C44v103Ev,
  (VTBL_ENTRY)&_ZN6S189C44v104Ev,
  (VTBL_ENTRY)&_ZN6S189C44v105Ev,
  (VTBL_ENTRY)&_ZN6S189C44v106Ev,
  (VTBL_ENTRY)&_ZN6S189C44v107Ev,
  (VTBL_ENTRY)&_ZN6S189C44v108Ev,
  (VTBL_ENTRY)&_ZN6S189C44v109Ev,
  (VTBL_ENTRY)&_ZN6S189C44v110Ev,
  (VTBL_ENTRY)&_ZN6S189C44v111Ev,
  (VTBL_ENTRY)&_ZN6S189C44v112Ev,
  (VTBL_ENTRY)&_ZN6S189C34v113Ev,
  (VTBL_ENTRY)&_ZN6S189C34v114Ev,
  (VTBL_ENTRY)&_ZN6S189C34v115Ev,
  (VTBL_ENTRY)&_ZN6S189C34v116Ev,
  (VTBL_ENTRY)&_ZN6S189C34v117Ev,
  (VTBL_ENTRY)&_ZN6S189C34v118Ev,
  (VTBL_ENTRY)&_ZN6S189C34v119Ev,
};
extern VTBL_ENTRY _ZTI6S189C3[];
extern  VTBL_ENTRY _ZTV6S189C3[];
Class_Descriptor cd_S189C3 = {  "S189C3", // class name
  bases_S189C3, 3,
  &(vtc_S189C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,208), // object size
  NSPAIRA(_ZTI6S189C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S189C3),120, //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  S189C2  : S189C3 {
  unsigned int s189c2f0:1;
  ::S165C20 s189c2f1;
  ::S165C14 s189c2f2;
  ::S165C8_nt s189c2f3;
  virtual  ~S189C2(); // _ZN6S189C2D1Ev
  virtual void  v120(); // _ZN6S189C24v120Ev
  virtual void  v121(); // _ZN6S189C24v121Ev
  virtual void  v122(); // _ZN6S189C24v122Ev
  virtual void  v123(); // _ZN6S189C24v123Ev
  virtual void  v124(); // _ZN6S189C24v124Ev
  virtual void  v125(); // _ZN6S189C24v125Ev
  S189C2(); // tgen
};
//SIG(-1 S189C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v93 v94 v95 v96 v97 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC15{ BC16{ BC9}} Fi:1} vd v116 v117 v118 v119 v120 v121 v122 Fi[3]} vd v1 v2 v3 v4 v5 v6 Fi:1 FC17{ BC18{ BC9}} FC19{ BC20{ BC9}} FC21{ BC22{ BC9}}}


 S189C2 ::~S189C2(){ note_dtor("S189C2", this);}
void  S189C2 ::v120(){vfunc_called(this, "_ZN6S189C24v120Ev");}
void  S189C2 ::v121(){vfunc_called(this, "_ZN6S189C24v121Ev");}
void  S189C2 ::v122(){vfunc_called(this, "_ZN6S189C24v122Ev");}
void  S189C2 ::v123(){vfunc_called(this, "_ZN6S189C24v123Ev");}
void  S189C2 ::v124(){vfunc_called(this, "_ZN6S189C24v124Ev");}
void  S189C2 ::v125(){vfunc_called(this, "_ZN6S189C24v125Ev");}
S189C2 ::S189C2(){ note_ctor("S189C2", this);} // tgen

static void Test_S189C2()
{
  extern Class_Descriptor cd_S189C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,63)];
    init_test(&cd_S189C2, buf);
    S189C2 *dp, &lv = *(dp=new (buf) S189C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,248), "sizeof(S189C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S189C2)");
    check_base_class_offset(lv, (S189C6*)(S189C5*)(S189C4*)(S189C3*), 0, "S189C2");
    check_base_class_offset(lv, (S189C5*)(S189C4*)(S189C3*), 0, "S189C2");
    check_base_class_offset(lv, (S189C4*)(S189C3*), 0, "S189C2");
    check_base_class_offset(lv, (S189C3*), 0, "S189C2");
    set_bf_and_test(lv, s189c2f0, ABISELECT(264,208), 0, 1, 1, "S189C2");
    check_field_offset(lv, s189c2f1, ABISELECT(272,212), "S189C2.s189c2f1");
    check_field_offset(lv, s189c2f2, ABISELECT(288,224), "S189C2.s189c2f2");
    check_field_offset(lv, s189c2f3, ABISELECT(304,236), "S189C2.s189c2f3");
    test_class_info(&lv, &cd_S189C2);
    dp->~S189C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS189C2(Test_S189C2, "S189C2", ABISELECT(320,248));

#else // __cplusplus

extern void _ZN6S189C2C1Ev();
extern void _ZN6S189C2D1Ev();
Name_Map name_map_S189C2[] = {
  NSPAIR(_ZN6S189C2C1Ev),
  NSPAIR(_ZN6S189C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S189C6;
extern VTBL_ENTRY _ZTI6S189C6[];
extern  VTBL_ENTRY _ZTV6S189C6[];
extern Class_Descriptor cd_S189C5;
extern VTBL_ENTRY _ZTI6S189C5[];
extern  VTBL_ENTRY _ZTV6S189C5[];
extern Class_Descriptor cd_S189C4;
extern VTBL_ENTRY _ZTI6S189C4[];
extern  VTBL_ENTRY _ZTV6S189C4[];
extern Class_Descriptor cd_S189C3;
extern VTBL_ENTRY _ZTI6S189C3[];
extern  VTBL_ENTRY _ZTV6S189C3[];
static Base_Class bases_S189C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S189C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S189C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S189C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S189C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S189C2[];
extern void _ZN6S189C2D1Ev();
extern void _ZN6S189C2D0Ev();
extern void _ZN6S189C62v4Ev();
extern void _ZN6S189C62v5Ev();
extern void _ZN6S189C62v6Ev();
extern void _ZN6S189C62v7Ev();
extern void _ZN6S189C62v8Ev();
extern void _ZN6S189C62v9Ev();
extern void _ZN6S189C63v10Ev();
extern void _ZN6S189C63v11Ev();
extern void _ZN6S189C63v12Ev();
extern void _ZN6S189C63v13Ev();
extern void _ZN6S189C63v14Ev();
extern void _ZN6S189C63v15Ev();
extern void _ZN6S189C63v16Ev();
extern void _ZN6S189C63v17Ev();
extern void _ZN6S189C63v18Ev();
extern void _ZN6S189C63v19Ev();
extern void _ZN6S189C63v20Ev();
extern void _ZN6S189C63v21Ev();
extern void _ZN6S189C63v22Ev();
extern void _ZN6S189C63v23Ev();
extern void _ZN6S189C63v24Ev();
extern void _ZN6S189C63v25Ev();
extern void _ZN6S189C63v26Ev();
extern void _ZN6S189C63v27Ev();
extern void _ZN6S189C63v28Ev();
extern void _ZN6S189C63v29Ev();
extern void _ZN6S189C63v30Ev();
extern void _ZN6S189C63v31Ev();
extern void _ZN6S189C63v32Ev();
extern void _ZN6S189C63v33Ev();
extern void _ZN6S189C63v34Ev();
extern void _ZN6S189C63v35Ev();
extern void _ZN6S189C63v36Ev();
extern void _ZN6S189C63v37Ev();
extern void _ZN6S189C63v38Ev();
extern void _ZN6S189C63v39Ev();
extern void _ZN6S189C63v40Ev();
extern void _ZN6S189C63v41Ev();
extern void _ZN6S189C63v42Ev();
extern void _ZN6S189C63v43Ev();
extern void _ZN6S189C63v44Ev();
extern void _ZN6S189C63v45Ev();
extern void _ZN6S189C63v46Ev();
extern void _ZN6S189C63v47Ev();
extern void _ZN6S189C63v48Ev();
extern void _ZN6S189C63v49Ev();
extern void _ZN6S189C63v50Ev();
extern void _ZN6S189C63v51Ev();
extern void _ZN6S189C63v52Ev();
extern void _ZN6S189C63v53Ev();
extern void _ZN6S189C63v54Ev();
extern void _ZN6S189C63v55Ev();
extern void _ZN6S189C63v56Ev();
extern void _ZN6S189C63v57Ev();
extern void _ZN6S189C63v58Ev();
extern void _ZN6S189C63v59Ev();
extern void _ZN6S189C63v60Ev();
extern void _ZN6S189C63v61Ev();
extern void _ZN6S189C63v62Ev();
extern void _ZN6S189C63v63Ev();
extern void _ZN6S189C63v64Ev();
extern void _ZN6S189C63v65Ev();
extern void _ZN6S189C63v66Ev();
extern void _ZN6S189C63v67Ev();
extern void _ZN6S189C53v68Ev();
extern void _ZN6S189C53v69Ev();
extern void _ZN6S189C53v70Ev();
extern void _ZN6S189C53v71Ev();
extern void _ZN6S189C53v72Ev();
extern void _ZN6S189C53v73Ev();
extern void _ZN6S189C53v74Ev();
extern void _ZN6S189C53v75Ev();
extern void _ZN6S189C53v76Ev();
extern void _ZN6S189C53v77Ev();
extern void _ZN6S189C53v78Ev();
extern void _ZN6S189C53v79Ev();
extern void _ZN6S189C53v80Ev();
extern void _ZN6S189C53v81Ev();
extern void _ZN6S189C53v82Ev();
extern void _ZN6S189C53v83Ev();
extern void _ZN6S189C53v84Ev();
extern void _ZN6S189C53v85Ev();
extern void _ZN6S189C53v86Ev();
extern void _ZN6S189C53v87Ev();
extern void _ZN6S189C53v88Ev();
extern void _ZN6S189C53v89Ev();
extern void _ZN6S189C53v90Ev();
extern void _ZN6S189C53v91Ev();
extern void _ZN6S189C53v92Ev();
extern void _ZN6S189C53v93Ev();
extern void _ZN6S189C53v94Ev();
extern void _ZN6S189C43v95Ev();
extern void _ZN6S189C43v96Ev();
extern void _ZN6S189C43v97Ev();
extern void _ZN6S189C43v98Ev();
extern void _ZN6S189C43v99Ev();
extern void _ZN6S189C44v100Ev();
extern void _ZN6S189C44v101Ev();
extern void _ZN6S189C44v102Ev();
extern void _ZN6S189C44v103Ev();
extern void _ZN6S189C44v104Ev();
extern void _ZN6S189C44v105Ev();
extern void _ZN6S189C44v106Ev();
extern void _ZN6S189C44v107Ev();
extern void _ZN6S189C44v108Ev();
extern void _ZN6S189C44v109Ev();
extern void _ZN6S189C44v110Ev();
extern void _ZN6S189C44v111Ev();
extern void _ZN6S189C44v112Ev();
extern void _ZN6S189C34v113Ev();
extern void _ZN6S189C34v114Ev();
extern void _ZN6S189C34v115Ev();
extern void _ZN6S189C34v116Ev();
extern void _ZN6S189C34v117Ev();
extern void _ZN6S189C34v118Ev();
extern void _ZN6S189C34v119Ev();
extern void _ZN6S189C24v120Ev();
extern void _ZN6S189C24v121Ev();
extern void _ZN6S189C24v122Ev();
extern void _ZN6S189C24v123Ev();
extern void _ZN6S189C24v124Ev();
extern void _ZN6S189C24v125Ev();
static  VTBL_ENTRY vtc_S189C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S189C2[0]),
  (VTBL_ENTRY)&_ZN6S189C2D1Ev,
  (VTBL_ENTRY)&_ZN6S189C2D0Ev,
  (VTBL_ENTRY)&_ZN6S189C62v4Ev,
  (VTBL_ENTRY)&_ZN6S189C62v5Ev,
  (VTBL_ENTRY)&_ZN6S189C62v6Ev,
  (VTBL_ENTRY)&_ZN6S189C62v7Ev,
  (VTBL_ENTRY)&_ZN6S189C62v8Ev,
  (VTBL_ENTRY)&_ZN6S189C62v9Ev,
  (VTBL_ENTRY)&_ZN6S189C63v10Ev,
  (VTBL_ENTRY)&_ZN6S189C63v11Ev,
  (VTBL_ENTRY)&_ZN6S189C63v12Ev,
  (VTBL_ENTRY)&_ZN6S189C63v13Ev,
  (VTBL_ENTRY)&_ZN6S189C63v14Ev,
  (VTBL_ENTRY)&_ZN6S189C63v15Ev,
  (VTBL_ENTRY)&_ZN6S189C63v16Ev,
  (VTBL_ENTRY)&_ZN6S189C63v17Ev,
  (VTBL_ENTRY)&_ZN6S189C63v18Ev,
  (VTBL_ENTRY)&_ZN6S189C63v19Ev,
  (VTBL_ENTRY)&_ZN6S189C63v20Ev,
  (VTBL_ENTRY)&_ZN6S189C63v21Ev,
  (VTBL_ENTRY)&_ZN6S189C63v22Ev,
  (VTBL_ENTRY)&_ZN6S189C63v23Ev,
  (VTBL_ENTRY)&_ZN6S189C63v24Ev,
  (VTBL_ENTRY)&_ZN6S189C63v25Ev,
  (VTBL_ENTRY)&_ZN6S189C63v26Ev,
  (VTBL_ENTRY)&_ZN6S189C63v27Ev,
  (VTBL_ENTRY)&_ZN6S189C63v28Ev,
  (VTBL_ENTRY)&_ZN6S189C63v29Ev,
  (VTBL_ENTRY)&_ZN6S189C63v30Ev,
  (VTBL_ENTRY)&_ZN6S189C63v31Ev,
  (VTBL_ENTRY)&_ZN6S189C63v32Ev,
  (VTBL_ENTRY)&_ZN6S189C63v33Ev,
  (VTBL_ENTRY)&_ZN6S189C63v34Ev,
  (VTBL_ENTRY)&_ZN6S189C63v35Ev,
  (VTBL_ENTRY)&_ZN6S189C63v36Ev,
  (VTBL_ENTRY)&_ZN6S189C63v37Ev,
  (VTBL_ENTRY)&_ZN6S189C63v38Ev,
  (VTBL_ENTRY)&_ZN6S189C63v39Ev,
  (VTBL_ENTRY)&_ZN6S189C63v40Ev,
  (VTBL_ENTRY)&_ZN6S189C63v41Ev,
  (VTBL_ENTRY)&_ZN6S189C63v42Ev,
  (VTBL_ENTRY)&_ZN6S189C63v43Ev,
  (VTBL_ENTRY)&_ZN6S189C63v44Ev,
  (VTBL_ENTRY)&_ZN6S189C63v45Ev,
  (VTBL_ENTRY)&_ZN6S189C63v46Ev,
  (VTBL_ENTRY)&_ZN6S189C63v47Ev,
  (VTBL_ENTRY)&_ZN6S189C63v48Ev,
  (VTBL_ENTRY)&_ZN6S189C63v49Ev,
  (VTBL_ENTRY)&_ZN6S189C63v50Ev,
  (VTBL_ENTRY)&_ZN6S189C63v51Ev,
  (VTBL_ENTRY)&_ZN6S189C63v52Ev,
  (VTBL_ENTRY)&_ZN6S189C63v53Ev,
  (VTBL_ENTRY)&_ZN6S189C63v54Ev,
  (VTBL_ENTRY)&_ZN6S189C63v55Ev,
  (VTBL_ENTRY)&_ZN6S189C63v56Ev,
  (VTBL_ENTRY)&_ZN6S189C63v57Ev,
  (VTBL_ENTRY)&_ZN6S189C63v58Ev,
  (VTBL_ENTRY)&_ZN6S189C63v59Ev,
  (VTBL_ENTRY)&_ZN6S189C63v60Ev,
  (VTBL_ENTRY)&_ZN6S189C63v61Ev,
  (VTBL_ENTRY)&_ZN6S189C63v62Ev,
  (VTBL_ENTRY)&_ZN6S189C63v63Ev,
  (VTBL_ENTRY)&_ZN6S189C63v64Ev,
  (VTBL_ENTRY)&_ZN6S189C63v65Ev,
  (VTBL_ENTRY)&_ZN6S189C63v66Ev,
  (VTBL_ENTRY)&_ZN6S189C63v67Ev,
  (VTBL_ENTRY)&_ZN6S189C53v68Ev,
  (VTBL_ENTRY)&_ZN6S189C53v69Ev,
  (VTBL_ENTRY)&_ZN6S189C53v70Ev,
  (VTBL_ENTRY)&_ZN6S189C53v71Ev,
  (VTBL_ENTRY)&_ZN6S189C53v72Ev,
  (VTBL_ENTRY)&_ZN6S189C53v73Ev,
  (VTBL_ENTRY)&_ZN6S189C53v74Ev,
  (VTBL_ENTRY)&_ZN6S189C53v75Ev,
  (VTBL_ENTRY)&_ZN6S189C53v76Ev,
  (VTBL_ENTRY)&_ZN6S189C53v77Ev,
  (VTBL_ENTRY)&_ZN6S189C53v78Ev,
  (VTBL_ENTRY)&_ZN6S189C53v79Ev,
  (VTBL_ENTRY)&_ZN6S189C53v80Ev,
  (VTBL_ENTRY)&_ZN6S189C53v81Ev,
  (VTBL_ENTRY)&_ZN6S189C53v82Ev,
  (VTBL_ENTRY)&_ZN6S189C53v83Ev,
  (VTBL_ENTRY)&_ZN6S189C53v84Ev,
  (VTBL_ENTRY)&_ZN6S189C53v85Ev,
  (VTBL_ENTRY)&_ZN6S189C53v86Ev,
  (VTBL_ENTRY)&_ZN6S189C53v87Ev,
  (VTBL_ENTRY)&_ZN6S189C53v88Ev,
  (VTBL_ENTRY)&_ZN6S189C53v89Ev,
  (VTBL_ENTRY)&_ZN6S189C53v90Ev,
  (VTBL_ENTRY)&_ZN6S189C53v91Ev,
  (VTBL_ENTRY)&_ZN6S189C53v92Ev,
  (VTBL_ENTRY)&_ZN6S189C53v93Ev,
  (VTBL_ENTRY)&_ZN6S189C53v94Ev,
  (VTBL_ENTRY)&_ZN6S189C43v95Ev,
  (VTBL_ENTRY)&_ZN6S189C43v96Ev,
  (VTBL_ENTRY)&_ZN6S189C43v97Ev,
  (VTBL_ENTRY)&_ZN6S189C43v98Ev,
  (VTBL_ENTRY)&_ZN6S189C43v99Ev,
  (VTBL_ENTRY)&_ZN6S189C44v100Ev,
  (VTBL_ENTRY)&_ZN6S189C44v101Ev,
  (VTBL_ENTRY)&_ZN6S189C44v102Ev,
  (VTBL_ENTRY)&_ZN6S189C44v103Ev,
  (VTBL_ENTRY)&_ZN6S189C44v104Ev,
  (VTBL_ENTRY)&_ZN6S189C44v105Ev,
  (VTBL_ENTRY)&_ZN6S189C44v106Ev,
  (VTBL_ENTRY)&_ZN6S189C44v107Ev,
  (VTBL_ENTRY)&_ZN6S189C44v108Ev,
  (VTBL_ENTRY)&_ZN6S189C44v109Ev,
  (VTBL_ENTRY)&_ZN6S189C44v110Ev,
  (VTBL_ENTRY)&_ZN6S189C44v111Ev,
  (VTBL_ENTRY)&_ZN6S189C44v112Ev,
  (VTBL_ENTRY)&_ZN6S189C34v113Ev,
  (VTBL_ENTRY)&_ZN6S189C34v114Ev,
  (VTBL_ENTRY)&_ZN6S189C34v115Ev,
  (VTBL_ENTRY)&_ZN6S189C34v116Ev,
  (VTBL_ENTRY)&_ZN6S189C34v117Ev,
  (VTBL_ENTRY)&_ZN6S189C34v118Ev,
  (VTBL_ENTRY)&_ZN6S189C34v119Ev,
  (VTBL_ENTRY)&_ZN6S189C24v120Ev,
  (VTBL_ENTRY)&_ZN6S189C24v121Ev,
  (VTBL_ENTRY)&_ZN6S189C24v122Ev,
  (VTBL_ENTRY)&_ZN6S189C24v123Ev,
  (VTBL_ENTRY)&_ZN6S189C24v124Ev,
  (VTBL_ENTRY)&_ZN6S189C24v125Ev,
};
extern VTBL_ENTRY _ZTI6S189C2[];
extern  VTBL_ENTRY _ZTV6S189C2[];
Class_Descriptor cd_S189C2 = {  "S189C2", // class name
  bases_S189C2, 4,
  &(vtc_S189C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,248), // object size
  NSPAIRA(_ZTI6S189C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S189C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S189C1  : S189C2 {
  ::S615C17_nt s189c1f0;
  int s189c1f1[2];
  unsigned int s189c1f2:1;
  unsigned int s189c1f3:1;
  int s189c1f4;
  void *s189c1f5;
  ::S165C16_nt s189c1f6;
  virtual  ~S189C1(); // _ZN6S189C1D1Ev
  virtual void  v1(); // _ZN6S189C12v1Ev
  virtual void  v2(); // _ZN6S189C12v2Ev
  virtual void  v3(); // _ZN6S189C12v3Ev
  S189C1(); // tgen
};
//SIG(1 S189C1) 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 v90 v91 v92 v93 v94 Fp FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC7 FC11{ BC12{ BC10}} FC13{ m FC14{ m Fi[4]} FC15{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 FC16{ BC17{ BC10}} Fi:1} vd v113 v114 v115 v116 v117 v118 v119 Fi[3]} vd v120 v121 v122 v123 v124 v125 Fi:1 FC18{ BC19{ BC10}} FC20{ BC21{ BC10}} FC22{ BC23{ BC10}}} vd v1 v2 v3 FC7 Fi[2] Fi:1 Fi:1 Fi Fp FC15}


 S189C1 ::~S189C1(){ note_dtor("S189C1", this);}
void  S189C1 ::v1(){vfunc_called(this, "_ZN6S189C12v1Ev");}
void  S189C1 ::v2(){vfunc_called(this, "_ZN6S189C12v2Ev");}
void  S189C1 ::v3(){vfunc_called(this, "_ZN6S189C12v3Ev");}
S189C1 ::S189C1(){ note_ctor("S189C1", this);} // tgen

static void Test_S189C1()
{
  extern Class_Descriptor cd_S189C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,73)];
    init_test(&cd_S189C1, buf);
    S189C1 *dp, &lv = *(dp=new (buf) S189C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,288), "sizeof(S189C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S189C1)");
    check_base_class_offset(lv, (S189C6*)(S189C5*)(S189C4*)(S189C3*)(S189C2*), 0, "S189C1");
    check_base_class_offset(lv, (S189C5*)(S189C4*)(S189C3*)(S189C2*), 0, "S189C1");
    check_base_class_offset(lv, (S189C4*)(S189C3*)(S189C2*), 0, "S189C1");
    check_base_class_offset(lv, (S189C3*)(S189C2*), 0, "S189C1");
    check_base_class_offset(lv, (S189C2*), 0, "S189C1");
    check_field_offset(lv, s189c1f0, ABISELECT(320,248), "S189C1.s189c1f0");
    check_field_offset(lv, s189c1f1, ABISELECT(328,256), "S189C1.s189c1f1");
    set_bf_and_test(lv, s189c1f2, ABISELECT(336,264), 0, 1, 1, "S189C1");
    set_bf_and_test(lv, s189c1f3, ABISELECT(336,264), 1, 1, 1, "S189C1");
    check_field_offset(lv, s189c1f4, ABISELECT(340,268), "S189C1.s189c1f4");
    check_field_offset(lv, s189c1f5, ABISELECT(344,272), "S189C1.s189c1f5");
    check_field_offset(lv, s189c1f6, ABISELECT(352,276), "S189C1.s189c1f6");
    test_class_info(&lv, &cd_S189C1);
    dp->~S189C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS189C1(Test_S189C1, "S189C1", ABISELECT(368,288));

#else // __cplusplus

extern void _ZN6S189C1C1Ev();
extern void _ZN6S189C1D1Ev();
Name_Map name_map_S189C1[] = {
  NSPAIR(_ZN6S189C1C1Ev),
  NSPAIR(_ZN6S189C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S189C6;
extern VTBL_ENTRY _ZTI6S189C6[];
extern  VTBL_ENTRY _ZTV6S189C6[];
extern Class_Descriptor cd_S189C5;
extern VTBL_ENTRY _ZTI6S189C5[];
extern  VTBL_ENTRY _ZTV6S189C5[];
extern Class_Descriptor cd_S189C4;
extern VTBL_ENTRY _ZTI6S189C4[];
extern  VTBL_ENTRY _ZTV6S189C4[];
extern Class_Descriptor cd_S189C3;
extern VTBL_ENTRY _ZTI6S189C3[];
extern  VTBL_ENTRY _ZTV6S189C3[];
extern Class_Descriptor cd_S189C2;
extern VTBL_ENTRY _ZTI6S189C2[];
extern  VTBL_ENTRY _ZTV6S189C2[];
static Base_Class bases_S189C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S189C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S189C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S189C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S189C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S189C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S189C1[];
extern void _ZN6S189C1D1Ev();
extern void _ZN6S189C1D0Ev();
extern void _ZN6S189C62v4Ev();
extern void _ZN6S189C62v5Ev();
extern void _ZN6S189C62v6Ev();
extern void _ZN6S189C62v7Ev();
extern void _ZN6S189C62v8Ev();
extern void _ZN6S189C62v9Ev();
extern void _ZN6S189C63v10Ev();
extern void _ZN6S189C63v11Ev();
extern void _ZN6S189C63v12Ev();
extern void _ZN6S189C63v13Ev();
extern void _ZN6S189C63v14Ev();
extern void _ZN6S189C63v15Ev();
extern void _ZN6S189C63v16Ev();
extern void _ZN6S189C63v17Ev();
extern void _ZN6S189C63v18Ev();
extern void _ZN6S189C63v19Ev();
extern void _ZN6S189C63v20Ev();
extern void _ZN6S189C63v21Ev();
extern void _ZN6S189C63v22Ev();
extern void _ZN6S189C63v23Ev();
extern void _ZN6S189C63v24Ev();
extern void _ZN6S189C63v25Ev();
extern void _ZN6S189C63v26Ev();
extern void _ZN6S189C63v27Ev();
extern void _ZN6S189C63v28Ev();
extern void _ZN6S189C63v29Ev();
extern void _ZN6S189C63v30Ev();
extern void _ZN6S189C63v31Ev();
extern void _ZN6S189C63v32Ev();
extern void _ZN6S189C63v33Ev();
extern void _ZN6S189C63v34Ev();
extern void _ZN6S189C63v35Ev();
extern void _ZN6S189C63v36Ev();
extern void _ZN6S189C63v37Ev();
extern void _ZN6S189C63v38Ev();
extern void _ZN6S189C63v39Ev();
extern void _ZN6S189C63v40Ev();
extern void _ZN6S189C63v41Ev();
extern void _ZN6S189C63v42Ev();
extern void _ZN6S189C63v43Ev();
extern void _ZN6S189C63v44Ev();
extern void _ZN6S189C63v45Ev();
extern void _ZN6S189C63v46Ev();
extern void _ZN6S189C63v47Ev();
extern void _ZN6S189C63v48Ev();
extern void _ZN6S189C63v49Ev();
extern void _ZN6S189C63v50Ev();
extern void _ZN6S189C63v51Ev();
extern void _ZN6S189C63v52Ev();
extern void _ZN6S189C63v53Ev();
extern void _ZN6S189C63v54Ev();
extern void _ZN6S189C63v55Ev();
extern void _ZN6S189C63v56Ev();
extern void _ZN6S189C63v57Ev();
extern void _ZN6S189C63v58Ev();
extern void _ZN6S189C63v59Ev();
extern void _ZN6S189C63v60Ev();
extern void _ZN6S189C63v61Ev();
extern void _ZN6S189C63v62Ev();
extern void _ZN6S189C63v63Ev();
extern void _ZN6S189C63v64Ev();
extern void _ZN6S189C63v65Ev();
extern void _ZN6S189C63v66Ev();
extern void _ZN6S189C63v67Ev();
extern void _ZN6S189C53v68Ev();
extern void _ZN6S189C53v69Ev();
extern void _ZN6S189C53v70Ev();
extern void _ZN6S189C53v71Ev();
extern void _ZN6S189C53v72Ev();
extern void _ZN6S189C53v73Ev();
extern void _ZN6S189C53v74Ev();
extern void _ZN6S189C53v75Ev();
extern void _ZN6S189C53v76Ev();
extern void _ZN6S189C53v77Ev();
extern void _ZN6S189C53v78Ev();
extern void _ZN6S189C53v79Ev();
extern void _ZN6S189C53v80Ev();
extern void _ZN6S189C53v81Ev();
extern void _ZN6S189C53v82Ev();
extern void _ZN6S189C53v83Ev();
extern void _ZN6S189C53v84Ev();
extern void _ZN6S189C53v85Ev();
extern void _ZN6S189C53v86Ev();
extern void _ZN6S189C53v87Ev();
extern void _ZN6S189C53v88Ev();
extern void _ZN6S189C53v89Ev();
extern void _ZN6S189C53v90Ev();
extern void _ZN6S189C53v91Ev();
extern void _ZN6S189C53v92Ev();
extern void _ZN6S189C53v93Ev();
extern void _ZN6S189C53v94Ev();
extern void _ZN6S189C43v95Ev();
extern void _ZN6S189C43v96Ev();
extern void _ZN6S189C43v97Ev();
extern void _ZN6S189C43v98Ev();
extern void _ZN6S189C43v99Ev();
extern void _ZN6S189C44v100Ev();
extern void _ZN6S189C44v101Ev();
extern void _ZN6S189C44v102Ev();
extern void _ZN6S189C44v103Ev();
extern void _ZN6S189C44v104Ev();
extern void _ZN6S189C44v105Ev();
extern void _ZN6S189C44v106Ev();
extern void _ZN6S189C44v107Ev();
extern void _ZN6S189C44v108Ev();
extern void _ZN6S189C44v109Ev();
extern void _ZN6S189C44v110Ev();
extern void _ZN6S189C44v111Ev();
extern void _ZN6S189C44v112Ev();
extern void _ZN6S189C34v113Ev();
extern void _ZN6S189C34v114Ev();
extern void _ZN6S189C34v115Ev();
extern void _ZN6S189C34v116Ev();
extern void _ZN6S189C34v117Ev();
extern void _ZN6S189C34v118Ev();
extern void _ZN6S189C34v119Ev();
extern void _ZN6S189C24v120Ev();
extern void _ZN6S189C24v121Ev();
extern void _ZN6S189C24v122Ev();
extern void _ZN6S189C24v123Ev();
extern void _ZN6S189C24v124Ev();
extern void _ZN6S189C24v125Ev();
extern void _ZN6S189C12v1Ev();
extern void _ZN6S189C12v2Ev();
extern void _ZN6S189C12v3Ev();
static  VTBL_ENTRY vtc_S189C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S189C1[0]),
  (VTBL_ENTRY)&_ZN6S189C1D1Ev,
  (VTBL_ENTRY)&_ZN6S189C1D0Ev,
  (VTBL_ENTRY)&_ZN6S189C62v4Ev,
  (VTBL_ENTRY)&_ZN6S189C62v5Ev,
  (VTBL_ENTRY)&_ZN6S189C62v6Ev,
  (VTBL_ENTRY)&_ZN6S189C62v7Ev,
  (VTBL_ENTRY)&_ZN6S189C62v8Ev,
  (VTBL_ENTRY)&_ZN6S189C62v9Ev,
  (VTBL_ENTRY)&_ZN6S189C63v10Ev,
  (VTBL_ENTRY)&_ZN6S189C63v11Ev,
  (VTBL_ENTRY)&_ZN6S189C63v12Ev,
  (VTBL_ENTRY)&_ZN6S189C63v13Ev,
  (VTBL_ENTRY)&_ZN6S189C63v14Ev,
  (VTBL_ENTRY)&_ZN6S189C63v15Ev,
  (VTBL_ENTRY)&_ZN6S189C63v16Ev,
  (VTBL_ENTRY)&_ZN6S189C63v17Ev,
  (VTBL_ENTRY)&_ZN6S189C63v18Ev,
  (VTBL_ENTRY)&_ZN6S189C63v19Ev,
  (VTBL_ENTRY)&_ZN6S189C63v20Ev,
  (VTBL_ENTRY)&_ZN6S189C63v21Ev,
  (VTBL_ENTRY)&_ZN6S189C63v22Ev,
  (VTBL_ENTRY)&_ZN6S189C63v23Ev,
  (VTBL_ENTRY)&_ZN6S189C63v24Ev,
  (VTBL_ENTRY)&_ZN6S189C63v25Ev,
  (VTBL_ENTRY)&_ZN6S189C63v26Ev,
  (VTBL_ENTRY)&_ZN6S189C63v27Ev,
  (VTBL_ENTRY)&_ZN6S189C63v28Ev,
  (VTBL_ENTRY)&_ZN6S189C63v29Ev,
  (VTBL_ENTRY)&_ZN6S189C63v30Ev,
  (VTBL_ENTRY)&_ZN6S189C63v31Ev,
  (VTBL_ENTRY)&_ZN6S189C63v32Ev,
  (VTBL_ENTRY)&_ZN6S189C63v33Ev,
  (VTBL_ENTRY)&_ZN6S189C63v34Ev,
  (VTBL_ENTRY)&_ZN6S189C63v35Ev,
  (VTBL_ENTRY)&_ZN6S189C63v36Ev,
  (VTBL_ENTRY)&_ZN6S189C63v37Ev,
  (VTBL_ENTRY)&_ZN6S189C63v38Ev,
  (VTBL_ENTRY)&_ZN6S189C63v39Ev,
  (VTBL_ENTRY)&_ZN6S189C63v40Ev,
  (VTBL_ENTRY)&_ZN6S189C63v41Ev,
  (VTBL_ENTRY)&_ZN6S189C63v42Ev,
  (VTBL_ENTRY)&_ZN6S189C63v43Ev,
  (VTBL_ENTRY)&_ZN6S189C63v44Ev,
  (VTBL_ENTRY)&_ZN6S189C63v45Ev,
  (VTBL_ENTRY)&_ZN6S189C63v46Ev,
  (VTBL_ENTRY)&_ZN6S189C63v47Ev,
  (VTBL_ENTRY)&_ZN6S189C63v48Ev,
  (VTBL_ENTRY)&_ZN6S189C63v49Ev,
  (VTBL_ENTRY)&_ZN6S189C63v50Ev,
  (VTBL_ENTRY)&_ZN6S189C63v51Ev,
  (VTBL_ENTRY)&_ZN6S189C63v52Ev,
  (VTBL_ENTRY)&_ZN6S189C63v53Ev,
  (VTBL_ENTRY)&_ZN6S189C63v54Ev,
  (VTBL_ENTRY)&_ZN6S189C63v55Ev,
  (VTBL_ENTRY)&_ZN6S189C63v56Ev,
  (VTBL_ENTRY)&_ZN6S189C63v57Ev,
  (VTBL_ENTRY)&_ZN6S189C63v58Ev,
  (VTBL_ENTRY)&_ZN6S189C63v59Ev,
  (VTBL_ENTRY)&_ZN6S189C63v60Ev,
  (VTBL_ENTRY)&_ZN6S189C63v61Ev,
  (VTBL_ENTRY)&_ZN6S189C63v62Ev,
  (VTBL_ENTRY)&_ZN6S189C63v63Ev,
  (VTBL_ENTRY)&_ZN6S189C63v64Ev,
  (VTBL_ENTRY)&_ZN6S189C63v65Ev,
  (VTBL_ENTRY)&_ZN6S189C63v66Ev,
  (VTBL_ENTRY)&_ZN6S189C63v67Ev,
  (VTBL_ENTRY)&_ZN6S189C53v68Ev,
  (VTBL_ENTRY)&_ZN6S189C53v69Ev,
  (VTBL_ENTRY)&_ZN6S189C53v70Ev,
  (VTBL_ENTRY)&_ZN6S189C53v71Ev,
  (VTBL_ENTRY)&_ZN6S189C53v72Ev,
  (VTBL_ENTRY)&_ZN6S189C53v73Ev,
  (VTBL_ENTRY)&_ZN6S189C53v74Ev,
  (VTBL_ENTRY)&_ZN6S189C53v75Ev,
  (VTBL_ENTRY)&_ZN6S189C53v76Ev,
  (VTBL_ENTRY)&_ZN6S189C53v77Ev,
  (VTBL_ENTRY)&_ZN6S189C53v78Ev,
  (VTBL_ENTRY)&_ZN6S189C53v79Ev,
  (VTBL_ENTRY)&_ZN6S189C53v80Ev,
  (VTBL_ENTRY)&_ZN6S189C53v81Ev,
  (VTBL_ENTRY)&_ZN6S189C53v82Ev,
  (VTBL_ENTRY)&_ZN6S189C53v83Ev,
  (VTBL_ENTRY)&_ZN6S189C53v84Ev,
  (VTBL_ENTRY)&_ZN6S189C53v85Ev,
  (VTBL_ENTRY)&_ZN6S189C53v86Ev,
  (VTBL_ENTRY)&_ZN6S189C53v87Ev,
  (VTBL_ENTRY)&_ZN6S189C53v88Ev,
  (VTBL_ENTRY)&_ZN6S189C53v89Ev,
  (VTBL_ENTRY)&_ZN6S189C53v90Ev,
  (VTBL_ENTRY)&_ZN6S189C53v91Ev,
  (VTBL_ENTRY)&_ZN6S189C53v92Ev,
  (VTBL_ENTRY)&_ZN6S189C53v93Ev,
  (VTBL_ENTRY)&_ZN6S189C53v94Ev,
  (VTBL_ENTRY)&_ZN6S189C43v95Ev,
  (VTBL_ENTRY)&_ZN6S189C43v96Ev,
  (VTBL_ENTRY)&_ZN6S189C43v97Ev,
  (VTBL_ENTRY)&_ZN6S189C43v98Ev,
  (VTBL_ENTRY)&_ZN6S189C43v99Ev,
  (VTBL_ENTRY)&_ZN6S189C44v100Ev,
  (VTBL_ENTRY)&_ZN6S189C44v101Ev,
  (VTBL_ENTRY)&_ZN6S189C44v102Ev,
  (VTBL_ENTRY)&_ZN6S189C44v103Ev,
  (VTBL_ENTRY)&_ZN6S189C44v104Ev,
  (VTBL_ENTRY)&_ZN6S189C44v105Ev,
  (VTBL_ENTRY)&_ZN6S189C44v106Ev,
  (VTBL_ENTRY)&_ZN6S189C44v107Ev,
  (VTBL_ENTRY)&_ZN6S189C44v108Ev,
  (VTBL_ENTRY)&_ZN6S189C44v109Ev,
  (VTBL_ENTRY)&_ZN6S189C44v110Ev,
  (VTBL_ENTRY)&_ZN6S189C44v111Ev,
  (VTBL_ENTRY)&_ZN6S189C44v112Ev,
  (VTBL_ENTRY)&_ZN6S189C34v113Ev,
  (VTBL_ENTRY)&_ZN6S189C34v114Ev,
  (VTBL_ENTRY)&_ZN6S189C34v115Ev,
  (VTBL_ENTRY)&_ZN6S189C34v116Ev,
  (VTBL_ENTRY)&_ZN6S189C34v117Ev,
  (VTBL_ENTRY)&_ZN6S189C34v118Ev,
  (VTBL_ENTRY)&_ZN6S189C34v119Ev,
  (VTBL_ENTRY)&_ZN6S189C24v120Ev,
  (VTBL_ENTRY)&_ZN6S189C24v121Ev,
  (VTBL_ENTRY)&_ZN6S189C24v122Ev,
  (VTBL_ENTRY)&_ZN6S189C24v123Ev,
  (VTBL_ENTRY)&_ZN6S189C24v124Ev,
  (VTBL_ENTRY)&_ZN6S189C24v125Ev,
  (VTBL_ENTRY)&_ZN6S189C12v1Ev,
  (VTBL_ENTRY)&_ZN6S189C12v2Ev,
  (VTBL_ENTRY)&_ZN6S189C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S189C1[];
extern  VTBL_ENTRY _ZTV6S189C1[];
Class_Descriptor cd_S189C1 = {  "S189C1", // class name
  bases_S189C1, 5,
  &(vtc_S189C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,288), // object size
  NSPAIRA(_ZTI6S189C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S189C1),129, //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  S1542C4  {
  int s1542c4f0;
  __tsi64 s1542c4f1;
  void *s1542c4f2[4];
  int s1542c4f3[2];
  void *s1542c4f4;
  ::S615C17_nt s1542c4f5;
  void *s1542c4f6[2];
  virtual  ~S1542C4(); // _ZN7S1542C4D1Ev
  virtual void  v7(); // _ZN7S1542C42v7Ev
  virtual void  v8(); // _ZN7S1542C42v8Ev
  virtual void  v9(); // _ZN7S1542C42v9Ev
  virtual void  v10(); // _ZN7S1542C43v10Ev
  virtual void  v11(); // _ZN7S1542C43v11Ev
  virtual void  v12(); // _ZN7S1542C43v12Ev
  virtual void  v13(); // _ZN7S1542C43v13Ev
  virtual void  v14(); // _ZN7S1542C43v14Ev
  virtual void  v15(); // _ZN7S1542C43v15Ev
  virtual void  v16(); // _ZN7S1542C43v16Ev
  virtual void  v17(); // _ZN7S1542C43v17Ev
  virtual void  v18(); // _ZN7S1542C43v18Ev
  virtual void  v19(); // _ZN7S1542C43v19Ev
  virtual void  v20(); // _ZN7S1542C43v20Ev
  virtual void  v21(); // _ZN7S1542C43v21Ev
  virtual void  v22(); // _ZN7S1542C43v22Ev
  virtual void  v23(); // _ZN7S1542C43v23Ev
  virtual void  v24(); // _ZN7S1542C43v24Ev
  virtual void  v25(); // _ZN7S1542C43v25Ev
  virtual void  v26(); // _ZN7S1542C43v26Ev
  virtual void  v27(); // _ZN7S1542C43v27Ev
  virtual void  v28(); // _ZN7S1542C43v28Ev
  virtual void  v29(); // _ZN7S1542C43v29Ev
  virtual void  v30(); // _ZN7S1542C43v30Ev
  virtual void  v31(); // _ZN7S1542C43v31Ev
  virtual void  v32(); // _ZN7S1542C43v32Ev
  virtual void  v33(); // _ZN7S1542C43v33Ev
  virtual void  v34(); // _ZN7S1542C43v34Ev
  virtual void  v35(); // _ZN7S1542C43v35Ev
  virtual void  v36(); // _ZN7S1542C43v36Ev
  virtual void  v37(); // _ZN7S1542C43v37Ev
  virtual void  v38(); // _ZN7S1542C43v38Ev
  virtual void  v39(); // _ZN7S1542C43v39Ev
  virtual void  v40(); // _ZN7S1542C43v40Ev
  virtual void  v41(); // _ZN7S1542C43v41Ev
  virtual void  v42(); // _ZN7S1542C43v42Ev
  virtual void  v43(); // _ZN7S1542C43v43Ev
  virtual void  v44(); // _ZN7S1542C43v44Ev
  virtual void  v45(); // _ZN7S1542C43v45Ev
  virtual void  v46(); // _ZN7S1542C43v46Ev
  virtual void  v47(); // _ZN7S1542C43v47Ev
  virtual void  v48(); // _ZN7S1542C43v48Ev
  virtual void  v49(); // _ZN7S1542C43v49Ev
  virtual void  v50(); // _ZN7S1542C43v50Ev
  virtual void  v51(); // _ZN7S1542C43v51Ev
  virtual void  v52(); // _ZN7S1542C43v52Ev
  virtual void  v53(); // _ZN7S1542C43v53Ev
  virtual void  v54(); // _ZN7S1542C43v54Ev
  virtual void  v55(); // _ZN7S1542C43v55Ev
  virtual void  v56(); // _ZN7S1542C43v56Ev
  virtual void  v57(); // _ZN7S1542C43v57Ev
  virtual void  v58(); // _ZN7S1542C43v58Ev
  virtual void  v59(); // _ZN7S1542C43v59Ev
  virtual void  v60(); // _ZN7S1542C43v60Ev
  virtual void  v61(); // _ZN7S1542C43v61Ev
  virtual void  v62(); // _ZN7S1542C43v62Ev
  virtual void  v63(); // _ZN7S1542C43v63Ev
  virtual void  v64(); // _ZN7S1542C43v64Ev
  virtual void  v65(); // _ZN7S1542C43v65Ev
  virtual void  v66(); // _ZN7S1542C43v66Ev
  virtual void  v67(); // _ZN7S1542C43v67Ev
  virtual void  v68(); // _ZN7S1542C43v68Ev
  virtual void  v69(); // _ZN7S1542C43v69Ev
  virtual void  v70(); // _ZN7S1542C43v70Ev
  S1542C4(); // tgen
};
//SIG(-1 S1542C4) 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]}


 S1542C4 ::~S1542C4(){ note_dtor("S1542C4", this);}
void  S1542C4 ::v7(){vfunc_called(this, "_ZN7S1542C42v7Ev");}
void  S1542C4 ::v8(){vfunc_called(this, "_ZN7S1542C42v8Ev");}
void  S1542C4 ::v9(){vfunc_called(this, "_ZN7S1542C42v9Ev");}
void  S1542C4 ::v10(){vfunc_called(this, "_ZN7S1542C43v10Ev");}
void  S1542C4 ::v11(){vfunc_called(this, "_ZN7S1542C43v11Ev");}
void  S1542C4 ::v12(){vfunc_called(this, "_ZN7S1542C43v12Ev");}
void  S1542C4 ::v13(){vfunc_called(this, "_ZN7S1542C43v13Ev");}
void  S1542C4 ::v14(){vfunc_called(this, "_ZN7S1542C43v14Ev");}
void  S1542C4 ::v15(){vfunc_called(this, "_ZN7S1542C43v15Ev");}
void  S1542C4 ::v16(){vfunc_called(this, "_ZN7S1542C43v16Ev");}
void  S1542C4 ::v17(){vfunc_called(this, "_ZN7S1542C43v17Ev");}
void  S1542C4 ::v18(){vfunc_called(this, "_ZN7S1542C43v18Ev");}
void  S1542C4 ::v19(){vfunc_called(this, "_ZN7S1542C43v19Ev");}
void  S1542C4 ::v20(){vfunc_called(this, "_ZN7S1542C43v20Ev");}
void  S1542C4 ::v21(){vfunc_called(this, "_ZN7S1542C43v21Ev");}
void  S1542C4 ::v22(){vfunc_called(this, "_ZN7S1542C43v22Ev");}
void  S1542C4 ::v23(){vfunc_called(this, "_ZN7S1542C43v23Ev");}
void  S1542C4 ::v24(){vfunc_called(this, "_ZN7S1542C43v24Ev");}
void  S1542C4 ::v25(){vfunc_called(this, "_ZN7S1542C43v25Ev");}
void  S1542C4 ::v26(){vfunc_called(this, "_ZN7S1542C43v26Ev");}
void  S1542C4 ::v27(){vfunc_called(this, "_ZN7S1542C43v27Ev");}
void  S1542C4 ::v28(){vfunc_called(this, "_ZN7S1542C43v28Ev");}
void  S1542C4 ::v29(){vfunc_called(this, "_ZN7S1542C43v29Ev");}
void  S1542C4 ::v30(){vfunc_called(this, "_ZN7S1542C43v30Ev");}
void  S1542C4 ::v31(){vfunc_called(this, "_ZN7S1542C43v31Ev");}
void  S1542C4 ::v32(){vfunc_called(this, "_ZN7S1542C43v32Ev");}
void  S1542C4 ::v33(){vfunc_called(this, "_ZN7S1542C43v33Ev");}
void  S1542C4 ::v34(){vfunc_called(this, "_ZN7S1542C43v34Ev");}
void  S1542C4 ::v35(){vfunc_called(this, "_ZN7S1542C43v35Ev");}
void  S1542C4 ::v36(){vfunc_called(this, "_ZN7S1542C43v36Ev");}
void  S1542C4 ::v37(){vfunc_called(this, "_ZN7S1542C43v37Ev");}
void  S1542C4 ::v38(){vfunc_called(this, "_ZN7S1542C43v38Ev");}
void  S1542C4 ::v39(){vfunc_called(this, "_ZN7S1542C43v39Ev");}
void  S1542C4 ::v40(){vfunc_called(this, "_ZN7S1542C43v40Ev");}
void  S1542C4 ::v41(){vfunc_called(this, "_ZN7S1542C43v41Ev");}
void  S1542C4 ::v42(){vfunc_called(this, "_ZN7S1542C43v42Ev");}
void  S1542C4 ::v43(){vfunc_called(this, "_ZN7S1542C43v43Ev");}
void  S1542C4 ::v44(){vfunc_called(this, "_ZN7S1542C43v44Ev");}
void  S1542C4 ::v45(){vfunc_called(this, "_ZN7S1542C43v45Ev");}
void  S1542C4 ::v46(){vfunc_called(this, "_ZN7S1542C43v46Ev");}
void  S1542C4 ::v47(){vfunc_called(this, "_ZN7S1542C43v47Ev");}
void  S1542C4 ::v48(){vfunc_called(this, "_ZN7S1542C43v48Ev");}
void  S1542C4 ::v49(){vfunc_called(this, "_ZN7S1542C43v49Ev");}
void  S1542C4 ::v50(){vfunc_called(this, "_ZN7S1542C43v50Ev");}
void  S1542C4 ::v51(){vfunc_called(this, "_ZN7S1542C43v51Ev");}
void  S1542C4 ::v52(){vfunc_called(this, "_ZN7S1542C43v52Ev");}
void  S1542C4 ::v53(){vfunc_called(this, "_ZN7S1542C43v53Ev");}
void  S1542C4 ::v54(){vfunc_called(this, "_ZN7S1542C43v54Ev");}
void  S1542C4 ::v55(){vfunc_called(this, "_ZN7S1542C43v55Ev");}
void  S1542C4 ::v56(){vfunc_called(this, "_ZN7S1542C43v56Ev");}
void  S1542C4 ::v57(){vfunc_called(this, "_ZN7S1542C43v57Ev");}
void  S1542C4 ::v58(){vfunc_called(this, "_ZN7S1542C43v58Ev");}
void  S1542C4 ::v59(){vfunc_called(this, "_ZN7S1542C43v59Ev");}
void  S1542C4 ::v60(){vfunc_called(this, "_ZN7S1542C43v60Ev");}
void  S1542C4 ::v61(){vfunc_called(this, "_ZN7S1542C43v61Ev");}
void  S1542C4 ::v62(){vfunc_called(this, "_ZN7S1542C43v62Ev");}
void  S1542C4 ::v63(){vfunc_called(this, "_ZN7S1542C43v63Ev");}
void  S1542C4 ::v64(){vfunc_called(this, "_ZN7S1542C43v64Ev");}
void  S1542C4 ::v65(){vfunc_called(this, "_ZN7S1542C43v65Ev");}
void  S1542C4 ::v66(){vfunc_called(this, "_ZN7S1542C43v66Ev");}
void  S1542C4 ::v67(){vfunc_called(this, "_ZN7S1542C43v67Ev");}
void  S1542C4 ::v68(){vfunc_called(this, "_ZN7S1542C43v68Ev");}
void  S1542C4 ::v69(){vfunc_called(this, "_ZN7S1542C43v69Ev");}
void  S1542C4 ::v70(){vfunc_called(this, "_ZN7S1542C43v70Ev");}
S1542C4 ::S1542C4(){ note_ctor("S1542C4", this);} // tgen

static void Test_S1542C4()
{
  extern Class_Descriptor cd_S1542C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1542C4, buf);
    S1542C4 *dp, &lv = *(dp=new (buf) S1542C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1542C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1542C4)");
    check_field_offset(lv, s1542c4f0, ABISELECT(8,4), "S1542C4.s1542c4f0");
    check_field_offset(lv, s1542c4f1, ABISELECT(16,8), "S1542C4.s1542c4f1");
    check_field_offset(lv, s1542c4f2, ABISELECT(24,16), "S1542C4.s1542c4f2");
    check_field_offset(lv, s1542c4f3, ABISELECT(56,32), "S1542C4.s1542c4f3");
    check_field_offset(lv, s1542c4f4, ABISELECT(64,40), "S1542C4.s1542c4f4");
    check_field_offset(lv, s1542c4f5, ABISELECT(72,44), "S1542C4.s1542c4f5");
    check_field_offset(lv, s1542c4f6, ABISELECT(80,52), "S1542C4.s1542c4f6");
    test_class_info(&lv, &cd_S1542C4);
    dp->~S1542C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1542C4(Test_S1542C4, "S1542C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1542C4C1Ev();
extern void _ZN7S1542C4D1Ev();
Name_Map name_map_S1542C4[] = {
  NSPAIR(_ZN7S1542C4C1Ev),
  NSPAIR(_ZN7S1542C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1542C4[];
extern void _ZN7S1542C4D1Ev();
extern void _ZN7S1542C4D0Ev();
extern void _ZN7S1542C42v7Ev();
extern void _ZN7S1542C42v8Ev();
extern void _ZN7S1542C42v9Ev();
extern void _ZN7S1542C43v10Ev();
extern void _ZN7S1542C43v11Ev();
extern void _ZN7S1542C43v12Ev();
extern void _ZN7S1542C43v13Ev();
extern void _ZN7S1542C43v14Ev();
extern void _ZN7S1542C43v15Ev();
extern void _ZN7S1542C43v16Ev();
extern void _ZN7S1542C43v17Ev();
extern void _ZN7S1542C43v18Ev();
extern void _ZN7S1542C43v19Ev();
extern void _ZN7S1542C43v20Ev();
extern void _ZN7S1542C43v21Ev();
extern void _ZN7S1542C43v22Ev();
extern void _ZN7S1542C43v23Ev();
extern void _ZN7S1542C43v24Ev();
extern void _ZN7S1542C43v25Ev();
extern void _ZN7S1542C43v26Ev();
extern void _ZN7S1542C43v27Ev();
extern void _ZN7S1542C43v28Ev();
extern void _ZN7S1542C43v29Ev();
extern void _ZN7S1542C43v30Ev();
extern void _ZN7S1542C43v31Ev();
extern void _ZN7S1542C43v32Ev();
extern void _ZN7S1542C43v33Ev();
extern void _ZN7S1542C43v34Ev();
extern void _ZN7S1542C43v35Ev();
extern void _ZN7S1542C43v36Ev();
extern void _ZN7S1542C43v37Ev();
extern void _ZN7S1542C43v38Ev();
extern void _ZN7S1542C43v39Ev();
extern void _ZN7S1542C43v40Ev();
extern void _ZN7S1542C43v41Ev();
extern void _ZN7S1542C43v42Ev();
extern void _ZN7S1542C43v43Ev();
extern void _ZN7S1542C43v44Ev();
extern void _ZN7S1542C43v45Ev();
extern void _ZN7S1542C43v46Ev();
extern void _ZN7S1542C43v47Ev();
extern void _ZN7S1542C43v48Ev();
extern void _ZN7S1542C43v49Ev();
extern void _ZN7S1542C43v50Ev();
extern void _ZN7S1542C43v51Ev();
extern void _ZN7S1542C43v52Ev();
extern void _ZN7S1542C43v53Ev();
extern void _ZN7S1542C43v54Ev();
extern void _ZN7S1542C43v55Ev();
extern void _ZN7S1542C43v56Ev();
extern void _ZN7S1542C43v57Ev();
extern void _ZN7S1542C43v58Ev();
extern void _ZN7S1542C43v59Ev();
extern void _ZN7S1542C43v60Ev();
extern void _ZN7S1542C43v61Ev();
extern void _ZN7S1542C43v62Ev();
extern void _ZN7S1542C43v63Ev();
extern void _ZN7S1542C43v64Ev();
extern void _ZN7S1542C43v65Ev();
extern void _ZN7S1542C43v66Ev();
extern void _ZN7S1542C43v67Ev();
extern void _ZN7S1542C43v68Ev();
extern void _ZN7S1542C43v69Ev();
extern void _ZN7S1542C43v70Ev();
static  VTBL_ENTRY vtc_S1542C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1542C4[0]),
  (VTBL_ENTRY)&_ZN7S1542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1542C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1542C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1542C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1542C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v70Ev,
};
extern VTBL_ENTRY _ZTI7S1542C4[];
extern  VTBL_ENTRY _ZTV7S1542C4[];
Class_Descriptor cd_S1542C4 = {  "S1542C4", // class name
  0,0,//no base classes
  &(vtc_S1542C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1542C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1542C4),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  S1542C3  : S1542C4 {
  void *s1542c3f0;
  ::S615C22_nt s1542c3f1;
  ::S615C17_nt s1542c3f2;
  ::S165C27 s1542c3f3;
  ::S615C12_nt s1542c3f4;
  int s1542c3f5;
  unsigned int s1542c3f6:1;
  unsigned int s1542c3f7:1;
  unsigned int s1542c3f8:1;
  unsigned int s1542c3f9:1;
  int s1542c3f10[11];
  virtual  ~S1542C3(); // _ZN7S1542C3D1Ev
  virtual void  v71(); // _ZN7S1542C33v71Ev
  virtual void  v72(); // _ZN7S1542C33v72Ev
  virtual void  v73(); // _ZN7S1542C33v73Ev
  virtual void  v74(); // _ZN7S1542C33v74Ev
  virtual void  v75(); // _ZN7S1542C33v75Ev
  virtual void  v76(); // _ZN7S1542C33v76Ev
  virtual void  v77(); // _ZN7S1542C33v77Ev
  virtual void  v78(); // _ZN7S1542C33v78Ev
  virtual void  v79(); // _ZN7S1542C33v79Ev
  virtual void  v80(); // _ZN7S1542C33v80Ev
  virtual void  v81(); // _ZN7S1542C33v81Ev
  virtual void  v82(); // _ZN7S1542C33v82Ev
  virtual void  v83(); // _ZN7S1542C33v83Ev
  virtual void  v84(); // _ZN7S1542C33v84Ev
  virtual void  v85(); // _ZN7S1542C33v85Ev
  virtual void  v86(); // _ZN7S1542C33v86Ev
  virtual void  v87(); // _ZN7S1542C33v87Ev
  virtual void  v88(); // _ZN7S1542C33v88Ev
  virtual void  v89(); // _ZN7S1542C33v89Ev
  virtual void  v90(); // _ZN7S1542C33v90Ev
  virtual void  v91(); // _ZN7S1542C33v91Ev
  virtual void  v92(); // _ZN7S1542C33v92Ev
  virtual void  v93(); // _ZN7S1542C33v93Ev
  virtual void  v94(); // _ZN7S1542C33v94Ev
  virtual void  v95(); // _ZN7S1542C33v95Ev
  virtual void  v96(); // _ZN7S1542C33v96Ev
  virtual void  v97(); // _ZN7S1542C33v97Ev
  S1542C3(); // tgen
};
//SIG(-1 S1542C3) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S1542C3 ::~S1542C3(){ note_dtor("S1542C3", this);}
void  S1542C3 ::v71(){vfunc_called(this, "_ZN7S1542C33v71Ev");}
void  S1542C3 ::v72(){vfunc_called(this, "_ZN7S1542C33v72Ev");}
void  S1542C3 ::v73(){vfunc_called(this, "_ZN7S1542C33v73Ev");}
void  S1542C3 ::v74(){vfunc_called(this, "_ZN7S1542C33v74Ev");}
void  S1542C3 ::v75(){vfunc_called(this, "_ZN7S1542C33v75Ev");}
void  S1542C3 ::v76(){vfunc_called(this, "_ZN7S1542C33v76Ev");}
void  S1542C3 ::v77(){vfunc_called(this, "_ZN7S1542C33v77Ev");}
void  S1542C3 ::v78(){vfunc_called(this, "_ZN7S1542C33v78Ev");}
void  S1542C3 ::v79(){vfunc_called(this, "_ZN7S1542C33v79Ev");}
void  S1542C3 ::v80(){vfunc_called(this, "_ZN7S1542C33v80Ev");}
void  S1542C3 ::v81(){vfunc_called(this, "_ZN7S1542C33v81Ev");}
void  S1542C3 ::v82(){vfunc_called(this, "_ZN7S1542C33v82Ev");}
void  S1542C3 ::v83(){vfunc_called(this, "_ZN7S1542C33v83Ev");}
void  S1542C3 ::v84(){vfunc_called(this, "_ZN7S1542C33v84Ev");}
void  S1542C3 ::v85(){vfunc_called(this, "_ZN7S1542C33v85Ev");}
void  S1542C3 ::v86(){vfunc_called(this, "_ZN7S1542C33v86Ev");}
void  S1542C3 ::v87(){vfunc_called(this, "_ZN7S1542C33v87Ev");}
void  S1542C3 ::v88(){vfunc_called(this, "_ZN7S1542C33v88Ev");}
void  S1542C3 ::v89(){vfunc_called(this, "_ZN7S1542C33v89Ev");}
void  S1542C3 ::v90(){vfunc_called(this, "_ZN7S1542C33v90Ev");}
void  S1542C3 ::v91(){vfunc_called(this, "_ZN7S1542C33v91Ev");}
void  S1542C3 ::v92(){vfunc_called(this, "_ZN7S1542C33v92Ev");}
void  S1542C3 ::v93(){vfunc_called(this, "_ZN7S1542C33v93Ev");}
void  S1542C3 ::v94(){vfunc_called(this, "_ZN7S1542C33v94Ev");}
void  S1542C3 ::v95(){vfunc_called(this, "_ZN7S1542C33v95Ev");}
void  S1542C3 ::v96(){vfunc_called(this, "_ZN7S1542C33v96Ev");}
void  S1542C3 ::v97(){vfunc_called(this, "_ZN7S1542C33v97Ev");}
S1542C3 ::S1542C3(){ note_ctor("S1542C3", this);} // tgen

static void Test_S1542C3()
{
  extern Class_Descriptor cd_S1542C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S1542C3, buf);
    S1542C3 *dp, &lv = *(dp=new (buf) S1542C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S1542C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1542C3)");
    check_base_class_offset(lv, (S1542C4*), 0, "S1542C3");
    check_field_offset(lv, s1542c3f0, ABISELECT(96,60), "S1542C3.s1542c3f0");
    check_field_offset(lv, s1542c3f1, ABISELECT(104,64), "S1542C3.s1542c3f1");
    check_field_offset(lv, s1542c3f2, ABISELECT(120,76), "S1542C3.s1542c3f2");
    check_field_offset(lv, s1542c3f3, ABISELECT(128,84), "S1542C3.s1542c3f3");
    check_field_offset(lv, s1542c3f4, ABISELECT(144,96), "S1542C3.s1542c3f4");
    check_field_offset(lv, s1542c3f5, ABISELECT(176,128), "S1542C3.s1542c3f5");
    set_bf_and_test(lv, s1542c3f6, ABISELECT(180,132), 0, 1, 1, "S1542C3");
    set_bf_and_test(lv, s1542c3f7, ABISELECT(180,132), 1, 1, 1, "S1542C3");
    set_bf_and_test(lv, s1542c3f8, ABISELECT(180,132), 2, 1, 1, "S1542C3");
    set_bf_and_test(lv, s1542c3f9, ABISELECT(180,132), 3, 1, 1, "S1542C3");
    check_field_offset(lv, s1542c3f10, ABISELECT(184,136), "S1542C3.s1542c3f10");
    test_class_info(&lv, &cd_S1542C3);
    dp->~S1542C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1542C3(Test_S1542C3, "S1542C3", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN7S1542C3C1Ev();
extern void _ZN7S1542C3D1Ev();
Name_Map name_map_S1542C3[] = {
  NSPAIR(_ZN7S1542C3C1Ev),
  NSPAIR(_ZN7S1542C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1542C4;
extern VTBL_ENTRY _ZTI7S1542C4[];
extern  VTBL_ENTRY _ZTV7S1542C4[];
static Base_Class bases_S1542C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1542C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1542C3[];
extern void _ZN7S1542C3D1Ev();
extern void _ZN7S1542C3D0Ev();
extern void _ZN7S1542C42v7Ev();
extern void _ZN7S1542C42v8Ev();
extern void _ZN7S1542C42v9Ev();
extern void _ZN7S1542C43v10Ev();
extern void _ZN7S1542C43v11Ev();
extern void _ZN7S1542C43v12Ev();
extern void _ZN7S1542C43v13Ev();
extern void _ZN7S1542C43v14Ev();
extern void _ZN7S1542C43v15Ev();
extern void _ZN7S1542C43v16Ev();
extern void _ZN7S1542C43v17Ev();
extern void _ZN7S1542C43v18Ev();
extern void _ZN7S1542C43v19Ev();
extern void _ZN7S1542C43v20Ev();
extern void _ZN7S1542C43v21Ev();
extern void _ZN7S1542C43v22Ev();
extern void _ZN7S1542C43v23Ev();
extern void _ZN7S1542C43v24Ev();
extern void _ZN7S1542C43v25Ev();
extern void _ZN7S1542C43v26Ev();
extern void _ZN7S1542C43v27Ev();
extern void _ZN7S1542C43v28Ev();
extern void _ZN7S1542C43v29Ev();
extern void _ZN7S1542C43v30Ev();
extern void _ZN7S1542C43v31Ev();
extern void _ZN7S1542C43v32Ev();
extern void _ZN7S1542C43v33Ev();
extern void _ZN7S1542C43v34Ev();
extern void _ZN7S1542C43v35Ev();
extern void _ZN7S1542C43v36Ev();
extern void _ZN7S1542C43v37Ev();
extern void _ZN7S1542C43v38Ev();
extern void _ZN7S1542C43v39Ev();
extern void _ZN7S1542C43v40Ev();
extern void _ZN7S1542C43v41Ev();
extern void _ZN7S1542C43v42Ev();
extern void _ZN7S1542C43v43Ev();
extern void _ZN7S1542C43v44Ev();
extern void _ZN7S1542C43v45Ev();
extern void _ZN7S1542C43v46Ev();
extern void _ZN7S1542C43v47Ev();
extern void _ZN7S1542C43v48Ev();
extern void _ZN7S1542C43v49Ev();
extern void _ZN7S1542C43v50Ev();
extern void _ZN7S1542C43v51Ev();
extern void _ZN7S1542C43v52Ev();
extern void _ZN7S1542C43v53Ev();
extern void _ZN7S1542C43v54Ev();
extern void _ZN7S1542C43v55Ev();
extern void _ZN7S1542C43v56Ev();
extern void _ZN7S1542C43v57Ev();
extern void _ZN7S1542C43v58Ev();
extern void _ZN7S1542C43v59Ev();
extern void _ZN7S1542C43v60Ev();
extern void _ZN7S1542C43v61Ev();
extern void _ZN7S1542C43v62Ev();
extern void _ZN7S1542C43v63Ev();
extern void _ZN7S1542C43v64Ev();
extern void _ZN7S1542C43v65Ev();
extern void _ZN7S1542C43v66Ev();
extern void _ZN7S1542C43v67Ev();
extern void _ZN7S1542C43v68Ev();
extern void _ZN7S1542C43v69Ev();
extern void _ZN7S1542C43v70Ev();
extern void _ZN7S1542C33v71Ev();
extern void _ZN7S1542C33v72Ev();
extern void _ZN7S1542C33v73Ev();
extern void _ZN7S1542C33v74Ev();
extern void _ZN7S1542C33v75Ev();
extern void _ZN7S1542C33v76Ev();
extern void _ZN7S1542C33v77Ev();
extern void _ZN7S1542C33v78Ev();
extern void _ZN7S1542C33v79Ev();
extern void _ZN7S1542C33v80Ev();
extern void _ZN7S1542C33v81Ev();
extern void _ZN7S1542C33v82Ev();
extern void _ZN7S1542C33v83Ev();
extern void _ZN7S1542C33v84Ev();
extern void _ZN7S1542C33v85Ev();
extern void _ZN7S1542C33v86Ev();
extern void _ZN7S1542C33v87Ev();
extern void _ZN7S1542C33v88Ev();
extern void _ZN7S1542C33v89Ev();
extern void _ZN7S1542C33v90Ev();
extern void _ZN7S1542C33v91Ev();
extern void _ZN7S1542C33v92Ev();
extern void _ZN7S1542C33v93Ev();
extern void _ZN7S1542C33v94Ev();
extern void _ZN7S1542C33v95Ev();
extern void _ZN7S1542C33v96Ev();
extern void _ZN7S1542C33v97Ev();
static  VTBL_ENTRY vtc_S1542C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1542C3[0]),
  (VTBL_ENTRY)&_ZN7S1542C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1542C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1542C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1542C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1542C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v97Ev,
};
extern VTBL_ENTRY _ZTI7S1542C3[];
extern  VTBL_ENTRY _ZTV7S1542C3[];
Class_Descriptor cd_S1542C3 = {  "S1542C3", // class name
  bases_S1542C3, 1,
  &(vtc_S1542C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI7S1542C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1542C3),95, //virtual function table var
  2, // 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  S1542C2  : S1542C3 {
  ::S165C25 s1542c2f0;
  unsigned int s1542c2f1:1;
  virtual  ~S1542C2(); // _ZN7S1542C2D1Ev
  virtual void  v98(); // _ZN7S1542C23v98Ev
  virtual void  v99(); // _ZN7S1542C23v99Ev
  virtual void  v100(); // _ZN7S1542C24v100Ev
  virtual void  v101(); // _ZN7S1542C24v101Ev
  virtual void  v102(); // _ZN7S1542C24v102Ev
  virtual void  v103(); // _ZN7S1542C24v103Ev
  virtual void  v104(); // _ZN7S1542C24v104Ev
  virtual void  v105(); // _ZN7S1542C24v105Ev
  virtual void  v106(); // _ZN7S1542C24v106Ev
  virtual void  v107(); // _ZN7S1542C24v107Ev
  virtual void  v108(); // _ZN7S1542C24v108Ev
  virtual void  v109(); // _ZN7S1542C24v109Ev
  virtual void  v110(); // _ZN7S1542C24v110Ev
  virtual void  v111(); // _ZN7S1542C24v111Ev
  virtual void  v112(); // _ZN7S1542C24v112Ev
  virtual void  v113(); // _ZN7S1542C24v113Ev
  virtual void  v114(); // _ZN7S1542C24v114Ev
  virtual void  v115(); // _ZN7S1542C24v115Ev
  S1542C2(); // tgen
};
//SIG(-1 S1542C2) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S1542C2 ::~S1542C2(){ note_dtor("S1542C2", this);}
void  S1542C2 ::v98(){vfunc_called(this, "_ZN7S1542C23v98Ev");}
void  S1542C2 ::v99(){vfunc_called(this, "_ZN7S1542C23v99Ev");}
void  S1542C2 ::v100(){vfunc_called(this, "_ZN7S1542C24v100Ev");}
void  S1542C2 ::v101(){vfunc_called(this, "_ZN7S1542C24v101Ev");}
void  S1542C2 ::v102(){vfunc_called(this, "_ZN7S1542C24v102Ev");}
void  S1542C2 ::v103(){vfunc_called(this, "_ZN7S1542C24v103Ev");}
void  S1542C2 ::v104(){vfunc_called(this, "_ZN7S1542C24v104Ev");}
void  S1542C2 ::v105(){vfunc_called(this, "_ZN7S1542C24v105Ev");}
void  S1542C2 ::v106(){vfunc_called(this, "_ZN7S1542C24v106Ev");}
void  S1542C2 ::v107(){vfunc_called(this, "_ZN7S1542C24v107Ev");}
void  S1542C2 ::v108(){vfunc_called(this, "_ZN7S1542C24v108Ev");}
void  S1542C2 ::v109(){vfunc_called(this, "_ZN7S1542C24v109Ev");}
void  S1542C2 ::v110(){vfunc_called(this, "_ZN7S1542C24v110Ev");}
void  S1542C2 ::v111(){vfunc_called(this, "_ZN7S1542C24v111Ev");}
void  S1542C2 ::v112(){vfunc_called(this, "_ZN7S1542C24v112Ev");}
void  S1542C2 ::v113(){vfunc_called(this, "_ZN7S1542C24v113Ev");}
void  S1542C2 ::v114(){vfunc_called(this, "_ZN7S1542C24v114Ev");}
void  S1542C2 ::v115(){vfunc_called(this, "_ZN7S1542C24v115Ev");}
S1542C2 ::S1542C2(){ note_ctor("S1542C2", this);} // tgen

static void Test_S1542C2()
{
  extern Class_Descriptor cd_S1542C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1542C2, buf);
    S1542C2 *dp, &lv = *(dp=new (buf) S1542C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1542C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1542C2)");
    check_base_class_offset(lv, (S1542C4*)(S1542C3*), 0, "S1542C2");
    check_base_class_offset(lv, (S1542C3*), 0, "S1542C2");
    check_field_offset(lv, s1542c2f0, ABISELECT(232,180), "S1542C2.s1542c2f0");
    set_bf_and_test(lv, s1542c2f1, ABISELECT(248,192), 0, 1, 1, "S1542C2");
    test_class_info(&lv, &cd_S1542C2);
    dp->~S1542C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1542C2(Test_S1542C2, "S1542C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1542C2C1Ev();
extern void _ZN7S1542C2D1Ev();
Name_Map name_map_S1542C2[] = {
  NSPAIR(_ZN7S1542C2C1Ev),
  NSPAIR(_ZN7S1542C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1542C4;
extern VTBL_ENTRY _ZTI7S1542C4[];
extern  VTBL_ENTRY _ZTV7S1542C4[];
extern Class_Descriptor cd_S1542C3;
extern VTBL_ENTRY _ZTI7S1542C3[];
extern  VTBL_ENTRY _ZTV7S1542C3[];
static Base_Class bases_S1542C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1542C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1542C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1542C2[];
extern void _ZN7S1542C2D1Ev();
extern void _ZN7S1542C2D0Ev();
extern void _ZN7S1542C42v7Ev();
extern void _ZN7S1542C42v8Ev();
extern void _ZN7S1542C42v9Ev();
extern void _ZN7S1542C43v10Ev();
extern void _ZN7S1542C43v11Ev();
extern void _ZN7S1542C43v12Ev();
extern void _ZN7S1542C43v13Ev();
extern void _ZN7S1542C43v14Ev();
extern void _ZN7S1542C43v15Ev();
extern void _ZN7S1542C43v16Ev();
extern void _ZN7S1542C43v17Ev();
extern void _ZN7S1542C43v18Ev();
extern void _ZN7S1542C43v19Ev();
extern void _ZN7S1542C43v20Ev();
extern void _ZN7S1542C43v21Ev();
extern void _ZN7S1542C43v22Ev();
extern void _ZN7S1542C43v23Ev();
extern void _ZN7S1542C43v24Ev();
extern void _ZN7S1542C43v25Ev();
extern void _ZN7S1542C43v26Ev();
extern void _ZN7S1542C43v27Ev();
extern void _ZN7S1542C43v28Ev();
extern void _ZN7S1542C43v29Ev();
extern void _ZN7S1542C43v30Ev();
extern void _ZN7S1542C43v31Ev();
extern void _ZN7S1542C43v32Ev();
extern void _ZN7S1542C43v33Ev();
extern void _ZN7S1542C43v34Ev();
extern void _ZN7S1542C43v35Ev();
extern void _ZN7S1542C43v36Ev();
extern void _ZN7S1542C43v37Ev();
extern void _ZN7S1542C43v38Ev();
extern void _ZN7S1542C43v39Ev();
extern void _ZN7S1542C43v40Ev();
extern void _ZN7S1542C43v41Ev();
extern void _ZN7S1542C43v42Ev();
extern void _ZN7S1542C43v43Ev();
extern void _ZN7S1542C43v44Ev();
extern void _ZN7S1542C43v45Ev();
extern void _ZN7S1542C43v46Ev();
extern void _ZN7S1542C43v47Ev();
extern void _ZN7S1542C43v48Ev();
extern void _ZN7S1542C43v49Ev();
extern void _ZN7S1542C43v50Ev();
extern void _ZN7S1542C43v51Ev();
extern void _ZN7S1542C43v52Ev();
extern void _ZN7S1542C43v53Ev();
extern void _ZN7S1542C43v54Ev();
extern void _ZN7S1542C43v55Ev();
extern void _ZN7S1542C43v56Ev();
extern void _ZN7S1542C43v57Ev();
extern void _ZN7S1542C43v58Ev();
extern void _ZN7S1542C43v59Ev();
extern void _ZN7S1542C43v60Ev();
extern void _ZN7S1542C43v61Ev();
extern void _ZN7S1542C43v62Ev();
extern void _ZN7S1542C43v63Ev();
extern void _ZN7S1542C43v64Ev();
extern void _ZN7S1542C43v65Ev();
extern void _ZN7S1542C43v66Ev();
extern void _ZN7S1542C43v67Ev();
extern void _ZN7S1542C43v68Ev();
extern void _ZN7S1542C43v69Ev();
extern void _ZN7S1542C43v70Ev();
extern void _ZN7S1542C33v71Ev();
extern void _ZN7S1542C33v72Ev();
extern void _ZN7S1542C33v73Ev();
extern void _ZN7S1542C33v74Ev();
extern void _ZN7S1542C33v75Ev();
extern void _ZN7S1542C33v76Ev();
extern void _ZN7S1542C33v77Ev();
extern void _ZN7S1542C33v78Ev();
extern void _ZN7S1542C33v79Ev();
extern void _ZN7S1542C33v80Ev();
extern void _ZN7S1542C33v81Ev();
extern void _ZN7S1542C33v82Ev();
extern void _ZN7S1542C33v83Ev();
extern void _ZN7S1542C33v84Ev();
extern void _ZN7S1542C33v85Ev();
extern void _ZN7S1542C33v86Ev();
extern void _ZN7S1542C33v87Ev();
extern void _ZN7S1542C33v88Ev();
extern void _ZN7S1542C33v89Ev();
extern void _ZN7S1542C33v90Ev();
extern void _ZN7S1542C33v91Ev();
extern void _ZN7S1542C33v92Ev();
extern void _ZN7S1542C33v93Ev();
extern void _ZN7S1542C33v94Ev();
extern void _ZN7S1542C33v95Ev();
extern void _ZN7S1542C33v96Ev();
extern void _ZN7S1542C33v97Ev();
extern void _ZN7S1542C23v98Ev();
extern void _ZN7S1542C23v99Ev();
extern void _ZN7S1542C24v100Ev();
extern void _ZN7S1542C24v101Ev();
extern void _ZN7S1542C24v102Ev();
extern void _ZN7S1542C24v103Ev();
extern void _ZN7S1542C24v104Ev();
extern void _ZN7S1542C24v105Ev();
extern void _ZN7S1542C24v106Ev();
extern void _ZN7S1542C24v107Ev();
extern void _ZN7S1542C24v108Ev();
extern void _ZN7S1542C24v109Ev();
extern void _ZN7S1542C24v110Ev();
extern void _ZN7S1542C24v111Ev();
extern void _ZN7S1542C24v112Ev();
extern void _ZN7S1542C24v113Ev();
extern void _ZN7S1542C24v114Ev();
extern void _ZN7S1542C24v115Ev();
static  VTBL_ENTRY vtc_S1542C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1542C2[0]),
  (VTBL_ENTRY)&_ZN7S1542C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1542C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1542C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1542C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1542C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1542C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1542C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v113Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v114Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v115Ev,
};
extern VTBL_ENTRY _ZTI7S1542C2[];
extern  VTBL_ENTRY _ZTV7S1542C2[];
Class_Descriptor cd_S1542C2 = {  "S1542C2", // class name
  bases_S1542C2, 2,
  &(vtc_S1542C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1542C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1542C2),113, //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  S1542C23  : S165C10_nt {
};
//SIG(-1 S1542C23) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1542C23()
{
  extern Class_Descriptor cd_S1542C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1542C23, buf);
    S1542C23 &lv = *(new (buf) S1542C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1542C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1542C23)");
    check_base_class_offset(lv, (S165C10_nt*), 0, "S1542C23");
    test_class_info(&lv, &cd_S1542C23);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1542C23(Test_S1542C23, "S1542C23", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
static Base_Class bases_S1542C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S1542C23 = {  "S1542C23", // class name
  bases_S1542C23, 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  S1542C22_nt  : S1542C23 {
};
//SIG(-1 S1542C22_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S1542C22_nt

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
extern Class_Descriptor cd_S1542C23;
static Base_Class bases_S1542C22_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S1542C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S1542C27  : S165C10_nt {
};
//SIG(-1 S1542C27) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1542C27()
{
  extern Class_Descriptor cd_S1542C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1542C27, buf);
    S1542C27 &lv = *(new (buf) S1542C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1542C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1542C27)");
    check_base_class_offset(lv, (S165C10_nt*), 0, "S1542C27");
    test_class_info(&lv, &cd_S1542C27);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1542C27(Test_S1542C27, "S1542C27", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
static Base_Class bases_S1542C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S1542C27 = {  "S1542C27", // class name
  bases_S1542C27, 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  S1542C26  : S1542C27 {
};
//SIG(-1 S1542C26) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1542C26()
{
  extern Class_Descriptor cd_S1542C26;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1542C26, buf);
    S1542C26 &lv = *(new (buf) S1542C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1542C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1542C26)");
    check_base_class_offset(lv, (S165C10_nt*)(S1542C27*), 0, "S1542C26");
    check_base_class_offset(lv, (S1542C27*), 0, "S1542C26");
    test_class_info(&lv, &cd_S1542C26);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1542C26(Test_S1542C26, "S1542C26", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S165C10_nt;
extern Class_Descriptor cd_S1542C27;
static Base_Class bases_S1542C26[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C10_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_S1542C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1542C26 = {  "S1542C26", // class name
  bases_S1542C26, 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  S1542C30_nt  {
  int s1542c30f0[3];
  void  mf1542c30(); // _ZN11S1542C30_nt9mf1542c30Ev
};
//SIG(-1 S1542C30_nt) C1{ m Fi[3]}


void  S1542C30_nt ::mf1542c30(){}

//skip512 S1542C30_nt

#else // __cplusplus

Class_Descriptor cd_S1542C30_nt = {  "S1542C30_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  S1542C1  : S1542C2 {
  ::S165C20 s1542c1f0;
  ::S165C14 s1542c1f1;
  ::S165C8_nt s1542c1f2;
  ::S1542C22_nt s1542c1f3;
  ::S1542C22_nt s1542c1f4;
  int s1542c1f5;
  unsigned int s1542c1f6:1;
  int s1542c1f7;
  void *s1542c1f8[3];
  ::S615C17_nt s1542c1f9;
  ::S1542C26 s1542c1f10;
  ::S1542C26 s1542c1f11;
  ::S165C16_nt s1542c1f12;
  ::S1542C30_nt s1542c1f13;
  ::S165C16_nt s1542c1f14;
  int s1542c1f15;
  virtual  ~S1542C1(); // _ZN7S1542C1D1Ev
  virtual void  v1(); // _ZN7S1542C12v1Ev
  virtual void  v2(); // _ZN7S1542C12v2Ev
  virtual void  v3(); // _ZN7S1542C12v3Ev
  virtual void  v4(); // _ZN7S1542C12v4Ev
  virtual void  v5(); // _ZN7S1542C12v5Ev
  virtual void  v6(); // _ZN7S1542C12v6Ev
  S1542C1(); // tgen
};
//SIG(1 S1542C1) C1{ BC2{ BC3{ BC4{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 FC16{ BC17{ BC8}} FC18{ BC19{ BC8}} FC20{ BC21{ BC8}} FC22{ BC23{ BC8}} FC22 Fi Fi:1 Fi Fp[3] FC5 FC24{ BC25{ BC8}} FC24 FC13 FC26{ m Fi[3]} FC13 Fi}


 S1542C1 ::~S1542C1(){ note_dtor("S1542C1", this);}
void  S1542C1 ::v1(){vfunc_called(this, "_ZN7S1542C12v1Ev");}
void  S1542C1 ::v2(){vfunc_called(this, "_ZN7S1542C12v2Ev");}
void  S1542C1 ::v3(){vfunc_called(this, "_ZN7S1542C12v3Ev");}
void  S1542C1 ::v4(){vfunc_called(this, "_ZN7S1542C12v4Ev");}
void  S1542C1 ::v5(){vfunc_called(this, "_ZN7S1542C12v5Ev");}
void  S1542C1 ::v6(){vfunc_called(this, "_ZN7S1542C12v6Ev");}
S1542C1 ::S1542C1(){ note_ctor("S1542C1", this);} // tgen

static void Test_S1542C1()
{
  extern Class_Descriptor cd_S1542C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(58,89)];
    init_test(&cd_S1542C1, buf);
    S1542C1 *dp, &lv = *(dp=new (buf) S1542C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(456,352), "sizeof(S1542C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1542C1)");
    check_base_class_offset(lv, (S1542C4*)(S1542C3*)(S1542C2*), 0, "S1542C1");
    check_base_class_offset(lv, (S1542C3*)(S1542C2*), 0, "S1542C1");
    check_base_class_offset(lv, (S1542C2*), 0, "S1542C1");
    check_field_offset(lv, s1542c1f0, ABISELECT(256,196), "S1542C1.s1542c1f0");
    check_field_offset(lv, s1542c1f1, ABISELECT(272,208), "S1542C1.s1542c1f1");
    check_field_offset(lv, s1542c1f2, ABISELECT(288,220), "S1542C1.s1542c1f2");
    check_field_offset(lv, s1542c1f3, ABISELECT(304,232), "S1542C1.s1542c1f3");
    check_field_offset(lv, s1542c1f4, ABISELECT(320,244), "S1542C1.s1542c1f4");
    check_field_offset(lv, s1542c1f5, ABISELECT(336,256), "S1542C1.s1542c1f5");
    set_bf_and_test(lv, s1542c1f6, ABISELECT(340,260), 0, 1, 1, "S1542C1");
    check_field_offset(lv, s1542c1f7, ABISELECT(344,264), "S1542C1.s1542c1f7");
    check_field_offset(lv, s1542c1f8, ABISELECT(352,268), "S1542C1.s1542c1f8");
    check_field_offset(lv, s1542c1f9, ABISELECT(376,280), "S1542C1.s1542c1f9");
    check_field_offset(lv, s1542c1f10, ABISELECT(384,288), "S1542C1.s1542c1f10");
    check_field_offset(lv, s1542c1f11, ABISELECT(400,300), "S1542C1.s1542c1f11");
    check_field_offset(lv, s1542c1f12, ABISELECT(416,312), "S1542C1.s1542c1f12");
    check_field_offset(lv, s1542c1f13, ABISELECT(428,324), "S1542C1.s1542c1f13");
    check_field_offset(lv, s1542c1f14, ABISELECT(440,336), "S1542C1.s1542c1f14");
    check_field_offset(lv, s1542c1f15, ABISELECT(452,348), "S1542C1.s1542c1f15");
    test_class_info(&lv, &cd_S1542C1);
    dp->~S1542C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1542C1(Test_S1542C1, "S1542C1", ABISELECT(456,352));

#else // __cplusplus

extern void _ZN7S1542C1C1Ev();
extern void _ZN7S1542C1D1Ev();
Name_Map name_map_S1542C1[] = {
  NSPAIR(_ZN7S1542C1C1Ev),
  NSPAIR(_ZN7S1542C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1542C4;
extern VTBL_ENTRY _ZTI7S1542C4[];
extern  VTBL_ENTRY _ZTV7S1542C4[];
extern Class_Descriptor cd_S1542C3;
extern VTBL_ENTRY _ZTI7S1542C3[];
extern  VTBL_ENTRY _ZTV7S1542C3[];
extern Class_Descriptor cd_S1542C2;
extern VTBL_ENTRY _ZTI7S1542C2[];
extern  VTBL_ENTRY _ZTV7S1542C2[];
static Base_Class bases_S1542C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1542C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1542C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1542C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1542C1[];
extern void _ZN7S1542C1D1Ev();
extern void _ZN7S1542C1D0Ev();
extern void _ZN7S1542C42v7Ev();
extern void _ZN7S1542C42v8Ev();
extern void _ZN7S1542C42v9Ev();
extern void _ZN7S1542C43v10Ev();
extern void _ZN7S1542C43v11Ev();
extern void _ZN7S1542C43v12Ev();
extern void _ZN7S1542C43v13Ev();
extern void _ZN7S1542C43v14Ev();
extern void _ZN7S1542C43v15Ev();
extern void _ZN7S1542C43v16Ev();
extern void _ZN7S1542C43v17Ev();
extern void _ZN7S1542C43v18Ev();
extern void _ZN7S1542C43v19Ev();
extern void _ZN7S1542C43v20Ev();
extern void _ZN7S1542C43v21Ev();
extern void _ZN7S1542C43v22Ev();
extern void _ZN7S1542C43v23Ev();
extern void _ZN7S1542C43v24Ev();
extern void _ZN7S1542C43v25Ev();
extern void _ZN7S1542C43v26Ev();
extern void _ZN7S1542C43v27Ev();
extern void _ZN7S1542C43v28Ev();
extern void _ZN7S1542C43v29Ev();
extern void _ZN7S1542C43v30Ev();
extern void _ZN7S1542C43v31Ev();
extern void _ZN7S1542C43v32Ev();
extern void _ZN7S1542C43v33Ev();
extern void _ZN7S1542C43v34Ev();
extern void _ZN7S1542C43v35Ev();
extern void _ZN7S1542C43v36Ev();
extern void _ZN7S1542C43v37Ev();
extern void _ZN7S1542C43v38Ev();
extern void _ZN7S1542C43v39Ev();
extern void _ZN7S1542C43v40Ev();
extern void _ZN7S1542C43v41Ev();
extern void _ZN7S1542C43v42Ev();
extern void _ZN7S1542C43v43Ev();
extern void _ZN7S1542C43v44Ev();
extern void _ZN7S1542C43v45Ev();
extern void _ZN7S1542C43v46Ev();
extern void _ZN7S1542C43v47Ev();
extern void _ZN7S1542C43v48Ev();
extern void _ZN7S1542C43v49Ev();
extern void _ZN7S1542C43v50Ev();
extern void _ZN7S1542C43v51Ev();
extern void _ZN7S1542C43v52Ev();
extern void _ZN7S1542C43v53Ev();
extern void _ZN7S1542C43v54Ev();
extern void _ZN7S1542C43v55Ev();
extern void _ZN7S1542C43v56Ev();
extern void _ZN7S1542C43v57Ev();
extern void _ZN7S1542C43v58Ev();
extern void _ZN7S1542C43v59Ev();
extern void _ZN7S1542C43v60Ev();
extern void _ZN7S1542C43v61Ev();
extern void _ZN7S1542C43v62Ev();
extern void _ZN7S1542C43v63Ev();
extern void _ZN7S1542C43v64Ev();
extern void _ZN7S1542C43v65Ev();
extern void _ZN7S1542C43v66Ev();
extern void _ZN7S1542C43v67Ev();
extern void _ZN7S1542C43v68Ev();
extern void _ZN7S1542C43v69Ev();
extern void _ZN7S1542C43v70Ev();
extern void _ZN7S1542C33v71Ev();
extern void _ZN7S1542C33v72Ev();
extern void _ZN7S1542C33v73Ev();
extern void _ZN7S1542C33v74Ev();
extern void _ZN7S1542C33v75Ev();
extern void _ZN7S1542C33v76Ev();
extern void _ZN7S1542C33v77Ev();
extern void _ZN7S1542C33v78Ev();
extern void _ZN7S1542C33v79Ev();
extern void _ZN7S1542C33v80Ev();
extern void _ZN7S1542C33v81Ev();
extern void _ZN7S1542C33v82Ev();
extern void _ZN7S1542C33v83Ev();
extern void _ZN7S1542C33v84Ev();
extern void _ZN7S1542C33v85Ev();
extern void _ZN7S1542C33v86Ev();
extern void _ZN7S1542C33v87Ev();
extern void _ZN7S1542C33v88Ev();
extern void _ZN7S1542C33v89Ev();
extern void _ZN7S1542C33v90Ev();
extern void _ZN7S1542C33v91Ev();
extern void _ZN7S1542C33v92Ev();
extern void _ZN7S1542C33v93Ev();
extern void _ZN7S1542C33v94Ev();
extern void _ZN7S1542C33v95Ev();
extern void _ZN7S1542C33v96Ev();
extern void _ZN7S1542C33v97Ev();
extern void _ZN7S1542C23v98Ev();
extern void _ZN7S1542C23v99Ev();
extern void _ZN7S1542C24v100Ev();
extern void _ZN7S1542C24v101Ev();
extern void _ZN7S1542C24v102Ev();
extern void _ZN7S1542C24v103Ev();
extern void _ZN7S1542C24v104Ev();
extern void _ZN7S1542C24v105Ev();
extern void _ZN7S1542C24v106Ev();
extern void _ZN7S1542C24v107Ev();
extern void _ZN7S1542C24v108Ev();
extern void _ZN7S1542C24v109Ev();
extern void _ZN7S1542C24v110Ev();
extern void _ZN7S1542C24v111Ev();
extern void _ZN7S1542C24v112Ev();
extern void _ZN7S1542C24v113Ev();
extern void _ZN7S1542C24v114Ev();
extern void _ZN7S1542C24v115Ev();
extern void _ZN7S1542C12v1Ev();
extern void _ZN7S1542C12v2Ev();
extern void _ZN7S1542C12v3Ev();
extern void _ZN7S1542C12v4Ev();
extern void _ZN7S1542C12v5Ev();
extern void _ZN7S1542C12v6Ev();
static  VTBL_ENTRY vtc_S1542C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1542C1[0]),
  (VTBL_ENTRY)&_ZN7S1542C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1542C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1542C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1542C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1542C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1542C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1542C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1542C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1542C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v113Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v114Ev,
  (VTBL_ENTRY)&_ZN7S1542C24v115Ev,
  (VTBL_ENTRY)&_ZN7S1542C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1542C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1542C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1542C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1542C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1542C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1542C1[];
extern  VTBL_ENTRY _ZTV7S1542C1[];
Class_Descriptor cd_S1542C1 = {  "S1542C1", // class name
  bases_S1542C1, 3,
  &(vtc_S1542C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(456,352), // object size
  NSPAIRA(_ZTI7S1542C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1542C1),119, //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  S190C6  {
  int s190c6f0;
  __tsi64 s190c6f1;
  void *s190c6f2[4];
  int s190c6f3[2];
  void *s190c6f4;
  ::S615C17_nt s190c6f5;
  void *s190c6f6[2];
  virtual  ~S190C6(); // _ZN6S190C6D1Ev
  virtual void  v4(); // _ZN6S190C62v4Ev
  virtual void  v5(); // _ZN6S190C62v5Ev
  virtual void  v6(); // _ZN6S190C62v6Ev
  virtual void  v7(); // _ZN6S190C62v7Ev
  virtual void  v8(); // _ZN6S190C62v8Ev
  virtual void  v9(); // _ZN6S190C62v9Ev
  virtual void  v10(); // _ZN6S190C63v10Ev
  virtual void  v11(); // _ZN6S190C63v11Ev
  virtual void  v12(); // _ZN6S190C63v12Ev
  virtual void  v13(); // _ZN6S190C63v13Ev
  virtual void  v14(); // _ZN6S190C63v14Ev
  virtual void  v15(); // _ZN6S190C63v15Ev
  virtual void  v16(); // _ZN6S190C63v16Ev
  virtual void  v17(); // _ZN6S190C63v17Ev
  virtual void  v18(); // _ZN6S190C63v18Ev
  virtual void  v19(); // _ZN6S190C63v19Ev
  virtual void  v20(); // _ZN6S190C63v20Ev
  virtual void  v21(); // _ZN6S190C63v21Ev
  virtual void  v22(); // _ZN6S190C63v22Ev
  virtual void  v23(); // _ZN6S190C63v23Ev
  virtual void  v24(); // _ZN6S190C63v24Ev
  virtual void  v25(); // _ZN6S190C63v25Ev
  virtual void  v26(); // _ZN6S190C63v26Ev
  virtual void  v27(); // _ZN6S190C63v27Ev
  virtual void  v28(); // _ZN6S190C63v28Ev
  virtual void  v29(); // _ZN6S190C63v29Ev
  virtual void  v30(); // _ZN6S190C63v30Ev
  virtual void  v31(); // _ZN6S190C63v31Ev
  virtual void  v32(); // _ZN6S190C63v32Ev
  virtual void  v33(); // _ZN6S190C63v33Ev
  virtual void  v34(); // _ZN6S190C63v34Ev
  virtual void  v35(); // _ZN6S190C63v35Ev
  virtual void  v36(); // _ZN6S190C63v36Ev
  virtual void  v37(); // _ZN6S190C63v37Ev
  virtual void  v38(); // _ZN6S190C63v38Ev
  virtual void  v39(); // _ZN6S190C63v39Ev
  virtual void  v40(); // _ZN6S190C63v40Ev
  virtual void  v41(); // _ZN6S190C63v41Ev
  virtual void  v42(); // _ZN6S190C63v42Ev
  virtual void  v43(); // _ZN6S190C63v43Ev
  virtual void  v44(); // _ZN6S190C63v44Ev
  virtual void  v45(); // _ZN6S190C63v45Ev
  virtual void  v46(); // _ZN6S190C63v46Ev
  virtual void  v47(); // _ZN6S190C63v47Ev
  virtual void  v48(); // _ZN6S190C63v48Ev
  virtual void  v49(); // _ZN6S190C63v49Ev
  virtual void  v50(); // _ZN6S190C63v50Ev
  virtual void  v51(); // _ZN6S190C63v51Ev
  virtual void  v52(); // _ZN6S190C63v52Ev
  virtual void  v53(); // _ZN6S190C63v53Ev
  virtual void  v54(); // _ZN6S190C63v54Ev
  virtual void  v55(); // _ZN6S190C63v55Ev
  virtual void  v56(); // _ZN6S190C63v56Ev
  virtual void  v57(); // _ZN6S190C63v57Ev
  virtual void  v58(); // _ZN6S190C63v58Ev
  virtual void  v59(); // _ZN6S190C63v59Ev
  virtual void  v60(); // _ZN6S190C63v60Ev
  virtual void  v61(); // _ZN6S190C63v61Ev
  virtual void  v62(); // _ZN6S190C63v62Ev
  virtual void  v63(); // _ZN6S190C63v63Ev
  virtual void  v64(); // _ZN6S190C63v64Ev
  virtual void  v65(); // _ZN6S190C63v65Ev
  virtual void  v66(); // _ZN6S190C63v66Ev
  virtual void  v67(); // _ZN6S190C63v67Ev
  S190C6(); // tgen
};
//SIG(-1 S190C6) 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]}


 S190C6 ::~S190C6(){ note_dtor("S190C6", this);}
void  S190C6 ::v4(){vfunc_called(this, "_ZN6S190C62v4Ev");}
void  S190C6 ::v5(){vfunc_called(this, "_ZN6S190C62v5Ev");}
void  S190C6 ::v6(){vfunc_called(this, "_ZN6S190C62v6Ev");}
void  S190C6 ::v7(){vfunc_called(this, "_ZN6S190C62v7Ev");}
void  S190C6 ::v8(){vfunc_called(this, "_ZN6S190C62v8Ev");}
void  S190C6 ::v9(){vfunc_called(this, "_ZN6S190C62v9Ev");}
void  S190C6 ::v10(){vfunc_called(this, "_ZN6S190C63v10Ev");}
void  S190C6 ::v11(){vfunc_called(this, "_ZN6S190C63v11Ev");}
void  S190C6 ::v12(){vfunc_called(this, "_ZN6S190C63v12Ev");}
void  S190C6 ::v13(){vfunc_called(this, "_ZN6S190C63v13Ev");}
void  S190C6 ::v14(){vfunc_called(this, "_ZN6S190C63v14Ev");}
void  S190C6 ::v15(){vfunc_called(this, "_ZN6S190C63v15Ev");}
void  S190C6 ::v16(){vfunc_called(this, "_ZN6S190C63v16Ev");}
void  S190C6 ::v17(){vfunc_called(this, "_ZN6S190C63v17Ev");}
void  S190C6 ::v18(){vfunc_called(this, "_ZN6S190C63v18Ev");}
void  S190C6 ::v19(){vfunc_called(this, "_ZN6S190C63v19Ev");}
void  S190C6 ::v20(){vfunc_called(this, "_ZN6S190C63v20Ev");}
void  S190C6 ::v21(){vfunc_called(this, "_ZN6S190C63v21Ev");}
void  S190C6 ::v22(){vfunc_called(this, "_ZN6S190C63v22Ev");}
void  S190C6 ::v23(){vfunc_called(this, "_ZN6S190C63v23Ev");}
void  S190C6 ::v24(){vfunc_called(this, "_ZN6S190C63v24Ev");}
void  S190C6 ::v25(){vfunc_called(this, "_ZN6S190C63v25Ev");}
void  S190C6 ::v26(){vfunc_called(this, "_ZN6S190C63v26Ev");}
void  S190C6 ::v27(){vfunc_called(this, "_ZN6S190C63v27Ev");}
void  S190C6 ::v28(){vfunc_called(this, "_ZN6S190C63v28Ev");}
void  S190C6 ::v29(){vfunc_called(this, "_ZN6S190C63v29Ev");}
void  S190C6 ::v30(){vfunc_called(this, "_ZN6S190C63v30Ev");}
void  S190C6 ::v31(){vfunc_called(this, "_ZN6S190C63v31Ev");}
void  S190C6 ::v32(){vfunc_called(this, "_ZN6S190C63v32Ev");}
void  S190C6 ::v33(){vfunc_called(this, "_ZN6S190C63v33Ev");}
void  S190C6 ::v34(){vfunc_called(this, "_ZN6S190C63v34Ev");}
void  S190C6 ::v35(){vfunc_called(this, "_ZN6S190C63v35Ev");}
void  S190C6 ::v36(){vfunc_called(this, "_ZN6S190C63v36Ev");}
void  S190C6 ::v37(){vfunc_called(this, "_ZN6S190C63v37Ev");}
void  S190C6 ::v38(){vfunc_called(this, "_ZN6S190C63v38Ev");}
void  S190C6 ::v39(){vfunc_called(this, "_ZN6S190C63v39Ev");}
void  S190C6 ::v40(){vfunc_called(this, "_ZN6S190C63v40Ev");}
void  S190C6 ::v41(){vfunc_called(this, "_ZN6S190C63v41Ev");}
void  S190C6 ::v42(){vfunc_called(this, "_ZN6S190C63v42Ev");}
void  S190C6 ::v43(){vfunc_called(this, "_ZN6S190C63v43Ev");}
void  S190C6 ::v44(){vfunc_called(this, "_ZN6S190C63v44Ev");}
void  S190C6 ::v45(){vfunc_called(this, "_ZN6S190C63v45Ev");}
void  S190C6 ::v46(){vfunc_called(this, "_ZN6S190C63v46Ev");}
void  S190C6 ::v47(){vfunc_called(this, "_ZN6S190C63v47Ev");}
void  S190C6 ::v48(){vfunc_called(this, "_ZN6S190C63v48Ev");}
void  S190C6 ::v49(){vfunc_called(this, "_ZN6S190C63v49Ev");}
void  S190C6 ::v50(){vfunc_called(this, "_ZN6S190C63v50Ev");}
void  S190C6 ::v51(){vfunc_called(this, "_ZN6S190C63v51Ev");}
void  S190C6 ::v52(){vfunc_called(this, "_ZN6S190C63v52Ev");}
void  S190C6 ::v53(){vfunc_called(this, "_ZN6S190C63v53Ev");}
void  S190C6 ::v54(){vfunc_called(this, "_ZN6S190C63v54Ev");}
void  S190C6 ::v55(){vfunc_called(this, "_ZN6S190C63v55Ev");}
void  S190C6 ::v56(){vfunc_called(this, "_ZN6S190C63v56Ev");}
void  S190C6 ::v57(){vfunc_called(this, "_ZN6S190C63v57Ev");}
void  S190C6 ::v58(){vfunc_called(this, "_ZN6S190C63v58Ev");}
void  S190C6 ::v59(){vfunc_called(this, "_ZN6S190C63v59Ev");}
void  S190C6 ::v60(){vfunc_called(this, "_ZN6S190C63v60Ev");}
void  S190C6 ::v61(){vfunc_called(this, "_ZN6S190C63v61Ev");}
void  S190C6 ::v62(){vfunc_called(this, "_ZN6S190C63v62Ev");}
void  S190C6 ::v63(){vfunc_called(this, "_ZN6S190C63v63Ev");}
void  S190C6 ::v64(){vfunc_called(this, "_ZN6S190C63v64Ev");}
void  S190C6 ::v65(){vfunc_called(this, "_ZN6S190C63v65Ev");}
void  S190C6 ::v66(){vfunc_called(this, "_ZN6S190C63v66Ev");}
void  S190C6 ::v67(){vfunc_called(this, "_ZN6S190C63v67Ev");}
S190C6 ::S190C6(){ note_ctor("S190C6", this);} // tgen

static void Test_S190C6()
{
  extern Class_Descriptor cd_S190C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S190C6, buf);
    S190C6 *dp, &lv = *(dp=new (buf) S190C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S190C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S190C6)");
    check_field_offset(lv, s190c6f0, ABISELECT(8,4), "S190C6.s190c6f0");
    check_field_offset(lv, s190c6f1, ABISELECT(16,8), "S190C6.s190c6f1");
    check_field_offset(lv, s190c6f2, ABISELECT(24,16), "S190C6.s190c6f2");
    check_field_offset(lv, s190c6f3, ABISELECT(56,32), "S190C6.s190c6f3");
    check_field_offset(lv, s190c6f4, ABISELECT(64,40), "S190C6.s190c6f4");
    check_field_offset(lv, s190c6f5, ABISELECT(72,44), "S190C6.s190c6f5");
    check_field_offset(lv, s190c6f6, ABISELECT(80,52), "S190C6.s190c6f6");
    test_class_info(&lv, &cd_S190C6);
    dp->~S190C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS190C6(Test_S190C6, "S190C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S190C6C1Ev();
extern void _ZN6S190C6D1Ev();
Name_Map name_map_S190C6[] = {
  NSPAIR(_ZN6S190C6C1Ev),
  NSPAIR(_ZN6S190C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S190C6[];
extern void _ZN6S190C6D1Ev();
extern void _ZN6S190C6D0Ev();
extern void _ZN6S190C62v4Ev();
extern void _ZN6S190C62v5Ev();
extern void _ZN6S190C62v6Ev();
extern void _ZN6S190C62v7Ev();
extern void _ZN6S190C62v8Ev();
extern void _ZN6S190C62v9Ev();
extern void _ZN6S190C63v10Ev();
extern void _ZN6S190C63v11Ev();
extern void _ZN6S190C63v12Ev();
extern void _ZN6S190C63v13Ev();
extern void _ZN6S190C63v14Ev();
extern void _ZN6S190C63v15Ev();
extern void _ZN6S190C63v16Ev();
extern void _ZN6S190C63v17Ev();
extern void _ZN6S190C63v18Ev();
extern void _ZN6S190C63v19Ev();
extern void _ZN6S190C63v20Ev();
extern void _ZN6S190C63v21Ev();
extern void _ZN6S190C63v22Ev();
extern void _ZN6S190C63v23Ev();
extern void _ZN6S190C63v24Ev();
extern void _ZN6S190C63v25Ev();
extern void _ZN6S190C63v26Ev();
extern void _ZN6S190C63v27Ev();
extern void _ZN6S190C63v28Ev();
extern void _ZN6S190C63v29Ev();
extern void _ZN6S190C63v30Ev();
extern void _ZN6S190C63v31Ev();
extern void _ZN6S190C63v32Ev();
extern void _ZN6S190C63v33Ev();
extern void _ZN6S190C63v34Ev();
extern void _ZN6S190C63v35Ev();
extern void _ZN6S190C63v36Ev();
extern void _ZN6S190C63v37Ev();
extern void _ZN6S190C63v38Ev();
extern void _ZN6S190C63v39Ev();
extern void _ZN6S190C63v40Ev();
extern void _ZN6S190C63v41Ev();
extern void _ZN6S190C63v42Ev();
extern void _ZN6S190C63v43Ev();
extern void _ZN6S190C63v44Ev();
extern void _ZN6S190C63v45Ev();
extern void _ZN6S190C63v46Ev();
extern void _ZN6S190C63v47Ev();
extern void _ZN6S190C63v48Ev();
extern void _ZN6S190C63v49Ev();
extern void _ZN6S190C63v50Ev();
extern void _ZN6S190C63v51Ev();
extern void _ZN6S190C63v52Ev();
extern void _ZN6S190C63v53Ev();
extern void _ZN6S190C63v54Ev();
extern void _ZN6S190C63v55Ev();
extern void _ZN6S190C63v56Ev();
extern void _ZN6S190C63v57Ev();
extern void _ZN6S190C63v58Ev();
extern void _ZN6S190C63v59Ev();
extern void _ZN6S190C63v60Ev();
extern void _ZN6S190C63v61Ev();
extern void _ZN6S190C63v62Ev();
extern void _ZN6S190C63v63Ev();
extern void _ZN6S190C63v64Ev();
extern void _ZN6S190C63v65Ev();
extern void _ZN6S190C63v66Ev();
extern void _ZN6S190C63v67Ev();
static  VTBL_ENTRY vtc_S190C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S190C6[0]),
  (VTBL_ENTRY)&_ZN6S190C6D1Ev,
  (VTBL_ENTRY)&_ZN6S190C6D0Ev,
  (VTBL_ENTRY)&_ZN6S190C62v4Ev,
  (VTBL_ENTRY)&_ZN6S190C62v5Ev,
  (VTBL_ENTRY)&_ZN6S190C62v6Ev,
  (VTBL_ENTRY)&_ZN6S190C62v7Ev,
  (VTBL_ENTRY)&_ZN6S190C62v8Ev,
  (VTBL_ENTRY)&_ZN6S190C62v9Ev,
  (VTBL_ENTRY)&_ZN6S190C63v10Ev,
  (VTBL_ENTRY)&_ZN6S190C63v11Ev,
  (VTBL_ENTRY)&_ZN6S190C63v12Ev,
  (VTBL_ENTRY)&_ZN6S190C63v13Ev,
  (VTBL_ENTRY)&_ZN6S190C63v14Ev,
  (VTBL_ENTRY)&_ZN6S190C63v15Ev,
  (VTBL_ENTRY)&_ZN6S190C63v16Ev,
  (VTBL_ENTRY)&_ZN6S190C63v17Ev,
  (VTBL_ENTRY)&_ZN6S190C63v18Ev,
  (VTBL_ENTRY)&_ZN6S190C63v19Ev,
  (VTBL_ENTRY)&_ZN6S190C63v20Ev,
  (VTBL_ENTRY)&_ZN6S190C63v21Ev,
  (VTBL_ENTRY)&_ZN6S190C63v22Ev,
  (VTBL_ENTRY)&_ZN6S190C63v23Ev,
  (VTBL_ENTRY)&_ZN6S190C63v24Ev,
  (VTBL_ENTRY)&_ZN6S190C63v25Ev,
  (VTBL_ENTRY)&_ZN6S190C63v26Ev,
  (VTBL_ENTRY)&_ZN6S190C63v27Ev,
  (VTBL_ENTRY)&_ZN6S190C63v28Ev,
  (VTBL_ENTRY)&_ZN6S190C63v29Ev,
  (VTBL_ENTRY)&_ZN6S190C63v30Ev,
  (VTBL_ENTRY)&_ZN6S190C63v31Ev,
  (VTBL_ENTRY)&_ZN6S190C63v32Ev,
  (VTBL_ENTRY)&_ZN6S190C63v33Ev,
  (VTBL_ENTRY)&_ZN6S190C63v34Ev,
  (VTBL_ENTRY)&_ZN6S190C63v35Ev,
  (VTBL_ENTRY)&_ZN6S190C63v36Ev,
  (VTBL_ENTRY)&_ZN6S190C63v37Ev,
  (VTBL_ENTRY)&_ZN6S190C63v38Ev,
  (VTBL_ENTRY)&_ZN6S190C63v39Ev,
  (VTBL_ENTRY)&_ZN6S190C63v40Ev,
  (VTBL_ENTRY)&_ZN6S190C63v41Ev,
  (VTBL_ENTRY)&_ZN6S190C63v42Ev,
  (VTBL_ENTRY)&_ZN6S190C63v43Ev,
  (VTBL_ENTRY)&_ZN6S190C63v44Ev,
  (VTBL_ENTRY)&_ZN6S190C63v45Ev,
  (VTBL_ENTRY)&_ZN6S190C63v46Ev,
  (VTBL_ENTRY)&_ZN6S190C63v47Ev,
  (VTBL_ENTRY)&_ZN6S190C63v48Ev,
  (VTBL_ENTRY)&_ZN6S190C63v49Ev,
  (VTBL_ENTRY)&_ZN6S190C63v50Ev,
  (VTBL_ENTRY)&_ZN6S190C63v51Ev,
  (VTBL_ENTRY)&_ZN6S190C63v52Ev,
  (VTBL_ENTRY)&_ZN6S190C63v53Ev,
  (VTBL_ENTRY)&_ZN6S190C63v54Ev,
  (VTBL_ENTRY)&_ZN6S190C63v55Ev,
  (VTBL_ENTRY)&_ZN6S190C63v56Ev,
  (VTBL_ENTRY)&_ZN6S190C63v57Ev,
  (VTBL_ENTRY)&_ZN6S190C63v58Ev,
  (VTBL_ENTRY)&_ZN6S190C63v59Ev,
  (VTBL_ENTRY)&_ZN6S190C63v60Ev,
  (VTBL_ENTRY)&_ZN6S190C63v61Ev,
  (VTBL_ENTRY)&_ZN6S190C63v62Ev,
  (VTBL_ENTRY)&_ZN6S190C63v63Ev,
  (VTBL_ENTRY)&_ZN6S190C63v64Ev,
  (VTBL_ENTRY)&_ZN6S190C63v65Ev,
  (VTBL_ENTRY)&_ZN6S190C63v66Ev,
  (VTBL_ENTRY)&_ZN6S190C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S190C6[];
extern  VTBL_ENTRY _ZTV6S190C6[];
Class_Descriptor cd_S190C6 = {  "S190C6", // class name
  0,0,//no base classes
  &(vtc_S190C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S190C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S190C6),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  S190C5  : S190C6 {
  void *s190c5f0;
  ::S1542C26 s190c5f1;
  ::S615C17_nt s190c5f2;
  ::S1542C22_nt s190c5f3;
  ::S615C12_nt s190c5f4;
  int s190c5f5;
  unsigned int s190c5f6:1;
  unsigned int s190c5f7:1;
  unsigned int s190c5f8:1;
  unsigned int s190c5f9:1;
  int s190c5f10[11];
  virtual  ~S190C5(); // _ZN6S190C5D1Ev
  virtual void  v68(); // _ZN6S190C53v68Ev
  virtual void  v69(); // _ZN6S190C53v69Ev
  virtual void  v70(); // _ZN6S190C53v70Ev
  virtual void  v71(); // _ZN6S190C53v71Ev
  virtual void  v72(); // _ZN6S190C53v72Ev
  virtual void  v73(); // _ZN6S190C53v73Ev
  virtual void  v74(); // _ZN6S190C53v74Ev
  virtual void  v75(); // _ZN6S190C53v75Ev
  virtual void  v76(); // _ZN6S190C53v76Ev
  virtual void  v77(); // _ZN6S190C53v77Ev
  virtual void  v78(); // _ZN6S190C53v78Ev
  virtual void  v79(); // _ZN6S190C53v79Ev
  virtual void  v80(); // _ZN6S190C53v80Ev
  virtual void  v81(); // _ZN6S190C53v81Ev
  virtual void  v82(); // _ZN6S190C53v82Ev
  virtual void  v83(); // _ZN6S190C53v83Ev
  virtual void  v84(); // _ZN6S190C53v84Ev
  virtual void  v85(); // _ZN6S190C53v85Ev
  virtual void  v86(); // _ZN6S190C53v86Ev
  virtual void  v87(); // _ZN6S190C53v87Ev
  virtual void  v88(); // _ZN6S190C53v88Ev
  virtual void  v89(); // _ZN6S190C53v89Ev
  virtual void  v90(); // _ZN6S190C53v90Ev
  virtual void  v91(); // _ZN6S190C53v91Ev
  virtual void  v92(); // _ZN6S190C53v92Ev
  virtual void  v93(); // _ZN6S190C53v93Ev
  virtual void  v94(); // _ZN6S190C53v94Ev
  S190C5(); // tgen
};
//SIG(-1 S190C5) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S190C5 ::~S190C5(){ note_dtor("S190C5", this);}
void  S190C5 ::v68(){vfunc_called(this, "_ZN6S190C53v68Ev");}
void  S190C5 ::v69(){vfunc_called(this, "_ZN6S190C53v69Ev");}
void  S190C5 ::v70(){vfunc_called(this, "_ZN6S190C53v70Ev");}
void  S190C5 ::v71(){vfunc_called(this, "_ZN6S190C53v71Ev");}
void  S190C5 ::v72(){vfunc_called(this, "_ZN6S190C53v72Ev");}
void  S190C5 ::v73(){vfunc_called(this, "_ZN6S190C53v73Ev");}
void  S190C5 ::v74(){vfunc_called(this, "_ZN6S190C53v74Ev");}
void  S190C5 ::v75(){vfunc_called(this, "_ZN6S190C53v75Ev");}
void  S190C5 ::v76(){vfunc_called(this, "_ZN6S190C53v76Ev");}
void  S190C5 ::v77(){vfunc_called(this, "_ZN6S190C53v77Ev");}
void  S190C5 ::v78(){vfunc_called(this, "_ZN6S190C53v78Ev");}
void  S190C5 ::v79(){vfunc_called(this, "_ZN6S190C53v79Ev");}
void  S190C5 ::v80(){vfunc_called(this, "_ZN6S190C53v80Ev");}
void  S190C5 ::v81(){vfunc_called(this, "_ZN6S190C53v81Ev");}
void  S190C5 ::v82(){vfunc_called(this, "_ZN6S190C53v82Ev");}
void  S190C5 ::v83(){vfunc_called(this, "_ZN6S190C53v83Ev");}
void  S190C5 ::v84(){vfunc_called(this, "_ZN6S190C53v84Ev");}
void  S190C5 ::v85(){vfunc_called(this, "_ZN6S190C53v85Ev");}
void  S190C5 ::v86(){vfunc_called(this, "_ZN6S190C53v86Ev");}
void  S190C5 ::v87(){vfunc_called(this, "_ZN6S190C53v87Ev");}
void  S190C5 ::v88(){vfunc_called(this, "_ZN6S190C53v88Ev");}
void  S190C5 ::v89(){vfunc_called(this, "_ZN6S190C53v89Ev");}
void  S190C5 ::v90(){vfunc_called(this, "_ZN6S190C53v90Ev");}
void  S190C5 ::v91(){vfunc_called(this, "_ZN6S190C53v91Ev");}
void  S190C5 ::v92(){vfunc_called(this, "_ZN6S190C53v92Ev");}
void  S190C5 ::v93(){vfunc_called(this, "_ZN6S190C53v93Ev");}
void  S190C5 ::v94(){vfunc_called(this, "_ZN6S190C53v94Ev");}
S190C5 ::S190C5(){ note_ctor("S190C5", this);} // tgen

static void Test_S190C5()
{
  extern Class_Descriptor cd_S190C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S190C5, buf);
    S190C5 *dp, &lv = *(dp=new (buf) S190C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S190C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S190C5)");
    check_base_class_offset(lv, (S190C6*), 0, "S190C5");
    check_field_offset(lv, s190c5f0, ABISELECT(96,60), "S190C5.s190c5f0");
    check_field_offset(lv, s190c5f1, ABISELECT(104,64), "S190C5.s190c5f1");
    check_field_offset(lv, s190c5f2, ABISELECT(120,76), "S190C5.s190c5f2");
    check_field_offset(lv, s190c5f3, ABISELECT(128,84), "S190C5.s190c5f3");
    check_field_offset(lv, s190c5f4, ABISELECT(144,96), "S190C5.s190c5f4");
    check_field_offset(lv, s190c5f5, ABISELECT(176,128), "S190C5.s190c5f5");
    set_bf_and_test(lv, s190c5f6, ABISELECT(180,132), 0, 1, 1, "S190C5");
    set_bf_and_test(lv, s190c5f7, ABISELECT(180,132), 1, 1, 1, "S190C5");
    set_bf_and_test(lv, s190c5f8, ABISELECT(180,132), 2, 1, 1, "S190C5");
    set_bf_and_test(lv, s190c5f9, ABISELECT(180,132), 3, 1, 1, "S190C5");
    check_field_offset(lv, s190c5f10, ABISELECT(184,136), "S190C5.s190c5f10");
    test_class_info(&lv, &cd_S190C5);
    dp->~S190C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS190C5(Test_S190C5, "S190C5", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S190C5C1Ev();
extern void _ZN6S190C5D1Ev();
Name_Map name_map_S190C5[] = {
  NSPAIR(_ZN6S190C5C1Ev),
  NSPAIR(_ZN6S190C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S190C6;
extern VTBL_ENTRY _ZTI6S190C6[];
extern  VTBL_ENTRY _ZTV6S190C6[];
static Base_Class bases_S190C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S190C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S190C5[];
extern void _ZN6S190C5D1Ev();
extern void _ZN6S190C5D0Ev();
extern void _ZN6S190C62v4Ev();
extern void _ZN6S190C62v5Ev();
extern void _ZN6S190C62v6Ev();
extern void _ZN6S190C62v7Ev();
extern void _ZN6S190C62v8Ev();
extern void _ZN6S190C62v9Ev();
extern void _ZN6S190C63v10Ev();
extern void _ZN6S190C63v11Ev();
extern void _ZN6S190C63v12Ev();
extern void _ZN6S190C63v13Ev();
extern void _ZN6S190C63v14Ev();
extern void _ZN6S190C63v15Ev();
extern void _ZN6S190C63v16Ev();
extern void _ZN6S190C63v17Ev();
extern void _ZN6S190C63v18Ev();
extern void _ZN6S190C63v19Ev();
extern void _ZN6S190C63v20Ev();
extern void _ZN6S190C63v21Ev();
extern void _ZN6S190C63v22Ev();
extern void _ZN6S190C63v23Ev();
extern void _ZN6S190C63v24Ev();
extern void _ZN6S190C63v25Ev();
extern void _ZN6S190C63v26Ev();
extern void _ZN6S190C63v27Ev();
extern void _ZN6S190C63v28Ev();
extern void _ZN6S190C63v29Ev();
extern void _ZN6S190C63v30Ev();
extern void _ZN6S190C63v31Ev();
extern void _ZN6S190C63v32Ev();
extern void _ZN6S190C63v33Ev();
extern void _ZN6S190C63v34Ev();
extern void _ZN6S190C63v35Ev();
extern void _ZN6S190C63v36Ev();
extern void _ZN6S190C63v37Ev();
extern void _ZN6S190C63v38Ev();
extern void _ZN6S190C63v39Ev();
extern void _ZN6S190C63v40Ev();
extern void _ZN6S190C63v41Ev();
extern void _ZN6S190C63v42Ev();
extern void _ZN6S190C63v43Ev();
extern void _ZN6S190C63v44Ev();
extern void _ZN6S190C63v45Ev();
extern void _ZN6S190C63v46Ev();
extern void _ZN6S190C63v47Ev();
extern void _ZN6S190C63v48Ev();
extern void _ZN6S190C63v49Ev();
extern void _ZN6S190C63v50Ev();
extern void _ZN6S190C63v51Ev();
extern void _ZN6S190C63v52Ev();
extern void _ZN6S190C63v53Ev();
extern void _ZN6S190C63v54Ev();
extern void _ZN6S190C63v55Ev();
extern void _ZN6S190C63v56Ev();
extern void _ZN6S190C63v57Ev();
extern void _ZN6S190C63v58Ev();
extern void _ZN6S190C63v59Ev();
extern void _ZN6S190C63v60Ev();
extern void _ZN6S190C63v61Ev();
extern void _ZN6S190C63v62Ev();
extern void _ZN6S190C63v63Ev();
extern void _ZN6S190C63v64Ev();
extern void _ZN6S190C63v65Ev();
extern void _ZN6S190C63v66Ev();
extern void _ZN6S190C63v67Ev();
extern void _ZN6S190C53v68Ev();
extern void _ZN6S190C53v69Ev();
extern void _ZN6S190C53v70Ev();
extern void _ZN6S190C53v71Ev();
extern void _ZN6S190C53v72Ev();
extern void _ZN6S190C53v73Ev();
extern void _ZN6S190C53v74Ev();
extern void _ZN6S190C53v75Ev();
extern void _ZN6S190C53v76Ev();
extern void _ZN6S190C53v77Ev();
extern void _ZN6S190C53v78Ev();
extern void _ZN6S190C53v79Ev();
extern void _ZN6S190C53v80Ev();
extern void _ZN6S190C53v81Ev();
extern void _ZN6S190C53v82Ev();
extern void _ZN6S190C53v83Ev();
extern void _ZN6S190C53v84Ev();
extern void _ZN6S190C53v85Ev();
extern void _ZN6S190C53v86Ev();
extern void _ZN6S190C53v87Ev();
extern void _ZN6S190C53v88Ev();
extern void _ZN6S190C53v89Ev();
extern void _ZN6S190C53v90Ev();
extern void _ZN6S190C53v91Ev();
extern void _ZN6S190C53v92Ev();
extern void _ZN6S190C53v93Ev();
extern void _ZN6S190C53v94Ev();
static  VTBL_ENTRY vtc_S190C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S190C5[0]),
  (VTBL_ENTRY)&_ZN6S190C5D1Ev,
  (VTBL_ENTRY)&_ZN6S190C5D0Ev,
  (VTBL_ENTRY)&_ZN6S190C62v4Ev,
  (VTBL_ENTRY)&_ZN6S190C62v5Ev,
  (VTBL_ENTRY)&_ZN6S190C62v6Ev,
  (VTBL_ENTRY)&_ZN6S190C62v7Ev,
  (VTBL_ENTRY)&_ZN6S190C62v8Ev,
  (VTBL_ENTRY)&_ZN6S190C62v9Ev,
  (VTBL_ENTRY)&_ZN6S190C63v10Ev,
  (VTBL_ENTRY)&_ZN6S190C63v11Ev,
  (VTBL_ENTRY)&_ZN6S190C63v12Ev,
  (VTBL_ENTRY)&_ZN6S190C63v13Ev,
  (VTBL_ENTRY)&_ZN6S190C63v14Ev,
  (VTBL_ENTRY)&_ZN6S190C63v15Ev,
  (VTBL_ENTRY)&_ZN6S190C63v16Ev,
  (VTBL_ENTRY)&_ZN6S190C63v17Ev,
  (VTBL_ENTRY)&_ZN6S190C63v18Ev,
  (VTBL_ENTRY)&_ZN6S190C63v19Ev,
  (VTBL_ENTRY)&_ZN6S190C63v20Ev,
  (VTBL_ENTRY)&_ZN6S190C63v21Ev,
  (VTBL_ENTRY)&_ZN6S190C63v22Ev,
  (VTBL_ENTRY)&_ZN6S190C63v23Ev,
  (VTBL_ENTRY)&_ZN6S190C63v24Ev,
  (VTBL_ENTRY)&_ZN6S190C63v25Ev,
  (VTBL_ENTRY)&_ZN6S190C63v26Ev,
  (VTBL_ENTRY)&_ZN6S190C63v27Ev,
  (VTBL_ENTRY)&_ZN6S190C63v28Ev,
  (VTBL_ENTRY)&_ZN6S190C63v29Ev,
  (VTBL_ENTRY)&_ZN6S190C63v30Ev,
  (VTBL_ENTRY)&_ZN6S190C63v31Ev,
  (VTBL_ENTRY)&_ZN6S190C63v32Ev,
  (VTBL_ENTRY)&_ZN6S190C63v33Ev,
  (VTBL_ENTRY)&_ZN6S190C63v34Ev,
  (VTBL_ENTRY)&_ZN6S190C63v35Ev,
  (VTBL_ENTRY)&_ZN6S190C63v36Ev,
  (VTBL_ENTRY)&_ZN6S190C63v37Ev,
  (VTBL_ENTRY)&_ZN6S190C63v38Ev,
  (VTBL_ENTRY)&_ZN6S190C63v39Ev,
  (VTBL_ENTRY)&_ZN6S190C63v40Ev,
  (VTBL_ENTRY)&_ZN6S190C63v41Ev,
  (VTBL_ENTRY)&_ZN6S190C63v42Ev,
  (VTBL_ENTRY)&_ZN6S190C63v43Ev,
  (VTBL_ENTRY)&_ZN6S190C63v44Ev,
  (VTBL_ENTRY)&_ZN6S190C63v45Ev,
  (VTBL_ENTRY)&_ZN6S190C63v46Ev,
  (VTBL_ENTRY)&_ZN6S190C63v47Ev,
  (VTBL_ENTRY)&_ZN6S190C63v48Ev,
  (VTBL_ENTRY)&_ZN6S190C63v49Ev,
  (VTBL_ENTRY)&_ZN6S190C63v50Ev,
  (VTBL_ENTRY)&_ZN6S190C63v51Ev,
  (VTBL_ENTRY)&_ZN6S190C63v52Ev,
  (VTBL_ENTRY)&_ZN6S190C63v53Ev,
  (VTBL_ENTRY)&_ZN6S190C63v54Ev,
  (VTBL_ENTRY)&_ZN6S190C63v55Ev,
  (VTBL_ENTRY)&_ZN6S190C63v56Ev,
  (VTBL_ENTRY)&_ZN6S190C63v57Ev,
  (VTBL_ENTRY)&_ZN6S190C63v58Ev,
  (VTBL_ENTRY)&_ZN6S190C63v59Ev,
  (VTBL_ENTRY)&_ZN6S190C63v60Ev,
  (VTBL_ENTRY)&_ZN6S190C63v61Ev,
  (VTBL_ENTRY)&_ZN6S190C63v62Ev,
  (VTBL_ENTRY)&_ZN6S190C63v63Ev,
  (VTBL_ENTRY)&_ZN6S190C63v64Ev,
  (VTBL_ENTRY)&_ZN6S190C63v65Ev,
  (VTBL_ENTRY)&_ZN6S190C63v66Ev,
  (VTBL_ENTRY)&_ZN6S190C63v67Ev,
  (VTBL_ENTRY)&_ZN6S190C53v68Ev,
  (VTBL_ENTRY)&_ZN6S190C53v69Ev,
  (VTBL_ENTRY)&_ZN6S190C53v70Ev,
  (VTBL_ENTRY)&_ZN6S190C53v71Ev,
  (VTBL_ENTRY)&_ZN6S190C53v72Ev,
  (VTBL_ENTRY)&_ZN6S190C53v73Ev,
  (VTBL_ENTRY)&_ZN6S190C53v74Ev,
  (VTBL_ENTRY)&_ZN6S190C53v75Ev,
  (VTBL_ENTRY)&_ZN6S190C53v76Ev,
  (VTBL_ENTRY)&_ZN6S190C53v77Ev,
  (VTBL_ENTRY)&_ZN6S190C53v78Ev,
  (VTBL_ENTRY)&_ZN6S190C53v79Ev,
  (VTBL_ENTRY)&_ZN6S190C53v80Ev,
  (VTBL_ENTRY)&_ZN6S190C53v81Ev,
  (VTBL_ENTRY)&_ZN6S190C53v82Ev,
  (VTBL_ENTRY)&_ZN6S190C53v83Ev,
  (VTBL_ENTRY)&_ZN6S190C53v84Ev,
  (VTBL_ENTRY)&_ZN6S190C53v85Ev,
  (VTBL_ENTRY)&_ZN6S190C53v86Ev,
  (VTBL_ENTRY)&_ZN6S190C53v87Ev,
  (VTBL_ENTRY)&_ZN6S190C53v88Ev,
  (VTBL_ENTRY)&_ZN6S190C53v89Ev,
  (VTBL_ENTRY)&_ZN6S190C53v90Ev,
  (VTBL_ENTRY)&_ZN6S190C53v91Ev,
  (VTBL_ENTRY)&_ZN6S190C53v92Ev,
  (VTBL_ENTRY)&_ZN6S190C53v93Ev,
  (VTBL_ENTRY)&_ZN6S190C53v94Ev,
};
extern VTBL_ENTRY _ZTI6S190C5[];
extern  VTBL_ENTRY _ZTV6S190C5[];
Class_Descriptor cd_S190C5 = {  "S190C5", // class name
  bases_S190C5, 1,
  &(vtc_S190C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S190C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S190C5),95, //virtual function table var
  2, // 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  S190C4  : S190C5 {
  ::S615C22_nt s190c4f0;
  unsigned int s190c4f1:1;
  virtual  ~S190C4(); // _ZN6S190C4D1Ev
  virtual void  v95(); // _ZN6S190C43v95Ev
  virtual void  v96(); // _ZN6S190C43v96Ev
  virtual void  v97(); // _ZN6S190C43v97Ev
  virtual void  v98(); // _ZN6S190C43v98Ev
  virtual void  v99(); // _ZN6S190C43v99Ev
  virtual void  v100(); // _ZN6S190C44v100Ev
  virtual void  v101(); // _ZN6S190C44v101Ev
  virtual void  v102(); // _ZN6S190C44v102Ev
  virtual void  v103(); // _ZN6S190C44v103Ev
  virtual void  v104(); // _ZN6S190C44v104Ev
  virtual void  v105(); // _ZN6S190C44v105Ev
  virtual void  v106(); // _ZN6S190C44v106Ev
  virtual void  v107(); // _ZN6S190C44v107Ev
  virtual void  v108(); // _ZN6S190C44v108Ev
  virtual void  v109(); // _ZN6S190C44v109Ev
  virtual void  v110(); // _ZN6S190C44v110Ev
  virtual void  v111(); // _ZN6S190C44v111Ev
  virtual void  v112(); // _ZN6S190C44v112Ev
  S190C4(); // tgen
};
//SIG(-1 S190C4) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S190C4 ::~S190C4(){ note_dtor("S190C4", this);}
void  S190C4 ::v95(){vfunc_called(this, "_ZN6S190C43v95Ev");}
void  S190C4 ::v96(){vfunc_called(this, "_ZN6S190C43v96Ev");}
void  S190C4 ::v97(){vfunc_called(this, "_ZN6S190C43v97Ev");}
void  S190C4 ::v98(){vfunc_called(this, "_ZN6S190C43v98Ev");}
void  S190C4 ::v99(){vfunc_called(this, "_ZN6S190C43v99Ev");}
void  S190C4 ::v100(){vfunc_called(this, "_ZN6S190C44v100Ev");}
void  S190C4 ::v101(){vfunc_called(this, "_ZN6S190C44v101Ev");}
void  S190C4 ::v102(){vfunc_called(this, "_ZN6S190C44v102Ev");}
void  S190C4 ::v103(){vfunc_called(this, "_ZN6S190C44v103Ev");}
void  S190C4 ::v104(){vfunc_called(this, "_ZN6S190C44v104Ev");}
void  S190C4 ::v105(){vfunc_called(this, "_ZN6S190C44v105Ev");}
void  S190C4 ::v106(){vfunc_called(this, "_ZN6S190C44v106Ev");}
void  S190C4 ::v107(){vfunc_called(this, "_ZN6S190C44v107Ev");}
void  S190C4 ::v108(){vfunc_called(this, "_ZN6S190C44v108Ev");}
void  S190C4 ::v109(){vfunc_called(this, "_ZN6S190C44v109Ev");}
void  S190C4 ::v110(){vfunc_called(this, "_ZN6S190C44v110Ev");}
void  S190C4 ::v111(){vfunc_called(this, "_ZN6S190C44v111Ev");}
void  S190C4 ::v112(){vfunc_called(this, "_ZN6S190C44v112Ev");}
S190C4 ::S190C4(){ note_ctor("S190C4", this);} // tgen

static void Test_S190C4()
{
  extern Class_Descriptor cd_S190C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S190C4, buf);
    S190C4 *dp, &lv = *(dp=new (buf) S190C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S190C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S190C4)");
    check_base_class_offset(lv, (S190C6*)(S190C5*), 0, "S190C4");
    check_base_class_offset(lv, (S190C5*), 0, "S190C4");
    check_field_offset(lv, s190c4f0, ABISELECT(232,180), "S190C4.s190c4f0");
    set_bf_and_test(lv, s190c4f1, ABISELECT(248,192), 0, 1, 1, "S190C4");
    test_class_info(&lv, &cd_S190C4);
    dp->~S190C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS190C4(Test_S190C4, "S190C4", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S190C4C1Ev();
extern void _ZN6S190C4D1Ev();
Name_Map name_map_S190C4[] = {
  NSPAIR(_ZN6S190C4C1Ev),
  NSPAIR(_ZN6S190C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S190C6;
extern VTBL_ENTRY _ZTI6S190C6[];
extern  VTBL_ENTRY _ZTV6S190C6[];
extern Class_Descriptor cd_S190C5;
extern VTBL_ENTRY _ZTI6S190C5[];
extern  VTBL_ENTRY _ZTV6S190C5[];
static Base_Class bases_S190C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S190C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S190C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S190C4[];
extern void _ZN6S190C4D1Ev();
extern void _ZN6S190C4D0Ev();
extern void _ZN6S190C62v4Ev();
extern void _ZN6S190C62v5Ev();
extern void _ZN6S190C62v6Ev();
extern void _ZN6S190C62v7Ev();
extern void _ZN6S190C62v8Ev();
extern void _ZN6S190C62v9Ev();
extern void _ZN6S190C63v10Ev();
extern void _ZN6S190C63v11Ev();
extern void _ZN6S190C63v12Ev();
extern void _ZN6S190C63v13Ev();
extern void _ZN6S190C63v14Ev();
extern void _ZN6S190C63v15Ev();
extern void _ZN6S190C63v16Ev();
extern void _ZN6S190C63v17Ev();
extern void _ZN6S190C63v18Ev();
extern void _ZN6S190C63v19Ev();
extern void _ZN6S190C63v20Ev();
extern void _ZN6S190C63v21Ev();
extern void _ZN6S190C63v22Ev();
extern void _ZN6S190C63v23Ev();
extern void _ZN6S190C63v24Ev();
extern void _ZN6S190C63v25Ev();
extern void _ZN6S190C63v26Ev();
extern void _ZN6S190C63v27Ev();
extern void _ZN6S190C63v28Ev();
extern void _ZN6S190C63v29Ev();
extern void _ZN6S190C63v30Ev();
extern void _ZN6S190C63v31Ev();
extern void _ZN6S190C63v32Ev();
extern void _ZN6S190C63v33Ev();
extern void _ZN6S190C63v34Ev();
extern void _ZN6S190C63v35Ev();
extern void _ZN6S190C63v36Ev();
extern void _ZN6S190C63v37Ev();
extern void _ZN6S190C63v38Ev();
extern void _ZN6S190C63v39Ev();
extern void _ZN6S190C63v40Ev();
extern void _ZN6S190C63v41Ev();
extern void _ZN6S190C63v42Ev();
extern void _ZN6S190C63v43Ev();
extern void _ZN6S190C63v44Ev();
extern void _ZN6S190C63v45Ev();
extern void _ZN6S190C63v46Ev();
extern void _ZN6S190C63v47Ev();
extern void _ZN6S190C63v48Ev();
extern void _ZN6S190C63v49Ev();
extern void _ZN6S190C63v50Ev();
extern void _ZN6S190C63v51Ev();
extern void _ZN6S190C63v52Ev();
extern void _ZN6S190C63v53Ev();
extern void _ZN6S190C63v54Ev();
extern void _ZN6S190C63v55Ev();
extern void _ZN6S190C63v56Ev();
extern void _ZN6S190C63v57Ev();
extern void _ZN6S190C63v58Ev();
extern void _ZN6S190C63v59Ev();
extern void _ZN6S190C63v60Ev();
extern void _ZN6S190C63v61Ev();
extern void _ZN6S190C63v62Ev();
extern void _ZN6S190C63v63Ev();
extern void _ZN6S190C63v64Ev();
extern void _ZN6S190C63v65Ev();
extern void _ZN6S190C63v66Ev();
extern void _ZN6S190C63v67Ev();
extern void _ZN6S190C53v68Ev();
extern void _ZN6S190C53v69Ev();
extern void _ZN6S190C53v70Ev();
extern void _ZN6S190C53v71Ev();
extern void _ZN6S190C53v72Ev();
extern void _ZN6S190C53v73Ev();
extern void _ZN6S190C53v74Ev();
extern void _ZN6S190C53v75Ev();
extern void _ZN6S190C53v76Ev();
extern void _ZN6S190C53v77Ev();
extern void _ZN6S190C53v78Ev();
extern void _ZN6S190C53v79Ev();
extern void _ZN6S190C53v80Ev();
extern void _ZN6S190C53v81Ev();
extern void _ZN6S190C53v82Ev();
extern void _ZN6S190C53v83Ev();
extern void _ZN6S190C53v84Ev();
extern void _ZN6S190C53v85Ev();
extern void _ZN6S190C53v86Ev();
extern void _ZN6S190C53v87Ev();
extern void _ZN6S190C53v88Ev();
extern void _ZN6S190C53v89Ev();
extern void _ZN6S190C53v90Ev();
extern void _ZN6S190C53v91Ev();
extern void _ZN6S190C53v92Ev();
extern void _ZN6S190C53v93Ev();
extern void _ZN6S190C53v94Ev();
extern void _ZN6S190C43v95Ev();
extern void _ZN6S190C43v96Ev();
extern void _ZN6S190C43v97Ev();
extern void _ZN6S190C43v98Ev();
extern void _ZN6S190C43v99Ev();
extern void _ZN6S190C44v100Ev();
extern void _ZN6S190C44v101Ev();
extern void _ZN6S190C44v102Ev();
extern void _ZN6S190C44v103Ev();
extern void _ZN6S190C44v104Ev();
extern void _ZN6S190C44v105Ev();
extern void _ZN6S190C44v106Ev();
extern void _ZN6S190C44v107Ev();
extern void _ZN6S190C44v108Ev();
extern void _ZN6S190C44v109Ev();
extern void _ZN6S190C44v110Ev();
extern void _ZN6S190C44v111Ev();
extern void _ZN6S190C44v112Ev();
static  VTBL_ENTRY vtc_S190C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S190C4[0]),
  (VTBL_ENTRY)&_ZN6S190C4D1Ev,
  (VTBL_ENTRY)&_ZN6S190C4D0Ev,
  (VTBL_ENTRY)&_ZN6S190C62v4Ev,
  (VTBL_ENTRY)&_ZN6S190C62v5Ev,
  (VTBL_ENTRY)&_ZN6S190C62v6Ev,
  (VTBL_ENTRY)&_ZN6S190C62v7Ev,
  (VTBL_ENTRY)&_ZN6S190C62v8Ev,
  (VTBL_ENTRY)&_ZN6S190C62v9Ev,
  (VTBL_ENTRY)&_ZN6S190C63v10Ev,
  (VTBL_ENTRY)&_ZN6S190C63v11Ev,
  (VTBL_ENTRY)&_ZN6S190C63v12Ev,
  (VTBL_ENTRY)&_ZN6S190C63v13Ev,
  (VTBL_ENTRY)&_ZN6S190C63v14Ev,
  (VTBL_ENTRY)&_ZN6S190C63v15Ev,
  (VTBL_ENTRY)&_ZN6S190C63v16Ev,
  (VTBL_ENTRY)&_ZN6S190C63v17Ev,
  (VTBL_ENTRY)&_ZN6S190C63v18Ev,
  (VTBL_ENTRY)&_ZN6S190C63v19Ev,
  (VTBL_ENTRY)&_ZN6S190C63v20Ev,
  (VTBL_ENTRY)&_ZN6S190C63v21Ev,
  (VTBL_ENTRY)&_ZN6S190C63v22Ev,
  (VTBL_ENTRY)&_ZN6S190C63v23Ev,
  (VTBL_ENTRY)&_ZN6S190C63v24Ev,
  (VTBL_ENTRY)&_ZN6S190C63v25Ev,
  (VTBL_ENTRY)&_ZN6S190C63v26Ev,
  (VTBL_ENTRY)&_ZN6S190C63v27Ev,
  (VTBL_ENTRY)&_ZN6S190C63v28Ev,
  (VTBL_ENTRY)&_ZN6S190C63v29Ev,
  (VTBL_ENTRY)&_ZN6S190C63v30Ev,
  (VTBL_ENTRY)&_ZN6S190C63v31Ev,
  (VTBL_ENTRY)&_ZN6S190C63v32Ev,
  (VTBL_ENTRY)&_ZN6S190C63v33Ev,
  (VTBL_ENTRY)&_ZN6S190C63v34Ev,
  (VTBL_ENTRY)&_ZN6S190C63v35Ev,
  (VTBL_ENTRY)&_ZN6S190C63v36Ev,
  (VTBL_ENTRY)&_ZN6S190C63v37Ev,
  (VTBL_ENTRY)&_ZN6S190C63v38Ev,
  (VTBL_ENTRY)&_ZN6S190C63v39Ev,
  (VTBL_ENTRY)&_ZN6S190C63v40Ev,
  (VTBL_ENTRY)&_ZN6S190C63v41Ev,
  (VTBL_ENTRY)&_ZN6S190C63v42Ev,
  (VTBL_ENTRY)&_ZN6S190C63v43Ev,
  (VTBL_ENTRY)&_ZN6S190C63v44Ev,
  (VTBL_ENTRY)&_ZN6S190C63v45Ev,
  (VTBL_ENTRY)&_ZN6S190C63v46Ev,
  (VTBL_ENTRY)&_ZN6S190C63v47Ev,
  (VTBL_ENTRY)&_ZN6S190C63v48Ev,
  (VTBL_ENTRY)&_ZN6S190C63v49Ev,
  (VTBL_ENTRY)&_ZN6S190C63v50Ev,
  (VTBL_ENTRY)&_ZN6S190C63v51Ev,
  (VTBL_ENTRY)&_ZN6S190C63v52Ev,
  (VTBL_ENTRY)&_ZN6S190C63v53Ev,
  (VTBL_ENTRY)&_ZN6S190C63v54Ev,
  (VTBL_ENTRY)&_ZN6S190C63v55Ev,
  (VTBL_ENTRY)&_ZN6S190C63v56Ev,
  (VTBL_ENTRY)&_ZN6S190C63v57Ev,
  (VTBL_ENTRY)&_ZN6S190C63v58Ev,
  (VTBL_ENTRY)&_ZN6S190C63v59Ev,
  (VTBL_ENTRY)&_ZN6S190C63v60Ev,
  (VTBL_ENTRY)&_ZN6S190C63v61Ev,
  (VTBL_ENTRY)&_ZN6S190C63v62Ev,
  (VTBL_ENTRY)&_ZN6S190C63v63Ev,
  (VTBL_ENTRY)&_ZN6S190C63v64Ev,
  (VTBL_ENTRY)&_ZN6S190C63v65Ev,
  (VTBL_ENTRY)&_ZN6S190C63v66Ev,
  (VTBL_ENTRY)&_ZN6S190C63v67Ev,
  (VTBL_ENTRY)&_ZN6S190C53v68Ev,
  (VTBL_ENTRY)&_ZN6S190C53v69Ev,
  (VTBL_ENTRY)&_ZN6S190C53v70Ev,
  (VTBL_ENTRY)&_ZN6S190C53v71Ev,
  (VTBL_ENTRY)&_ZN6S190C53v72Ev,
  (VTBL_ENTRY)&_ZN6S190C53v73Ev,
  (VTBL_ENTRY)&_ZN6S190C53v74Ev,
  (VTBL_ENTRY)&_ZN6S190C53v75Ev,
  (VTBL_ENTRY)&_ZN6S190C53v76Ev,
  (VTBL_ENTRY)&_ZN6S190C53v77Ev,
  (VTBL_ENTRY)&_ZN6S190C53v78Ev,
  (VTBL_ENTRY)&_ZN6S190C53v79Ev,
  (VTBL_ENTRY)&_ZN6S190C53v80Ev,
  (VTBL_ENTRY)&_ZN6S190C53v81Ev,
  (VTBL_ENTRY)&_ZN6S190C53v82Ev,
  (VTBL_ENTRY)&_ZN6S190C53v83Ev,
  (VTBL_ENTRY)&_ZN6S190C53v84Ev,
  (VTBL_ENTRY)&_ZN6S190C53v85Ev,
  (VTBL_ENTRY)&_ZN6S190C53v86Ev,
  (VTBL_ENTRY)&_ZN6S190C53v87Ev,
  (VTBL_ENTRY)&_ZN6S190C53v88Ev,
  (VTBL_ENTRY)&_ZN6S190C53v89Ev,
  (VTBL_ENTRY)&_ZN6S190C53v90Ev,
  (VTBL_ENTRY)&_ZN6S190C53v91Ev,
  (VTBL_ENTRY)&_ZN6S190C53v92Ev,
  (VTBL_ENTRY)&_ZN6S190C53v93Ev,
  (VTBL_ENTRY)&_ZN6S190C53v94Ev,
  (VTBL_ENTRY)&_ZN6S190C43v95Ev,
  (VTBL_ENTRY)&_ZN6S190C43v96Ev,
  (VTBL_ENTRY)&_ZN6S190C43v97Ev,
  (VTBL_ENTRY)&_ZN6S190C43v98Ev,
  (VTBL_ENTRY)&_ZN6S190C43v99Ev,
  (VTBL_ENTRY)&_ZN6S190C44v100Ev,
  (VTBL_ENTRY)&_ZN6S190C44v101Ev,
  (VTBL_ENTRY)&_ZN6S190C44v102Ev,
  (VTBL_ENTRY)&_ZN6S190C44v103Ev,
  (VTBL_ENTRY)&_ZN6S190C44v104Ev,
  (VTBL_ENTRY)&_ZN6S190C44v105Ev,
  (VTBL_ENTRY)&_ZN6S190C44v106Ev,
  (VTBL_ENTRY)&_ZN6S190C44v107Ev,
  (VTBL_ENTRY)&_ZN6S190C44v108Ev,
  (VTBL_ENTRY)&_ZN6S190C44v109Ev,
  (VTBL_ENTRY)&_ZN6S190C44v110Ev,
  (VTBL_ENTRY)&_ZN6S190C44v111Ev,
  (VTBL_ENTRY)&_ZN6S190C44v112Ev,
};
extern VTBL_ENTRY _ZTI6S190C4[];
extern  VTBL_ENTRY _ZTV6S190C4[];
Class_Descriptor cd_S190C4 = {  "S190C4", // class name
  bases_S190C4, 2,
  &(vtc_S190C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S190C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S190C4),113, //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  S190C3  : S190C4 {
  int s190c3f0[3];
  virtual  ~S190C3(); // _ZN6S190C3D1Ev
  virtual void  v113(); // _ZN6S190C34v113Ev
  virtual void  v114(); // _ZN6S190C34v114Ev
  virtual void  v115(); // _ZN6S190C34v115Ev
  virtual void  v116(); // _ZN6S190C34v116Ev
  virtual void  v117(); // _ZN6S190C34v117Ev
  virtual void  v118(); // _ZN6S190C34v118Ev
  virtual void  v119(); // _ZN6S190C34v119Ev
  S190C3(); // tgen
};
//SIG(-1 S190C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 Fi[3]}


 S190C3 ::~S190C3(){ note_dtor("S190C3", this);}
void  S190C3 ::v113(){vfunc_called(this, "_ZN6S190C34v113Ev");}
void  S190C3 ::v114(){vfunc_called(this, "_ZN6S190C34v114Ev");}
void  S190C3 ::v115(){vfunc_called(this, "_ZN6S190C34v115Ev");}
void  S190C3 ::v116(){vfunc_called(this, "_ZN6S190C34v116Ev");}
void  S190C3 ::v117(){vfunc_called(this, "_ZN6S190C34v117Ev");}
void  S190C3 ::v118(){vfunc_called(this, "_ZN6S190C34v118Ev");}
void  S190C3 ::v119(){vfunc_called(this, "_ZN6S190C34v119Ev");}
S190C3 ::S190C3(){ note_ctor("S190C3", this);} // tgen

static void Test_S190C3()
{
  extern Class_Descriptor cd_S190C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,53)];
    init_test(&cd_S190C3, buf);
    S190C3 *dp, &lv = *(dp=new (buf) S190C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,208), "sizeof(S190C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S190C3)");
    check_base_class_offset(lv, (S190C6*)(S190C5*)(S190C4*), 0, "S190C3");
    check_base_class_offset(lv, (S190C5*)(S190C4*), 0, "S190C3");
    check_base_class_offset(lv, (S190C4*), 0, "S190C3");
    check_field_offset(lv, s190c3f0, ABISELECT(252,196), "S190C3.s190c3f0");
    test_class_info(&lv, &cd_S190C3);
    dp->~S190C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS190C3(Test_S190C3, "S190C3", ABISELECT(264,208));

#else // __cplusplus

extern void _ZN6S190C3C1Ev();
extern void _ZN6S190C3D1Ev();
Name_Map name_map_S190C3[] = {
  NSPAIR(_ZN6S190C3C1Ev),
  NSPAIR(_ZN6S190C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S190C6;
extern VTBL_ENTRY _ZTI6S190C6[];
extern  VTBL_ENTRY _ZTV6S190C6[];
extern Class_Descriptor cd_S190C5;
extern VTBL_ENTRY _ZTI6S190C5[];
extern  VTBL_ENTRY _ZTV6S190C5[];
extern Class_Descriptor cd_S190C4;
extern VTBL_ENTRY _ZTI6S190C4[];
extern  VTBL_ENTRY _ZTV6S190C4[];
static Base_Class bases_S190C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S190C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S190C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S190C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S190C3[];
extern void _ZN6S190C3D1Ev();
extern void _ZN6S190C3D0Ev();
extern void _ZN6S190C62v4Ev();
extern void _ZN6S190C62v5Ev();
extern void _ZN6S190C62v6Ev();
extern void _ZN6S190C62v7Ev();
extern void _ZN6S190C62v8Ev();
extern void _ZN6S190C62v9Ev();
extern void _ZN6S190C63v10Ev();
extern void _ZN6S190C63v11Ev();
extern void _ZN6S190C63v12Ev();
extern void _ZN6S190C63v13Ev();
extern void _ZN6S190C63v14Ev();
extern void _ZN6S190C63v15Ev();
extern void _ZN6S190C63v16Ev();
extern void _ZN6S190C63v17Ev();
extern void _ZN6S190C63v18Ev();
extern void _ZN6S190C63v19Ev();
extern void _ZN6S190C63v20Ev();
extern void _ZN6S190C63v21Ev();
extern void _ZN6S190C63v22Ev();
extern void _ZN6S190C63v23Ev();
extern void _ZN6S190C63v24Ev();
extern void _ZN6S190C63v25Ev();
extern void _ZN6S190C63v26Ev();
extern void _ZN6S190C63v27Ev();
extern void _ZN6S190C63v28Ev();
extern void _ZN6S190C63v29Ev();
extern void _ZN6S190C63v30Ev();
extern void _ZN6S190C63v31Ev();
extern void _ZN6S190C63v32Ev();
extern void _ZN6S190C63v33Ev();
extern void _ZN6S190C63v34Ev();
extern void _ZN6S190C63v35Ev();
extern void _ZN6S190C63v36Ev();
extern void _ZN6S190C63v37Ev();
extern void _ZN6S190C63v38Ev();
extern void _ZN6S190C63v39Ev();
extern void _ZN6S190C63v40Ev();
extern void _ZN6S190C63v41Ev();
extern void _ZN6S190C63v42Ev();
extern void _ZN6S190C63v43Ev();
extern void _ZN6S190C63v44Ev();
extern void _ZN6S190C63v45Ev();
extern void _ZN6S190C63v46Ev();
extern void _ZN6S190C63v47Ev();
extern void _ZN6S190C63v48Ev();
extern void _ZN6S190C63v49Ev();
extern void _ZN6S190C63v50Ev();
extern void _ZN6S190C63v51Ev();
extern void _ZN6S190C63v52Ev();
extern void _ZN6S190C63v53Ev();
extern void _ZN6S190C63v54Ev();
extern void _ZN6S190C63v55Ev();
extern void _ZN6S190C63v56Ev();
extern void _ZN6S190C63v57Ev();
extern void _ZN6S190C63v58Ev();
extern void _ZN6S190C63v59Ev();
extern void _ZN6S190C63v60Ev();
extern void _ZN6S190C63v61Ev();
extern void _ZN6S190C63v62Ev();
extern void _ZN6S190C63v63Ev();
extern void _ZN6S190C63v64Ev();
extern void _ZN6S190C63v65Ev();
extern void _ZN6S190C63v66Ev();
extern void _ZN6S190C63v67Ev();
extern void _ZN6S190C53v68Ev();
extern void _ZN6S190C53v69Ev();
extern void _ZN6S190C53v70Ev();
extern void _ZN6S190C53v71Ev();
extern void _ZN6S190C53v72Ev();
extern void _ZN6S190C53v73Ev();
extern void _ZN6S190C53v74Ev();
extern void _ZN6S190C53v75Ev();
extern void _ZN6S190C53v76Ev();
extern void _ZN6S190C53v77Ev();
extern void _ZN6S190C53v78Ev();
extern void _ZN6S190C53v79Ev();
extern void _ZN6S190C53v80Ev();
extern void _ZN6S190C53v81Ev();
extern void _ZN6S190C53v82Ev();
extern void _ZN6S190C53v83Ev();
extern void _ZN6S190C53v84Ev();
extern void _ZN6S190C53v85Ev();
extern void _ZN6S190C53v86Ev();
extern void _ZN6S190C53v87Ev();
extern void _ZN6S190C53v88Ev();
extern void _ZN6S190C53v89Ev();
extern void _ZN6S190C53v90Ev();
extern void _ZN6S190C53v91Ev();
extern void _ZN6S190C53v92Ev();
extern void _ZN6S190C53v93Ev();
extern void _ZN6S190C53v94Ev();
extern void _ZN6S190C43v95Ev();
extern void _ZN6S190C43v96Ev();
extern void _ZN6S190C43v97Ev();
extern void _ZN6S190C43v98Ev();
extern void _ZN6S190C43v99Ev();
extern void _ZN6S190C44v100Ev();
extern void _ZN6S190C44v101Ev();
extern void _ZN6S190C44v102Ev();
extern void _ZN6S190C44v103Ev();
extern void _ZN6S190C44v104Ev();
extern void _ZN6S190C44v105Ev();
extern void _ZN6S190C44v106Ev();
extern void _ZN6S190C44v107Ev();
extern void _ZN6S190C44v108Ev();
extern void _ZN6S190C44v109Ev();
extern void _ZN6S190C44v110Ev();
extern void _ZN6S190C44v111Ev();
extern void _ZN6S190C44v112Ev();
extern void _ZN6S190C34v113Ev();
extern void _ZN6S190C34v114Ev();
extern void _ZN6S190C34v115Ev();
extern void _ZN6S190C34v116Ev();
extern void _ZN6S190C34v117Ev();
extern void _ZN6S190C34v118Ev();
extern void _ZN6S190C34v119Ev();
static  VTBL_ENTRY vtc_S190C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S190C3[0]),
  (VTBL_ENTRY)&_ZN6S190C3D1Ev,
  (VTBL_ENTRY)&_ZN6S190C3D0Ev,
  (VTBL_ENTRY)&_ZN6S190C62v4Ev,
  (VTBL_ENTRY)&_ZN6S190C62v5Ev,
  (VTBL_ENTRY)&_ZN6S190C62v6Ev,
  (VTBL_ENTRY)&_ZN6S190C62v7Ev,
  (VTBL_ENTRY)&_ZN6S190C62v8Ev,
  (VTBL_ENTRY)&_ZN6S190C62v9Ev,
  (VTBL_ENTRY)&_ZN6S190C63v10Ev,
  (VTBL_ENTRY)&_ZN6S190C63v11Ev,
  (VTBL_ENTRY)&_ZN6S190C63v12Ev,
  (VTBL_ENTRY)&_ZN6S190C63v13Ev,
  (VTBL_ENTRY)&_ZN6S190C63v14Ev,
  (VTBL_ENTRY)&_ZN6S190C63v15Ev,
  (VTBL_ENTRY)&_ZN6S190C63v16Ev,
  (VTBL_ENTRY)&_ZN6S190C63v17Ev,
  (VTBL_ENTRY)&_ZN6S190C63v18Ev,
  (VTBL_ENTRY)&_ZN6S190C63v19Ev,
  (VTBL_ENTRY)&_ZN6S190C63v20Ev,
  (VTBL_ENTRY)&_ZN6S190C63v21Ev,
  (VTBL_ENTRY)&_ZN6S190C63v22Ev,
  (VTBL_ENTRY)&_ZN6S190C63v23Ev,
  (VTBL_ENTRY)&_ZN6S190C63v24Ev,
  (VTBL_ENTRY)&_ZN6S190C63v25Ev,
  (VTBL_ENTRY)&_ZN6S190C63v26Ev,
  (VTBL_ENTRY)&_ZN6S190C63v27Ev,
  (VTBL_ENTRY)&_ZN6S190C63v28Ev,
  (VTBL_ENTRY)&_ZN6S190C63v29Ev,
  (VTBL_ENTRY)&_ZN6S190C63v30Ev,
  (VTBL_ENTRY)&_ZN6S190C63v31Ev,
  (VTBL_ENTRY)&_ZN6S190C63v32Ev,
  (VTBL_ENTRY)&_ZN6S190C63v33Ev,
  (VTBL_ENTRY)&_ZN6S190C63v34Ev,
  (VTBL_ENTRY)&_ZN6S190C63v35Ev,
  (VTBL_ENTRY)&_ZN6S190C63v36Ev,
  (VTBL_ENTRY)&_ZN6S190C63v37Ev,
  (VTBL_ENTRY)&_ZN6S190C63v38Ev,
  (VTBL_ENTRY)&_ZN6S190C63v39Ev,
  (VTBL_ENTRY)&_ZN6S190C63v40Ev,
  (VTBL_ENTRY)&_ZN6S190C63v41Ev,
  (VTBL_ENTRY)&_ZN6S190C63v42Ev,
  (VTBL_ENTRY)&_ZN6S190C63v43Ev,
  (VTBL_ENTRY)&_ZN6S190C63v44Ev,
  (VTBL_ENTRY)&_ZN6S190C63v45Ev,
  (VTBL_ENTRY)&_ZN6S190C63v46Ev,
  (VTBL_ENTRY)&_ZN6S190C63v47Ev,
  (VTBL_ENTRY)&_ZN6S190C63v48Ev,
  (VTBL_ENTRY)&_ZN6S190C63v49Ev,
  (VTBL_ENTRY)&_ZN6S190C63v50Ev,
  (VTBL_ENTRY)&_ZN6S190C63v51Ev,
  (VTBL_ENTRY)&_ZN6S190C63v52Ev,
  (VTBL_ENTRY)&_ZN6S190C63v53Ev,
  (VTBL_ENTRY)&_ZN6S190C63v54Ev,
  (VTBL_ENTRY)&_ZN6S190C63v55Ev,
  (VTBL_ENTRY)&_ZN6S190C63v56Ev,
  (VTBL_ENTRY)&_ZN6S190C63v57Ev,
  (VTBL_ENTRY)&_ZN6S190C63v58Ev,
  (VTBL_ENTRY)&_ZN6S190C63v59Ev,
  (VTBL_ENTRY)&_ZN6S190C63v60Ev,
  (VTBL_ENTRY)&_ZN6S190C63v61Ev,
  (VTBL_ENTRY)&_ZN6S190C63v62Ev,
  (VTBL_ENTRY)&_ZN6S190C63v63Ev,
  (VTBL_ENTRY)&_ZN6S190C63v64Ev,
  (VTBL_ENTRY)&_ZN6S190C63v65Ev,
  (VTBL_ENTRY)&_ZN6S190C63v66Ev,
  (VTBL_ENTRY)&_ZN6S190C63v67Ev,
  (VTBL_ENTRY)&_ZN6S190C53v68Ev,
  (VTBL_ENTRY)&_ZN6S190C53v69Ev,
  (VTBL_ENTRY)&_ZN6S190C53v70Ev,
  (VTBL_ENTRY)&_ZN6S190C53v71Ev,
  (VTBL_ENTRY)&_ZN6S190C53v72Ev,
  (VTBL_ENTRY)&_ZN6S190C53v73Ev,
  (VTBL_ENTRY)&_ZN6S190C53v74Ev,
  (VTBL_ENTRY)&_ZN6S190C53v75Ev,
  (VTBL_ENTRY)&_ZN6S190C53v76Ev,
  (VTBL_ENTRY)&_ZN6S190C53v77Ev,
  (VTBL_ENTRY)&_ZN6S190C53v78Ev,
  (VTBL_ENTRY)&_ZN6S190C53v79Ev,
  (VTBL_ENTRY)&_ZN6S190C53v80Ev,
  (VTBL_ENTRY)&_ZN6S190C53v81Ev,
  (VTBL_ENTRY)&_ZN6S190C53v82Ev,
  (VTBL_ENTRY)&_ZN6S190C53v83Ev,
  (VTBL_ENTRY)&_ZN6S190C53v84Ev,
  (VTBL_ENTRY)&_ZN6S190C53v85Ev,
  (VTBL_ENTRY)&_ZN6S190C53v86Ev,
  (VTBL_ENTRY)&_ZN6S190C53v87Ev,
  (VTBL_ENTRY)&_ZN6S190C53v88Ev,
  (VTBL_ENTRY)&_ZN6S190C53v89Ev,
  (VTBL_ENTRY)&_ZN6S190C53v90Ev,
  (VTBL_ENTRY)&_ZN6S190C53v91Ev,
  (VTBL_ENTRY)&_ZN6S190C53v92Ev,
  (VTBL_ENTRY)&_ZN6S190C53v93Ev,
  (VTBL_ENTRY)&_ZN6S190C53v94Ev,
  (VTBL_ENTRY)&_ZN6S190C43v95Ev,
  (VTBL_ENTRY)&_ZN6S190C43v96Ev,
  (VTBL_ENTRY)&_ZN6S190C43v97Ev,
  (VTBL_ENTRY)&_ZN6S190C43v98Ev,
  (VTBL_ENTRY)&_ZN6S190C43v99Ev,
  (VTBL_ENTRY)&_ZN6S190C44v100Ev,
  (VTBL_ENTRY)&_ZN6S190C44v101Ev,
  (VTBL_ENTRY)&_ZN6S190C44v102Ev,
  (VTBL_ENTRY)&_ZN6S190C44v103Ev,
  (VTBL_ENTRY)&_ZN6S190C44v104Ev,
  (VTBL_ENTRY)&_ZN6S190C44v105Ev,
  (VTBL_ENTRY)&_ZN6S190C44v106Ev,
  (VTBL_ENTRY)&_ZN6S190C44v107Ev,
  (VTBL_ENTRY)&_ZN6S190C44v108Ev,
  (VTBL_ENTRY)&_ZN6S190C44v109Ev,
  (VTBL_ENTRY)&_ZN6S190C44v110Ev,
  (VTBL_ENTRY)&_ZN6S190C44v111Ev,
  (VTBL_ENTRY)&_ZN6S190C44v112Ev,
  (VTBL_ENTRY)&_ZN6S190C34v113Ev,
  (VTBL_ENTRY)&_ZN6S190C34v114Ev,
  (VTBL_ENTRY)&_ZN6S190C34v115Ev,
  (VTBL_ENTRY)&_ZN6S190C34v116Ev,
  (VTBL_ENTRY)&_ZN6S190C34v117Ev,
  (VTBL_ENTRY)&_ZN6S190C34v118Ev,
  (VTBL_ENTRY)&_ZN6S190C34v119Ev,
};
extern VTBL_ENTRY _ZTI6S190C3[];
extern  VTBL_ENTRY _ZTV6S190C3[];
Class_Descriptor cd_S190C3 = {  "S190C3", // class name
  bases_S190C3, 3,
  &(vtc_S190C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,208), // object size
  NSPAIRA(_ZTI6S190C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S190C3),120, //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  S190C2  : S190C3 {
  unsigned int s190c2f0:1;
  ::S165C27 s190c2f1;
  ::S165C25 s190c2f2;
  ::S165C20 s190c2f3;
  virtual  ~S190C2(); // _ZN6S190C2D1Ev
  virtual void  v120(); // _ZN6S190C24v120Ev
  virtual void  v121(); // _ZN6S190C24v121Ev
  virtual void  v122(); // _ZN6S190C24v122Ev
  virtual void  v123(); // _ZN6S190C24v123Ev
  virtual void  v124(); // _ZN6S190C24v124Ev
  virtual void  v125(); // _ZN6S190C24v125Ev
  S190C2(); // tgen
};
//SIG(-1 S190C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v93 v94 v95 v96 v97 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC15{ BC16{ BC9}} Fi:1} vd v116 v117 v118 v119 v120 v121 v122 Fi[3]} vd v1 v2 v3 v4 v5 v6 Fi:1 FC17{ BC18{ BC9}} FC19{ BC20{ BC9}} FC21{ BC22{ BC9}}}


 S190C2 ::~S190C2(){ note_dtor("S190C2", this);}
void  S190C2 ::v120(){vfunc_called(this, "_ZN6S190C24v120Ev");}
void  S190C2 ::v121(){vfunc_called(this, "_ZN6S190C24v121Ev");}
void  S190C2 ::v122(){vfunc_called(this, "_ZN6S190C24v122Ev");}
void  S190C2 ::v123(){vfunc_called(this, "_ZN6S190C24v123Ev");}
void  S190C2 ::v124(){vfunc_called(this, "_ZN6S190C24v124Ev");}
void  S190C2 ::v125(){vfunc_called(this, "_ZN6S190C24v125Ev");}
S190C2 ::S190C2(){ note_ctor("S190C2", this);} // tgen

static void Test_S190C2()
{
  extern Class_Descriptor cd_S190C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,63)];
    init_test(&cd_S190C2, buf);
    S190C2 *dp, &lv = *(dp=new (buf) S190C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,248), "sizeof(S190C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S190C2)");
    check_base_class_offset(lv, (S190C6*)(S190C5*)(S190C4*)(S190C3*), 0, "S190C2");
    check_base_class_offset(lv, (S190C5*)(S190C4*)(S190C3*), 0, "S190C2");
    check_base_class_offset(lv, (S190C4*)(S190C3*), 0, "S190C2");
    check_base_class_offset(lv, (S190C3*), 0, "S190C2");
    set_bf_and_test(lv, s190c2f0, ABISELECT(264,208), 0, 1, 1, "S190C2");
    check_field_offset(lv, s190c2f1, ABISELECT(272,212), "S190C2.s190c2f1");
    check_field_offset(lv, s190c2f2, ABISELECT(288,224), "S190C2.s190c2f2");
    check_field_offset(lv, s190c2f3, ABISELECT(304,236), "S190C2.s190c2f3");
    test_class_info(&lv, &cd_S190C2);
    dp->~S190C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS190C2(Test_S190C2, "S190C2", ABISELECT(320,248));

#else // __cplusplus

extern void _ZN6S190C2C1Ev();
extern void _ZN6S190C2D1Ev();
Name_Map name_map_S190C2[] = {
  NSPAIR(_ZN6S190C2C1Ev),
  NSPAIR(_ZN6S190C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S190C6;
extern VTBL_ENTRY _ZTI6S190C6[];
extern  VTBL_ENTRY _ZTV6S190C6[];
extern Class_Descriptor cd_S190C5;
extern VTBL_ENTRY _ZTI6S190C5[];
extern  VTBL_ENTRY _ZTV6S190C5[];
extern Class_Descriptor cd_S190C4;
extern VTBL_ENTRY _ZTI6S190C4[];
extern  VTBL_ENTRY _ZTV6S190C4[];
extern Class_Descriptor cd_S190C3;
extern VTBL_ENTRY _ZTI6S190C3[];
extern  VTBL_ENTRY _ZTV6S190C3[];
static Base_Class bases_S190C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S190C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S190C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S190C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S190C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S190C2[];
extern void _ZN6S190C2D1Ev();
extern void _ZN6S190C2D0Ev();
extern void _ZN6S190C62v4Ev();
extern void _ZN6S190C62v5Ev();
extern void _ZN6S190C62v6Ev();
extern void _ZN6S190C62v7Ev();
extern void _ZN6S190C62v8Ev();
extern void _ZN6S190C62v9Ev();
extern void _ZN6S190C63v10Ev();
extern void _ZN6S190C63v11Ev();
extern void _ZN6S190C63v12Ev();
extern void _ZN6S190C63v13Ev();
extern void _ZN6S190C63v14Ev();
extern void _ZN6S190C63v15Ev();
extern void _ZN6S190C63v16Ev();
extern void _ZN6S190C63v17Ev();
extern void _ZN6S190C63v18Ev();
extern void _ZN6S190C63v19Ev();
extern void _ZN6S190C63v20Ev();
extern void _ZN6S190C63v21Ev();
extern void _ZN6S190C63v22Ev();
extern void _ZN6S190C63v23Ev();
extern void _ZN6S190C63v24Ev();
extern void _ZN6S190C63v25Ev();
extern void _ZN6S190C63v26Ev();
extern void _ZN6S190C63v27Ev();
extern void _ZN6S190C63v28Ev();
extern void _ZN6S190C63v29Ev();
extern void _ZN6S190C63v30Ev();
extern void _ZN6S190C63v31Ev();
extern void _ZN6S190C63v32Ev();
extern void _ZN6S190C63v33Ev();
extern void _ZN6S190C63v34Ev();
extern void _ZN6S190C63v35Ev();
extern void _ZN6S190C63v36Ev();
extern void _ZN6S190C63v37Ev();
extern void _ZN6S190C63v38Ev();
extern void _ZN6S190C63v39Ev();
extern void _ZN6S190C63v40Ev();
extern void _ZN6S190C63v41Ev();
extern void _ZN6S190C63v42Ev();
extern void _ZN6S190C63v43Ev();
extern void _ZN6S190C63v44Ev();
extern void _ZN6S190C63v45Ev();
extern void _ZN6S190C63v46Ev();
extern void _ZN6S190C63v47Ev();
extern void _ZN6S190C63v48Ev();
extern void _ZN6S190C63v49Ev();
extern void _ZN6S190C63v50Ev();
extern void _ZN6S190C63v51Ev();
extern void _ZN6S190C63v52Ev();
extern void _ZN6S190C63v53Ev();
extern void _ZN6S190C63v54Ev();
extern void _ZN6S190C63v55Ev();
extern void _ZN6S190C63v56Ev();
extern void _ZN6S190C63v57Ev();
extern void _ZN6S190C63v58Ev();
extern void _ZN6S190C63v59Ev();
extern void _ZN6S190C63v60Ev();
extern void _ZN6S190C63v61Ev();
extern void _ZN6S190C63v62Ev();
extern void _ZN6S190C63v63Ev();
extern void _ZN6S190C63v64Ev();
extern void _ZN6S190C63v65Ev();
extern void _ZN6S190C63v66Ev();
extern void _ZN6S190C63v67Ev();
extern void _ZN6S190C53v68Ev();
extern void _ZN6S190C53v69Ev();
extern void _ZN6S190C53v70Ev();
extern void _ZN6S190C53v71Ev();
extern void _ZN6S190C53v72Ev();
extern void _ZN6S190C53v73Ev();
extern void _ZN6S190C53v74Ev();
extern void _ZN6S190C53v75Ev();
extern void _ZN6S190C53v76Ev();
extern void _ZN6S190C53v77Ev();
extern void _ZN6S190C53v78Ev();
extern void _ZN6S190C53v79Ev();
extern void _ZN6S190C53v80Ev();
extern void _ZN6S190C53v81Ev();
extern void _ZN6S190C53v82Ev();
extern void _ZN6S190C53v83Ev();
extern void _ZN6S190C53v84Ev();
extern void _ZN6S190C53v85Ev();
extern void _ZN6S190C53v86Ev();
extern void _ZN6S190C53v87Ev();
extern void _ZN6S190C53v88Ev();
extern void _ZN6S190C53v89Ev();
extern void _ZN6S190C53v90Ev();
extern void _ZN6S190C53v91Ev();
extern void _ZN6S190C53v92Ev();
extern void _ZN6S190C53v93Ev();
extern void _ZN6S190C53v94Ev();
extern void _ZN6S190C43v95Ev();
extern void _ZN6S190C43v96Ev();
extern void _ZN6S190C43v97Ev();
extern void _ZN6S190C43v98Ev();
extern void _ZN6S190C43v99Ev();
extern void _ZN6S190C44v100Ev();
extern void _ZN6S190C44v101Ev();
extern void _ZN6S190C44v102Ev();
extern void _ZN6S190C44v103Ev();
extern void _ZN6S190C44v104Ev();
extern void _ZN6S190C44v105Ev();
extern void _ZN6S190C44v106Ev();
extern void _ZN6S190C44v107Ev();
extern void _ZN6S190C44v108Ev();
extern void _ZN6S190C44v109Ev();
extern void _ZN6S190C44v110Ev();
extern void _ZN6S190C44v111Ev();
extern void _ZN6S190C44v112Ev();
extern void _ZN6S190C34v113Ev();
extern void _ZN6S190C34v114Ev();
extern void _ZN6S190C34v115Ev();
extern void _ZN6S190C34v116Ev();
extern void _ZN6S190C34v117Ev();
extern void _ZN6S190C34v118Ev();
extern void _ZN6S190C34v119Ev();
extern void _ZN6S190C24v120Ev();
extern void _ZN6S190C24v121Ev();
extern void _ZN6S190C24v122Ev();
extern void _ZN6S190C24v123Ev();
extern void _ZN6S190C24v124Ev();
extern void _ZN6S190C24v125Ev();
static  VTBL_ENTRY vtc_S190C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S190C2[0]),
  (VTBL_ENTRY)&_ZN6S190C2D1Ev,
  (VTBL_ENTRY)&_ZN6S190C2D0Ev,
  (VTBL_ENTRY)&_ZN6S190C62v4Ev,
  (VTBL_ENTRY)&_ZN6S190C62v5Ev,
  (VTBL_ENTRY)&_ZN6S190C62v6Ev,
  (VTBL_ENTRY)&_ZN6S190C62v7Ev,
  (VTBL_ENTRY)&_ZN6S190C62v8Ev,
  (VTBL_ENTRY)&_ZN6S190C62v9Ev,
  (VTBL_ENTRY)&_ZN6S190C63v10Ev,
  (VTBL_ENTRY)&_ZN6S190C63v11Ev,
  (VTBL_ENTRY)&_ZN6S190C63v12Ev,
  (VTBL_ENTRY)&_ZN6S190C63v13Ev,
  (VTBL_ENTRY)&_ZN6S190C63v14Ev,
  (VTBL_ENTRY)&_ZN6S190C63v15Ev,
  (VTBL_ENTRY)&_ZN6S190C63v16Ev,
  (VTBL_ENTRY)&_ZN6S190C63v17Ev,
  (VTBL_ENTRY)&_ZN6S190C63v18Ev,
  (VTBL_ENTRY)&_ZN6S190C63v19Ev,
  (VTBL_ENTRY)&_ZN6S190C63v20Ev,
  (VTBL_ENTRY)&_ZN6S190C63v21Ev,
  (VTBL_ENTRY)&_ZN6S190C63v22Ev,
  (VTBL_ENTRY)&_ZN6S190C63v23Ev,
  (VTBL_ENTRY)&_ZN6S190C63v24Ev,
  (VTBL_ENTRY)&_ZN6S190C63v25Ev,
  (VTBL_ENTRY)&_ZN6S190C63v26Ev,
  (VTBL_ENTRY)&_ZN6S190C63v27Ev,
  (VTBL_ENTRY)&_ZN6S190C63v28Ev,
  (VTBL_ENTRY)&_ZN6S190C63v29Ev,
  (VTBL_ENTRY)&_ZN6S190C63v30Ev,
  (VTBL_ENTRY)&_ZN6S190C63v31Ev,
  (VTBL_ENTRY)&_ZN6S190C63v32Ev,
  (VTBL_ENTRY)&_ZN6S190C63v33Ev,
  (VTBL_ENTRY)&_ZN6S190C63v34Ev,
  (VTBL_ENTRY)&_ZN6S190C63v35Ev,
  (VTBL_ENTRY)&_ZN6S190C63v36Ev,
  (VTBL_ENTRY)&_ZN6S190C63v37Ev,
  (VTBL_ENTRY)&_ZN6S190C63v38Ev,
  (VTBL_ENTRY)&_ZN6S190C63v39Ev,
  (VTBL_ENTRY)&_ZN6S190C63v40Ev,
  (VTBL_ENTRY)&_ZN6S190C63v41Ev,
  (VTBL_ENTRY)&_ZN6S190C63v42Ev,
  (VTBL_ENTRY)&_ZN6S190C63v43Ev,
  (VTBL_ENTRY)&_ZN6S190C63v44Ev,
  (VTBL_ENTRY)&_ZN6S190C63v45Ev,
  (VTBL_ENTRY)&_ZN6S190C63v46Ev,
  (VTBL_ENTRY)&_ZN6S190C63v47Ev,
  (VTBL_ENTRY)&_ZN6S190C63v48Ev,
  (VTBL_ENTRY)&_ZN6S190C63v49Ev,
  (VTBL_ENTRY)&_ZN6S190C63v50Ev,
  (VTBL_ENTRY)&_ZN6S190C63v51Ev,
  (VTBL_ENTRY)&_ZN6S190C63v52Ev,
  (VTBL_ENTRY)&_ZN6S190C63v53Ev,
  (VTBL_ENTRY)&_ZN6S190C63v54Ev,
  (VTBL_ENTRY)&_ZN6S190C63v55Ev,
  (VTBL_ENTRY)&_ZN6S190C63v56Ev,
  (VTBL_ENTRY)&_ZN6S190C63v57Ev,
  (VTBL_ENTRY)&_ZN6S190C63v58Ev,
  (VTBL_ENTRY)&_ZN6S190C63v59Ev,
  (VTBL_ENTRY)&_ZN6S190C63v60Ev,
  (VTBL_ENTRY)&_ZN6S190C63v61Ev,
  (VTBL_ENTRY)&_ZN6S190C63v62Ev,
  (VTBL_ENTRY)&_ZN6S190C63v63Ev,
  (VTBL_ENTRY)&_ZN6S190C63v64Ev,
  (VTBL_ENTRY)&_ZN6S190C63v65Ev,
  (VTBL_ENTRY)&_ZN6S190C63v66Ev,
  (VTBL_ENTRY)&_ZN6S190C63v67Ev,
  (VTBL_ENTRY)&_ZN6S190C53v68Ev,
  (VTBL_ENTRY)&_ZN6S190C53v69Ev,
  (VTBL_ENTRY)&_ZN6S190C53v70Ev,
  (VTBL_ENTRY)&_ZN6S190C53v71Ev,
  (VTBL_ENTRY)&_ZN6S190C53v72Ev,
  (VTBL_ENTRY)&_ZN6S190C53v73Ev,
  (VTBL_ENTRY)&_ZN6S190C53v74Ev,
  (VTBL_ENTRY)&_ZN6S190C53v75Ev,
  (VTBL_ENTRY)&_ZN6S190C53v76Ev,
  (VTBL_ENTRY)&_ZN6S190C53v77Ev,
  (VTBL_ENTRY)&_ZN6S190C53v78Ev,
  (VTBL_ENTRY)&_ZN6S190C53v79Ev,
  (VTBL_ENTRY)&_ZN6S190C53v80Ev,
  (VTBL_ENTRY)&_ZN6S190C53v81Ev,
  (VTBL_ENTRY)&_ZN6S190C53v82Ev,
  (VTBL_ENTRY)&_ZN6S190C53v83Ev,
  (VTBL_ENTRY)&_ZN6S190C53v84Ev,
  (VTBL_ENTRY)&_ZN6S190C53v85Ev,
  (VTBL_ENTRY)&_ZN6S190C53v86Ev,
  (VTBL_ENTRY)&_ZN6S190C53v87Ev,
  (VTBL_ENTRY)&_ZN6S190C53v88Ev,
  (VTBL_ENTRY)&_ZN6S190C53v89Ev,
  (VTBL_ENTRY)&_ZN6S190C53v90Ev,
  (VTBL_ENTRY)&_ZN6S190C53v91Ev,
  (VTBL_ENTRY)&_ZN6S190C53v92Ev,
  (VTBL_ENTRY)&_ZN6S190C53v93Ev,
  (VTBL_ENTRY)&_ZN6S190C53v94Ev,
  (VTBL_ENTRY)&_ZN6S190C43v95Ev,
  (VTBL_ENTRY)&_ZN6S190C43v96Ev,
  (VTBL_ENTRY)&_ZN6S190C43v97Ev,
  (VTBL_ENTRY)&_ZN6S190C43v98Ev,
  (VTBL_ENTRY)&_ZN6S190C43v99Ev,
  (VTBL_ENTRY)&_ZN6S190C44v100Ev,
  (VTBL_ENTRY)&_ZN6S190C44v101Ev,
  (VTBL_ENTRY)&_ZN6S190C44v102Ev,
  (VTBL_ENTRY)&_ZN6S190C44v103Ev,
  (VTBL_ENTRY)&_ZN6S190C44v104Ev,
  (VTBL_ENTRY)&_ZN6S190C44v105Ev,
  (VTBL_ENTRY)&_ZN6S190C44v106Ev,
  (VTBL_ENTRY)&_ZN6S190C44v107Ev,
  (VTBL_ENTRY)&_ZN6S190C44v108Ev,
  (VTBL_ENTRY)&_ZN6S190C44v109Ev,
  (VTBL_ENTRY)&_ZN6S190C44v110Ev,
  (VTBL_ENTRY)&_ZN6S190C44v111Ev,
  (VTBL_ENTRY)&_ZN6S190C44v112Ev,
  (VTBL_ENTRY)&_ZN6S190C34v113Ev,
  (VTBL_ENTRY)&_ZN6S190C34v114Ev,
  (VTBL_ENTRY)&_ZN6S190C34v115Ev,
  (VTBL_ENTRY)&_ZN6S190C34v116Ev,
  (VTBL_ENTRY)&_ZN6S190C34v117Ev,
  (VTBL_ENTRY)&_ZN6S190C34v118Ev,
  (VTBL_ENTRY)&_ZN6S190C34v119Ev,
  (VTBL_ENTRY)&_ZN6S190C24v120Ev,
  (VTBL_ENTRY)&_ZN6S190C24v121Ev,
  (VTBL_ENTRY)&_ZN6S190C24v122Ev,
  (VTBL_ENTRY)&_ZN6S190C24v123Ev,
  (VTBL_ENTRY)&_ZN6S190C24v124Ev,
  (VTBL_ENTRY)&_ZN6S190C24v125Ev,
};
extern VTBL_ENTRY _ZTI6S190C2[];
extern  VTBL_ENTRY _ZTV6S190C2[];
Class_Descriptor cd_S190C2 = {  "S190C2", // class name
  bases_S190C2, 4,
  &(vtc_S190C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,248), // object size
  NSPAIRA(_ZTI6S190C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S190C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S190C1  : S190C2 {
  unsigned int s190c1f0:1;
  ::S615C17_nt s190c1f1;
  int s190c1f2;
  virtual  ~S190C1(); // _ZN6S190C1D1Ev
  virtual void  v1(); // _ZN6S190C12v1Ev
  virtual void  v2(); // _ZN6S190C12v2Ev
  virtual void  v3(); // _ZN6S190C12v3Ev
  S190C1(); // tgen
};
//SIG(1 S190C1) 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 v90 v91 v92 v93 v94 Fp FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC7 FC11{ BC12{ BC10}} FC13{ m FC14{ m Fi[4]} FC15{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 FC16{ BC17{ BC10}} Fi:1} vd v113 v114 v115 v116 v117 v118 v119 Fi[3]} vd v120 v121 v122 v123 v124 v125 Fi:1 FC18{ BC19{ BC10}} FC20{ BC21{ BC10}} FC22{ BC23{ BC10}}} vd v1 v2 v3 Fi:1 FC7 Fi}


 S190C1 ::~S190C1(){ note_dtor("S190C1", this);}
void  S190C1 ::v1(){vfunc_called(this, "_ZN6S190C12v1Ev");}
void  S190C1 ::v2(){vfunc_called(this, "_ZN6S190C12v2Ev");}
void  S190C1 ::v3(){vfunc_called(this, "_ZN6S190C12v3Ev");}
S190C1 ::S190C1(){ note_ctor("S190C1", this);} // tgen

static void Test_S190C1()
{
  extern Class_Descriptor cd_S190C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,67)];
    init_test(&cd_S190C1, buf);
    S190C1 *dp, &lv = *(dp=new (buf) S190C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,264), "sizeof(S190C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S190C1)");
    check_base_class_offset(lv, (S190C6*)(S190C5*)(S190C4*)(S190C3*)(S190C2*), 0, "S190C1");
    check_base_class_offset(lv, (S190C5*)(S190C4*)(S190C3*)(S190C2*), 0, "S190C1");
    check_base_class_offset(lv, (S190C4*)(S190C3*)(S190C2*), 0, "S190C1");
    check_base_class_offset(lv, (S190C3*)(S190C2*), 0, "S190C1");
    check_base_class_offset(lv, (S190C2*), 0, "S190C1");
    set_bf_and_test(lv, s190c1f0, ABISELECT(320,248), 0, 1, 1, "S190C1");
    check_field_offset(lv, s190c1f1, ABISELECT(324,252), "S190C1.s190c1f1");
    check_field_offset(lv, s190c1f2, ABISELECT(332,260), "S190C1.s190c1f2");
    test_class_info(&lv, &cd_S190C1);
    dp->~S190C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS190C1(Test_S190C1, "S190C1", ABISELECT(336,264));

#else // __cplusplus

extern void _ZN6S190C1C1Ev();
extern void _ZN6S190C1D1Ev();
Name_Map name_map_S190C1[] = {
  NSPAIR(_ZN6S190C1C1Ev),
  NSPAIR(_ZN6S190C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S190C6;
extern VTBL_ENTRY _ZTI6S190C6[];
extern  VTBL_ENTRY _ZTV6S190C6[];
extern Class_Descriptor cd_S190C5;
extern VTBL_ENTRY _ZTI6S190C5[];
extern  VTBL_ENTRY _ZTV6S190C5[];
extern Class_Descriptor cd_S190C4;
extern VTBL_ENTRY _ZTI6S190C4[];
extern  VTBL_ENTRY _ZTV6S190C4[];
extern Class_Descriptor cd_S190C3;
extern VTBL_ENTRY _ZTI6S190C3[];
extern  VTBL_ENTRY _ZTV6S190C3[];
extern Class_Descriptor cd_S190C2;
extern VTBL_ENTRY _ZTI6S190C2[];
extern  VTBL_ENTRY _ZTV6S190C2[];
static Base_Class bases_S190C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S190C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S190C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S190C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S190C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S190C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S190C1[];
extern void _ZN6S190C1D1Ev();
extern void _ZN6S190C1D0Ev();
extern void _ZN6S190C62v4Ev();
extern void _ZN6S190C62v5Ev();
extern void _ZN6S190C62v6Ev();
extern void _ZN6S190C62v7Ev();
extern void _ZN6S190C62v8Ev();
extern void _ZN6S190C62v9Ev();
extern void _ZN6S190C63v10Ev();
extern void _ZN6S190C63v11Ev();
extern void _ZN6S190C63v12Ev();
extern void _ZN6S190C63v13Ev();
extern void _ZN6S190C63v14Ev();
extern void _ZN6S190C63v15Ev();
extern void _ZN6S190C63v16Ev();
extern void _ZN6S190C63v17Ev();
extern void _ZN6S190C63v18Ev();
extern void _ZN6S190C63v19Ev();
extern void _ZN6S190C63v20Ev();
extern void _ZN6S190C63v21Ev();
extern void _ZN6S190C63v22Ev();
extern void _ZN6S190C63v23Ev();
extern void _ZN6S190C63v24Ev();
extern void _ZN6S190C63v25Ev();
extern void _ZN6S190C63v26Ev();
extern void _ZN6S190C63v27Ev();
extern void _ZN6S190C63v28Ev();
extern void _ZN6S190C63v29Ev();
extern void _ZN6S190C63v30Ev();
extern void _ZN6S190C63v31Ev();
extern void _ZN6S190C63v32Ev();
extern void _ZN6S190C63v33Ev();
extern void _ZN6S190C63v34Ev();
extern void _ZN6S190C63v35Ev();
extern void _ZN6S190C63v36Ev();
extern void _ZN6S190C63v37Ev();
extern void _ZN6S190C63v38Ev();
extern void _ZN6S190C63v39Ev();
extern void _ZN6S190C63v40Ev();
extern void _ZN6S190C63v41Ev();
extern void _ZN6S190C63v42Ev();
extern void _ZN6S190C63v43Ev();
extern void _ZN6S190C63v44Ev();
extern void _ZN6S190C63v45Ev();
extern void _ZN6S190C63v46Ev();
extern void _ZN6S190C63v47Ev();
extern void _ZN6S190C63v48Ev();
extern void _ZN6S190C63v49Ev();
extern void _ZN6S190C63v50Ev();
extern void _ZN6S190C63v51Ev();
extern void _ZN6S190C63v52Ev();
extern void _ZN6S190C63v53Ev();
extern void _ZN6S190C63v54Ev();
extern void _ZN6S190C63v55Ev();
extern void _ZN6S190C63v56Ev();
extern void _ZN6S190C63v57Ev();
extern void _ZN6S190C63v58Ev();
extern void _ZN6S190C63v59Ev();
extern void _ZN6S190C63v60Ev();
extern void _ZN6S190C63v61Ev();
extern void _ZN6S190C63v62Ev();
extern void _ZN6S190C63v63Ev();
extern void _ZN6S190C63v64Ev();
extern void _ZN6S190C63v65Ev();
extern void _ZN6S190C63v66Ev();
extern void _ZN6S190C63v67Ev();
extern void _ZN6S190C53v68Ev();
extern void _ZN6S190C53v69Ev();
extern void _ZN6S190C53v70Ev();
extern void _ZN6S190C53v71Ev();
extern void _ZN6S190C53v72Ev();
extern void _ZN6S190C53v73Ev();
extern void _ZN6S190C53v74Ev();
extern void _ZN6S190C53v75Ev();
extern void _ZN6S190C53v76Ev();
extern void _ZN6S190C53v77Ev();
extern void _ZN6S190C53v78Ev();
extern void _ZN6S190C53v79Ev();
extern void _ZN6S190C53v80Ev();
extern void _ZN6S190C53v81Ev();
extern void _ZN6S190C53v82Ev();
extern void _ZN6S190C53v83Ev();
extern void _ZN6S190C53v84Ev();
extern void _ZN6S190C53v85Ev();
extern void _ZN6S190C53v86Ev();
extern void _ZN6S190C53v87Ev();
extern void _ZN6S190C53v88Ev();
extern void _ZN6S190C53v89Ev();
extern void _ZN6S190C53v90Ev();
extern void _ZN6S190C53v91Ev();
extern void _ZN6S190C53v92Ev();
extern void _ZN6S190C53v93Ev();
extern void _ZN6S190C53v94Ev();
extern void _ZN6S190C43v95Ev();
extern void _ZN6S190C43v96Ev();
extern void _ZN6S190C43v97Ev();
extern void _ZN6S190C43v98Ev();
extern void _ZN6S190C43v99Ev();
extern void _ZN6S190C44v100Ev();
extern void _ZN6S190C44v101Ev();
extern void _ZN6S190C44v102Ev();
extern void _ZN6S190C44v103Ev();
extern void _ZN6S190C44v104Ev();
extern void _ZN6S190C44v105Ev();
extern void _ZN6S190C44v106Ev();
extern void _ZN6S190C44v107Ev();
extern void _ZN6S190C44v108Ev();
extern void _ZN6S190C44v109Ev();
extern void _ZN6S190C44v110Ev();
extern void _ZN6S190C44v111Ev();
extern void _ZN6S190C44v112Ev();
extern void _ZN6S190C34v113Ev();
extern void _ZN6S190C34v114Ev();
extern void _ZN6S190C34v115Ev();
extern void _ZN6S190C34v116Ev();
extern void _ZN6S190C34v117Ev();
extern void _ZN6S190C34v118Ev();
extern void _ZN6S190C34v119Ev();
extern void _ZN6S190C24v120Ev();
extern void _ZN6S190C24v121Ev();
extern void _ZN6S190C24v122Ev();
extern void _ZN6S190C24v123Ev();
extern void _ZN6S190C24v124Ev();
extern void _ZN6S190C24v125Ev();
extern void _ZN6S190C12v1Ev();
extern void _ZN6S190C12v2Ev();
extern void _ZN6S190C12v3Ev();
static  VTBL_ENTRY vtc_S190C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S190C1[0]),
  (VTBL_ENTRY)&_ZN6S190C1D1Ev,
  (VTBL_ENTRY)&_ZN6S190C1D0Ev,
  (VTBL_ENTRY)&_ZN6S190C62v4Ev,
  (VTBL_ENTRY)&_ZN6S190C62v5Ev,
  (VTBL_ENTRY)&_ZN6S190C62v6Ev,
  (VTBL_ENTRY)&_ZN6S190C62v7Ev,
  (VTBL_ENTRY)&_ZN6S190C62v8Ev,
  (VTBL_ENTRY)&_ZN6S190C62v9Ev,
  (VTBL_ENTRY)&_ZN6S190C63v10Ev,
  (VTBL_ENTRY)&_ZN6S190C63v11Ev,
  (VTBL_ENTRY)&_ZN6S190C63v12Ev,
  (VTBL_ENTRY)&_ZN6S190C63v13Ev,
  (VTBL_ENTRY)&_ZN6S190C63v14Ev,
  (VTBL_ENTRY)&_ZN6S190C63v15Ev,
  (VTBL_ENTRY)&_ZN6S190C63v16Ev,
  (VTBL_ENTRY)&_ZN6S190C63v17Ev,
  (VTBL_ENTRY)&_ZN6S190C63v18Ev,
  (VTBL_ENTRY)&_ZN6S190C63v19Ev,
  (VTBL_ENTRY)&_ZN6S190C63v20Ev,
  (VTBL_ENTRY)&_ZN6S190C63v21Ev,
  (VTBL_ENTRY)&_ZN6S190C63v22Ev,
  (VTBL_ENTRY)&_ZN6S190C63v23Ev,
  (VTBL_ENTRY)&_ZN6S190C63v24Ev,
  (VTBL_ENTRY)&_ZN6S190C63v25Ev,
  (VTBL_ENTRY)&_ZN6S190C63v26Ev,
  (VTBL_ENTRY)&_ZN6S190C63v27Ev,
  (VTBL_ENTRY)&_ZN6S190C63v28Ev,
  (VTBL_ENTRY)&_ZN6S190C63v29Ev,
  (VTBL_ENTRY)&_ZN6S190C63v30Ev,
  (VTBL_ENTRY)&_ZN6S190C63v31Ev,
  (VTBL_ENTRY)&_ZN6S190C63v32Ev,
  (VTBL_ENTRY)&_ZN6S190C63v33Ev,
  (VTBL_ENTRY)&_ZN6S190C63v34Ev,
  (VTBL_ENTRY)&_ZN6S190C63v35Ev,
  (VTBL_ENTRY)&_ZN6S190C63v36Ev,
  (VTBL_ENTRY)&_ZN6S190C63v37Ev,
  (VTBL_ENTRY)&_ZN6S190C63v38Ev,
  (VTBL_ENTRY)&_ZN6S190C63v39Ev,
  (VTBL_ENTRY)&_ZN6S190C63v40Ev,
  (VTBL_ENTRY)&_ZN6S190C63v41Ev,
  (VTBL_ENTRY)&_ZN6S190C63v42Ev,
  (VTBL_ENTRY)&_ZN6S190C63v43Ev,
  (VTBL_ENTRY)&_ZN6S190C63v44Ev,
  (VTBL_ENTRY)&_ZN6S190C63v45Ev,
  (VTBL_ENTRY)&_ZN6S190C63v46Ev,
  (VTBL_ENTRY)&_ZN6S190C63v47Ev,
  (VTBL_ENTRY)&_ZN6S190C63v48Ev,
  (VTBL_ENTRY)&_ZN6S190C63v49Ev,
  (VTBL_ENTRY)&_ZN6S190C63v50Ev,
  (VTBL_ENTRY)&_ZN6S190C63v51Ev,
  (VTBL_ENTRY)&_ZN6S190C63v52Ev,
  (VTBL_ENTRY)&_ZN6S190C63v53Ev,
  (VTBL_ENTRY)&_ZN6S190C63v54Ev,
  (VTBL_ENTRY)&_ZN6S190C63v55Ev,
  (VTBL_ENTRY)&_ZN6S190C63v56Ev,
  (VTBL_ENTRY)&_ZN6S190C63v57Ev,
  (VTBL_ENTRY)&_ZN6S190C63v58Ev,
  (VTBL_ENTRY)&_ZN6S190C63v59Ev,
  (VTBL_ENTRY)&_ZN6S190C63v60Ev,
  (VTBL_ENTRY)&_ZN6S190C63v61Ev,
  (VTBL_ENTRY)&_ZN6S190C63v62Ev,
  (VTBL_ENTRY)&_ZN6S190C63v63Ev,
  (VTBL_ENTRY)&_ZN6S190C63v64Ev,
  (VTBL_ENTRY)&_ZN6S190C63v65Ev,
  (VTBL_ENTRY)&_ZN6S190C63v66Ev,
  (VTBL_ENTRY)&_ZN6S190C63v67Ev,
  (VTBL_ENTRY)&_ZN6S190C53v68Ev,
  (VTBL_ENTRY)&_ZN6S190C53v69Ev,
  (VTBL_ENTRY)&_ZN6S190C53v70Ev,
  (VTBL_ENTRY)&_ZN6S190C53v71Ev,
  (VTBL_ENTRY)&_ZN6S190C53v72Ev,
  (VTBL_ENTRY)&_ZN6S190C53v73Ev,
  (VTBL_ENTRY)&_ZN6S190C53v74Ev,
  (VTBL_ENTRY)&_ZN6S190C53v75Ev,
  (VTBL_ENTRY)&_ZN6S190C53v76Ev,
  (VTBL_ENTRY)&_ZN6S190C53v77Ev,
  (VTBL_ENTRY)&_ZN6S190C53v78Ev,
  (VTBL_ENTRY)&_ZN6S190C53v79Ev,
  (VTBL_ENTRY)&_ZN6S190C53v80Ev,
  (VTBL_ENTRY)&_ZN6S190C53v81Ev,
  (VTBL_ENTRY)&_ZN6S190C53v82Ev,
  (VTBL_ENTRY)&_ZN6S190C53v83Ev,
  (VTBL_ENTRY)&_ZN6S190C53v84Ev,
  (VTBL_ENTRY)&_ZN6S190C53v85Ev,
  (VTBL_ENTRY)&_ZN6S190C53v86Ev,
  (VTBL_ENTRY)&_ZN6S190C53v87Ev,
  (VTBL_ENTRY)&_ZN6S190C53v88Ev,
  (VTBL_ENTRY)&_ZN6S190C53v89Ev,
  (VTBL_ENTRY)&_ZN6S190C53v90Ev,
  (VTBL_ENTRY)&_ZN6S190C53v91Ev,
  (VTBL_ENTRY)&_ZN6S190C53v92Ev,
  (VTBL_ENTRY)&_ZN6S190C53v93Ev,
  (VTBL_ENTRY)&_ZN6S190C53v94Ev,
  (VTBL_ENTRY)&_ZN6S190C43v95Ev,
  (VTBL_ENTRY)&_ZN6S190C43v96Ev,
  (VTBL_ENTRY)&_ZN6S190C43v97Ev,
  (VTBL_ENTRY)&_ZN6S190C43v98Ev,
  (VTBL_ENTRY)&_ZN6S190C43v99Ev,
  (VTBL_ENTRY)&_ZN6S190C44v100Ev,
  (VTBL_ENTRY)&_ZN6S190C44v101Ev,
  (VTBL_ENTRY)&_ZN6S190C44v102Ev,
  (VTBL_ENTRY)&_ZN6S190C44v103Ev,
  (VTBL_ENTRY)&_ZN6S190C44v104Ev,
  (VTBL_ENTRY)&_ZN6S190C44v105Ev,
  (VTBL_ENTRY)&_ZN6S190C44v106Ev,
  (VTBL_ENTRY)&_ZN6S190C44v107Ev,
  (VTBL_ENTRY)&_ZN6S190C44v108Ev,
  (VTBL_ENTRY)&_ZN6S190C44v109Ev,
  (VTBL_ENTRY)&_ZN6S190C44v110Ev,
  (VTBL_ENTRY)&_ZN6S190C44v111Ev,
  (VTBL_ENTRY)&_ZN6S190C44v112Ev,
  (VTBL_ENTRY)&_ZN6S190C34v113Ev,
  (VTBL_ENTRY)&_ZN6S190C34v114Ev,
  (VTBL_ENTRY)&_ZN6S190C34v115Ev,
  (VTBL_ENTRY)&_ZN6S190C34v116Ev,
  (VTBL_ENTRY)&_ZN6S190C34v117Ev,
  (VTBL_ENTRY)&_ZN6S190C34v118Ev,
  (VTBL_ENTRY)&_ZN6S190C34v119Ev,
  (VTBL_ENTRY)&_ZN6S190C24v120Ev,
  (VTBL_ENTRY)&_ZN6S190C24v121Ev,
  (VTBL_ENTRY)&_ZN6S190C24v122Ev,
  (VTBL_ENTRY)&_ZN6S190C24v123Ev,
  (VTBL_ENTRY)&_ZN6S190C24v124Ev,
  (VTBL_ENTRY)&_ZN6S190C24v125Ev,
  (VTBL_ENTRY)&_ZN6S190C12v1Ev,
  (VTBL_ENTRY)&_ZN6S190C12v2Ev,
  (VTBL_ENTRY)&_ZN6S190C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S190C1[];
extern  VTBL_ENTRY _ZTV6S190C1[];
Class_Descriptor cd_S190C1 = {  "S190C1", // class name
  bases_S190C1, 5,
  &(vtc_S190C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,264), // object size
  NSPAIRA(_ZTI6S190C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S190C1),129, //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  S234C6  {
  int s234c6f0;
  __tsi64 s234c6f1;
  void *s234c6f2[4];
  int s234c6f3[2];
  void *s234c6f4;
  ::S615C17_nt s234c6f5;
  void *s234c6f6[2];
  virtual  ~S234C6(); // _ZN6S234C6D1Ev
  virtual void  v5(); // _ZN6S234C62v5Ev
  virtual void  v6(); // _ZN6S234C62v6Ev
  virtual void  v7(); // _ZN6S234C62v7Ev
  virtual void  v8(); // _ZN6S234C62v8Ev
  virtual void  v9(); // _ZN6S234C62v9Ev
  virtual void  v10(); // _ZN6S234C63v10Ev
  virtual void  v11(); // _ZN6S234C63v11Ev
  virtual void  v12(); // _ZN6S234C63v12Ev
  virtual void  v13(); // _ZN6S234C63v13Ev
  virtual void  v14(); // _ZN6S234C63v14Ev
  virtual void  v15(); // _ZN6S234C63v15Ev
  virtual void  v16(); // _ZN6S234C63v16Ev
  virtual void  v17(); // _ZN6S234C63v17Ev
  virtual void  v18(); // _ZN6S234C63v18Ev
  virtual void  v19(); // _ZN6S234C63v19Ev
  virtual void  v20(); // _ZN6S234C63v20Ev
  virtual void  v21(); // _ZN6S234C63v21Ev
  virtual void  v22(); // _ZN6S234C63v22Ev
  virtual void  v23(); // _ZN6S234C63v23Ev
  virtual void  v24(); // _ZN6S234C63v24Ev
  virtual void  v25(); // _ZN6S234C63v25Ev
  virtual void  v26(); // _ZN6S234C63v26Ev
  virtual void  v27(); // _ZN6S234C63v27Ev
  virtual void  v28(); // _ZN6S234C63v28Ev
  virtual void  v29(); // _ZN6S234C63v29Ev
  virtual void  v30(); // _ZN6S234C63v30Ev
  virtual void  v31(); // _ZN6S234C63v31Ev
  virtual void  v32(); // _ZN6S234C63v32Ev
  virtual void  v33(); // _ZN6S234C63v33Ev
  virtual void  v34(); // _ZN6S234C63v34Ev
  virtual void  v35(); // _ZN6S234C63v35Ev
  virtual void  v36(); // _ZN6S234C63v36Ev
  virtual void  v37(); // _ZN6S234C63v37Ev
  virtual void  v38(); // _ZN6S234C63v38Ev
  virtual void  v39(); // _ZN6S234C63v39Ev
  virtual void  v40(); // _ZN6S234C63v40Ev
  virtual void  v41(); // _ZN6S234C63v41Ev
  virtual void  v42(); // _ZN6S234C63v42Ev
  virtual void  v43(); // _ZN6S234C63v43Ev
  virtual void  v44(); // _ZN6S234C63v44Ev
  virtual void  v45(); // _ZN6S234C63v45Ev
  virtual void  v46(); // _ZN6S234C63v46Ev
  virtual void  v47(); // _ZN6S234C63v47Ev
  virtual void  v48(); // _ZN6S234C63v48Ev
  virtual void  v49(); // _ZN6S234C63v49Ev
  virtual void  v50(); // _ZN6S234C63v50Ev
  virtual void  v51(); // _ZN6S234C63v51Ev
  virtual void  v52(); // _ZN6S234C63v52Ev
  virtual void  v53(); // _ZN6S234C63v53Ev
  virtual void  v54(); // _ZN6S234C63v54Ev
  virtual void  v55(); // _ZN6S234C63v55Ev
  virtual void  v56(); // _ZN6S234C63v56Ev
  virtual void  v57(); // _ZN6S234C63v57Ev
  virtual void  v58(); // _ZN6S234C63v58Ev
  virtual void  v59(); // _ZN6S234C63v59Ev
  virtual void  v60(); // _ZN6S234C63v60Ev
  virtual void  v61(); // _ZN6S234C63v61Ev
  virtual void  v62(); // _ZN6S234C63v62Ev
  virtual void  v63(); // _ZN6S234C63v63Ev
  virtual void  v64(); // _ZN6S234C63v64Ev
  virtual void  v65(); // _ZN6S234C63v65Ev
  virtual void  v66(); // _ZN6S234C63v66Ev
  virtual void  v67(); // _ZN6S234C63v67Ev
  virtual void  v68(); // _ZN6S234C63v68Ev
  S234C6(); // tgen
};
//SIG(-1 S234C6) 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]}


 S234C6 ::~S234C6(){ note_dtor("S234C6", this);}
void  S234C6 ::v5(){vfunc_called(this, "_ZN6S234C62v5Ev");}
void  S234C6 ::v6(){vfunc_called(this, "_ZN6S234C62v6Ev");}
void  S234C6 ::v7(){vfunc_called(this, "_ZN6S234C62v7Ev");}
void  S234C6 ::v8(){vfunc_called(this, "_ZN6S234C62v8Ev");}
void  S234C6 ::v9(){vfunc_called(this, "_ZN6S234C62v9Ev");}
void  S234C6 ::v10(){vfunc_called(this, "_ZN6S234C63v10Ev");}
void  S234C6 ::v11(){vfunc_called(this, "_ZN6S234C63v11Ev");}
void  S234C6 ::v12(){vfunc_called(this, "_ZN6S234C63v12Ev");}
void  S234C6 ::v13(){vfunc_called(this, "_ZN6S234C63v13Ev");}
void  S234C6 ::v14(){vfunc_called(this, "_ZN6S234C63v14Ev");}
void  S234C6 ::v15(){vfunc_called(this, "_ZN6S234C63v15Ev");}
void  S234C6 ::v16(){vfunc_called(this, "_ZN6S234C63v16Ev");}
void  S234C6 ::v17(){vfunc_called(this, "_ZN6S234C63v17Ev");}
void  S234C6 ::v18(){vfunc_called(this, "_ZN6S234C63v18Ev");}
void  S234C6 ::v19(){vfunc_called(this, "_ZN6S234C63v19Ev");}
void  S234C6 ::v20(){vfunc_called(this, "_ZN6S234C63v20Ev");}
void  S234C6 ::v21(){vfunc_called(this, "_ZN6S234C63v21Ev");}
void  S234C6 ::v22(){vfunc_called(this, "_ZN6S234C63v22Ev");}
void  S234C6 ::v23(){vfunc_called(this, "_ZN6S234C63v23Ev");}
void  S234C6 ::v24(){vfunc_called(this, "_ZN6S234C63v24Ev");}
void  S234C6 ::v25(){vfunc_called(this, "_ZN6S234C63v25Ev");}
void  S234C6 ::v26(){vfunc_called(this, "_ZN6S234C63v26Ev");}
void  S234C6 ::v27(){vfunc_called(this, "_ZN6S234C63v27Ev");}
void  S234C6 ::v28(){vfunc_called(this, "_ZN6S234C63v28Ev");}
void  S234C6 ::v29(){vfunc_called(this, "_ZN6S234C63v29Ev");}
void  S234C6 ::v30(){vfunc_called(this, "_ZN6S234C63v30Ev");}
void  S234C6 ::v31(){vfunc_called(this, "_ZN6S234C63v31Ev");}
void  S234C6 ::v32(){vfunc_called(this, "_ZN6S234C63v32Ev");}
void  S234C6 ::v33(){vfunc_called(this, "_ZN6S234C63v33Ev");}
void  S234C6 ::v34(){vfunc_called(this, "_ZN6S234C63v34Ev");}
void  S234C6 ::v35(){vfunc_called(this, "_ZN6S234C63v35Ev");}
void  S234C6 ::v36(){vfunc_called(this, "_ZN6S234C63v36Ev");}
void  S234C6 ::v37(){vfunc_called(this, "_ZN6S234C63v37Ev");}
void  S234C6 ::v38(){vfunc_called(this, "_ZN6S234C63v38Ev");}
void  S234C6 ::v39(){vfunc_called(this, "_ZN6S234C63v39Ev");}
void  S234C6 ::v40(){vfunc_called(this, "_ZN6S234C63v40Ev");}
void  S234C6 ::v41(){vfunc_called(this, "_ZN6S234C63v41Ev");}
void  S234C6 ::v42(){vfunc_called(this, "_ZN6S234C63v42Ev");}
void  S234C6 ::v43(){vfunc_called(this, "_ZN6S234C63v43Ev");}
void  S234C6 ::v44(){vfunc_called(this, "_ZN6S234C63v44Ev");}
void  S234C6 ::v45(){vfunc_called(this, "_ZN6S234C63v45Ev");}
void  S234C6 ::v46(){vfunc_called(this, "_ZN6S234C63v46Ev");}
void  S234C6 ::v47(){vfunc_called(this, "_ZN6S234C63v47Ev");}
void  S234C6 ::v48(){vfunc_called(this, "_ZN6S234C63v48Ev");}
void  S234C6 ::v49(){vfunc_called(this, "_ZN6S234C63v49Ev");}
void  S234C6 ::v50(){vfunc_called(this, "_ZN6S234C63v50Ev");}
void  S234C6 ::v51(){vfunc_called(this, "_ZN6S234C63v51Ev");}
void  S234C6 ::v52(){vfunc_called(this, "_ZN6S234C63v52Ev");}
void  S234C6 ::v53(){vfunc_called(this, "_ZN6S234C63v53Ev");}
void  S234C6 ::v54(){vfunc_called(this, "_ZN6S234C63v54Ev");}
void  S234C6 ::v55(){vfunc_called(this, "_ZN6S234C63v55Ev");}
void  S234C6 ::v56(){vfunc_called(this, "_ZN6S234C63v56Ev");}
void  S234C6 ::v57(){vfunc_called(this, "_ZN6S234C63v57Ev");}
void  S234C6 ::v58(){vfunc_called(this, "_ZN6S234C63v58Ev");}
void  S234C6 ::v59(){vfunc_called(this, "_ZN6S234C63v59Ev");}
void  S234C6 ::v60(){vfunc_called(this, "_ZN6S234C63v60Ev");}
void  S234C6 ::v61(){vfunc_called(this, "_ZN6S234C63v61Ev");}
void  S234C6 ::v62(){vfunc_called(this, "_ZN6S234C63v62Ev");}
void  S234C6 ::v63(){vfunc_called(this, "_ZN6S234C63v63Ev");}
void  S234C6 ::v64(){vfunc_called(this, "_ZN6S234C63v64Ev");}
void  S234C6 ::v65(){vfunc_called(this, "_ZN6S234C63v65Ev");}
void  S234C6 ::v66(){vfunc_called(this, "_ZN6S234C63v66Ev");}
void  S234C6 ::v67(){vfunc_called(this, "_ZN6S234C63v67Ev");}
void  S234C6 ::v68(){vfunc_called(this, "_ZN6S234C63v68Ev");}
S234C6 ::S234C6(){ note_ctor("S234C6", this);} // tgen

static void Test_S234C6()
{
  extern Class_Descriptor cd_S234C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S234C6, buf);
    S234C6 *dp, &lv = *(dp=new (buf) S234C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S234C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S234C6)");
    check_field_offset(lv, s234c6f0, ABISELECT(8,4), "S234C6.s234c6f0");
    check_field_offset(lv, s234c6f1, ABISELECT(16,8), "S234C6.s234c6f1");
    check_field_offset(lv, s234c6f2, ABISELECT(24,16), "S234C6.s234c6f2");
    check_field_offset(lv, s234c6f3, ABISELECT(56,32), "S234C6.s234c6f3");
    check_field_offset(lv, s234c6f4, ABISELECT(64,40), "S234C6.s234c6f4");
    check_field_offset(lv, s234c6f5, ABISELECT(72,44), "S234C6.s234c6f5");
    check_field_offset(lv, s234c6f6, ABISELECT(80,52), "S234C6.s234c6f6");
    test_class_info(&lv, &cd_S234C6);
    dp->~S234C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS234C6(Test_S234C6, "S234C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S234C6C1Ev();
extern void _ZN6S234C6D1Ev();
Name_Map name_map_S234C6[] = {
  NSPAIR(_ZN6S234C6C1Ev),
  NSPAIR(_ZN6S234C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S234C6[];
extern void _ZN6S234C6D1Ev();
extern void _ZN6S234C6D0Ev();
extern void _ZN6S234C62v5Ev();
extern void _ZN6S234C62v6Ev();
extern void _ZN6S234C62v7Ev();
extern void _ZN6S234C62v8Ev();
extern void _ZN6S234C62v9Ev();
extern void _ZN6S234C63v10Ev();
extern void _ZN6S234C63v11Ev();
extern void _ZN6S234C63v12Ev();
extern void _ZN6S234C63v13Ev();
extern void _ZN6S234C63v14Ev();
extern void _ZN6S234C63v15Ev();
extern void _ZN6S234C63v16Ev();
extern void _ZN6S234C63v17Ev();
extern void _ZN6S234C63v18Ev();
extern void _ZN6S234C63v19Ev();
extern void _ZN6S234C63v20Ev();
extern void _ZN6S234C63v21Ev();
extern void _ZN6S234C63v22Ev();
extern void _ZN6S234C63v23Ev();
extern void _ZN6S234C63v24Ev();
extern void _ZN6S234C63v25Ev();
extern void _ZN6S234C63v26Ev();
extern void _ZN6S234C63v27Ev();
extern void _ZN6S234C63v28Ev();
extern void _ZN6S234C63v29Ev();
extern void _ZN6S234C63v30Ev();
extern void _ZN6S234C63v31Ev();
extern void _ZN6S234C63v32Ev();
extern void _ZN6S234C63v33Ev();
extern void _ZN6S234C63v34Ev();
extern void _ZN6S234C63v35Ev();
extern void _ZN6S234C63v36Ev();
extern void _ZN6S234C63v37Ev();
extern void _ZN6S234C63v38Ev();
extern void _ZN6S234C63v39Ev();
extern void _ZN6S234C63v40Ev();
extern void _ZN6S234C63v41Ev();
extern void _ZN6S234C63v42Ev();
extern void _ZN6S234C63v43Ev();
extern void _ZN6S234C63v44Ev();
extern void _ZN6S234C63v45Ev();
extern void _ZN6S234C63v46Ev();
extern void _ZN6S234C63v47Ev();
extern void _ZN6S234C63v48Ev();
extern void _ZN6S234C63v49Ev();
extern void _ZN6S234C63v50Ev();
extern void _ZN6S234C63v51Ev();
extern void _ZN6S234C63v52Ev();
extern void _ZN6S234C63v53Ev();
extern void _ZN6S234C63v54Ev();
extern void _ZN6S234C63v55Ev();
extern void _ZN6S234C63v56Ev();
extern void _ZN6S234C63v57Ev();
extern void _ZN6S234C63v58Ev();
extern void _ZN6S234C63v59Ev();
extern void _ZN6S234C63v60Ev();
extern void _ZN6S234C63v61Ev();
extern void _ZN6S234C63v62Ev();
extern void _ZN6S234C63v63Ev();
extern void _ZN6S234C63v64Ev();
extern void _ZN6S234C63v65Ev();
extern void _ZN6S234C63v66Ev();
extern void _ZN6S234C63v67Ev();
extern void _ZN6S234C63v68Ev();
static  VTBL_ENTRY vtc_S234C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S234C6[0]),
  (VTBL_ENTRY)&_ZN6S234C6D1Ev,
  (VTBL_ENTRY)&_ZN6S234C6D0Ev,
  (VTBL_ENTRY)&_ZN6S234C62v5Ev,
  (VTBL_ENTRY)&_ZN6S234C62v6Ev,
  (VTBL_ENTRY)&_ZN6S234C62v7Ev,
  (VTBL_ENTRY)&_ZN6S234C62v8Ev,
  (VTBL_ENTRY)&_ZN6S234C62v9Ev,
  (VTBL_ENTRY)&_ZN6S234C63v10Ev,
  (VTBL_ENTRY)&_ZN6S234C63v11Ev,
  (VTBL_ENTRY)&_ZN6S234C63v12Ev,
  (VTBL_ENTRY)&_ZN6S234C63v13Ev,
  (VTBL_ENTRY)&_ZN6S234C63v14Ev,
  (VTBL_ENTRY)&_ZN6S234C63v15Ev,
  (VTBL_ENTRY)&_ZN6S234C63v16Ev,
  (VTBL_ENTRY)&_ZN6S234C63v17Ev,
  (VTBL_ENTRY)&_ZN6S234C63v18Ev,
  (VTBL_ENTRY)&_ZN6S234C63v19Ev,
  (VTBL_ENTRY)&_ZN6S234C63v20Ev,
  (VTBL_ENTRY)&_ZN6S234C63v21Ev,
  (VTBL_ENTRY)&_ZN6S234C63v22Ev,
  (VTBL_ENTRY)&_ZN6S234C63v23Ev,
  (VTBL_ENTRY)&_ZN6S234C63v24Ev,
  (VTBL_ENTRY)&_ZN6S234C63v25Ev,
  (VTBL_ENTRY)&_ZN6S234C63v26Ev,
  (VTBL_ENTRY)&_ZN6S234C63v27Ev,
  (VTBL_ENTRY)&_ZN6S234C63v28Ev,
  (VTBL_ENTRY)&_ZN6S234C63v29Ev,
  (VTBL_ENTRY)&_ZN6S234C63v30Ev,
  (VTBL_ENTRY)&_ZN6S234C63v31Ev,
  (VTBL_ENTRY)&_ZN6S234C63v32Ev,
  (VTBL_ENTRY)&_ZN6S234C63v33Ev,
  (VTBL_ENTRY)&_ZN6S234C63v34Ev,
  (VTBL_ENTRY)&_ZN6S234C63v35Ev,
  (VTBL_ENTRY)&_ZN6S234C63v36Ev,
  (VTBL_ENTRY)&_ZN6S234C63v37Ev,
  (VTBL_ENTRY)&_ZN6S234C63v38Ev,
  (VTBL_ENTRY)&_ZN6S234C63v39Ev,
  (VTBL_ENTRY)&_ZN6S234C63v40Ev,
  (VTBL_ENTRY)&_ZN6S234C63v41Ev,
  (VTBL_ENTRY)&_ZN6S234C63v42Ev,
  (VTBL_ENTRY)&_ZN6S234C63v43Ev,
  (VTBL_ENTRY)&_ZN6S234C63v44Ev,
  (VTBL_ENTRY)&_ZN6S234C63v45Ev,
  (VTBL_ENTRY)&_ZN6S234C63v46Ev,
  (VTBL_ENTRY)&_ZN6S234C63v47Ev,
  (VTBL_ENTRY)&_ZN6S234C63v48Ev,
  (VTBL_ENTRY)&_ZN6S234C63v49Ev,
  (VTBL_ENTRY)&_ZN6S234C63v50Ev,
  (VTBL_ENTRY)&_ZN6S234C63v51Ev,
  (VTBL_ENTRY)&_ZN6S234C63v52Ev,
  (VTBL_ENTRY)&_ZN6S234C63v53Ev,
  (VTBL_ENTRY)&_ZN6S234C63v54Ev,
  (VTBL_ENTRY)&_ZN6S234C63v55Ev,
  (VTBL_ENTRY)&_ZN6S234C63v56Ev,
  (VTBL_ENTRY)&_ZN6S234C63v57Ev,
  (VTBL_ENTRY)&_ZN6S234C63v58Ev,
  (VTBL_ENTRY)&_ZN6S234C63v59Ev,
  (VTBL_ENTRY)&_ZN6S234C63v60Ev,
  (VTBL_ENTRY)&_ZN6S234C63v61Ev,
  (VTBL_ENTRY)&_ZN6S234C63v62Ev,
  (VTBL_ENTRY)&_ZN6S234C63v63Ev,
  (VTBL_ENTRY)&_ZN6S234C63v64Ev,
  (VTBL_ENTRY)&_ZN6S234C63v65Ev,
  (VTBL_ENTRY)&_ZN6S234C63v66Ev,
  (VTBL_ENTRY)&_ZN6S234C63v67Ev,
  (VTBL_ENTRY)&_ZN6S234C63v68Ev,
};
extern VTBL_ENTRY _ZTI6S234C6[];
extern  VTBL_ENTRY _ZTV6S234C6[];
Class_Descriptor cd_S234C6 = {  "S234C6", // class name
  0,0,//no base classes
  &(vtc_S234C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S234C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S234C6),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  S234C5  : S234C6 {
  void *s234c5f0;
  ::S1542C26 s234c5f1;
  ::S615C17_nt s234c5f2;
  ::S1542C22_nt s234c5f3;
  ::S615C12_nt s234c5f4;
  int s234c5f5;
  unsigned int s234c5f6:1;
  unsigned int s234c5f7:1;
  unsigned int s234c5f8:1;
  unsigned int s234c5f9:1;
  int s234c5f10[11];
  virtual  ~S234C5(); // _ZN6S234C5D1Ev
  virtual void  v69(); // _ZN6S234C53v69Ev
  virtual void  v70(); // _ZN6S234C53v70Ev
  virtual void  v71(); // _ZN6S234C53v71Ev
  virtual void  v72(); // _ZN6S234C53v72Ev
  virtual void  v73(); // _ZN6S234C53v73Ev
  virtual void  v74(); // _ZN6S234C53v74Ev
  virtual void  v75(); // _ZN6S234C53v75Ev
  virtual void  v76(); // _ZN6S234C53v76Ev
  virtual void  v77(); // _ZN6S234C53v77Ev
  virtual void  v78(); // _ZN6S234C53v78Ev
  virtual void  v79(); // _ZN6S234C53v79Ev
  virtual void  v80(); // _ZN6S234C53v80Ev
  virtual void  v81(); // _ZN6S234C53v81Ev
  virtual void  v82(); // _ZN6S234C53v82Ev
  virtual void  v83(); // _ZN6S234C53v83Ev
  virtual void  v84(); // _ZN6S234C53v84Ev
  virtual void  v85(); // _ZN6S234C53v85Ev
  virtual void  v86(); // _ZN6S234C53v86Ev
  virtual void  v87(); // _ZN6S234C53v87Ev
  virtual void  v88(); // _ZN6S234C53v88Ev
  virtual void  v89(); // _ZN6S234C53v89Ev
  virtual void  v90(); // _ZN6S234C53v90Ev
  virtual void  v91(); // _ZN6S234C53v91Ev
  virtual void  v92(); // _ZN6S234C53v92Ev
  virtual void  v93(); // _ZN6S234C53v93Ev
  virtual void  v94(); // _ZN6S234C53v94Ev
  virtual void  v95(); // _ZN6S234C53v95Ev
  S234C5(); // tgen
};
//SIG(-1 S234C5) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S234C5 ::~S234C5(){ note_dtor("S234C5", this);}
void  S234C5 ::v69(){vfunc_called(this, "_ZN6S234C53v69Ev");}
void  S234C5 ::v70(){vfunc_called(this, "_ZN6S234C53v70Ev");}
void  S234C5 ::v71(){vfunc_called(this, "_ZN6S234C53v71Ev");}
void  S234C5 ::v72(){vfunc_called(this, "_ZN6S234C53v72Ev");}
void  S234C5 ::v73(){vfunc_called(this, "_ZN6S234C53v73Ev");}
void  S234C5 ::v74(){vfunc_called(this, "_ZN6S234C53v74Ev");}
void  S234C5 ::v75(){vfunc_called(this, "_ZN6S234C53v75Ev");}
void  S234C5 ::v76(){vfunc_called(this, "_ZN6S234C53v76Ev");}
void  S234C5 ::v77(){vfunc_called(this, "_ZN6S234C53v77Ev");}
void  S234C5 ::v78(){vfunc_called(this, "_ZN6S234C53v78Ev");}
void  S234C5 ::v79(){vfunc_called(this, "_ZN6S234C53v79Ev");}
void  S234C5 ::v80(){vfunc_called(this, "_ZN6S234C53v80Ev");}
void  S234C5 ::v81(){vfunc_called(this, "_ZN6S234C53v81Ev");}
void  S234C5 ::v82(){vfunc_called(this, "_ZN6S234C53v82Ev");}
void  S234C5 ::v83(){vfunc_called(this, "_ZN6S234C53v83Ev");}
void  S234C5 ::v84(){vfunc_called(this, "_ZN6S234C53v84Ev");}
void  S234C5 ::v85(){vfunc_called(this, "_ZN6S234C53v85Ev");}
void  S234C5 ::v86(){vfunc_called(this, "_ZN6S234C53v86Ev");}
void  S234C5 ::v87(){vfunc_called(this, "_ZN6S234C53v87Ev");}
void  S234C5 ::v88(){vfunc_called(this, "_ZN6S234C53v88Ev");}
void  S234C5 ::v89(){vfunc_called(this, "_ZN6S234C53v89Ev");}
void  S234C5 ::v90(){vfunc_called(this, "_ZN6S234C53v90Ev");}
void  S234C5 ::v91(){vfunc_called(this, "_ZN6S234C53v91Ev");}
void  S234C5 ::v92(){vfunc_called(this, "_ZN6S234C53v92Ev");}
void  S234C5 ::v93(){vfunc_called(this, "_ZN6S234C53v93Ev");}
void  S234C5 ::v94(){vfunc_called(this, "_ZN6S234C53v94Ev");}
void  S234C5 ::v95(){vfunc_called(this, "_ZN6S234C53v95Ev");}
S234C5 ::S234C5(){ note_ctor("S234C5", this);} // tgen

static void Test_S234C5()
{
  extern Class_Descriptor cd_S234C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S234C5, buf);
    S234C5 *dp, &lv = *(dp=new (buf) S234C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S234C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S234C5)");
    check_base_class_offset(lv, (S234C6*), 0, "S234C5");
    check_field_offset(lv, s234c5f0, ABISELECT(96,60), "S234C5.s234c5f0");
    check_field_offset(lv, s234c5f1, ABISELECT(104,64), "S234C5.s234c5f1");
    check_field_offset(lv, s234c5f2, ABISELECT(120,76), "S234C5.s234c5f2");
    check_field_offset(lv, s234c5f3, ABISELECT(128,84), "S234C5.s234c5f3");
    check_field_offset(lv, s234c5f4, ABISELECT(144,96), "S234C5.s234c5f4");
    check_field_offset(lv, s234c5f5, ABISELECT(176,128), "S234C5.s234c5f5");
    set_bf_and_test(lv, s234c5f6, ABISELECT(180,132), 0, 1, 1, "S234C5");
    set_bf_and_test(lv, s234c5f7, ABISELECT(180,132), 1, 1, 1, "S234C5");
    set_bf_and_test(lv, s234c5f8, ABISELECT(180,132), 2, 1, 1, "S234C5");
    set_bf_and_test(lv, s234c5f9, ABISELECT(180,132), 3, 1, 1, "S234C5");
    check_field_offset(lv, s234c5f10, ABISELECT(184,136), "S234C5.s234c5f10");
    test_class_info(&lv, &cd_S234C5);
    dp->~S234C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS234C5(Test_S234C5, "S234C5", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S234C5C1Ev();
extern void _ZN6S234C5D1Ev();
Name_Map name_map_S234C5[] = {
  NSPAIR(_ZN6S234C5C1Ev),
  NSPAIR(_ZN6S234C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S234C6;
extern VTBL_ENTRY _ZTI6S234C6[];
extern  VTBL_ENTRY _ZTV6S234C6[];
static Base_Class bases_S234C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S234C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S234C5[];
extern void _ZN6S234C5D1Ev();
extern void _ZN6S234C5D0Ev();
extern void _ZN6S234C62v5Ev();
extern void _ZN6S234C62v6Ev();
extern void _ZN6S234C62v7Ev();
extern void _ZN6S234C62v8Ev();
extern void _ZN6S234C62v9Ev();
extern void _ZN6S234C63v10Ev();
extern void _ZN6S234C63v11Ev();
extern void _ZN6S234C63v12Ev();
extern void _ZN6S234C63v13Ev();
extern void _ZN6S234C63v14Ev();
extern void _ZN6S234C63v15Ev();
extern void _ZN6S234C63v16Ev();
extern void _ZN6S234C63v17Ev();
extern void _ZN6S234C63v18Ev();
extern void _ZN6S234C63v19Ev();
extern void _ZN6S234C63v20Ev();
extern void _ZN6S234C63v21Ev();
extern void _ZN6S234C63v22Ev();
extern void _ZN6S234C63v23Ev();
extern void _ZN6S234C63v24Ev();
extern void _ZN6S234C63v25Ev();
extern void _ZN6S234C63v26Ev();
extern void _ZN6S234C63v27Ev();
extern void _ZN6S234C63v28Ev();
extern void _ZN6S234C63v29Ev();
extern void _ZN6S234C63v30Ev();
extern void _ZN6S234C63v31Ev();
extern void _ZN6S234C63v32Ev();
extern void _ZN6S234C63v33Ev();
extern void _ZN6S234C63v34Ev();
extern void _ZN6S234C63v35Ev();
extern void _ZN6S234C63v36Ev();
extern void _ZN6S234C63v37Ev();
extern void _ZN6S234C63v38Ev();
extern void _ZN6S234C63v39Ev();
extern void _ZN6S234C63v40Ev();
extern void _ZN6S234C63v41Ev();
extern void _ZN6S234C63v42Ev();
extern void _ZN6S234C63v43Ev();
extern void _ZN6S234C63v44Ev();
extern void _ZN6S234C63v45Ev();
extern void _ZN6S234C63v46Ev();
extern void _ZN6S234C63v47Ev();
extern void _ZN6S234C63v48Ev();
extern void _ZN6S234C63v49Ev();
extern void _ZN6S234C63v50Ev();
extern void _ZN6S234C63v51Ev();
extern void _ZN6S234C63v52Ev();
extern void _ZN6S234C63v53Ev();
extern void _ZN6S234C63v54Ev();
extern void _ZN6S234C63v55Ev();
extern void _ZN6S234C63v56Ev();
extern void _ZN6S234C63v57Ev();
extern void _ZN6S234C63v58Ev();
extern void _ZN6S234C63v59Ev();
extern void _ZN6S234C63v60Ev();
extern void _ZN6S234C63v61Ev();
extern void _ZN6S234C63v62Ev();
extern void _ZN6S234C63v63Ev();
extern void _ZN6S234C63v64Ev();
extern void _ZN6S234C63v65Ev();
extern void _ZN6S234C63v66Ev();
extern void _ZN6S234C63v67Ev();
extern void _ZN6S234C63v68Ev();
extern void _ZN6S234C53v69Ev();
extern void _ZN6S234C53v70Ev();
extern void _ZN6S234C53v71Ev();
extern void _ZN6S234C53v72Ev();
extern void _ZN6S234C53v73Ev();
extern void _ZN6S234C53v74Ev();
extern void _ZN6S234C53v75Ev();
extern void _ZN6S234C53v76Ev();
extern void _ZN6S234C53v77Ev();
extern void _ZN6S234C53v78Ev();
extern void _ZN6S234C53v79Ev();
extern void _ZN6S234C53v80Ev();
extern void _ZN6S234C53v81Ev();
extern void _ZN6S234C53v82Ev();
extern void _ZN6S234C53v83Ev();
extern void _ZN6S234C53v84Ev();
extern void _ZN6S234C53v85Ev();
extern void _ZN6S234C53v86Ev();
extern void _ZN6S234C53v87Ev();
extern void _ZN6S234C53v88Ev();
extern void _ZN6S234C53v89Ev();
extern void _ZN6S234C53v90Ev();
extern void _ZN6S234C53v91Ev();
extern void _ZN6S234C53v92Ev();
extern void _ZN6S234C53v93Ev();
extern void _ZN6S234C53v94Ev();
extern void _ZN6S234C53v95Ev();
static  VTBL_ENTRY vtc_S234C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S234C5[0]),
  (VTBL_ENTRY)&_ZN6S234C5D1Ev,
  (VTBL_ENTRY)&_ZN6S234C5D0Ev,
  (VTBL_ENTRY)&_ZN6S234C62v5Ev,
  (VTBL_ENTRY)&_ZN6S234C62v6Ev,
  (VTBL_ENTRY)&_ZN6S234C62v7Ev,
  (VTBL_ENTRY)&_ZN6S234C62v8Ev,
  (VTBL_ENTRY)&_ZN6S234C62v9Ev,
  (VTBL_ENTRY)&_ZN6S234C63v10Ev,
  (VTBL_ENTRY)&_ZN6S234C63v11Ev,
  (VTBL_ENTRY)&_ZN6S234C63v12Ev,
  (VTBL_ENTRY)&_ZN6S234C63v13Ev,
  (VTBL_ENTRY)&_ZN6S234C63v14Ev,
  (VTBL_ENTRY)&_ZN6S234C63v15Ev,
  (VTBL_ENTRY)&_ZN6S234C63v16Ev,
  (VTBL_ENTRY)&_ZN6S234C63v17Ev,
  (VTBL_ENTRY)&_ZN6S234C63v18Ev,
  (VTBL_ENTRY)&_ZN6S234C63v19Ev,
  (VTBL_ENTRY)&_ZN6S234C63v20Ev,
  (VTBL_ENTRY)&_ZN6S234C63v21Ev,
  (VTBL_ENTRY)&_ZN6S234C63v22Ev,
  (VTBL_ENTRY)&_ZN6S234C63v23Ev,
  (VTBL_ENTRY)&_ZN6S234C63v24Ev,
  (VTBL_ENTRY)&_ZN6S234C63v25Ev,
  (VTBL_ENTRY)&_ZN6S234C63v26Ev,
  (VTBL_ENTRY)&_ZN6S234C63v27Ev,
  (VTBL_ENTRY)&_ZN6S234C63v28Ev,
  (VTBL_ENTRY)&_ZN6S234C63v29Ev,
  (VTBL_ENTRY)&_ZN6S234C63v30Ev,
  (VTBL_ENTRY)&_ZN6S234C63v31Ev,
  (VTBL_ENTRY)&_ZN6S234C63v32Ev,
  (VTBL_ENTRY)&_ZN6S234C63v33Ev,
  (VTBL_ENTRY)&_ZN6S234C63v34Ev,
  (VTBL_ENTRY)&_ZN6S234C63v35Ev,
  (VTBL_ENTRY)&_ZN6S234C63v36Ev,
  (VTBL_ENTRY)&_ZN6S234C63v37Ev,
  (VTBL_ENTRY)&_ZN6S234C63v38Ev,
  (VTBL_ENTRY)&_ZN6S234C63v39Ev,
  (VTBL_ENTRY)&_ZN6S234C63v40Ev,
  (VTBL_ENTRY)&_ZN6S234C63v41Ev,
  (VTBL_ENTRY)&_ZN6S234C63v42Ev,
  (VTBL_ENTRY)&_ZN6S234C63v43Ev,
  (VTBL_ENTRY)&_ZN6S234C63v44Ev,
  (VTBL_ENTRY)&_ZN6S234C63v45Ev,
  (VTBL_ENTRY)&_ZN6S234C63v46Ev,
  (VTBL_ENTRY)&_ZN6S234C63v47Ev,
  (VTBL_ENTRY)&_ZN6S234C63v48Ev,
  (VTBL_ENTRY)&_ZN6S234C63v49Ev,
  (VTBL_ENTRY)&_ZN6S234C63v50Ev,
  (VTBL_ENTRY)&_ZN6S234C63v51Ev,
  (VTBL_ENTRY)&_ZN6S234C63v52Ev,
  (VTBL_ENTRY)&_ZN6S234C63v53Ev,
  (VTBL_ENTRY)&_ZN6S234C63v54Ev,
  (VTBL_ENTRY)&_ZN6S234C63v55Ev,
  (VTBL_ENTRY)&_ZN6S234C63v56Ev,
  (VTBL_ENTRY)&_ZN6S234C63v57Ev,
  (VTBL_ENTRY)&_ZN6S234C63v58Ev,
  (VTBL_ENTRY)&_ZN6S234C63v59Ev,
  (VTBL_ENTRY)&_ZN6S234C63v60Ev,
  (VTBL_ENTRY)&_ZN6S234C63v61Ev,
  (VTBL_ENTRY)&_ZN6S234C63v62Ev,
  (VTBL_ENTRY)&_ZN6S234C63v63Ev,
  (VTBL_ENTRY)&_ZN6S234C63v64Ev,
  (VTBL_ENTRY)&_ZN6S234C63v65Ev,
  (VTBL_ENTRY)&_ZN6S234C63v66Ev,
  (VTBL_ENTRY)&_ZN6S234C63v67Ev,
  (VTBL_ENTRY)&_ZN6S234C63v68Ev,
  (VTBL_ENTRY)&_ZN6S234C53v69Ev,
  (VTBL_ENTRY)&_ZN6S234C53v70Ev,
  (VTBL_ENTRY)&_ZN6S234C53v71Ev,
  (VTBL_ENTRY)&_ZN6S234C53v72Ev,
  (VTBL_ENTRY)&_ZN6S234C53v73Ev,
  (VTBL_ENTRY)&_ZN6S234C53v74Ev,
  (VTBL_ENTRY)&_ZN6S234C53v75Ev,
  (VTBL_ENTRY)&_ZN6S234C53v76Ev,
  (VTBL_ENTRY)&_ZN6S234C53v77Ev,
  (VTBL_ENTRY)&_ZN6S234C53v78Ev,
  (VTBL_ENTRY)&_ZN6S234C53v79Ev,
  (VTBL_ENTRY)&_ZN6S234C53v80Ev,
  (VTBL_ENTRY)&_ZN6S234C53v81Ev,
  (VTBL_ENTRY)&_ZN6S234C53v82Ev,
  (VTBL_ENTRY)&_ZN6S234C53v83Ev,
  (VTBL_ENTRY)&_ZN6S234C53v84Ev,
  (VTBL_ENTRY)&_ZN6S234C53v85Ev,
  (VTBL_ENTRY)&_ZN6S234C53v86Ev,
  (VTBL_ENTRY)&_ZN6S234C53v87Ev,
  (VTBL_ENTRY)&_ZN6S234C53v88Ev,
  (VTBL_ENTRY)&_ZN6S234C53v89Ev,
  (VTBL_ENTRY)&_ZN6S234C53v90Ev,
  (VTBL_ENTRY)&_ZN6S234C53v91Ev,
  (VTBL_ENTRY)&_ZN6S234C53v92Ev,
  (VTBL_ENTRY)&_ZN6S234C53v93Ev,
  (VTBL_ENTRY)&_ZN6S234C53v94Ev,
  (VTBL_ENTRY)&_ZN6S234C53v95Ev,
};
extern VTBL_ENTRY _ZTI6S234C5[];
extern  VTBL_ENTRY _ZTV6S234C5[];
Class_Descriptor cd_S234C5 = {  "S234C5", // class name
  bases_S234C5, 1,
  &(vtc_S234C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S234C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S234C5),95, //virtual function table var
  2, // 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  S234C4  : S234C5 {
  ::S615C22_nt s234c4f0;
  unsigned int s234c4f1:1;
  virtual  ~S234C4(); // _ZN6S234C4D1Ev
  virtual void  v96(); // _ZN6S234C43v96Ev
  virtual void  v97(); // _ZN6S234C43v97Ev
  virtual void  v98(); // _ZN6S234C43v98Ev
  virtual void  v99(); // _ZN6S234C43v99Ev
  virtual void  v100(); // _ZN6S234C44v100Ev
  virtual void  v101(); // _ZN6S234C44v101Ev
  virtual void  v102(); // _ZN6S234C44v102Ev
  virtual void  v103(); // _ZN6S234C44v103Ev
  virtual void  v104(); // _ZN6S234C44v104Ev
  virtual void  v105(); // _ZN6S234C44v105Ev
  virtual void  v106(); // _ZN6S234C44v106Ev
  virtual void  v107(); // _ZN6S234C44v107Ev
  virtual void  v108(); // _ZN6S234C44v108Ev
  virtual void  v109(); // _ZN6S234C44v109Ev
  virtual void  v110(); // _ZN6S234C44v110Ev
  virtual void  v111(); // _ZN6S234C44v111Ev
  virtual void  v112(); // _ZN6S234C44v112Ev
  virtual void  v113(); // _ZN6S234C44v113Ev
  S234C4(); // tgen
};
//SIG(-1 S234C4) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S234C4 ::~S234C4(){ note_dtor("S234C4", this);}
void  S234C4 ::v96(){vfunc_called(this, "_ZN6S234C43v96Ev");}
void  S234C4 ::v97(){vfunc_called(this, "_ZN6S234C43v97Ev");}
void  S234C4 ::v98(){vfunc_called(this, "_ZN6S234C43v98Ev");}
void  S234C4 ::v99(){vfunc_called(this, "_ZN6S234C43v99Ev");}
void  S234C4 ::v100(){vfunc_called(this, "_ZN6S234C44v100Ev");}
void  S234C4 ::v101(){vfunc_called(this, "_ZN6S234C44v101Ev");}
void  S234C4 ::v102(){vfunc_called(this, "_ZN6S234C44v102Ev");}
void  S234C4 ::v103(){vfunc_called(this, "_ZN6S234C44v103Ev");}
void  S234C4 ::v104(){vfunc_called(this, "_ZN6S234C44v104Ev");}
void  S234C4 ::v105(){vfunc_called(this, "_ZN6S234C44v105Ev");}
void  S234C4 ::v106(){vfunc_called(this, "_ZN6S234C44v106Ev");}
void  S234C4 ::v107(){vfunc_called(this, "_ZN6S234C44v107Ev");}
void  S234C4 ::v108(){vfunc_called(this, "_ZN6S234C44v108Ev");}
void  S234C4 ::v109(){vfunc_called(this, "_ZN6S234C44v109Ev");}
void  S234C4 ::v110(){vfunc_called(this, "_ZN6S234C44v110Ev");}
void  S234C4 ::v111(){vfunc_called(this, "_ZN6S234C44v111Ev");}
void  S234C4 ::v112(){vfunc_called(this, "_ZN6S234C44v112Ev");}
void  S234C4 ::v113(){vfunc_called(this, "_ZN6S234C44v113Ev");}
S234C4 ::S234C4(){ note_ctor("S234C4", this);} // tgen

static void Test_S234C4()
{
  extern Class_Descriptor cd_S234C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S234C4, buf);
    S234C4 *dp, &lv = *(dp=new (buf) S234C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S234C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S234C4)");
    check_base_class_offset(lv, (S234C6*)(S234C5*), 0, "S234C4");
    check_base_class_offset(lv, (S234C5*), 0, "S234C4");
    check_field_offset(lv, s234c4f0, ABISELECT(232,180), "S234C4.s234c4f0");
    set_bf_and_test(lv, s234c4f1, ABISELECT(248,192), 0, 1, 1, "S234C4");
    test_class_info(&lv, &cd_S234C4);
    dp->~S234C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS234C4(Test_S234C4, "S234C4", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S234C4C1Ev();
extern void _ZN6S234C4D1Ev();
Name_Map name_map_S234C4[] = {
  NSPAIR(_ZN6S234C4C1Ev),
  NSPAIR(_ZN6S234C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S234C6;
extern VTBL_ENTRY _ZTI6S234C6[];
extern  VTBL_ENTRY _ZTV6S234C6[];
extern Class_Descriptor cd_S234C5;
extern VTBL_ENTRY _ZTI6S234C5[];
extern  VTBL_ENTRY _ZTV6S234C5[];
static Base_Class bases_S234C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S234C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S234C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S234C4[];
extern void _ZN6S234C4D1Ev();
extern void _ZN6S234C4D0Ev();
extern void _ZN6S234C62v5Ev();
extern void _ZN6S234C62v6Ev();
extern void _ZN6S234C62v7Ev();
extern void _ZN6S234C62v8Ev();
extern void _ZN6S234C62v9Ev();
extern void _ZN6S234C63v10Ev();
extern void _ZN6S234C63v11Ev();
extern void _ZN6S234C63v12Ev();
extern void _ZN6S234C63v13Ev();
extern void _ZN6S234C63v14Ev();
extern void _ZN6S234C63v15Ev();
extern void _ZN6S234C63v16Ev();
extern void _ZN6S234C63v17Ev();
extern void _ZN6S234C63v18Ev();
extern void _ZN6S234C63v19Ev();
extern void _ZN6S234C63v20Ev();
extern void _ZN6S234C63v21Ev();
extern void _ZN6S234C63v22Ev();
extern void _ZN6S234C63v23Ev();
extern void _ZN6S234C63v24Ev();
extern void _ZN6S234C63v25Ev();
extern void _ZN6S234C63v26Ev();
extern void _ZN6S234C63v27Ev();
extern void _ZN6S234C63v28Ev();
extern void _ZN6S234C63v29Ev();
extern void _ZN6S234C63v30Ev();
extern void _ZN6S234C63v31Ev();
extern void _ZN6S234C63v32Ev();
extern void _ZN6S234C63v33Ev();
extern void _ZN6S234C63v34Ev();
extern void _ZN6S234C63v35Ev();
extern void _ZN6S234C63v36Ev();
extern void _ZN6S234C63v37Ev();
extern void _ZN6S234C63v38Ev();
extern void _ZN6S234C63v39Ev();
extern void _ZN6S234C63v40Ev();
extern void _ZN6S234C63v41Ev();
extern void _ZN6S234C63v42Ev();
extern void _ZN6S234C63v43Ev();
extern void _ZN6S234C63v44Ev();
extern void _ZN6S234C63v45Ev();
extern void _ZN6S234C63v46Ev();
extern void _ZN6S234C63v47Ev();
extern void _ZN6S234C63v48Ev();
extern void _ZN6S234C63v49Ev();
extern void _ZN6S234C63v50Ev();
extern void _ZN6S234C63v51Ev();
extern void _ZN6S234C63v52Ev();
extern void _ZN6S234C63v53Ev();
extern void _ZN6S234C63v54Ev();
extern void _ZN6S234C63v55Ev();
extern void _ZN6S234C63v56Ev();
extern void _ZN6S234C63v57Ev();
extern void _ZN6S234C63v58Ev();
extern void _ZN6S234C63v59Ev();
extern void _ZN6S234C63v60Ev();
extern void _ZN6S234C63v61Ev();
extern void _ZN6S234C63v62Ev();
extern void _ZN6S234C63v63Ev();
extern void _ZN6S234C63v64Ev();
extern void _ZN6S234C63v65Ev();
extern void _ZN6S234C63v66Ev();
extern void _ZN6S234C63v67Ev();
extern void _ZN6S234C63v68Ev();
extern void _ZN6S234C53v69Ev();
extern void _ZN6S234C53v70Ev();
extern void _ZN6S234C53v71Ev();
extern void _ZN6S234C53v72Ev();
extern void _ZN6S234C53v73Ev();
extern void _ZN6S234C53v74Ev();
extern void _ZN6S234C53v75Ev();
extern void _ZN6S234C53v76Ev();
extern void _ZN6S234C53v77Ev();
extern void _ZN6S234C53v78Ev();
extern void _ZN6S234C53v79Ev();
extern void _ZN6S234C53v80Ev();
extern void _ZN6S234C53v81Ev();
extern void _ZN6S234C53v82Ev();
extern void _ZN6S234C53v83Ev();
extern void _ZN6S234C53v84Ev();
extern void _ZN6S234C53v85Ev();
extern void _ZN6S234C53v86Ev();
extern void _ZN6S234C53v87Ev();
extern void _ZN6S234C53v88Ev();
extern void _ZN6S234C53v89Ev();
extern void _ZN6S234C53v90Ev();
extern void _ZN6S234C53v91Ev();
extern void _ZN6S234C53v92Ev();
extern void _ZN6S234C53v93Ev();
extern void _ZN6S234C53v94Ev();
extern void _ZN6S234C53v95Ev();
extern void _ZN6S234C43v96Ev();
extern void _ZN6S234C43v97Ev();
extern void _ZN6S234C43v98Ev();
extern void _ZN6S234C43v99Ev();
extern void _ZN6S234C44v100Ev();
extern void _ZN6S234C44v101Ev();
extern void _ZN6S234C44v102Ev();
extern void _ZN6S234C44v103Ev();
extern void _ZN6S234C44v104Ev();
extern void _ZN6S234C44v105Ev();
extern void _ZN6S234C44v106Ev();
extern void _ZN6S234C44v107Ev();
extern void _ZN6S234C44v108Ev();
extern void _ZN6S234C44v109Ev();
extern void _ZN6S234C44v110Ev();
extern void _ZN6S234C44v111Ev();
extern void _ZN6S234C44v112Ev();
extern void _ZN6S234C44v113Ev();
static  VTBL_ENTRY vtc_S234C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S234C4[0]),
  (VTBL_ENTRY)&_ZN6S234C4D1Ev,
  (VTBL_ENTRY)&_ZN6S234C4D0Ev,
  (VTBL_ENTRY)&_ZN6S234C62v5Ev,
  (VTBL_ENTRY)&_ZN6S234C62v6Ev,
  (VTBL_ENTRY)&_ZN6S234C62v7Ev,
  (VTBL_ENTRY)&_ZN6S234C62v8Ev,
  (VTBL_ENTRY)&_ZN6S234C62v9Ev,
  (VTBL_ENTRY)&_ZN6S234C63v10Ev,
  (VTBL_ENTRY)&_ZN6S234C63v11Ev,
  (VTBL_ENTRY)&_ZN6S234C63v12Ev,
  (VTBL_ENTRY)&_ZN6S234C63v13Ev,
  (VTBL_ENTRY)&_ZN6S234C63v14Ev,
  (VTBL_ENTRY)&_ZN6S234C63v15Ev,
  (VTBL_ENTRY)&_ZN6S234C63v16Ev,
  (VTBL_ENTRY)&_ZN6S234C63v17Ev,
  (VTBL_ENTRY)&_ZN6S234C63v18Ev,
  (VTBL_ENTRY)&_ZN6S234C63v19Ev,
  (VTBL_ENTRY)&_ZN6S234C63v20Ev,
  (VTBL_ENTRY)&_ZN6S234C63v21Ev,
  (VTBL_ENTRY)&_ZN6S234C63v22Ev,
  (VTBL_ENTRY)&_ZN6S234C63v23Ev,
  (VTBL_ENTRY)&_ZN6S234C63v24Ev,
  (VTBL_ENTRY)&_ZN6S234C63v25Ev,
  (VTBL_ENTRY)&_ZN6S234C63v26Ev,
  (VTBL_ENTRY)&_ZN6S234C63v27Ev,
  (VTBL_ENTRY)&_ZN6S234C63v28Ev,
  (VTBL_ENTRY)&_ZN6S234C63v29Ev,
  (VTBL_ENTRY)&_ZN6S234C63v30Ev,
  (VTBL_ENTRY)&_ZN6S234C63v31Ev,
  (VTBL_ENTRY)&_ZN6S234C63v32Ev,
  (VTBL_ENTRY)&_ZN6S234C63v33Ev,
  (VTBL_ENTRY)&_ZN6S234C63v34Ev,
  (VTBL_ENTRY)&_ZN6S234C63v35Ev,
  (VTBL_ENTRY)&_ZN6S234C63v36Ev,
  (VTBL_ENTRY)&_ZN6S234C63v37Ev,
  (VTBL_ENTRY)&_ZN6S234C63v38Ev,
  (VTBL_ENTRY)&_ZN6S234C63v39Ev,
  (VTBL_ENTRY)&_ZN6S234C63v40Ev,
  (VTBL_ENTRY)&_ZN6S234C63v41Ev,
  (VTBL_ENTRY)&_ZN6S234C63v42Ev,
  (VTBL_ENTRY)&_ZN6S234C63v43Ev,
  (VTBL_ENTRY)&_ZN6S234C63v44Ev,
  (VTBL_ENTRY)&_ZN6S234C63v45Ev,
  (VTBL_ENTRY)&_ZN6S234C63v46Ev,
  (VTBL_ENTRY)&_ZN6S234C63v47Ev,
  (VTBL_ENTRY)&_ZN6S234C63v48Ev,
  (VTBL_ENTRY)&_ZN6S234C63v49Ev,
  (VTBL_ENTRY)&_ZN6S234C63v50Ev,
  (VTBL_ENTRY)&_ZN6S234C63v51Ev,
  (VTBL_ENTRY)&_ZN6S234C63v52Ev,
  (VTBL_ENTRY)&_ZN6S234C63v53Ev,
  (VTBL_ENTRY)&_ZN6S234C63v54Ev,
  (VTBL_ENTRY)&_ZN6S234C63v55Ev,
  (VTBL_ENTRY)&_ZN6S234C63v56Ev,
  (VTBL_ENTRY)&_ZN6S234C63v57Ev,
  (VTBL_ENTRY)&_ZN6S234C63v58Ev,
  (VTBL_ENTRY)&_ZN6S234C63v59Ev,
  (VTBL_ENTRY)&_ZN6S234C63v60Ev,
  (VTBL_ENTRY)&_ZN6S234C63v61Ev,
  (VTBL_ENTRY)&_ZN6S234C63v62Ev,
  (VTBL_ENTRY)&_ZN6S234C63v63Ev,
  (VTBL_ENTRY)&_ZN6S234C63v64Ev,
  (VTBL_ENTRY)&_ZN6S234C63v65Ev,
  (VTBL_ENTRY)&_ZN6S234C63v66Ev,
  (VTBL_ENTRY)&_ZN6S234C63v67Ev,
  (VTBL_ENTRY)&_ZN6S234C63v68Ev,
  (VTBL_ENTRY)&_ZN6S234C53v69Ev,
  (VTBL_ENTRY)&_ZN6S234C53v70Ev,
  (VTBL_ENTRY)&_ZN6S234C53v71Ev,
  (VTBL_ENTRY)&_ZN6S234C53v72Ev,
  (VTBL_ENTRY)&_ZN6S234C53v73Ev,
  (VTBL_ENTRY)&_ZN6S234C53v74Ev,
  (VTBL_ENTRY)&_ZN6S234C53v75Ev,
  (VTBL_ENTRY)&_ZN6S234C53v76Ev,
  (VTBL_ENTRY)&_ZN6S234C53v77Ev,
  (VTBL_ENTRY)&_ZN6S234C53v78Ev,
  (VTBL_ENTRY)&_ZN6S234C53v79Ev,
  (VTBL_ENTRY)&_ZN6S234C53v80Ev,
  (VTBL_ENTRY)&_ZN6S234C53v81Ev,
  (VTBL_ENTRY)&_ZN6S234C53v82Ev,
  (VTBL_ENTRY)&_ZN6S234C53v83Ev,
  (VTBL_ENTRY)&_ZN6S234C53v84Ev,
  (VTBL_ENTRY)&_ZN6S234C53v85Ev,
  (VTBL_ENTRY)&_ZN6S234C53v86Ev,
  (VTBL_ENTRY)&_ZN6S234C53v87Ev,
  (VTBL_ENTRY)&_ZN6S234C53v88Ev,
  (VTBL_ENTRY)&_ZN6S234C53v89Ev,
  (VTBL_ENTRY)&_ZN6S234C53v90Ev,
  (VTBL_ENTRY)&_ZN6S234C53v91Ev,
  (VTBL_ENTRY)&_ZN6S234C53v92Ev,
  (VTBL_ENTRY)&_ZN6S234C53v93Ev,
  (VTBL_ENTRY)&_ZN6S234C53v94Ev,
  (VTBL_ENTRY)&_ZN6S234C53v95Ev,
  (VTBL_ENTRY)&_ZN6S234C43v96Ev,
  (VTBL_ENTRY)&_ZN6S234C43v97Ev,
  (VTBL_ENTRY)&_ZN6S234C43v98Ev,
  (VTBL_ENTRY)&_ZN6S234C43v99Ev,
  (VTBL_ENTRY)&_ZN6S234C44v100Ev,
  (VTBL_ENTRY)&_ZN6S234C44v101Ev,
  (VTBL_ENTRY)&_ZN6S234C44v102Ev,
  (VTBL_ENTRY)&_ZN6S234C44v103Ev,
  (VTBL_ENTRY)&_ZN6S234C44v104Ev,
  (VTBL_ENTRY)&_ZN6S234C44v105Ev,
  (VTBL_ENTRY)&_ZN6S234C44v106Ev,
  (VTBL_ENTRY)&_ZN6S234C44v107Ev,
  (VTBL_ENTRY)&_ZN6S234C44v108Ev,
  (VTBL_ENTRY)&_ZN6S234C44v109Ev,
  (VTBL_ENTRY)&_ZN6S234C44v110Ev,
  (VTBL_ENTRY)&_ZN6S234C44v111Ev,
  (VTBL_ENTRY)&_ZN6S234C44v112Ev,
  (VTBL_ENTRY)&_ZN6S234C44v113Ev,
};
extern VTBL_ENTRY _ZTI6S234C4[];
extern  VTBL_ENTRY _ZTV6S234C4[];
Class_Descriptor cd_S234C4 = {  "S234C4", // class name
  bases_S234C4, 2,
  &(vtc_S234C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S234C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S234C4),113, //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  S234C3  : S234C4 {
  int s234c3f0[3];
  virtual  ~S234C3(); // _ZN6S234C3D1Ev
  virtual void  v114(); // _ZN6S234C34v114Ev
  virtual void  v115(); // _ZN6S234C34v115Ev
  virtual void  v116(); // _ZN6S234C34v116Ev
  virtual void  v117(); // _ZN6S234C34v117Ev
  virtual void  v118(); // _ZN6S234C34v118Ev
  virtual void  v119(); // _ZN6S234C34v119Ev
  virtual void  v120(); // _ZN6S234C34v120Ev
  S234C3(); // tgen
};
//SIG(-1 S234C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 Fi[3]}


 S234C3 ::~S234C3(){ note_dtor("S234C3", this);}
void  S234C3 ::v114(){vfunc_called(this, "_ZN6S234C34v114Ev");}
void  S234C3 ::v115(){vfunc_called(this, "_ZN6S234C34v115Ev");}
void  S234C3 ::v116(){vfunc_called(this, "_ZN6S234C34v116Ev");}
void  S234C3 ::v117(){vfunc_called(this, "_ZN6S234C34v117Ev");}
void  S234C3 ::v118(){vfunc_called(this, "_ZN6S234C34v118Ev");}
void  S234C3 ::v119(){vfunc_called(this, "_ZN6S234C34v119Ev");}
void  S234C3 ::v120(){vfunc_called(this, "_ZN6S234C34v120Ev");}
S234C3 ::S234C3(){ note_ctor("S234C3", this);} // tgen

static void Test_S234C3()
{
  extern Class_Descriptor cd_S234C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,53)];
    init_test(&cd_S234C3, buf);
    S234C3 *dp, &lv = *(dp=new (buf) S234C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,208), "sizeof(S234C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S234C3)");
    check_base_class_offset(lv, (S234C6*)(S234C5*)(S234C4*), 0, "S234C3");
    check_base_class_offset(lv, (S234C5*)(S234C4*), 0, "S234C3");
    check_base_class_offset(lv, (S234C4*), 0, "S234C3");
    check_field_offset(lv, s234c3f0, ABISELECT(252,196), "S234C3.s234c3f0");
    test_class_info(&lv, &cd_S234C3);
    dp->~S234C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS234C3(Test_S234C3, "S234C3", ABISELECT(264,208));

#else // __cplusplus

extern void _ZN6S234C3C1Ev();
extern void _ZN6S234C3D1Ev();
Name_Map name_map_S234C3[] = {
  NSPAIR(_ZN6S234C3C1Ev),
  NSPAIR(_ZN6S234C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S234C6;
extern VTBL_ENTRY _ZTI6S234C6[];
extern  VTBL_ENTRY _ZTV6S234C6[];
extern Class_Descriptor cd_S234C5;
extern VTBL_ENTRY _ZTI6S234C5[];
extern  VTBL_ENTRY _ZTV6S234C5[];
extern Class_Descriptor cd_S234C4;
extern VTBL_ENTRY _ZTI6S234C4[];
extern  VTBL_ENTRY _ZTV6S234C4[];
static Base_Class bases_S234C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S234C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S234C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S234C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S234C3[];
extern void _ZN6S234C3D1Ev();
extern void _ZN6S234C3D0Ev();
extern void _ZN6S234C62v5Ev();
extern void _ZN6S234C62v6Ev();
extern void _ZN6S234C62v7Ev();
extern void _ZN6S234C62v8Ev();
extern void _ZN6S234C62v9Ev();
extern void _ZN6S234C63v10Ev();
extern void _ZN6S234C63v11Ev();
extern void _ZN6S234C63v12Ev();
extern void _ZN6S234C63v13Ev();
extern void _ZN6S234C63v14Ev();
extern void _ZN6S234C63v15Ev();
extern void _ZN6S234C63v16Ev();
extern void _ZN6S234C63v17Ev();
extern void _ZN6S234C63v18Ev();
extern void _ZN6S234C63v19Ev();
extern void _ZN6S234C63v20Ev();
extern void _ZN6S234C63v21Ev();
extern void _ZN6S234C63v22Ev();
extern void _ZN6S234C63v23Ev();
extern void _ZN6S234C63v24Ev();
extern void _ZN6S234C63v25Ev();
extern void _ZN6S234C63v26Ev();
extern void _ZN6S234C63v27Ev();
extern void _ZN6S234C63v28Ev();
extern void _ZN6S234C63v29Ev();
extern void _ZN6S234C63v30Ev();
extern void _ZN6S234C63v31Ev();
extern void _ZN6S234C63v32Ev();
extern void _ZN6S234C63v33Ev();
extern void _ZN6S234C63v34Ev();
extern void _ZN6S234C63v35Ev();
extern void _ZN6S234C63v36Ev();
extern void _ZN6S234C63v37Ev();
extern void _ZN6S234C63v38Ev();
extern void _ZN6S234C63v39Ev();
extern void _ZN6S234C63v40Ev();
extern void _ZN6S234C63v41Ev();
extern void _ZN6S234C63v42Ev();
extern void _ZN6S234C63v43Ev();
extern void _ZN6S234C63v44Ev();
extern void _ZN6S234C63v45Ev();
extern void _ZN6S234C63v46Ev();
extern void _ZN6S234C63v47Ev();
extern void _ZN6S234C63v48Ev();
extern void _ZN6S234C63v49Ev();
extern void _ZN6S234C63v50Ev();
extern void _ZN6S234C63v51Ev();
extern void _ZN6S234C63v52Ev();
extern void _ZN6S234C63v53Ev();
extern void _ZN6S234C63v54Ev();
extern void _ZN6S234C63v55Ev();
extern void _ZN6S234C63v56Ev();
extern void _ZN6S234C63v57Ev();
extern void _ZN6S234C63v58Ev();
extern void _ZN6S234C63v59Ev();
extern void _ZN6S234C63v60Ev();
extern void _ZN6S234C63v61Ev();
extern void _ZN6S234C63v62Ev();
extern void _ZN6S234C63v63Ev();
extern void _ZN6S234C63v64Ev();
extern void _ZN6S234C63v65Ev();
extern void _ZN6S234C63v66Ev();
extern void _ZN6S234C63v67Ev();
extern void _ZN6S234C63v68Ev();
extern void _ZN6S234C53v69Ev();
extern void _ZN6S234C53v70Ev();
extern void _ZN6S234C53v71Ev();
extern void _ZN6S234C53v72Ev();
extern void _ZN6S234C53v73Ev();
extern void _ZN6S234C53v74Ev();
extern void _ZN6S234C53v75Ev();
extern void _ZN6S234C53v76Ev();
extern void _ZN6S234C53v77Ev();
extern void _ZN6S234C53v78Ev();
extern void _ZN6S234C53v79Ev();
extern void _ZN6S234C53v80Ev();
extern void _ZN6S234C53v81Ev();
extern void _ZN6S234C53v82Ev();
extern void _ZN6S234C53v83Ev();
extern void _ZN6S234C53v84Ev();
extern void _ZN6S234C53v85Ev();
extern void _ZN6S234C53v86Ev();
extern void _ZN6S234C53v87Ev();
extern void _ZN6S234C53v88Ev();
extern void _ZN6S234C53v89Ev();
extern void _ZN6S234C53v90Ev();
extern void _ZN6S234C53v91Ev();
extern void _ZN6S234C53v92Ev();
extern void _ZN6S234C53v93Ev();
extern void _ZN6S234C53v94Ev();
extern void _ZN6S234C53v95Ev();
extern void _ZN6S234C43v96Ev();
extern void _ZN6S234C43v97Ev();
extern void _ZN6S234C43v98Ev();
extern void _ZN6S234C43v99Ev();
extern void _ZN6S234C44v100Ev();
extern void _ZN6S234C44v101Ev();
extern void _ZN6S234C44v102Ev();
extern void _ZN6S234C44v103Ev();
extern void _ZN6S234C44v104Ev();
extern void _ZN6S234C44v105Ev();
extern void _ZN6S234C44v106Ev();
extern void _ZN6S234C44v107Ev();
extern void _ZN6S234C44v108Ev();
extern void _ZN6S234C44v109Ev();
extern void _ZN6S234C44v110Ev();
extern void _ZN6S234C44v111Ev();
extern void _ZN6S234C44v112Ev();
extern void _ZN6S234C44v113Ev();
extern void _ZN6S234C34v114Ev();
extern void _ZN6S234C34v115Ev();
extern void _ZN6S234C34v116Ev();
extern void _ZN6S234C34v117Ev();
extern void _ZN6S234C34v118Ev();
extern void _ZN6S234C34v119Ev();
extern void _ZN6S234C34v120Ev();
static  VTBL_ENTRY vtc_S234C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S234C3[0]),
  (VTBL_ENTRY)&_ZN6S234C3D1Ev,
  (VTBL_ENTRY)&_ZN6S234C3D0Ev,
  (VTBL_ENTRY)&_ZN6S234C62v5Ev,
  (VTBL_ENTRY)&_ZN6S234C62v6Ev,
  (VTBL_ENTRY)&_ZN6S234C62v7Ev,
  (VTBL_ENTRY)&_ZN6S234C62v8Ev,
  (VTBL_ENTRY)&_ZN6S234C62v9Ev,
  (VTBL_ENTRY)&_ZN6S234C63v10Ev,
  (VTBL_ENTRY)&_ZN6S234C63v11Ev,
  (VTBL_ENTRY)&_ZN6S234C63v12Ev,
  (VTBL_ENTRY)&_ZN6S234C63v13Ev,
  (VTBL_ENTRY)&_ZN6S234C63v14Ev,
  (VTBL_ENTRY)&_ZN6S234C63v15Ev,
  (VTBL_ENTRY)&_ZN6S234C63v16Ev,
  (VTBL_ENTRY)&_ZN6S234C63v17Ev,
  (VTBL_ENTRY)&_ZN6S234C63v18Ev,
  (VTBL_ENTRY)&_ZN6S234C63v19Ev,
  (VTBL_ENTRY)&_ZN6S234C63v20Ev,
  (VTBL_ENTRY)&_ZN6S234C63v21Ev,
  (VTBL_ENTRY)&_ZN6S234C63v22Ev,
  (VTBL_ENTRY)&_ZN6S234C63v23Ev,
  (VTBL_ENTRY)&_ZN6S234C63v24Ev,
  (VTBL_ENTRY)&_ZN6S234C63v25Ev,
  (VTBL_ENTRY)&_ZN6S234C63v26Ev,
  (VTBL_ENTRY)&_ZN6S234C63v27Ev,
  (VTBL_ENTRY)&_ZN6S234C63v28Ev,
  (VTBL_ENTRY)&_ZN6S234C63v29Ev,
  (VTBL_ENTRY)&_ZN6S234C63v30Ev,
  (VTBL_ENTRY)&_ZN6S234C63v31Ev,
  (VTBL_ENTRY)&_ZN6S234C63v32Ev,
  (VTBL_ENTRY)&_ZN6S234C63v33Ev,
  (VTBL_ENTRY)&_ZN6S234C63v34Ev,
  (VTBL_ENTRY)&_ZN6S234C63v35Ev,
  (VTBL_ENTRY)&_ZN6S234C63v36Ev,
  (VTBL_ENTRY)&_ZN6S234C63v37Ev,
  (VTBL_ENTRY)&_ZN6S234C63v38Ev,
  (VTBL_ENTRY)&_ZN6S234C63v39Ev,
  (VTBL_ENTRY)&_ZN6S234C63v40Ev,
  (VTBL_ENTRY)&_ZN6S234C63v41Ev,
  (VTBL_ENTRY)&_ZN6S234C63v42Ev,
  (VTBL_ENTRY)&_ZN6S234C63v43Ev,
  (VTBL_ENTRY)&_ZN6S234C63v44Ev,
  (VTBL_ENTRY)&_ZN6S234C63v45Ev,
  (VTBL_ENTRY)&_ZN6S234C63v46Ev,
  (VTBL_ENTRY)&_ZN6S234C63v47Ev,
  (VTBL_ENTRY)&_ZN6S234C63v48Ev,
  (VTBL_ENTRY)&_ZN6S234C63v49Ev,
  (VTBL_ENTRY)&_ZN6S234C63v50Ev,
  (VTBL_ENTRY)&_ZN6S234C63v51Ev,
  (VTBL_ENTRY)&_ZN6S234C63v52Ev,
  (VTBL_ENTRY)&_ZN6S234C63v53Ev,
  (VTBL_ENTRY)&_ZN6S234C63v54Ev,
  (VTBL_ENTRY)&_ZN6S234C63v55Ev,
  (VTBL_ENTRY)&_ZN6S234C63v56Ev,
  (VTBL_ENTRY)&_ZN6S234C63v57Ev,
  (VTBL_ENTRY)&_ZN6S234C63v58Ev,
  (VTBL_ENTRY)&_ZN6S234C63v59Ev,
  (VTBL_ENTRY)&_ZN6S234C63v60Ev,
  (VTBL_ENTRY)&_ZN6S234C63v61Ev,
  (VTBL_ENTRY)&_ZN6S234C63v62Ev,
  (VTBL_ENTRY)&_ZN6S234C63v63Ev,
  (VTBL_ENTRY)&_ZN6S234C63v64Ev,
  (VTBL_ENTRY)&_ZN6S234C63v65Ev,
  (VTBL_ENTRY)&_ZN6S234C63v66Ev,
  (VTBL_ENTRY)&_ZN6S234C63v67Ev,
  (VTBL_ENTRY)&_ZN6S234C63v68Ev,
  (VTBL_ENTRY)&_ZN6S234C53v69Ev,
  (VTBL_ENTRY)&_ZN6S234C53v70Ev,
  (VTBL_ENTRY)&_ZN6S234C53v71Ev,
  (VTBL_ENTRY)&_ZN6S234C53v72Ev,
  (VTBL_ENTRY)&_ZN6S234C53v73Ev,
  (VTBL_ENTRY)&_ZN6S234C53v74Ev,
  (VTBL_ENTRY)&_ZN6S234C53v75Ev,
  (VTBL_ENTRY)&_ZN6S234C53v76Ev,
  (VTBL_ENTRY)&_ZN6S234C53v77Ev,
  (VTBL_ENTRY)&_ZN6S234C53v78Ev,
  (VTBL_ENTRY)&_ZN6S234C53v79Ev,
  (VTBL_ENTRY)&_ZN6S234C53v80Ev,
  (VTBL_ENTRY)&_ZN6S234C53v81Ev,
  (VTBL_ENTRY)&_ZN6S234C53v82Ev,
  (VTBL_ENTRY)&_ZN6S234C53v83Ev,
  (VTBL_ENTRY)&_ZN6S234C53v84Ev,
  (VTBL_ENTRY)&_ZN6S234C53v85Ev,
  (VTBL_ENTRY)&_ZN6S234C53v86Ev,
  (VTBL_ENTRY)&_ZN6S234C53v87Ev,
  (VTBL_ENTRY)&_ZN6S234C53v88Ev,
  (VTBL_ENTRY)&_ZN6S234C53v89Ev,
  (VTBL_ENTRY)&_ZN6S234C53v90Ev,
  (VTBL_ENTRY)&_ZN6S234C53v91Ev,
  (VTBL_ENTRY)&_ZN6S234C53v92Ev,
  (VTBL_ENTRY)&_ZN6S234C53v93Ev,
  (VTBL_ENTRY)&_ZN6S234C53v94Ev,
  (VTBL_ENTRY)&_ZN6S234C53v95Ev,
  (VTBL_ENTRY)&_ZN6S234C43v96Ev,
  (VTBL_ENTRY)&_ZN6S234C43v97Ev,
  (VTBL_ENTRY)&_ZN6S234C43v98Ev,
  (VTBL_ENTRY)&_ZN6S234C43v99Ev,
  (VTBL_ENTRY)&_ZN6S234C44v100Ev,
  (VTBL_ENTRY)&_ZN6S234C44v101Ev,
  (VTBL_ENTRY)&_ZN6S234C44v102Ev,
  (VTBL_ENTRY)&_ZN6S234C44v103Ev,
  (VTBL_ENTRY)&_ZN6S234C44v104Ev,
  (VTBL_ENTRY)&_ZN6S234C44v105Ev,
  (VTBL_ENTRY)&_ZN6S234C44v106Ev,
  (VTBL_ENTRY)&_ZN6S234C44v107Ev,
  (VTBL_ENTRY)&_ZN6S234C44v108Ev,
  (VTBL_ENTRY)&_ZN6S234C44v109Ev,
  (VTBL_ENTRY)&_ZN6S234C44v110Ev,
  (VTBL_ENTRY)&_ZN6S234C44v111Ev,
  (VTBL_ENTRY)&_ZN6S234C44v112Ev,
  (VTBL_ENTRY)&_ZN6S234C44v113Ev,
  (VTBL_ENTRY)&_ZN6S234C34v114Ev,
  (VTBL_ENTRY)&_ZN6S234C34v115Ev,
  (VTBL_ENTRY)&_ZN6S234C34v116Ev,
  (VTBL_ENTRY)&_ZN6S234C34v117Ev,
  (VTBL_ENTRY)&_ZN6S234C34v118Ev,
  (VTBL_ENTRY)&_ZN6S234C34v119Ev,
  (VTBL_ENTRY)&_ZN6S234C34v120Ev,
};
extern VTBL_ENTRY _ZTI6S234C3[];
extern  VTBL_ENTRY _ZTV6S234C3[];
Class_Descriptor cd_S234C3 = {  "S234C3", // class name
  bases_S234C3, 3,
  &(vtc_S234C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,208), // object size
  NSPAIRA(_ZTI6S234C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S234C3),120, //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  S234C2  : S234C3 {
  unsigned int s234c2f0:1;
  ::S165C27 s234c2f1;
  ::S165C25 s234c2f2;
  ::S165C20 s234c2f3;
  virtual  ~S234C2(); // _ZN6S234C2D1Ev
  virtual void  v121(); // _ZN6S234C24v121Ev
  virtual void  v122(); // _ZN6S234C24v122Ev
  virtual void  v123(); // _ZN6S234C24v123Ev
  virtual void  v124(); // _ZN6S234C24v124Ev
  virtual void  v125(); // _ZN6S234C24v125Ev
  virtual void  v126(); // _ZN6S234C24v126Ev
  S234C2(); // tgen
};
//SIG(-1 S234C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v93 v94 v95 v96 v97 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC15{ BC16{ BC9}} Fi:1} vd v116 v117 v118 v119 v120 v121 v122 Fi[3]} vd v1 v2 v3 v4 v5 v6 Fi:1 FC17{ BC18{ BC9}} FC19{ BC20{ BC9}} FC21{ BC22{ BC9}}}


 S234C2 ::~S234C2(){ note_dtor("S234C2", this);}
void  S234C2 ::v121(){vfunc_called(this, "_ZN6S234C24v121Ev");}
void  S234C2 ::v122(){vfunc_called(this, "_ZN6S234C24v122Ev");}
void  S234C2 ::v123(){vfunc_called(this, "_ZN6S234C24v123Ev");}
void  S234C2 ::v124(){vfunc_called(this, "_ZN6S234C24v124Ev");}
void  S234C2 ::v125(){vfunc_called(this, "_ZN6S234C24v125Ev");}
void  S234C2 ::v126(){vfunc_called(this, "_ZN6S234C24v126Ev");}
S234C2 ::S234C2(){ note_ctor("S234C2", this);} // tgen

static void Test_S234C2()
{
  extern Class_Descriptor cd_S234C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,63)];
    init_test(&cd_S234C2, buf);
    S234C2 *dp, &lv = *(dp=new (buf) S234C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,248), "sizeof(S234C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S234C2)");
    check_base_class_offset(lv, (S234C6*)(S234C5*)(S234C4*)(S234C3*), 0, "S234C2");
    check_base_class_offset(lv, (S234C5*)(S234C4*)(S234C3*), 0, "S234C2");
    check_base_class_offset(lv, (S234C4*)(S234C3*), 0, "S234C2");
    check_base_class_offset(lv, (S234C3*), 0, "S234C2");
    set_bf_and_test(lv, s234c2f0, ABISELECT(264,208), 0, 1, 1, "S234C2");
    check_field_offset(lv, s234c2f1, ABISELECT(272,212), "S234C2.s234c2f1");
    check_field_offset(lv, s234c2f2, ABISELECT(288,224), "S234C2.s234c2f2");
    check_field_offset(lv, s234c2f3, ABISELECT(304,236), "S234C2.s234c2f3");
    test_class_info(&lv, &cd_S234C2);
    dp->~S234C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS234C2(Test_S234C2, "S234C2", ABISELECT(320,248));

#else // __cplusplus

extern void _ZN6S234C2C1Ev();
extern void _ZN6S234C2D1Ev();
Name_Map name_map_S234C2[] = {
  NSPAIR(_ZN6S234C2C1Ev),
  NSPAIR(_ZN6S234C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S234C6;
extern VTBL_ENTRY _ZTI6S234C6[];
extern  VTBL_ENTRY _ZTV6S234C6[];
extern Class_Descriptor cd_S234C5;
extern VTBL_ENTRY _ZTI6S234C5[];
extern  VTBL_ENTRY _ZTV6S234C5[];
extern Class_Descriptor cd_S234C4;
extern VTBL_ENTRY _ZTI6S234C4[];
extern  VTBL_ENTRY _ZTV6S234C4[];
extern Class_Descriptor cd_S234C3;
extern VTBL_ENTRY _ZTI6S234C3[];
extern  VTBL_ENTRY _ZTV6S234C3[];
static Base_Class bases_S234C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S234C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S234C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S234C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S234C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S234C2[];
extern void _ZN6S234C2D1Ev();
extern void _ZN6S234C2D0Ev();
extern void _ZN6S234C62v5Ev();
extern void _ZN6S234C62v6Ev();
extern void _ZN6S234C62v7Ev();
extern void _ZN6S234C62v8Ev();
extern void _ZN6S234C62v9Ev();
extern void _ZN6S234C63v10Ev();
extern void _ZN6S234C63v11Ev();
extern void _ZN6S234C63v12Ev();
extern void _ZN6S234C63v13Ev();
extern void _ZN6S234C63v14Ev();
extern void _ZN6S234C63v15Ev();
extern void _ZN6S234C63v16Ev();
extern void _ZN6S234C63v17Ev();
extern void _ZN6S234C63v18Ev();
extern void _ZN6S234C63v19Ev();
extern void _ZN6S234C63v20Ev();
extern void _ZN6S234C63v21Ev();
extern void _ZN6S234C63v22Ev();
extern void _ZN6S234C63v23Ev();
extern void _ZN6S234C63v24Ev();
extern void _ZN6S234C63v25Ev();
extern void _ZN6S234C63v26Ev();
extern void _ZN6S234C63v27Ev();
extern void _ZN6S234C63v28Ev();
extern void _ZN6S234C63v29Ev();
extern void _ZN6S234C63v30Ev();
extern void _ZN6S234C63v31Ev();
extern void _ZN6S234C63v32Ev();
extern void _ZN6S234C63v33Ev();
extern void _ZN6S234C63v34Ev();
extern void _ZN6S234C63v35Ev();
extern void _ZN6S234C63v36Ev();
extern void _ZN6S234C63v37Ev();
extern void _ZN6S234C63v38Ev();
extern void _ZN6S234C63v39Ev();
extern void _ZN6S234C63v40Ev();
extern void _ZN6S234C63v41Ev();
extern void _ZN6S234C63v42Ev();
extern void _ZN6S234C63v43Ev();
extern void _ZN6S234C63v44Ev();
extern void _ZN6S234C63v45Ev();
extern void _ZN6S234C63v46Ev();
extern void _ZN6S234C63v47Ev();
extern void _ZN6S234C63v48Ev();
extern void _ZN6S234C63v49Ev();
extern void _ZN6S234C63v50Ev();
extern void _ZN6S234C63v51Ev();
extern void _ZN6S234C63v52Ev();
extern void _ZN6S234C63v53Ev();
extern void _ZN6S234C63v54Ev();
extern void _ZN6S234C63v55Ev();
extern void _ZN6S234C63v56Ev();
extern void _ZN6S234C63v57Ev();
extern void _ZN6S234C63v58Ev();
extern void _ZN6S234C63v59Ev();
extern void _ZN6S234C63v60Ev();
extern void _ZN6S234C63v61Ev();
extern void _ZN6S234C63v62Ev();
extern void _ZN6S234C63v63Ev();
extern void _ZN6S234C63v64Ev();
extern void _ZN6S234C63v65Ev();
extern void _ZN6S234C63v66Ev();
extern void _ZN6S234C63v67Ev();
extern void _ZN6S234C63v68Ev();
extern void _ZN6S234C53v69Ev();
extern void _ZN6S234C53v70Ev();
extern void _ZN6S234C53v71Ev();
extern void _ZN6S234C53v72Ev();
extern void _ZN6S234C53v73Ev();
extern void _ZN6S234C53v74Ev();
extern void _ZN6S234C53v75Ev();
extern void _ZN6S234C53v76Ev();
extern void _ZN6S234C53v77Ev();
extern void _ZN6S234C53v78Ev();
extern void _ZN6S234C53v79Ev();
extern void _ZN6S234C53v80Ev();
extern void _ZN6S234C53v81Ev();
extern void _ZN6S234C53v82Ev();
extern void _ZN6S234C53v83Ev();
extern void _ZN6S234C53v84Ev();
extern void _ZN6S234C53v85Ev();
extern void _ZN6S234C53v86Ev();
extern void _ZN6S234C53v87Ev();
extern void _ZN6S234C53v88Ev();
extern void _ZN6S234C53v89Ev();
extern void _ZN6S234C53v90Ev();
extern void _ZN6S234C53v91Ev();
extern void _ZN6S234C53v92Ev();
extern void _ZN6S234C53v93Ev();
extern void _ZN6S234C53v94Ev();
extern void _ZN6S234C53v95Ev();
extern void _ZN6S234C43v96Ev();
extern void _ZN6S234C43v97Ev();
extern void _ZN6S234C43v98Ev();
extern void _ZN6S234C43v99Ev();
extern void _ZN6S234C44v100Ev();
extern void _ZN6S234C44v101Ev();
extern void _ZN6S234C44v102Ev();
extern void _ZN6S234C44v103Ev();
extern void _ZN6S234C44v104Ev();
extern void _ZN6S234C44v105Ev();
extern void _ZN6S234C44v106Ev();
extern void _ZN6S234C44v107Ev();
extern void _ZN6S234C44v108Ev();
extern void _ZN6S234C44v109Ev();
extern void _ZN6S234C44v110Ev();
extern void _ZN6S234C44v111Ev();
extern void _ZN6S234C44v112Ev();
extern void _ZN6S234C44v113Ev();
extern void _ZN6S234C34v114Ev();
extern void _ZN6S234C34v115Ev();
extern void _ZN6S234C34v116Ev();
extern void _ZN6S234C34v117Ev();
extern void _ZN6S234C34v118Ev();
extern void _ZN6S234C34v119Ev();
extern void _ZN6S234C34v120Ev();
extern void _ZN6S234C24v121Ev();
extern void _ZN6S234C24v122Ev();
extern void _ZN6S234C24v123Ev();
extern void _ZN6S234C24v124Ev();
extern void _ZN6S234C24v125Ev();
extern void _ZN6S234C24v126Ev();
static  VTBL_ENTRY vtc_S234C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S234C2[0]),
  (VTBL_ENTRY)&_ZN6S234C2D1Ev,
  (VTBL_ENTRY)&_ZN6S234C2D0Ev,
  (VTBL_ENTRY)&_ZN6S234C62v5Ev,
  (VTBL_ENTRY)&_ZN6S234C62v6Ev,
  (VTBL_ENTRY)&_ZN6S234C62v7Ev,
  (VTBL_ENTRY)&_ZN6S234C62v8Ev,
  (VTBL_ENTRY)&_ZN6S234C62v9Ev,
  (VTBL_ENTRY)&_ZN6S234C63v10Ev,
  (VTBL_ENTRY)&_ZN6S234C63v11Ev,
  (VTBL_ENTRY)&_ZN6S234C63v12Ev,
  (VTBL_ENTRY)&_ZN6S234C63v13Ev,
  (VTBL_ENTRY)&_ZN6S234C63v14Ev,
  (VTBL_ENTRY)&_ZN6S234C63v15Ev,
  (VTBL_ENTRY)&_ZN6S234C63v16Ev,
  (VTBL_ENTRY)&_ZN6S234C63v17Ev,
  (VTBL_ENTRY)&_ZN6S234C63v18Ev,
  (VTBL_ENTRY)&_ZN6S234C63v19Ev,
  (VTBL_ENTRY)&_ZN6S234C63v20Ev,
  (VTBL_ENTRY)&_ZN6S234C63v21Ev,
  (VTBL_ENTRY)&_ZN6S234C63v22Ev,
  (VTBL_ENTRY)&_ZN6S234C63v23Ev,
  (VTBL_ENTRY)&_ZN6S234C63v24Ev,
  (VTBL_ENTRY)&_ZN6S234C63v25Ev,
  (VTBL_ENTRY)&_ZN6S234C63v26Ev,
  (VTBL_ENTRY)&_ZN6S234C63v27Ev,
  (VTBL_ENTRY)&_ZN6S234C63v28Ev,
  (VTBL_ENTRY)&_ZN6S234C63v29Ev,
  (VTBL_ENTRY)&_ZN6S234C63v30Ev,
  (VTBL_ENTRY)&_ZN6S234C63v31Ev,
  (VTBL_ENTRY)&_ZN6S234C63v32Ev,
  (VTBL_ENTRY)&_ZN6S234C63v33Ev,
  (VTBL_ENTRY)&_ZN6S234C63v34Ev,
  (VTBL_ENTRY)&_ZN6S234C63v35Ev,
  (VTBL_ENTRY)&_ZN6S234C63v36Ev,
  (VTBL_ENTRY)&_ZN6S234C63v37Ev,
  (VTBL_ENTRY)&_ZN6S234C63v38Ev,
  (VTBL_ENTRY)&_ZN6S234C63v39Ev,
  (VTBL_ENTRY)&_ZN6S234C63v40Ev,
  (VTBL_ENTRY)&_ZN6S234C63v41Ev,
  (VTBL_ENTRY)&_ZN6S234C63v42Ev,
  (VTBL_ENTRY)&_ZN6S234C63v43Ev,
  (VTBL_ENTRY)&_ZN6S234C63v44Ev,
  (VTBL_ENTRY)&_ZN6S234C63v45Ev,
  (VTBL_ENTRY)&_ZN6S234C63v46Ev,
  (VTBL_ENTRY)&_ZN6S234C63v47Ev,
  (VTBL_ENTRY)&_ZN6S234C63v48Ev,
  (VTBL_ENTRY)&_ZN6S234C63v49Ev,
  (VTBL_ENTRY)&_ZN6S234C63v50Ev,
  (VTBL_ENTRY)&_ZN6S234C63v51Ev,
  (VTBL_ENTRY)&_ZN6S234C63v52Ev,
  (VTBL_ENTRY)&_ZN6S234C63v53Ev,
  (VTBL_ENTRY)&_ZN6S234C63v54Ev,
  (VTBL_ENTRY)&_ZN6S234C63v55Ev,
  (VTBL_ENTRY)&_ZN6S234C63v56Ev,
  (VTBL_ENTRY)&_ZN6S234C63v57Ev,
  (VTBL_ENTRY)&_ZN6S234C63v58Ev,
  (VTBL_ENTRY)&_ZN6S234C63v59Ev,
  (VTBL_ENTRY)&_ZN6S234C63v60Ev,
  (VTBL_ENTRY)&_ZN6S234C63v61Ev,
  (VTBL_ENTRY)&_ZN6S234C63v62Ev,
  (VTBL_ENTRY)&_ZN6S234C63v63Ev,
  (VTBL_ENTRY)&_ZN6S234C63v64Ev,
  (VTBL_ENTRY)&_ZN6S234C63v65Ev,
  (VTBL_ENTRY)&_ZN6S234C63v66Ev,
  (VTBL_ENTRY)&_ZN6S234C63v67Ev,
  (VTBL_ENTRY)&_ZN6S234C63v68Ev,
  (VTBL_ENTRY)&_ZN6S234C53v69Ev,
  (VTBL_ENTRY)&_ZN6S234C53v70Ev,
  (VTBL_ENTRY)&_ZN6S234C53v71Ev,
  (VTBL_ENTRY)&_ZN6S234C53v72Ev,
  (VTBL_ENTRY)&_ZN6S234C53v73Ev,
  (VTBL_ENTRY)&_ZN6S234C53v74Ev,
  (VTBL_ENTRY)&_ZN6S234C53v75Ev,
  (VTBL_ENTRY)&_ZN6S234C53v76Ev,
  (VTBL_ENTRY)&_ZN6S234C53v77Ev,
  (VTBL_ENTRY)&_ZN6S234C53v78Ev,
  (VTBL_ENTRY)&_ZN6S234C53v79Ev,
  (VTBL_ENTRY)&_ZN6S234C53v80Ev,
  (VTBL_ENTRY)&_ZN6S234C53v81Ev,
  (VTBL_ENTRY)&_ZN6S234C53v82Ev,
  (VTBL_ENTRY)&_ZN6S234C53v83Ev,
  (VTBL_ENTRY)&_ZN6S234C53v84Ev,
  (VTBL_ENTRY)&_ZN6S234C53v85Ev,
  (VTBL_ENTRY)&_ZN6S234C53v86Ev,
  (VTBL_ENTRY)&_ZN6S234C53v87Ev,
  (VTBL_ENTRY)&_ZN6S234C53v88Ev,
  (VTBL_ENTRY)&_ZN6S234C53v89Ev,
  (VTBL_ENTRY)&_ZN6S234C53v90Ev,
  (VTBL_ENTRY)&_ZN6S234C53v91Ev,
  (VTBL_ENTRY)&_ZN6S234C53v92Ev,
  (VTBL_ENTRY)&_ZN6S234C53v93Ev,
  (VTBL_ENTRY)&_ZN6S234C53v94Ev,
  (VTBL_ENTRY)&_ZN6S234C53v95Ev,
  (VTBL_ENTRY)&_ZN6S234C43v96Ev,
  (VTBL_ENTRY)&_ZN6S234C43v97Ev,
  (VTBL_ENTRY)&_ZN6S234C43v98Ev,
  (VTBL_ENTRY)&_ZN6S234C43v99Ev,
  (VTBL_ENTRY)&_ZN6S234C44v100Ev,
  (VTBL_ENTRY)&_ZN6S234C44v101Ev,
  (VTBL_ENTRY)&_ZN6S234C44v102Ev,
  (VTBL_ENTRY)&_ZN6S234C44v103Ev,
  (VTBL_ENTRY)&_ZN6S234C44v104Ev,
  (VTBL_ENTRY)&_ZN6S234C44v105Ev,
  (VTBL_ENTRY)&_ZN6S234C44v106Ev,
  (VTBL_ENTRY)&_ZN6S234C44v107Ev,
  (VTBL_ENTRY)&_ZN6S234C44v108Ev,
  (VTBL_ENTRY)&_ZN6S234C44v109Ev,
  (VTBL_ENTRY)&_ZN6S234C44v110Ev,
  (VTBL_ENTRY)&_ZN6S234C44v111Ev,
  (VTBL_ENTRY)&_ZN6S234C44v112Ev,
  (VTBL_ENTRY)&_ZN6S234C44v113Ev,
  (VTBL_ENTRY)&_ZN6S234C34v114Ev,
  (VTBL_ENTRY)&_ZN6S234C34v115Ev,
  (VTBL_ENTRY)&_ZN6S234C34v116Ev,
  (VTBL_ENTRY)&_ZN6S234C34v117Ev,
  (VTBL_ENTRY)&_ZN6S234C34v118Ev,
  (VTBL_ENTRY)&_ZN6S234C34v119Ev,
  (VTBL_ENTRY)&_ZN6S234C34v120Ev,
  (VTBL_ENTRY)&_ZN6S234C24v121Ev,
  (VTBL_ENTRY)&_ZN6S234C24v122Ev,
  (VTBL_ENTRY)&_ZN6S234C24v123Ev,
  (VTBL_ENTRY)&_ZN6S234C24v124Ev,
  (VTBL_ENTRY)&_ZN6S234C24v125Ev,
  (VTBL_ENTRY)&_ZN6S234C24v126Ev,
};
extern VTBL_ENTRY _ZTI6S234C2[];
extern  VTBL_ENTRY _ZTV6S234C2[];
Class_Descriptor cd_S234C2 = {  "S234C2", // class name
  bases_S234C2, 4,
  &(vtc_S234C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,248), // object size
  NSPAIRA(_ZTI6S234C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S234C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S234C1  : S234C2 {
  void *s234c1f0;
  virtual  ~S234C1(); // _ZN6S234C1D1Ev
  virtual void  v1(); // _ZN6S234C12v1Ev
  virtual void  v2(); // _ZN6S234C12v2Ev
  virtual void  v3(); // _ZN6S234C12v3Ev
  virtual void  v4(); // _ZN6S234C12v4Ev
  S234C1(); // tgen
};
//SIG(1 S234C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 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 FC7{ 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 v91 v92 v93 v94 v95 Fp FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC7 FC11{ BC12{ BC10}} FC13{ m FC14{ m Fi[4]} FC15{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 FC16{ BC17{ BC10}} Fi:1} vd v114 v115 v116 v117 v118 v119 v120 Fi[3]} vd v121 v122 v123 v124 v125 v126 Fi:1 FC18{ BC19{ BC10}} FC20{ BC21{ BC10}} FC22{ BC23{ BC10}}} vd v1 v2 v3 v4 Fp}


 S234C1 ::~S234C1(){ note_dtor("S234C1", this);}
void  S234C1 ::v1(){vfunc_called(this, "_ZN6S234C12v1Ev");}
void  S234C1 ::v2(){vfunc_called(this, "_ZN6S234C12v2Ev");}
void  S234C1 ::v3(){vfunc_called(this, "_ZN6S234C12v3Ev");}
void  S234C1 ::v4(){vfunc_called(this, "_ZN6S234C12v4Ev");}
S234C1 ::S234C1(){ note_ctor("S234C1", this);} // tgen

static void Test_S234C1()
{
  extern Class_Descriptor cd_S234C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,64)];
    init_test(&cd_S234C1, buf);
    S234C1 *dp, &lv = *(dp=new (buf) S234C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,252), "sizeof(S234C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S234C1)");
    check_base_class_offset(lv, (S234C6*)(S234C5*)(S234C4*)(S234C3*)(S234C2*), 0, "S234C1");
    check_base_class_offset(lv, (S234C5*)(S234C4*)(S234C3*)(S234C2*), 0, "S234C1");
    check_base_class_offset(lv, (S234C4*)(S234C3*)(S234C2*), 0, "S234C1");
    check_base_class_offset(lv, (S234C3*)(S234C2*), 0, "S234C1");
    check_base_class_offset(lv, (S234C2*), 0, "S234C1");
    check_field_offset(lv, s234c1f0, ABISELECT(320,248), "S234C1.s234c1f0");
    test_class_info(&lv, &cd_S234C1);
    dp->~S234C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS234C1(Test_S234C1, "S234C1", ABISELECT(328,252));

#else // __cplusplus

extern void _ZN6S234C1C1Ev();
extern void _ZN6S234C1D1Ev();
Name_Map name_map_S234C1[] = {
  NSPAIR(_ZN6S234C1C1Ev),
  NSPAIR(_ZN6S234C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S234C6;
extern VTBL_ENTRY _ZTI6S234C6[];
extern  VTBL_ENTRY _ZTV6S234C6[];
extern Class_Descriptor cd_S234C5;
extern VTBL_ENTRY _ZTI6S234C5[];
extern  VTBL_ENTRY _ZTV6S234C5[];
extern Class_Descriptor cd_S234C4;
extern VTBL_ENTRY _ZTI6S234C4[];
extern  VTBL_ENTRY _ZTV6S234C4[];
extern Class_Descriptor cd_S234C3;
extern VTBL_ENTRY _ZTI6S234C3[];
extern  VTBL_ENTRY _ZTV6S234C3[];
extern Class_Descriptor cd_S234C2;
extern VTBL_ENTRY _ZTI6S234C2[];
extern  VTBL_ENTRY _ZTV6S234C2[];
static Base_Class bases_S234C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S234C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S234C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S234C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S234C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S234C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S234C1[];
extern void _ZN6S234C1D1Ev();
extern void _ZN6S234C1D0Ev();
extern void _ZN6S234C62v5Ev();
extern void _ZN6S234C62v6Ev();
extern void _ZN6S234C62v7Ev();
extern void _ZN6S234C62v8Ev();
extern void _ZN6S234C62v9Ev();
extern void _ZN6S234C63v10Ev();
extern void _ZN6S234C63v11Ev();
extern void _ZN6S234C63v12Ev();
extern void _ZN6S234C63v13Ev();
extern void _ZN6S234C63v14Ev();
extern void _ZN6S234C63v15Ev();
extern void _ZN6S234C63v16Ev();
extern void _ZN6S234C63v17Ev();
extern void _ZN6S234C63v18Ev();
extern void _ZN6S234C63v19Ev();
extern void _ZN6S234C63v20Ev();
extern void _ZN6S234C63v21Ev();
extern void _ZN6S234C63v22Ev();
extern void _ZN6S234C63v23Ev();
extern void _ZN6S234C63v24Ev();
extern void _ZN6S234C63v25Ev();
extern void _ZN6S234C63v26Ev();
extern void _ZN6S234C63v27Ev();
extern void _ZN6S234C63v28Ev();
extern void _ZN6S234C63v29Ev();
extern void _ZN6S234C63v30Ev();
extern void _ZN6S234C63v31Ev();
extern void _ZN6S234C63v32Ev();
extern void _ZN6S234C63v33Ev();
extern void _ZN6S234C63v34Ev();
extern void _ZN6S234C63v35Ev();
extern void _ZN6S234C63v36Ev();
extern void _ZN6S234C63v37Ev();
extern void _ZN6S234C63v38Ev();
extern void _ZN6S234C63v39Ev();
extern void _ZN6S234C63v40Ev();
extern void _ZN6S234C63v41Ev();
extern void _ZN6S234C63v42Ev();
extern void _ZN6S234C63v43Ev();
extern void _ZN6S234C63v44Ev();
extern void _ZN6S234C63v45Ev();
extern void _ZN6S234C63v46Ev();
extern void _ZN6S234C63v47Ev();
extern void _ZN6S234C63v48Ev();
extern void _ZN6S234C63v49Ev();
extern void _ZN6S234C63v50Ev();
extern void _ZN6S234C63v51Ev();
extern void _ZN6S234C63v52Ev();
extern void _ZN6S234C63v53Ev();
extern void _ZN6S234C63v54Ev();
extern void _ZN6S234C63v55Ev();
extern void _ZN6S234C63v56Ev();
extern void _ZN6S234C63v57Ev();
extern void _ZN6S234C63v58Ev();
extern void _ZN6S234C63v59Ev();
extern void _ZN6S234C63v60Ev();
extern void _ZN6S234C63v61Ev();
extern void _ZN6S234C63v62Ev();
extern void _ZN6S234C63v63Ev();
extern void _ZN6S234C63v64Ev();
extern void _ZN6S234C63v65Ev();
extern void _ZN6S234C63v66Ev();
extern void _ZN6S234C63v67Ev();
extern void _ZN6S234C63v68Ev();
extern void _ZN6S234C53v69Ev();
extern void _ZN6S234C53v70Ev();
extern void _ZN6S234C53v71Ev();
extern void _ZN6S234C53v72Ev();
extern void _ZN6S234C53v73Ev();
extern void _ZN6S234C53v74Ev();
extern void _ZN6S234C53v75Ev();
extern void _ZN6S234C53v76Ev();
extern void _ZN6S234C53v77Ev();
extern void _ZN6S234C53v78Ev();
extern void _ZN6S234C53v79Ev();
extern void _ZN6S234C53v80Ev();
extern void _ZN6S234C53v81Ev();
extern void _ZN6S234C53v82Ev();
extern void _ZN6S234C53v83Ev();
extern void _ZN6S234C53v84Ev();
extern void _ZN6S234C53v85Ev();
extern void _ZN6S234C53v86Ev();
extern void _ZN6S234C53v87Ev();
extern void _ZN6S234C53v88Ev();
extern void _ZN6S234C53v89Ev();
extern void _ZN6S234C53v90Ev();
extern void _ZN6S234C53v91Ev();
extern void _ZN6S234C53v92Ev();
extern void _ZN6S234C53v93Ev();
extern void _ZN6S234C53v94Ev();
extern void _ZN6S234C53v95Ev();
extern void _ZN6S234C43v96Ev();
extern void _ZN6S234C43v97Ev();
extern void _ZN6S234C43v98Ev();
extern void _ZN6S234C43v99Ev();
extern void _ZN6S234C44v100Ev();
extern void _ZN6S234C44v101Ev();
extern void _ZN6S234C44v102Ev();
extern void _ZN6S234C44v103Ev();
extern void _ZN6S234C44v104Ev();
extern void _ZN6S234C44v105Ev();
extern void _ZN6S234C44v106Ev();
extern void _ZN6S234C44v107Ev();
extern void _ZN6S234C44v108Ev();
extern void _ZN6S234C44v109Ev();
extern void _ZN6S234C44v110Ev();
extern void _ZN6S234C44v111Ev();
extern void _ZN6S234C44v112Ev();
extern void _ZN6S234C44v113Ev();
extern void _ZN6S234C34v114Ev();
extern void _ZN6S234C34v115Ev();
extern void _ZN6S234C34v116Ev();
extern void _ZN6S234C34v117Ev();
extern void _ZN6S234C34v118Ev();
extern void _ZN6S234C34v119Ev();
extern void _ZN6S234C34v120Ev();
extern void _ZN6S234C24v121Ev();
extern void _ZN6S234C24v122Ev();
extern void _ZN6S234C24v123Ev();
extern void _ZN6S234C24v124Ev();
extern void _ZN6S234C24v125Ev();
extern void _ZN6S234C24v126Ev();
extern void _ZN6S234C12v1Ev();
extern void _ZN6S234C12v2Ev();
extern void _ZN6S234C12v3Ev();
extern void _ZN6S234C12v4Ev();
static  VTBL_ENTRY vtc_S234C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S234C1[0]),
  (VTBL_ENTRY)&_ZN6S234C1D1Ev,
  (VTBL_ENTRY)&_ZN6S234C1D0Ev,
  (VTBL_ENTRY)&_ZN6S234C62v5Ev,
  (VTBL_ENTRY)&_ZN6S234C62v6Ev,
  (VTBL_ENTRY)&_ZN6S234C62v7Ev,
  (VTBL_ENTRY)&_ZN6S234C62v8Ev,
  (VTBL_ENTRY)&_ZN6S234C62v9Ev,
  (VTBL_ENTRY)&_ZN6S234C63v10Ev,
  (VTBL_ENTRY)&_ZN6S234C63v11Ev,
  (VTBL_ENTRY)&_ZN6S234C63v12Ev,
  (VTBL_ENTRY)&_ZN6S234C63v13Ev,
  (VTBL_ENTRY)&_ZN6S234C63v14Ev,
  (VTBL_ENTRY)&_ZN6S234C63v15Ev,
  (VTBL_ENTRY)&_ZN6S234C63v16Ev,
  (VTBL_ENTRY)&_ZN6S234C63v17Ev,
  (VTBL_ENTRY)&_ZN6S234C63v18Ev,
  (VTBL_ENTRY)&_ZN6S234C63v19Ev,
  (VTBL_ENTRY)&_ZN6S234C63v20Ev,
  (VTBL_ENTRY)&_ZN6S234C63v21Ev,
  (VTBL_ENTRY)&_ZN6S234C63v22Ev,
  (VTBL_ENTRY)&_ZN6S234C63v23Ev,
  (VTBL_ENTRY)&_ZN6S234C63v24Ev,
  (VTBL_ENTRY)&_ZN6S234C63v25Ev,
  (VTBL_ENTRY)&_ZN6S234C63v26Ev,
  (VTBL_ENTRY)&_ZN6S234C63v27Ev,
  (VTBL_ENTRY)&_ZN6S234C63v28Ev,
  (VTBL_ENTRY)&_ZN6S234C63v29Ev,
  (VTBL_ENTRY)&_ZN6S234C63v30Ev,
  (VTBL_ENTRY)&_ZN6S234C63v31Ev,
  (VTBL_ENTRY)&_ZN6S234C63v32Ev,
  (VTBL_ENTRY)&_ZN6S234C63v33Ev,
  (VTBL_ENTRY)&_ZN6S234C63v34Ev,
  (VTBL_ENTRY)&_ZN6S234C63v35Ev,
  (VTBL_ENTRY)&_ZN6S234C63v36Ev,
  (VTBL_ENTRY)&_ZN6S234C63v37Ev,
  (VTBL_ENTRY)&_ZN6S234C63v38Ev,
  (VTBL_ENTRY)&_ZN6S234C63v39Ev,
  (VTBL_ENTRY)&_ZN6S234C63v40Ev,
  (VTBL_ENTRY)&_ZN6S234C63v41Ev,
  (VTBL_ENTRY)&_ZN6S234C63v42Ev,
  (VTBL_ENTRY)&_ZN6S234C63v43Ev,
  (VTBL_ENTRY)&_ZN6S234C63v44Ev,
  (VTBL_ENTRY)&_ZN6S234C63v45Ev,
  (VTBL_ENTRY)&_ZN6S234C63v46Ev,
  (VTBL_ENTRY)&_ZN6S234C63v47Ev,
  (VTBL_ENTRY)&_ZN6S234C63v48Ev,
  (VTBL_ENTRY)&_ZN6S234C63v49Ev,
  (VTBL_ENTRY)&_ZN6S234C63v50Ev,
  (VTBL_ENTRY)&_ZN6S234C63v51Ev,
  (VTBL_ENTRY)&_ZN6S234C63v52Ev,
  (VTBL_ENTRY)&_ZN6S234C63v53Ev,
  (VTBL_ENTRY)&_ZN6S234C63v54Ev,
  (VTBL_ENTRY)&_ZN6S234C63v55Ev,
  (VTBL_ENTRY)&_ZN6S234C63v56Ev,
  (VTBL_ENTRY)&_ZN6S234C63v57Ev,
  (VTBL_ENTRY)&_ZN6S234C63v58Ev,
  (VTBL_ENTRY)&_ZN6S234C63v59Ev,
  (VTBL_ENTRY)&_ZN6S234C63v60Ev,
  (VTBL_ENTRY)&_ZN6S234C63v61Ev,
  (VTBL_ENTRY)&_ZN6S234C63v62Ev,
  (VTBL_ENTRY)&_ZN6S234C63v63Ev,
  (VTBL_ENTRY)&_ZN6S234C63v64Ev,
  (VTBL_ENTRY)&_ZN6S234C63v65Ev,
  (VTBL_ENTRY)&_ZN6S234C63v66Ev,
  (VTBL_ENTRY)&_ZN6S234C63v67Ev,
  (VTBL_ENTRY)&_ZN6S234C63v68Ev,
  (VTBL_ENTRY)&_ZN6S234C53v69Ev,
  (VTBL_ENTRY)&_ZN6S234C53v70Ev,
  (VTBL_ENTRY)&_ZN6S234C53v71Ev,
  (VTBL_ENTRY)&_ZN6S234C53v72Ev,
  (VTBL_ENTRY)&_ZN6S234C53v73Ev,
  (VTBL_ENTRY)&_ZN6S234C53v74Ev,
  (VTBL_ENTRY)&_ZN6S234C53v75Ev,
  (VTBL_ENTRY)&_ZN6S234C53v76Ev,
  (VTBL_ENTRY)&_ZN6S234C53v77Ev,
  (VTBL_ENTRY)&_ZN6S234C53v78Ev,
  (VTBL_ENTRY)&_ZN6S234C53v79Ev,
  (VTBL_ENTRY)&_ZN6S234C53v80Ev,
  (VTBL_ENTRY)&_ZN6S234C53v81Ev,
  (VTBL_ENTRY)&_ZN6S234C53v82Ev,
  (VTBL_ENTRY)&_ZN6S234C53v83Ev,
  (VTBL_ENTRY)&_ZN6S234C53v84Ev,
  (VTBL_ENTRY)&_ZN6S234C53v85Ev,
  (VTBL_ENTRY)&_ZN6S234C53v86Ev,
  (VTBL_ENTRY)&_ZN6S234C53v87Ev,
  (VTBL_ENTRY)&_ZN6S234C53v88Ev,
  (VTBL_ENTRY)&_ZN6S234C53v89Ev,
  (VTBL_ENTRY)&_ZN6S234C53v90Ev,
  (VTBL_ENTRY)&_ZN6S234C53v91Ev,
  (VTBL_ENTRY)&_ZN6S234C53v92Ev,
  (VTBL_ENTRY)&_ZN6S234C53v93Ev,
  (VTBL_ENTRY)&_ZN6S234C53v94Ev,
  (VTBL_ENTRY)&_ZN6S234C53v95Ev,
  (VTBL_ENTRY)&_ZN6S234C43v96Ev,
  (VTBL_ENTRY)&_ZN6S234C43v97Ev,
  (VTBL_ENTRY)&_ZN6S234C43v98Ev,
  (VTBL_ENTRY)&_ZN6S234C43v99Ev,
  (VTBL_ENTRY)&_ZN6S234C44v100Ev,
  (VTBL_ENTRY)&_ZN6S234C44v101Ev,
  (VTBL_ENTRY)&_ZN6S234C44v102Ev,
  (VTBL_ENTRY)&_ZN6S234C44v103Ev,
  (VTBL_ENTRY)&_ZN6S234C44v104Ev,
  (VTBL_ENTRY)&_ZN6S234C44v105Ev,
  (VTBL_ENTRY)&_ZN6S234C44v106Ev,
  (VTBL_ENTRY)&_ZN6S234C44v107Ev,
  (VTBL_ENTRY)&_ZN6S234C44v108Ev,
  (VTBL_ENTRY)&_ZN6S234C44v109Ev,
  (VTBL_ENTRY)&_ZN6S234C44v110Ev,
  (VTBL_ENTRY)&_ZN6S234C44v111Ev,
  (VTBL_ENTRY)&_ZN6S234C44v112Ev,
  (VTBL_ENTRY)&_ZN6S234C44v113Ev,
  (VTBL_ENTRY)&_ZN6S234C34v114Ev,
  (VTBL_ENTRY)&_ZN6S234C34v115Ev,
  (VTBL_ENTRY)&_ZN6S234C34v116Ev,
  (VTBL_ENTRY)&_ZN6S234C34v117Ev,
  (VTBL_ENTRY)&_ZN6S234C34v118Ev,
  (VTBL_ENTRY)&_ZN6S234C34v119Ev,
  (VTBL_ENTRY)&_ZN6S234C34v120Ev,
  (VTBL_ENTRY)&_ZN6S234C24v121Ev,
  (VTBL_ENTRY)&_ZN6S234C24v122Ev,
  (VTBL_ENTRY)&_ZN6S234C24v123Ev,
  (VTBL_ENTRY)&_ZN6S234C24v124Ev,
  (VTBL_ENTRY)&_ZN6S234C24v125Ev,
  (VTBL_ENTRY)&_ZN6S234C24v126Ev,
  (VTBL_ENTRY)&_ZN6S234C12v1Ev,
  (VTBL_ENTRY)&_ZN6S234C12v2Ev,
  (VTBL_ENTRY)&_ZN6S234C12v3Ev,
  (VTBL_ENTRY)&_ZN6S234C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S234C1[];
extern  VTBL_ENTRY _ZTV6S234C1[];
Class_Descriptor cd_S234C1 = {  "S234C1", // class name
  bases_S234C1, 5,
  &(vtc_S234C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,252), // object size
  NSPAIRA(_ZTI6S234C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S234C1),130, //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  S232C6  {
  int s232c6f0;
  __tsi64 s232c6f1;
  void *s232c6f2[4];
  int s232c6f3[2];
  void *s232c6f4;
  ::S615C17_nt s232c6f5;
  void *s232c6f6[2];
  virtual  ~S232C6(); // _ZN6S232C6D1Ev
  virtual void  v5(); // _ZN6S232C62v5Ev
  virtual void  v6(); // _ZN6S232C62v6Ev
  virtual void  v7(); // _ZN6S232C62v7Ev
  virtual void  v8(); // _ZN6S232C62v8Ev
  virtual void  v9(); // _ZN6S232C62v9Ev
  virtual void  v10(); // _ZN6S232C63v10Ev
  virtual void  v11(); // _ZN6S232C63v11Ev
  virtual void  v12(); // _ZN6S232C63v12Ev
  virtual void  v13(); // _ZN6S232C63v13Ev
  virtual void  v14(); // _ZN6S232C63v14Ev
  virtual void  v15(); // _ZN6S232C63v15Ev
  virtual void  v16(); // _ZN6S232C63v16Ev
  virtual void  v17(); // _ZN6S232C63v17Ev
  virtual void  v18(); // _ZN6S232C63v18Ev
  virtual void  v19(); // _ZN6S232C63v19Ev
  virtual void  v20(); // _ZN6S232C63v20Ev
  virtual void  v21(); // _ZN6S232C63v21Ev
  virtual void  v22(); // _ZN6S232C63v22Ev
  virtual void  v23(); // _ZN6S232C63v23Ev
  virtual void  v24(); // _ZN6S232C63v24Ev
  virtual void  v25(); // _ZN6S232C63v25Ev
  virtual void  v26(); // _ZN6S232C63v26Ev
  virtual void  v27(); // _ZN6S232C63v27Ev
  virtual void  v28(); // _ZN6S232C63v28Ev
  virtual void  v29(); // _ZN6S232C63v29Ev
  virtual void  v30(); // _ZN6S232C63v30Ev
  virtual void  v31(); // _ZN6S232C63v31Ev
  virtual void  v32(); // _ZN6S232C63v32Ev
  virtual void  v33(); // _ZN6S232C63v33Ev
  virtual void  v34(); // _ZN6S232C63v34Ev
  virtual void  v35(); // _ZN6S232C63v35Ev
  virtual void  v36(); // _ZN6S232C63v36Ev
  virtual void  v37(); // _ZN6S232C63v37Ev
  virtual void  v38(); // _ZN6S232C63v38Ev
  virtual void  v39(); // _ZN6S232C63v39Ev
  virtual void  v40(); // _ZN6S232C63v40Ev
  virtual void  v41(); // _ZN6S232C63v41Ev
  virtual void  v42(); // _ZN6S232C63v42Ev
  virtual void  v43(); // _ZN6S232C63v43Ev
  virtual void  v44(); // _ZN6S232C63v44Ev
  virtual void  v45(); // _ZN6S232C63v45Ev
  virtual void  v46(); // _ZN6S232C63v46Ev
  virtual void  v47(); // _ZN6S232C63v47Ev
  virtual void  v48(); // _ZN6S232C63v48Ev
  virtual void  v49(); // _ZN6S232C63v49Ev
  virtual void  v50(); // _ZN6S232C63v50Ev
  virtual void  v51(); // _ZN6S232C63v51Ev
  virtual void  v52(); // _ZN6S232C63v52Ev
  virtual void  v53(); // _ZN6S232C63v53Ev
  virtual void  v54(); // _ZN6S232C63v54Ev
  virtual void  v55(); // _ZN6S232C63v55Ev
  virtual void  v56(); // _ZN6S232C63v56Ev
  virtual void  v57(); // _ZN6S232C63v57Ev
  virtual void  v58(); // _ZN6S232C63v58Ev
  virtual void  v59(); // _ZN6S232C63v59Ev
  virtual void  v60(); // _ZN6S232C63v60Ev
  virtual void  v61(); // _ZN6S232C63v61Ev
  virtual void  v62(); // _ZN6S232C63v62Ev
  virtual void  v63(); // _ZN6S232C63v63Ev
  virtual void  v64(); // _ZN6S232C63v64Ev
  virtual void  v65(); // _ZN6S232C63v65Ev
  virtual void  v66(); // _ZN6S232C63v66Ev
  virtual void  v67(); // _ZN6S232C63v67Ev
  virtual void  v68(); // _ZN6S232C63v68Ev
  S232C6(); // tgen
};
//SIG(-1 S232C6) 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]}


 S232C6 ::~S232C6(){ note_dtor("S232C6", this);}
void  S232C6 ::v5(){vfunc_called(this, "_ZN6S232C62v5Ev");}
void  S232C6 ::v6(){vfunc_called(this, "_ZN6S232C62v6Ev");}
void  S232C6 ::v7(){vfunc_called(this, "_ZN6S232C62v7Ev");}
void  S232C6 ::v8(){vfunc_called(this, "_ZN6S232C62v8Ev");}
void  S232C6 ::v9(){vfunc_called(this, "_ZN6S232C62v9Ev");}
void  S232C6 ::v10(){vfunc_called(this, "_ZN6S232C63v10Ev");}
void  S232C6 ::v11(){vfunc_called(this, "_ZN6S232C63v11Ev");}
void  S232C6 ::v12(){vfunc_called(this, "_ZN6S232C63v12Ev");}
void  S232C6 ::v13(){vfunc_called(this, "_ZN6S232C63v13Ev");}
void  S232C6 ::v14(){vfunc_called(this, "_ZN6S232C63v14Ev");}
void  S232C6 ::v15(){vfunc_called(this, "_ZN6S232C63v15Ev");}
void  S232C6 ::v16(){vfunc_called(this, "_ZN6S232C63v16Ev");}
void  S232C6 ::v17(){vfunc_called(this, "_ZN6S232C63v17Ev");}
void  S232C6 ::v18(){vfunc_called(this, "_ZN6S232C63v18Ev");}
void  S232C6 ::v19(){vfunc_called(this, "_ZN6S232C63v19Ev");}
void  S232C6 ::v20(){vfunc_called(this, "_ZN6S232C63v20Ev");}
void  S232C6 ::v21(){vfunc_called(this, "_ZN6S232C63v21Ev");}
void  S232C6 ::v22(){vfunc_called(this, "_ZN6S232C63v22Ev");}
void  S232C6 ::v23(){vfunc_called(this, "_ZN6S232C63v23Ev");}
void  S232C6 ::v24(){vfunc_called(this, "_ZN6S232C63v24Ev");}
void  S232C6 ::v25(){vfunc_called(this, "_ZN6S232C63v25Ev");}
void  S232C6 ::v26(){vfunc_called(this, "_ZN6S232C63v26Ev");}
void  S232C6 ::v27(){vfunc_called(this, "_ZN6S232C63v27Ev");}
void  S232C6 ::v28(){vfunc_called(this, "_ZN6S232C63v28Ev");}
void  S232C6 ::v29(){vfunc_called(this, "_ZN6S232C63v29Ev");}
void  S232C6 ::v30(){vfunc_called(this, "_ZN6S232C63v30Ev");}
void  S232C6 ::v31(){vfunc_called(this, "_ZN6S232C63v31Ev");}
void  S232C6 ::v32(){vfunc_called(this, "_ZN6S232C63v32Ev");}
void  S232C6 ::v33(){vfunc_called(this, "_ZN6S232C63v33Ev");}
void  S232C6 ::v34(){vfunc_called(this, "_ZN6S232C63v34Ev");}
void  S232C6 ::v35(){vfunc_called(this, "_ZN6S232C63v35Ev");}
void  S232C6 ::v36(){vfunc_called(this, "_ZN6S232C63v36Ev");}
void  S232C6 ::v37(){vfunc_called(this, "_ZN6S232C63v37Ev");}
void  S232C6 ::v38(){vfunc_called(this, "_ZN6S232C63v38Ev");}
void  S232C6 ::v39(){vfunc_called(this, "_ZN6S232C63v39Ev");}
void  S232C6 ::v40(){vfunc_called(this, "_ZN6S232C63v40Ev");}
void  S232C6 ::v41(){vfunc_called(this, "_ZN6S232C63v41Ev");}
void  S232C6 ::v42(){vfunc_called(this, "_ZN6S232C63v42Ev");}
void  S232C6 ::v43(){vfunc_called(this, "_ZN6S232C63v43Ev");}
void  S232C6 ::v44(){vfunc_called(this, "_ZN6S232C63v44Ev");}
void  S232C6 ::v45(){vfunc_called(this, "_ZN6S232C63v45Ev");}
void  S232C6 ::v46(){vfunc_called(this, "_ZN6S232C63v46Ev");}
void  S232C6 ::v47(){vfunc_called(this, "_ZN6S232C63v47Ev");}
void  S232C6 ::v48(){vfunc_called(this, "_ZN6S232C63v48Ev");}
void  S232C6 ::v49(){vfunc_called(this, "_ZN6S232C63v49Ev");}
void  S232C6 ::v50(){vfunc_called(this, "_ZN6S232C63v50Ev");}
void  S232C6 ::v51(){vfunc_called(this, "_ZN6S232C63v51Ev");}
void  S232C6 ::v52(){vfunc_called(this, "_ZN6S232C63v52Ev");}
void  S232C6 ::v53(){vfunc_called(this, "_ZN6S232C63v53Ev");}
void  S232C6 ::v54(){vfunc_called(this, "_ZN6S232C63v54Ev");}
void  S232C6 ::v55(){vfunc_called(this, "_ZN6S232C63v55Ev");}
void  S232C6 ::v56(){vfunc_called(this, "_ZN6S232C63v56Ev");}
void  S232C6 ::v57(){vfunc_called(this, "_ZN6S232C63v57Ev");}
void  S232C6 ::v58(){vfunc_called(this, "_ZN6S232C63v58Ev");}
void  S232C6 ::v59(){vfunc_called(this, "_ZN6S232C63v59Ev");}
void  S232C6 ::v60(){vfunc_called(this, "_ZN6S232C63v60Ev");}
void  S232C6 ::v61(){vfunc_called(this, "_ZN6S232C63v61Ev");}
void  S232C6 ::v62(){vfunc_called(this, "_ZN6S232C63v62Ev");}
void  S232C6 ::v63(){vfunc_called(this, "_ZN6S232C63v63Ev");}
void  S232C6 ::v64(){vfunc_called(this, "_ZN6S232C63v64Ev");}
void  S232C6 ::v65(){vfunc_called(this, "_ZN6S232C63v65Ev");}
void  S232C6 ::v66(){vfunc_called(this, "_ZN6S232C63v66Ev");}
void  S232C6 ::v67(){vfunc_called(this, "_ZN6S232C63v67Ev");}
void  S232C6 ::v68(){vfunc_called(this, "_ZN6S232C63v68Ev");}
S232C6 ::S232C6(){ note_ctor("S232C6", this);} // tgen

static void Test_S232C6()
{
  extern Class_Descriptor cd_S232C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S232C6, buf);
    S232C6 *dp, &lv = *(dp=new (buf) S232C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S232C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S232C6)");
    check_field_offset(lv, s232c6f0, ABISELECT(8,4), "S232C6.s232c6f0");
    check_field_offset(lv, s232c6f1, ABISELECT(16,8), "S232C6.s232c6f1");
    check_field_offset(lv, s232c6f2, ABISELECT(24,16), "S232C6.s232c6f2");
    check_field_offset(lv, s232c6f3, ABISELECT(56,32), "S232C6.s232c6f3");
    check_field_offset(lv, s232c6f4, ABISELECT(64,40), "S232C6.s232c6f4");
    check_field_offset(lv, s232c6f5, ABISELECT(72,44), "S232C6.s232c6f5");
    check_field_offset(lv, s232c6f6, ABISELECT(80,52), "S232C6.s232c6f6");
    test_class_info(&lv, &cd_S232C6);
    dp->~S232C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS232C6(Test_S232C6, "S232C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S232C6C1Ev();
extern void _ZN6S232C6D1Ev();
Name_Map name_map_S232C6[] = {
  NSPAIR(_ZN6S232C6C1Ev),
  NSPAIR(_ZN6S232C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S232C6[];
extern void _ZN6S232C6D1Ev();
extern void _ZN6S232C6D0Ev();
extern void _ZN6S232C62v5Ev();
extern void _ZN6S232C62v6Ev();
extern void _ZN6S232C62v7Ev();
extern void _ZN6S232C62v8Ev();
extern void _ZN6S232C62v9Ev();
extern void _ZN6S232C63v10Ev();
extern void _ZN6S232C63v11Ev();
extern void _ZN6S232C63v12Ev();
extern void _ZN6S232C63v13Ev();
extern void _ZN6S232C63v14Ev();
extern void _ZN6S232C63v15Ev();
extern void _ZN6S232C63v16Ev();
extern void _ZN6S232C63v17Ev();
extern void _ZN6S232C63v18Ev();
extern void _ZN6S232C63v19Ev();
extern void _ZN6S232C63v20Ev();
extern void _ZN6S232C63v21Ev();
extern void _ZN6S232C63v22Ev();
extern void _ZN6S232C63v23Ev();
extern void _ZN6S232C63v24Ev();
extern void _ZN6S232C63v25Ev();
extern void _ZN6S232C63v26Ev();
extern void _ZN6S232C63v27Ev();
extern void _ZN6S232C63v28Ev();
extern void _ZN6S232C63v29Ev();
extern void _ZN6S232C63v30Ev();
extern void _ZN6S232C63v31Ev();
extern void _ZN6S232C63v32Ev();
extern void _ZN6S232C63v33Ev();
extern void _ZN6S232C63v34Ev();
extern void _ZN6S232C63v35Ev();
extern void _ZN6S232C63v36Ev();
extern void _ZN6S232C63v37Ev();
extern void _ZN6S232C63v38Ev();
extern void _ZN6S232C63v39Ev();
extern void _ZN6S232C63v40Ev();
extern void _ZN6S232C63v41Ev();
extern void _ZN6S232C63v42Ev();
extern void _ZN6S232C63v43Ev();
extern void _ZN6S232C63v44Ev();
extern void _ZN6S232C63v45Ev();
extern void _ZN6S232C63v46Ev();
extern void _ZN6S232C63v47Ev();
extern void _ZN6S232C63v48Ev();
extern void _ZN6S232C63v49Ev();
extern void _ZN6S232C63v50Ev();
extern void _ZN6S232C63v51Ev();
extern void _ZN6S232C63v52Ev();
extern void _ZN6S232C63v53Ev();
extern void _ZN6S232C63v54Ev();
extern void _ZN6S232C63v55Ev();
extern void _ZN6S232C63v56Ev();
extern void _ZN6S232C63v57Ev();
extern void _ZN6S232C63v58Ev();
extern void _ZN6S232C63v59Ev();
extern void _ZN6S232C63v60Ev();
extern void _ZN6S232C63v61Ev();
extern void _ZN6S232C63v62Ev();
extern void _ZN6S232C63v63Ev();
extern void _ZN6S232C63v64Ev();
extern void _ZN6S232C63v65Ev();
extern void _ZN6S232C63v66Ev();
extern void _ZN6S232C63v67Ev();
extern void _ZN6S232C63v68Ev();
static  VTBL_ENTRY vtc_S232C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S232C6[0]),
  (VTBL_ENTRY)&_ZN6S232C6D1Ev,
  (VTBL_ENTRY)&_ZN6S232C6D0Ev,
  (VTBL_ENTRY)&_ZN6S232C62v5Ev,
  (VTBL_ENTRY)&_ZN6S232C62v6Ev,
  (VTBL_ENTRY)&_ZN6S232C62v7Ev,
  (VTBL_ENTRY)&_ZN6S232C62v8Ev,
  (VTBL_ENTRY)&_ZN6S232C62v9Ev,
  (VTBL_ENTRY)&_ZN6S232C63v10Ev,
  (VTBL_ENTRY)&_ZN6S232C63v11Ev,
  (VTBL_ENTRY)&_ZN6S232C63v12Ev,
  (VTBL_ENTRY)&_ZN6S232C63v13Ev,
  (VTBL_ENTRY)&_ZN6S232C63v14Ev,
  (VTBL_ENTRY)&_ZN6S232C63v15Ev,
  (VTBL_ENTRY)&_ZN6S232C63v16Ev,
  (VTBL_ENTRY)&_ZN6S232C63v17Ev,
  (VTBL_ENTRY)&_ZN6S232C63v18Ev,
  (VTBL_ENTRY)&_ZN6S232C63v19Ev,
  (VTBL_ENTRY)&_ZN6S232C63v20Ev,
  (VTBL_ENTRY)&_ZN6S232C63v21Ev,
  (VTBL_ENTRY)&_ZN6S232C63v22Ev,
  (VTBL_ENTRY)&_ZN6S232C63v23Ev,
  (VTBL_ENTRY)&_ZN6S232C63v24Ev,
  (VTBL_ENTRY)&_ZN6S232C63v25Ev,
  (VTBL_ENTRY)&_ZN6S232C63v26Ev,
  (VTBL_ENTRY)&_ZN6S232C63v27Ev,
  (VTBL_ENTRY)&_ZN6S232C63v28Ev,
  (VTBL_ENTRY)&_ZN6S232C63v29Ev,
  (VTBL_ENTRY)&_ZN6S232C63v30Ev,
  (VTBL_ENTRY)&_ZN6S232C63v31Ev,
  (VTBL_ENTRY)&_ZN6S232C63v32Ev,
  (VTBL_ENTRY)&_ZN6S232C63v33Ev,
  (VTBL_ENTRY)&_ZN6S232C63v34Ev,
  (VTBL_ENTRY)&_ZN6S232C63v35Ev,
  (VTBL_ENTRY)&_ZN6S232C63v36Ev,
  (VTBL_ENTRY)&_ZN6S232C63v37Ev,
  (VTBL_ENTRY)&_ZN6S232C63v38Ev,
  (VTBL_ENTRY)&_ZN6S232C63v39Ev,
  (VTBL_ENTRY)&_ZN6S232C63v40Ev,
  (VTBL_ENTRY)&_ZN6S232C63v41Ev,
  (VTBL_ENTRY)&_ZN6S232C63v42Ev,
  (VTBL_ENTRY)&_ZN6S232C63v43Ev,
  (VTBL_ENTRY)&_ZN6S232C63v44Ev,
  (VTBL_ENTRY)&_ZN6S232C63v45Ev,
  (VTBL_ENTRY)&_ZN6S232C63v46Ev,
  (VTBL_ENTRY)&_ZN6S232C63v47Ev,
  (VTBL_ENTRY)&_ZN6S232C63v48Ev,
  (VTBL_ENTRY)&_ZN6S232C63v49Ev,
  (VTBL_ENTRY)&_ZN6S232C63v50Ev,
  (VTBL_ENTRY)&_ZN6S232C63v51Ev,
  (VTBL_ENTRY)&_ZN6S232C63v52Ev,
  (VTBL_ENTRY)&_ZN6S232C63v53Ev,
  (VTBL_ENTRY)&_ZN6S232C63v54Ev,
  (VTBL_ENTRY)&_ZN6S232C63v55Ev,
  (VTBL_ENTRY)&_ZN6S232C63v56Ev,
  (VTBL_ENTRY)&_ZN6S232C63v57Ev,
  (VTBL_ENTRY)&_ZN6S232C63v58Ev,
  (VTBL_ENTRY)&_ZN6S232C63v59Ev,
  (VTBL_ENTRY)&_ZN6S232C63v60Ev,
  (VTBL_ENTRY)&_ZN6S232C63v61Ev,
  (VTBL_ENTRY)&_ZN6S232C63v62Ev,
  (VTBL_ENTRY)&_ZN6S232C63v63Ev,
  (VTBL_ENTRY)&_ZN6S232C63v64Ev,
  (VTBL_ENTRY)&_ZN6S232C63v65Ev,
  (VTBL_ENTRY)&_ZN6S232C63v66Ev,
  (VTBL_ENTRY)&_ZN6S232C63v67Ev,
  (VTBL_ENTRY)&_ZN6S232C63v68Ev,
};
extern VTBL_ENTRY _ZTI6S232C6[];
extern  VTBL_ENTRY _ZTV6S232C6[];
Class_Descriptor cd_S232C6 = {  "S232C6", // class name
  0,0,//no base classes
  &(vtc_S232C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S232C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S232C6),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  S232C5  : S232C6 {
  void *s232c5f0;
  ::S1542C26 s232c5f1;
  ::S615C17_nt s232c5f2;
  ::S1542C22_nt s232c5f3;
  ::S615C12_nt s232c5f4;
  int s232c5f5;
  unsigned int s232c5f6:1;
  unsigned int s232c5f7:1;
  unsigned int s232c5f8:1;
  unsigned int s232c5f9:1;
  int s232c5f10[11];
  virtual  ~S232C5(); // _ZN6S232C5D1Ev
  virtual void  v69(); // _ZN6S232C53v69Ev
  virtual void  v70(); // _ZN6S232C53v70Ev
  virtual void  v71(); // _ZN6S232C53v71Ev
  virtual void  v72(); // _ZN6S232C53v72Ev
  virtual void  v73(); // _ZN6S232C53v73Ev
  virtual void  v74(); // _ZN6S232C53v74Ev
  virtual void  v75(); // _ZN6S232C53v75Ev
  virtual void  v76(); // _ZN6S232C53v76Ev
  virtual void  v77(); // _ZN6S232C53v77Ev
  virtual void  v78(); // _ZN6S232C53v78Ev
  virtual void  v79(); // _ZN6S232C53v79Ev
  virtual void  v80(); // _ZN6S232C53v80Ev
  virtual void  v81(); // _ZN6S232C53v81Ev
  virtual void  v82(); // _ZN6S232C53v82Ev
  virtual void  v83(); // _ZN6S232C53v83Ev
  virtual void  v84(); // _ZN6S232C53v84Ev
  virtual void  v85(); // _ZN6S232C53v85Ev
  virtual void  v86(); // _ZN6S232C53v86Ev
  virtual void  v87(); // _ZN6S232C53v87Ev
  virtual void  v88(); // _ZN6S232C53v88Ev
  virtual void  v89(); // _ZN6S232C53v89Ev
  virtual void  v90(); // _ZN6S232C53v90Ev
  virtual void  v91(); // _ZN6S232C53v91Ev
  virtual void  v92(); // _ZN6S232C53v92Ev
  virtual void  v93(); // _ZN6S232C53v93Ev
  virtual void  v94(); // _ZN6S232C53v94Ev
  virtual void  v95(); // _ZN6S232C53v95Ev
  S232C5(); // tgen
};
//SIG(-1 S232C5) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S232C5 ::~S232C5(){ note_dtor("S232C5", this);}
void  S232C5 ::v69(){vfunc_called(this, "_ZN6S232C53v69Ev");}
void  S232C5 ::v70(){vfunc_called(this, "_ZN6S232C53v70Ev");}
void  S232C5 ::v71(){vfunc_called(this, "_ZN6S232C53v71Ev");}
void  S232C5 ::v72(){vfunc_called(this, "_ZN6S232C53v72Ev");}
void  S232C5 ::v73(){vfunc_called(this, "_ZN6S232C53v73Ev");}
void  S232C5 ::v74(){vfunc_called(this, "_ZN6S232C53v74Ev");}
void  S232C5 ::v75(){vfunc_called(this, "_ZN6S232C53v75Ev");}
void  S232C5 ::v76(){vfunc_called(this, "_ZN6S232C53v76Ev");}
void  S232C5 ::v77(){vfunc_called(this, "_ZN6S232C53v77Ev");}
void  S232C5 ::v78(){vfunc_called(this, "_ZN6S232C53v78Ev");}
void  S232C5 ::v79(){vfunc_called(this, "_ZN6S232C53v79Ev");}
void  S232C5 ::v80(){vfunc_called(this, "_ZN6S232C53v80Ev");}
void  S232C5 ::v81(){vfunc_called(this, "_ZN6S232C53v81Ev");}
void  S232C5 ::v82(){vfunc_called(this, "_ZN6S232C53v82Ev");}
void  S232C5 ::v83(){vfunc_called(this, "_ZN6S232C53v83Ev");}
void  S232C5 ::v84(){vfunc_called(this, "_ZN6S232C53v84Ev");}
void  S232C5 ::v85(){vfunc_called(this, "_ZN6S232C53v85Ev");}
void  S232C5 ::v86(){vfunc_called(this, "_ZN6S232C53v86Ev");}
void  S232C5 ::v87(){vfunc_called(this, "_ZN6S232C53v87Ev");}
void  S232C5 ::v88(){vfunc_called(this, "_ZN6S232C53v88Ev");}
void  S232C5 ::v89(){vfunc_called(this, "_ZN6S232C53v89Ev");}
void  S232C5 ::v90(){vfunc_called(this, "_ZN6S232C53v90Ev");}
void  S232C5 ::v91(){vfunc_called(this, "_ZN6S232C53v91Ev");}
void  S232C5 ::v92(){vfunc_called(this, "_ZN6S232C53v92Ev");}
void  S232C5 ::v93(){vfunc_called(this, "_ZN6S232C53v93Ev");}
void  S232C5 ::v94(){vfunc_called(this, "_ZN6S232C53v94Ev");}
void  S232C5 ::v95(){vfunc_called(this, "_ZN6S232C53v95Ev");}
S232C5 ::S232C5(){ note_ctor("S232C5", this);} // tgen

static void Test_S232C5()
{
  extern Class_Descriptor cd_S232C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S232C5, buf);
    S232C5 *dp, &lv = *(dp=new (buf) S232C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S232C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S232C5)");
    check_base_class_offset(lv, (S232C6*), 0, "S232C5");
    check_field_offset(lv, s232c5f0, ABISELECT(96,60), "S232C5.s232c5f0");
    check_field_offset(lv, s232c5f1, ABISELECT(104,64), "S232C5.s232c5f1");
    check_field_offset(lv, s232c5f2, ABISELECT(120,76), "S232C5.s232c5f2");
    check_field_offset(lv, s232c5f3, ABISELECT(128,84), "S232C5.s232c5f3");
    check_field_offset(lv, s232c5f4, ABISELECT(144,96), "S232C5.s232c5f4");
    check_field_offset(lv, s232c5f5, ABISELECT(176,128), "S232C5.s232c5f5");
    set_bf_and_test(lv, s232c5f6, ABISELECT(180,132), 0, 1, 1, "S232C5");
    set_bf_and_test(lv, s232c5f7, ABISELECT(180,132), 1, 1, 1, "S232C5");
    set_bf_and_test(lv, s232c5f8, ABISELECT(180,132), 2, 1, 1, "S232C5");
    set_bf_and_test(lv, s232c5f9, ABISELECT(180,132), 3, 1, 1, "S232C5");
    check_field_offset(lv, s232c5f10, ABISELECT(184,136), "S232C5.s232c5f10");
    test_class_info(&lv, &cd_S232C5);
    dp->~S232C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS232C5(Test_S232C5, "S232C5", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S232C5C1Ev();
extern void _ZN6S232C5D1Ev();
Name_Map name_map_S232C5[] = {
  NSPAIR(_ZN6S232C5C1Ev),
  NSPAIR(_ZN6S232C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S232C6;
extern VTBL_ENTRY _ZTI6S232C6[];
extern  VTBL_ENTRY _ZTV6S232C6[];
static Base_Class bases_S232C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S232C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S232C5[];
extern void _ZN6S232C5D1Ev();
extern void _ZN6S232C5D0Ev();
extern void _ZN6S232C62v5Ev();
extern void _ZN6S232C62v6Ev();
extern void _ZN6S232C62v7Ev();
extern void _ZN6S232C62v8Ev();
extern void _ZN6S232C62v9Ev();
extern void _ZN6S232C63v10Ev();
extern void _ZN6S232C63v11Ev();
extern void _ZN6S232C63v12Ev();
extern void _ZN6S232C63v13Ev();
extern void _ZN6S232C63v14Ev();
extern void _ZN6S232C63v15Ev();
extern void _ZN6S232C63v16Ev();
extern void _ZN6S232C63v17Ev();
extern void _ZN6S232C63v18Ev();
extern void _ZN6S232C63v19Ev();
extern void _ZN6S232C63v20Ev();
extern void _ZN6S232C63v21Ev();
extern void _ZN6S232C63v22Ev();
extern void _ZN6S232C63v23Ev();
extern void _ZN6S232C63v24Ev();
extern void _ZN6S232C63v25Ev();
extern void _ZN6S232C63v26Ev();
extern void _ZN6S232C63v27Ev();
extern void _ZN6S232C63v28Ev();
extern void _ZN6S232C63v29Ev();
extern void _ZN6S232C63v30Ev();
extern void _ZN6S232C63v31Ev();
extern void _ZN6S232C63v32Ev();
extern void _ZN6S232C63v33Ev();
extern void _ZN6S232C63v34Ev();
extern void _ZN6S232C63v35Ev();
extern void _ZN6S232C63v36Ev();
extern void _ZN6S232C63v37Ev();
extern void _ZN6S232C63v38Ev();
extern void _ZN6S232C63v39Ev();
extern void _ZN6S232C63v40Ev();
extern void _ZN6S232C63v41Ev();
extern void _ZN6S232C63v42Ev();
extern void _ZN6S232C63v43Ev();
extern void _ZN6S232C63v44Ev();
extern void _ZN6S232C63v45Ev();
extern void _ZN6S232C63v46Ev();
extern void _ZN6S232C63v47Ev();
extern void _ZN6S232C63v48Ev();
extern void _ZN6S232C63v49Ev();
extern void _ZN6S232C63v50Ev();
extern void _ZN6S232C63v51Ev();
extern void _ZN6S232C63v52Ev();
extern void _ZN6S232C63v53Ev();
extern void _ZN6S232C63v54Ev();
extern void _ZN6S232C63v55Ev();
extern void _ZN6S232C63v56Ev();
extern void _ZN6S232C63v57Ev();
extern void _ZN6S232C63v58Ev();
extern void _ZN6S232C63v59Ev();
extern void _ZN6S232C63v60Ev();
extern void _ZN6S232C63v61Ev();
extern void _ZN6S232C63v62Ev();
extern void _ZN6S232C63v63Ev();
extern void _ZN6S232C63v64Ev();
extern void _ZN6S232C63v65Ev();
extern void _ZN6S232C63v66Ev();
extern void _ZN6S232C63v67Ev();
extern void _ZN6S232C63v68Ev();
extern void _ZN6S232C53v69Ev();
extern void _ZN6S232C53v70Ev();
extern void _ZN6S232C53v71Ev();
extern void _ZN6S232C53v72Ev();
extern void _ZN6S232C53v73Ev();
extern void _ZN6S232C53v74Ev();
extern void _ZN6S232C53v75Ev();
extern void _ZN6S232C53v76Ev();
extern void _ZN6S232C53v77Ev();
extern void _ZN6S232C53v78Ev();
extern void _ZN6S232C53v79Ev();
extern void _ZN6S232C53v80Ev();
extern void _ZN6S232C53v81Ev();
extern void _ZN6S232C53v82Ev();
extern void _ZN6S232C53v83Ev();
extern void _ZN6S232C53v84Ev();
extern void _ZN6S232C53v85Ev();
extern void _ZN6S232C53v86Ev();
extern void _ZN6S232C53v87Ev();
extern void _ZN6S232C53v88Ev();
extern void _ZN6S232C53v89Ev();
extern void _ZN6S232C53v90Ev();
extern void _ZN6S232C53v91Ev();
extern void _ZN6S232C53v92Ev();
extern void _ZN6S232C53v93Ev();
extern void _ZN6S232C53v94Ev();
extern void _ZN6S232C53v95Ev();
static  VTBL_ENTRY vtc_S232C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S232C5[0]),
  (VTBL_ENTRY)&_ZN6S232C5D1Ev,
  (VTBL_ENTRY)&_ZN6S232C5D0Ev,
  (VTBL_ENTRY)&_ZN6S232C62v5Ev,
  (VTBL_ENTRY)&_ZN6S232C62v6Ev,
  (VTBL_ENTRY)&_ZN6S232C62v7Ev,
  (VTBL_ENTRY)&_ZN6S232C62v8Ev,
  (VTBL_ENTRY)&_ZN6S232C62v9Ev,
  (VTBL_ENTRY)&_ZN6S232C63v10Ev,
  (VTBL_ENTRY)&_ZN6S232C63v11Ev,
  (VTBL_ENTRY)&_ZN6S232C63v12Ev,
  (VTBL_ENTRY)&_ZN6S232C63v13Ev,
  (VTBL_ENTRY)&_ZN6S232C63v14Ev,
  (VTBL_ENTRY)&_ZN6S232C63v15Ev,
  (VTBL_ENTRY)&_ZN6S232C63v16Ev,
  (VTBL_ENTRY)&_ZN6S232C63v17Ev,
  (VTBL_ENTRY)&_ZN6S232C63v18Ev,
  (VTBL_ENTRY)&_ZN6S232C63v19Ev,
  (VTBL_ENTRY)&_ZN6S232C63v20Ev,
  (VTBL_ENTRY)&_ZN6S232C63v21Ev,
  (VTBL_ENTRY)&_ZN6S232C63v22Ev,
  (VTBL_ENTRY)&_ZN6S232C63v23Ev,
  (VTBL_ENTRY)&_ZN6S232C63v24Ev,
  (VTBL_ENTRY)&_ZN6S232C63v25Ev,
  (VTBL_ENTRY)&_ZN6S232C63v26Ev,
  (VTBL_ENTRY)&_ZN6S232C63v27Ev,
  (VTBL_ENTRY)&_ZN6S232C63v28Ev,
  (VTBL_ENTRY)&_ZN6S232C63v29Ev,
  (VTBL_ENTRY)&_ZN6S232C63v30Ev,
  (VTBL_ENTRY)&_ZN6S232C63v31Ev,
  (VTBL_ENTRY)&_ZN6S232C63v32Ev,
  (VTBL_ENTRY)&_ZN6S232C63v33Ev,
  (VTBL_ENTRY)&_ZN6S232C63v34Ev,
  (VTBL_ENTRY)&_ZN6S232C63v35Ev,
  (VTBL_ENTRY)&_ZN6S232C63v36Ev,
  (VTBL_ENTRY)&_ZN6S232C63v37Ev,
  (VTBL_ENTRY)&_ZN6S232C63v38Ev,
  (VTBL_ENTRY)&_ZN6S232C63v39Ev,
  (VTBL_ENTRY)&_ZN6S232C63v40Ev,
  (VTBL_ENTRY)&_ZN6S232C63v41Ev,
  (VTBL_ENTRY)&_ZN6S232C63v42Ev,
  (VTBL_ENTRY)&_ZN6S232C63v43Ev,
  (VTBL_ENTRY)&_ZN6S232C63v44Ev,
  (VTBL_ENTRY)&_ZN6S232C63v45Ev,
  (VTBL_ENTRY)&_ZN6S232C63v46Ev,
  (VTBL_ENTRY)&_ZN6S232C63v47Ev,
  (VTBL_ENTRY)&_ZN6S232C63v48Ev,
  (VTBL_ENTRY)&_ZN6S232C63v49Ev,
  (VTBL_ENTRY)&_ZN6S232C63v50Ev,
  (VTBL_ENTRY)&_ZN6S232C63v51Ev,
  (VTBL_ENTRY)&_ZN6S232C63v52Ev,
  (VTBL_ENTRY)&_ZN6S232C63v53Ev,
  (VTBL_ENTRY)&_ZN6S232C63v54Ev,
  (VTBL_ENTRY)&_ZN6S232C63v55Ev,
  (VTBL_ENTRY)&_ZN6S232C63v56Ev,
  (VTBL_ENTRY)&_ZN6S232C63v57Ev,
  (VTBL_ENTRY)&_ZN6S232C63v58Ev,
  (VTBL_ENTRY)&_ZN6S232C63v59Ev,
  (VTBL_ENTRY)&_ZN6S232C63v60Ev,
  (VTBL_ENTRY)&_ZN6S232C63v61Ev,
  (VTBL_ENTRY)&_ZN6S232C63v62Ev,
  (VTBL_ENTRY)&_ZN6S232C63v63Ev,
  (VTBL_ENTRY)&_ZN6S232C63v64Ev,
  (VTBL_ENTRY)&_ZN6S232C63v65Ev,
  (VTBL_ENTRY)&_ZN6S232C63v66Ev,
  (VTBL_ENTRY)&_ZN6S232C63v67Ev,
  (VTBL_ENTRY)&_ZN6S232C63v68Ev,
  (VTBL_ENTRY)&_ZN6S232C53v69Ev,
  (VTBL_ENTRY)&_ZN6S232C53v70Ev,
  (VTBL_ENTRY)&_ZN6S232C53v71Ev,
  (VTBL_ENTRY)&_ZN6S232C53v72Ev,
  (VTBL_ENTRY)&_ZN6S232C53v73Ev,
  (VTBL_ENTRY)&_ZN6S232C53v74Ev,
  (VTBL_ENTRY)&_ZN6S232C53v75Ev,
  (VTBL_ENTRY)&_ZN6S232C53v76Ev,
  (VTBL_ENTRY)&_ZN6S232C53v77Ev,
  (VTBL_ENTRY)&_ZN6S232C53v78Ev,
  (VTBL_ENTRY)&_ZN6S232C53v79Ev,
  (VTBL_ENTRY)&_ZN6S232C53v80Ev,
  (VTBL_ENTRY)&_ZN6S232C53v81Ev,
  (VTBL_ENTRY)&_ZN6S232C53v82Ev,
  (VTBL_ENTRY)&_ZN6S232C53v83Ev,
  (VTBL_ENTRY)&_ZN6S232C53v84Ev,
  (VTBL_ENTRY)&_ZN6S232C53v85Ev,
  (VTBL_ENTRY)&_ZN6S232C53v86Ev,
  (VTBL_ENTRY)&_ZN6S232C53v87Ev,
  (VTBL_ENTRY)&_ZN6S232C53v88Ev,
  (VTBL_ENTRY)&_ZN6S232C53v89Ev,
  (VTBL_ENTRY)&_ZN6S232C53v90Ev,
  (VTBL_ENTRY)&_ZN6S232C53v91Ev,
  (VTBL_ENTRY)&_ZN6S232C53v92Ev,
  (VTBL_ENTRY)&_ZN6S232C53v93Ev,
  (VTBL_ENTRY)&_ZN6S232C53v94Ev,
  (VTBL_ENTRY)&_ZN6S232C53v95Ev,
};
extern VTBL_ENTRY _ZTI6S232C5[];
extern  VTBL_ENTRY _ZTV6S232C5[];
Class_Descriptor cd_S232C5 = {  "S232C5", // class name
  bases_S232C5, 1,
  &(vtc_S232C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S232C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S232C5),95, //virtual function table var
  2, // 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  S232C4  : S232C5 {
  ::S615C22_nt s232c4f0;
  unsigned int s232c4f1:1;
  virtual  ~S232C4(); // _ZN6S232C4D1Ev
  virtual void  v96(); // _ZN6S232C43v96Ev
  virtual void  v97(); // _ZN6S232C43v97Ev
  virtual void  v98(); // _ZN6S232C43v98Ev
  virtual void  v99(); // _ZN6S232C43v99Ev
  virtual void  v100(); // _ZN6S232C44v100Ev
  virtual void  v101(); // _ZN6S232C44v101Ev
  virtual void  v102(); // _ZN6S232C44v102Ev
  virtual void  v103(); // _ZN6S232C44v103Ev
  virtual void  v104(); // _ZN6S232C44v104Ev
  virtual void  v105(); // _ZN6S232C44v105Ev
  virtual void  v106(); // _ZN6S232C44v106Ev
  virtual void  v107(); // _ZN6S232C44v107Ev
  virtual void  v108(); // _ZN6S232C44v108Ev
  virtual void  v109(); // _ZN6S232C44v109Ev
  virtual void  v110(); // _ZN6S232C44v110Ev
  virtual void  v111(); // _ZN6S232C44v111Ev
  virtual void  v112(); // _ZN6S232C44v112Ev
  virtual void  v113(); // _ZN6S232C44v113Ev
  S232C4(); // tgen
};
//SIG(-1 S232C4) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S232C4 ::~S232C4(){ note_dtor("S232C4", this);}
void  S232C4 ::v96(){vfunc_called(this, "_ZN6S232C43v96Ev");}
void  S232C4 ::v97(){vfunc_called(this, "_ZN6S232C43v97Ev");}
void  S232C4 ::v98(){vfunc_called(this, "_ZN6S232C43v98Ev");}
void  S232C4 ::v99(){vfunc_called(this, "_ZN6S232C43v99Ev");}
void  S232C4 ::v100(){vfunc_called(this, "_ZN6S232C44v100Ev");}
void  S232C4 ::v101(){vfunc_called(this, "_ZN6S232C44v101Ev");}
void  S232C4 ::v102(){vfunc_called(this, "_ZN6S232C44v102Ev");}
void  S232C4 ::v103(){vfunc_called(this, "_ZN6S232C44v103Ev");}
void  S232C4 ::v104(){vfunc_called(this, "_ZN6S232C44v104Ev");}
void  S232C4 ::v105(){vfunc_called(this, "_ZN6S232C44v105Ev");}
void  S232C4 ::v106(){vfunc_called(this, "_ZN6S232C44v106Ev");}
void  S232C4 ::v107(){vfunc_called(this, "_ZN6S232C44v107Ev");}
void  S232C4 ::v108(){vfunc_called(this, "_ZN6S232C44v108Ev");}
void  S232C4 ::v109(){vfunc_called(this, "_ZN6S232C44v109Ev");}
void  S232C4 ::v110(){vfunc_called(this, "_ZN6S232C44v110Ev");}
void  S232C4 ::v111(){vfunc_called(this, "_ZN6S232C44v111Ev");}
void  S232C4 ::v112(){vfunc_called(this, "_ZN6S232C44v112Ev");}
void  S232C4 ::v113(){vfunc_called(this, "_ZN6S232C44v113Ev");}
S232C4 ::S232C4(){ note_ctor("S232C4", this);} // tgen

static void Test_S232C4()
{
  extern Class_Descriptor cd_S232C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S232C4, buf);
    S232C4 *dp, &lv = *(dp=new (buf) S232C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S232C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S232C4)");
    check_base_class_offset(lv, (S232C6*)(S232C5*), 0, "S232C4");
    check_base_class_offset(lv, (S232C5*), 0, "S232C4");
    check_field_offset(lv, s232c4f0, ABISELECT(232,180), "S232C4.s232c4f0");
    set_bf_and_test(lv, s232c4f1, ABISELECT(248,192), 0, 1, 1, "S232C4");
    test_class_info(&lv, &cd_S232C4);
    dp->~S232C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS232C4(Test_S232C4, "S232C4", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S232C4C1Ev();
extern void _ZN6S232C4D1Ev();
Name_Map name_map_S232C4[] = {
  NSPAIR(_ZN6S232C4C1Ev),
  NSPAIR(_ZN6S232C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S232C6;
extern VTBL_ENTRY _ZTI6S232C6[];
extern  VTBL_ENTRY _ZTV6S232C6[];
extern Class_Descriptor cd_S232C5;
extern VTBL_ENTRY _ZTI6S232C5[];
extern  VTBL_ENTRY _ZTV6S232C5[];
static Base_Class bases_S232C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S232C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S232C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S232C4[];
extern void _ZN6S232C4D1Ev();
extern void _ZN6S232C4D0Ev();
extern void _ZN6S232C62v5Ev();
extern void _ZN6S232C62v6Ev();
extern void _ZN6S232C62v7Ev();
extern void _ZN6S232C62v8Ev();
extern void _ZN6S232C62v9Ev();
extern void _ZN6S232C63v10Ev();
extern void _ZN6S232C63v11Ev();
extern void _ZN6S232C63v12Ev();
extern void _ZN6S232C63v13Ev();
extern void _ZN6S232C63v14Ev();
extern void _ZN6S232C63v15Ev();
extern void _ZN6S232C63v16Ev();
extern void _ZN6S232C63v17Ev();
extern void _ZN6S232C63v18Ev();
extern void _ZN6S232C63v19Ev();
extern void _ZN6S232C63v20Ev();
extern void _ZN6S232C63v21Ev();
extern void _ZN6S232C63v22Ev();
extern void _ZN6S232C63v23Ev();
extern void _ZN6S232C63v24Ev();
extern void _ZN6S232C63v25Ev();
extern void _ZN6S232C63v26Ev();
extern void _ZN6S232C63v27Ev();
extern void _ZN6S232C63v28Ev();
extern void _ZN6S232C63v29Ev();
extern void _ZN6S232C63v30Ev();
extern void _ZN6S232C63v31Ev();
extern void _ZN6S232C63v32Ev();
extern void _ZN6S232C63v33Ev();
extern void _ZN6S232C63v34Ev();
extern void _ZN6S232C63v35Ev();
extern void _ZN6S232C63v36Ev();
extern void _ZN6S232C63v37Ev();
extern void _ZN6S232C63v38Ev();
extern void _ZN6S232C63v39Ev();
extern void _ZN6S232C63v40Ev();
extern void _ZN6S232C63v41Ev();
extern void _ZN6S232C63v42Ev();
extern void _ZN6S232C63v43Ev();
extern void _ZN6S232C63v44Ev();
extern void _ZN6S232C63v45Ev();
extern void _ZN6S232C63v46Ev();
extern void _ZN6S232C63v47Ev();
extern void _ZN6S232C63v48Ev();
extern void _ZN6S232C63v49Ev();
extern void _ZN6S232C63v50Ev();
extern void _ZN6S232C63v51Ev();
extern void _ZN6S232C63v52Ev();
extern void _ZN6S232C63v53Ev();
extern void _ZN6S232C63v54Ev();
extern void _ZN6S232C63v55Ev();
extern void _ZN6S232C63v56Ev();
extern void _ZN6S232C63v57Ev();
extern void _ZN6S232C63v58Ev();
extern void _ZN6S232C63v59Ev();
extern void _ZN6S232C63v60Ev();
extern void _ZN6S232C63v61Ev();
extern void _ZN6S232C63v62Ev();
extern void _ZN6S232C63v63Ev();
extern void _ZN6S232C63v64Ev();
extern void _ZN6S232C63v65Ev();
extern void _ZN6S232C63v66Ev();
extern void _ZN6S232C63v67Ev();
extern void _ZN6S232C63v68Ev();
extern void _ZN6S232C53v69Ev();
extern void _ZN6S232C53v70Ev();
extern void _ZN6S232C53v71Ev();
extern void _ZN6S232C53v72Ev();
extern void _ZN6S232C53v73Ev();
extern void _ZN6S232C53v74Ev();
extern void _ZN6S232C53v75Ev();
extern void _ZN6S232C53v76Ev();
extern void _ZN6S232C53v77Ev();
extern void _ZN6S232C53v78Ev();
extern void _ZN6S232C53v79Ev();
extern void _ZN6S232C53v80Ev();
extern void _ZN6S232C53v81Ev();
extern void _ZN6S232C53v82Ev();
extern void _ZN6S232C53v83Ev();
extern void _ZN6S232C53v84Ev();
extern void _ZN6S232C53v85Ev();
extern void _ZN6S232C53v86Ev();
extern void _ZN6S232C53v87Ev();
extern void _ZN6S232C53v88Ev();
extern void _ZN6S232C53v89Ev();
extern void _ZN6S232C53v90Ev();
extern void _ZN6S232C53v91Ev();
extern void _ZN6S232C53v92Ev();
extern void _ZN6S232C53v93Ev();
extern void _ZN6S232C53v94Ev();
extern void _ZN6S232C53v95Ev();
extern void _ZN6S232C43v96Ev();
extern void _ZN6S232C43v97Ev();
extern void _ZN6S232C43v98Ev();
extern void _ZN6S232C43v99Ev();
extern void _ZN6S232C44v100Ev();
extern void _ZN6S232C44v101Ev();
extern void _ZN6S232C44v102Ev();
extern void _ZN6S232C44v103Ev();
extern void _ZN6S232C44v104Ev();
extern void _ZN6S232C44v105Ev();
extern void _ZN6S232C44v106Ev();
extern void _ZN6S232C44v107Ev();
extern void _ZN6S232C44v108Ev();
extern void _ZN6S232C44v109Ev();
extern void _ZN6S232C44v110Ev();
extern void _ZN6S232C44v111Ev();
extern void _ZN6S232C44v112Ev();
extern void _ZN6S232C44v113Ev();
static  VTBL_ENTRY vtc_S232C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S232C4[0]),
  (VTBL_ENTRY)&_ZN6S232C4D1Ev,
  (VTBL_ENTRY)&_ZN6S232C4D0Ev,
  (VTBL_ENTRY)&_ZN6S232C62v5Ev,
  (VTBL_ENTRY)&_ZN6S232C62v6Ev,
  (VTBL_ENTRY)&_ZN6S232C62v7Ev,
  (VTBL_ENTRY)&_ZN6S232C62v8Ev,
  (VTBL_ENTRY)&_ZN6S232C62v9Ev,
  (VTBL_ENTRY)&_ZN6S232C63v10Ev,
  (VTBL_ENTRY)&_ZN6S232C63v11Ev,
  (VTBL_ENTRY)&_ZN6S232C63v12Ev,
  (VTBL_ENTRY)&_ZN6S232C63v13Ev,
  (VTBL_ENTRY)&_ZN6S232C63v14Ev,
  (VTBL_ENTRY)&_ZN6S232C63v15Ev,
  (VTBL_ENTRY)&_ZN6S232C63v16Ev,
  (VTBL_ENTRY)&_ZN6S232C63v17Ev,
  (VTBL_ENTRY)&_ZN6S232C63v18Ev,
  (VTBL_ENTRY)&_ZN6S232C63v19Ev,
  (VTBL_ENTRY)&_ZN6S232C63v20Ev,
  (VTBL_ENTRY)&_ZN6S232C63v21Ev,
  (VTBL_ENTRY)&_ZN6S232C63v22Ev,
  (VTBL_ENTRY)&_ZN6S232C63v23Ev,
  (VTBL_ENTRY)&_ZN6S232C63v24Ev,
  (VTBL_ENTRY)&_ZN6S232C63v25Ev,
  (VTBL_ENTRY)&_ZN6S232C63v26Ev,
  (VTBL_ENTRY)&_ZN6S232C63v27Ev,
  (VTBL_ENTRY)&_ZN6S232C63v28Ev,
  (VTBL_ENTRY)&_ZN6S232C63v29Ev,
  (VTBL_ENTRY)&_ZN6S232C63v30Ev,
  (VTBL_ENTRY)&_ZN6S232C63v31Ev,
  (VTBL_ENTRY)&_ZN6S232C63v32Ev,
  (VTBL_ENTRY)&_ZN6S232C63v33Ev,
  (VTBL_ENTRY)&_ZN6S232C63v34Ev,
  (VTBL_ENTRY)&_ZN6S232C63v35Ev,
  (VTBL_ENTRY)&_ZN6S232C63v36Ev,
  (VTBL_ENTRY)&_ZN6S232C63v37Ev,
  (VTBL_ENTRY)&_ZN6S232C63v38Ev,
  (VTBL_ENTRY)&_ZN6S232C63v39Ev,
  (VTBL_ENTRY)&_ZN6S232C63v40Ev,
  (VTBL_ENTRY)&_ZN6S232C63v41Ev,
  (VTBL_ENTRY)&_ZN6S232C63v42Ev,
  (VTBL_ENTRY)&_ZN6S232C63v43Ev,
  (VTBL_ENTRY)&_ZN6S232C63v44Ev,
  (VTBL_ENTRY)&_ZN6S232C63v45Ev,
  (VTBL_ENTRY)&_ZN6S232C63v46Ev,
  (VTBL_ENTRY)&_ZN6S232C63v47Ev,
  (VTBL_ENTRY)&_ZN6S232C63v48Ev,
  (VTBL_ENTRY)&_ZN6S232C63v49Ev,
  (VTBL_ENTRY)&_ZN6S232C63v50Ev,
  (VTBL_ENTRY)&_ZN6S232C63v51Ev,
  (VTBL_ENTRY)&_ZN6S232C63v52Ev,
  (VTBL_ENTRY)&_ZN6S232C63v53Ev,
  (VTBL_ENTRY)&_ZN6S232C63v54Ev,
  (VTBL_ENTRY)&_ZN6S232C63v55Ev,
  (VTBL_ENTRY)&_ZN6S232C63v56Ev,
  (VTBL_ENTRY)&_ZN6S232C63v57Ev,
  (VTBL_ENTRY)&_ZN6S232C63v58Ev,
  (VTBL_ENTRY)&_ZN6S232C63v59Ev,
  (VTBL_ENTRY)&_ZN6S232C63v60Ev,
  (VTBL_ENTRY)&_ZN6S232C63v61Ev,
  (VTBL_ENTRY)&_ZN6S232C63v62Ev,
  (VTBL_ENTRY)&_ZN6S232C63v63Ev,
  (VTBL_ENTRY)&_ZN6S232C63v64Ev,
  (VTBL_ENTRY)&_ZN6S232C63v65Ev,
  (VTBL_ENTRY)&_ZN6S232C63v66Ev,
  (VTBL_ENTRY)&_ZN6S232C63v67Ev,
  (VTBL_ENTRY)&_ZN6S232C63v68Ev,
  (VTBL_ENTRY)&_ZN6S232C53v69Ev,
  (VTBL_ENTRY)&_ZN6S232C53v70Ev,
  (VTBL_ENTRY)&_ZN6S232C53v71Ev,
  (VTBL_ENTRY)&_ZN6S232C53v72Ev,
  (VTBL_ENTRY)&_ZN6S232C53v73Ev,
  (VTBL_ENTRY)&_ZN6S232C53v74Ev,
  (VTBL_ENTRY)&_ZN6S232C53v75Ev,
  (VTBL_ENTRY)&_ZN6S232C53v76Ev,
  (VTBL_ENTRY)&_ZN6S232C53v77Ev,
  (VTBL_ENTRY)&_ZN6S232C53v78Ev,
  (VTBL_ENTRY)&_ZN6S232C53v79Ev,
  (VTBL_ENTRY)&_ZN6S232C53v80Ev,
  (VTBL_ENTRY)&_ZN6S232C53v81Ev,
  (VTBL_ENTRY)&_ZN6S232C53v82Ev,
  (VTBL_ENTRY)&_ZN6S232C53v83Ev,
  (VTBL_ENTRY)&_ZN6S232C53v84Ev,
  (VTBL_ENTRY)&_ZN6S232C53v85Ev,
  (VTBL_ENTRY)&_ZN6S232C53v86Ev,
  (VTBL_ENTRY)&_ZN6S232C53v87Ev,
  (VTBL_ENTRY)&_ZN6S232C53v88Ev,
  (VTBL_ENTRY)&_ZN6S232C53v89Ev,
  (VTBL_ENTRY)&_ZN6S232C53v90Ev,
  (VTBL_ENTRY)&_ZN6S232C53v91Ev,
  (VTBL_ENTRY)&_ZN6S232C53v92Ev,
  (VTBL_ENTRY)&_ZN6S232C53v93Ev,
  (VTBL_ENTRY)&_ZN6S232C53v94Ev,
  (VTBL_ENTRY)&_ZN6S232C53v95Ev,
  (VTBL_ENTRY)&_ZN6S232C43v96Ev,
  (VTBL_ENTRY)&_ZN6S232C43v97Ev,
  (VTBL_ENTRY)&_ZN6S232C43v98Ev,
  (VTBL_ENTRY)&_ZN6S232C43v99Ev,
  (VTBL_ENTRY)&_ZN6S232C44v100Ev,
  (VTBL_ENTRY)&_ZN6S232C44v101Ev,
  (VTBL_ENTRY)&_ZN6S232C44v102Ev,
  (VTBL_ENTRY)&_ZN6S232C44v103Ev,
  (VTBL_ENTRY)&_ZN6S232C44v104Ev,
  (VTBL_ENTRY)&_ZN6S232C44v105Ev,
  (VTBL_ENTRY)&_ZN6S232C44v106Ev,
  (VTBL_ENTRY)&_ZN6S232C44v107Ev,
  (VTBL_ENTRY)&_ZN6S232C44v108Ev,
  (VTBL_ENTRY)&_ZN6S232C44v109Ev,
  (VTBL_ENTRY)&_ZN6S232C44v110Ev,
  (VTBL_ENTRY)&_ZN6S232C44v111Ev,
  (VTBL_ENTRY)&_ZN6S232C44v112Ev,
  (VTBL_ENTRY)&_ZN6S232C44v113Ev,
};
extern VTBL_ENTRY _ZTI6S232C4[];
extern  VTBL_ENTRY _ZTV6S232C4[];
Class_Descriptor cd_S232C4 = {  "S232C4", // class name
  bases_S232C4, 2,
  &(vtc_S232C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S232C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S232C4),113, //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  S232C3  : S232C4 {
  ::S165C27 s232c3f0;
  int s232c3f1[2];
  unsigned int s232c3f2:1;
  virtual  ~S232C3(); // _ZN6S232C3D1Ev
  virtual void  v114(); // _ZN6S232C34v114Ev
  virtual void  v115(); // _ZN6S232C34v115Ev
  virtual void  v116(); // _ZN6S232C34v116Ev
  virtual void  v117(); // _ZN6S232C34v117Ev
  virtual void  v118(); // _ZN6S232C34v118Ev
  virtual void  v119(); // _ZN6S232C34v119Ev
  virtual void  v120(); // _ZN6S232C34v120Ev
  S232C3(); // tgen
};
//SIG(-1 S232C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 FC16{ BC17{ BC8}} Fi[2] Fi:1}


 S232C3 ::~S232C3(){ note_dtor("S232C3", this);}
void  S232C3 ::v114(){vfunc_called(this, "_ZN6S232C34v114Ev");}
void  S232C3 ::v115(){vfunc_called(this, "_ZN6S232C34v115Ev");}
void  S232C3 ::v116(){vfunc_called(this, "_ZN6S232C34v116Ev");}
void  S232C3 ::v117(){vfunc_called(this, "_ZN6S232C34v117Ev");}
void  S232C3 ::v118(){vfunc_called(this, "_ZN6S232C34v118Ev");}
void  S232C3 ::v119(){vfunc_called(this, "_ZN6S232C34v119Ev");}
void  S232C3 ::v120(){vfunc_called(this, "_ZN6S232C34v120Ev");}
S232C3 ::S232C3(){ note_ctor("S232C3", this);} // tgen

static void Test_S232C3()
{
  extern Class_Descriptor cd_S232C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,56)];
    init_test(&cd_S232C3, buf);
    S232C3 *dp, &lv = *(dp=new (buf) S232C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,220), "sizeof(S232C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S232C3)");
    check_base_class_offset(lv, (S232C6*)(S232C5*)(S232C4*), 0, "S232C3");
    check_base_class_offset(lv, (S232C5*)(S232C4*), 0, "S232C3");
    check_base_class_offset(lv, (S232C4*), 0, "S232C3");
    check_field_offset(lv, s232c3f0, ABISELECT(256,196), "S232C3.s232c3f0");
    check_field_offset(lv, s232c3f1, ABISELECT(272,208), "S232C3.s232c3f1");
    set_bf_and_test(lv, s232c3f2, ABISELECT(280,216), 0, 1, 1, "S232C3");
    test_class_info(&lv, &cd_S232C3);
    dp->~S232C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS232C3(Test_S232C3, "S232C3", ABISELECT(288,220));

#else // __cplusplus

extern void _ZN6S232C3C1Ev();
extern void _ZN6S232C3D1Ev();
Name_Map name_map_S232C3[] = {
  NSPAIR(_ZN6S232C3C1Ev),
  NSPAIR(_ZN6S232C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S232C6;
extern VTBL_ENTRY _ZTI6S232C6[];
extern  VTBL_ENTRY _ZTV6S232C6[];
extern Class_Descriptor cd_S232C5;
extern VTBL_ENTRY _ZTI6S232C5[];
extern  VTBL_ENTRY _ZTV6S232C5[];
extern Class_Descriptor cd_S232C4;
extern VTBL_ENTRY _ZTI6S232C4[];
extern  VTBL_ENTRY _ZTV6S232C4[];
static Base_Class bases_S232C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S232C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S232C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S232C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S232C3[];
extern void _ZN6S232C3D1Ev();
extern void _ZN6S232C3D0Ev();
extern void _ZN6S232C62v5Ev();
extern void _ZN6S232C62v6Ev();
extern void _ZN6S232C62v7Ev();
extern void _ZN6S232C62v8Ev();
extern void _ZN6S232C62v9Ev();
extern void _ZN6S232C63v10Ev();
extern void _ZN6S232C63v11Ev();
extern void _ZN6S232C63v12Ev();
extern void _ZN6S232C63v13Ev();
extern void _ZN6S232C63v14Ev();
extern void _ZN6S232C63v15Ev();
extern void _ZN6S232C63v16Ev();
extern void _ZN6S232C63v17Ev();
extern void _ZN6S232C63v18Ev();
extern void _ZN6S232C63v19Ev();
extern void _ZN6S232C63v20Ev();
extern void _ZN6S232C63v21Ev();
extern void _ZN6S232C63v22Ev();
extern void _ZN6S232C63v23Ev();
extern void _ZN6S232C63v24Ev();
extern void _ZN6S232C63v25Ev();
extern void _ZN6S232C63v26Ev();
extern void _ZN6S232C63v27Ev();
extern void _ZN6S232C63v28Ev();
extern void _ZN6S232C63v29Ev();
extern void _ZN6S232C63v30Ev();
extern void _ZN6S232C63v31Ev();
extern void _ZN6S232C63v32Ev();
extern void _ZN6S232C63v33Ev();
extern void _ZN6S232C63v34Ev();
extern void _ZN6S232C63v35Ev();
extern void _ZN6S232C63v36Ev();
extern void _ZN6S232C63v37Ev();
extern void _ZN6S232C63v38Ev();
extern void _ZN6S232C63v39Ev();
extern void _ZN6S232C63v40Ev();
extern void _ZN6S232C63v41Ev();
extern void _ZN6S232C63v42Ev();
extern void _ZN6S232C63v43Ev();
extern void _ZN6S232C63v44Ev();
extern void _ZN6S232C63v45Ev();
extern void _ZN6S232C63v46Ev();
extern void _ZN6S232C63v47Ev();
extern void _ZN6S232C63v48Ev();
extern void _ZN6S232C63v49Ev();
extern void _ZN6S232C63v50Ev();
extern void _ZN6S232C63v51Ev();
extern void _ZN6S232C63v52Ev();
extern void _ZN6S232C63v53Ev();
extern void _ZN6S232C63v54Ev();
extern void _ZN6S232C63v55Ev();
extern void _ZN6S232C63v56Ev();
extern void _ZN6S232C63v57Ev();
extern void _ZN6S232C63v58Ev();
extern void _ZN6S232C63v59Ev();
extern void _ZN6S232C63v60Ev();
extern void _ZN6S232C63v61Ev();
extern void _ZN6S232C63v62Ev();
extern void _ZN6S232C63v63Ev();
extern void _ZN6S232C63v64Ev();
extern void _ZN6S232C63v65Ev();
extern void _ZN6S232C63v66Ev();
extern void _ZN6S232C63v67Ev();
extern void _ZN6S232C63v68Ev();
extern void _ZN6S232C53v69Ev();
extern void _ZN6S232C53v70Ev();
extern void _ZN6S232C53v71Ev();
extern void _ZN6S232C53v72Ev();
extern void _ZN6S232C53v73Ev();
extern void _ZN6S232C53v74Ev();
extern void _ZN6S232C53v75Ev();
extern void _ZN6S232C53v76Ev();
extern void _ZN6S232C53v77Ev();
extern void _ZN6S232C53v78Ev();
extern void _ZN6S232C53v79Ev();
extern void _ZN6S232C53v80Ev();
extern void _ZN6S232C53v81Ev();
extern void _ZN6S232C53v82Ev();
extern void _ZN6S232C53v83Ev();
extern void _ZN6S232C53v84Ev();
extern void _ZN6S232C53v85Ev();
extern void _ZN6S232C53v86Ev();
extern void _ZN6S232C53v87Ev();
extern void _ZN6S232C53v88Ev();
extern void _ZN6S232C53v89Ev();
extern void _ZN6S232C53v90Ev();
extern void _ZN6S232C53v91Ev();
extern void _ZN6S232C53v92Ev();
extern void _ZN6S232C53v93Ev();
extern void _ZN6S232C53v94Ev();
extern void _ZN6S232C53v95Ev();
extern void _ZN6S232C43v96Ev();
extern void _ZN6S232C43v97Ev();
extern void _ZN6S232C43v98Ev();
extern void _ZN6S232C43v99Ev();
extern void _ZN6S232C44v100Ev();
extern void _ZN6S232C44v101Ev();
extern void _ZN6S232C44v102Ev();
extern void _ZN6S232C44v103Ev();
extern void _ZN6S232C44v104Ev();
extern void _ZN6S232C44v105Ev();
extern void _ZN6S232C44v106Ev();
extern void _ZN6S232C44v107Ev();
extern void _ZN6S232C44v108Ev();
extern void _ZN6S232C44v109Ev();
extern void _ZN6S232C44v110Ev();
extern void _ZN6S232C44v111Ev();
extern void _ZN6S232C44v112Ev();
extern void _ZN6S232C44v113Ev();
extern void _ZN6S232C34v114Ev();
extern void _ZN6S232C34v115Ev();
extern void _ZN6S232C34v116Ev();
extern void _ZN6S232C34v117Ev();
extern void _ZN6S232C34v118Ev();
extern void _ZN6S232C34v119Ev();
extern void _ZN6S232C34v120Ev();
static  VTBL_ENTRY vtc_S232C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S232C3[0]),
  (VTBL_ENTRY)&_ZN6S232C3D1Ev,
  (VTBL_ENTRY)&_ZN6S232C3D0Ev,
  (VTBL_ENTRY)&_ZN6S232C62v5Ev,
  (VTBL_ENTRY)&_ZN6S232C62v6Ev,
  (VTBL_ENTRY)&_ZN6S232C62v7Ev,
  (VTBL_ENTRY)&_ZN6S232C62v8Ev,
  (VTBL_ENTRY)&_ZN6S232C62v9Ev,
  (VTBL_ENTRY)&_ZN6S232C63v10Ev,
  (VTBL_ENTRY)&_ZN6S232C63v11Ev,
  (VTBL_ENTRY)&_ZN6S232C63v12Ev,
  (VTBL_ENTRY)&_ZN6S232C63v13Ev,
  (VTBL_ENTRY)&_ZN6S232C63v14Ev,
  (VTBL_ENTRY)&_ZN6S232C63v15Ev,
  (VTBL_ENTRY)&_ZN6S232C63v16Ev,
  (VTBL_ENTRY)&_ZN6S232C63v17Ev,
  (VTBL_ENTRY)&_ZN6S232C63v18Ev,
  (VTBL_ENTRY)&_ZN6S232C63v19Ev,
  (VTBL_ENTRY)&_ZN6S232C63v20Ev,
  (VTBL_ENTRY)&_ZN6S232C63v21Ev,
  (VTBL_ENTRY)&_ZN6S232C63v22Ev,
  (VTBL_ENTRY)&_ZN6S232C63v23Ev,
  (VTBL_ENTRY)&_ZN6S232C63v24Ev,
  (VTBL_ENTRY)&_ZN6S232C63v25Ev,
  (VTBL_ENTRY)&_ZN6S232C63v26Ev,
  (VTBL_ENTRY)&_ZN6S232C63v27Ev,
  (VTBL_ENTRY)&_ZN6S232C63v28Ev,
  (VTBL_ENTRY)&_ZN6S232C63v29Ev,
  (VTBL_ENTRY)&_ZN6S232C63v30Ev,
  (VTBL_ENTRY)&_ZN6S232C63v31Ev,
  (VTBL_ENTRY)&_ZN6S232C63v32Ev,
  (VTBL_ENTRY)&_ZN6S232C63v33Ev,
  (VTBL_ENTRY)&_ZN6S232C63v34Ev,
  (VTBL_ENTRY)&_ZN6S232C63v35Ev,
  (VTBL_ENTRY)&_ZN6S232C63v36Ev,
  (VTBL_ENTRY)&_ZN6S232C63v37Ev,
  (VTBL_ENTRY)&_ZN6S232C63v38Ev,
  (VTBL_ENTRY)&_ZN6S232C63v39Ev,
  (VTBL_ENTRY)&_ZN6S232C63v40Ev,
  (VTBL_ENTRY)&_ZN6S232C63v41Ev,
  (VTBL_ENTRY)&_ZN6S232C63v42Ev,
  (VTBL_ENTRY)&_ZN6S232C63v43Ev,
  (VTBL_ENTRY)&_ZN6S232C63v44Ev,
  (VTBL_ENTRY)&_ZN6S232C63v45Ev,
  (VTBL_ENTRY)&_ZN6S232C63v46Ev,
  (VTBL_ENTRY)&_ZN6S232C63v47Ev,
  (VTBL_ENTRY)&_ZN6S232C63v48Ev,
  (VTBL_ENTRY)&_ZN6S232C63v49Ev,
  (VTBL_ENTRY)&_ZN6S232C63v50Ev,
  (VTBL_ENTRY)&_ZN6S232C63v51Ev,
  (VTBL_ENTRY)&_ZN6S232C63v52Ev,
  (VTBL_ENTRY)&_ZN6S232C63v53Ev,
  (VTBL_ENTRY)&_ZN6S232C63v54Ev,
  (VTBL_ENTRY)&_ZN6S232C63v55Ev,
  (VTBL_ENTRY)&_ZN6S232C63v56Ev,
  (VTBL_ENTRY)&_ZN6S232C63v57Ev,
  (VTBL_ENTRY)&_ZN6S232C63v58Ev,
  (VTBL_ENTRY)&_ZN6S232C63v59Ev,
  (VTBL_ENTRY)&_ZN6S232C63v60Ev,
  (VTBL_ENTRY)&_ZN6S232C63v61Ev,
  (VTBL_ENTRY)&_ZN6S232C63v62Ev,
  (VTBL_ENTRY)&_ZN6S232C63v63Ev,
  (VTBL_ENTRY)&_ZN6S232C63v64Ev,
  (VTBL_ENTRY)&_ZN6S232C63v65Ev,
  (VTBL_ENTRY)&_ZN6S232C63v66Ev,
  (VTBL_ENTRY)&_ZN6S232C63v67Ev,
  (VTBL_ENTRY)&_ZN6S232C63v68Ev,
  (VTBL_ENTRY)&_ZN6S232C53v69Ev,
  (VTBL_ENTRY)&_ZN6S232C53v70Ev,
  (VTBL_ENTRY)&_ZN6S232C53v71Ev,
  (VTBL_ENTRY)&_ZN6S232C53v72Ev,
  (VTBL_ENTRY)&_ZN6S232C53v73Ev,
  (VTBL_ENTRY)&_ZN6S232C53v74Ev,
  (VTBL_ENTRY)&_ZN6S232C53v75Ev,
  (VTBL_ENTRY)&_ZN6S232C53v76Ev,
  (VTBL_ENTRY)&_ZN6S232C53v77Ev,
  (VTBL_ENTRY)&_ZN6S232C53v78Ev,
  (VTBL_ENTRY)&_ZN6S232C53v79Ev,
  (VTBL_ENTRY)&_ZN6S232C53v80Ev,
  (VTBL_ENTRY)&_ZN6S232C53v81Ev,
  (VTBL_ENTRY)&_ZN6S232C53v82Ev,
  (VTBL_ENTRY)&_ZN6S232C53v83Ev,
  (VTBL_ENTRY)&_ZN6S232C53v84Ev,
  (VTBL_ENTRY)&_ZN6S232C53v85Ev,
  (VTBL_ENTRY)&_ZN6S232C53v86Ev,
  (VTBL_ENTRY)&_ZN6S232C53v87Ev,
  (VTBL_ENTRY)&_ZN6S232C53v88Ev,
  (VTBL_ENTRY)&_ZN6S232C53v89Ev,
  (VTBL_ENTRY)&_ZN6S232C53v90Ev,
  (VTBL_ENTRY)&_ZN6S232C53v91Ev,
  (VTBL_ENTRY)&_ZN6S232C53v92Ev,
  (VTBL_ENTRY)&_ZN6S232C53v93Ev,
  (VTBL_ENTRY)&_ZN6S232C53v94Ev,
  (VTBL_ENTRY)&_ZN6S232C53v95Ev,
  (VTBL_ENTRY)&_ZN6S232C43v96Ev,
  (VTBL_ENTRY)&_ZN6S232C43v97Ev,
  (VTBL_ENTRY)&_ZN6S232C43v98Ev,
  (VTBL_ENTRY)&_ZN6S232C43v99Ev,
  (VTBL_ENTRY)&_ZN6S232C44v100Ev,
  (VTBL_ENTRY)&_ZN6S232C44v101Ev,
  (VTBL_ENTRY)&_ZN6S232C44v102Ev,
  (VTBL_ENTRY)&_ZN6S232C44v103Ev,
  (VTBL_ENTRY)&_ZN6S232C44v104Ev,
  (VTBL_ENTRY)&_ZN6S232C44v105Ev,
  (VTBL_ENTRY)&_ZN6S232C44v106Ev,
  (VTBL_ENTRY)&_ZN6S232C44v107Ev,
  (VTBL_ENTRY)&_ZN6S232C44v108Ev,
  (VTBL_ENTRY)&_ZN6S232C44v109Ev,
  (VTBL_ENTRY)&_ZN6S232C44v110Ev,
  (VTBL_ENTRY)&_ZN6S232C44v111Ev,
  (VTBL_ENTRY)&_ZN6S232C44v112Ev,
  (VTBL_ENTRY)&_ZN6S232C44v113Ev,
  (VTBL_ENTRY)&_ZN6S232C34v114Ev,
  (VTBL_ENTRY)&_ZN6S232C34v115Ev,
  (VTBL_ENTRY)&_ZN6S232C34v116Ev,
  (VTBL_ENTRY)&_ZN6S232C34v117Ev,
  (VTBL_ENTRY)&_ZN6S232C34v118Ev,
  (VTBL_ENTRY)&_ZN6S232C34v119Ev,
  (VTBL_ENTRY)&_ZN6S232C34v120Ev,
};
extern VTBL_ENTRY _ZTI6S232C3[];
extern  VTBL_ENTRY _ZTV6S232C3[];
Class_Descriptor cd_S232C3 = {  "S232C3", // class name
  bases_S232C3, 3,
  &(vtc_S232C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,220), // object size
  NSPAIRA(_ZTI6S232C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S232C3),120, //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  S232C2  : S232C3 {
  int s232c2f0;
  ::S165C27 s232c2f1;
  int s232c2f2;
  virtual  ~S232C2(); // _ZN6S232C2D1Ev
  virtual void  v121(); // _ZN6S232C24v121Ev
  virtual void  v122(); // _ZN6S232C24v122Ev
  virtual void  v123(); // _ZN6S232C24v123Ev
  virtual void  v124(); // _ZN6S232C24v124Ev
  virtual void  v125(); // _ZN6S232C24v125Ev
  virtual void  v126(); // _ZN6S232C24v126Ev
  S232C2(); // tgen
};
//SIG(-1 S232C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v93 v94 v95 v96 v97 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC15{ BC16{ BC9}} Fi:1} vd v116 v117 v118 v119 v120 v121 v122 FC17{ BC18{ BC9}} Fi[2] Fi:1} vd v1 v2 v3 v4 v5 v6 Fi FC17 Fi}


 S232C2 ::~S232C2(){ note_dtor("S232C2", this);}
void  S232C2 ::v121(){vfunc_called(this, "_ZN6S232C24v121Ev");}
void  S232C2 ::v122(){vfunc_called(this, "_ZN6S232C24v122Ev");}
void  S232C2 ::v123(){vfunc_called(this, "_ZN6S232C24v123Ev");}
void  S232C2 ::v124(){vfunc_called(this, "_ZN6S232C24v124Ev");}
void  S232C2 ::v125(){vfunc_called(this, "_ZN6S232C24v125Ev");}
void  S232C2 ::v126(){vfunc_called(this, "_ZN6S232C24v126Ev");}
S232C2 ::S232C2(){ note_ctor("S232C2", this);} // tgen

static void Test_S232C2()
{
  extern Class_Descriptor cd_S232C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,61)];
    init_test(&cd_S232C2, buf);
    S232C2 *dp, &lv = *(dp=new (buf) S232C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,240), "sizeof(S232C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S232C2)");
    check_base_class_offset(lv, (S232C6*)(S232C5*)(S232C4*)(S232C3*), 0, "S232C2");
    check_base_class_offset(lv, (S232C5*)(S232C4*)(S232C3*), 0, "S232C2");
    check_base_class_offset(lv, (S232C4*)(S232C3*), 0, "S232C2");
    check_base_class_offset(lv, (S232C3*), 0, "S232C2");
    check_field_offset(lv, s232c2f0, ABISELECT(284,220), "S232C2.s232c2f0");
    check_field_offset(lv, s232c2f1, ABISELECT(288,224), "S232C2.s232c2f1");
    check_field_offset(lv, s232c2f2, ABISELECT(304,236), "S232C2.s232c2f2");
    test_class_info(&lv, &cd_S232C2);
    dp->~S232C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS232C2(Test_S232C2, "S232C2", ABISELECT(312,240));

#else // __cplusplus

extern void _ZN6S232C2C1Ev();
extern void _ZN6S232C2D1Ev();
Name_Map name_map_S232C2[] = {
  NSPAIR(_ZN6S232C2C1Ev),
  NSPAIR(_ZN6S232C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S232C6;
extern VTBL_ENTRY _ZTI6S232C6[];
extern  VTBL_ENTRY _ZTV6S232C6[];
extern Class_Descriptor cd_S232C5;
extern VTBL_ENTRY _ZTI6S232C5[];
extern  VTBL_ENTRY _ZTV6S232C5[];
extern Class_Descriptor cd_S232C4;
extern VTBL_ENTRY _ZTI6S232C4[];
extern  VTBL_ENTRY _ZTV6S232C4[];
extern Class_Descriptor cd_S232C3;
extern VTBL_ENTRY _ZTI6S232C3[];
extern  VTBL_ENTRY _ZTV6S232C3[];
static Base_Class bases_S232C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S232C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S232C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S232C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S232C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S232C2[];
extern void _ZN6S232C2D1Ev();
extern void _ZN6S232C2D0Ev();
extern void _ZN6S232C62v5Ev();
extern void _ZN6S232C62v6Ev();
extern void _ZN6S232C62v7Ev();
extern void _ZN6S232C62v8Ev();
extern void _ZN6S232C62v9Ev();
extern void _ZN6S232C63v10Ev();
extern void _ZN6S232C63v11Ev();
extern void _ZN6S232C63v12Ev();
extern void _ZN6S232C63v13Ev();
extern void _ZN6S232C63v14Ev();
extern void _ZN6S232C63v15Ev();
extern void _ZN6S232C63v16Ev();
extern void _ZN6S232C63v17Ev();
extern void _ZN6S232C63v18Ev();
extern void _ZN6S232C63v19Ev();
extern void _ZN6S232C63v20Ev();
extern void _ZN6S232C63v21Ev();
extern void _ZN6S232C63v22Ev();
extern void _ZN6S232C63v23Ev();
extern void _ZN6S232C63v24Ev();
extern void _ZN6S232C63v25Ev();
extern void _ZN6S232C63v26Ev();
extern void _ZN6S232C63v27Ev();
extern void _ZN6S232C63v28Ev();
extern void _ZN6S232C63v29Ev();
extern void _ZN6S232C63v30Ev();
extern void _ZN6S232C63v31Ev();
extern void _ZN6S232C63v32Ev();
extern void _ZN6S232C63v33Ev();
extern void _ZN6S232C63v34Ev();
extern void _ZN6S232C63v35Ev();
extern void _ZN6S232C63v36Ev();
extern void _ZN6S232C63v37Ev();
extern void _ZN6S232C63v38Ev();
extern void _ZN6S232C63v39Ev();
extern void _ZN6S232C63v40Ev();
extern void _ZN6S232C63v41Ev();
extern void _ZN6S232C63v42Ev();
extern void _ZN6S232C63v43Ev();
extern void _ZN6S232C63v44Ev();
extern void _ZN6S232C63v45Ev();
extern void _ZN6S232C63v46Ev();
extern void _ZN6S232C63v47Ev();
extern void _ZN6S232C63v48Ev();
extern void _ZN6S232C63v49Ev();
extern void _ZN6S232C63v50Ev();
extern void _ZN6S232C63v51Ev();
extern void _ZN6S232C63v52Ev();
extern void _ZN6S232C63v53Ev();
extern void _ZN6S232C63v54Ev();
extern void _ZN6S232C63v55Ev();
extern void _ZN6S232C63v56Ev();
extern void _ZN6S232C63v57Ev();
extern void _ZN6S232C63v58Ev();
extern void _ZN6S232C63v59Ev();
extern void _ZN6S232C63v60Ev();
extern void _ZN6S232C63v61Ev();
extern void _ZN6S232C63v62Ev();
extern void _ZN6S232C63v63Ev();
extern void _ZN6S232C63v64Ev();
extern void _ZN6S232C63v65Ev();
extern void _ZN6S232C63v66Ev();
extern void _ZN6S232C63v67Ev();
extern void _ZN6S232C63v68Ev();
extern void _ZN6S232C53v69Ev();
extern void _ZN6S232C53v70Ev();
extern void _ZN6S232C53v71Ev();
extern void _ZN6S232C53v72Ev();
extern void _ZN6S232C53v73Ev();
extern void _ZN6S232C53v74Ev();
extern void _ZN6S232C53v75Ev();
extern void _ZN6S232C53v76Ev();
extern void _ZN6S232C53v77Ev();
extern void _ZN6S232C53v78Ev();
extern void _ZN6S232C53v79Ev();
extern void _ZN6S232C53v80Ev();
extern void _ZN6S232C53v81Ev();
extern void _ZN6S232C53v82Ev();
extern void _ZN6S232C53v83Ev();
extern void _ZN6S232C53v84Ev();
extern void _ZN6S232C53v85Ev();
extern void _ZN6S232C53v86Ev();
extern void _ZN6S232C53v87Ev();
extern void _ZN6S232C53v88Ev();
extern void _ZN6S232C53v89Ev();
extern void _ZN6S232C53v90Ev();
extern void _ZN6S232C53v91Ev();
extern void _ZN6S232C53v92Ev();
extern void _ZN6S232C53v93Ev();
extern void _ZN6S232C53v94Ev();
extern void _ZN6S232C53v95Ev();
extern void _ZN6S232C43v96Ev();
extern void _ZN6S232C43v97Ev();
extern void _ZN6S232C43v98Ev();
extern void _ZN6S232C43v99Ev();
extern void _ZN6S232C44v100Ev();
extern void _ZN6S232C44v101Ev();
extern void _ZN6S232C44v102Ev();
extern void _ZN6S232C44v103Ev();
extern void _ZN6S232C44v104Ev();
extern void _ZN6S232C44v105Ev();
extern void _ZN6S232C44v106Ev();
extern void _ZN6S232C44v107Ev();
extern void _ZN6S232C44v108Ev();
extern void _ZN6S232C44v109Ev();
extern void _ZN6S232C44v110Ev();
extern void _ZN6S232C44v111Ev();
extern void _ZN6S232C44v112Ev();
extern void _ZN6S232C44v113Ev();
extern void _ZN6S232C34v114Ev();
extern void _ZN6S232C34v115Ev();
extern void _ZN6S232C34v116Ev();
extern void _ZN6S232C34v117Ev();
extern void _ZN6S232C34v118Ev();
extern void _ZN6S232C34v119Ev();
extern void _ZN6S232C34v120Ev();
extern void _ZN6S232C24v121Ev();
extern void _ZN6S232C24v122Ev();
extern void _ZN6S232C24v123Ev();
extern void _ZN6S232C24v124Ev();
extern void _ZN6S232C24v125Ev();
extern void _ZN6S232C24v126Ev();
static  VTBL_ENTRY vtc_S232C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S232C2[0]),
  (VTBL_ENTRY)&_ZN6S232C2D1Ev,
  (VTBL_ENTRY)&_ZN6S232C2D0Ev,
  (VTBL_ENTRY)&_ZN6S232C62v5Ev,
  (VTBL_ENTRY)&_ZN6S232C62v6Ev,
  (VTBL_ENTRY)&_ZN6S232C62v7Ev,
  (VTBL_ENTRY)&_ZN6S232C62v8Ev,
  (VTBL_ENTRY)&_ZN6S232C62v9Ev,
  (VTBL_ENTRY)&_ZN6S232C63v10Ev,
  (VTBL_ENTRY)&_ZN6S232C63v11Ev,
  (VTBL_ENTRY)&_ZN6S232C63v12Ev,
  (VTBL_ENTRY)&_ZN6S232C63v13Ev,
  (VTBL_ENTRY)&_ZN6S232C63v14Ev,
  (VTBL_ENTRY)&_ZN6S232C63v15Ev,
  (VTBL_ENTRY)&_ZN6S232C63v16Ev,
  (VTBL_ENTRY)&_ZN6S232C63v17Ev,
  (VTBL_ENTRY)&_ZN6S232C63v18Ev,
  (VTBL_ENTRY)&_ZN6S232C63v19Ev,
  (VTBL_ENTRY)&_ZN6S232C63v20Ev,
  (VTBL_ENTRY)&_ZN6S232C63v21Ev,
  (VTBL_ENTRY)&_ZN6S232C63v22Ev,
  (VTBL_ENTRY)&_ZN6S232C63v23Ev,
  (VTBL_ENTRY)&_ZN6S232C63v24Ev,
  (VTBL_ENTRY)&_ZN6S232C63v25Ev,
  (VTBL_ENTRY)&_ZN6S232C63v26Ev,
  (VTBL_ENTRY)&_ZN6S232C63v27Ev,
  (VTBL_ENTRY)&_ZN6S232C63v28Ev,
  (VTBL_ENTRY)&_ZN6S232C63v29Ev,
  (VTBL_ENTRY)&_ZN6S232C63v30Ev,
  (VTBL_ENTRY)&_ZN6S232C63v31Ev,
  (VTBL_ENTRY)&_ZN6S232C63v32Ev,
  (VTBL_ENTRY)&_ZN6S232C63v33Ev,
  (VTBL_ENTRY)&_ZN6S232C63v34Ev,
  (VTBL_ENTRY)&_ZN6S232C63v35Ev,
  (VTBL_ENTRY)&_ZN6S232C63v36Ev,
  (VTBL_ENTRY)&_ZN6S232C63v37Ev,
  (VTBL_ENTRY)&_ZN6S232C63v38Ev,
  (VTBL_ENTRY)&_ZN6S232C63v39Ev,
  (VTBL_ENTRY)&_ZN6S232C63v40Ev,
  (VTBL_ENTRY)&_ZN6S232C63v41Ev,
  (VTBL_ENTRY)&_ZN6S232C63v42Ev,
  (VTBL_ENTRY)&_ZN6S232C63v43Ev,
  (VTBL_ENTRY)&_ZN6S232C63v44Ev,
  (VTBL_ENTRY)&_ZN6S232C63v45Ev,
  (VTBL_ENTRY)&_ZN6S232C63v46Ev,
  (VTBL_ENTRY)&_ZN6S232C63v47Ev,
  (VTBL_ENTRY)&_ZN6S232C63v48Ev,
  (VTBL_ENTRY)&_ZN6S232C63v49Ev,
  (VTBL_ENTRY)&_ZN6S232C63v50Ev,
  (VTBL_ENTRY)&_ZN6S232C63v51Ev,
  (VTBL_ENTRY)&_ZN6S232C63v52Ev,
  (VTBL_ENTRY)&_ZN6S232C63v53Ev,
  (VTBL_ENTRY)&_ZN6S232C63v54Ev,
  (VTBL_ENTRY)&_ZN6S232C63v55Ev,
  (VTBL_ENTRY)&_ZN6S232C63v56Ev,
  (VTBL_ENTRY)&_ZN6S232C63v57Ev,
  (VTBL_ENTRY)&_ZN6S232C63v58Ev,
  (VTBL_ENTRY)&_ZN6S232C63v59Ev,
  (VTBL_ENTRY)&_ZN6S232C63v60Ev,
  (VTBL_ENTRY)&_ZN6S232C63v61Ev,
  (VTBL_ENTRY)&_ZN6S232C63v62Ev,
  (VTBL_ENTRY)&_ZN6S232C63v63Ev,
  (VTBL_ENTRY)&_ZN6S232C63v64Ev,
  (VTBL_ENTRY)&_ZN6S232C63v65Ev,
  (VTBL_ENTRY)&_ZN6S232C63v66Ev,
  (VTBL_ENTRY)&_ZN6S232C63v67Ev,
  (VTBL_ENTRY)&_ZN6S232C63v68Ev,
  (VTBL_ENTRY)&_ZN6S232C53v69Ev,
  (VTBL_ENTRY)&_ZN6S232C53v70Ev,
  (VTBL_ENTRY)&_ZN6S232C53v71Ev,
  (VTBL_ENTRY)&_ZN6S232C53v72Ev,
  (VTBL_ENTRY)&_ZN6S232C53v73Ev,
  (VTBL_ENTRY)&_ZN6S232C53v74Ev,
  (VTBL_ENTRY)&_ZN6S232C53v75Ev,
  (VTBL_ENTRY)&_ZN6S232C53v76Ev,
  (VTBL_ENTRY)&_ZN6S232C53v77Ev,
  (VTBL_ENTRY)&_ZN6S232C53v78Ev,
  (VTBL_ENTRY)&_ZN6S232C53v79Ev,
  (VTBL_ENTRY)&_ZN6S232C53v80Ev,
  (VTBL_ENTRY)&_ZN6S232C53v81Ev,
  (VTBL_ENTRY)&_ZN6S232C53v82Ev,
  (VTBL_ENTRY)&_ZN6S232C53v83Ev,
  (VTBL_ENTRY)&_ZN6S232C53v84Ev,
  (VTBL_ENTRY)&_ZN6S232C53v85Ev,
  (VTBL_ENTRY)&_ZN6S232C53v86Ev,
  (VTBL_ENTRY)&_ZN6S232C53v87Ev,
  (VTBL_ENTRY)&_ZN6S232C53v88Ev,
  (VTBL_ENTRY)&_ZN6S232C53v89Ev,
  (VTBL_ENTRY)&_ZN6S232C53v90Ev,
  (VTBL_ENTRY)&_ZN6S232C53v91Ev,
  (VTBL_ENTRY)&_ZN6S232C53v92Ev,
  (VTBL_ENTRY)&_ZN6S232C53v93Ev,
  (VTBL_ENTRY)&_ZN6S232C53v94Ev,
  (VTBL_ENTRY)&_ZN6S232C53v95Ev,
  (VTBL_ENTRY)&_ZN6S232C43v96Ev,
  (VTBL_ENTRY)&_ZN6S232C43v97Ev,
  (VTBL_ENTRY)&_ZN6S232C43v98Ev,
  (VTBL_ENTRY)&_ZN6S232C43v99Ev,
  (VTBL_ENTRY)&_ZN6S232C44v100Ev,
  (VTBL_ENTRY)&_ZN6S232C44v101Ev,
  (VTBL_ENTRY)&_ZN6S232C44v102Ev,
  (VTBL_ENTRY)&_ZN6S232C44v103Ev,
  (VTBL_ENTRY)&_ZN6S232C44v104Ev,
  (VTBL_ENTRY)&_ZN6S232C44v105Ev,
  (VTBL_ENTRY)&_ZN6S232C44v106Ev,
  (VTBL_ENTRY)&_ZN6S232C44v107Ev,
  (VTBL_ENTRY)&_ZN6S232C44v108Ev,
  (VTBL_ENTRY)&_ZN6S232C44v109Ev,
  (VTBL_ENTRY)&_ZN6S232C44v110Ev,
  (VTBL_ENTRY)&_ZN6S232C44v111Ev,
  (VTBL_ENTRY)&_ZN6S232C44v112Ev,
  (VTBL_ENTRY)&_ZN6S232C44v113Ev,
  (VTBL_ENTRY)&_ZN6S232C34v114Ev,
  (VTBL_ENTRY)&_ZN6S232C34v115Ev,
  (VTBL_ENTRY)&_ZN6S232C34v116Ev,
  (VTBL_ENTRY)&_ZN6S232C34v117Ev,
  (VTBL_ENTRY)&_ZN6S232C34v118Ev,
  (VTBL_ENTRY)&_ZN6S232C34v119Ev,
  (VTBL_ENTRY)&_ZN6S232C34v120Ev,
  (VTBL_ENTRY)&_ZN6S232C24v121Ev,
  (VTBL_ENTRY)&_ZN6S232C24v122Ev,
  (VTBL_ENTRY)&_ZN6S232C24v123Ev,
  (VTBL_ENTRY)&_ZN6S232C24v124Ev,
  (VTBL_ENTRY)&_ZN6S232C24v125Ev,
  (VTBL_ENTRY)&_ZN6S232C24v126Ev,
};
extern VTBL_ENTRY _ZTI6S232C2[];
extern  VTBL_ENTRY _ZTV6S232C2[];
Class_Descriptor cd_S232C2 = {  "S232C2", // class name
  bases_S232C2, 4,
  &(vtc_S232C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,240), // object size
  NSPAIRA(_ZTI6S232C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S232C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S232C1  : S232C2 {
  ::S165C25 s232c1f0;
  void *s232c1f1;
  virtual  ~S232C1(); // _ZN6S232C1D1Ev
  virtual void  v1(); // _ZN6S232C12v1Ev
  virtual void  v2(); // _ZN6S232C12v2Ev
  virtual void  v3(); // _ZN6S232C12v3Ev
  virtual void  v4(); // _ZN6S232C12v4Ev
  S232C1(); // tgen
};
//SIG(1 S232C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 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 FC7{ 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 v91 v92 v93 v94 v95 Fp FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC7 FC11{ BC12{ BC10}} FC13{ m FC14{ m Fi[4]} FC15{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 FC16{ BC17{ BC10}} Fi:1} vd v114 v115 v116 v117 v118 v119 v120 FC18{ BC19{ BC10}} Fi[2] Fi:1} vd v121 v122 v123 v124 v125 v126 Fi FC18 Fi} vd v1 v2 v3 v4 FC20{ BC21{ BC10}} Fp}


 S232C1 ::~S232C1(){ note_dtor("S232C1", this);}
void  S232C1 ::v1(){vfunc_called(this, "_ZN6S232C12v1Ev");}
void  S232C1 ::v2(){vfunc_called(this, "_ZN6S232C12v2Ev");}
void  S232C1 ::v3(){vfunc_called(this, "_ZN6S232C12v3Ev");}
void  S232C1 ::v4(){vfunc_called(this, "_ZN6S232C12v4Ev");}
S232C1 ::S232C1(){ note_ctor("S232C1", this);} // tgen

static void Test_S232C1()
{
  extern Class_Descriptor cd_S232C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,65)];
    init_test(&cd_S232C1, buf);
    S232C1 *dp, &lv = *(dp=new (buf) S232C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,256), "sizeof(S232C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S232C1)");
    check_base_class_offset(lv, (S232C6*)(S232C5*)(S232C4*)(S232C3*)(S232C2*), 0, "S232C1");
    check_base_class_offset(lv, (S232C5*)(S232C4*)(S232C3*)(S232C2*), 0, "S232C1");
    check_base_class_offset(lv, (S232C4*)(S232C3*)(S232C2*), 0, "S232C1");
    check_base_class_offset(lv, (S232C3*)(S232C2*), 0, "S232C1");
    check_base_class_offset(lv, (S232C2*), 0, "S232C1");
    check_field_offset(lv, s232c1f0, ABISELECT(312,240), "S232C1.s232c1f0");
    check_field_offset(lv, s232c1f1, ABISELECT(328,252), "S232C1.s232c1f1");
    test_class_info(&lv, &cd_S232C1);
    dp->~S232C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS232C1(Test_S232C1, "S232C1", ABISELECT(336,256));

#else // __cplusplus

extern void _ZN6S232C1C1Ev();
extern void _ZN6S232C1D1Ev();
Name_Map name_map_S232C1[] = {
  NSPAIR(_ZN6S232C1C1Ev),
  NSPAIR(_ZN6S232C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S232C6;
extern VTBL_ENTRY _ZTI6S232C6[];
extern  VTBL_ENTRY _ZTV6S232C6[];
extern Class_Descriptor cd_S232C5;
extern VTBL_ENTRY _ZTI6S232C5[];
extern  VTBL_ENTRY _ZTV6S232C5[];
extern Class_Descriptor cd_S232C4;
extern VTBL_ENTRY _ZTI6S232C4[];
extern  VTBL_ENTRY _ZTV6S232C4[];
extern Class_Descriptor cd_S232C3;
extern VTBL_ENTRY _ZTI6S232C3[];
extern  VTBL_ENTRY _ZTV6S232C3[];
extern Class_Descriptor cd_S232C2;
extern VTBL_ENTRY _ZTI6S232C2[];
extern  VTBL_ENTRY _ZTV6S232C2[];
static Base_Class bases_S232C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S232C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S232C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S232C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S232C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S232C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S232C1[];
extern void _ZN6S232C1D1Ev();
extern void _ZN6S232C1D0Ev();
extern void _ZN6S232C62v5Ev();
extern void _ZN6S232C62v6Ev();
extern void _ZN6S232C62v7Ev();
extern void _ZN6S232C62v8Ev();
extern void _ZN6S232C62v9Ev();
extern void _ZN6S232C63v10Ev();
extern void _ZN6S232C63v11Ev();
extern void _ZN6S232C63v12Ev();
extern void _ZN6S232C63v13Ev();
extern void _ZN6S232C63v14Ev();
extern void _ZN6S232C63v15Ev();
extern void _ZN6S232C63v16Ev();
extern void _ZN6S232C63v17Ev();
extern void _ZN6S232C63v18Ev();
extern void _ZN6S232C63v19Ev();
extern void _ZN6S232C63v20Ev();
extern void _ZN6S232C63v21Ev();
extern void _ZN6S232C63v22Ev();
extern void _ZN6S232C63v23Ev();
extern void _ZN6S232C63v24Ev();
extern void _ZN6S232C63v25Ev();
extern void _ZN6S232C63v26Ev();
extern void _ZN6S232C63v27Ev();
extern void _ZN6S232C63v28Ev();
extern void _ZN6S232C63v29Ev();
extern void _ZN6S232C63v30Ev();
extern void _ZN6S232C63v31Ev();
extern void _ZN6S232C63v32Ev();
extern void _ZN6S232C63v33Ev();
extern void _ZN6S232C63v34Ev();
extern void _ZN6S232C63v35Ev();
extern void _ZN6S232C63v36Ev();
extern void _ZN6S232C63v37Ev();
extern void _ZN6S232C63v38Ev();
extern void _ZN6S232C63v39Ev();
extern void _ZN6S232C63v40Ev();
extern void _ZN6S232C63v41Ev();
extern void _ZN6S232C63v42Ev();
extern void _ZN6S232C63v43Ev();
extern void _ZN6S232C63v44Ev();
extern void _ZN6S232C63v45Ev();
extern void _ZN6S232C63v46Ev();
extern void _ZN6S232C63v47Ev();
extern void _ZN6S232C63v48Ev();
extern void _ZN6S232C63v49Ev();
extern void _ZN6S232C63v50Ev();
extern void _ZN6S232C63v51Ev();
extern void _ZN6S232C63v52Ev();
extern void _ZN6S232C63v53Ev();
extern void _ZN6S232C63v54Ev();
extern void _ZN6S232C63v55Ev();
extern void _ZN6S232C63v56Ev();
extern void _ZN6S232C63v57Ev();
extern void _ZN6S232C63v58Ev();
extern void _ZN6S232C63v59Ev();
extern void _ZN6S232C63v60Ev();
extern void _ZN6S232C63v61Ev();
extern void _ZN6S232C63v62Ev();
extern void _ZN6S232C63v63Ev();
extern void _ZN6S232C63v64Ev();
extern void _ZN6S232C63v65Ev();
extern void _ZN6S232C63v66Ev();
extern void _ZN6S232C63v67Ev();
extern void _ZN6S232C63v68Ev();
extern void _ZN6S232C53v69Ev();
extern void _ZN6S232C53v70Ev();
extern void _ZN6S232C53v71Ev();
extern void _ZN6S232C53v72Ev();
extern void _ZN6S232C53v73Ev();
extern void _ZN6S232C53v74Ev();
extern void _ZN6S232C53v75Ev();
extern void _ZN6S232C53v76Ev();
extern void _ZN6S232C53v77Ev();
extern void _ZN6S232C53v78Ev();
extern void _ZN6S232C53v79Ev();
extern void _ZN6S232C53v80Ev();
extern void _ZN6S232C53v81Ev();
extern void _ZN6S232C53v82Ev();
extern void _ZN6S232C53v83Ev();
extern void _ZN6S232C53v84Ev();
extern void _ZN6S232C53v85Ev();
extern void _ZN6S232C53v86Ev();
extern void _ZN6S232C53v87Ev();
extern void _ZN6S232C53v88Ev();
extern void _ZN6S232C53v89Ev();
extern void _ZN6S232C53v90Ev();
extern void _ZN6S232C53v91Ev();
extern void _ZN6S232C53v92Ev();
extern void _ZN6S232C53v93Ev();
extern void _ZN6S232C53v94Ev();
extern void _ZN6S232C53v95Ev();
extern void _ZN6S232C43v96Ev();
extern void _ZN6S232C43v97Ev();
extern void _ZN6S232C43v98Ev();
extern void _ZN6S232C43v99Ev();
extern void _ZN6S232C44v100Ev();
extern void _ZN6S232C44v101Ev();
extern void _ZN6S232C44v102Ev();
extern void _ZN6S232C44v103Ev();
extern void _ZN6S232C44v104Ev();
extern void _ZN6S232C44v105Ev();
extern void _ZN6S232C44v106Ev();
extern void _ZN6S232C44v107Ev();
extern void _ZN6S232C44v108Ev();
extern void _ZN6S232C44v109Ev();
extern void _ZN6S232C44v110Ev();
extern void _ZN6S232C44v111Ev();
extern void _ZN6S232C44v112Ev();
extern void _ZN6S232C44v113Ev();
extern void _ZN6S232C34v114Ev();
extern void _ZN6S232C34v115Ev();
extern void _ZN6S232C34v116Ev();
extern void _ZN6S232C34v117Ev();
extern void _ZN6S232C34v118Ev();
extern void _ZN6S232C34v119Ev();
extern void _ZN6S232C34v120Ev();
extern void _ZN6S232C24v121Ev();
extern void _ZN6S232C24v122Ev();
extern void _ZN6S232C24v123Ev();
extern void _ZN6S232C24v124Ev();
extern void _ZN6S232C24v125Ev();
extern void _ZN6S232C24v126Ev();
extern void _ZN6S232C12v1Ev();
extern void _ZN6S232C12v2Ev();
extern void _ZN6S232C12v3Ev();
extern void _ZN6S232C12v4Ev();
static  VTBL_ENTRY vtc_S232C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S232C1[0]),
  (VTBL_ENTRY)&_ZN6S232C1D1Ev,
  (VTBL_ENTRY)&_ZN6S232C1D0Ev,
  (VTBL_ENTRY)&_ZN6S232C62v5Ev,
  (VTBL_ENTRY)&_ZN6S232C62v6Ev,
  (VTBL_ENTRY)&_ZN6S232C62v7Ev,
  (VTBL_ENTRY)&_ZN6S232C62v8Ev,
  (VTBL_ENTRY)&_ZN6S232C62v9Ev,
  (VTBL_ENTRY)&_ZN6S232C63v10Ev,
  (VTBL_ENTRY)&_ZN6S232C63v11Ev,
  (VTBL_ENTRY)&_ZN6S232C63v12Ev,
  (VTBL_ENTRY)&_ZN6S232C63v13Ev,
  (VTBL_ENTRY)&_ZN6S232C63v14Ev,
  (VTBL_ENTRY)&_ZN6S232C63v15Ev,
  (VTBL_ENTRY)&_ZN6S232C63v16Ev,
  (VTBL_ENTRY)&_ZN6S232C63v17Ev,
  (VTBL_ENTRY)&_ZN6S232C63v18Ev,
  (VTBL_ENTRY)&_ZN6S232C63v19Ev,
  (VTBL_ENTRY)&_ZN6S232C63v20Ev,
  (VTBL_ENTRY)&_ZN6S232C63v21Ev,
  (VTBL_ENTRY)&_ZN6S232C63v22Ev,
  (VTBL_ENTRY)&_ZN6S232C63v23Ev,
  (VTBL_ENTRY)&_ZN6S232C63v24Ev,
  (VTBL_ENTRY)&_ZN6S232C63v25Ev,
  (VTBL_ENTRY)&_ZN6S232C63v26Ev,
  (VTBL_ENTRY)&_ZN6S232C63v27Ev,
  (VTBL_ENTRY)&_ZN6S232C63v28Ev,
  (VTBL_ENTRY)&_ZN6S232C63v29Ev,
  (VTBL_ENTRY)&_ZN6S232C63v30Ev,
  (VTBL_ENTRY)&_ZN6S232C63v31Ev,
  (VTBL_ENTRY)&_ZN6S232C63v32Ev,
  (VTBL_ENTRY)&_ZN6S232C63v33Ev,
  (VTBL_ENTRY)&_ZN6S232C63v34Ev,
  (VTBL_ENTRY)&_ZN6S232C63v35Ev,
  (VTBL_ENTRY)&_ZN6S232C63v36Ev,
  (VTBL_ENTRY)&_ZN6S232C63v37Ev,
  (VTBL_ENTRY)&_ZN6S232C63v38Ev,
  (VTBL_ENTRY)&_ZN6S232C63v39Ev,
  (VTBL_ENTRY)&_ZN6S232C63v40Ev,
  (VTBL_ENTRY)&_ZN6S232C63v41Ev,
  (VTBL_ENTRY)&_ZN6S232C63v42Ev,
  (VTBL_ENTRY)&_ZN6S232C63v43Ev,
  (VTBL_ENTRY)&_ZN6S232C63v44Ev,
  (VTBL_ENTRY)&_ZN6S232C63v45Ev,
  (VTBL_ENTRY)&_ZN6S232C63v46Ev,
  (VTBL_ENTRY)&_ZN6S232C63v47Ev,
  (VTBL_ENTRY)&_ZN6S232C63v48Ev,
  (VTBL_ENTRY)&_ZN6S232C63v49Ev,
  (VTBL_ENTRY)&_ZN6S232C63v50Ev,
  (VTBL_ENTRY)&_ZN6S232C63v51Ev,
  (VTBL_ENTRY)&_ZN6S232C63v52Ev,
  (VTBL_ENTRY)&_ZN6S232C63v53Ev,
  (VTBL_ENTRY)&_ZN6S232C63v54Ev,
  (VTBL_ENTRY)&_ZN6S232C63v55Ev,
  (VTBL_ENTRY)&_ZN6S232C63v56Ev,
  (VTBL_ENTRY)&_ZN6S232C63v57Ev,
  (VTBL_ENTRY)&_ZN6S232C63v58Ev,
  (VTBL_ENTRY)&_ZN6S232C63v59Ev,
  (VTBL_ENTRY)&_ZN6S232C63v60Ev,
  (VTBL_ENTRY)&_ZN6S232C63v61Ev,
  (VTBL_ENTRY)&_ZN6S232C63v62Ev,
  (VTBL_ENTRY)&_ZN6S232C63v63Ev,
  (VTBL_ENTRY)&_ZN6S232C63v64Ev,
  (VTBL_ENTRY)&_ZN6S232C63v65Ev,
  (VTBL_ENTRY)&_ZN6S232C63v66Ev,
  (VTBL_ENTRY)&_ZN6S232C63v67Ev,
  (VTBL_ENTRY)&_ZN6S232C63v68Ev,
  (VTBL_ENTRY)&_ZN6S232C53v69Ev,
  (VTBL_ENTRY)&_ZN6S232C53v70Ev,
  (VTBL_ENTRY)&_ZN6S232C53v71Ev,
  (VTBL_ENTRY)&_ZN6S232C53v72Ev,
  (VTBL_ENTRY)&_ZN6S232C53v73Ev,
  (VTBL_ENTRY)&_ZN6S232C53v74Ev,
  (VTBL_ENTRY)&_ZN6S232C53v75Ev,
  (VTBL_ENTRY)&_ZN6S232C53v76Ev,
  (VTBL_ENTRY)&_ZN6S232C53v77Ev,
  (VTBL_ENTRY)&_ZN6S232C53v78Ev,
  (VTBL_ENTRY)&_ZN6S232C53v79Ev,
  (VTBL_ENTRY)&_ZN6S232C53v80Ev,
  (VTBL_ENTRY)&_ZN6S232C53v81Ev,
  (VTBL_ENTRY)&_ZN6S232C53v82Ev,
  (VTBL_ENTRY)&_ZN6S232C53v83Ev,
  (VTBL_ENTRY)&_ZN6S232C53v84Ev,
  (VTBL_ENTRY)&_ZN6S232C53v85Ev,
  (VTBL_ENTRY)&_ZN6S232C53v86Ev,
  (VTBL_ENTRY)&_ZN6S232C53v87Ev,
  (VTBL_ENTRY)&_ZN6S232C53v88Ev,
  (VTBL_ENTRY)&_ZN6S232C53v89Ev,
  (VTBL_ENTRY)&_ZN6S232C53v90Ev,
  (VTBL_ENTRY)&_ZN6S232C53v91Ev,
  (VTBL_ENTRY)&_ZN6S232C53v92Ev,
  (VTBL_ENTRY)&_ZN6S232C53v93Ev,
  (VTBL_ENTRY)&_ZN6S232C53v94Ev,
  (VTBL_ENTRY)&_ZN6S232C53v95Ev,
  (VTBL_ENTRY)&_ZN6S232C43v96Ev,
  (VTBL_ENTRY)&_ZN6S232C43v97Ev,
  (VTBL_ENTRY)&_ZN6S232C43v98Ev,
  (VTBL_ENTRY)&_ZN6S232C43v99Ev,
  (VTBL_ENTRY)&_ZN6S232C44v100Ev,
  (VTBL_ENTRY)&_ZN6S232C44v101Ev,
  (VTBL_ENTRY)&_ZN6S232C44v102Ev,
  (VTBL_ENTRY)&_ZN6S232C44v103Ev,
  (VTBL_ENTRY)&_ZN6S232C44v104Ev,
  (VTBL_ENTRY)&_ZN6S232C44v105Ev,
  (VTBL_ENTRY)&_ZN6S232C44v106Ev,
  (VTBL_ENTRY)&_ZN6S232C44v107Ev,
  (VTBL_ENTRY)&_ZN6S232C44v108Ev,
  (VTBL_ENTRY)&_ZN6S232C44v109Ev,
  (VTBL_ENTRY)&_ZN6S232C44v110Ev,
  (VTBL_ENTRY)&_ZN6S232C44v111Ev,
  (VTBL_ENTRY)&_ZN6S232C44v112Ev,
  (VTBL_ENTRY)&_ZN6S232C44v113Ev,
  (VTBL_ENTRY)&_ZN6S232C34v114Ev,
  (VTBL_ENTRY)&_ZN6S232C34v115Ev,
  (VTBL_ENTRY)&_ZN6S232C34v116Ev,
  (VTBL_ENTRY)&_ZN6S232C34v117Ev,
  (VTBL_ENTRY)&_ZN6S232C34v118Ev,
  (VTBL_ENTRY)&_ZN6S232C34v119Ev,
  (VTBL_ENTRY)&_ZN6S232C34v120Ev,
  (VTBL_ENTRY)&_ZN6S232C24v121Ev,
  (VTBL_ENTRY)&_ZN6S232C24v122Ev,
  (VTBL_ENTRY)&_ZN6S232C24v123Ev,
  (VTBL_ENTRY)&_ZN6S232C24v124Ev,
  (VTBL_ENTRY)&_ZN6S232C24v125Ev,
  (VTBL_ENTRY)&_ZN6S232C24v126Ev,
  (VTBL_ENTRY)&_ZN6S232C12v1Ev,
  (VTBL_ENTRY)&_ZN6S232C12v2Ev,
  (VTBL_ENTRY)&_ZN6S232C12v3Ev,
  (VTBL_ENTRY)&_ZN6S232C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S232C1[];
extern  VTBL_ENTRY _ZTV6S232C1[];
Class_Descriptor cd_S232C1 = {  "S232C1", // class name
  bases_S232C1, 5,
  &(vtc_S232C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,256), // object size
  NSPAIRA(_ZTI6S232C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S232C1),130, //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  S255C6  {
  int s255c6f0;
  __tsi64 s255c6f1;
  void *s255c6f2[4];
  int s255c6f3[2];
  void *s255c6f4;
  ::S615C17_nt s255c6f5;
  void *s255c6f6[2];
  virtual  ~S255C6(); // _ZN6S255C6D1Ev
  virtual void  v6(); // _ZN6S255C62v6Ev
  virtual void  v7(); // _ZN6S255C62v7Ev
  virtual void  v8(); // _ZN6S255C62v8Ev
  virtual void  v9(); // _ZN6S255C62v9Ev
  virtual void  v10(); // _ZN6S255C63v10Ev
  virtual void  v11(); // _ZN6S255C63v11Ev
  virtual void  v12(); // _ZN6S255C63v12Ev
  virtual void  v13(); // _ZN6S255C63v13Ev
  virtual void  v14(); // _ZN6S255C63v14Ev
  virtual void  v15(); // _ZN6S255C63v15Ev
  virtual void  v16(); // _ZN6S255C63v16Ev
  virtual void  v17(); // _ZN6S255C63v17Ev
  virtual void  v18(); // _ZN6S255C63v18Ev
  virtual void  v19(); // _ZN6S255C63v19Ev
  virtual void  v20(); // _ZN6S255C63v20Ev
  virtual void  v21(); // _ZN6S255C63v21Ev
  virtual void  v22(); // _ZN6S255C63v22Ev
  virtual void  v23(); // _ZN6S255C63v23Ev
  virtual void  v24(); // _ZN6S255C63v24Ev
  virtual void  v25(); // _ZN6S255C63v25Ev
  virtual void  v26(); // _ZN6S255C63v26Ev
  virtual void  v27(); // _ZN6S255C63v27Ev
  virtual void  v28(); // _ZN6S255C63v28Ev
  virtual void  v29(); // _ZN6S255C63v29Ev
  virtual void  v30(); // _ZN6S255C63v30Ev
  virtual void  v31(); // _ZN6S255C63v31Ev
  virtual void  v32(); // _ZN6S255C63v32Ev
  virtual void  v33(); // _ZN6S255C63v33Ev
  virtual void  v34(); // _ZN6S255C63v34Ev
  virtual void  v35(); // _ZN6S255C63v35Ev
  virtual void  v36(); // _ZN6S255C63v36Ev
  virtual void  v37(); // _ZN6S255C63v37Ev
  virtual void  v38(); // _ZN6S255C63v38Ev
  virtual void  v39(); // _ZN6S255C63v39Ev
  virtual void  v40(); // _ZN6S255C63v40Ev
  virtual void  v41(); // _ZN6S255C63v41Ev
  virtual void  v42(); // _ZN6S255C63v42Ev
  virtual void  v43(); // _ZN6S255C63v43Ev
  virtual void  v44(); // _ZN6S255C63v44Ev
  virtual void  v45(); // _ZN6S255C63v45Ev
  virtual void  v46(); // _ZN6S255C63v46Ev
  virtual void  v47(); // _ZN6S255C63v47Ev
  virtual void  v48(); // _ZN6S255C63v48Ev
  virtual void  v49(); // _ZN6S255C63v49Ev
  virtual void  v50(); // _ZN6S255C63v50Ev
  virtual void  v51(); // _ZN6S255C63v51Ev
  virtual void  v52(); // _ZN6S255C63v52Ev
  virtual void  v53(); // _ZN6S255C63v53Ev
  virtual void  v54(); // _ZN6S255C63v54Ev
  virtual void  v55(); // _ZN6S255C63v55Ev
  virtual void  v56(); // _ZN6S255C63v56Ev
  virtual void  v57(); // _ZN6S255C63v57Ev
  virtual void  v58(); // _ZN6S255C63v58Ev
  virtual void  v59(); // _ZN6S255C63v59Ev
  virtual void  v60(); // _ZN6S255C63v60Ev
  virtual void  v61(); // _ZN6S255C63v61Ev
  virtual void  v62(); // _ZN6S255C63v62Ev
  virtual void  v63(); // _ZN6S255C63v63Ev
  virtual void  v64(); // _ZN6S255C63v64Ev
  virtual void  v65(); // _ZN6S255C63v65Ev
  virtual void  v66(); // _ZN6S255C63v66Ev
  virtual void  v67(); // _ZN6S255C63v67Ev
  virtual void  v68(); // _ZN6S255C63v68Ev
  virtual void  v69(); // _ZN6S255C63v69Ev
  S255C6(); // tgen
};
//SIG(-1 S255C6) 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]}


 S255C6 ::~S255C6(){ note_dtor("S255C6", this);}
void  S255C6 ::v6(){vfunc_called(this, "_ZN6S255C62v6Ev");}
void  S255C6 ::v7(){vfunc_called(this, "_ZN6S255C62v7Ev");}
void  S255C6 ::v8(){vfunc_called(this, "_ZN6S255C62v8Ev");}
void  S255C6 ::v9(){vfunc_called(this, "_ZN6S255C62v9Ev");}
void  S255C6 ::v10(){vfunc_called(this, "_ZN6S255C63v10Ev");}
void  S255C6 ::v11(){vfunc_called(this, "_ZN6S255C63v11Ev");}
void  S255C6 ::v12(){vfunc_called(this, "_ZN6S255C63v12Ev");}
void  S255C6 ::v13(){vfunc_called(this, "_ZN6S255C63v13Ev");}
void  S255C6 ::v14(){vfunc_called(this, "_ZN6S255C63v14Ev");}
void  S255C6 ::v15(){vfunc_called(this, "_ZN6S255C63v15Ev");}
void  S255C6 ::v16(){vfunc_called(this, "_ZN6S255C63v16Ev");}
void  S255C6 ::v17(){vfunc_called(this, "_ZN6S255C63v17Ev");}
void  S255C6 ::v18(){vfunc_called(this, "_ZN6S255C63v18Ev");}
void  S255C6 ::v19(){vfunc_called(this, "_ZN6S255C63v19Ev");}
void  S255C6 ::v20(){vfunc_called(this, "_ZN6S255C63v20Ev");}
void  S255C6 ::v21(){vfunc_called(this, "_ZN6S255C63v21Ev");}
void  S255C6 ::v22(){vfunc_called(this, "_ZN6S255C63v22Ev");}
void  S255C6 ::v23(){vfunc_called(this, "_ZN6S255C63v23Ev");}
void  S255C6 ::v24(){vfunc_called(this, "_ZN6S255C63v24Ev");}
void  S255C6 ::v25(){vfunc_called(this, "_ZN6S255C63v25Ev");}
void  S255C6 ::v26(){vfunc_called(this, "_ZN6S255C63v26Ev");}
void  S255C6 ::v27(){vfunc_called(this, "_ZN6S255C63v27Ev");}
void  S255C6 ::v28(){vfunc_called(this, "_ZN6S255C63v28Ev");}
void  S255C6 ::v29(){vfunc_called(this, "_ZN6S255C63v29Ev");}
void  S255C6 ::v30(){vfunc_called(this, "_ZN6S255C63v30Ev");}
void  S255C6 ::v31(){vfunc_called(this, "_ZN6S255C63v31Ev");}
void  S255C6 ::v32(){vfunc_called(this, "_ZN6S255C63v32Ev");}
void  S255C6 ::v33(){vfunc_called(this, "_ZN6S255C63v33Ev");}
void  S255C6 ::v34(){vfunc_called(this, "_ZN6S255C63v34Ev");}
void  S255C6 ::v35(){vfunc_called(this, "_ZN6S255C63v35Ev");}
void  S255C6 ::v36(){vfunc_called(this, "_ZN6S255C63v36Ev");}
void  S255C6 ::v37(){vfunc_called(this, "_ZN6S255C63v37Ev");}
void  S255C6 ::v38(){vfunc_called(this, "_ZN6S255C63v38Ev");}
void  S255C6 ::v39(){vfunc_called(this, "_ZN6S255C63v39Ev");}
void  S255C6 ::v40(){vfunc_called(this, "_ZN6S255C63v40Ev");}
void  S255C6 ::v41(){vfunc_called(this, "_ZN6S255C63v41Ev");}
void  S255C6 ::v42(){vfunc_called(this, "_ZN6S255C63v42Ev");}
void  S255C6 ::v43(){vfunc_called(this, "_ZN6S255C63v43Ev");}
void  S255C6 ::v44(){vfunc_called(this, "_ZN6S255C63v44Ev");}
void  S255C6 ::v45(){vfunc_called(this, "_ZN6S255C63v45Ev");}
void  S255C6 ::v46(){vfunc_called(this, "_ZN6S255C63v46Ev");}
void  S255C6 ::v47(){vfunc_called(this, "_ZN6S255C63v47Ev");}
void  S255C6 ::v48(){vfunc_called(this, "_ZN6S255C63v48Ev");}
void  S255C6 ::v49(){vfunc_called(this, "_ZN6S255C63v49Ev");}
void  S255C6 ::v50(){vfunc_called(this, "_ZN6S255C63v50Ev");}
void  S255C6 ::v51(){vfunc_called(this, "_ZN6S255C63v51Ev");}
void  S255C6 ::v52(){vfunc_called(this, "_ZN6S255C63v52Ev");}
void  S255C6 ::v53(){vfunc_called(this, "_ZN6S255C63v53Ev");}
void  S255C6 ::v54(){vfunc_called(this, "_ZN6S255C63v54Ev");}
void  S255C6 ::v55(){vfunc_called(this, "_ZN6S255C63v55Ev");}
void  S255C6 ::v56(){vfunc_called(this, "_ZN6S255C63v56Ev");}
void  S255C6 ::v57(){vfunc_called(this, "_ZN6S255C63v57Ev");}
void  S255C6 ::v58(){vfunc_called(this, "_ZN6S255C63v58Ev");}
void  S255C6 ::v59(){vfunc_called(this, "_ZN6S255C63v59Ev");}
void  S255C6 ::v60(){vfunc_called(this, "_ZN6S255C63v60Ev");}
void  S255C6 ::v61(){vfunc_called(this, "_ZN6S255C63v61Ev");}
void  S255C6 ::v62(){vfunc_called(this, "_ZN6S255C63v62Ev");}
void  S255C6 ::v63(){vfunc_called(this, "_ZN6S255C63v63Ev");}
void  S255C6 ::v64(){vfunc_called(this, "_ZN6S255C63v64Ev");}
void  S255C6 ::v65(){vfunc_called(this, "_ZN6S255C63v65Ev");}
void  S255C6 ::v66(){vfunc_called(this, "_ZN6S255C63v66Ev");}
void  S255C6 ::v67(){vfunc_called(this, "_ZN6S255C63v67Ev");}
void  S255C6 ::v68(){vfunc_called(this, "_ZN6S255C63v68Ev");}
void  S255C6 ::v69(){vfunc_called(this, "_ZN6S255C63v69Ev");}
S255C6 ::S255C6(){ note_ctor("S255C6", this);} // tgen

static void Test_S255C6()
{
  extern Class_Descriptor cd_S255C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S255C6, buf);
    S255C6 *dp, &lv = *(dp=new (buf) S255C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S255C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S255C6)");
    check_field_offset(lv, s255c6f0, ABISELECT(8,4), "S255C6.s255c6f0");
    check_field_offset(lv, s255c6f1, ABISELECT(16,8), "S255C6.s255c6f1");
    check_field_offset(lv, s255c6f2, ABISELECT(24,16), "S255C6.s255c6f2");
    check_field_offset(lv, s255c6f3, ABISELECT(56,32), "S255C6.s255c6f3");
    check_field_offset(lv, s255c6f4, ABISELECT(64,40), "S255C6.s255c6f4");
    check_field_offset(lv, s255c6f5, ABISELECT(72,44), "S255C6.s255c6f5");
    check_field_offset(lv, s255c6f6, ABISELECT(80,52), "S255C6.s255c6f6");
    test_class_info(&lv, &cd_S255C6);
    dp->~S255C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS255C6(Test_S255C6, "S255C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S255C6C1Ev();
extern void _ZN6S255C6D1Ev();
Name_Map name_map_S255C6[] = {
  NSPAIR(_ZN6S255C6C1Ev),
  NSPAIR(_ZN6S255C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S255C6[];
extern void _ZN6S255C6D1Ev();
extern void _ZN6S255C6D0Ev();
extern void _ZN6S255C62v6Ev();
extern void _ZN6S255C62v7Ev();
extern void _ZN6S255C62v8Ev();
extern void _ZN6S255C62v9Ev();
extern void _ZN6S255C63v10Ev();
extern void _ZN6S255C63v11Ev();
extern void _ZN6S255C63v12Ev();
extern void _ZN6S255C63v13Ev();
extern void _ZN6S255C63v14Ev();
extern void _ZN6S255C63v15Ev();
extern void _ZN6S255C63v16Ev();
extern void _ZN6S255C63v17Ev();
extern void _ZN6S255C63v18Ev();
extern void _ZN6S255C63v19Ev();
extern void _ZN6S255C63v20Ev();
extern void _ZN6S255C63v21Ev();
extern void _ZN6S255C63v22Ev();
extern void _ZN6S255C63v23Ev();
extern void _ZN6S255C63v24Ev();
extern void _ZN6S255C63v25Ev();
extern void _ZN6S255C63v26Ev();
extern void _ZN6S255C63v27Ev();
extern void _ZN6S255C63v28Ev();
extern void _ZN6S255C63v29Ev();
extern void _ZN6S255C63v30Ev();
extern void _ZN6S255C63v31Ev();
extern void _ZN6S255C63v32Ev();
extern void _ZN6S255C63v33Ev();
extern void _ZN6S255C63v34Ev();
extern void _ZN6S255C63v35Ev();
extern void _ZN6S255C63v36Ev();
extern void _ZN6S255C63v37Ev();
extern void _ZN6S255C63v38Ev();
extern void _ZN6S255C63v39Ev();
extern void _ZN6S255C63v40Ev();
extern void _ZN6S255C63v41Ev();
extern void _ZN6S255C63v42Ev();
extern void _ZN6S255C63v43Ev();
extern void _ZN6S255C63v44Ev();
extern void _ZN6S255C63v45Ev();
extern void _ZN6S255C63v46Ev();
extern void _ZN6S255C63v47Ev();
extern void _ZN6S255C63v48Ev();
extern void _ZN6S255C63v49Ev();
extern void _ZN6S255C63v50Ev();
extern void _ZN6S255C63v51Ev();
extern void _ZN6S255C63v52Ev();
extern void _ZN6S255C63v53Ev();
extern void _ZN6S255C63v54Ev();
extern void _ZN6S255C63v55Ev();
extern void _ZN6S255C63v56Ev();
extern void _ZN6S255C63v57Ev();
extern void _ZN6S255C63v58Ev();
extern void _ZN6S255C63v59Ev();
extern void _ZN6S255C63v60Ev();
extern void _ZN6S255C63v61Ev();
extern void _ZN6S255C63v62Ev();
extern void _ZN6S255C63v63Ev();
extern void _ZN6S255C63v64Ev();
extern void _ZN6S255C63v65Ev();
extern void _ZN6S255C63v66Ev();
extern void _ZN6S255C63v67Ev();
extern void _ZN6S255C63v68Ev();
extern void _ZN6S255C63v69Ev();
static  VTBL_ENTRY vtc_S255C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S255C6[0]),
  (VTBL_ENTRY)&_ZN6S255C6D1Ev,
  (VTBL_ENTRY)&_ZN6S255C6D0Ev,
  (VTBL_ENTRY)&_ZN6S255C62v6Ev,
  (VTBL_ENTRY)&_ZN6S255C62v7Ev,
  (VTBL_ENTRY)&_ZN6S255C62v8Ev,
  (VTBL_ENTRY)&_ZN6S255C62v9Ev,
  (VTBL_ENTRY)&_ZN6S255C63v10Ev,
  (VTBL_ENTRY)&_ZN6S255C63v11Ev,
  (VTBL_ENTRY)&_ZN6S255C63v12Ev,
  (VTBL_ENTRY)&_ZN6S255C63v13Ev,
  (VTBL_ENTRY)&_ZN6S255C63v14Ev,
  (VTBL_ENTRY)&_ZN6S255C63v15Ev,
  (VTBL_ENTRY)&_ZN6S255C63v16Ev,
  (VTBL_ENTRY)&_ZN6S255C63v17Ev,
  (VTBL_ENTRY)&_ZN6S255C63v18Ev,
  (VTBL_ENTRY)&_ZN6S255C63v19Ev,
  (VTBL_ENTRY)&_ZN6S255C63v20Ev,
  (VTBL_ENTRY)&_ZN6S255C63v21Ev,
  (VTBL_ENTRY)&_ZN6S255C63v22Ev,
  (VTBL_ENTRY)&_ZN6S255C63v23Ev,
  (VTBL_ENTRY)&_ZN6S255C63v24Ev,
  (VTBL_ENTRY)&_ZN6S255C63v25Ev,
  (VTBL_ENTRY)&_ZN6S255C63v26Ev,
  (VTBL_ENTRY)&_ZN6S255C63v27Ev,
  (VTBL_ENTRY)&_ZN6S255C63v28Ev,
  (VTBL_ENTRY)&_ZN6S255C63v29Ev,
  (VTBL_ENTRY)&_ZN6S255C63v30Ev,
  (VTBL_ENTRY)&_ZN6S255C63v31Ev,
  (VTBL_ENTRY)&_ZN6S255C63v32Ev,
  (VTBL_ENTRY)&_ZN6S255C63v33Ev,
  (VTBL_ENTRY)&_ZN6S255C63v34Ev,
  (VTBL_ENTRY)&_ZN6S255C63v35Ev,
  (VTBL_ENTRY)&_ZN6S255C63v36Ev,
  (VTBL_ENTRY)&_ZN6S255C63v37Ev,
  (VTBL_ENTRY)&_ZN6S255C63v38Ev,
  (VTBL_ENTRY)&_ZN6S255C63v39Ev,
  (VTBL_ENTRY)&_ZN6S255C63v40Ev,
  (VTBL_ENTRY)&_ZN6S255C63v41Ev,
  (VTBL_ENTRY)&_ZN6S255C63v42Ev,
  (VTBL_ENTRY)&_ZN6S255C63v43Ev,
  (VTBL_ENTRY)&_ZN6S255C63v44Ev,
  (VTBL_ENTRY)&_ZN6S255C63v45Ev,
  (VTBL_ENTRY)&_ZN6S255C63v46Ev,
  (VTBL_ENTRY)&_ZN6S255C63v47Ev,
  (VTBL_ENTRY)&_ZN6S255C63v48Ev,
  (VTBL_ENTRY)&_ZN6S255C63v49Ev,
  (VTBL_ENTRY)&_ZN6S255C63v50Ev,
  (VTBL_ENTRY)&_ZN6S255C63v51Ev,
  (VTBL_ENTRY)&_ZN6S255C63v52Ev,
  (VTBL_ENTRY)&_ZN6S255C63v53Ev,
  (VTBL_ENTRY)&_ZN6S255C63v54Ev,
  (VTBL_ENTRY)&_ZN6S255C63v55Ev,
  (VTBL_ENTRY)&_ZN6S255C63v56Ev,
  (VTBL_ENTRY)&_ZN6S255C63v57Ev,
  (VTBL_ENTRY)&_ZN6S255C63v58Ev,
  (VTBL_ENTRY)&_ZN6S255C63v59Ev,
  (VTBL_ENTRY)&_ZN6S255C63v60Ev,
  (VTBL_ENTRY)&_ZN6S255C63v61Ev,
  (VTBL_ENTRY)&_ZN6S255C63v62Ev,
  (VTBL_ENTRY)&_ZN6S255C63v63Ev,
  (VTBL_ENTRY)&_ZN6S255C63v64Ev,
  (VTBL_ENTRY)&_ZN6S255C63v65Ev,
  (VTBL_ENTRY)&_ZN6S255C63v66Ev,
  (VTBL_ENTRY)&_ZN6S255C63v67Ev,
  (VTBL_ENTRY)&_ZN6S255C63v68Ev,
  (VTBL_ENTRY)&_ZN6S255C63v69Ev,
};
extern VTBL_ENTRY _ZTI6S255C6[];
extern  VTBL_ENTRY _ZTV6S255C6[];
Class_Descriptor cd_S255C6 = {  "S255C6", // class name
  0,0,//no base classes
  &(vtc_S255C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S255C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S255C6),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  S255C5  : S255C6 {
  void *s255c5f0;
  ::S1542C26 s255c5f1;
  ::S615C17_nt s255c5f2;
  ::S1542C22_nt s255c5f3;
  ::S615C12_nt s255c5f4;
  int s255c5f5;
  unsigned int s255c5f6:1;
  unsigned int s255c5f7:1;
  unsigned int s255c5f8:1;
  unsigned int s255c5f9:1;
  int s255c5f10[11];
  virtual  ~S255C5(); // _ZN6S255C5D1Ev
  virtual void  v70(); // _ZN6S255C53v70Ev
  virtual void  v71(); // _ZN6S255C53v71Ev
  virtual void  v72(); // _ZN6S255C53v72Ev
  virtual void  v73(); // _ZN6S255C53v73Ev
  virtual void  v74(); // _ZN6S255C53v74Ev
  virtual void  v75(); // _ZN6S255C53v75Ev
  virtual void  v76(); // _ZN6S255C53v76Ev
  virtual void  v77(); // _ZN6S255C53v77Ev
  virtual void  v78(); // _ZN6S255C53v78Ev
  virtual void  v79(); // _ZN6S255C53v79Ev
  virtual void  v80(); // _ZN6S255C53v80Ev
  virtual void  v81(); // _ZN6S255C53v81Ev
  virtual void  v82(); // _ZN6S255C53v82Ev
  virtual void  v83(); // _ZN6S255C53v83Ev
  virtual void  v84(); // _ZN6S255C53v84Ev
  virtual void  v85(); // _ZN6S255C53v85Ev
  virtual void  v86(); // _ZN6S255C53v86Ev
  virtual void  v87(); // _ZN6S255C53v87Ev
  virtual void  v88(); // _ZN6S255C53v88Ev
  virtual void  v89(); // _ZN6S255C53v89Ev
  virtual void  v90(); // _ZN6S255C53v90Ev
  virtual void  v91(); // _ZN6S255C53v91Ev
  virtual void  v92(); // _ZN6S255C53v92Ev
  virtual void  v93(); // _ZN6S255C53v93Ev
  virtual void  v94(); // _ZN6S255C53v94Ev
  virtual void  v95(); // _ZN6S255C53v95Ev
  virtual void  v96(); // _ZN6S255C53v96Ev
  S255C5(); // tgen
};
//SIG(-1 S255C5) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S255C5 ::~S255C5(){ note_dtor("S255C5", this);}
void  S255C5 ::v70(){vfunc_called(this, "_ZN6S255C53v70Ev");}
void  S255C5 ::v71(){vfunc_called(this, "_ZN6S255C53v71Ev");}
void  S255C5 ::v72(){vfunc_called(this, "_ZN6S255C53v72Ev");}
void  S255C5 ::v73(){vfunc_called(this, "_ZN6S255C53v73Ev");}
void  S255C5 ::v74(){vfunc_called(this, "_ZN6S255C53v74Ev");}
void  S255C5 ::v75(){vfunc_called(this, "_ZN6S255C53v75Ev");}
void  S255C5 ::v76(){vfunc_called(this, "_ZN6S255C53v76Ev");}
void  S255C5 ::v77(){vfunc_called(this, "_ZN6S255C53v77Ev");}
void  S255C5 ::v78(){vfunc_called(this, "_ZN6S255C53v78Ev");}
void  S255C5 ::v79(){vfunc_called(this, "_ZN6S255C53v79Ev");}
void  S255C5 ::v80(){vfunc_called(this, "_ZN6S255C53v80Ev");}
void  S255C5 ::v81(){vfunc_called(this, "_ZN6S255C53v81Ev");}
void  S255C5 ::v82(){vfunc_called(this, "_ZN6S255C53v82Ev");}
void  S255C5 ::v83(){vfunc_called(this, "_ZN6S255C53v83Ev");}
void  S255C5 ::v84(){vfunc_called(this, "_ZN6S255C53v84Ev");}
void  S255C5 ::v85(){vfunc_called(this, "_ZN6S255C53v85Ev");}
void  S255C5 ::v86(){vfunc_called(this, "_ZN6S255C53v86Ev");}
void  S255C5 ::v87(){vfunc_called(this, "_ZN6S255C53v87Ev");}
void  S255C5 ::v88(){vfunc_called(this, "_ZN6S255C53v88Ev");}
void  S255C5 ::v89(){vfunc_called(this, "_ZN6S255C53v89Ev");}
void  S255C5 ::v90(){vfunc_called(this, "_ZN6S255C53v90Ev");}
void  S255C5 ::v91(){vfunc_called(this, "_ZN6S255C53v91Ev");}
void  S255C5 ::v92(){vfunc_called(this, "_ZN6S255C53v92Ev");}
void  S255C5 ::v93(){vfunc_called(this, "_ZN6S255C53v93Ev");}
void  S255C5 ::v94(){vfunc_called(this, "_ZN6S255C53v94Ev");}
void  S255C5 ::v95(){vfunc_called(this, "_ZN6S255C53v95Ev");}
void  S255C5 ::v96(){vfunc_called(this, "_ZN6S255C53v96Ev");}
S255C5 ::S255C5(){ note_ctor("S255C5", this);} // tgen

static void Test_S255C5()
{
  extern Class_Descriptor cd_S255C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S255C5, buf);
    S255C5 *dp, &lv = *(dp=new (buf) S255C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S255C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S255C5)");
    check_base_class_offset(lv, (S255C6*), 0, "S255C5");
    check_field_offset(lv, s255c5f0, ABISELECT(96,60), "S255C5.s255c5f0");
    check_field_offset(lv, s255c5f1, ABISELECT(104,64), "S255C5.s255c5f1");
    check_field_offset(lv, s255c5f2, ABISELECT(120,76), "S255C5.s255c5f2");
    check_field_offset(lv, s255c5f3, ABISELECT(128,84), "S255C5.s255c5f3");
    check_field_offset(lv, s255c5f4, ABISELECT(144,96), "S255C5.s255c5f4");
    check_field_offset(lv, s255c5f5, ABISELECT(176,128), "S255C5.s255c5f5");
    set_bf_and_test(lv, s255c5f6, ABISELECT(180,132), 0, 1, 1, "S255C5");
    set_bf_and_test(lv, s255c5f7, ABISELECT(180,132), 1, 1, 1, "S255C5");
    set_bf_and_test(lv, s255c5f8, ABISELECT(180,132), 2, 1, 1, "S255C5");
    set_bf_and_test(lv, s255c5f9, ABISELECT(180,132), 3, 1, 1, "S255C5");
    check_field_offset(lv, s255c5f10, ABISELECT(184,136), "S255C5.s255c5f10");
    test_class_info(&lv, &cd_S255C5);
    dp->~S255C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS255C5(Test_S255C5, "S255C5", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S255C5C1Ev();
extern void _ZN6S255C5D1Ev();
Name_Map name_map_S255C5[] = {
  NSPAIR(_ZN6S255C5C1Ev),
  NSPAIR(_ZN6S255C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S255C6;
extern VTBL_ENTRY _ZTI6S255C6[];
extern  VTBL_ENTRY _ZTV6S255C6[];
static Base_Class bases_S255C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S255C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S255C5[];
extern void _ZN6S255C5D1Ev();
extern void _ZN6S255C5D0Ev();
extern void _ZN6S255C62v6Ev();
extern void _ZN6S255C62v7Ev();
extern void _ZN6S255C62v8Ev();
extern void _ZN6S255C62v9Ev();
extern void _ZN6S255C63v10Ev();
extern void _ZN6S255C63v11Ev();
extern void _ZN6S255C63v12Ev();
extern void _ZN6S255C63v13Ev();
extern void _ZN6S255C63v14Ev();
extern void _ZN6S255C63v15Ev();
extern void _ZN6S255C63v16Ev();
extern void _ZN6S255C63v17Ev();
extern void _ZN6S255C63v18Ev();
extern void _ZN6S255C63v19Ev();
extern void _ZN6S255C63v20Ev();
extern void _ZN6S255C63v21Ev();
extern void _ZN6S255C63v22Ev();
extern void _ZN6S255C63v23Ev();
extern void _ZN6S255C63v24Ev();
extern void _ZN6S255C63v25Ev();
extern void _ZN6S255C63v26Ev();
extern void _ZN6S255C63v27Ev();
extern void _ZN6S255C63v28Ev();
extern void _ZN6S255C63v29Ev();
extern void _ZN6S255C63v30Ev();
extern void _ZN6S255C63v31Ev();
extern void _ZN6S255C63v32Ev();
extern void _ZN6S255C63v33Ev();
extern void _ZN6S255C63v34Ev();
extern void _ZN6S255C63v35Ev();
extern void _ZN6S255C63v36Ev();
extern void _ZN6S255C63v37Ev();
extern void _ZN6S255C63v38Ev();
extern void _ZN6S255C63v39Ev();
extern void _ZN6S255C63v40Ev();
extern void _ZN6S255C63v41Ev();
extern void _ZN6S255C63v42Ev();
extern void _ZN6S255C63v43Ev();
extern void _ZN6S255C63v44Ev();
extern void _ZN6S255C63v45Ev();
extern void _ZN6S255C63v46Ev();
extern void _ZN6S255C63v47Ev();
extern void _ZN6S255C63v48Ev();
extern void _ZN6S255C63v49Ev();
extern void _ZN6S255C63v50Ev();
extern void _ZN6S255C63v51Ev();
extern void _ZN6S255C63v52Ev();
extern void _ZN6S255C63v53Ev();
extern void _ZN6S255C63v54Ev();
extern void _ZN6S255C63v55Ev();
extern void _ZN6S255C63v56Ev();
extern void _ZN6S255C63v57Ev();
extern void _ZN6S255C63v58Ev();
extern void _ZN6S255C63v59Ev();
extern void _ZN6S255C63v60Ev();
extern void _ZN6S255C63v61Ev();
extern void _ZN6S255C63v62Ev();
extern void _ZN6S255C63v63Ev();
extern void _ZN6S255C63v64Ev();
extern void _ZN6S255C63v65Ev();
extern void _ZN6S255C63v66Ev();
extern void _ZN6S255C63v67Ev();
extern void _ZN6S255C63v68Ev();
extern void _ZN6S255C63v69Ev();
extern void _ZN6S255C53v70Ev();
extern void _ZN6S255C53v71Ev();
extern void _ZN6S255C53v72Ev();
extern void _ZN6S255C53v73Ev();
extern void _ZN6S255C53v74Ev();
extern void _ZN6S255C53v75Ev();
extern void _ZN6S255C53v76Ev();
extern void _ZN6S255C53v77Ev();
extern void _ZN6S255C53v78Ev();
extern void _ZN6S255C53v79Ev();
extern void _ZN6S255C53v80Ev();
extern void _ZN6S255C53v81Ev();
extern void _ZN6S255C53v82Ev();
extern void _ZN6S255C53v83Ev();
extern void _ZN6S255C53v84Ev();
extern void _ZN6S255C53v85Ev();
extern void _ZN6S255C53v86Ev();
extern void _ZN6S255C53v87Ev();
extern void _ZN6S255C53v88Ev();
extern void _ZN6S255C53v89Ev();
extern void _ZN6S255C53v90Ev();
extern void _ZN6S255C53v91Ev();
extern void _ZN6S255C53v92Ev();
extern void _ZN6S255C53v93Ev();
extern void _ZN6S255C53v94Ev();
extern void _ZN6S255C53v95Ev();
extern void _ZN6S255C53v96Ev();
static  VTBL_ENTRY vtc_S255C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S255C5[0]),
  (VTBL_ENTRY)&_ZN6S255C5D1Ev,
  (VTBL_ENTRY)&_ZN6S255C5D0Ev,
  (VTBL_ENTRY)&_ZN6S255C62v6Ev,
  (VTBL_ENTRY)&_ZN6S255C62v7Ev,
  (VTBL_ENTRY)&_ZN6S255C62v8Ev,
  (VTBL_ENTRY)&_ZN6S255C62v9Ev,
  (VTBL_ENTRY)&_ZN6S255C63v10Ev,
  (VTBL_ENTRY)&_ZN6S255C63v11Ev,
  (VTBL_ENTRY)&_ZN6S255C63v12Ev,
  (VTBL_ENTRY)&_ZN6S255C63v13Ev,
  (VTBL_ENTRY)&_ZN6S255C63v14Ev,
  (VTBL_ENTRY)&_ZN6S255C63v15Ev,
  (VTBL_ENTRY)&_ZN6S255C63v16Ev,
  (VTBL_ENTRY)&_ZN6S255C63v17Ev,
  (VTBL_ENTRY)&_ZN6S255C63v18Ev,
  (VTBL_ENTRY)&_ZN6S255C63v19Ev,
  (VTBL_ENTRY)&_ZN6S255C63v20Ev,
  (VTBL_ENTRY)&_ZN6S255C63v21Ev,
  (VTBL_ENTRY)&_ZN6S255C63v22Ev,
  (VTBL_ENTRY)&_ZN6S255C63v23Ev,
  (VTBL_ENTRY)&_ZN6S255C63v24Ev,
  (VTBL_ENTRY)&_ZN6S255C63v25Ev,
  (VTBL_ENTRY)&_ZN6S255C63v26Ev,
  (VTBL_ENTRY)&_ZN6S255C63v27Ev,
  (VTBL_ENTRY)&_ZN6S255C63v28Ev,
  (VTBL_ENTRY)&_ZN6S255C63v29Ev,
  (VTBL_ENTRY)&_ZN6S255C63v30Ev,
  (VTBL_ENTRY)&_ZN6S255C63v31Ev,
  (VTBL_ENTRY)&_ZN6S255C63v32Ev,
  (VTBL_ENTRY)&_ZN6S255C63v33Ev,
  (VTBL_ENTRY)&_ZN6S255C63v34Ev,
  (VTBL_ENTRY)&_ZN6S255C63v35Ev,
  (VTBL_ENTRY)&_ZN6S255C63v36Ev,
  (VTBL_ENTRY)&_ZN6S255C63v37Ev,
  (VTBL_ENTRY)&_ZN6S255C63v38Ev,
  (VTBL_ENTRY)&_ZN6S255C63v39Ev,
  (VTBL_ENTRY)&_ZN6S255C63v40Ev,
  (VTBL_ENTRY)&_ZN6S255C63v41Ev,
  (VTBL_ENTRY)&_ZN6S255C63v42Ev,
  (VTBL_ENTRY)&_ZN6S255C63v43Ev,
  (VTBL_ENTRY)&_ZN6S255C63v44Ev,
  (VTBL_ENTRY)&_ZN6S255C63v45Ev,
  (VTBL_ENTRY)&_ZN6S255C63v46Ev,
  (VTBL_ENTRY)&_ZN6S255C63v47Ev,
  (VTBL_ENTRY)&_ZN6S255C63v48Ev,
  (VTBL_ENTRY)&_ZN6S255C63v49Ev,
  (VTBL_ENTRY)&_ZN6S255C63v50Ev,
  (VTBL_ENTRY)&_ZN6S255C63v51Ev,
  (VTBL_ENTRY)&_ZN6S255C63v52Ev,
  (VTBL_ENTRY)&_ZN6S255C63v53Ev,
  (VTBL_ENTRY)&_ZN6S255C63v54Ev,
  (VTBL_ENTRY)&_ZN6S255C63v55Ev,
  (VTBL_ENTRY)&_ZN6S255C63v56Ev,
  (VTBL_ENTRY)&_ZN6S255C63v57Ev,
  (VTBL_ENTRY)&_ZN6S255C63v58Ev,
  (VTBL_ENTRY)&_ZN6S255C63v59Ev,
  (VTBL_ENTRY)&_ZN6S255C63v60Ev,
  (VTBL_ENTRY)&_ZN6S255C63v61Ev,
  (VTBL_ENTRY)&_ZN6S255C63v62Ev,
  (VTBL_ENTRY)&_ZN6S255C63v63Ev,
  (VTBL_ENTRY)&_ZN6S255C63v64Ev,
  (VTBL_ENTRY)&_ZN6S255C63v65Ev,
  (VTBL_ENTRY)&_ZN6S255C63v66Ev,
  (VTBL_ENTRY)&_ZN6S255C63v67Ev,
  (VTBL_ENTRY)&_ZN6S255C63v68Ev,
  (VTBL_ENTRY)&_ZN6S255C63v69Ev,
  (VTBL_ENTRY)&_ZN6S255C53v70Ev,
  (VTBL_ENTRY)&_ZN6S255C53v71Ev,
  (VTBL_ENTRY)&_ZN6S255C53v72Ev,
  (VTBL_ENTRY)&_ZN6S255C53v73Ev,
  (VTBL_ENTRY)&_ZN6S255C53v74Ev,
  (VTBL_ENTRY)&_ZN6S255C53v75Ev,
  (VTBL_ENTRY)&_ZN6S255C53v76Ev,
  (VTBL_ENTRY)&_ZN6S255C53v77Ev,
  (VTBL_ENTRY)&_ZN6S255C53v78Ev,
  (VTBL_ENTRY)&_ZN6S255C53v79Ev,
  (VTBL_ENTRY)&_ZN6S255C53v80Ev,
  (VTBL_ENTRY)&_ZN6S255C53v81Ev,
  (VTBL_ENTRY)&_ZN6S255C53v82Ev,
  (VTBL_ENTRY)&_ZN6S255C53v83Ev,
  (VTBL_ENTRY)&_ZN6S255C53v84Ev,
  (VTBL_ENTRY)&_ZN6S255C53v85Ev,
  (VTBL_ENTRY)&_ZN6S255C53v86Ev,
  (VTBL_ENTRY)&_ZN6S255C53v87Ev,
  (VTBL_ENTRY)&_ZN6S255C53v88Ev,
  (VTBL_ENTRY)&_ZN6S255C53v89Ev,
  (VTBL_ENTRY)&_ZN6S255C53v90Ev,
  (VTBL_ENTRY)&_ZN6S255C53v91Ev,
  (VTBL_ENTRY)&_ZN6S255C53v92Ev,
  (VTBL_ENTRY)&_ZN6S255C53v93Ev,
  (VTBL_ENTRY)&_ZN6S255C53v94Ev,
  (VTBL_ENTRY)&_ZN6S255C53v95Ev,
  (VTBL_ENTRY)&_ZN6S255C53v96Ev,
};
extern VTBL_ENTRY _ZTI6S255C5[];
extern  VTBL_ENTRY _ZTV6S255C5[];
Class_Descriptor cd_S255C5 = {  "S255C5", // class name
  bases_S255C5, 1,
  &(vtc_S255C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S255C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S255C5),95, //virtual function table var
  2, // 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  S255C4  : S255C5 {
  ::S615C22_nt s255c4f0;
  unsigned int s255c4f1:1;
  virtual  ~S255C4(); // _ZN6S255C4D1Ev
  virtual void  v97(); // _ZN6S255C43v97Ev
  virtual void  v98(); // _ZN6S255C43v98Ev
  virtual void  v99(); // _ZN6S255C43v99Ev
  virtual void  v100(); // _ZN6S255C44v100Ev
  virtual void  v101(); // _ZN6S255C44v101Ev
  virtual void  v102(); // _ZN6S255C44v102Ev
  virtual void  v103(); // _ZN6S255C44v103Ev
  virtual void  v104(); // _ZN6S255C44v104Ev
  virtual void  v105(); // _ZN6S255C44v105Ev
  virtual void  v106(); // _ZN6S255C44v106Ev
  virtual void  v107(); // _ZN6S255C44v107Ev
  virtual void  v108(); // _ZN6S255C44v108Ev
  virtual void  v109(); // _ZN6S255C44v109Ev
  virtual void  v110(); // _ZN6S255C44v110Ev
  virtual void  v111(); // _ZN6S255C44v111Ev
  virtual void  v112(); // _ZN6S255C44v112Ev
  virtual void  v113(); // _ZN6S255C44v113Ev
  virtual void  v114(); // _ZN6S255C44v114Ev
  S255C4(); // tgen
};
//SIG(-1 S255C4) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S255C4 ::~S255C4(){ note_dtor("S255C4", this);}
void  S255C4 ::v97(){vfunc_called(this, "_ZN6S255C43v97Ev");}
void  S255C4 ::v98(){vfunc_called(this, "_ZN6S255C43v98Ev");}
void  S255C4 ::v99(){vfunc_called(this, "_ZN6S255C43v99Ev");}
void  S255C4 ::v100(){vfunc_called(this, "_ZN6S255C44v100Ev");}
void  S255C4 ::v101(){vfunc_called(this, "_ZN6S255C44v101Ev");}
void  S255C4 ::v102(){vfunc_called(this, "_ZN6S255C44v102Ev");}
void  S255C4 ::v103(){vfunc_called(this, "_ZN6S255C44v103Ev");}
void  S255C4 ::v104(){vfunc_called(this, "_ZN6S255C44v104Ev");}
void  S255C4 ::v105(){vfunc_called(this, "_ZN6S255C44v105Ev");}
void  S255C4 ::v106(){vfunc_called(this, "_ZN6S255C44v106Ev");}
void  S255C4 ::v107(){vfunc_called(this, "_ZN6S255C44v107Ev");}
void  S255C4 ::v108(){vfunc_called(this, "_ZN6S255C44v108Ev");}
void  S255C4 ::v109(){vfunc_called(this, "_ZN6S255C44v109Ev");}
void  S255C4 ::v110(){vfunc_called(this, "_ZN6S255C44v110Ev");}
void  S255C4 ::v111(){vfunc_called(this, "_ZN6S255C44v111Ev");}
void  S255C4 ::v112(){vfunc_called(this, "_ZN6S255C44v112Ev");}
void  S255C4 ::v113(){vfunc_called(this, "_ZN6S255C44v113Ev");}
void  S255C4 ::v114(){vfunc_called(this, "_ZN6S255C44v114Ev");}
S255C4 ::S255C4(){ note_ctor("S255C4", this);} // tgen

static void Test_S255C4()
{
  extern Class_Descriptor cd_S255C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S255C4, buf);
    S255C4 *dp, &lv = *(dp=new (buf) S255C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S255C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S255C4)");
    check_base_class_offset(lv, (S255C6*)(S255C5*), 0, "S255C4");
    check_base_class_offset(lv, (S255C5*), 0, "S255C4");
    check_field_offset(lv, s255c4f0, ABISELECT(232,180), "S255C4.s255c4f0");
    set_bf_and_test(lv, s255c4f1, ABISELECT(248,192), 0, 1, 1, "S255C4");
    test_class_info(&lv, &cd_S255C4);
    dp->~S255C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS255C4(Test_S255C4, "S255C4", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S255C4C1Ev();
extern void _ZN6S255C4D1Ev();
Name_Map name_map_S255C4[] = {
  NSPAIR(_ZN6S255C4C1Ev),
  NSPAIR(_ZN6S255C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S255C6;
extern VTBL_ENTRY _ZTI6S255C6[];
extern  VTBL_ENTRY _ZTV6S255C6[];
extern Class_Descriptor cd_S255C5;
extern VTBL_ENTRY _ZTI6S255C5[];
extern  VTBL_ENTRY _ZTV6S255C5[];
static Base_Class bases_S255C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S255C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S255C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S255C4[];
extern void _ZN6S255C4D1Ev();
extern void _ZN6S255C4D0Ev();
extern void _ZN6S255C62v6Ev();
extern void _ZN6S255C62v7Ev();
extern void _ZN6S255C62v8Ev();
extern void _ZN6S255C62v9Ev();
extern void _ZN6S255C63v10Ev();
extern void _ZN6S255C63v11Ev();
extern void _ZN6S255C63v12Ev();
extern void _ZN6S255C63v13Ev();
extern void _ZN6S255C63v14Ev();
extern void _ZN6S255C63v15Ev();
extern void _ZN6S255C63v16Ev();
extern void _ZN6S255C63v17Ev();
extern void _ZN6S255C63v18Ev();
extern void _ZN6S255C63v19Ev();
extern void _ZN6S255C63v20Ev();
extern void _ZN6S255C63v21Ev();
extern void _ZN6S255C63v22Ev();
extern void _ZN6S255C63v23Ev();
extern void _ZN6S255C63v24Ev();
extern void _ZN6S255C63v25Ev();
extern void _ZN6S255C63v26Ev();
extern void _ZN6S255C63v27Ev();
extern void _ZN6S255C63v28Ev();
extern void _ZN6S255C63v29Ev();
extern void _ZN6S255C63v30Ev();
extern void _ZN6S255C63v31Ev();
extern void _ZN6S255C63v32Ev();
extern void _ZN6S255C63v33Ev();
extern void _ZN6S255C63v34Ev();
extern void _ZN6S255C63v35Ev();
extern void _ZN6S255C63v36Ev();
extern void _ZN6S255C63v37Ev();
extern void _ZN6S255C63v38Ev();
extern void _ZN6S255C63v39Ev();
extern void _ZN6S255C63v40Ev();
extern void _ZN6S255C63v41Ev();
extern void _ZN6S255C63v42Ev();
extern void _ZN6S255C63v43Ev();
extern void _ZN6S255C63v44Ev();
extern void _ZN6S255C63v45Ev();
extern void _ZN6S255C63v46Ev();
extern void _ZN6S255C63v47Ev();
extern void _ZN6S255C63v48Ev();
extern void _ZN6S255C63v49Ev();
extern void _ZN6S255C63v50Ev();
extern void _ZN6S255C63v51Ev();
extern void _ZN6S255C63v52Ev();
extern void _ZN6S255C63v53Ev();
extern void _ZN6S255C63v54Ev();
extern void _ZN6S255C63v55Ev();
extern void _ZN6S255C63v56Ev();
extern void _ZN6S255C63v57Ev();
extern void _ZN6S255C63v58Ev();
extern void _ZN6S255C63v59Ev();
extern void _ZN6S255C63v60Ev();
extern void _ZN6S255C63v61Ev();
extern void _ZN6S255C63v62Ev();
extern void _ZN6S255C63v63Ev();
extern void _ZN6S255C63v64Ev();
extern void _ZN6S255C63v65Ev();
extern void _ZN6S255C63v66Ev();
extern void _ZN6S255C63v67Ev();
extern void _ZN6S255C63v68Ev();
extern void _ZN6S255C63v69Ev();
extern void _ZN6S255C53v70Ev();
extern void _ZN6S255C53v71Ev();
extern void _ZN6S255C53v72Ev();
extern void _ZN6S255C53v73Ev();
extern void _ZN6S255C53v74Ev();
extern void _ZN6S255C53v75Ev();
extern void _ZN6S255C53v76Ev();
extern void _ZN6S255C53v77Ev();
extern void _ZN6S255C53v78Ev();
extern void _ZN6S255C53v79Ev();
extern void _ZN6S255C53v80Ev();
extern void _ZN6S255C53v81Ev();
extern void _ZN6S255C53v82Ev();
extern void _ZN6S255C53v83Ev();
extern void _ZN6S255C53v84Ev();
extern void _ZN6S255C53v85Ev();
extern void _ZN6S255C53v86Ev();
extern void _ZN6S255C53v87Ev();
extern void _ZN6S255C53v88Ev();
extern void _ZN6S255C53v89Ev();
extern void _ZN6S255C53v90Ev();
extern void _ZN6S255C53v91Ev();
extern void _ZN6S255C53v92Ev();
extern void _ZN6S255C53v93Ev();
extern void _ZN6S255C53v94Ev();
extern void _ZN6S255C53v95Ev();
extern void _ZN6S255C53v96Ev();
extern void _ZN6S255C43v97Ev();
extern void _ZN6S255C43v98Ev();
extern void _ZN6S255C43v99Ev();
extern void _ZN6S255C44v100Ev();
extern void _ZN6S255C44v101Ev();
extern void _ZN6S255C44v102Ev();
extern void _ZN6S255C44v103Ev();
extern void _ZN6S255C44v104Ev();
extern void _ZN6S255C44v105Ev();
extern void _ZN6S255C44v106Ev();
extern void _ZN6S255C44v107Ev();
extern void _ZN6S255C44v108Ev();
extern void _ZN6S255C44v109Ev();
extern void _ZN6S255C44v110Ev();
extern void _ZN6S255C44v111Ev();
extern void _ZN6S255C44v112Ev();
extern void _ZN6S255C44v113Ev();
extern void _ZN6S255C44v114Ev();
static  VTBL_ENTRY vtc_S255C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S255C4[0]),
  (VTBL_ENTRY)&_ZN6S255C4D1Ev,
  (VTBL_ENTRY)&_ZN6S255C4D0Ev,
  (VTBL_ENTRY)&_ZN6S255C62v6Ev,
  (VTBL_ENTRY)&_ZN6S255C62v7Ev,
  (VTBL_ENTRY)&_ZN6S255C62v8Ev,
  (VTBL_ENTRY)&_ZN6S255C62v9Ev,
  (VTBL_ENTRY)&_ZN6S255C63v10Ev,
  (VTBL_ENTRY)&_ZN6S255C63v11Ev,
  (VTBL_ENTRY)&_ZN6S255C63v12Ev,
  (VTBL_ENTRY)&_ZN6S255C63v13Ev,
  (VTBL_ENTRY)&_ZN6S255C63v14Ev,
  (VTBL_ENTRY)&_ZN6S255C63v15Ev,
  (VTBL_ENTRY)&_ZN6S255C63v16Ev,
  (VTBL_ENTRY)&_ZN6S255C63v17Ev,
  (VTBL_ENTRY)&_ZN6S255C63v18Ev,
  (VTBL_ENTRY)&_ZN6S255C63v19Ev,
  (VTBL_ENTRY)&_ZN6S255C63v20Ev,
  (VTBL_ENTRY)&_ZN6S255C63v21Ev,
  (VTBL_ENTRY)&_ZN6S255C63v22Ev,
  (VTBL_ENTRY)&_ZN6S255C63v23Ev,
  (VTBL_ENTRY)&_ZN6S255C63v24Ev,
  (VTBL_ENTRY)&_ZN6S255C63v25Ev,
  (VTBL_ENTRY)&_ZN6S255C63v26Ev,
  (VTBL_ENTRY)&_ZN6S255C63v27Ev,
  (VTBL_ENTRY)&_ZN6S255C63v28Ev,
  (VTBL_ENTRY)&_ZN6S255C63v29Ev,
  (VTBL_ENTRY)&_ZN6S255C63v30Ev,
  (VTBL_ENTRY)&_ZN6S255C63v31Ev,
  (VTBL_ENTRY)&_ZN6S255C63v32Ev,
  (VTBL_ENTRY)&_ZN6S255C63v33Ev,
  (VTBL_ENTRY)&_ZN6S255C63v34Ev,
  (VTBL_ENTRY)&_ZN6S255C63v35Ev,
  (VTBL_ENTRY)&_ZN6S255C63v36Ev,
  (VTBL_ENTRY)&_ZN6S255C63v37Ev,
  (VTBL_ENTRY)&_ZN6S255C63v38Ev,
  (VTBL_ENTRY)&_ZN6S255C63v39Ev,
  (VTBL_ENTRY)&_ZN6S255C63v40Ev,
  (VTBL_ENTRY)&_ZN6S255C63v41Ev,
  (VTBL_ENTRY)&_ZN6S255C63v42Ev,
  (VTBL_ENTRY)&_ZN6S255C63v43Ev,
  (VTBL_ENTRY)&_ZN6S255C63v44Ev,
  (VTBL_ENTRY)&_ZN6S255C63v45Ev,
  (VTBL_ENTRY)&_ZN6S255C63v46Ev,
  (VTBL_ENTRY)&_ZN6S255C63v47Ev,
  (VTBL_ENTRY)&_ZN6S255C63v48Ev,
  (VTBL_ENTRY)&_ZN6S255C63v49Ev,
  (VTBL_ENTRY)&_ZN6S255C63v50Ev,
  (VTBL_ENTRY)&_ZN6S255C63v51Ev,
  (VTBL_ENTRY)&_ZN6S255C63v52Ev,
  (VTBL_ENTRY)&_ZN6S255C63v53Ev,
  (VTBL_ENTRY)&_ZN6S255C63v54Ev,
  (VTBL_ENTRY)&_ZN6S255C63v55Ev,
  (VTBL_ENTRY)&_ZN6S255C63v56Ev,
  (VTBL_ENTRY)&_ZN6S255C63v57Ev,
  (VTBL_ENTRY)&_ZN6S255C63v58Ev,
  (VTBL_ENTRY)&_ZN6S255C63v59Ev,
  (VTBL_ENTRY)&_ZN6S255C63v60Ev,
  (VTBL_ENTRY)&_ZN6S255C63v61Ev,
  (VTBL_ENTRY)&_ZN6S255C63v62Ev,
  (VTBL_ENTRY)&_ZN6S255C63v63Ev,
  (VTBL_ENTRY)&_ZN6S255C63v64Ev,
  (VTBL_ENTRY)&_ZN6S255C63v65Ev,
  (VTBL_ENTRY)&_ZN6S255C63v66Ev,
  (VTBL_ENTRY)&_ZN6S255C63v67Ev,
  (VTBL_ENTRY)&_ZN6S255C63v68Ev,
  (VTBL_ENTRY)&_ZN6S255C63v69Ev,
  (VTBL_ENTRY)&_ZN6S255C53v70Ev,
  (VTBL_ENTRY)&_ZN6S255C53v71Ev,
  (VTBL_ENTRY)&_ZN6S255C53v72Ev,
  (VTBL_ENTRY)&_ZN6S255C53v73Ev,
  (VTBL_ENTRY)&_ZN6S255C53v74Ev,
  (VTBL_ENTRY)&_ZN6S255C53v75Ev,
  (VTBL_ENTRY)&_ZN6S255C53v76Ev,
  (VTBL_ENTRY)&_ZN6S255C53v77Ev,
  (VTBL_ENTRY)&_ZN6S255C53v78Ev,
  (VTBL_ENTRY)&_ZN6S255C53v79Ev,
  (VTBL_ENTRY)&_ZN6S255C53v80Ev,
  (VTBL_ENTRY)&_ZN6S255C53v81Ev,
  (VTBL_ENTRY)&_ZN6S255C53v82Ev,
  (VTBL_ENTRY)&_ZN6S255C53v83Ev,
  (VTBL_ENTRY)&_ZN6S255C53v84Ev,
  (VTBL_ENTRY)&_ZN6S255C53v85Ev,
  (VTBL_ENTRY)&_ZN6S255C53v86Ev,
  (VTBL_ENTRY)&_ZN6S255C53v87Ev,
  (VTBL_ENTRY)&_ZN6S255C53v88Ev,
  (VTBL_ENTRY)&_ZN6S255C53v89Ev,
  (VTBL_ENTRY)&_ZN6S255C53v90Ev,
  (VTBL_ENTRY)&_ZN6S255C53v91Ev,
  (VTBL_ENTRY)&_ZN6S255C53v92Ev,
  (VTBL_ENTRY)&_ZN6S255C53v93Ev,
  (VTBL_ENTRY)&_ZN6S255C53v94Ev,
  (VTBL_ENTRY)&_ZN6S255C53v95Ev,
  (VTBL_ENTRY)&_ZN6S255C53v96Ev,
  (VTBL_ENTRY)&_ZN6S255C43v97Ev,
  (VTBL_ENTRY)&_ZN6S255C43v98Ev,
  (VTBL_ENTRY)&_ZN6S255C43v99Ev,
  (VTBL_ENTRY)&_ZN6S255C44v100Ev,
  (VTBL_ENTRY)&_ZN6S255C44v101Ev,
  (VTBL_ENTRY)&_ZN6S255C44v102Ev,
  (VTBL_ENTRY)&_ZN6S255C44v103Ev,
  (VTBL_ENTRY)&_ZN6S255C44v104Ev,
  (VTBL_ENTRY)&_ZN6S255C44v105Ev,
  (VTBL_ENTRY)&_ZN6S255C44v106Ev,
  (VTBL_ENTRY)&_ZN6S255C44v107Ev,
  (VTBL_ENTRY)&_ZN6S255C44v108Ev,
  (VTBL_ENTRY)&_ZN6S255C44v109Ev,
  (VTBL_ENTRY)&_ZN6S255C44v110Ev,
  (VTBL_ENTRY)&_ZN6S255C44v111Ev,
  (VTBL_ENTRY)&_ZN6S255C44v112Ev,
  (VTBL_ENTRY)&_ZN6S255C44v113Ev,
  (VTBL_ENTRY)&_ZN6S255C44v114Ev,
};
extern VTBL_ENTRY _ZTI6S255C4[];
extern  VTBL_ENTRY _ZTV6S255C4[];
Class_Descriptor cd_S255C4 = {  "S255C4", // class name
  bases_S255C4, 2,
  &(vtc_S255C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S255C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S255C4),113, //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  S255C3  : S255C4 {
  ::S165C27 s255c3f0;
  int s255c3f1[2];
  unsigned int s255c3f2:1;
  virtual  ~S255C3(); // _ZN6S255C3D1Ev
  virtual void  v115(); // _ZN6S255C34v115Ev
  virtual void  v116(); // _ZN6S255C34v116Ev
  virtual void  v117(); // _ZN6S255C34v117Ev
  virtual void  v118(); // _ZN6S255C34v118Ev
  virtual void  v119(); // _ZN6S255C34v119Ev
  virtual void  v120(); // _ZN6S255C34v120Ev
  virtual void  v121(); // _ZN6S255C34v121Ev
  S255C3(); // tgen
};
//SIG(-1 S255C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 FC16{ BC17{ BC8}} Fi[2] Fi:1}


 S255C3 ::~S255C3(){ note_dtor("S255C3", this);}
void  S255C3 ::v115(){vfunc_called(this, "_ZN6S255C34v115Ev");}
void  S255C3 ::v116(){vfunc_called(this, "_ZN6S255C34v116Ev");}
void  S255C3 ::v117(){vfunc_called(this, "_ZN6S255C34v117Ev");}
void  S255C3 ::v118(){vfunc_called(this, "_ZN6S255C34v118Ev");}
void  S255C3 ::v119(){vfunc_called(this, "_ZN6S255C34v119Ev");}
void  S255C3 ::v120(){vfunc_called(this, "_ZN6S255C34v120Ev");}
void  S255C3 ::v121(){vfunc_called(this, "_ZN6S255C34v121Ev");}
S255C3 ::S255C3(){ note_ctor("S255C3", this);} // tgen

static void Test_S255C3()
{
  extern Class_Descriptor cd_S255C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,56)];
    init_test(&cd_S255C3, buf);
    S255C3 *dp, &lv = *(dp=new (buf) S255C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,220), "sizeof(S255C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S255C3)");
    check_base_class_offset(lv, (S255C6*)(S255C5*)(S255C4*), 0, "S255C3");
    check_base_class_offset(lv, (S255C5*)(S255C4*), 0, "S255C3");
    check_base_class_offset(lv, (S255C4*), 0, "S255C3");
    check_field_offset(lv, s255c3f0, ABISELECT(256,196), "S255C3.s255c3f0");
    check_field_offset(lv, s255c3f1, ABISELECT(272,208), "S255C3.s255c3f1");
    set_bf_and_test(lv, s255c3f2, ABISELECT(280,216), 0, 1, 1, "S255C3");
    test_class_info(&lv, &cd_S255C3);
    dp->~S255C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS255C3(Test_S255C3, "S255C3", ABISELECT(288,220));

#else // __cplusplus

extern void _ZN6S255C3C1Ev();
extern void _ZN6S255C3D1Ev();
Name_Map name_map_S255C3[] = {
  NSPAIR(_ZN6S255C3C1Ev),
  NSPAIR(_ZN6S255C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S255C6;
extern VTBL_ENTRY _ZTI6S255C6[];
extern  VTBL_ENTRY _ZTV6S255C6[];
extern Class_Descriptor cd_S255C5;
extern VTBL_ENTRY _ZTI6S255C5[];
extern  VTBL_ENTRY _ZTV6S255C5[];
extern Class_Descriptor cd_S255C4;
extern VTBL_ENTRY _ZTI6S255C4[];
extern  VTBL_ENTRY _ZTV6S255C4[];
static Base_Class bases_S255C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S255C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S255C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S255C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S255C3[];
extern void _ZN6S255C3D1Ev();
extern void _ZN6S255C3D0Ev();
extern void _ZN6S255C62v6Ev();
extern void _ZN6S255C62v7Ev();
extern void _ZN6S255C62v8Ev();
extern void _ZN6S255C62v9Ev();
extern void _ZN6S255C63v10Ev();
extern void _ZN6S255C63v11Ev();
extern void _ZN6S255C63v12Ev();
extern void _ZN6S255C63v13Ev();
extern void _ZN6S255C63v14Ev();
extern void _ZN6S255C63v15Ev();
extern void _ZN6S255C63v16Ev();
extern void _ZN6S255C63v17Ev();
extern void _ZN6S255C63v18Ev();
extern void _ZN6S255C63v19Ev();
extern void _ZN6S255C63v20Ev();
extern void _ZN6S255C63v21Ev();
extern void _ZN6S255C63v22Ev();
extern void _ZN6S255C63v23Ev();
extern void _ZN6S255C63v24Ev();
extern void _ZN6S255C63v25Ev();
extern void _ZN6S255C63v26Ev();
extern void _ZN6S255C63v27Ev();
extern void _ZN6S255C63v28Ev();
extern void _ZN6S255C63v29Ev();
extern void _ZN6S255C63v30Ev();
extern void _ZN6S255C63v31Ev();
extern void _ZN6S255C63v32Ev();
extern void _ZN6S255C63v33Ev();
extern void _ZN6S255C63v34Ev();
extern void _ZN6S255C63v35Ev();
extern void _ZN6S255C63v36Ev();
extern void _ZN6S255C63v37Ev();
extern void _ZN6S255C63v38Ev();
extern void _ZN6S255C63v39Ev();
extern void _ZN6S255C63v40Ev();
extern void _ZN6S255C63v41Ev();
extern void _ZN6S255C63v42Ev();
extern void _ZN6S255C63v43Ev();
extern void _ZN6S255C63v44Ev();
extern void _ZN6S255C63v45Ev();
extern void _ZN6S255C63v46Ev();
extern void _ZN6S255C63v47Ev();
extern void _ZN6S255C63v48Ev();
extern void _ZN6S255C63v49Ev();
extern void _ZN6S255C63v50Ev();
extern void _ZN6S255C63v51Ev();
extern void _ZN6S255C63v52Ev();
extern void _ZN6S255C63v53Ev();
extern void _ZN6S255C63v54Ev();
extern void _ZN6S255C63v55Ev();
extern void _ZN6S255C63v56Ev();
extern void _ZN6S255C63v57Ev();
extern void _ZN6S255C63v58Ev();
extern void _ZN6S255C63v59Ev();
extern void _ZN6S255C63v60Ev();
extern void _ZN6S255C63v61Ev();
extern void _ZN6S255C63v62Ev();
extern void _ZN6S255C63v63Ev();
extern void _ZN6S255C63v64Ev();
extern void _ZN6S255C63v65Ev();
extern void _ZN6S255C63v66Ev();
extern void _ZN6S255C63v67Ev();
extern void _ZN6S255C63v68Ev();
extern void _ZN6S255C63v69Ev();
extern void _ZN6S255C53v70Ev();
extern void _ZN6S255C53v71Ev();
extern void _ZN6S255C53v72Ev();
extern void _ZN6S255C53v73Ev();
extern void _ZN6S255C53v74Ev();
extern void _ZN6S255C53v75Ev();
extern void _ZN6S255C53v76Ev();
extern void _ZN6S255C53v77Ev();
extern void _ZN6S255C53v78Ev();
extern void _ZN6S255C53v79Ev();
extern void _ZN6S255C53v80Ev();
extern void _ZN6S255C53v81Ev();
extern void _ZN6S255C53v82Ev();
extern void _ZN6S255C53v83Ev();
extern void _ZN6S255C53v84Ev();
extern void _ZN6S255C53v85Ev();
extern void _ZN6S255C53v86Ev();
extern void _ZN6S255C53v87Ev();
extern void _ZN6S255C53v88Ev();
extern void _ZN6S255C53v89Ev();
extern void _ZN6S255C53v90Ev();
extern void _ZN6S255C53v91Ev();
extern void _ZN6S255C53v92Ev();
extern void _ZN6S255C53v93Ev();
extern void _ZN6S255C53v94Ev();
extern void _ZN6S255C53v95Ev();
extern void _ZN6S255C53v96Ev();
extern void _ZN6S255C43v97Ev();
extern void _ZN6S255C43v98Ev();
extern void _ZN6S255C43v99Ev();
extern void _ZN6S255C44v100Ev();
extern void _ZN6S255C44v101Ev();
extern void _ZN6S255C44v102Ev();
extern void _ZN6S255C44v103Ev();
extern void _ZN6S255C44v104Ev();
extern void _ZN6S255C44v105Ev();
extern void _ZN6S255C44v106Ev();
extern void _ZN6S255C44v107Ev();
extern void _ZN6S255C44v108Ev();
extern void _ZN6S255C44v109Ev();
extern void _ZN6S255C44v110Ev();
extern void _ZN6S255C44v111Ev();
extern void _ZN6S255C44v112Ev();
extern void _ZN6S255C44v113Ev();
extern void _ZN6S255C44v114Ev();
extern void _ZN6S255C34v115Ev();
extern void _ZN6S255C34v116Ev();
extern void _ZN6S255C34v117Ev();
extern void _ZN6S255C34v118Ev();
extern void _ZN6S255C34v119Ev();
extern void _ZN6S255C34v120Ev();
extern void _ZN6S255C34v121Ev();
static  VTBL_ENTRY vtc_S255C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S255C3[0]),
  (VTBL_ENTRY)&_ZN6S255C3D1Ev,
  (VTBL_ENTRY)&_ZN6S255C3D0Ev,
  (VTBL_ENTRY)&_ZN6S255C62v6Ev,
  (VTBL_ENTRY)&_ZN6S255C62v7Ev,
  (VTBL_ENTRY)&_ZN6S255C62v8Ev,
  (VTBL_ENTRY)&_ZN6S255C62v9Ev,
  (VTBL_ENTRY)&_ZN6S255C63v10Ev,
  (VTBL_ENTRY)&_ZN6S255C63v11Ev,
  (VTBL_ENTRY)&_ZN6S255C63v12Ev,
  (VTBL_ENTRY)&_ZN6S255C63v13Ev,
  (VTBL_ENTRY)&_ZN6S255C63v14Ev,
  (VTBL_ENTRY)&_ZN6S255C63v15Ev,
  (VTBL_ENTRY)&_ZN6S255C63v16Ev,
  (VTBL_ENTRY)&_ZN6S255C63v17Ev,
  (VTBL_ENTRY)&_ZN6S255C63v18Ev,
  (VTBL_ENTRY)&_ZN6S255C63v19Ev,
  (VTBL_ENTRY)&_ZN6S255C63v20Ev,
  (VTBL_ENTRY)&_ZN6S255C63v21Ev,
  (VTBL_ENTRY)&_ZN6S255C63v22Ev,
  (VTBL_ENTRY)&_ZN6S255C63v23Ev,
  (VTBL_ENTRY)&_ZN6S255C63v24Ev,
  (VTBL_ENTRY)&_ZN6S255C63v25Ev,
  (VTBL_ENTRY)&_ZN6S255C63v26Ev,
  (VTBL_ENTRY)&_ZN6S255C63v27Ev,
  (VTBL_ENTRY)&_ZN6S255C63v28Ev,
  (VTBL_ENTRY)&_ZN6S255C63v29Ev,
  (VTBL_ENTRY)&_ZN6S255C63v30Ev,
  (VTBL_ENTRY)&_ZN6S255C63v31Ev,
  (VTBL_ENTRY)&_ZN6S255C63v32Ev,
  (VTBL_ENTRY)&_ZN6S255C63v33Ev,
  (VTBL_ENTRY)&_ZN6S255C63v34Ev,
  (VTBL_ENTRY)&_ZN6S255C63v35Ev,
  (VTBL_ENTRY)&_ZN6S255C63v36Ev,
  (VTBL_ENTRY)&_ZN6S255C63v37Ev,
  (VTBL_ENTRY)&_ZN6S255C63v38Ev,
  (VTBL_ENTRY)&_ZN6S255C63v39Ev,
  (VTBL_ENTRY)&_ZN6S255C63v40Ev,
  (VTBL_ENTRY)&_ZN6S255C63v41Ev,
  (VTBL_ENTRY)&_ZN6S255C63v42Ev,
  (VTBL_ENTRY)&_ZN6S255C63v43Ev,
  (VTBL_ENTRY)&_ZN6S255C63v44Ev,
  (VTBL_ENTRY)&_ZN6S255C63v45Ev,
  (VTBL_ENTRY)&_ZN6S255C63v46Ev,
  (VTBL_ENTRY)&_ZN6S255C63v47Ev,
  (VTBL_ENTRY)&_ZN6S255C63v48Ev,
  (VTBL_ENTRY)&_ZN6S255C63v49Ev,
  (VTBL_ENTRY)&_ZN6S255C63v50Ev,
  (VTBL_ENTRY)&_ZN6S255C63v51Ev,
  (VTBL_ENTRY)&_ZN6S255C63v52Ev,
  (VTBL_ENTRY)&_ZN6S255C63v53Ev,
  (VTBL_ENTRY)&_ZN6S255C63v54Ev,
  (VTBL_ENTRY)&_ZN6S255C63v55Ev,
  (VTBL_ENTRY)&_ZN6S255C63v56Ev,
  (VTBL_ENTRY)&_ZN6S255C63v57Ev,
  (VTBL_ENTRY)&_ZN6S255C63v58Ev,
  (VTBL_ENTRY)&_ZN6S255C63v59Ev,
  (VTBL_ENTRY)&_ZN6S255C63v60Ev,
  (VTBL_ENTRY)&_ZN6S255C63v61Ev,
  (VTBL_ENTRY)&_ZN6S255C63v62Ev,
  (VTBL_ENTRY)&_ZN6S255C63v63Ev,
  (VTBL_ENTRY)&_ZN6S255C63v64Ev,
  (VTBL_ENTRY)&_ZN6S255C63v65Ev,
  (VTBL_ENTRY)&_ZN6S255C63v66Ev,
  (VTBL_ENTRY)&_ZN6S255C63v67Ev,
  (VTBL_ENTRY)&_ZN6S255C63v68Ev,
  (VTBL_ENTRY)&_ZN6S255C63v69Ev,
  (VTBL_ENTRY)&_ZN6S255C53v70Ev,
  (VTBL_ENTRY)&_ZN6S255C53v71Ev,
  (VTBL_ENTRY)&_ZN6S255C53v72Ev,
  (VTBL_ENTRY)&_ZN6S255C53v73Ev,
  (VTBL_ENTRY)&_ZN6S255C53v74Ev,
  (VTBL_ENTRY)&_ZN6S255C53v75Ev,
  (VTBL_ENTRY)&_ZN6S255C53v76Ev,
  (VTBL_ENTRY)&_ZN6S255C53v77Ev,
  (VTBL_ENTRY)&_ZN6S255C53v78Ev,
  (VTBL_ENTRY)&_ZN6S255C53v79Ev,
  (VTBL_ENTRY)&_ZN6S255C53v80Ev,
  (VTBL_ENTRY)&_ZN6S255C53v81Ev,
  (VTBL_ENTRY)&_ZN6S255C53v82Ev,
  (VTBL_ENTRY)&_ZN6S255C53v83Ev,
  (VTBL_ENTRY)&_ZN6S255C53v84Ev,
  (VTBL_ENTRY)&_ZN6S255C53v85Ev,
  (VTBL_ENTRY)&_ZN6S255C53v86Ev,
  (VTBL_ENTRY)&_ZN6S255C53v87Ev,
  (VTBL_ENTRY)&_ZN6S255C53v88Ev,
  (VTBL_ENTRY)&_ZN6S255C53v89Ev,
  (VTBL_ENTRY)&_ZN6S255C53v90Ev,
  (VTBL_ENTRY)&_ZN6S255C53v91Ev,
  (VTBL_ENTRY)&_ZN6S255C53v92Ev,
  (VTBL_ENTRY)&_ZN6S255C53v93Ev,
  (VTBL_ENTRY)&_ZN6S255C53v94Ev,
  (VTBL_ENTRY)&_ZN6S255C53v95Ev,
  (VTBL_ENTRY)&_ZN6S255C53v96Ev,
  (VTBL_ENTRY)&_ZN6S255C43v97Ev,
  (VTBL_ENTRY)&_ZN6S255C43v98Ev,
  (VTBL_ENTRY)&_ZN6S255C43v99Ev,
  (VTBL_ENTRY)&_ZN6S255C44v100Ev,
  (VTBL_ENTRY)&_ZN6S255C44v101Ev,
  (VTBL_ENTRY)&_ZN6S255C44v102Ev,
  (VTBL_ENTRY)&_ZN6S255C44v103Ev,
  (VTBL_ENTRY)&_ZN6S255C44v104Ev,
  (VTBL_ENTRY)&_ZN6S255C44v105Ev,
  (VTBL_ENTRY)&_ZN6S255C44v106Ev,
  (VTBL_ENTRY)&_ZN6S255C44v107Ev,
  (VTBL_ENTRY)&_ZN6S255C44v108Ev,
  (VTBL_ENTRY)&_ZN6S255C44v109Ev,
  (VTBL_ENTRY)&_ZN6S255C44v110Ev,
  (VTBL_ENTRY)&_ZN6S255C44v111Ev,
  (VTBL_ENTRY)&_ZN6S255C44v112Ev,
  (VTBL_ENTRY)&_ZN6S255C44v113Ev,
  (VTBL_ENTRY)&_ZN6S255C44v114Ev,
  (VTBL_ENTRY)&_ZN6S255C34v115Ev,
  (VTBL_ENTRY)&_ZN6S255C34v116Ev,
  (VTBL_ENTRY)&_ZN6S255C34v117Ev,
  (VTBL_ENTRY)&_ZN6S255C34v118Ev,
  (VTBL_ENTRY)&_ZN6S255C34v119Ev,
  (VTBL_ENTRY)&_ZN6S255C34v120Ev,
  (VTBL_ENTRY)&_ZN6S255C34v121Ev,
};
extern VTBL_ENTRY _ZTI6S255C3[];
extern  VTBL_ENTRY _ZTV6S255C3[];
Class_Descriptor cd_S255C3 = {  "S255C3", // class name
  bases_S255C3, 3,
  &(vtc_S255C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,220), // object size
  NSPAIRA(_ZTI6S255C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S255C3),120, //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  S255C2  : S255C3 {
  int s255c2f0;
  ::S165C27 s255c2f1;
  int s255c2f2;
  virtual  ~S255C2(); // _ZN6S255C2D1Ev
  virtual void  v122(); // _ZN6S255C24v122Ev
  virtual void  v123(); // _ZN6S255C24v123Ev
  virtual void  v124(); // _ZN6S255C24v124Ev
  virtual void  v125(); // _ZN6S255C24v125Ev
  virtual void  v126(); // _ZN6S255C24v126Ev
  virtual void  v127(); // _ZN6S255C24v127Ev
  S255C2(); // tgen
};
//SIG(-1 S255C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v93 v94 v95 v96 v97 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC15{ BC16{ BC9}} Fi:1} vd v116 v117 v118 v119 v120 v121 v122 FC17{ BC18{ BC9}} Fi[2] Fi:1} vd v1 v2 v3 v4 v5 v6 Fi FC17 Fi}


 S255C2 ::~S255C2(){ note_dtor("S255C2", this);}
void  S255C2 ::v122(){vfunc_called(this, "_ZN6S255C24v122Ev");}
void  S255C2 ::v123(){vfunc_called(this, "_ZN6S255C24v123Ev");}
void  S255C2 ::v124(){vfunc_called(this, "_ZN6S255C24v124Ev");}
void  S255C2 ::v125(){vfunc_called(this, "_ZN6S255C24v125Ev");}
void  S255C2 ::v126(){vfunc_called(this, "_ZN6S255C24v126Ev");}
void  S255C2 ::v127(){vfunc_called(this, "_ZN6S255C24v127Ev");}
S255C2 ::S255C2(){ note_ctor("S255C2", this);} // tgen

static void Test_S255C2()
{
  extern Class_Descriptor cd_S255C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,61)];
    init_test(&cd_S255C2, buf);
    S255C2 *dp, &lv = *(dp=new (buf) S255C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,240), "sizeof(S255C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S255C2)");
    check_base_class_offset(lv, (S255C6*)(S255C5*)(S255C4*)(S255C3*), 0, "S255C2");
    check_base_class_offset(lv, (S255C5*)(S255C4*)(S255C3*), 0, "S255C2");
    check_base_class_offset(lv, (S255C4*)(S255C3*), 0, "S255C2");
    check_base_class_offset(lv, (S255C3*), 0, "S255C2");
    check_field_offset(lv, s255c2f0, ABISELECT(284,220), "S255C2.s255c2f0");
    check_field_offset(lv, s255c2f1, ABISELECT(288,224), "S255C2.s255c2f1");
    check_field_offset(lv, s255c2f2, ABISELECT(304,236), "S255C2.s255c2f2");
    test_class_info(&lv, &cd_S255C2);
    dp->~S255C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS255C2(Test_S255C2, "S255C2", ABISELECT(312,240));

#else // __cplusplus

extern void _ZN6S255C2C1Ev();
extern void _ZN6S255C2D1Ev();
Name_Map name_map_S255C2[] = {
  NSPAIR(_ZN6S255C2C1Ev),
  NSPAIR(_ZN6S255C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S255C6;
extern VTBL_ENTRY _ZTI6S255C6[];
extern  VTBL_ENTRY _ZTV6S255C6[];
extern Class_Descriptor cd_S255C5;
extern VTBL_ENTRY _ZTI6S255C5[];
extern  VTBL_ENTRY _ZTV6S255C5[];
extern Class_Descriptor cd_S255C4;
extern VTBL_ENTRY _ZTI6S255C4[];
extern  VTBL_ENTRY _ZTV6S255C4[];
extern Class_Descriptor cd_S255C3;
extern VTBL_ENTRY _ZTI6S255C3[];
extern  VTBL_ENTRY _ZTV6S255C3[];
static Base_Class bases_S255C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S255C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S255C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S255C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S255C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S255C2[];
extern void _ZN6S255C2D1Ev();
extern void _ZN6S255C2D0Ev();
extern void _ZN6S255C62v6Ev();
extern void _ZN6S255C62v7Ev();
extern void _ZN6S255C62v8Ev();
extern void _ZN6S255C62v9Ev();
extern void _ZN6S255C63v10Ev();
extern void _ZN6S255C63v11Ev();
extern void _ZN6S255C63v12Ev();
extern void _ZN6S255C63v13Ev();
extern void _ZN6S255C63v14Ev();
extern void _ZN6S255C63v15Ev();
extern void _ZN6S255C63v16Ev();
extern void _ZN6S255C63v17Ev();
extern void _ZN6S255C63v18Ev();
extern void _ZN6S255C63v19Ev();
extern void _ZN6S255C63v20Ev();
extern void _ZN6S255C63v21Ev();
extern void _ZN6S255C63v22Ev();
extern void _ZN6S255C63v23Ev();
extern void _ZN6S255C63v24Ev();
extern void _ZN6S255C63v25Ev();
extern void _ZN6S255C63v26Ev();
extern void _ZN6S255C63v27Ev();
extern void _ZN6S255C63v28Ev();
extern void _ZN6S255C63v29Ev();
extern void _ZN6S255C63v30Ev();
extern void _ZN6S255C63v31Ev();
extern void _ZN6S255C63v32Ev();
extern void _ZN6S255C63v33Ev();
extern void _ZN6S255C63v34Ev();
extern void _ZN6S255C63v35Ev();
extern void _ZN6S255C63v36Ev();
extern void _ZN6S255C63v37Ev();
extern void _ZN6S255C63v38Ev();
extern void _ZN6S255C63v39Ev();
extern void _ZN6S255C63v40Ev();
extern void _ZN6S255C63v41Ev();
extern void _ZN6S255C63v42Ev();
extern void _ZN6S255C63v43Ev();
extern void _ZN6S255C63v44Ev();
extern void _ZN6S255C63v45Ev();
extern void _ZN6S255C63v46Ev();
extern void _ZN6S255C63v47Ev();
extern void _ZN6S255C63v48Ev();
extern void _ZN6S255C63v49Ev();
extern void _ZN6S255C63v50Ev();
extern void _ZN6S255C63v51Ev();
extern void _ZN6S255C63v52Ev();
extern void _ZN6S255C63v53Ev();
extern void _ZN6S255C63v54Ev();
extern void _ZN6S255C63v55Ev();
extern void _ZN6S255C63v56Ev();
extern void _ZN6S255C63v57Ev();
extern void _ZN6S255C63v58Ev();
extern void _ZN6S255C63v59Ev();
extern void _ZN6S255C63v60Ev();
extern void _ZN6S255C63v61Ev();
extern void _ZN6S255C63v62Ev();
extern void _ZN6S255C63v63Ev();
extern void _ZN6S255C63v64Ev();
extern void _ZN6S255C63v65Ev();
extern void _ZN6S255C63v66Ev();
extern void _ZN6S255C63v67Ev();
extern void _ZN6S255C63v68Ev();
extern void _ZN6S255C63v69Ev();
extern void _ZN6S255C53v70Ev();
extern void _ZN6S255C53v71Ev();
extern void _ZN6S255C53v72Ev();
extern void _ZN6S255C53v73Ev();
extern void _ZN6S255C53v74Ev();
extern void _ZN6S255C53v75Ev();
extern void _ZN6S255C53v76Ev();
extern void _ZN6S255C53v77Ev();
extern void _ZN6S255C53v78Ev();
extern void _ZN6S255C53v79Ev();
extern void _ZN6S255C53v80Ev();
extern void _ZN6S255C53v81Ev();
extern void _ZN6S255C53v82Ev();
extern void _ZN6S255C53v83Ev();
extern void _ZN6S255C53v84Ev();
extern void _ZN6S255C53v85Ev();
extern void _ZN6S255C53v86Ev();
extern void _ZN6S255C53v87Ev();
extern void _ZN6S255C53v88Ev();
extern void _ZN6S255C53v89Ev();
extern void _ZN6S255C53v90Ev();
extern void _ZN6S255C53v91Ev();
extern void _ZN6S255C53v92Ev();
extern void _ZN6S255C53v93Ev();
extern void _ZN6S255C53v94Ev();
extern void _ZN6S255C53v95Ev();
extern void _ZN6S255C53v96Ev();
extern void _ZN6S255C43v97Ev();
extern void _ZN6S255C43v98Ev();
extern void _ZN6S255C43v99Ev();
extern void _ZN6S255C44v100Ev();
extern void _ZN6S255C44v101Ev();
extern void _ZN6S255C44v102Ev();
extern void _ZN6S255C44v103Ev();
extern void _ZN6S255C44v104Ev();
extern void _ZN6S255C44v105Ev();
extern void _ZN6S255C44v106Ev();
extern void _ZN6S255C44v107Ev();
extern void _ZN6S255C44v108Ev();
extern void _ZN6S255C44v109Ev();
extern void _ZN6S255C44v110Ev();
extern void _ZN6S255C44v111Ev();
extern void _ZN6S255C44v112Ev();
extern void _ZN6S255C44v113Ev();
extern void _ZN6S255C44v114Ev();
extern void _ZN6S255C34v115Ev();
extern void _ZN6S255C34v116Ev();
extern void _ZN6S255C34v117Ev();
extern void _ZN6S255C34v118Ev();
extern void _ZN6S255C34v119Ev();
extern void _ZN6S255C34v120Ev();
extern void _ZN6S255C34v121Ev();
extern void _ZN6S255C24v122Ev();
extern void _ZN6S255C24v123Ev();
extern void _ZN6S255C24v124Ev();
extern void _ZN6S255C24v125Ev();
extern void _ZN6S255C24v126Ev();
extern void _ZN6S255C24v127Ev();
static  VTBL_ENTRY vtc_S255C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S255C2[0]),
  (VTBL_ENTRY)&_ZN6S255C2D1Ev,
  (VTBL_ENTRY)&_ZN6S255C2D0Ev,
  (VTBL_ENTRY)&_ZN6S255C62v6Ev,
  (VTBL_ENTRY)&_ZN6S255C62v7Ev,
  (VTBL_ENTRY)&_ZN6S255C62v8Ev,
  (VTBL_ENTRY)&_ZN6S255C62v9Ev,
  (VTBL_ENTRY)&_ZN6S255C63v10Ev,
  (VTBL_ENTRY)&_ZN6S255C63v11Ev,
  (VTBL_ENTRY)&_ZN6S255C63v12Ev,
  (VTBL_ENTRY)&_ZN6S255C63v13Ev,
  (VTBL_ENTRY)&_ZN6S255C63v14Ev,
  (VTBL_ENTRY)&_ZN6S255C63v15Ev,
  (VTBL_ENTRY)&_ZN6S255C63v16Ev,
  (VTBL_ENTRY)&_ZN6S255C63v17Ev,
  (VTBL_ENTRY)&_ZN6S255C63v18Ev,
  (VTBL_ENTRY)&_ZN6S255C63v19Ev,
  (VTBL_ENTRY)&_ZN6S255C63v20Ev,
  (VTBL_ENTRY)&_ZN6S255C63v21Ev,
  (VTBL_ENTRY)&_ZN6S255C63v22Ev,
  (VTBL_ENTRY)&_ZN6S255C63v23Ev,
  (VTBL_ENTRY)&_ZN6S255C63v24Ev,
  (VTBL_ENTRY)&_ZN6S255C63v25Ev,
  (VTBL_ENTRY)&_ZN6S255C63v26Ev,
  (VTBL_ENTRY)&_ZN6S255C63v27Ev,
  (VTBL_ENTRY)&_ZN6S255C63v28Ev,
  (VTBL_ENTRY)&_ZN6S255C63v29Ev,
  (VTBL_ENTRY)&_ZN6S255C63v30Ev,
  (VTBL_ENTRY)&_ZN6S255C63v31Ev,
  (VTBL_ENTRY)&_ZN6S255C63v32Ev,
  (VTBL_ENTRY)&_ZN6S255C63v33Ev,
  (VTBL_ENTRY)&_ZN6S255C63v34Ev,
  (VTBL_ENTRY)&_ZN6S255C63v35Ev,
  (VTBL_ENTRY)&_ZN6S255C63v36Ev,
  (VTBL_ENTRY)&_ZN6S255C63v37Ev,
  (VTBL_ENTRY)&_ZN6S255C63v38Ev,
  (VTBL_ENTRY)&_ZN6S255C63v39Ev,
  (VTBL_ENTRY)&_ZN6S255C63v40Ev,
  (VTBL_ENTRY)&_ZN6S255C63v41Ev,
  (VTBL_ENTRY)&_ZN6S255C63v42Ev,
  (VTBL_ENTRY)&_ZN6S255C63v43Ev,
  (VTBL_ENTRY)&_ZN6S255C63v44Ev,
  (VTBL_ENTRY)&_ZN6S255C63v45Ev,
  (VTBL_ENTRY)&_ZN6S255C63v46Ev,
  (VTBL_ENTRY)&_ZN6S255C63v47Ev,
  (VTBL_ENTRY)&_ZN6S255C63v48Ev,
  (VTBL_ENTRY)&_ZN6S255C63v49Ev,
  (VTBL_ENTRY)&_ZN6S255C63v50Ev,
  (VTBL_ENTRY)&_ZN6S255C63v51Ev,
  (VTBL_ENTRY)&_ZN6S255C63v52Ev,
  (VTBL_ENTRY)&_ZN6S255C63v53Ev,
  (VTBL_ENTRY)&_ZN6S255C63v54Ev,
  (VTBL_ENTRY)&_ZN6S255C63v55Ev,
  (VTBL_ENTRY)&_ZN6S255C63v56Ev,
  (VTBL_ENTRY)&_ZN6S255C63v57Ev,
  (VTBL_ENTRY)&_ZN6S255C63v58Ev,
  (VTBL_ENTRY)&_ZN6S255C63v59Ev,
  (VTBL_ENTRY)&_ZN6S255C63v60Ev,
  (VTBL_ENTRY)&_ZN6S255C63v61Ev,
  (VTBL_ENTRY)&_ZN6S255C63v62Ev,
  (VTBL_ENTRY)&_ZN6S255C63v63Ev,
  (VTBL_ENTRY)&_ZN6S255C63v64Ev,
  (VTBL_ENTRY)&_ZN6S255C63v65Ev,
  (VTBL_ENTRY)&_ZN6S255C63v66Ev,
  (VTBL_ENTRY)&_ZN6S255C63v67Ev,
  (VTBL_ENTRY)&_ZN6S255C63v68Ev,
  (VTBL_ENTRY)&_ZN6S255C63v69Ev,
  (VTBL_ENTRY)&_ZN6S255C53v70Ev,
  (VTBL_ENTRY)&_ZN6S255C53v71Ev,
  (VTBL_ENTRY)&_ZN6S255C53v72Ev,
  (VTBL_ENTRY)&_ZN6S255C53v73Ev,
  (VTBL_ENTRY)&_ZN6S255C53v74Ev,
  (VTBL_ENTRY)&_ZN6S255C53v75Ev,
  (VTBL_ENTRY)&_ZN6S255C53v76Ev,
  (VTBL_ENTRY)&_ZN6S255C53v77Ev,
  (VTBL_ENTRY)&_ZN6S255C53v78Ev,
  (VTBL_ENTRY)&_ZN6S255C53v79Ev,
  (VTBL_ENTRY)&_ZN6S255C53v80Ev,
  (VTBL_ENTRY)&_ZN6S255C53v81Ev,
  (VTBL_ENTRY)&_ZN6S255C53v82Ev,
  (VTBL_ENTRY)&_ZN6S255C53v83Ev,
  (VTBL_ENTRY)&_ZN6S255C53v84Ev,
  (VTBL_ENTRY)&_ZN6S255C53v85Ev,
  (VTBL_ENTRY)&_ZN6S255C53v86Ev,
  (VTBL_ENTRY)&_ZN6S255C53v87Ev,
  (VTBL_ENTRY)&_ZN6S255C53v88Ev,
  (VTBL_ENTRY)&_ZN6S255C53v89Ev,
  (VTBL_ENTRY)&_ZN6S255C53v90Ev,
  (VTBL_ENTRY)&_ZN6S255C53v91Ev,
  (VTBL_ENTRY)&_ZN6S255C53v92Ev,
  (VTBL_ENTRY)&_ZN6S255C53v93Ev,
  (VTBL_ENTRY)&_ZN6S255C53v94Ev,
  (VTBL_ENTRY)&_ZN6S255C53v95Ev,
  (VTBL_ENTRY)&_ZN6S255C53v96Ev,
  (VTBL_ENTRY)&_ZN6S255C43v97Ev,
  (VTBL_ENTRY)&_ZN6S255C43v98Ev,
  (VTBL_ENTRY)&_ZN6S255C43v99Ev,
  (VTBL_ENTRY)&_ZN6S255C44v100Ev,
  (VTBL_ENTRY)&_ZN6S255C44v101Ev,
  (VTBL_ENTRY)&_ZN6S255C44v102Ev,
  (VTBL_ENTRY)&_ZN6S255C44v103Ev,
  (VTBL_ENTRY)&_ZN6S255C44v104Ev,
  (VTBL_ENTRY)&_ZN6S255C44v105Ev,
  (VTBL_ENTRY)&_ZN6S255C44v106Ev,
  (VTBL_ENTRY)&_ZN6S255C44v107Ev,
  (VTBL_ENTRY)&_ZN6S255C44v108Ev,
  (VTBL_ENTRY)&_ZN6S255C44v109Ev,
  (VTBL_ENTRY)&_ZN6S255C44v110Ev,
  (VTBL_ENTRY)&_ZN6S255C44v111Ev,
  (VTBL_ENTRY)&_ZN6S255C44v112Ev,
  (VTBL_ENTRY)&_ZN6S255C44v113Ev,
  (VTBL_ENTRY)&_ZN6S255C44v114Ev,
  (VTBL_ENTRY)&_ZN6S255C34v115Ev,
  (VTBL_ENTRY)&_ZN6S255C34v116Ev,
  (VTBL_ENTRY)&_ZN6S255C34v117Ev,
  (VTBL_ENTRY)&_ZN6S255C34v118Ev,
  (VTBL_ENTRY)&_ZN6S255C34v119Ev,
  (VTBL_ENTRY)&_ZN6S255C34v120Ev,
  (VTBL_ENTRY)&_ZN6S255C34v121Ev,
  (VTBL_ENTRY)&_ZN6S255C24v122Ev,
  (VTBL_ENTRY)&_ZN6S255C24v123Ev,
  (VTBL_ENTRY)&_ZN6S255C24v124Ev,
  (VTBL_ENTRY)&_ZN6S255C24v125Ev,
  (VTBL_ENTRY)&_ZN6S255C24v126Ev,
  (VTBL_ENTRY)&_ZN6S255C24v127Ev,
};
extern VTBL_ENTRY _ZTI6S255C2[];
extern  VTBL_ENTRY _ZTV6S255C2[];
Class_Descriptor cd_S255C2 = {  "S255C2", // class name
  bases_S255C2, 4,
  &(vtc_S255C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,240), // object size
  NSPAIRA(_ZTI6S255C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S255C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S255C1  : S255C2 {
  int s255c1f0[2];
  void *s255c1f1;
  virtual  ~S255C1(); // _ZN6S255C1D1Ev
  virtual void  v1(); // _ZN6S255C12v1Ev
  virtual void  v2(); // _ZN6S255C12v2Ev
  virtual void  v3(); // _ZN6S255C12v3Ev
  virtual void  v4(); // _ZN6S255C12v4Ev
  virtual void  v5(); // _ZN6S255C12v5Ev
  S255C1(); // tgen
};
//SIG(1 S255C1) 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 v92 v93 v94 v95 v96 Fp FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC7 FC11{ BC12{ BC10}} FC13{ m FC14{ m Fi[4]} FC15{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 FC16{ BC17{ BC10}} Fi:1} vd v115 v116 v117 v118 v119 v120 v121 FC18{ BC19{ BC10}} Fi[2] Fi:1} vd v122 v123 v124 v125 v126 v127 Fi FC18 Fi} vd v1 v2 v3 v4 v5 Fi[2] Fp}


 S255C1 ::~S255C1(){ note_dtor("S255C1", this);}
void  S255C1 ::v1(){vfunc_called(this, "_ZN6S255C12v1Ev");}
void  S255C1 ::v2(){vfunc_called(this, "_ZN6S255C12v2Ev");}
void  S255C1 ::v3(){vfunc_called(this, "_ZN6S255C12v3Ev");}
void  S255C1 ::v4(){vfunc_called(this, "_ZN6S255C12v4Ev");}
void  S255C1 ::v5(){vfunc_called(this, "_ZN6S255C12v5Ev");}
S255C1 ::S255C1(){ note_ctor("S255C1", this);} // tgen

static void Test_S255C1()
{
  extern Class_Descriptor cd_S255C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,64)];
    init_test(&cd_S255C1, buf);
    S255C1 *dp, &lv = *(dp=new (buf) S255C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,252), "sizeof(S255C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S255C1)");
    check_base_class_offset(lv, (S255C6*)(S255C5*)(S255C4*)(S255C3*)(S255C2*), 0, "S255C1");
    check_base_class_offset(lv, (S255C5*)(S255C4*)(S255C3*)(S255C2*), 0, "S255C1");
    check_base_class_offset(lv, (S255C4*)(S255C3*)(S255C2*), 0, "S255C1");
    check_base_class_offset(lv, (S255C3*)(S255C2*), 0, "S255C1");
    check_base_class_offset(lv, (S255C2*), 0, "S255C1");
    check_field_offset(lv, s255c1f0, ABISELECT(308,240), "S255C1.s255c1f0");
    check_field_offset(lv, s255c1f1, ABISELECT(320,248), "S255C1.s255c1f1");
    test_class_info(&lv, &cd_S255C1);
    dp->~S255C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS255C1(Test_S255C1, "S255C1", ABISELECT(328,252));

#else // __cplusplus

extern void _ZN6S255C1C1Ev();
extern void _ZN6S255C1D1Ev();
Name_Map name_map_S255C1[] = {
  NSPAIR(_ZN6S255C1C1Ev),
  NSPAIR(_ZN6S255C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S255C6;
extern VTBL_ENTRY _ZTI6S255C6[];
extern  VTBL_ENTRY _ZTV6S255C6[];
extern Class_Descriptor cd_S255C5;
extern VTBL_ENTRY _ZTI6S255C5[];
extern  VTBL_ENTRY _ZTV6S255C5[];
extern Class_Descriptor cd_S255C4;
extern VTBL_ENTRY _ZTI6S255C4[];
extern  VTBL_ENTRY _ZTV6S255C4[];
extern Class_Descriptor cd_S255C3;
extern VTBL_ENTRY _ZTI6S255C3[];
extern  VTBL_ENTRY _ZTV6S255C3[];
extern Class_Descriptor cd_S255C2;
extern VTBL_ENTRY _ZTI6S255C2[];
extern  VTBL_ENTRY _ZTV6S255C2[];
static Base_Class bases_S255C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S255C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S255C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S255C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S255C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S255C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S255C1[];
extern void _ZN6S255C1D1Ev();
extern void _ZN6S255C1D0Ev();
extern void _ZN6S255C62v6Ev();
extern void _ZN6S255C62v7Ev();
extern void _ZN6S255C62v8Ev();
extern void _ZN6S255C62v9Ev();
extern void _ZN6S255C63v10Ev();
extern void _ZN6S255C63v11Ev();
extern void _ZN6S255C63v12Ev();
extern void _ZN6S255C63v13Ev();
extern void _ZN6S255C63v14Ev();
extern void _ZN6S255C63v15Ev();
extern void _ZN6S255C63v16Ev();
extern void _ZN6S255C63v17Ev();
extern void _ZN6S255C63v18Ev();
extern void _ZN6S255C63v19Ev();
extern void _ZN6S255C63v20Ev();
extern void _ZN6S255C63v21Ev();
extern void _ZN6S255C63v22Ev();
extern void _ZN6S255C63v23Ev();
extern void _ZN6S255C63v24Ev();
extern void _ZN6S255C63v25Ev();
extern void _ZN6S255C63v26Ev();
extern void _ZN6S255C63v27Ev();
extern void _ZN6S255C63v28Ev();
extern void _ZN6S255C63v29Ev();
extern void _ZN6S255C63v30Ev();
extern void _ZN6S255C63v31Ev();
extern void _ZN6S255C63v32Ev();
extern void _ZN6S255C63v33Ev();
extern void _ZN6S255C63v34Ev();
extern void _ZN6S255C63v35Ev();
extern void _ZN6S255C63v36Ev();
extern void _ZN6S255C63v37Ev();
extern void _ZN6S255C63v38Ev();
extern void _ZN6S255C63v39Ev();
extern void _ZN6S255C63v40Ev();
extern void _ZN6S255C63v41Ev();
extern void _ZN6S255C63v42Ev();
extern void _ZN6S255C63v43Ev();
extern void _ZN6S255C63v44Ev();
extern void _ZN6S255C63v45Ev();
extern void _ZN6S255C63v46Ev();
extern void _ZN6S255C63v47Ev();
extern void _ZN6S255C63v48Ev();
extern void _ZN6S255C63v49Ev();
extern void _ZN6S255C63v50Ev();
extern void _ZN6S255C63v51Ev();
extern void _ZN6S255C63v52Ev();
extern void _ZN6S255C63v53Ev();
extern void _ZN6S255C63v54Ev();
extern void _ZN6S255C63v55Ev();
extern void _ZN6S255C63v56Ev();
extern void _ZN6S255C63v57Ev();
extern void _ZN6S255C63v58Ev();
extern void _ZN6S255C63v59Ev();
extern void _ZN6S255C63v60Ev();
extern void _ZN6S255C63v61Ev();
extern void _ZN6S255C63v62Ev();
extern void _ZN6S255C63v63Ev();
extern void _ZN6S255C63v64Ev();
extern void _ZN6S255C63v65Ev();
extern void _ZN6S255C63v66Ev();
extern void _ZN6S255C63v67Ev();
extern void _ZN6S255C63v68Ev();
extern void _ZN6S255C63v69Ev();
extern void _ZN6S255C53v70Ev();
extern void _ZN6S255C53v71Ev();
extern void _ZN6S255C53v72Ev();
extern void _ZN6S255C53v73Ev();
extern void _ZN6S255C53v74Ev();
extern void _ZN6S255C53v75Ev();
extern void _ZN6S255C53v76Ev();
extern void _ZN6S255C53v77Ev();
extern void _ZN6S255C53v78Ev();
extern void _ZN6S255C53v79Ev();
extern void _ZN6S255C53v80Ev();
extern void _ZN6S255C53v81Ev();
extern void _ZN6S255C53v82Ev();
extern void _ZN6S255C53v83Ev();
extern void _ZN6S255C53v84Ev();
extern void _ZN6S255C53v85Ev();
extern void _ZN6S255C53v86Ev();
extern void _ZN6S255C53v87Ev();
extern void _ZN6S255C53v88Ev();
extern void _ZN6S255C53v89Ev();
extern void _ZN6S255C53v90Ev();
extern void _ZN6S255C53v91Ev();
extern void _ZN6S255C53v92Ev();
extern void _ZN6S255C53v93Ev();
extern void _ZN6S255C53v94Ev();
extern void _ZN6S255C53v95Ev();
extern void _ZN6S255C53v96Ev();
extern void _ZN6S255C43v97Ev();
extern void _ZN6S255C43v98Ev();
extern void _ZN6S255C43v99Ev();
extern void _ZN6S255C44v100Ev();
extern void _ZN6S255C44v101Ev();
extern void _ZN6S255C44v102Ev();
extern void _ZN6S255C44v103Ev();
extern void _ZN6S255C44v104Ev();
extern void _ZN6S255C44v105Ev();
extern void _ZN6S255C44v106Ev();
extern void _ZN6S255C44v107Ev();
extern void _ZN6S255C44v108Ev();
extern void _ZN6S255C44v109Ev();
extern void _ZN6S255C44v110Ev();
extern void _ZN6S255C44v111Ev();
extern void _ZN6S255C44v112Ev();
extern void _ZN6S255C44v113Ev();
extern void _ZN6S255C44v114Ev();
extern void _ZN6S255C34v115Ev();
extern void _ZN6S255C34v116Ev();
extern void _ZN6S255C34v117Ev();
extern void _ZN6S255C34v118Ev();
extern void _ZN6S255C34v119Ev();
extern void _ZN6S255C34v120Ev();
extern void _ZN6S255C34v121Ev();
extern void _ZN6S255C24v122Ev();
extern void _ZN6S255C24v123Ev();
extern void _ZN6S255C24v124Ev();
extern void _ZN6S255C24v125Ev();
extern void _ZN6S255C24v126Ev();
extern void _ZN6S255C24v127Ev();
extern void _ZN6S255C12v1Ev();
extern void _ZN6S255C12v2Ev();
extern void _ZN6S255C12v3Ev();
extern void _ZN6S255C12v4Ev();
extern void _ZN6S255C12v5Ev();
static  VTBL_ENTRY vtc_S255C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S255C1[0]),
  (VTBL_ENTRY)&_ZN6S255C1D1Ev,
  (VTBL_ENTRY)&_ZN6S255C1D0Ev,
  (VTBL_ENTRY)&_ZN6S255C62v6Ev,
  (VTBL_ENTRY)&_ZN6S255C62v7Ev,
  (VTBL_ENTRY)&_ZN6S255C62v8Ev,
  (VTBL_ENTRY)&_ZN6S255C62v9Ev,
  (VTBL_ENTRY)&_ZN6S255C63v10Ev,
  (VTBL_ENTRY)&_ZN6S255C63v11Ev,
  (VTBL_ENTRY)&_ZN6S255C63v12Ev,
  (VTBL_ENTRY)&_ZN6S255C63v13Ev,
  (VTBL_ENTRY)&_ZN6S255C63v14Ev,
  (VTBL_ENTRY)&_ZN6S255C63v15Ev,
  (VTBL_ENTRY)&_ZN6S255C63v16Ev,
  (VTBL_ENTRY)&_ZN6S255C63v17Ev,
  (VTBL_ENTRY)&_ZN6S255C63v18Ev,
  (VTBL_ENTRY)&_ZN6S255C63v19Ev,
  (VTBL_ENTRY)&_ZN6S255C63v20Ev,
  (VTBL_ENTRY)&_ZN6S255C63v21Ev,
  (VTBL_ENTRY)&_ZN6S255C63v22Ev,
  (VTBL_ENTRY)&_ZN6S255C63v23Ev,
  (VTBL_ENTRY)&_ZN6S255C63v24Ev,
  (VTBL_ENTRY)&_ZN6S255C63v25Ev,
  (VTBL_ENTRY)&_ZN6S255C63v26Ev,
  (VTBL_ENTRY)&_ZN6S255C63v27Ev,
  (VTBL_ENTRY)&_ZN6S255C63v28Ev,
  (VTBL_ENTRY)&_ZN6S255C63v29Ev,
  (VTBL_ENTRY)&_ZN6S255C63v30Ev,
  (VTBL_ENTRY)&_ZN6S255C63v31Ev,
  (VTBL_ENTRY)&_ZN6S255C63v32Ev,
  (VTBL_ENTRY)&_ZN6S255C63v33Ev,
  (VTBL_ENTRY)&_ZN6S255C63v34Ev,
  (VTBL_ENTRY)&_ZN6S255C63v35Ev,
  (VTBL_ENTRY)&_ZN6S255C63v36Ev,
  (VTBL_ENTRY)&_ZN6S255C63v37Ev,
  (VTBL_ENTRY)&_ZN6S255C63v38Ev,
  (VTBL_ENTRY)&_ZN6S255C63v39Ev,
  (VTBL_ENTRY)&_ZN6S255C63v40Ev,
  (VTBL_ENTRY)&_ZN6S255C63v41Ev,
  (VTBL_ENTRY)&_ZN6S255C63v42Ev,
  (VTBL_ENTRY)&_ZN6S255C63v43Ev,
  (VTBL_ENTRY)&_ZN6S255C63v44Ev,
  (VTBL_ENTRY)&_ZN6S255C63v45Ev,
  (VTBL_ENTRY)&_ZN6S255C63v46Ev,
  (VTBL_ENTRY)&_ZN6S255C63v47Ev,
  (VTBL_ENTRY)&_ZN6S255C63v48Ev,
  (VTBL_ENTRY)&_ZN6S255C63v49Ev,
  (VTBL_ENTRY)&_ZN6S255C63v50Ev,
  (VTBL_ENTRY)&_ZN6S255C63v51Ev,
  (VTBL_ENTRY)&_ZN6S255C63v52Ev,
  (VTBL_ENTRY)&_ZN6S255C63v53Ev,
  (VTBL_ENTRY)&_ZN6S255C63v54Ev,
  (VTBL_ENTRY)&_ZN6S255C63v55Ev,
  (VTBL_ENTRY)&_ZN6S255C63v56Ev,
  (VTBL_ENTRY)&_ZN6S255C63v57Ev,
  (VTBL_ENTRY)&_ZN6S255C63v58Ev,
  (VTBL_ENTRY)&_ZN6S255C63v59Ev,
  (VTBL_ENTRY)&_ZN6S255C63v60Ev,
  (VTBL_ENTRY)&_ZN6S255C63v61Ev,
  (VTBL_ENTRY)&_ZN6S255C63v62Ev,
  (VTBL_ENTRY)&_ZN6S255C63v63Ev,
  (VTBL_ENTRY)&_ZN6S255C63v64Ev,
  (VTBL_ENTRY)&_ZN6S255C63v65Ev,
  (VTBL_ENTRY)&_ZN6S255C63v66Ev,
  (VTBL_ENTRY)&_ZN6S255C63v67Ev,
  (VTBL_ENTRY)&_ZN6S255C63v68Ev,
  (VTBL_ENTRY)&_ZN6S255C63v69Ev,
  (VTBL_ENTRY)&_ZN6S255C53v70Ev,
  (VTBL_ENTRY)&_ZN6S255C53v71Ev,
  (VTBL_ENTRY)&_ZN6S255C53v72Ev,
  (VTBL_ENTRY)&_ZN6S255C53v73Ev,
  (VTBL_ENTRY)&_ZN6S255C53v74Ev,
  (VTBL_ENTRY)&_ZN6S255C53v75Ev,
  (VTBL_ENTRY)&_ZN6S255C53v76Ev,
  (VTBL_ENTRY)&_ZN6S255C53v77Ev,
  (VTBL_ENTRY)&_ZN6S255C53v78Ev,
  (VTBL_ENTRY)&_ZN6S255C53v79Ev,
  (VTBL_ENTRY)&_ZN6S255C53v80Ev,
  (VTBL_ENTRY)&_ZN6S255C53v81Ev,
  (VTBL_ENTRY)&_ZN6S255C53v82Ev,
  (VTBL_ENTRY)&_ZN6S255C53v83Ev,
  (VTBL_ENTRY)&_ZN6S255C53v84Ev,
  (VTBL_ENTRY)&_ZN6S255C53v85Ev,
  (VTBL_ENTRY)&_ZN6S255C53v86Ev,
  (VTBL_ENTRY)&_ZN6S255C53v87Ev,
  (VTBL_ENTRY)&_ZN6S255C53v88Ev,
  (VTBL_ENTRY)&_ZN6S255C53v89Ev,
  (VTBL_ENTRY)&_ZN6S255C53v90Ev,
  (VTBL_ENTRY)&_ZN6S255C53v91Ev,
  (VTBL_ENTRY)&_ZN6S255C53v92Ev,
  (VTBL_ENTRY)&_ZN6S255C53v93Ev,
  (VTBL_ENTRY)&_ZN6S255C53v94Ev,
  (VTBL_ENTRY)&_ZN6S255C53v95Ev,
  (VTBL_ENTRY)&_ZN6S255C53v96Ev,
  (VTBL_ENTRY)&_ZN6S255C43v97Ev,
  (VTBL_ENTRY)&_ZN6S255C43v98Ev,
  (VTBL_ENTRY)&_ZN6S255C43v99Ev,
  (VTBL_ENTRY)&_ZN6S255C44v100Ev,
  (VTBL_ENTRY)&_ZN6S255C44v101Ev,
  (VTBL_ENTRY)&_ZN6S255C44v102Ev,
  (VTBL_ENTRY)&_ZN6S255C44v103Ev,
  (VTBL_ENTRY)&_ZN6S255C44v104Ev,
  (VTBL_ENTRY)&_ZN6S255C44v105Ev,
  (VTBL_ENTRY)&_ZN6S255C44v106Ev,
  (VTBL_ENTRY)&_ZN6S255C44v107Ev,
  (VTBL_ENTRY)&_ZN6S255C44v108Ev,
  (VTBL_ENTRY)&_ZN6S255C44v109Ev,
  (VTBL_ENTRY)&_ZN6S255C44v110Ev,
  (VTBL_ENTRY)&_ZN6S255C44v111Ev,
  (VTBL_ENTRY)&_ZN6S255C44v112Ev,
  (VTBL_ENTRY)&_ZN6S255C44v113Ev,
  (VTBL_ENTRY)&_ZN6S255C44v114Ev,
  (VTBL_ENTRY)&_ZN6S255C34v115Ev,
  (VTBL_ENTRY)&_ZN6S255C34v116Ev,
  (VTBL_ENTRY)&_ZN6S255C34v117Ev,
  (VTBL_ENTRY)&_ZN6S255C34v118Ev,
  (VTBL_ENTRY)&_ZN6S255C34v119Ev,
  (VTBL_ENTRY)&_ZN6S255C34v120Ev,
  (VTBL_ENTRY)&_ZN6S255C34v121Ev,
  (VTBL_ENTRY)&_ZN6S255C24v122Ev,
  (VTBL_ENTRY)&_ZN6S255C24v123Ev,
  (VTBL_ENTRY)&_ZN6S255C24v124Ev,
  (VTBL_ENTRY)&_ZN6S255C24v125Ev,
  (VTBL_ENTRY)&_ZN6S255C24v126Ev,
  (VTBL_ENTRY)&_ZN6S255C24v127Ev,
  (VTBL_ENTRY)&_ZN6S255C12v1Ev,
  (VTBL_ENTRY)&_ZN6S255C12v2Ev,
  (VTBL_ENTRY)&_ZN6S255C12v3Ev,
  (VTBL_ENTRY)&_ZN6S255C12v4Ev,
  (VTBL_ENTRY)&_ZN6S255C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S255C1[];
extern  VTBL_ENTRY _ZTV6S255C1[];
Class_Descriptor cd_S255C1 = {  "S255C1", // class name
  bases_S255C1, 5,
  &(vtc_S255C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,252), // object size
  NSPAIRA(_ZTI6S255C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S255C1),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  S168C6  {
  int s168c6f0;
  __tsi64 s168c6f1;
  void *s168c6f2[4];
  int s168c6f3[2];
  void *s168c6f4;
  ::S615C17_nt s168c6f5;
  void *s168c6f6[2];
  virtual  ~S168C6(); // _ZN6S168C6D1Ev
  virtual void  v3(); // _ZN6S168C62v3Ev
  virtual void  v4(); // _ZN6S168C62v4Ev
  virtual void  v5(); // _ZN6S168C62v5Ev
  virtual void  v6(); // _ZN6S168C62v6Ev
  virtual void  v7(); // _ZN6S168C62v7Ev
  virtual void  v8(); // _ZN6S168C62v8Ev
  virtual void  v9(); // _ZN6S168C62v9Ev
  virtual void  v10(); // _ZN6S168C63v10Ev
  virtual void  v11(); // _ZN6S168C63v11Ev
  virtual void  v12(); // _ZN6S168C63v12Ev
  virtual void  v13(); // _ZN6S168C63v13Ev
  virtual void  v14(); // _ZN6S168C63v14Ev
  virtual void  v15(); // _ZN6S168C63v15Ev
  virtual void  v16(); // _ZN6S168C63v16Ev
  virtual void  v17(); // _ZN6S168C63v17Ev
  virtual void  v18(); // _ZN6S168C63v18Ev
  virtual void  v19(); // _ZN6S168C63v19Ev
  virtual void  v20(); // _ZN6S168C63v20Ev
  virtual void  v21(); // _ZN6S168C63v21Ev
  virtual void  v22(); // _ZN6S168C63v22Ev
  virtual void  v23(); // _ZN6S168C63v23Ev
  virtual void  v24(); // _ZN6S168C63v24Ev
  virtual void  v25(); // _ZN6S168C63v25Ev
  virtual void  v26(); // _ZN6S168C63v26Ev
  virtual void  v27(); // _ZN6S168C63v27Ev
  virtual void  v28(); // _ZN6S168C63v28Ev
  virtual void  v29(); // _ZN6S168C63v29Ev
  virtual void  v30(); // _ZN6S168C63v30Ev
  virtual void  v31(); // _ZN6S168C63v31Ev
  virtual void  v32(); // _ZN6S168C63v32Ev
  virtual void  v33(); // _ZN6S168C63v33Ev
  virtual void  v34(); // _ZN6S168C63v34Ev
  virtual void  v35(); // _ZN6S168C63v35Ev
  virtual void  v36(); // _ZN6S168C63v36Ev
  virtual void  v37(); // _ZN6S168C63v37Ev
  virtual void  v38(); // _ZN6S168C63v38Ev
  virtual void  v39(); // _ZN6S168C63v39Ev
  virtual void  v40(); // _ZN6S168C63v40Ev
  virtual void  v41(); // _ZN6S168C63v41Ev
  virtual void  v42(); // _ZN6S168C63v42Ev
  virtual void  v43(); // _ZN6S168C63v43Ev
  virtual void  v44(); // _ZN6S168C63v44Ev
  virtual void  v45(); // _ZN6S168C63v45Ev
  virtual void  v46(); // _ZN6S168C63v46Ev
  virtual void  v47(); // _ZN6S168C63v47Ev
  virtual void  v48(); // _ZN6S168C63v48Ev
  virtual void  v49(); // _ZN6S168C63v49Ev
  virtual void  v50(); // _ZN6S168C63v50Ev
  virtual void  v51(); // _ZN6S168C63v51Ev
  virtual void  v52(); // _ZN6S168C63v52Ev
  virtual void  v53(); // _ZN6S168C63v53Ev
  virtual void  v54(); // _ZN6S168C63v54Ev
  virtual void  v55(); // _ZN6S168C63v55Ev
  virtual void  v56(); // _ZN6S168C63v56Ev
  virtual void  v57(); // _ZN6S168C63v57Ev
  virtual void  v58(); // _ZN6S168C63v58Ev
  virtual void  v59(); // _ZN6S168C63v59Ev
  virtual void  v60(); // _ZN6S168C63v60Ev
  virtual void  v61(); // _ZN6S168C63v61Ev
  virtual void  v62(); // _ZN6S168C63v62Ev
  virtual void  v63(); // _ZN6S168C63v63Ev
  virtual void  v64(); // _ZN6S168C63v64Ev
  virtual void  v65(); // _ZN6S168C63v65Ev
  virtual void  v66(); // _ZN6S168C63v66Ev
  S168C6(); // tgen
};
//SIG(-1 S168C6) 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]}


 S168C6 ::~S168C6(){ note_dtor("S168C6", this);}
void  S168C6 ::v3(){vfunc_called(this, "_ZN6S168C62v3Ev");}
void  S168C6 ::v4(){vfunc_called(this, "_ZN6S168C62v4Ev");}
void  S168C6 ::v5(){vfunc_called(this, "_ZN6S168C62v5Ev");}
void  S168C6 ::v6(){vfunc_called(this, "_ZN6S168C62v6Ev");}
void  S168C6 ::v7(){vfunc_called(this, "_ZN6S168C62v7Ev");}
void  S168C6 ::v8(){vfunc_called(this, "_ZN6S168C62v8Ev");}
void  S168C6 ::v9(){vfunc_called(this, "_ZN6S168C62v9Ev");}
void  S168C6 ::v10(){vfunc_called(this, "_ZN6S168C63v10Ev");}
void  S168C6 ::v11(){vfunc_called(this, "_ZN6S168C63v11Ev");}
void  S168C6 ::v12(){vfunc_called(this, "_ZN6S168C63v12Ev");}
void  S168C6 ::v13(){vfunc_called(this, "_ZN6S168C63v13Ev");}
void  S168C6 ::v14(){vfunc_called(this, "_ZN6S168C63v14Ev");}
void  S168C6 ::v15(){vfunc_called(this, "_ZN6S168C63v15Ev");}
void  S168C6 ::v16(){vfunc_called(this, "_ZN6S168C63v16Ev");}
void  S168C6 ::v17(){vfunc_called(this, "_ZN6S168C63v17Ev");}
void  S168C6 ::v18(){vfunc_called(this, "_ZN6S168C63v18Ev");}
void  S168C6 ::v19(){vfunc_called(this, "_ZN6S168C63v19Ev");}
void  S168C6 ::v20(){vfunc_called(this, "_ZN6S168C63v20Ev");}
void  S168C6 ::v21(){vfunc_called(this, "_ZN6S168C63v21Ev");}
void  S168C6 ::v22(){vfunc_called(this, "_ZN6S168C63v22Ev");}
void  S168C6 ::v23(){vfunc_called(this, "_ZN6S168C63v23Ev");}
void  S168C6 ::v24(){vfunc_called(this, "_ZN6S168C63v24Ev");}
void  S168C6 ::v25(){vfunc_called(this, "_ZN6S168C63v25Ev");}
void  S168C6 ::v26(){vfunc_called(this, "_ZN6S168C63v26Ev");}
void  S168C6 ::v27(){vfunc_called(this, "_ZN6S168C63v27Ev");}
void  S168C6 ::v28(){vfunc_called(this, "_ZN6S168C63v28Ev");}
void  S168C6 ::v29(){vfunc_called(this, "_ZN6S168C63v29Ev");}
void  S168C6 ::v30(){vfunc_called(this, "_ZN6S168C63v30Ev");}
void  S168C6 ::v31(){vfunc_called(this, "_ZN6S168C63v31Ev");}
void  S168C6 ::v32(){vfunc_called(this, "_ZN6S168C63v32Ev");}
void  S168C6 ::v33(){vfunc_called(this, "_ZN6S168C63v33Ev");}
void  S168C6 ::v34(){vfunc_called(this, "_ZN6S168C63v34Ev");}
void  S168C6 ::v35(){vfunc_called(this, "_ZN6S168C63v35Ev");}
void  S168C6 ::v36(){vfunc_called(this, "_ZN6S168C63v36Ev");}
void  S168C6 ::v37(){vfunc_called(this, "_ZN6S168C63v37Ev");}
void  S168C6 ::v38(){vfunc_called(this, "_ZN6S168C63v38Ev");}
void  S168C6 ::v39(){vfunc_called(this, "_ZN6S168C63v39Ev");}
void  S168C6 ::v40(){vfunc_called(this, "_ZN6S168C63v40Ev");}
void  S168C6 ::v41(){vfunc_called(this, "_ZN6S168C63v41Ev");}
void  S168C6 ::v42(){vfunc_called(this, "_ZN6S168C63v42Ev");}
void  S168C6 ::v43(){vfunc_called(this, "_ZN6S168C63v43Ev");}
void  S168C6 ::v44(){vfunc_called(this, "_ZN6S168C63v44Ev");}
void  S168C6 ::v45(){vfunc_called(this, "_ZN6S168C63v45Ev");}
void  S168C6 ::v46(){vfunc_called(this, "_ZN6S168C63v46Ev");}
void  S168C6 ::v47(){vfunc_called(this, "_ZN6S168C63v47Ev");}
void  S168C6 ::v48(){vfunc_called(this, "_ZN6S168C63v48Ev");}
void  S168C6 ::v49(){vfunc_called(this, "_ZN6S168C63v49Ev");}
void  S168C6 ::v50(){vfunc_called(this, "_ZN6S168C63v50Ev");}
void  S168C6 ::v51(){vfunc_called(this, "_ZN6S168C63v51Ev");}
void  S168C6 ::v52(){vfunc_called(this, "_ZN6S168C63v52Ev");}
void  S168C6 ::v53(){vfunc_called(this, "_ZN6S168C63v53Ev");}
void  S168C6 ::v54(){vfunc_called(this, "_ZN6S168C63v54Ev");}
void  S168C6 ::v55(){vfunc_called(this, "_ZN6S168C63v55Ev");}
void  S168C6 ::v56(){vfunc_called(this, "_ZN6S168C63v56Ev");}
void  S168C6 ::v57(){vfunc_called(this, "_ZN6S168C63v57Ev");}
void  S168C6 ::v58(){vfunc_called(this, "_ZN6S168C63v58Ev");}
void  S168C6 ::v59(){vfunc_called(this, "_ZN6S168C63v59Ev");}
void  S168C6 ::v60(){vfunc_called(this, "_ZN6S168C63v60Ev");}
void  S168C6 ::v61(){vfunc_called(this, "_ZN6S168C63v61Ev");}
void  S168C6 ::v62(){vfunc_called(this, "_ZN6S168C63v62Ev");}
void  S168C6 ::v63(){vfunc_called(this, "_ZN6S168C63v63Ev");}
void  S168C6 ::v64(){vfunc_called(this, "_ZN6S168C63v64Ev");}
void  S168C6 ::v65(){vfunc_called(this, "_ZN6S168C63v65Ev");}
void  S168C6 ::v66(){vfunc_called(this, "_ZN6S168C63v66Ev");}
S168C6 ::S168C6(){ note_ctor("S168C6", this);} // tgen

static void Test_S168C6()
{
  extern Class_Descriptor cd_S168C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S168C6, buf);
    S168C6 *dp, &lv = *(dp=new (buf) S168C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S168C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S168C6)");
    check_field_offset(lv, s168c6f0, ABISELECT(8,4), "S168C6.s168c6f0");
    check_field_offset(lv, s168c6f1, ABISELECT(16,8), "S168C6.s168c6f1");
    check_field_offset(lv, s168c6f2, ABISELECT(24,16), "S168C6.s168c6f2");
    check_field_offset(lv, s168c6f3, ABISELECT(56,32), "S168C6.s168c6f3");
    check_field_offset(lv, s168c6f4, ABISELECT(64,40), "S168C6.s168c6f4");
    check_field_offset(lv, s168c6f5, ABISELECT(72,44), "S168C6.s168c6f5");
    check_field_offset(lv, s168c6f6, ABISELECT(80,52), "S168C6.s168c6f6");
    test_class_info(&lv, &cd_S168C6);
    dp->~S168C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS168C6(Test_S168C6, "S168C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S168C6C1Ev();
extern void _ZN6S168C6D1Ev();
Name_Map name_map_S168C6[] = {
  NSPAIR(_ZN6S168C6C1Ev),
  NSPAIR(_ZN6S168C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S168C6[];
extern void _ZN6S168C6D1Ev();
extern void _ZN6S168C6D0Ev();
extern void _ZN6S168C62v3Ev();
extern void _ZN6S168C62v4Ev();
extern void _ZN6S168C62v5Ev();
extern void _ZN6S168C62v6Ev();
extern void _ZN6S168C62v7Ev();
extern void _ZN6S168C62v8Ev();
extern void _ZN6S168C62v9Ev();
extern void _ZN6S168C63v10Ev();
extern void _ZN6S168C63v11Ev();
extern void _ZN6S168C63v12Ev();
extern void _ZN6S168C63v13Ev();
extern void _ZN6S168C63v14Ev();
extern void _ZN6S168C63v15Ev();
extern void _ZN6S168C63v16Ev();
extern void _ZN6S168C63v17Ev();
extern void _ZN6S168C63v18Ev();
extern void _ZN6S168C63v19Ev();
extern void _ZN6S168C63v20Ev();
extern void _ZN6S168C63v21Ev();
extern void _ZN6S168C63v22Ev();
extern void _ZN6S168C63v23Ev();
extern void _ZN6S168C63v24Ev();
extern void _ZN6S168C63v25Ev();
extern void _ZN6S168C63v26Ev();
extern void _ZN6S168C63v27Ev();
extern void _ZN6S168C63v28Ev();
extern void _ZN6S168C63v29Ev();
extern void _ZN6S168C63v30Ev();
extern void _ZN6S168C63v31Ev();
extern void _ZN6S168C63v32Ev();
extern void _ZN6S168C63v33Ev();
extern void _ZN6S168C63v34Ev();
extern void _ZN6S168C63v35Ev();
extern void _ZN6S168C63v36Ev();
extern void _ZN6S168C63v37Ev();
extern void _ZN6S168C63v38Ev();
extern void _ZN6S168C63v39Ev();
extern void _ZN6S168C63v40Ev();
extern void _ZN6S168C63v41Ev();
extern void _ZN6S168C63v42Ev();
extern void _ZN6S168C63v43Ev();
extern void _ZN6S168C63v44Ev();
extern void _ZN6S168C63v45Ev();
extern void _ZN6S168C63v46Ev();
extern void _ZN6S168C63v47Ev();
extern void _ZN6S168C63v48Ev();
extern void _ZN6S168C63v49Ev();
extern void _ZN6S168C63v50Ev();
extern void _ZN6S168C63v51Ev();
extern void _ZN6S168C63v52Ev();
extern void _ZN6S168C63v53Ev();
extern void _ZN6S168C63v54Ev();
extern void _ZN6S168C63v55Ev();
extern void _ZN6S168C63v56Ev();
extern void _ZN6S168C63v57Ev();
extern void _ZN6S168C63v58Ev();
extern void _ZN6S168C63v59Ev();
extern void _ZN6S168C63v60Ev();
extern void _ZN6S168C63v61Ev();
extern void _ZN6S168C63v62Ev();
extern void _ZN6S168C63v63Ev();
extern void _ZN6S168C63v64Ev();
extern void _ZN6S168C63v65Ev();
extern void _ZN6S168C63v66Ev();
static  VTBL_ENTRY vtc_S168C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S168C6[0]),
  (VTBL_ENTRY)&_ZN6S168C6D1Ev,
  (VTBL_ENTRY)&_ZN6S168C6D0Ev,
  (VTBL_ENTRY)&_ZN6S168C62v3Ev,
  (VTBL_ENTRY)&_ZN6S168C62v4Ev,
  (VTBL_ENTRY)&_ZN6S168C62v5Ev,
  (VTBL_ENTRY)&_ZN6S168C62v6Ev,
  (VTBL_ENTRY)&_ZN6S168C62v7Ev,
  (VTBL_ENTRY)&_ZN6S168C62v8Ev,
  (VTBL_ENTRY)&_ZN6S168C62v9Ev,
  (VTBL_ENTRY)&_ZN6S168C63v10Ev,
  (VTBL_ENTRY)&_ZN6S168C63v11Ev,
  (VTBL_ENTRY)&_ZN6S168C63v12Ev,
  (VTBL_ENTRY)&_ZN6S168C63v13Ev,
  (VTBL_ENTRY)&_ZN6S168C63v14Ev,
  (VTBL_ENTRY)&_ZN6S168C63v15Ev,
  (VTBL_ENTRY)&_ZN6S168C63v16Ev,
  (VTBL_ENTRY)&_ZN6S168C63v17Ev,
  (VTBL_ENTRY)&_ZN6S168C63v18Ev,
  (VTBL_ENTRY)&_ZN6S168C63v19Ev,
  (VTBL_ENTRY)&_ZN6S168C63v20Ev,
  (VTBL_ENTRY)&_ZN6S168C63v21Ev,
  (VTBL_ENTRY)&_ZN6S168C63v22Ev,
  (VTBL_ENTRY)&_ZN6S168C63v23Ev,
  (VTBL_ENTRY)&_ZN6S168C63v24Ev,
  (VTBL_ENTRY)&_ZN6S168C63v25Ev,
  (VTBL_ENTRY)&_ZN6S168C63v26Ev,
  (VTBL_ENTRY)&_ZN6S168C63v27Ev,
  (VTBL_ENTRY)&_ZN6S168C63v28Ev,
  (VTBL_ENTRY)&_ZN6S168C63v29Ev,
  (VTBL_ENTRY)&_ZN6S168C63v30Ev,
  (VTBL_ENTRY)&_ZN6S168C63v31Ev,
  (VTBL_ENTRY)&_ZN6S168C63v32Ev,
  (VTBL_ENTRY)&_ZN6S168C63v33Ev,
  (VTBL_ENTRY)&_ZN6S168C63v34Ev,
  (VTBL_ENTRY)&_ZN6S168C63v35Ev,
  (VTBL_ENTRY)&_ZN6S168C63v36Ev,
  (VTBL_ENTRY)&_ZN6S168C63v37Ev,
  (VTBL_ENTRY)&_ZN6S168C63v38Ev,
  (VTBL_ENTRY)&_ZN6S168C63v39Ev,
  (VTBL_ENTRY)&_ZN6S168C63v40Ev,
  (VTBL_ENTRY)&_ZN6S168C63v41Ev,
  (VTBL_ENTRY)&_ZN6S168C63v42Ev,
  (VTBL_ENTRY)&_ZN6S168C63v43Ev,
  (VTBL_ENTRY)&_ZN6S168C63v44Ev,
  (VTBL_ENTRY)&_ZN6S168C63v45Ev,
  (VTBL_ENTRY)&_ZN6S168C63v46Ev,
  (VTBL_ENTRY)&_ZN6S168C63v47Ev,
  (VTBL_ENTRY)&_ZN6S168C63v48Ev,
  (VTBL_ENTRY)&_ZN6S168C63v49Ev,
  (VTBL_ENTRY)&_ZN6S168C63v50Ev,
  (VTBL_ENTRY)&_ZN6S168C63v51Ev,
  (VTBL_ENTRY)&_ZN6S168C63v52Ev,
  (VTBL_ENTRY)&_ZN6S168C63v53Ev,
  (VTBL_ENTRY)&_ZN6S168C63v54Ev,
  (VTBL_ENTRY)&_ZN6S168C63v55Ev,
  (VTBL_ENTRY)&_ZN6S168C63v56Ev,
  (VTBL_ENTRY)&_ZN6S168C63v57Ev,
  (VTBL_ENTRY)&_ZN6S168C63v58Ev,
  (VTBL_ENTRY)&_ZN6S168C63v59Ev,
  (VTBL_ENTRY)&_ZN6S168C63v60Ev,
  (VTBL_ENTRY)&_ZN6S168C63v61Ev,
  (VTBL_ENTRY)&_ZN6S168C63v62Ev,
  (VTBL_ENTRY)&_ZN6S168C63v63Ev,
  (VTBL_ENTRY)&_ZN6S168C63v64Ev,
  (VTBL_ENTRY)&_ZN6S168C63v65Ev,
  (VTBL_ENTRY)&_ZN6S168C63v66Ev,
};
extern VTBL_ENTRY _ZTI6S168C6[];
extern  VTBL_ENTRY _ZTV6S168C6[];
Class_Descriptor cd_S168C6 = {  "S168C6", // class name
  0,0,//no base classes
  &(vtc_S168C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S168C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S168C6),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  S168C5  : S168C6 {
  void *s168c5f0;
  ::S1542C26 s168c5f1;
  ::S615C17_nt s168c5f2;
  ::S1542C22_nt s168c5f3;
  ::S615C12_nt s168c5f4;
  int s168c5f5;
  unsigned int s168c5f6:1;
  unsigned int s168c5f7:1;
  unsigned int s168c5f8:1;
  unsigned int s168c5f9:1;
  int s168c5f10[11];
  virtual  ~S168C5(); // _ZN6S168C5D1Ev
  virtual void  v67(); // _ZN6S168C53v67Ev
  virtual void  v68(); // _ZN6S168C53v68Ev
  virtual void  v69(); // _ZN6S168C53v69Ev
  virtual void  v70(); // _ZN6S168C53v70Ev
  virtual void  v71(); // _ZN6S168C53v71Ev
  virtual void  v72(); // _ZN6S168C53v72Ev
  virtual void  v73(); // _ZN6S168C53v73Ev
  virtual void  v74(); // _ZN6S168C53v74Ev
  virtual void  v75(); // _ZN6S168C53v75Ev
  virtual void  v76(); // _ZN6S168C53v76Ev
  virtual void  v77(); // _ZN6S168C53v77Ev
  virtual void  v78(); // _ZN6S168C53v78Ev
  virtual void  v79(); // _ZN6S168C53v79Ev
  virtual void  v80(); // _ZN6S168C53v80Ev
  virtual void  v81(); // _ZN6S168C53v81Ev
  virtual void  v82(); // _ZN6S168C53v82Ev
  virtual void  v83(); // _ZN6S168C53v83Ev
  virtual void  v84(); // _ZN6S168C53v84Ev
  virtual void  v85(); // _ZN6S168C53v85Ev
  virtual void  v86(); // _ZN6S168C53v86Ev
  virtual void  v87(); // _ZN6S168C53v87Ev
  virtual void  v88(); // _ZN6S168C53v88Ev
  virtual void  v89(); // _ZN6S168C53v89Ev
  virtual void  v90(); // _ZN6S168C53v90Ev
  virtual void  v91(); // _ZN6S168C53v91Ev
  virtual void  v92(); // _ZN6S168C53v92Ev
  virtual void  v93(); // _ZN6S168C53v93Ev
  S168C5(); // tgen
};
//SIG(-1 S168C5) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S168C5 ::~S168C5(){ note_dtor("S168C5", this);}
void  S168C5 ::v67(){vfunc_called(this, "_ZN6S168C53v67Ev");}
void  S168C5 ::v68(){vfunc_called(this, "_ZN6S168C53v68Ev");}
void  S168C5 ::v69(){vfunc_called(this, "_ZN6S168C53v69Ev");}
void  S168C5 ::v70(){vfunc_called(this, "_ZN6S168C53v70Ev");}
void  S168C5 ::v71(){vfunc_called(this, "_ZN6S168C53v71Ev");}
void  S168C5 ::v72(){vfunc_called(this, "_ZN6S168C53v72Ev");}
void  S168C5 ::v73(){vfunc_called(this, "_ZN6S168C53v73Ev");}
void  S168C5 ::v74(){vfunc_called(this, "_ZN6S168C53v74Ev");}
void  S168C5 ::v75(){vfunc_called(this, "_ZN6S168C53v75Ev");}
void  S168C5 ::v76(){vfunc_called(this, "_ZN6S168C53v76Ev");}
void  S168C5 ::v77(){vfunc_called(this, "_ZN6S168C53v77Ev");}
void  S168C5 ::v78(){vfunc_called(this, "_ZN6S168C53v78Ev");}
void  S168C5 ::v79(){vfunc_called(this, "_ZN6S168C53v79Ev");}
void  S168C5 ::v80(){vfunc_called(this, "_ZN6S168C53v80Ev");}
void  S168C5 ::v81(){vfunc_called(this, "_ZN6S168C53v81Ev");}
void  S168C5 ::v82(){vfunc_called(this, "_ZN6S168C53v82Ev");}
void  S168C5 ::v83(){vfunc_called(this, "_ZN6S168C53v83Ev");}
void  S168C5 ::v84(){vfunc_called(this, "_ZN6S168C53v84Ev");}
void  S168C5 ::v85(){vfunc_called(this, "_ZN6S168C53v85Ev");}
void  S168C5 ::v86(){vfunc_called(this, "_ZN6S168C53v86Ev");}
void  S168C5 ::v87(){vfunc_called(this, "_ZN6S168C53v87Ev");}
void  S168C5 ::v88(){vfunc_called(this, "_ZN6S168C53v88Ev");}
void  S168C5 ::v89(){vfunc_called(this, "_ZN6S168C53v89Ev");}
void  S168C5 ::v90(){vfunc_called(this, "_ZN6S168C53v90Ev");}
void  S168C5 ::v91(){vfunc_called(this, "_ZN6S168C53v91Ev");}
void  S168C5 ::v92(){vfunc_called(this, "_ZN6S168C53v92Ev");}
void  S168C5 ::v93(){vfunc_called(this, "_ZN6S168C53v93Ev");}
S168C5 ::S168C5(){ note_ctor("S168C5", this);} // tgen

static void Test_S168C5()
{
  extern Class_Descriptor cd_S168C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S168C5, buf);
    S168C5 *dp, &lv = *(dp=new (buf) S168C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S168C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S168C5)");
    check_base_class_offset(lv, (S168C6*), 0, "S168C5");
    check_field_offset(lv, s168c5f0, ABISELECT(96,60), "S168C5.s168c5f0");
    check_field_offset(lv, s168c5f1, ABISELECT(104,64), "S168C5.s168c5f1");
    check_field_offset(lv, s168c5f2, ABISELECT(120,76), "S168C5.s168c5f2");
    check_field_offset(lv, s168c5f3, ABISELECT(128,84), "S168C5.s168c5f3");
    check_field_offset(lv, s168c5f4, ABISELECT(144,96), "S168C5.s168c5f4");
    check_field_offset(lv, s168c5f5, ABISELECT(176,128), "S168C5.s168c5f5");
    set_bf_and_test(lv, s168c5f6, ABISELECT(180,132), 0, 1, 1, "S168C5");
    set_bf_and_test(lv, s168c5f7, ABISELECT(180,132), 1, 1, 1, "S168C5");
    set_bf_and_test(lv, s168c5f8, ABISELECT(180,132), 2, 1, 1, "S168C5");
    set_bf_and_test(lv, s168c5f9, ABISELECT(180,132), 3, 1, 1, "S168C5");
    check_field_offset(lv, s168c5f10, ABISELECT(184,136), "S168C5.s168c5f10");
    test_class_info(&lv, &cd_S168C5);
    dp->~S168C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS168C5(Test_S168C5, "S168C5", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S168C5C1Ev();
extern void _ZN6S168C5D1Ev();
Name_Map name_map_S168C5[] = {
  NSPAIR(_ZN6S168C5C1Ev),
  NSPAIR(_ZN6S168C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S168C6;
extern VTBL_ENTRY _ZTI6S168C6[];
extern  VTBL_ENTRY _ZTV6S168C6[];
static Base_Class bases_S168C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S168C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S168C5[];
extern void _ZN6S168C5D1Ev();
extern void _ZN6S168C5D0Ev();
extern void _ZN6S168C62v3Ev();
extern void _ZN6S168C62v4Ev();
extern void _ZN6S168C62v5Ev();
extern void _ZN6S168C62v6Ev();
extern void _ZN6S168C62v7Ev();
extern void _ZN6S168C62v8Ev();
extern void _ZN6S168C62v9Ev();
extern void _ZN6S168C63v10Ev();
extern void _ZN6S168C63v11Ev();
extern void _ZN6S168C63v12Ev();
extern void _ZN6S168C63v13Ev();
extern void _ZN6S168C63v14Ev();
extern void _ZN6S168C63v15Ev();
extern void _ZN6S168C63v16Ev();
extern void _ZN6S168C63v17Ev();
extern void _ZN6S168C63v18Ev();
extern void _ZN6S168C63v19Ev();
extern void _ZN6S168C63v20Ev();
extern void _ZN6S168C63v21Ev();
extern void _ZN6S168C63v22Ev();
extern void _ZN6S168C63v23Ev();
extern void _ZN6S168C63v24Ev();
extern void _ZN6S168C63v25Ev();
extern void _ZN6S168C63v26Ev();
extern void _ZN6S168C63v27Ev();
extern void _ZN6S168C63v28Ev();
extern void _ZN6S168C63v29Ev();
extern void _ZN6S168C63v30Ev();
extern void _ZN6S168C63v31Ev();
extern void _ZN6S168C63v32Ev();
extern void _ZN6S168C63v33Ev();
extern void _ZN6S168C63v34Ev();
extern void _ZN6S168C63v35Ev();
extern void _ZN6S168C63v36Ev();
extern void _ZN6S168C63v37Ev();
extern void _ZN6S168C63v38Ev();
extern void _ZN6S168C63v39Ev();
extern void _ZN6S168C63v40Ev();
extern void _ZN6S168C63v41Ev();
extern void _ZN6S168C63v42Ev();
extern void _ZN6S168C63v43Ev();
extern void _ZN6S168C63v44Ev();
extern void _ZN6S168C63v45Ev();
extern void _ZN6S168C63v46Ev();
extern void _ZN6S168C63v47Ev();
extern void _ZN6S168C63v48Ev();
extern void _ZN6S168C63v49Ev();
extern void _ZN6S168C63v50Ev();
extern void _ZN6S168C63v51Ev();
extern void _ZN6S168C63v52Ev();
extern void _ZN6S168C63v53Ev();
extern void _ZN6S168C63v54Ev();
extern void _ZN6S168C63v55Ev();
extern void _ZN6S168C63v56Ev();
extern void _ZN6S168C63v57Ev();
extern void _ZN6S168C63v58Ev();
extern void _ZN6S168C63v59Ev();
extern void _ZN6S168C63v60Ev();
extern void _ZN6S168C63v61Ev();
extern void _ZN6S168C63v62Ev();
extern void _ZN6S168C63v63Ev();
extern void _ZN6S168C63v64Ev();
extern void _ZN6S168C63v65Ev();
extern void _ZN6S168C63v66Ev();
extern void _ZN6S168C53v67Ev();
extern void _ZN6S168C53v68Ev();
extern void _ZN6S168C53v69Ev();
extern void _ZN6S168C53v70Ev();
extern void _ZN6S168C53v71Ev();
extern void _ZN6S168C53v72Ev();
extern void _ZN6S168C53v73Ev();
extern void _ZN6S168C53v74Ev();
extern void _ZN6S168C53v75Ev();
extern void _ZN6S168C53v76Ev();
extern void _ZN6S168C53v77Ev();
extern void _ZN6S168C53v78Ev();
extern void _ZN6S168C53v79Ev();
extern void _ZN6S168C53v80Ev();
extern void _ZN6S168C53v81Ev();
extern void _ZN6S168C53v82Ev();
extern void _ZN6S168C53v83Ev();
extern void _ZN6S168C53v84Ev();
extern void _ZN6S168C53v85Ev();
extern void _ZN6S168C53v86Ev();
extern void _ZN6S168C53v87Ev();
extern void _ZN6S168C53v88Ev();
extern void _ZN6S168C53v89Ev();
extern void _ZN6S168C53v90Ev();
extern void _ZN6S168C53v91Ev();
extern void _ZN6S168C53v92Ev();
extern void _ZN6S168C53v93Ev();
static  VTBL_ENTRY vtc_S168C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S168C5[0]),
  (VTBL_ENTRY)&_ZN6S168C5D1Ev,
  (VTBL_ENTRY)&_ZN6S168C5D0Ev,
  (VTBL_ENTRY)&_ZN6S168C62v3Ev,
  (VTBL_ENTRY)&_ZN6S168C62v4Ev,
  (VTBL_ENTRY)&_ZN6S168C62v5Ev,
  (VTBL_ENTRY)&_ZN6S168C62v6Ev,
  (VTBL_ENTRY)&_ZN6S168C62v7Ev,
  (VTBL_ENTRY)&_ZN6S168C62v8Ev,
  (VTBL_ENTRY)&_ZN6S168C62v9Ev,
  (VTBL_ENTRY)&_ZN6S168C63v10Ev,
  (VTBL_ENTRY)&_ZN6S168C63v11Ev,
  (VTBL_ENTRY)&_ZN6S168C63v12Ev,
  (VTBL_ENTRY)&_ZN6S168C63v13Ev,
  (VTBL_ENTRY)&_ZN6S168C63v14Ev,
  (VTBL_ENTRY)&_ZN6S168C63v15Ev,
  (VTBL_ENTRY)&_ZN6S168C63v16Ev,
  (VTBL_ENTRY)&_ZN6S168C63v17Ev,
  (VTBL_ENTRY)&_ZN6S168C63v18Ev,
  (VTBL_ENTRY)&_ZN6S168C63v19Ev,
  (VTBL_ENTRY)&_ZN6S168C63v20Ev,
  (VTBL_ENTRY)&_ZN6S168C63v21Ev,
  (VTBL_ENTRY)&_ZN6S168C63v22Ev,
  (VTBL_ENTRY)&_ZN6S168C63v23Ev,
  (VTBL_ENTRY)&_ZN6S168C63v24Ev,
  (VTBL_ENTRY)&_ZN6S168C63v25Ev,
  (VTBL_ENTRY)&_ZN6S168C63v26Ev,
  (VTBL_ENTRY)&_ZN6S168C63v27Ev,
  (VTBL_ENTRY)&_ZN6S168C63v28Ev,
  (VTBL_ENTRY)&_ZN6S168C63v29Ev,
  (VTBL_ENTRY)&_ZN6S168C63v30Ev,
  (VTBL_ENTRY)&_ZN6S168C63v31Ev,
  (VTBL_ENTRY)&_ZN6S168C63v32Ev,
  (VTBL_ENTRY)&_ZN6S168C63v33Ev,
  (VTBL_ENTRY)&_ZN6S168C63v34Ev,
  (VTBL_ENTRY)&_ZN6S168C63v35Ev,
  (VTBL_ENTRY)&_ZN6S168C63v36Ev,
  (VTBL_ENTRY)&_ZN6S168C63v37Ev,
  (VTBL_ENTRY)&_ZN6S168C63v38Ev,
  (VTBL_ENTRY)&_ZN6S168C63v39Ev,
  (VTBL_ENTRY)&_ZN6S168C63v40Ev,
  (VTBL_ENTRY)&_ZN6S168C63v41Ev,
  (VTBL_ENTRY)&_ZN6S168C63v42Ev,
  (VTBL_ENTRY)&_ZN6S168C63v43Ev,
  (VTBL_ENTRY)&_ZN6S168C63v44Ev,
  (VTBL_ENTRY)&_ZN6S168C63v45Ev,
  (VTBL_ENTRY)&_ZN6S168C63v46Ev,
  (VTBL_ENTRY)&_ZN6S168C63v47Ev,
  (VTBL_ENTRY)&_ZN6S168C63v48Ev,
  (VTBL_ENTRY)&_ZN6S168C63v49Ev,
  (VTBL_ENTRY)&_ZN6S168C63v50Ev,
  (VTBL_ENTRY)&_ZN6S168C63v51Ev,
  (VTBL_ENTRY)&_ZN6S168C63v52Ev,
  (VTBL_ENTRY)&_ZN6S168C63v53Ev,
  (VTBL_ENTRY)&_ZN6S168C63v54Ev,
  (VTBL_ENTRY)&_ZN6S168C63v55Ev,
  (VTBL_ENTRY)&_ZN6S168C63v56Ev,
  (VTBL_ENTRY)&_ZN6S168C63v57Ev,
  (VTBL_ENTRY)&_ZN6S168C63v58Ev,
  (VTBL_ENTRY)&_ZN6S168C63v59Ev,
  (VTBL_ENTRY)&_ZN6S168C63v60Ev,
  (VTBL_ENTRY)&_ZN6S168C63v61Ev,
  (VTBL_ENTRY)&_ZN6S168C63v62Ev,
  (VTBL_ENTRY)&_ZN6S168C63v63Ev,
  (VTBL_ENTRY)&_ZN6S168C63v64Ev,
  (VTBL_ENTRY)&_ZN6S168C63v65Ev,
  (VTBL_ENTRY)&_ZN6S168C63v66Ev,
  (VTBL_ENTRY)&_ZN6S168C53v67Ev,
  (VTBL_ENTRY)&_ZN6S168C53v68Ev,
  (VTBL_ENTRY)&_ZN6S168C53v69Ev,
  (VTBL_ENTRY)&_ZN6S168C53v70Ev,
  (VTBL_ENTRY)&_ZN6S168C53v71Ev,
  (VTBL_ENTRY)&_ZN6S168C53v72Ev,
  (VTBL_ENTRY)&_ZN6S168C53v73Ev,
  (VTBL_ENTRY)&_ZN6S168C53v74Ev,
  (VTBL_ENTRY)&_ZN6S168C53v75Ev,
  (VTBL_ENTRY)&_ZN6S168C53v76Ev,
  (VTBL_ENTRY)&_ZN6S168C53v77Ev,
  (VTBL_ENTRY)&_ZN6S168C53v78Ev,
  (VTBL_ENTRY)&_ZN6S168C53v79Ev,
  (VTBL_ENTRY)&_ZN6S168C53v80Ev,
  (VTBL_ENTRY)&_ZN6S168C53v81Ev,
  (VTBL_ENTRY)&_ZN6S168C53v82Ev,
  (VTBL_ENTRY)&_ZN6S168C53v83Ev,
  (VTBL_ENTRY)&_ZN6S168C53v84Ev,
  (VTBL_ENTRY)&_ZN6S168C53v85Ev,
  (VTBL_ENTRY)&_ZN6S168C53v86Ev,
  (VTBL_ENTRY)&_ZN6S168C53v87Ev,
  (VTBL_ENTRY)&_ZN6S168C53v88Ev,
  (VTBL_ENTRY)&_ZN6S168C53v89Ev,
  (VTBL_ENTRY)&_ZN6S168C53v90Ev,
  (VTBL_ENTRY)&_ZN6S168C53v91Ev,
  (VTBL_ENTRY)&_ZN6S168C53v92Ev,
  (VTBL_ENTRY)&_ZN6S168C53v93Ev,
};
extern VTBL_ENTRY _ZTI6S168C5[];
extern  VTBL_ENTRY _ZTV6S168C5[];
Class_Descriptor cd_S168C5 = {  "S168C5", // class name
  bases_S168C5, 1,
  &(vtc_S168C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S168C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S168C5),95, //virtual function table var
  2, // 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  S168C4  : S168C5 {
  ::S615C22_nt s168c4f0;
  unsigned int s168c4f1:1;
  virtual  ~S168C4(); // _ZN6S168C4D1Ev
  virtual void  v94(); // _ZN6S168C43v94Ev
  virtual void  v95(); // _ZN6S168C43v95Ev
  virtual void  v96(); // _ZN6S168C43v96Ev
  virtual void  v97(); // _ZN6S168C43v97Ev
  virtual void  v98(); // _ZN6S168C43v98Ev
  virtual void  v99(); // _ZN6S168C43v99Ev
  virtual void  v100(); // _ZN6S168C44v100Ev
  virtual void  v101(); // _ZN6S168C44v101Ev
  virtual void  v102(); // _ZN6S168C44v102Ev
  virtual void  v103(); // _ZN6S168C44v103Ev
  virtual void  v104(); // _ZN6S168C44v104Ev
  virtual void  v105(); // _ZN6S168C44v105Ev
  virtual void  v106(); // _ZN6S168C44v106Ev
  virtual void  v107(); // _ZN6S168C44v107Ev
  virtual void  v108(); // _ZN6S168C44v108Ev
  virtual void  v109(); // _ZN6S168C44v109Ev
  virtual void  v110(); // _ZN6S168C44v110Ev
  virtual void  v111(); // _ZN6S168C44v111Ev
  S168C4(); // tgen
};
//SIG(-1 S168C4) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S168C4 ::~S168C4(){ note_dtor("S168C4", this);}
void  S168C4 ::v94(){vfunc_called(this, "_ZN6S168C43v94Ev");}
void  S168C4 ::v95(){vfunc_called(this, "_ZN6S168C43v95Ev");}
void  S168C4 ::v96(){vfunc_called(this, "_ZN6S168C43v96Ev");}
void  S168C4 ::v97(){vfunc_called(this, "_ZN6S168C43v97Ev");}
void  S168C4 ::v98(){vfunc_called(this, "_ZN6S168C43v98Ev");}
void  S168C4 ::v99(){vfunc_called(this, "_ZN6S168C43v99Ev");}
void  S168C4 ::v100(){vfunc_called(this, "_ZN6S168C44v100Ev");}
void  S168C4 ::v101(){vfunc_called(this, "_ZN6S168C44v101Ev");}
void  S168C4 ::v102(){vfunc_called(this, "_ZN6S168C44v102Ev");}
void  S168C4 ::v103(){vfunc_called(this, "_ZN6S168C44v103Ev");}
void  S168C4 ::v104(){vfunc_called(this, "_ZN6S168C44v104Ev");}
void  S168C4 ::v105(){vfunc_called(this, "_ZN6S168C44v105Ev");}
void  S168C4 ::v106(){vfunc_called(this, "_ZN6S168C44v106Ev");}
void  S168C4 ::v107(){vfunc_called(this, "_ZN6S168C44v107Ev");}
void  S168C4 ::v108(){vfunc_called(this, "_ZN6S168C44v108Ev");}
void  S168C4 ::v109(){vfunc_called(this, "_ZN6S168C44v109Ev");}
void  S168C4 ::v110(){vfunc_called(this, "_ZN6S168C44v110Ev");}
void  S168C4 ::v111(){vfunc_called(this, "_ZN6S168C44v111Ev");}
S168C4 ::S168C4(){ note_ctor("S168C4", this);} // tgen

static void Test_S168C4()
{
  extern Class_Descriptor cd_S168C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S168C4, buf);
    S168C4 *dp, &lv = *(dp=new (buf) S168C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S168C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S168C4)");
    check_base_class_offset(lv, (S168C6*)(S168C5*), 0, "S168C4");
    check_base_class_offset(lv, (S168C5*), 0, "S168C4");
    check_field_offset(lv, s168c4f0, ABISELECT(232,180), "S168C4.s168c4f0");
    set_bf_and_test(lv, s168c4f1, ABISELECT(248,192), 0, 1, 1, "S168C4");
    test_class_info(&lv, &cd_S168C4);
    dp->~S168C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS168C4(Test_S168C4, "S168C4", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S168C4C1Ev();
extern void _ZN6S168C4D1Ev();
Name_Map name_map_S168C4[] = {
  NSPAIR(_ZN6S168C4C1Ev),
  NSPAIR(_ZN6S168C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S168C6;
extern VTBL_ENTRY _ZTI6S168C6[];
extern  VTBL_ENTRY _ZTV6S168C6[];
extern Class_Descriptor cd_S168C5;
extern VTBL_ENTRY _ZTI6S168C5[];
extern  VTBL_ENTRY _ZTV6S168C5[];
static Base_Class bases_S168C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S168C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S168C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S168C4[];
extern void _ZN6S168C4D1Ev();
extern void _ZN6S168C4D0Ev();
extern void _ZN6S168C62v3Ev();
extern void _ZN6S168C62v4Ev();
extern void _ZN6S168C62v5Ev();
extern void _ZN6S168C62v6Ev();
extern void _ZN6S168C62v7Ev();
extern void _ZN6S168C62v8Ev();
extern void _ZN6S168C62v9Ev();
extern void _ZN6S168C63v10Ev();
extern void _ZN6S168C63v11Ev();
extern void _ZN6S168C63v12Ev();
extern void _ZN6S168C63v13Ev();
extern void _ZN6S168C63v14Ev();
extern void _ZN6S168C63v15Ev();
extern void _ZN6S168C63v16Ev();
extern void _ZN6S168C63v17Ev();
extern void _ZN6S168C63v18Ev();
extern void _ZN6S168C63v19Ev();
extern void _ZN6S168C63v20Ev();
extern void _ZN6S168C63v21Ev();
extern void _ZN6S168C63v22Ev();
extern void _ZN6S168C63v23Ev();
extern void _ZN6S168C63v24Ev();
extern void _ZN6S168C63v25Ev();
extern void _ZN6S168C63v26Ev();
extern void _ZN6S168C63v27Ev();
extern void _ZN6S168C63v28Ev();
extern void _ZN6S168C63v29Ev();
extern void _ZN6S168C63v30Ev();
extern void _ZN6S168C63v31Ev();
extern void _ZN6S168C63v32Ev();
extern void _ZN6S168C63v33Ev();
extern void _ZN6S168C63v34Ev();
extern void _ZN6S168C63v35Ev();
extern void _ZN6S168C63v36Ev();
extern void _ZN6S168C63v37Ev();
extern void _ZN6S168C63v38Ev();
extern void _ZN6S168C63v39Ev();
extern void _ZN6S168C63v40Ev();
extern void _ZN6S168C63v41Ev();
extern void _ZN6S168C63v42Ev();
extern void _ZN6S168C63v43Ev();
extern void _ZN6S168C63v44Ev();
extern void _ZN6S168C63v45Ev();
extern void _ZN6S168C63v46Ev();
extern void _ZN6S168C63v47Ev();
extern void _ZN6S168C63v48Ev();
extern void _ZN6S168C63v49Ev();
extern void _ZN6S168C63v50Ev();
extern void _ZN6S168C63v51Ev();
extern void _ZN6S168C63v52Ev();
extern void _ZN6S168C63v53Ev();
extern void _ZN6S168C63v54Ev();
extern void _ZN6S168C63v55Ev();
extern void _ZN6S168C63v56Ev();
extern void _ZN6S168C63v57Ev();
extern void _ZN6S168C63v58Ev();
extern void _ZN6S168C63v59Ev();
extern void _ZN6S168C63v60Ev();
extern void _ZN6S168C63v61Ev();
extern void _ZN6S168C63v62Ev();
extern void _ZN6S168C63v63Ev();
extern void _ZN6S168C63v64Ev();
extern void _ZN6S168C63v65Ev();
extern void _ZN6S168C63v66Ev();
extern void _ZN6S168C53v67Ev();
extern void _ZN6S168C53v68Ev();
extern void _ZN6S168C53v69Ev();
extern void _ZN6S168C53v70Ev();
extern void _ZN6S168C53v71Ev();
extern void _ZN6S168C53v72Ev();
extern void _ZN6S168C53v73Ev();
extern void _ZN6S168C53v74Ev();
extern void _ZN6S168C53v75Ev();
extern void _ZN6S168C53v76Ev();
extern void _ZN6S168C53v77Ev();
extern void _ZN6S168C53v78Ev();
extern void _ZN6S168C53v79Ev();
extern void _ZN6S168C53v80Ev();
extern void _ZN6S168C53v81Ev();
extern void _ZN6S168C53v82Ev();
extern void _ZN6S168C53v83Ev();
extern void _ZN6S168C53v84Ev();
extern void _ZN6S168C53v85Ev();
extern void _ZN6S168C53v86Ev();
extern void _ZN6S168C53v87Ev();
extern void _ZN6S168C53v88Ev();
extern void _ZN6S168C53v89Ev();
extern void _ZN6S168C53v90Ev();
extern void _ZN6S168C53v91Ev();
extern void _ZN6S168C53v92Ev();
extern void _ZN6S168C53v93Ev();
extern void _ZN6S168C43v94Ev();
extern void _ZN6S168C43v95Ev();
extern void _ZN6S168C43v96Ev();
extern void _ZN6S168C43v97Ev();
extern void _ZN6S168C43v98Ev();
extern void _ZN6S168C43v99Ev();
extern void _ZN6S168C44v100Ev();
extern void _ZN6S168C44v101Ev();
extern void _ZN6S168C44v102Ev();
extern void _ZN6S168C44v103Ev();
extern void _ZN6S168C44v104Ev();
extern void _ZN6S168C44v105Ev();
extern void _ZN6S168C44v106Ev();
extern void _ZN6S168C44v107Ev();
extern void _ZN6S168C44v108Ev();
extern void _ZN6S168C44v109Ev();
extern void _ZN6S168C44v110Ev();
extern void _ZN6S168C44v111Ev();
static  VTBL_ENTRY vtc_S168C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S168C4[0]),
  (VTBL_ENTRY)&_ZN6S168C4D1Ev,
  (VTBL_ENTRY)&_ZN6S168C4D0Ev,
  (VTBL_ENTRY)&_ZN6S168C62v3Ev,
  (VTBL_ENTRY)&_ZN6S168C62v4Ev,
  (VTBL_ENTRY)&_ZN6S168C62v5Ev,
  (VTBL_ENTRY)&_ZN6S168C62v6Ev,
  (VTBL_ENTRY)&_ZN6S168C62v7Ev,
  (VTBL_ENTRY)&_ZN6S168C62v8Ev,
  (VTBL_ENTRY)&_ZN6S168C62v9Ev,
  (VTBL_ENTRY)&_ZN6S168C63v10Ev,
  (VTBL_ENTRY)&_ZN6S168C63v11Ev,
  (VTBL_ENTRY)&_ZN6S168C63v12Ev,
  (VTBL_ENTRY)&_ZN6S168C63v13Ev,
  (VTBL_ENTRY)&_ZN6S168C63v14Ev,
  (VTBL_ENTRY)&_ZN6S168C63v15Ev,
  (VTBL_ENTRY)&_ZN6S168C63v16Ev,
  (VTBL_ENTRY)&_ZN6S168C63v17Ev,
  (VTBL_ENTRY)&_ZN6S168C63v18Ev,
  (VTBL_ENTRY)&_ZN6S168C63v19Ev,
  (VTBL_ENTRY)&_ZN6S168C63v20Ev,
  (VTBL_ENTRY)&_ZN6S168C63v21Ev,
  (VTBL_ENTRY)&_ZN6S168C63v22Ev,
  (VTBL_ENTRY)&_ZN6S168C63v23Ev,
  (VTBL_ENTRY)&_ZN6S168C63v24Ev,
  (VTBL_ENTRY)&_ZN6S168C63v25Ev,
  (VTBL_ENTRY)&_ZN6S168C63v26Ev,
  (VTBL_ENTRY)&_ZN6S168C63v27Ev,
  (VTBL_ENTRY)&_ZN6S168C63v28Ev,
  (VTBL_ENTRY)&_ZN6S168C63v29Ev,
  (VTBL_ENTRY)&_ZN6S168C63v30Ev,
  (VTBL_ENTRY)&_ZN6S168C63v31Ev,
  (VTBL_ENTRY)&_ZN6S168C63v32Ev,
  (VTBL_ENTRY)&_ZN6S168C63v33Ev,
  (VTBL_ENTRY)&_ZN6S168C63v34Ev,
  (VTBL_ENTRY)&_ZN6S168C63v35Ev,
  (VTBL_ENTRY)&_ZN6S168C63v36Ev,
  (VTBL_ENTRY)&_ZN6S168C63v37Ev,
  (VTBL_ENTRY)&_ZN6S168C63v38Ev,
  (VTBL_ENTRY)&_ZN6S168C63v39Ev,
  (VTBL_ENTRY)&_ZN6S168C63v40Ev,
  (VTBL_ENTRY)&_ZN6S168C63v41Ev,
  (VTBL_ENTRY)&_ZN6S168C63v42Ev,
  (VTBL_ENTRY)&_ZN6S168C63v43Ev,
  (VTBL_ENTRY)&_ZN6S168C63v44Ev,
  (VTBL_ENTRY)&_ZN6S168C63v45Ev,
  (VTBL_ENTRY)&_ZN6S168C63v46Ev,
  (VTBL_ENTRY)&_ZN6S168C63v47Ev,
  (VTBL_ENTRY)&_ZN6S168C63v48Ev,
  (VTBL_ENTRY)&_ZN6S168C63v49Ev,
  (VTBL_ENTRY)&_ZN6S168C63v50Ev,
  (VTBL_ENTRY)&_ZN6S168C63v51Ev,
  (VTBL_ENTRY)&_ZN6S168C63v52Ev,
  (VTBL_ENTRY)&_ZN6S168C63v53Ev,
  (VTBL_ENTRY)&_ZN6S168C63v54Ev,
  (VTBL_ENTRY)&_ZN6S168C63v55Ev,
  (VTBL_ENTRY)&_ZN6S168C63v56Ev,
  (VTBL_ENTRY)&_ZN6S168C63v57Ev,
  (VTBL_ENTRY)&_ZN6S168C63v58Ev,
  (VTBL_ENTRY)&_ZN6S168C63v59Ev,
  (VTBL_ENTRY)&_ZN6S168C63v60Ev,
  (VTBL_ENTRY)&_ZN6S168C63v61Ev,
  (VTBL_ENTRY)&_ZN6S168C63v62Ev,
  (VTBL_ENTRY)&_ZN6S168C63v63Ev,
  (VTBL_ENTRY)&_ZN6S168C63v64Ev,
  (VTBL_ENTRY)&_ZN6S168C63v65Ev,
  (VTBL_ENTRY)&_ZN6S168C63v66Ev,
  (VTBL_ENTRY)&_ZN6S168C53v67Ev,
  (VTBL_ENTRY)&_ZN6S168C53v68Ev,
  (VTBL_ENTRY)&_ZN6S168C53v69Ev,
  (VTBL_ENTRY)&_ZN6S168C53v70Ev,
  (VTBL_ENTRY)&_ZN6S168C53v71Ev,
  (VTBL_ENTRY)&_ZN6S168C53v72Ev,
  (VTBL_ENTRY)&_ZN6S168C53v73Ev,
  (VTBL_ENTRY)&_ZN6S168C53v74Ev,
  (VTBL_ENTRY)&_ZN6S168C53v75Ev,
  (VTBL_ENTRY)&_ZN6S168C53v76Ev,
  (VTBL_ENTRY)&_ZN6S168C53v77Ev,
  (VTBL_ENTRY)&_ZN6S168C53v78Ev,
  (VTBL_ENTRY)&_ZN6S168C53v79Ev,
  (VTBL_ENTRY)&_ZN6S168C53v80Ev,
  (VTBL_ENTRY)&_ZN6S168C53v81Ev,
  (VTBL_ENTRY)&_ZN6S168C53v82Ev,
  (VTBL_ENTRY)&_ZN6S168C53v83Ev,
  (VTBL_ENTRY)&_ZN6S168C53v84Ev,
  (VTBL_ENTRY)&_ZN6S168C53v85Ev,
  (VTBL_ENTRY)&_ZN6S168C53v86Ev,
  (VTBL_ENTRY)&_ZN6S168C53v87Ev,
  (VTBL_ENTRY)&_ZN6S168C53v88Ev,
  (VTBL_ENTRY)&_ZN6S168C53v89Ev,
  (VTBL_ENTRY)&_ZN6S168C53v90Ev,
  (VTBL_ENTRY)&_ZN6S168C53v91Ev,
  (VTBL_ENTRY)&_ZN6S168C53v92Ev,
  (VTBL_ENTRY)&_ZN6S168C53v93Ev,
  (VTBL_ENTRY)&_ZN6S168C43v94Ev,
  (VTBL_ENTRY)&_ZN6S168C43v95Ev,
  (VTBL_ENTRY)&_ZN6S168C43v96Ev,
  (VTBL_ENTRY)&_ZN6S168C43v97Ev,
  (VTBL_ENTRY)&_ZN6S168C43v98Ev,
  (VTBL_ENTRY)&_ZN6S168C43v99Ev,
  (VTBL_ENTRY)&_ZN6S168C44v100Ev,
  (VTBL_ENTRY)&_ZN6S168C44v101Ev,
  (VTBL_ENTRY)&_ZN6S168C44v102Ev,
  (VTBL_ENTRY)&_ZN6S168C44v103Ev,
  (VTBL_ENTRY)&_ZN6S168C44v104Ev,
  (VTBL_ENTRY)&_ZN6S168C44v105Ev,
  (VTBL_ENTRY)&_ZN6S168C44v106Ev,
  (VTBL_ENTRY)&_ZN6S168C44v107Ev,
  (VTBL_ENTRY)&_ZN6S168C44v108Ev,
  (VTBL_ENTRY)&_ZN6S168C44v109Ev,
  (VTBL_ENTRY)&_ZN6S168C44v110Ev,
  (VTBL_ENTRY)&_ZN6S168C44v111Ev,
};
extern VTBL_ENTRY _ZTI6S168C4[];
extern  VTBL_ENTRY _ZTV6S168C4[];
Class_Descriptor cd_S168C4 = {  "S168C4", // class name
  bases_S168C4, 2,
  &(vtc_S168C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S168C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S168C4),113, //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  S168C3  : S168C4 {
  int s168c3f0[3];
  virtual  ~S168C3(); // _ZN6S168C3D1Ev
  virtual void  v112(); // _ZN6S168C34v112Ev
  virtual void  v113(); // _ZN6S168C34v113Ev
  virtual void  v114(); // _ZN6S168C34v114Ev
  virtual void  v115(); // _ZN6S168C34v115Ev
  virtual void  v116(); // _ZN6S168C34v116Ev
  virtual void  v117(); // _ZN6S168C34v117Ev
  virtual void  v118(); // _ZN6S168C34v118Ev
  S168C3(); // tgen
};
//SIG(-1 S168C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 Fi[3]}


 S168C3 ::~S168C3(){ note_dtor("S168C3", this);}
void  S168C3 ::v112(){vfunc_called(this, "_ZN6S168C34v112Ev");}
void  S168C3 ::v113(){vfunc_called(this, "_ZN6S168C34v113Ev");}
void  S168C3 ::v114(){vfunc_called(this, "_ZN6S168C34v114Ev");}
void  S168C3 ::v115(){vfunc_called(this, "_ZN6S168C34v115Ev");}
void  S168C3 ::v116(){vfunc_called(this, "_ZN6S168C34v116Ev");}
void  S168C3 ::v117(){vfunc_called(this, "_ZN6S168C34v117Ev");}
void  S168C3 ::v118(){vfunc_called(this, "_ZN6S168C34v118Ev");}
S168C3 ::S168C3(){ note_ctor("S168C3", this);} // tgen

static void Test_S168C3()
{
  extern Class_Descriptor cd_S168C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,53)];
    init_test(&cd_S168C3, buf);
    S168C3 *dp, &lv = *(dp=new (buf) S168C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,208), "sizeof(S168C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S168C3)");
    check_base_class_offset(lv, (S168C6*)(S168C5*)(S168C4*), 0, "S168C3");
    check_base_class_offset(lv, (S168C5*)(S168C4*), 0, "S168C3");
    check_base_class_offset(lv, (S168C4*), 0, "S168C3");
    check_field_offset(lv, s168c3f0, ABISELECT(252,196), "S168C3.s168c3f0");
    test_class_info(&lv, &cd_S168C3);
    dp->~S168C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS168C3(Test_S168C3, "S168C3", ABISELECT(264,208));

#else // __cplusplus

extern void _ZN6S168C3C1Ev();
extern void _ZN6S168C3D1Ev();
Name_Map name_map_S168C3[] = {
  NSPAIR(_ZN6S168C3C1Ev),
  NSPAIR(_ZN6S168C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S168C6;
extern VTBL_ENTRY _ZTI6S168C6[];
extern  VTBL_ENTRY _ZTV6S168C6[];
extern Class_Descriptor cd_S168C5;
extern VTBL_ENTRY _ZTI6S168C5[];
extern  VTBL_ENTRY _ZTV6S168C5[];
extern Class_Descriptor cd_S168C4;
extern VTBL_ENTRY _ZTI6S168C4[];
extern  VTBL_ENTRY _ZTV6S168C4[];
static Base_Class bases_S168C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S168C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S168C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S168C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S168C3[];
extern void _ZN6S168C3D1Ev();
extern void _ZN6S168C3D0Ev();
extern void _ZN6S168C62v3Ev();
extern void _ZN6S168C62v4Ev();
extern void _ZN6S168C62v5Ev();
extern void _ZN6S168C62v6Ev();
extern void _ZN6S168C62v7Ev();
extern void _ZN6S168C62v8Ev();
extern void _ZN6S168C62v9Ev();
extern void _ZN6S168C63v10Ev();
extern void _ZN6S168C63v11Ev();
extern void _ZN6S168C63v12Ev();
extern void _ZN6S168C63v13Ev();
extern void _ZN6S168C63v14Ev();
extern void _ZN6S168C63v15Ev();
extern void _ZN6S168C63v16Ev();
extern void _ZN6S168C63v17Ev();
extern void _ZN6S168C63v18Ev();
extern void _ZN6S168C63v19Ev();
extern void _ZN6S168C63v20Ev();
extern void _ZN6S168C63v21Ev();
extern void _ZN6S168C63v22Ev();
extern void _ZN6S168C63v23Ev();
extern void _ZN6S168C63v24Ev();
extern void _ZN6S168C63v25Ev();
extern void _ZN6S168C63v26Ev();
extern void _ZN6S168C63v27Ev();
extern void _ZN6S168C63v28Ev();
extern void _ZN6S168C63v29Ev();
extern void _ZN6S168C63v30Ev();
extern void _ZN6S168C63v31Ev();
extern void _ZN6S168C63v32Ev();
extern void _ZN6S168C63v33Ev();
extern void _ZN6S168C63v34Ev();
extern void _ZN6S168C63v35Ev();
extern void _ZN6S168C63v36Ev();
extern void _ZN6S168C63v37Ev();
extern void _ZN6S168C63v38Ev();
extern void _ZN6S168C63v39Ev();
extern void _ZN6S168C63v40Ev();
extern void _ZN6S168C63v41Ev();
extern void _ZN6S168C63v42Ev();
extern void _ZN6S168C63v43Ev();
extern void _ZN6S168C63v44Ev();
extern void _ZN6S168C63v45Ev();
extern void _ZN6S168C63v46Ev();
extern void _ZN6S168C63v47Ev();
extern void _ZN6S168C63v48Ev();
extern void _ZN6S168C63v49Ev();
extern void _ZN6S168C63v50Ev();
extern void _ZN6S168C63v51Ev();
extern void _ZN6S168C63v52Ev();
extern void _ZN6S168C63v53Ev();
extern void _ZN6S168C63v54Ev();
extern void _ZN6S168C63v55Ev();
extern void _ZN6S168C63v56Ev();
extern void _ZN6S168C63v57Ev();
extern void _ZN6S168C63v58Ev();
extern void _ZN6S168C63v59Ev();
extern void _ZN6S168C63v60Ev();
extern void _ZN6S168C63v61Ev();
extern void _ZN6S168C63v62Ev();
extern void _ZN6S168C63v63Ev();
extern void _ZN6S168C63v64Ev();
extern void _ZN6S168C63v65Ev();
extern void _ZN6S168C63v66Ev();
extern void _ZN6S168C53v67Ev();
extern void _ZN6S168C53v68Ev();
extern void _ZN6S168C53v69Ev();
extern void _ZN6S168C53v70Ev();
extern void _ZN6S168C53v71Ev();
extern void _ZN6S168C53v72Ev();
extern void _ZN6S168C53v73Ev();
extern void _ZN6S168C53v74Ev();
extern void _ZN6S168C53v75Ev();
extern void _ZN6S168C53v76Ev();
extern void _ZN6S168C53v77Ev();
extern void _ZN6S168C53v78Ev();
extern void _ZN6S168C53v79Ev();
extern void _ZN6S168C53v80Ev();
extern void _ZN6S168C53v81Ev();
extern void _ZN6S168C53v82Ev();
extern void _ZN6S168C53v83Ev();
extern void _ZN6S168C53v84Ev();
extern void _ZN6S168C53v85Ev();
extern void _ZN6S168C53v86Ev();
extern void _ZN6S168C53v87Ev();
extern void _ZN6S168C53v88Ev();
extern void _ZN6S168C53v89Ev();
extern void _ZN6S168C53v90Ev();
extern void _ZN6S168C53v91Ev();
extern void _ZN6S168C53v92Ev();
extern void _ZN6S168C53v93Ev();
extern void _ZN6S168C43v94Ev();
extern void _ZN6S168C43v95Ev();
extern void _ZN6S168C43v96Ev();
extern void _ZN6S168C43v97Ev();
extern void _ZN6S168C43v98Ev();
extern void _ZN6S168C43v99Ev();
extern void _ZN6S168C44v100Ev();
extern void _ZN6S168C44v101Ev();
extern void _ZN6S168C44v102Ev();
extern void _ZN6S168C44v103Ev();
extern void _ZN6S168C44v104Ev();
extern void _ZN6S168C44v105Ev();
extern void _ZN6S168C44v106Ev();
extern void _ZN6S168C44v107Ev();
extern void _ZN6S168C44v108Ev();
extern void _ZN6S168C44v109Ev();
extern void _ZN6S168C44v110Ev();
extern void _ZN6S168C44v111Ev();
extern void _ZN6S168C34v112Ev();
extern void _ZN6S168C34v113Ev();
extern void _ZN6S168C34v114Ev();
extern void _ZN6S168C34v115Ev();
extern void _ZN6S168C34v116Ev();
extern void _ZN6S168C34v117Ev();
extern void _ZN6S168C34v118Ev();
static  VTBL_ENTRY vtc_S168C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S168C3[0]),
  (VTBL_ENTRY)&_ZN6S168C3D1Ev,
  (VTBL_ENTRY)&_ZN6S168C3D0Ev,
  (VTBL_ENTRY)&_ZN6S168C62v3Ev,
  (VTBL_ENTRY)&_ZN6S168C62v4Ev,
  (VTBL_ENTRY)&_ZN6S168C62v5Ev,
  (VTBL_ENTRY)&_ZN6S168C62v6Ev,
  (VTBL_ENTRY)&_ZN6S168C62v7Ev,
  (VTBL_ENTRY)&_ZN6S168C62v8Ev,
  (VTBL_ENTRY)&_ZN6S168C62v9Ev,
  (VTBL_ENTRY)&_ZN6S168C63v10Ev,
  (VTBL_ENTRY)&_ZN6S168C63v11Ev,
  (VTBL_ENTRY)&_ZN6S168C63v12Ev,
  (VTBL_ENTRY)&_ZN6S168C63v13Ev,
  (VTBL_ENTRY)&_ZN6S168C63v14Ev,
  (VTBL_ENTRY)&_ZN6S168C63v15Ev,
  (VTBL_ENTRY)&_ZN6S168C63v16Ev,
  (VTBL_ENTRY)&_ZN6S168C63v17Ev,
  (VTBL_ENTRY)&_ZN6S168C63v18Ev,
  (VTBL_ENTRY)&_ZN6S168C63v19Ev,
  (VTBL_ENTRY)&_ZN6S168C63v20Ev,
  (VTBL_ENTRY)&_ZN6S168C63v21Ev,
  (VTBL_ENTRY)&_ZN6S168C63v22Ev,
  (VTBL_ENTRY)&_ZN6S168C63v23Ev,
  (VTBL_ENTRY)&_ZN6S168C63v24Ev,
  (VTBL_ENTRY)&_ZN6S168C63v25Ev,
  (VTBL_ENTRY)&_ZN6S168C63v26Ev,
  (VTBL_ENTRY)&_ZN6S168C63v27Ev,
  (VTBL_ENTRY)&_ZN6S168C63v28Ev,
  (VTBL_ENTRY)&_ZN6S168C63v29Ev,
  (VTBL_ENTRY)&_ZN6S168C63v30Ev,
  (VTBL_ENTRY)&_ZN6S168C63v31Ev,
  (VTBL_ENTRY)&_ZN6S168C63v32Ev,
  (VTBL_ENTRY)&_ZN6S168C63v33Ev,
  (VTBL_ENTRY)&_ZN6S168C63v34Ev,
  (VTBL_ENTRY)&_ZN6S168C63v35Ev,
  (VTBL_ENTRY)&_ZN6S168C63v36Ev,
  (VTBL_ENTRY)&_ZN6S168C63v37Ev,
  (VTBL_ENTRY)&_ZN6S168C63v38Ev,
  (VTBL_ENTRY)&_ZN6S168C63v39Ev,
  (VTBL_ENTRY)&_ZN6S168C63v40Ev,
  (VTBL_ENTRY)&_ZN6S168C63v41Ev,
  (VTBL_ENTRY)&_ZN6S168C63v42Ev,
  (VTBL_ENTRY)&_ZN6S168C63v43Ev,
  (VTBL_ENTRY)&_ZN6S168C63v44Ev,
  (VTBL_ENTRY)&_ZN6S168C63v45Ev,
  (VTBL_ENTRY)&_ZN6S168C63v46Ev,
  (VTBL_ENTRY)&_ZN6S168C63v47Ev,
  (VTBL_ENTRY)&_ZN6S168C63v48Ev,
  (VTBL_ENTRY)&_ZN6S168C63v49Ev,
  (VTBL_ENTRY)&_ZN6S168C63v50Ev,
  (VTBL_ENTRY)&_ZN6S168C63v51Ev,
  (VTBL_ENTRY)&_ZN6S168C63v52Ev,
  (VTBL_ENTRY)&_ZN6S168C63v53Ev,
  (VTBL_ENTRY)&_ZN6S168C63v54Ev,
  (VTBL_ENTRY)&_ZN6S168C63v55Ev,
  (VTBL_ENTRY)&_ZN6S168C63v56Ev,
  (VTBL_ENTRY)&_ZN6S168C63v57Ev,
  (VTBL_ENTRY)&_ZN6S168C63v58Ev,
  (VTBL_ENTRY)&_ZN6S168C63v59Ev,
  (VTBL_ENTRY)&_ZN6S168C63v60Ev,
  (VTBL_ENTRY)&_ZN6S168C63v61Ev,
  (VTBL_ENTRY)&_ZN6S168C63v62Ev,
  (VTBL_ENTRY)&_ZN6S168C63v63Ev,
  (VTBL_ENTRY)&_ZN6S168C63v64Ev,
  (VTBL_ENTRY)&_ZN6S168C63v65Ev,
  (VTBL_ENTRY)&_ZN6S168C63v66Ev,
  (VTBL_ENTRY)&_ZN6S168C53v67Ev,
  (VTBL_ENTRY)&_ZN6S168C53v68Ev,
  (VTBL_ENTRY)&_ZN6S168C53v69Ev,
  (VTBL_ENTRY)&_ZN6S168C53v70Ev,
  (VTBL_ENTRY)&_ZN6S168C53v71Ev,
  (VTBL_ENTRY)&_ZN6S168C53v72Ev,
  (VTBL_ENTRY)&_ZN6S168C53v73Ev,
  (VTBL_ENTRY)&_ZN6S168C53v74Ev,
  (VTBL_ENTRY)&_ZN6S168C53v75Ev,
  (VTBL_ENTRY)&_ZN6S168C53v76Ev,
  (VTBL_ENTRY)&_ZN6S168C53v77Ev,
  (VTBL_ENTRY)&_ZN6S168C53v78Ev,
  (VTBL_ENTRY)&_ZN6S168C53v79Ev,
  (VTBL_ENTRY)&_ZN6S168C53v80Ev,
  (VTBL_ENTRY)&_ZN6S168C53v81Ev,
  (VTBL_ENTRY)&_ZN6S168C53v82Ev,
  (VTBL_ENTRY)&_ZN6S168C53v83Ev,
  (VTBL_ENTRY)&_ZN6S168C53v84Ev,
  (VTBL_ENTRY)&_ZN6S168C53v85Ev,
  (VTBL_ENTRY)&_ZN6S168C53v86Ev,
  (VTBL_ENTRY)&_ZN6S168C53v87Ev,
  (VTBL_ENTRY)&_ZN6S168C53v88Ev,
  (VTBL_ENTRY)&_ZN6S168C53v89Ev,
  (VTBL_ENTRY)&_ZN6S168C53v90Ev,
  (VTBL_ENTRY)&_ZN6S168C53v91Ev,
  (VTBL_ENTRY)&_ZN6S168C53v92Ev,
  (VTBL_ENTRY)&_ZN6S168C53v93Ev,
  (VTBL_ENTRY)&_ZN6S168C43v94Ev,
  (VTBL_ENTRY)&_ZN6S168C43v95Ev,
  (VTBL_ENTRY)&_ZN6S168C43v96Ev,
  (VTBL_ENTRY)&_ZN6S168C43v97Ev,
  (VTBL_ENTRY)&_ZN6S168C43v98Ev,
  (VTBL_ENTRY)&_ZN6S168C43v99Ev,
  (VTBL_ENTRY)&_ZN6S168C44v100Ev,
  (VTBL_ENTRY)&_ZN6S168C44v101Ev,
  (VTBL_ENTRY)&_ZN6S168C44v102Ev,
  (VTBL_ENTRY)&_ZN6S168C44v103Ev,
  (VTBL_ENTRY)&_ZN6S168C44v104Ev,
  (VTBL_ENTRY)&_ZN6S168C44v105Ev,
  (VTBL_ENTRY)&_ZN6S168C44v106Ev,
  (VTBL_ENTRY)&_ZN6S168C44v107Ev,
  (VTBL_ENTRY)&_ZN6S168C44v108Ev,
  (VTBL_ENTRY)&_ZN6S168C44v109Ev,
  (VTBL_ENTRY)&_ZN6S168C44v110Ev,
  (VTBL_ENTRY)&_ZN6S168C44v111Ev,
  (VTBL_ENTRY)&_ZN6S168C34v112Ev,
  (VTBL_ENTRY)&_ZN6S168C34v113Ev,
  (VTBL_ENTRY)&_ZN6S168C34v114Ev,
  (VTBL_ENTRY)&_ZN6S168C34v115Ev,
  (VTBL_ENTRY)&_ZN6S168C34v116Ev,
  (VTBL_ENTRY)&_ZN6S168C34v117Ev,
  (VTBL_ENTRY)&_ZN6S168C34v118Ev,
};
extern VTBL_ENTRY _ZTI6S168C3[];
extern  VTBL_ENTRY _ZTV6S168C3[];
Class_Descriptor cd_S168C3 = {  "S168C3", // class name
  bases_S168C3, 3,
  &(vtc_S168C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,208), // object size
  NSPAIRA(_ZTI6S168C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S168C3),120, //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  S168C2  : S168C3 {
  unsigned int s168c2f0:1;
  ::S165C27 s168c2f1;
  ::S165C25 s168c2f2;
  ::S165C20 s168c2f3;
  virtual  ~S168C2(); // _ZN6S168C2D1Ev
  virtual void  v119(); // _ZN6S168C24v119Ev
  virtual void  v120(); // _ZN6S168C24v120Ev
  virtual void  v121(); // _ZN6S168C24v121Ev
  virtual void  v122(); // _ZN6S168C24v122Ev
  virtual void  v123(); // _ZN6S168C24v123Ev
  virtual void  v124(); // _ZN6S168C24v124Ev
  S168C2(); // tgen
};
//SIG(-1 S168C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v93 v94 v95 v96 v97 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC15{ BC16{ BC9}} Fi:1} vd v116 v117 v118 v119 v120 v121 v122 Fi[3]} vd v1 v2 v3 v4 v5 v6 Fi:1 FC17{ BC18{ BC9}} FC19{ BC20{ BC9}} FC21{ BC22{ BC9}}}


 S168C2 ::~S168C2(){ note_dtor("S168C2", this);}
void  S168C2 ::v119(){vfunc_called(this, "_ZN6S168C24v119Ev");}
void  S168C2 ::v120(){vfunc_called(this, "_ZN6S168C24v120Ev");}
void  S168C2 ::v121(){vfunc_called(this, "_ZN6S168C24v121Ev");}
void  S168C2 ::v122(){vfunc_called(this, "_ZN6S168C24v122Ev");}
void  S168C2 ::v123(){vfunc_called(this, "_ZN6S168C24v123Ev");}
void  S168C2 ::v124(){vfunc_called(this, "_ZN6S168C24v124Ev");}
S168C2 ::S168C2(){ note_ctor("S168C2", this);} // tgen

static void Test_S168C2()
{
  extern Class_Descriptor cd_S168C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,63)];
    init_test(&cd_S168C2, buf);
    S168C2 *dp, &lv = *(dp=new (buf) S168C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,248), "sizeof(S168C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S168C2)");
    check_base_class_offset(lv, (S168C6*)(S168C5*)(S168C4*)(S168C3*), 0, "S168C2");
    check_base_class_offset(lv, (S168C5*)(S168C4*)(S168C3*), 0, "S168C2");
    check_base_class_offset(lv, (S168C4*)(S168C3*), 0, "S168C2");
    check_base_class_offset(lv, (S168C3*), 0, "S168C2");
    set_bf_and_test(lv, s168c2f0, ABISELECT(264,208), 0, 1, 1, "S168C2");
    check_field_offset(lv, s168c2f1, ABISELECT(272,212), "S168C2.s168c2f1");
    check_field_offset(lv, s168c2f2, ABISELECT(288,224), "S168C2.s168c2f2");
    check_field_offset(lv, s168c2f3, ABISELECT(304,236), "S168C2.s168c2f3");
    test_class_info(&lv, &cd_S168C2);
    dp->~S168C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS168C2(Test_S168C2, "S168C2", ABISELECT(320,248));

#else // __cplusplus

extern void _ZN6S168C2C1Ev();
extern void _ZN6S168C2D1Ev();
Name_Map name_map_S168C2[] = {
  NSPAIR(_ZN6S168C2C1Ev),
  NSPAIR(_ZN6S168C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S168C6;
extern VTBL_ENTRY _ZTI6S168C6[];
extern  VTBL_ENTRY _ZTV6S168C6[];
extern Class_Descriptor cd_S168C5;
extern VTBL_ENTRY _ZTI6S168C5[];
extern  VTBL_ENTRY _ZTV6S168C5[];
extern Class_Descriptor cd_S168C4;
extern VTBL_ENTRY _ZTI6S168C4[];
extern  VTBL_ENTRY _ZTV6S168C4[];
extern Class_Descriptor cd_S168C3;
extern VTBL_ENTRY _ZTI6S168C3[];
extern  VTBL_ENTRY _ZTV6S168C3[];
static Base_Class bases_S168C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S168C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S168C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S168C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S168C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S168C2[];
extern void _ZN6S168C2D1Ev();
extern void _ZN6S168C2D0Ev();
extern void _ZN6S168C62v3Ev();
extern void _ZN6S168C62v4Ev();
extern void _ZN6S168C62v5Ev();
extern void _ZN6S168C62v6Ev();
extern void _ZN6S168C62v7Ev();
extern void _ZN6S168C62v8Ev();
extern void _ZN6S168C62v9Ev();
extern void _ZN6S168C63v10Ev();
extern void _ZN6S168C63v11Ev();
extern void _ZN6S168C63v12Ev();
extern void _ZN6S168C63v13Ev();
extern void _ZN6S168C63v14Ev();
extern void _ZN6S168C63v15Ev();
extern void _ZN6S168C63v16Ev();
extern void _ZN6S168C63v17Ev();
extern void _ZN6S168C63v18Ev();
extern void _ZN6S168C63v19Ev();
extern void _ZN6S168C63v20Ev();
extern void _ZN6S168C63v21Ev();
extern void _ZN6S168C63v22Ev();
extern void _ZN6S168C63v23Ev();
extern void _ZN6S168C63v24Ev();
extern void _ZN6S168C63v25Ev();
extern void _ZN6S168C63v26Ev();
extern void _ZN6S168C63v27Ev();
extern void _ZN6S168C63v28Ev();
extern void _ZN6S168C63v29Ev();
extern void _ZN6S168C63v30Ev();
extern void _ZN6S168C63v31Ev();
extern void _ZN6S168C63v32Ev();
extern void _ZN6S168C63v33Ev();
extern void _ZN6S168C63v34Ev();
extern void _ZN6S168C63v35Ev();
extern void _ZN6S168C63v36Ev();
extern void _ZN6S168C63v37Ev();
extern void _ZN6S168C63v38Ev();
extern void _ZN6S168C63v39Ev();
extern void _ZN6S168C63v40Ev();
extern void _ZN6S168C63v41Ev();
extern void _ZN6S168C63v42Ev();
extern void _ZN6S168C63v43Ev();
extern void _ZN6S168C63v44Ev();
extern void _ZN6S168C63v45Ev();
extern void _ZN6S168C63v46Ev();
extern void _ZN6S168C63v47Ev();
extern void _ZN6S168C63v48Ev();
extern void _ZN6S168C63v49Ev();
extern void _ZN6S168C63v50Ev();
extern void _ZN6S168C63v51Ev();
extern void _ZN6S168C63v52Ev();
extern void _ZN6S168C63v53Ev();
extern void _ZN6S168C63v54Ev();
extern void _ZN6S168C63v55Ev();
extern void _ZN6S168C63v56Ev();
extern void _ZN6S168C63v57Ev();
extern void _ZN6S168C63v58Ev();
extern void _ZN6S168C63v59Ev();
extern void _ZN6S168C63v60Ev();
extern void _ZN6S168C63v61Ev();
extern void _ZN6S168C63v62Ev();
extern void _ZN6S168C63v63Ev();
extern void _ZN6S168C63v64Ev();
extern void _ZN6S168C63v65Ev();
extern void _ZN6S168C63v66Ev();
extern void _ZN6S168C53v67Ev();
extern void _ZN6S168C53v68Ev();
extern void _ZN6S168C53v69Ev();
extern void _ZN6S168C53v70Ev();
extern void _ZN6S168C53v71Ev();
extern void _ZN6S168C53v72Ev();
extern void _ZN6S168C53v73Ev();
extern void _ZN6S168C53v74Ev();
extern void _ZN6S168C53v75Ev();
extern void _ZN6S168C53v76Ev();
extern void _ZN6S168C53v77Ev();
extern void _ZN6S168C53v78Ev();
extern void _ZN6S168C53v79Ev();
extern void _ZN6S168C53v80Ev();
extern void _ZN6S168C53v81Ev();
extern void _ZN6S168C53v82Ev();
extern void _ZN6S168C53v83Ev();
extern void _ZN6S168C53v84Ev();
extern void _ZN6S168C53v85Ev();
extern void _ZN6S168C53v86Ev();
extern void _ZN6S168C53v87Ev();
extern void _ZN6S168C53v88Ev();
extern void _ZN6S168C53v89Ev();
extern void _ZN6S168C53v90Ev();
extern void _ZN6S168C53v91Ev();
extern void _ZN6S168C53v92Ev();
extern void _ZN6S168C53v93Ev();
extern void _ZN6S168C43v94Ev();
extern void _ZN6S168C43v95Ev();
extern void _ZN6S168C43v96Ev();
extern void _ZN6S168C43v97Ev();
extern void _ZN6S168C43v98Ev();
extern void _ZN6S168C43v99Ev();
extern void _ZN6S168C44v100Ev();
extern void _ZN6S168C44v101Ev();
extern void _ZN6S168C44v102Ev();
extern void _ZN6S168C44v103Ev();
extern void _ZN6S168C44v104Ev();
extern void _ZN6S168C44v105Ev();
extern void _ZN6S168C44v106Ev();
extern void _ZN6S168C44v107Ev();
extern void _ZN6S168C44v108Ev();
extern void _ZN6S168C44v109Ev();
extern void _ZN6S168C44v110Ev();
extern void _ZN6S168C44v111Ev();
extern void _ZN6S168C34v112Ev();
extern void _ZN6S168C34v113Ev();
extern void _ZN6S168C34v114Ev();
extern void _ZN6S168C34v115Ev();
extern void _ZN6S168C34v116Ev();
extern void _ZN6S168C34v117Ev();
extern void _ZN6S168C34v118Ev();
extern void _ZN6S168C24v119Ev();
extern void _ZN6S168C24v120Ev();
extern void _ZN6S168C24v121Ev();
extern void _ZN6S168C24v122Ev();
extern void _ZN6S168C24v123Ev();
extern void _ZN6S168C24v124Ev();
static  VTBL_ENTRY vtc_S168C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S168C2[0]),
  (VTBL_ENTRY)&_ZN6S168C2D1Ev,
  (VTBL_ENTRY)&_ZN6S168C2D0Ev,
  (VTBL_ENTRY)&_ZN6S168C62v3Ev,
  (VTBL_ENTRY)&_ZN6S168C62v4Ev,
  (VTBL_ENTRY)&_ZN6S168C62v5Ev,
  (VTBL_ENTRY)&_ZN6S168C62v6Ev,
  (VTBL_ENTRY)&_ZN6S168C62v7Ev,
  (VTBL_ENTRY)&_ZN6S168C62v8Ev,
  (VTBL_ENTRY)&_ZN6S168C62v9Ev,
  (VTBL_ENTRY)&_ZN6S168C63v10Ev,
  (VTBL_ENTRY)&_ZN6S168C63v11Ev,
  (VTBL_ENTRY)&_ZN6S168C63v12Ev,
  (VTBL_ENTRY)&_ZN6S168C63v13Ev,
  (VTBL_ENTRY)&_ZN6S168C63v14Ev,
  (VTBL_ENTRY)&_ZN6S168C63v15Ev,
  (VTBL_ENTRY)&_ZN6S168C63v16Ev,
  (VTBL_ENTRY)&_ZN6S168C63v17Ev,
  (VTBL_ENTRY)&_ZN6S168C63v18Ev,
  (VTBL_ENTRY)&_ZN6S168C63v19Ev,
  (VTBL_ENTRY)&_ZN6S168C63v20Ev,
  (VTBL_ENTRY)&_ZN6S168C63v21Ev,
  (VTBL_ENTRY)&_ZN6S168C63v22Ev,
  (VTBL_ENTRY)&_ZN6S168C63v23Ev,
  (VTBL_ENTRY)&_ZN6S168C63v24Ev,
  (VTBL_ENTRY)&_ZN6S168C63v25Ev,
  (VTBL_ENTRY)&_ZN6S168C63v26Ev,
  (VTBL_ENTRY)&_ZN6S168C63v27Ev,
  (VTBL_ENTRY)&_ZN6S168C63v28Ev,
  (VTBL_ENTRY)&_ZN6S168C63v29Ev,
  (VTBL_ENTRY)&_ZN6S168C63v30Ev,
  (VTBL_ENTRY)&_ZN6S168C63v31Ev,
  (VTBL_ENTRY)&_ZN6S168C63v32Ev,
  (VTBL_ENTRY)&_ZN6S168C63v33Ev,
  (VTBL_ENTRY)&_ZN6S168C63v34Ev,
  (VTBL_ENTRY)&_ZN6S168C63v35Ev,
  (VTBL_ENTRY)&_ZN6S168C63v36Ev,
  (VTBL_ENTRY)&_ZN6S168C63v37Ev,
  (VTBL_ENTRY)&_ZN6S168C63v38Ev,
  (VTBL_ENTRY)&_ZN6S168C63v39Ev,
  (VTBL_ENTRY)&_ZN6S168C63v40Ev,
  (VTBL_ENTRY)&_ZN6S168C63v41Ev,
  (VTBL_ENTRY)&_ZN6S168C63v42Ev,
  (VTBL_ENTRY)&_ZN6S168C63v43Ev,
  (VTBL_ENTRY)&_ZN6S168C63v44Ev,
  (VTBL_ENTRY)&_ZN6S168C63v45Ev,
  (VTBL_ENTRY)&_ZN6S168C63v46Ev,
  (VTBL_ENTRY)&_ZN6S168C63v47Ev,
  (VTBL_ENTRY)&_ZN6S168C63v48Ev,
  (VTBL_ENTRY)&_ZN6S168C63v49Ev,
  (VTBL_ENTRY)&_ZN6S168C63v50Ev,
  (VTBL_ENTRY)&_ZN6S168C63v51Ev,
  (VTBL_ENTRY)&_ZN6S168C63v52Ev,
  (VTBL_ENTRY)&_ZN6S168C63v53Ev,
  (VTBL_ENTRY)&_ZN6S168C63v54Ev,
  (VTBL_ENTRY)&_ZN6S168C63v55Ev,
  (VTBL_ENTRY)&_ZN6S168C63v56Ev,
  (VTBL_ENTRY)&_ZN6S168C63v57Ev,
  (VTBL_ENTRY)&_ZN6S168C63v58Ev,
  (VTBL_ENTRY)&_ZN6S168C63v59Ev,
  (VTBL_ENTRY)&_ZN6S168C63v60Ev,
  (VTBL_ENTRY)&_ZN6S168C63v61Ev,
  (VTBL_ENTRY)&_ZN6S168C63v62Ev,
  (VTBL_ENTRY)&_ZN6S168C63v63Ev,
  (VTBL_ENTRY)&_ZN6S168C63v64Ev,
  (VTBL_ENTRY)&_ZN6S168C63v65Ev,
  (VTBL_ENTRY)&_ZN6S168C63v66Ev,
  (VTBL_ENTRY)&_ZN6S168C53v67Ev,
  (VTBL_ENTRY)&_ZN6S168C53v68Ev,
  (VTBL_ENTRY)&_ZN6S168C53v69Ev,
  (VTBL_ENTRY)&_ZN6S168C53v70Ev,
  (VTBL_ENTRY)&_ZN6S168C53v71Ev,
  (VTBL_ENTRY)&_ZN6S168C53v72Ev,
  (VTBL_ENTRY)&_ZN6S168C53v73Ev,
  (VTBL_ENTRY)&_ZN6S168C53v74Ev,
  (VTBL_ENTRY)&_ZN6S168C53v75Ev,
  (VTBL_ENTRY)&_ZN6S168C53v76Ev,
  (VTBL_ENTRY)&_ZN6S168C53v77Ev,
  (VTBL_ENTRY)&_ZN6S168C53v78Ev,
  (VTBL_ENTRY)&_ZN6S168C53v79Ev,
  (VTBL_ENTRY)&_ZN6S168C53v80Ev,
  (VTBL_ENTRY)&_ZN6S168C53v81Ev,
  (VTBL_ENTRY)&_ZN6S168C53v82Ev,
  (VTBL_ENTRY)&_ZN6S168C53v83Ev,
  (VTBL_ENTRY)&_ZN6S168C53v84Ev,
  (VTBL_ENTRY)&_ZN6S168C53v85Ev,
  (VTBL_ENTRY)&_ZN6S168C53v86Ev,
  (VTBL_ENTRY)&_ZN6S168C53v87Ev,
  (VTBL_ENTRY)&_ZN6S168C53v88Ev,
  (VTBL_ENTRY)&_ZN6S168C53v89Ev,
  (VTBL_ENTRY)&_ZN6S168C53v90Ev,
  (VTBL_ENTRY)&_ZN6S168C53v91Ev,
  (VTBL_ENTRY)&_ZN6S168C53v92Ev,
  (VTBL_ENTRY)&_ZN6S168C53v93Ev,
  (VTBL_ENTRY)&_ZN6S168C43v94Ev,
  (VTBL_ENTRY)&_ZN6S168C43v95Ev,
  (VTBL_ENTRY)&_ZN6S168C43v96Ev,
  (VTBL_ENTRY)&_ZN6S168C43v97Ev,
  (VTBL_ENTRY)&_ZN6S168C43v98Ev,
  (VTBL_ENTRY)&_ZN6S168C43v99Ev,
  (VTBL_ENTRY)&_ZN6S168C44v100Ev,
  (VTBL_ENTRY)&_ZN6S168C44v101Ev,
  (VTBL_ENTRY)&_ZN6S168C44v102Ev,
  (VTBL_ENTRY)&_ZN6S168C44v103Ev,
  (VTBL_ENTRY)&_ZN6S168C44v104Ev,
  (VTBL_ENTRY)&_ZN6S168C44v105Ev,
  (VTBL_ENTRY)&_ZN6S168C44v106Ev,
  (VTBL_ENTRY)&_ZN6S168C44v107Ev,
  (VTBL_ENTRY)&_ZN6S168C44v108Ev,
  (VTBL_ENTRY)&_ZN6S168C44v109Ev,
  (VTBL_ENTRY)&_ZN6S168C44v110Ev,
  (VTBL_ENTRY)&_ZN6S168C44v111Ev,
  (VTBL_ENTRY)&_ZN6S168C34v112Ev,
  (VTBL_ENTRY)&_ZN6S168C34v113Ev,
  (VTBL_ENTRY)&_ZN6S168C34v114Ev,
  (VTBL_ENTRY)&_ZN6S168C34v115Ev,
  (VTBL_ENTRY)&_ZN6S168C34v116Ev,
  (VTBL_ENTRY)&_ZN6S168C34v117Ev,
  (VTBL_ENTRY)&_ZN6S168C34v118Ev,
  (VTBL_ENTRY)&_ZN6S168C24v119Ev,
  (VTBL_ENTRY)&_ZN6S168C24v120Ev,
  (VTBL_ENTRY)&_ZN6S168C24v121Ev,
  (VTBL_ENTRY)&_ZN6S168C24v122Ev,
  (VTBL_ENTRY)&_ZN6S168C24v123Ev,
  (VTBL_ENTRY)&_ZN6S168C24v124Ev,
};
extern VTBL_ENTRY _ZTI6S168C2[];
extern  VTBL_ENTRY _ZTV6S168C2[];
Class_Descriptor cd_S168C2 = {  "S168C2", // class name
  bases_S168C2, 4,
  &(vtc_S168C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,248), // object size
  NSPAIRA(_ZTI6S168C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S168C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S168C1  : S168C2 {
  virtual  ~S168C1(); // _ZN6S168C1D1Ev
  virtual void  v1(); // _ZN6S168C12v1Ev
  virtual void  v2(); // _ZN6S168C12v2Ev
  S168C1(); // tgen
};
//SIG(1 S168C1) 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 v89 v90 v91 v92 v93 Fp FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC7 FC11{ BC12{ BC10}} FC13{ m FC14{ m Fi[4]} FC15{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 FC16{ BC17{ BC10}} Fi:1} vd v112 v113 v114 v115 v116 v117 v118 Fi[3]} vd v119 v120 v121 v122 v123 v124 Fi:1 FC18{ BC19{ BC10}} FC20{ BC21{ BC10}} FC22{ BC23{ BC10}}} vd v1 v2}


 S168C1 ::~S168C1(){ note_dtor("S168C1", this);}
void  S168C1 ::v1(){vfunc_called(this, "_ZN6S168C12v1Ev");}
void  S168C1 ::v2(){vfunc_called(this, "_ZN6S168C12v2Ev");}
S168C1 ::S168C1(){ note_ctor("S168C1", this);} // tgen

static void Test_S168C1()
{
  extern Class_Descriptor cd_S168C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,63)];
    init_test(&cd_S168C1, buf);
    S168C1 *dp, &lv = *(dp=new (buf) S168C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,248), "sizeof(S168C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S168C1)");
    check_base_class_offset(lv, (S168C6*)(S168C5*)(S168C4*)(S168C3*)(S168C2*), 0, "S168C1");
    check_base_class_offset(lv, (S168C5*)(S168C4*)(S168C3*)(S168C2*), 0, "S168C1");
    check_base_class_offset(lv, (S168C4*)(S168C3*)(S168C2*), 0, "S168C1");
    check_base_class_offset(lv, (S168C3*)(S168C2*), 0, "S168C1");
    check_base_class_offset(lv, (S168C2*), 0, "S168C1");
    test_class_info(&lv, &cd_S168C1);
    dp->~S168C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS168C1(Test_S168C1, "S168C1", ABISELECT(320,248));

#else // __cplusplus

extern void _ZN6S168C1C1Ev();
extern void _ZN6S168C1D1Ev();
Name_Map name_map_S168C1[] = {
  NSPAIR(_ZN6S168C1C1Ev),
  NSPAIR(_ZN6S168C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S168C6;
extern VTBL_ENTRY _ZTI6S168C6[];
extern  VTBL_ENTRY _ZTV6S168C6[];
extern Class_Descriptor cd_S168C5;
extern VTBL_ENTRY _ZTI6S168C5[];
extern  VTBL_ENTRY _ZTV6S168C5[];
extern Class_Descriptor cd_S168C4;
extern VTBL_ENTRY _ZTI6S168C4[];
extern  VTBL_ENTRY _ZTV6S168C4[];
extern Class_Descriptor cd_S168C3;
extern VTBL_ENTRY _ZTI6S168C3[];
extern  VTBL_ENTRY _ZTV6S168C3[];
extern Class_Descriptor cd_S168C2;
extern VTBL_ENTRY _ZTI6S168C2[];
extern  VTBL_ENTRY _ZTV6S168C2[];
static Base_Class bases_S168C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S168C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S168C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S168C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S168C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S168C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S168C1[];
extern void _ZN6S168C1D1Ev();
extern void _ZN6S168C1D0Ev();
extern void _ZN6S168C62v3Ev();
extern void _ZN6S168C62v4Ev();
extern void _ZN6S168C62v5Ev();
extern void _ZN6S168C62v6Ev();
extern void _ZN6S168C62v7Ev();
extern void _ZN6S168C62v8Ev();
extern void _ZN6S168C62v9Ev();
extern void _ZN6S168C63v10Ev();
extern void _ZN6S168C63v11Ev();
extern void _ZN6S168C63v12Ev();
extern void _ZN6S168C63v13Ev();
extern void _ZN6S168C63v14Ev();
extern void _ZN6S168C63v15Ev();
extern void _ZN6S168C63v16Ev();
extern void _ZN6S168C63v17Ev();
extern void _ZN6S168C63v18Ev();
extern void _ZN6S168C63v19Ev();
extern void _ZN6S168C63v20Ev();
extern void _ZN6S168C63v21Ev();
extern void _ZN6S168C63v22Ev();
extern void _ZN6S168C63v23Ev();
extern void _ZN6S168C63v24Ev();
extern void _ZN6S168C63v25Ev();
extern void _ZN6S168C63v26Ev();
extern void _ZN6S168C63v27Ev();
extern void _ZN6S168C63v28Ev();
extern void _ZN6S168C63v29Ev();
extern void _ZN6S168C63v30Ev();
extern void _ZN6S168C63v31Ev();
extern void _ZN6S168C63v32Ev();
extern void _ZN6S168C63v33Ev();
extern void _ZN6S168C63v34Ev();
extern void _ZN6S168C63v35Ev();
extern void _ZN6S168C63v36Ev();
extern void _ZN6S168C63v37Ev();
extern void _ZN6S168C63v38Ev();
extern void _ZN6S168C63v39Ev();
extern void _ZN6S168C63v40Ev();
extern void _ZN6S168C63v41Ev();
extern void _ZN6S168C63v42Ev();
extern void _ZN6S168C63v43Ev();
extern void _ZN6S168C63v44Ev();
extern void _ZN6S168C63v45Ev();
extern void _ZN6S168C63v46Ev();
extern void _ZN6S168C63v47Ev();
extern void _ZN6S168C63v48Ev();
extern void _ZN6S168C63v49Ev();
extern void _ZN6S168C63v50Ev();
extern void _ZN6S168C63v51Ev();
extern void _ZN6S168C63v52Ev();
extern void _ZN6S168C63v53Ev();
extern void _ZN6S168C63v54Ev();
extern void _ZN6S168C63v55Ev();
extern void _ZN6S168C63v56Ev();
extern void _ZN6S168C63v57Ev();
extern void _ZN6S168C63v58Ev();
extern void _ZN6S168C63v59Ev();
extern void _ZN6S168C63v60Ev();
extern void _ZN6S168C63v61Ev();
extern void _ZN6S168C63v62Ev();
extern void _ZN6S168C63v63Ev();
extern void _ZN6S168C63v64Ev();
extern void _ZN6S168C63v65Ev();
extern void _ZN6S168C63v66Ev();
extern void _ZN6S168C53v67Ev();
extern void _ZN6S168C53v68Ev();
extern void _ZN6S168C53v69Ev();
extern void _ZN6S168C53v70Ev();
extern void _ZN6S168C53v71Ev();
extern void _ZN6S168C53v72Ev();
extern void _ZN6S168C53v73Ev();
extern void _ZN6S168C53v74Ev();
extern void _ZN6S168C53v75Ev();
extern void _ZN6S168C53v76Ev();
extern void _ZN6S168C53v77Ev();
extern void _ZN6S168C53v78Ev();
extern void _ZN6S168C53v79Ev();
extern void _ZN6S168C53v80Ev();
extern void _ZN6S168C53v81Ev();
extern void _ZN6S168C53v82Ev();
extern void _ZN6S168C53v83Ev();
extern void _ZN6S168C53v84Ev();
extern void _ZN6S168C53v85Ev();
extern void _ZN6S168C53v86Ev();
extern void _ZN6S168C53v87Ev();
extern void _ZN6S168C53v88Ev();
extern void _ZN6S168C53v89Ev();
extern void _ZN6S168C53v90Ev();
extern void _ZN6S168C53v91Ev();
extern void _ZN6S168C53v92Ev();
extern void _ZN6S168C53v93Ev();
extern void _ZN6S168C43v94Ev();
extern void _ZN6S168C43v95Ev();
extern void _ZN6S168C43v96Ev();
extern void _ZN6S168C43v97Ev();
extern void _ZN6S168C43v98Ev();
extern void _ZN6S168C43v99Ev();
extern void _ZN6S168C44v100Ev();
extern void _ZN6S168C44v101Ev();
extern void _ZN6S168C44v102Ev();
extern void _ZN6S168C44v103Ev();
extern void _ZN6S168C44v104Ev();
extern void _ZN6S168C44v105Ev();
extern void _ZN6S168C44v106Ev();
extern void _ZN6S168C44v107Ev();
extern void _ZN6S168C44v108Ev();
extern void _ZN6S168C44v109Ev();
extern void _ZN6S168C44v110Ev();
extern void _ZN6S168C44v111Ev();
extern void _ZN6S168C34v112Ev();
extern void _ZN6S168C34v113Ev();
extern void _ZN6S168C34v114Ev();
extern void _ZN6S168C34v115Ev();
extern void _ZN6S168C34v116Ev();
extern void _ZN6S168C34v117Ev();
extern void _ZN6S168C34v118Ev();
extern void _ZN6S168C24v119Ev();
extern void _ZN6S168C24v120Ev();
extern void _ZN6S168C24v121Ev();
extern void _ZN6S168C24v122Ev();
extern void _ZN6S168C24v123Ev();
extern void _ZN6S168C24v124Ev();
extern void _ZN6S168C12v1Ev();
extern void _ZN6S168C12v2Ev();
static  VTBL_ENTRY vtc_S168C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S168C1[0]),
  (VTBL_ENTRY)&_ZN6S168C1D1Ev,
  (VTBL_ENTRY)&_ZN6S168C1D0Ev,
  (VTBL_ENTRY)&_ZN6S168C62v3Ev,
  (VTBL_ENTRY)&_ZN6S168C62v4Ev,
  (VTBL_ENTRY)&_ZN6S168C62v5Ev,
  (VTBL_ENTRY)&_ZN6S168C62v6Ev,
  (VTBL_ENTRY)&_ZN6S168C62v7Ev,
  (VTBL_ENTRY)&_ZN6S168C62v8Ev,
  (VTBL_ENTRY)&_ZN6S168C62v9Ev,
  (VTBL_ENTRY)&_ZN6S168C63v10Ev,
  (VTBL_ENTRY)&_ZN6S168C63v11Ev,
  (VTBL_ENTRY)&_ZN6S168C63v12Ev,
  (VTBL_ENTRY)&_ZN6S168C63v13Ev,
  (VTBL_ENTRY)&_ZN6S168C63v14Ev,
  (VTBL_ENTRY)&_ZN6S168C63v15Ev,
  (VTBL_ENTRY)&_ZN6S168C63v16Ev,
  (VTBL_ENTRY)&_ZN6S168C63v17Ev,
  (VTBL_ENTRY)&_ZN6S168C63v18Ev,
  (VTBL_ENTRY)&_ZN6S168C63v19Ev,
  (VTBL_ENTRY)&_ZN6S168C63v20Ev,
  (VTBL_ENTRY)&_ZN6S168C63v21Ev,
  (VTBL_ENTRY)&_ZN6S168C63v22Ev,
  (VTBL_ENTRY)&_ZN6S168C63v23Ev,
  (VTBL_ENTRY)&_ZN6S168C63v24Ev,
  (VTBL_ENTRY)&_ZN6S168C63v25Ev,
  (VTBL_ENTRY)&_ZN6S168C63v26Ev,
  (VTBL_ENTRY)&_ZN6S168C63v27Ev,
  (VTBL_ENTRY)&_ZN6S168C63v28Ev,
  (VTBL_ENTRY)&_ZN6S168C63v29Ev,
  (VTBL_ENTRY)&_ZN6S168C63v30Ev,
  (VTBL_ENTRY)&_ZN6S168C63v31Ev,
  (VTBL_ENTRY)&_ZN6S168C63v32Ev,
  (VTBL_ENTRY)&_ZN6S168C63v33Ev,
  (VTBL_ENTRY)&_ZN6S168C63v34Ev,
  (VTBL_ENTRY)&_ZN6S168C63v35Ev,
  (VTBL_ENTRY)&_ZN6S168C63v36Ev,
  (VTBL_ENTRY)&_ZN6S168C63v37Ev,
  (VTBL_ENTRY)&_ZN6S168C63v38Ev,
  (VTBL_ENTRY)&_ZN6S168C63v39Ev,
  (VTBL_ENTRY)&_ZN6S168C63v40Ev,
  (VTBL_ENTRY)&_ZN6S168C63v41Ev,
  (VTBL_ENTRY)&_ZN6S168C63v42Ev,
  (VTBL_ENTRY)&_ZN6S168C63v43Ev,
  (VTBL_ENTRY)&_ZN6S168C63v44Ev,
  (VTBL_ENTRY)&_ZN6S168C63v45Ev,
  (VTBL_ENTRY)&_ZN6S168C63v46Ev,
  (VTBL_ENTRY)&_ZN6S168C63v47Ev,
  (VTBL_ENTRY)&_ZN6S168C63v48Ev,
  (VTBL_ENTRY)&_ZN6S168C63v49Ev,
  (VTBL_ENTRY)&_ZN6S168C63v50Ev,
  (VTBL_ENTRY)&_ZN6S168C63v51Ev,
  (VTBL_ENTRY)&_ZN6S168C63v52Ev,
  (VTBL_ENTRY)&_ZN6S168C63v53Ev,
  (VTBL_ENTRY)&_ZN6S168C63v54Ev,
  (VTBL_ENTRY)&_ZN6S168C63v55Ev,
  (VTBL_ENTRY)&_ZN6S168C63v56Ev,
  (VTBL_ENTRY)&_ZN6S168C63v57Ev,
  (VTBL_ENTRY)&_ZN6S168C63v58Ev,
  (VTBL_ENTRY)&_ZN6S168C63v59Ev,
  (VTBL_ENTRY)&_ZN6S168C63v60Ev,
  (VTBL_ENTRY)&_ZN6S168C63v61Ev,
  (VTBL_ENTRY)&_ZN6S168C63v62Ev,
  (VTBL_ENTRY)&_ZN6S168C63v63Ev,
  (VTBL_ENTRY)&_ZN6S168C63v64Ev,
  (VTBL_ENTRY)&_ZN6S168C63v65Ev,
  (VTBL_ENTRY)&_ZN6S168C63v66Ev,
  (VTBL_ENTRY)&_ZN6S168C53v67Ev,
  (VTBL_ENTRY)&_ZN6S168C53v68Ev,
  (VTBL_ENTRY)&_ZN6S168C53v69Ev,
  (VTBL_ENTRY)&_ZN6S168C53v70Ev,
  (VTBL_ENTRY)&_ZN6S168C53v71Ev,
  (VTBL_ENTRY)&_ZN6S168C53v72Ev,
  (VTBL_ENTRY)&_ZN6S168C53v73Ev,
  (VTBL_ENTRY)&_ZN6S168C53v74Ev,
  (VTBL_ENTRY)&_ZN6S168C53v75Ev,
  (VTBL_ENTRY)&_ZN6S168C53v76Ev,
  (VTBL_ENTRY)&_ZN6S168C53v77Ev,
  (VTBL_ENTRY)&_ZN6S168C53v78Ev,
  (VTBL_ENTRY)&_ZN6S168C53v79Ev,
  (VTBL_ENTRY)&_ZN6S168C53v80Ev,
  (VTBL_ENTRY)&_ZN6S168C53v81Ev,
  (VTBL_ENTRY)&_ZN6S168C53v82Ev,
  (VTBL_ENTRY)&_ZN6S168C53v83Ev,
  (VTBL_ENTRY)&_ZN6S168C53v84Ev,
  (VTBL_ENTRY)&_ZN6S168C53v85Ev,
  (VTBL_ENTRY)&_ZN6S168C53v86Ev,
  (VTBL_ENTRY)&_ZN6S168C53v87Ev,
  (VTBL_ENTRY)&_ZN6S168C53v88Ev,
  (VTBL_ENTRY)&_ZN6S168C53v89Ev,
  (VTBL_ENTRY)&_ZN6S168C53v90Ev,
  (VTBL_ENTRY)&_ZN6S168C53v91Ev,
  (VTBL_ENTRY)&_ZN6S168C53v92Ev,
  (VTBL_ENTRY)&_ZN6S168C53v93Ev,
  (VTBL_ENTRY)&_ZN6S168C43v94Ev,
  (VTBL_ENTRY)&_ZN6S168C43v95Ev,
  (VTBL_ENTRY)&_ZN6S168C43v96Ev,
  (VTBL_ENTRY)&_ZN6S168C43v97Ev,
  (VTBL_ENTRY)&_ZN6S168C43v98Ev,
  (VTBL_ENTRY)&_ZN6S168C43v99Ev,
  (VTBL_ENTRY)&_ZN6S168C44v100Ev,
  (VTBL_ENTRY)&_ZN6S168C44v101Ev,
  (VTBL_ENTRY)&_ZN6S168C44v102Ev,
  (VTBL_ENTRY)&_ZN6S168C44v103Ev,
  (VTBL_ENTRY)&_ZN6S168C44v104Ev,
  (VTBL_ENTRY)&_ZN6S168C44v105Ev,
  (VTBL_ENTRY)&_ZN6S168C44v106Ev,
  (VTBL_ENTRY)&_ZN6S168C44v107Ev,
  (VTBL_ENTRY)&_ZN6S168C44v108Ev,
  (VTBL_ENTRY)&_ZN6S168C44v109Ev,
  (VTBL_ENTRY)&_ZN6S168C44v110Ev,
  (VTBL_ENTRY)&_ZN6S168C44v111Ev,
  (VTBL_ENTRY)&_ZN6S168C34v112Ev,
  (VTBL_ENTRY)&_ZN6S168C34v113Ev,
  (VTBL_ENTRY)&_ZN6S168C34v114Ev,
  (VTBL_ENTRY)&_ZN6S168C34v115Ev,
  (VTBL_ENTRY)&_ZN6S168C34v116Ev,
  (VTBL_ENTRY)&_ZN6S168C34v117Ev,
  (VTBL_ENTRY)&_ZN6S168C34v118Ev,
  (VTBL_ENTRY)&_ZN6S168C24v119Ev,
  (VTBL_ENTRY)&_ZN6S168C24v120Ev,
  (VTBL_ENTRY)&_ZN6S168C24v121Ev,
  (VTBL_ENTRY)&_ZN6S168C24v122Ev,
  (VTBL_ENTRY)&_ZN6S168C24v123Ev,
  (VTBL_ENTRY)&_ZN6S168C24v124Ev,
  (VTBL_ENTRY)&_ZN6S168C12v1Ev,
  (VTBL_ENTRY)&_ZN6S168C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S168C1[];
extern  VTBL_ENTRY _ZTV6S168C1[];
Class_Descriptor cd_S168C1 = {  "S168C1", // class name
  bases_S168C1, 5,
  &(vtc_S168C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,248), // object size
  NSPAIRA(_ZTI6S168C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S168C1),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  S231C6  {
  int s231c6f0;
  __tsi64 s231c6f1;
  void *s231c6f2[4];
  int s231c6f3[2];
  void *s231c6f4;
  ::S615C17_nt s231c6f5;
  void *s231c6f6[2];
  virtual  ~S231C6(); // _ZN6S231C6D1Ev
  virtual void  v5(); // _ZN6S231C62v5Ev
  virtual void  v6(); // _ZN6S231C62v6Ev
  virtual void  v7(); // _ZN6S231C62v7Ev
  virtual void  v8(); // _ZN6S231C62v8Ev
  virtual void  v9(); // _ZN6S231C62v9Ev
  virtual void  v10(); // _ZN6S231C63v10Ev
  virtual void  v11(); // _ZN6S231C63v11Ev
  virtual void  v12(); // _ZN6S231C63v12Ev
  virtual void  v13(); // _ZN6S231C63v13Ev
  virtual void  v14(); // _ZN6S231C63v14Ev
  virtual void  v15(); // _ZN6S231C63v15Ev
  virtual void  v16(); // _ZN6S231C63v16Ev
  virtual void  v17(); // _ZN6S231C63v17Ev
  virtual void  v18(); // _ZN6S231C63v18Ev
  virtual void  v19(); // _ZN6S231C63v19Ev
  virtual void  v20(); // _ZN6S231C63v20Ev
  virtual void  v21(); // _ZN6S231C63v21Ev
  virtual void  v22(); // _ZN6S231C63v22Ev
  virtual void  v23(); // _ZN6S231C63v23Ev
  virtual void  v24(); // _ZN6S231C63v24Ev
  virtual void  v25(); // _ZN6S231C63v25Ev
  virtual void  v26(); // _ZN6S231C63v26Ev
  virtual void  v27(); // _ZN6S231C63v27Ev
  virtual void  v28(); // _ZN6S231C63v28Ev
  virtual void  v29(); // _ZN6S231C63v29Ev
  virtual void  v30(); // _ZN6S231C63v30Ev
  virtual void  v31(); // _ZN6S231C63v31Ev
  virtual void  v32(); // _ZN6S231C63v32Ev
  virtual void  v33(); // _ZN6S231C63v33Ev
  virtual void  v34(); // _ZN6S231C63v34Ev
  virtual void  v35(); // _ZN6S231C63v35Ev
  virtual void  v36(); // _ZN6S231C63v36Ev
  virtual void  v37(); // _ZN6S231C63v37Ev
  virtual void  v38(); // _ZN6S231C63v38Ev
  virtual void  v39(); // _ZN6S231C63v39Ev
  virtual void  v40(); // _ZN6S231C63v40Ev
  virtual void  v41(); // _ZN6S231C63v41Ev
  virtual void  v42(); // _ZN6S231C63v42Ev
  virtual void  v43(); // _ZN6S231C63v43Ev
  virtual void  v44(); // _ZN6S231C63v44Ev
  virtual void  v45(); // _ZN6S231C63v45Ev
  virtual void  v46(); // _ZN6S231C63v46Ev
  virtual void  v47(); // _ZN6S231C63v47Ev
  virtual void  v48(); // _ZN6S231C63v48Ev
  virtual void  v49(); // _ZN6S231C63v49Ev
  virtual void  v50(); // _ZN6S231C63v50Ev
  virtual void  v51(); // _ZN6S231C63v51Ev
  virtual void  v52(); // _ZN6S231C63v52Ev
  virtual void  v53(); // _ZN6S231C63v53Ev
  virtual void  v54(); // _ZN6S231C63v54Ev
  virtual void  v55(); // _ZN6S231C63v55Ev
  virtual void  v56(); // _ZN6S231C63v56Ev
  virtual void  v57(); // _ZN6S231C63v57Ev
  virtual void  v58(); // _ZN6S231C63v58Ev
  virtual void  v59(); // _ZN6S231C63v59Ev
  virtual void  v60(); // _ZN6S231C63v60Ev
  virtual void  v61(); // _ZN6S231C63v61Ev
  virtual void  v62(); // _ZN6S231C63v62Ev
  virtual void  v63(); // _ZN6S231C63v63Ev
  virtual void  v64(); // _ZN6S231C63v64Ev
  virtual void  v65(); // _ZN6S231C63v65Ev
  virtual void  v66(); // _ZN6S231C63v66Ev
  virtual void  v67(); // _ZN6S231C63v67Ev
  virtual void  v68(); // _ZN6S231C63v68Ev
  S231C6(); // tgen
};
//SIG(-1 S231C6) 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]}


 S231C6 ::~S231C6(){ note_dtor("S231C6", this);}
void  S231C6 ::v5(){vfunc_called(this, "_ZN6S231C62v5Ev");}
void  S231C6 ::v6(){vfunc_called(this, "_ZN6S231C62v6Ev");}
void  S231C6 ::v7(){vfunc_called(this, "_ZN6S231C62v7Ev");}
void  S231C6 ::v8(){vfunc_called(this, "_ZN6S231C62v8Ev");}
void  S231C6 ::v9(){vfunc_called(this, "_ZN6S231C62v9Ev");}
void  S231C6 ::v10(){vfunc_called(this, "_ZN6S231C63v10Ev");}
void  S231C6 ::v11(){vfunc_called(this, "_ZN6S231C63v11Ev");}
void  S231C6 ::v12(){vfunc_called(this, "_ZN6S231C63v12Ev");}
void  S231C6 ::v13(){vfunc_called(this, "_ZN6S231C63v13Ev");}
void  S231C6 ::v14(){vfunc_called(this, "_ZN6S231C63v14Ev");}
void  S231C6 ::v15(){vfunc_called(this, "_ZN6S231C63v15Ev");}
void  S231C6 ::v16(){vfunc_called(this, "_ZN6S231C63v16Ev");}
void  S231C6 ::v17(){vfunc_called(this, "_ZN6S231C63v17Ev");}
void  S231C6 ::v18(){vfunc_called(this, "_ZN6S231C63v18Ev");}
void  S231C6 ::v19(){vfunc_called(this, "_ZN6S231C63v19Ev");}
void  S231C6 ::v20(){vfunc_called(this, "_ZN6S231C63v20Ev");}
void  S231C6 ::v21(){vfunc_called(this, "_ZN6S231C63v21Ev");}
void  S231C6 ::v22(){vfunc_called(this, "_ZN6S231C63v22Ev");}
void  S231C6 ::v23(){vfunc_called(this, "_ZN6S231C63v23Ev");}
void  S231C6 ::v24(){vfunc_called(this, "_ZN6S231C63v24Ev");}
void  S231C6 ::v25(){vfunc_called(this, "_ZN6S231C63v25Ev");}
void  S231C6 ::v26(){vfunc_called(this, "_ZN6S231C63v26Ev");}
void  S231C6 ::v27(){vfunc_called(this, "_ZN6S231C63v27Ev");}
void  S231C6 ::v28(){vfunc_called(this, "_ZN6S231C63v28Ev");}
void  S231C6 ::v29(){vfunc_called(this, "_ZN6S231C63v29Ev");}
void  S231C6 ::v30(){vfunc_called(this, "_ZN6S231C63v30Ev");}
void  S231C6 ::v31(){vfunc_called(this, "_ZN6S231C63v31Ev");}
void  S231C6 ::v32(){vfunc_called(this, "_ZN6S231C63v32Ev");}
void  S231C6 ::v33(){vfunc_called(this, "_ZN6S231C63v33Ev");}
void  S231C6 ::v34(){vfunc_called(this, "_ZN6S231C63v34Ev");}
void  S231C6 ::v35(){vfunc_called(this, "_ZN6S231C63v35Ev");}
void  S231C6 ::v36(){vfunc_called(this, "_ZN6S231C63v36Ev");}
void  S231C6 ::v37(){vfunc_called(this, "_ZN6S231C63v37Ev");}
void  S231C6 ::v38(){vfunc_called(this, "_ZN6S231C63v38Ev");}
void  S231C6 ::v39(){vfunc_called(this, "_ZN6S231C63v39Ev");}
void  S231C6 ::v40(){vfunc_called(this, "_ZN6S231C63v40Ev");}
void  S231C6 ::v41(){vfunc_called(this, "_ZN6S231C63v41Ev");}
void  S231C6 ::v42(){vfunc_called(this, "_ZN6S231C63v42Ev");}
void  S231C6 ::v43(){vfunc_called(this, "_ZN6S231C63v43Ev");}
void  S231C6 ::v44(){vfunc_called(this, "_ZN6S231C63v44Ev");}
void  S231C6 ::v45(){vfunc_called(this, "_ZN6S231C63v45Ev");}
void  S231C6 ::v46(){vfunc_called(this, "_ZN6S231C63v46Ev");}
void  S231C6 ::v47(){vfunc_called(this, "_ZN6S231C63v47Ev");}
void  S231C6 ::v48(){vfunc_called(this, "_ZN6S231C63v48Ev");}
void  S231C6 ::v49(){vfunc_called(this, "_ZN6S231C63v49Ev");}
void  S231C6 ::v50(){vfunc_called(this, "_ZN6S231C63v50Ev");}
void  S231C6 ::v51(){vfunc_called(this, "_ZN6S231C63v51Ev");}
void  S231C6 ::v52(){vfunc_called(this, "_ZN6S231C63v52Ev");}
void  S231C6 ::v53(){vfunc_called(this, "_ZN6S231C63v53Ev");}
void  S231C6 ::v54(){vfunc_called(this, "_ZN6S231C63v54Ev");}
void  S231C6 ::v55(){vfunc_called(this, "_ZN6S231C63v55Ev");}
void  S231C6 ::v56(){vfunc_called(this, "_ZN6S231C63v56Ev");}
void  S231C6 ::v57(){vfunc_called(this, "_ZN6S231C63v57Ev");}
void  S231C6 ::v58(){vfunc_called(this, "_ZN6S231C63v58Ev");}
void  S231C6 ::v59(){vfunc_called(this, "_ZN6S231C63v59Ev");}
void  S231C6 ::v60(){vfunc_called(this, "_ZN6S231C63v60Ev");}
void  S231C6 ::v61(){vfunc_called(this, "_ZN6S231C63v61Ev");}
void  S231C6 ::v62(){vfunc_called(this, "_ZN6S231C63v62Ev");}
void  S231C6 ::v63(){vfunc_called(this, "_ZN6S231C63v63Ev");}
void  S231C6 ::v64(){vfunc_called(this, "_ZN6S231C63v64Ev");}
void  S231C6 ::v65(){vfunc_called(this, "_ZN6S231C63v65Ev");}
void  S231C6 ::v66(){vfunc_called(this, "_ZN6S231C63v66Ev");}
void  S231C6 ::v67(){vfunc_called(this, "_ZN6S231C63v67Ev");}
void  S231C6 ::v68(){vfunc_called(this, "_ZN6S231C63v68Ev");}
S231C6 ::S231C6(){ note_ctor("S231C6", this);} // tgen

static void Test_S231C6()
{
  extern Class_Descriptor cd_S231C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S231C6, buf);
    S231C6 *dp, &lv = *(dp=new (buf) S231C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S231C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S231C6)");
    check_field_offset(lv, s231c6f0, ABISELECT(8,4), "S231C6.s231c6f0");
    check_field_offset(lv, s231c6f1, ABISELECT(16,8), "S231C6.s231c6f1");
    check_field_offset(lv, s231c6f2, ABISELECT(24,16), "S231C6.s231c6f2");
    check_field_offset(lv, s231c6f3, ABISELECT(56,32), "S231C6.s231c6f3");
    check_field_offset(lv, s231c6f4, ABISELECT(64,40), "S231C6.s231c6f4");
    check_field_offset(lv, s231c6f5, ABISELECT(72,44), "S231C6.s231c6f5");
    check_field_offset(lv, s231c6f6, ABISELECT(80,52), "S231C6.s231c6f6");
    test_class_info(&lv, &cd_S231C6);
    dp->~S231C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS231C6(Test_S231C6, "S231C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S231C6C1Ev();
extern void _ZN6S231C6D1Ev();
Name_Map name_map_S231C6[] = {
  NSPAIR(_ZN6S231C6C1Ev),
  NSPAIR(_ZN6S231C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S231C6[];
extern void _ZN6S231C6D1Ev();
extern void _ZN6S231C6D0Ev();
extern void _ZN6S231C62v5Ev();
extern void _ZN6S231C62v6Ev();
extern void _ZN6S231C62v7Ev();
extern void _ZN6S231C62v8Ev();
extern void _ZN6S231C62v9Ev();
extern void _ZN6S231C63v10Ev();
extern void _ZN6S231C63v11Ev();
extern void _ZN6S231C63v12Ev();
extern void _ZN6S231C63v13Ev();
extern void _ZN6S231C63v14Ev();
extern void _ZN6S231C63v15Ev();
extern void _ZN6S231C63v16Ev();
extern void _ZN6S231C63v17Ev();
extern void _ZN6S231C63v18Ev();
extern void _ZN6S231C63v19Ev();
extern void _ZN6S231C63v20Ev();
extern void _ZN6S231C63v21Ev();
extern void _ZN6S231C63v22Ev();
extern void _ZN6S231C63v23Ev();
extern void _ZN6S231C63v24Ev();
extern void _ZN6S231C63v25Ev();
extern void _ZN6S231C63v26Ev();
extern void _ZN6S231C63v27Ev();
extern void _ZN6S231C63v28Ev();
extern void _ZN6S231C63v29Ev();
extern void _ZN6S231C63v30Ev();
extern void _ZN6S231C63v31Ev();
extern void _ZN6S231C63v32Ev();
extern void _ZN6S231C63v33Ev();
extern void _ZN6S231C63v34Ev();
extern void _ZN6S231C63v35Ev();
extern void _ZN6S231C63v36Ev();
extern void _ZN6S231C63v37Ev();
extern void _ZN6S231C63v38Ev();
extern void _ZN6S231C63v39Ev();
extern void _ZN6S231C63v40Ev();
extern void _ZN6S231C63v41Ev();
extern void _ZN6S231C63v42Ev();
extern void _ZN6S231C63v43Ev();
extern void _ZN6S231C63v44Ev();
extern void _ZN6S231C63v45Ev();
extern void _ZN6S231C63v46Ev();
extern void _ZN6S231C63v47Ev();
extern void _ZN6S231C63v48Ev();
extern void _ZN6S231C63v49Ev();
extern void _ZN6S231C63v50Ev();
extern void _ZN6S231C63v51Ev();
extern void _ZN6S231C63v52Ev();
extern void _ZN6S231C63v53Ev();
extern void _ZN6S231C63v54Ev();
extern void _ZN6S231C63v55Ev();
extern void _ZN6S231C63v56Ev();
extern void _ZN6S231C63v57Ev();
extern void _ZN6S231C63v58Ev();
extern void _ZN6S231C63v59Ev();
extern void _ZN6S231C63v60Ev();
extern void _ZN6S231C63v61Ev();
extern void _ZN6S231C63v62Ev();
extern void _ZN6S231C63v63Ev();
extern void _ZN6S231C63v64Ev();
extern void _ZN6S231C63v65Ev();
extern void _ZN6S231C63v66Ev();
extern void _ZN6S231C63v67Ev();
extern void _ZN6S231C63v68Ev();
static  VTBL_ENTRY vtc_S231C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S231C6[0]),
  (VTBL_ENTRY)&_ZN6S231C6D1Ev,
  (VTBL_ENTRY)&_ZN6S231C6D0Ev,
  (VTBL_ENTRY)&_ZN6S231C62v5Ev,
  (VTBL_ENTRY)&_ZN6S231C62v6Ev,
  (VTBL_ENTRY)&_ZN6S231C62v7Ev,
  (VTBL_ENTRY)&_ZN6S231C62v8Ev,
  (VTBL_ENTRY)&_ZN6S231C62v9Ev,
  (VTBL_ENTRY)&_ZN6S231C63v10Ev,
  (VTBL_ENTRY)&_ZN6S231C63v11Ev,
  (VTBL_ENTRY)&_ZN6S231C63v12Ev,
  (VTBL_ENTRY)&_ZN6S231C63v13Ev,
  (VTBL_ENTRY)&_ZN6S231C63v14Ev,
  (VTBL_ENTRY)&_ZN6S231C63v15Ev,
  (VTBL_ENTRY)&_ZN6S231C63v16Ev,
  (VTBL_ENTRY)&_ZN6S231C63v17Ev,
  (VTBL_ENTRY)&_ZN6S231C63v18Ev,
  (VTBL_ENTRY)&_ZN6S231C63v19Ev,
  (VTBL_ENTRY)&_ZN6S231C63v20Ev,
  (VTBL_ENTRY)&_ZN6S231C63v21Ev,
  (VTBL_ENTRY)&_ZN6S231C63v22Ev,
  (VTBL_ENTRY)&_ZN6S231C63v23Ev,
  (VTBL_ENTRY)&_ZN6S231C63v24Ev,
  (VTBL_ENTRY)&_ZN6S231C63v25Ev,
  (VTBL_ENTRY)&_ZN6S231C63v26Ev,
  (VTBL_ENTRY)&_ZN6S231C63v27Ev,
  (VTBL_ENTRY)&_ZN6S231C63v28Ev,
  (VTBL_ENTRY)&_ZN6S231C63v29Ev,
  (VTBL_ENTRY)&_ZN6S231C63v30Ev,
  (VTBL_ENTRY)&_ZN6S231C63v31Ev,
  (VTBL_ENTRY)&_ZN6S231C63v32Ev,
  (VTBL_ENTRY)&_ZN6S231C63v33Ev,
  (VTBL_ENTRY)&_ZN6S231C63v34Ev,
  (VTBL_ENTRY)&_ZN6S231C63v35Ev,
  (VTBL_ENTRY)&_ZN6S231C63v36Ev,
  (VTBL_ENTRY)&_ZN6S231C63v37Ev,
  (VTBL_ENTRY)&_ZN6S231C63v38Ev,
  (VTBL_ENTRY)&_ZN6S231C63v39Ev,
  (VTBL_ENTRY)&_ZN6S231C63v40Ev,
  (VTBL_ENTRY)&_ZN6S231C63v41Ev,
  (VTBL_ENTRY)&_ZN6S231C63v42Ev,
  (VTBL_ENTRY)&_ZN6S231C63v43Ev,
  (VTBL_ENTRY)&_ZN6S231C63v44Ev,
  (VTBL_ENTRY)&_ZN6S231C63v45Ev,
  (VTBL_ENTRY)&_ZN6S231C63v46Ev,
  (VTBL_ENTRY)&_ZN6S231C63v47Ev,
  (VTBL_ENTRY)&_ZN6S231C63v48Ev,
  (VTBL_ENTRY)&_ZN6S231C63v49Ev,
  (VTBL_ENTRY)&_ZN6S231C63v50Ev,
  (VTBL_ENTRY)&_ZN6S231C63v51Ev,
  (VTBL_ENTRY)&_ZN6S231C63v52Ev,
  (VTBL_ENTRY)&_ZN6S231C63v53Ev,
  (VTBL_ENTRY)&_ZN6S231C63v54Ev,
  (VTBL_ENTRY)&_ZN6S231C63v55Ev,
  (VTBL_ENTRY)&_ZN6S231C63v56Ev,
  (VTBL_ENTRY)&_ZN6S231C63v57Ev,
  (VTBL_ENTRY)&_ZN6S231C63v58Ev,
  (VTBL_ENTRY)&_ZN6S231C63v59Ev,
  (VTBL_ENTRY)&_ZN6S231C63v60Ev,
  (VTBL_ENTRY)&_ZN6S231C63v61Ev,
  (VTBL_ENTRY)&_ZN6S231C63v62Ev,
  (VTBL_ENTRY)&_ZN6S231C63v63Ev,
  (VTBL_ENTRY)&_ZN6S231C63v64Ev,
  (VTBL_ENTRY)&_ZN6S231C63v65Ev,
  (VTBL_ENTRY)&_ZN6S231C63v66Ev,
  (VTBL_ENTRY)&_ZN6S231C63v67Ev,
  (VTBL_ENTRY)&_ZN6S231C63v68Ev,
};
extern VTBL_ENTRY _ZTI6S231C6[];
extern  VTBL_ENTRY _ZTV6S231C6[];
Class_Descriptor cd_S231C6 = {  "S231C6", // class name
  0,0,//no base classes
  &(vtc_S231C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S231C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S231C6),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  S231C5  : S231C6 {
  void *s231c5f0;
  ::S1542C26 s231c5f1;
  ::S615C17_nt s231c5f2;
  ::S1542C22_nt s231c5f3;
  ::S615C12_nt s231c5f4;
  int s231c5f5;
  unsigned int s231c5f6:1;
  unsigned int s231c5f7:1;
  unsigned int s231c5f8:1;
  unsigned int s231c5f9:1;
  int s231c5f10[11];
  virtual  ~S231C5(); // _ZN6S231C5D1Ev
  virtual void  v69(); // _ZN6S231C53v69Ev
  virtual void  v70(); // _ZN6S231C53v70Ev
  virtual void  v71(); // _ZN6S231C53v71Ev
  virtual void  v72(); // _ZN6S231C53v72Ev
  virtual void  v73(); // _ZN6S231C53v73Ev
  virtual void  v74(); // _ZN6S231C53v74Ev
  virtual void  v75(); // _ZN6S231C53v75Ev
  virtual void  v76(); // _ZN6S231C53v76Ev
  virtual void  v77(); // _ZN6S231C53v77Ev
  virtual void  v78(); // _ZN6S231C53v78Ev
  virtual void  v79(); // _ZN6S231C53v79Ev
  virtual void  v80(); // _ZN6S231C53v80Ev
  virtual void  v81(); // _ZN6S231C53v81Ev
  virtual void  v82(); // _ZN6S231C53v82Ev
  virtual void  v83(); // _ZN6S231C53v83Ev
  virtual void  v84(); // _ZN6S231C53v84Ev
  virtual void  v85(); // _ZN6S231C53v85Ev
  virtual void  v86(); // _ZN6S231C53v86Ev
  virtual void  v87(); // _ZN6S231C53v87Ev
  virtual void  v88(); // _ZN6S231C53v88Ev
  virtual void  v89(); // _ZN6S231C53v89Ev
  virtual void  v90(); // _ZN6S231C53v90Ev
  virtual void  v91(); // _ZN6S231C53v91Ev
  virtual void  v92(); // _ZN6S231C53v92Ev
  virtual void  v93(); // _ZN6S231C53v93Ev
  virtual void  v94(); // _ZN6S231C53v94Ev
  virtual void  v95(); // _ZN6S231C53v95Ev
  S231C5(); // tgen
};
//SIG(-1 S231C5) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S231C5 ::~S231C5(){ note_dtor("S231C5", this);}
void  S231C5 ::v69(){vfunc_called(this, "_ZN6S231C53v69Ev");}
void  S231C5 ::v70(){vfunc_called(this, "_ZN6S231C53v70Ev");}
void  S231C5 ::v71(){vfunc_called(this, "_ZN6S231C53v71Ev");}
void  S231C5 ::v72(){vfunc_called(this, "_ZN6S231C53v72Ev");}
void  S231C5 ::v73(){vfunc_called(this, "_ZN6S231C53v73Ev");}
void  S231C5 ::v74(){vfunc_called(this, "_ZN6S231C53v74Ev");}
void  S231C5 ::v75(){vfunc_called(this, "_ZN6S231C53v75Ev");}
void  S231C5 ::v76(){vfunc_called(this, "_ZN6S231C53v76Ev");}
void  S231C5 ::v77(){vfunc_called(this, "_ZN6S231C53v77Ev");}
void  S231C5 ::v78(){vfunc_called(this, "_ZN6S231C53v78Ev");}
void  S231C5 ::v79(){vfunc_called(this, "_ZN6S231C53v79Ev");}
void  S231C5 ::v80(){vfunc_called(this, "_ZN6S231C53v80Ev");}
void  S231C5 ::v81(){vfunc_called(this, "_ZN6S231C53v81Ev");}
void  S231C5 ::v82(){vfunc_called(this, "_ZN6S231C53v82Ev");}
void  S231C5 ::v83(){vfunc_called(this, "_ZN6S231C53v83Ev");}
void  S231C5 ::v84(){vfunc_called(this, "_ZN6S231C53v84Ev");}
void  S231C5 ::v85(){vfunc_called(this, "_ZN6S231C53v85Ev");}
void  S231C5 ::v86(){vfunc_called(this, "_ZN6S231C53v86Ev");}
void  S231C5 ::v87(){vfunc_called(this, "_ZN6S231C53v87Ev");}
void  S231C5 ::v88(){vfunc_called(this, "_ZN6S231C53v88Ev");}
void  S231C5 ::v89(){vfunc_called(this, "_ZN6S231C53v89Ev");}
void  S231C5 ::v90(){vfunc_called(this, "_ZN6S231C53v90Ev");}
void  S231C5 ::v91(){vfunc_called(this, "_ZN6S231C53v91Ev");}
void  S231C5 ::v92(){vfunc_called(this, "_ZN6S231C53v92Ev");}
void  S231C5 ::v93(){vfunc_called(this, "_ZN6S231C53v93Ev");}
void  S231C5 ::v94(){vfunc_called(this, "_ZN6S231C53v94Ev");}
void  S231C5 ::v95(){vfunc_called(this, "_ZN6S231C53v95Ev");}
S231C5 ::S231C5(){ note_ctor("S231C5", this);} // tgen

static void Test_S231C5()
{
  extern Class_Descriptor cd_S231C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S231C5, buf);
    S231C5 *dp, &lv = *(dp=new (buf) S231C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S231C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S231C5)");
    check_base_class_offset(lv, (S231C6*), 0, "S231C5");
    check_field_offset(lv, s231c5f0, ABISELECT(96,60), "S231C5.s231c5f0");
    check_field_offset(lv, s231c5f1, ABISELECT(104,64), "S231C5.s231c5f1");
    check_field_offset(lv, s231c5f2, ABISELECT(120,76), "S231C5.s231c5f2");
    check_field_offset(lv, s231c5f3, ABISELECT(128,84), "S231C5.s231c5f3");
    check_field_offset(lv, s231c5f4, ABISELECT(144,96), "S231C5.s231c5f4");
    check_field_offset(lv, s231c5f5, ABISELECT(176,128), "S231C5.s231c5f5");
    set_bf_and_test(lv, s231c5f6, ABISELECT(180,132), 0, 1, 1, "S231C5");
    set_bf_and_test(lv, s231c5f7, ABISELECT(180,132), 1, 1, 1, "S231C5");
    set_bf_and_test(lv, s231c5f8, ABISELECT(180,132), 2, 1, 1, "S231C5");
    set_bf_and_test(lv, s231c5f9, ABISELECT(180,132), 3, 1, 1, "S231C5");
    check_field_offset(lv, s231c5f10, ABISELECT(184,136), "S231C5.s231c5f10");
    test_class_info(&lv, &cd_S231C5);
    dp->~S231C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS231C5(Test_S231C5, "S231C5", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S231C5C1Ev();
extern void _ZN6S231C5D1Ev();
Name_Map name_map_S231C5[] = {
  NSPAIR(_ZN6S231C5C1Ev),
  NSPAIR(_ZN6S231C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S231C6;
extern VTBL_ENTRY _ZTI6S231C6[];
extern  VTBL_ENTRY _ZTV6S231C6[];
static Base_Class bases_S231C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S231C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S231C5[];
extern void _ZN6S231C5D1Ev();
extern void _ZN6S231C5D0Ev();
extern void _ZN6S231C62v5Ev();
extern void _ZN6S231C62v6Ev();
extern void _ZN6S231C62v7Ev();
extern void _ZN6S231C62v8Ev();
extern void _ZN6S231C62v9Ev();
extern void _ZN6S231C63v10Ev();
extern void _ZN6S231C63v11Ev();
extern void _ZN6S231C63v12Ev();
extern void _ZN6S231C63v13Ev();
extern void _ZN6S231C63v14Ev();
extern void _ZN6S231C63v15Ev();
extern void _ZN6S231C63v16Ev();
extern void _ZN6S231C63v17Ev();
extern void _ZN6S231C63v18Ev();
extern void _ZN6S231C63v19Ev();
extern void _ZN6S231C63v20Ev();
extern void _ZN6S231C63v21Ev();
extern void _ZN6S231C63v22Ev();
extern void _ZN6S231C63v23Ev();
extern void _ZN6S231C63v24Ev();
extern void _ZN6S231C63v25Ev();
extern void _ZN6S231C63v26Ev();
extern void _ZN6S231C63v27Ev();
extern void _ZN6S231C63v28Ev();
extern void _ZN6S231C63v29Ev();
extern void _ZN6S231C63v30Ev();
extern void _ZN6S231C63v31Ev();
extern void _ZN6S231C63v32Ev();
extern void _ZN6S231C63v33Ev();
extern void _ZN6S231C63v34Ev();
extern void _ZN6S231C63v35Ev();
extern void _ZN6S231C63v36Ev();
extern void _ZN6S231C63v37Ev();
extern void _ZN6S231C63v38Ev();
extern void _ZN6S231C63v39Ev();
extern void _ZN6S231C63v40Ev();
extern void _ZN6S231C63v41Ev();
extern void _ZN6S231C63v42Ev();
extern void _ZN6S231C63v43Ev();
extern void _ZN6S231C63v44Ev();
extern void _ZN6S231C63v45Ev();
extern void _ZN6S231C63v46Ev();
extern void _ZN6S231C63v47Ev();
extern void _ZN6S231C63v48Ev();
extern void _ZN6S231C63v49Ev();
extern void _ZN6S231C63v50Ev();
extern void _ZN6S231C63v51Ev();
extern void _ZN6S231C63v52Ev();
extern void _ZN6S231C63v53Ev();
extern void _ZN6S231C63v54Ev();
extern void _ZN6S231C63v55Ev();
extern void _ZN6S231C63v56Ev();
extern void _ZN6S231C63v57Ev();
extern void _ZN6S231C63v58Ev();
extern void _ZN6S231C63v59Ev();
extern void _ZN6S231C63v60Ev();
extern void _ZN6S231C63v61Ev();
extern void _ZN6S231C63v62Ev();
extern void _ZN6S231C63v63Ev();
extern void _ZN6S231C63v64Ev();
extern void _ZN6S231C63v65Ev();
extern void _ZN6S231C63v66Ev();
extern void _ZN6S231C63v67Ev();
extern void _ZN6S231C63v68Ev();
extern void _ZN6S231C53v69Ev();
extern void _ZN6S231C53v70Ev();
extern void _ZN6S231C53v71Ev();
extern void _ZN6S231C53v72Ev();
extern void _ZN6S231C53v73Ev();
extern void _ZN6S231C53v74Ev();
extern void _ZN6S231C53v75Ev();
extern void _ZN6S231C53v76Ev();
extern void _ZN6S231C53v77Ev();
extern void _ZN6S231C53v78Ev();
extern void _ZN6S231C53v79Ev();
extern void _ZN6S231C53v80Ev();
extern void _ZN6S231C53v81Ev();
extern void _ZN6S231C53v82Ev();
extern void _ZN6S231C53v83Ev();
extern void _ZN6S231C53v84Ev();
extern void _ZN6S231C53v85Ev();
extern void _ZN6S231C53v86Ev();
extern void _ZN6S231C53v87Ev();
extern void _ZN6S231C53v88Ev();
extern void _ZN6S231C53v89Ev();
extern void _ZN6S231C53v90Ev();
extern void _ZN6S231C53v91Ev();
extern void _ZN6S231C53v92Ev();
extern void _ZN6S231C53v93Ev();
extern void _ZN6S231C53v94Ev();
extern void _ZN6S231C53v95Ev();
static  VTBL_ENTRY vtc_S231C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S231C5[0]),
  (VTBL_ENTRY)&_ZN6S231C5D1Ev,
  (VTBL_ENTRY)&_ZN6S231C5D0Ev,
  (VTBL_ENTRY)&_ZN6S231C62v5Ev,
  (VTBL_ENTRY)&_ZN6S231C62v6Ev,
  (VTBL_ENTRY)&_ZN6S231C62v7Ev,
  (VTBL_ENTRY)&_ZN6S231C62v8Ev,
  (VTBL_ENTRY)&_ZN6S231C62v9Ev,
  (VTBL_ENTRY)&_ZN6S231C63v10Ev,
  (VTBL_ENTRY)&_ZN6S231C63v11Ev,
  (VTBL_ENTRY)&_ZN6S231C63v12Ev,
  (VTBL_ENTRY)&_ZN6S231C63v13Ev,
  (VTBL_ENTRY)&_ZN6S231C63v14Ev,
  (VTBL_ENTRY)&_ZN6S231C63v15Ev,
  (VTBL_ENTRY)&_ZN6S231C63v16Ev,
  (VTBL_ENTRY)&_ZN6S231C63v17Ev,
  (VTBL_ENTRY)&_ZN6S231C63v18Ev,
  (VTBL_ENTRY)&_ZN6S231C63v19Ev,
  (VTBL_ENTRY)&_ZN6S231C63v20Ev,
  (VTBL_ENTRY)&_ZN6S231C63v21Ev,
  (VTBL_ENTRY)&_ZN6S231C63v22Ev,
  (VTBL_ENTRY)&_ZN6S231C63v23Ev,
  (VTBL_ENTRY)&_ZN6S231C63v24Ev,
  (VTBL_ENTRY)&_ZN6S231C63v25Ev,
  (VTBL_ENTRY)&_ZN6S231C63v26Ev,
  (VTBL_ENTRY)&_ZN6S231C63v27Ev,
  (VTBL_ENTRY)&_ZN6S231C63v28Ev,
  (VTBL_ENTRY)&_ZN6S231C63v29Ev,
  (VTBL_ENTRY)&_ZN6S231C63v30Ev,
  (VTBL_ENTRY)&_ZN6S231C63v31Ev,
  (VTBL_ENTRY)&_ZN6S231C63v32Ev,
  (VTBL_ENTRY)&_ZN6S231C63v33Ev,
  (VTBL_ENTRY)&_ZN6S231C63v34Ev,
  (VTBL_ENTRY)&_ZN6S231C63v35Ev,
  (VTBL_ENTRY)&_ZN6S231C63v36Ev,
  (VTBL_ENTRY)&_ZN6S231C63v37Ev,
  (VTBL_ENTRY)&_ZN6S231C63v38Ev,
  (VTBL_ENTRY)&_ZN6S231C63v39Ev,
  (VTBL_ENTRY)&_ZN6S231C63v40Ev,
  (VTBL_ENTRY)&_ZN6S231C63v41Ev,
  (VTBL_ENTRY)&_ZN6S231C63v42Ev,
  (VTBL_ENTRY)&_ZN6S231C63v43Ev,
  (VTBL_ENTRY)&_ZN6S231C63v44Ev,
  (VTBL_ENTRY)&_ZN6S231C63v45Ev,
  (VTBL_ENTRY)&_ZN6S231C63v46Ev,
  (VTBL_ENTRY)&_ZN6S231C63v47Ev,
  (VTBL_ENTRY)&_ZN6S231C63v48Ev,
  (VTBL_ENTRY)&_ZN6S231C63v49Ev,
  (VTBL_ENTRY)&_ZN6S231C63v50Ev,
  (VTBL_ENTRY)&_ZN6S231C63v51Ev,
  (VTBL_ENTRY)&_ZN6S231C63v52Ev,
  (VTBL_ENTRY)&_ZN6S231C63v53Ev,
  (VTBL_ENTRY)&_ZN6S231C63v54Ev,
  (VTBL_ENTRY)&_ZN6S231C63v55Ev,
  (VTBL_ENTRY)&_ZN6S231C63v56Ev,
  (VTBL_ENTRY)&_ZN6S231C63v57Ev,
  (VTBL_ENTRY)&_ZN6S231C63v58Ev,
  (VTBL_ENTRY)&_ZN6S231C63v59Ev,
  (VTBL_ENTRY)&_ZN6S231C63v60Ev,
  (VTBL_ENTRY)&_ZN6S231C63v61Ev,
  (VTBL_ENTRY)&_ZN6S231C63v62Ev,
  (VTBL_ENTRY)&_ZN6S231C63v63Ev,
  (VTBL_ENTRY)&_ZN6S231C63v64Ev,
  (VTBL_ENTRY)&_ZN6S231C63v65Ev,
  (VTBL_ENTRY)&_ZN6S231C63v66Ev,
  (VTBL_ENTRY)&_ZN6S231C63v67Ev,
  (VTBL_ENTRY)&_ZN6S231C63v68Ev,
  (VTBL_ENTRY)&_ZN6S231C53v69Ev,
  (VTBL_ENTRY)&_ZN6S231C53v70Ev,
  (VTBL_ENTRY)&_ZN6S231C53v71Ev,
  (VTBL_ENTRY)&_ZN6S231C53v72Ev,
  (VTBL_ENTRY)&_ZN6S231C53v73Ev,
  (VTBL_ENTRY)&_ZN6S231C53v74Ev,
  (VTBL_ENTRY)&_ZN6S231C53v75Ev,
  (VTBL_ENTRY)&_ZN6S231C53v76Ev,
  (VTBL_ENTRY)&_ZN6S231C53v77Ev,
  (VTBL_ENTRY)&_ZN6S231C53v78Ev,
  (VTBL_ENTRY)&_ZN6S231C53v79Ev,
  (VTBL_ENTRY)&_ZN6S231C53v80Ev,
  (VTBL_ENTRY)&_ZN6S231C53v81Ev,
  (VTBL_ENTRY)&_ZN6S231C53v82Ev,
  (VTBL_ENTRY)&_ZN6S231C53v83Ev,
  (VTBL_ENTRY)&_ZN6S231C53v84Ev,
  (VTBL_ENTRY)&_ZN6S231C53v85Ev,
  (VTBL_ENTRY)&_ZN6S231C53v86Ev,
  (VTBL_ENTRY)&_ZN6S231C53v87Ev,
  (VTBL_ENTRY)&_ZN6S231C53v88Ev,
  (VTBL_ENTRY)&_ZN6S231C53v89Ev,
  (VTBL_ENTRY)&_ZN6S231C53v90Ev,
  (VTBL_ENTRY)&_ZN6S231C53v91Ev,
  (VTBL_ENTRY)&_ZN6S231C53v92Ev,
  (VTBL_ENTRY)&_ZN6S231C53v93Ev,
  (VTBL_ENTRY)&_ZN6S231C53v94Ev,
  (VTBL_ENTRY)&_ZN6S231C53v95Ev,
};
extern VTBL_ENTRY _ZTI6S231C5[];
extern  VTBL_ENTRY _ZTV6S231C5[];
Class_Descriptor cd_S231C5 = {  "S231C5", // class name
  bases_S231C5, 1,
  &(vtc_S231C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S231C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S231C5),95, //virtual function table var
  2, // 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  S231C4  : S231C5 {
  ::S615C22_nt s231c4f0;
  unsigned int s231c4f1:1;
  virtual  ~S231C4(); // _ZN6S231C4D1Ev
  virtual void  v96(); // _ZN6S231C43v96Ev
  virtual void  v97(); // _ZN6S231C43v97Ev
  virtual void  v98(); // _ZN6S231C43v98Ev
  virtual void  v99(); // _ZN6S231C43v99Ev
  virtual void  v100(); // _ZN6S231C44v100Ev
  virtual void  v101(); // _ZN6S231C44v101Ev
  virtual void  v102(); // _ZN6S231C44v102Ev
  virtual void  v103(); // _ZN6S231C44v103Ev
  virtual void  v104(); // _ZN6S231C44v104Ev
  virtual void  v105(); // _ZN6S231C44v105Ev
  virtual void  v106(); // _ZN6S231C44v106Ev
  virtual void  v107(); // _ZN6S231C44v107Ev
  virtual void  v108(); // _ZN6S231C44v108Ev
  virtual void  v109(); // _ZN6S231C44v109Ev
  virtual void  v110(); // _ZN6S231C44v110Ev
  virtual void  v111(); // _ZN6S231C44v111Ev
  virtual void  v112(); // _ZN6S231C44v112Ev
  virtual void  v113(); // _ZN6S231C44v113Ev
  S231C4(); // tgen
};
//SIG(-1 S231C4) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S231C4 ::~S231C4(){ note_dtor("S231C4", this);}
void  S231C4 ::v96(){vfunc_called(this, "_ZN6S231C43v96Ev");}
void  S231C4 ::v97(){vfunc_called(this, "_ZN6S231C43v97Ev");}
void  S231C4 ::v98(){vfunc_called(this, "_ZN6S231C43v98Ev");}
void  S231C4 ::v99(){vfunc_called(this, "_ZN6S231C43v99Ev");}
void  S231C4 ::v100(){vfunc_called(this, "_ZN6S231C44v100Ev");}
void  S231C4 ::v101(){vfunc_called(this, "_ZN6S231C44v101Ev");}
void  S231C4 ::v102(){vfunc_called(this, "_ZN6S231C44v102Ev");}
void  S231C4 ::v103(){vfunc_called(this, "_ZN6S231C44v103Ev");}
void  S231C4 ::v104(){vfunc_called(this, "_ZN6S231C44v104Ev");}
void  S231C4 ::v105(){vfunc_called(this, "_ZN6S231C44v105Ev");}
void  S231C4 ::v106(){vfunc_called(this, "_ZN6S231C44v106Ev");}
void  S231C4 ::v107(){vfunc_called(this, "_ZN6S231C44v107Ev");}
void  S231C4 ::v108(){vfunc_called(this, "_ZN6S231C44v108Ev");}
void  S231C4 ::v109(){vfunc_called(this, "_ZN6S231C44v109Ev");}
void  S231C4 ::v110(){vfunc_called(this, "_ZN6S231C44v110Ev");}
void  S231C4 ::v111(){vfunc_called(this, "_ZN6S231C44v111Ev");}
void  S231C4 ::v112(){vfunc_called(this, "_ZN6S231C44v112Ev");}
void  S231C4 ::v113(){vfunc_called(this, "_ZN6S231C44v113Ev");}
S231C4 ::S231C4(){ note_ctor("S231C4", this);} // tgen

static void Test_S231C4()
{
  extern Class_Descriptor cd_S231C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S231C4, buf);
    S231C4 *dp, &lv = *(dp=new (buf) S231C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S231C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S231C4)");
    check_base_class_offset(lv, (S231C6*)(S231C5*), 0, "S231C4");
    check_base_class_offset(lv, (S231C5*), 0, "S231C4");
    check_field_offset(lv, s231c4f0, ABISELECT(232,180), "S231C4.s231c4f0");
    set_bf_and_test(lv, s231c4f1, ABISELECT(248,192), 0, 1, 1, "S231C4");
    test_class_info(&lv, &cd_S231C4);
    dp->~S231C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS231C4(Test_S231C4, "S231C4", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S231C4C1Ev();
extern void _ZN6S231C4D1Ev();
Name_Map name_map_S231C4[] = {
  NSPAIR(_ZN6S231C4C1Ev),
  NSPAIR(_ZN6S231C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S231C6;
extern VTBL_ENTRY _ZTI6S231C6[];
extern  VTBL_ENTRY _ZTV6S231C6[];
extern Class_Descriptor cd_S231C5;
extern VTBL_ENTRY _ZTI6S231C5[];
extern  VTBL_ENTRY _ZTV6S231C5[];
static Base_Class bases_S231C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S231C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S231C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S231C4[];
extern void _ZN6S231C4D1Ev();
extern void _ZN6S231C4D0Ev();
extern void _ZN6S231C62v5Ev();
extern void _ZN6S231C62v6Ev();
extern void _ZN6S231C62v7Ev();
extern void _ZN6S231C62v8Ev();
extern void _ZN6S231C62v9Ev();
extern void _ZN6S231C63v10Ev();
extern void _ZN6S231C63v11Ev();
extern void _ZN6S231C63v12Ev();
extern void _ZN6S231C63v13Ev();
extern void _ZN6S231C63v14Ev();
extern void _ZN6S231C63v15Ev();
extern void _ZN6S231C63v16Ev();
extern void _ZN6S231C63v17Ev();
extern void _ZN6S231C63v18Ev();
extern void _ZN6S231C63v19Ev();
extern void _ZN6S231C63v20Ev();
extern void _ZN6S231C63v21Ev();
extern void _ZN6S231C63v22Ev();
extern void _ZN6S231C63v23Ev();
extern void _ZN6S231C63v24Ev();
extern void _ZN6S231C63v25Ev();
extern void _ZN6S231C63v26Ev();
extern void _ZN6S231C63v27Ev();
extern void _ZN6S231C63v28Ev();
extern void _ZN6S231C63v29Ev();
extern void _ZN6S231C63v30Ev();
extern void _ZN6S231C63v31Ev();
extern void _ZN6S231C63v32Ev();
extern void _ZN6S231C63v33Ev();
extern void _ZN6S231C63v34Ev();
extern void _ZN6S231C63v35Ev();
extern void _ZN6S231C63v36Ev();
extern void _ZN6S231C63v37Ev();
extern void _ZN6S231C63v38Ev();
extern void _ZN6S231C63v39Ev();
extern void _ZN6S231C63v40Ev();
extern void _ZN6S231C63v41Ev();
extern void _ZN6S231C63v42Ev();
extern void _ZN6S231C63v43Ev();
extern void _ZN6S231C63v44Ev();
extern void _ZN6S231C63v45Ev();
extern void _ZN6S231C63v46Ev();
extern void _ZN6S231C63v47Ev();
extern void _ZN6S231C63v48Ev();
extern void _ZN6S231C63v49Ev();
extern void _ZN6S231C63v50Ev();
extern void _ZN6S231C63v51Ev();
extern void _ZN6S231C63v52Ev();
extern void _ZN6S231C63v53Ev();
extern void _ZN6S231C63v54Ev();
extern void _ZN6S231C63v55Ev();
extern void _ZN6S231C63v56Ev();
extern void _ZN6S231C63v57Ev();
extern void _ZN6S231C63v58Ev();
extern void _ZN6S231C63v59Ev();
extern void _ZN6S231C63v60Ev();
extern void _ZN6S231C63v61Ev();
extern void _ZN6S231C63v62Ev();
extern void _ZN6S231C63v63Ev();
extern void _ZN6S231C63v64Ev();
extern void _ZN6S231C63v65Ev();
extern void _ZN6S231C63v66Ev();
extern void _ZN6S231C63v67Ev();
extern void _ZN6S231C63v68Ev();
extern void _ZN6S231C53v69Ev();
extern void _ZN6S231C53v70Ev();
extern void _ZN6S231C53v71Ev();
extern void _ZN6S231C53v72Ev();
extern void _ZN6S231C53v73Ev();
extern void _ZN6S231C53v74Ev();
extern void _ZN6S231C53v75Ev();
extern void _ZN6S231C53v76Ev();
extern void _ZN6S231C53v77Ev();
extern void _ZN6S231C53v78Ev();
extern void _ZN6S231C53v79Ev();
extern void _ZN6S231C53v80Ev();
extern void _ZN6S231C53v81Ev();
extern void _ZN6S231C53v82Ev();
extern void _ZN6S231C53v83Ev();
extern void _ZN6S231C53v84Ev();
extern void _ZN6S231C53v85Ev();
extern void _ZN6S231C53v86Ev();
extern void _ZN6S231C53v87Ev();
extern void _ZN6S231C53v88Ev();
extern void _ZN6S231C53v89Ev();
extern void _ZN6S231C53v90Ev();
extern void _ZN6S231C53v91Ev();
extern void _ZN6S231C53v92Ev();
extern void _ZN6S231C53v93Ev();
extern void _ZN6S231C53v94Ev();
extern void _ZN6S231C53v95Ev();
extern void _ZN6S231C43v96Ev();
extern void _ZN6S231C43v97Ev();
extern void _ZN6S231C43v98Ev();
extern void _ZN6S231C43v99Ev();
extern void _ZN6S231C44v100Ev();
extern void _ZN6S231C44v101Ev();
extern void _ZN6S231C44v102Ev();
extern void _ZN6S231C44v103Ev();
extern void _ZN6S231C44v104Ev();
extern void _ZN6S231C44v105Ev();
extern void _ZN6S231C44v106Ev();
extern void _ZN6S231C44v107Ev();
extern void _ZN6S231C44v108Ev();
extern void _ZN6S231C44v109Ev();
extern void _ZN6S231C44v110Ev();
extern void _ZN6S231C44v111Ev();
extern void _ZN6S231C44v112Ev();
extern void _ZN6S231C44v113Ev();
static  VTBL_ENTRY vtc_S231C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S231C4[0]),
  (VTBL_ENTRY)&_ZN6S231C4D1Ev,
  (VTBL_ENTRY)&_ZN6S231C4D0Ev,
  (VTBL_ENTRY)&_ZN6S231C62v5Ev,
  (VTBL_ENTRY)&_ZN6S231C62v6Ev,
  (VTBL_ENTRY)&_ZN6S231C62v7Ev,
  (VTBL_ENTRY)&_ZN6S231C62v8Ev,
  (VTBL_ENTRY)&_ZN6S231C62v9Ev,
  (VTBL_ENTRY)&_ZN6S231C63v10Ev,
  (VTBL_ENTRY)&_ZN6S231C63v11Ev,
  (VTBL_ENTRY)&_ZN6S231C63v12Ev,
  (VTBL_ENTRY)&_ZN6S231C63v13Ev,
  (VTBL_ENTRY)&_ZN6S231C63v14Ev,
  (VTBL_ENTRY)&_ZN6S231C63v15Ev,
  (VTBL_ENTRY)&_ZN6S231C63v16Ev,
  (VTBL_ENTRY)&_ZN6S231C63v17Ev,
  (VTBL_ENTRY)&_ZN6S231C63v18Ev,
  (VTBL_ENTRY)&_ZN6S231C63v19Ev,
  (VTBL_ENTRY)&_ZN6S231C63v20Ev,
  (VTBL_ENTRY)&_ZN6S231C63v21Ev,
  (VTBL_ENTRY)&_ZN6S231C63v22Ev,
  (VTBL_ENTRY)&_ZN6S231C63v23Ev,
  (VTBL_ENTRY)&_ZN6S231C63v24Ev,
  (VTBL_ENTRY)&_ZN6S231C63v25Ev,
  (VTBL_ENTRY)&_ZN6S231C63v26Ev,
  (VTBL_ENTRY)&_ZN6S231C63v27Ev,
  (VTBL_ENTRY)&_ZN6S231C63v28Ev,
  (VTBL_ENTRY)&_ZN6S231C63v29Ev,
  (VTBL_ENTRY)&_ZN6S231C63v30Ev,
  (VTBL_ENTRY)&_ZN6S231C63v31Ev,
  (VTBL_ENTRY)&_ZN6S231C63v32Ev,
  (VTBL_ENTRY)&_ZN6S231C63v33Ev,
  (VTBL_ENTRY)&_ZN6S231C63v34Ev,
  (VTBL_ENTRY)&_ZN6S231C63v35Ev,
  (VTBL_ENTRY)&_ZN6S231C63v36Ev,
  (VTBL_ENTRY)&_ZN6S231C63v37Ev,
  (VTBL_ENTRY)&_ZN6S231C63v38Ev,
  (VTBL_ENTRY)&_ZN6S231C63v39Ev,
  (VTBL_ENTRY)&_ZN6S231C63v40Ev,
  (VTBL_ENTRY)&_ZN6S231C63v41Ev,
  (VTBL_ENTRY)&_ZN6S231C63v42Ev,
  (VTBL_ENTRY)&_ZN6S231C63v43Ev,
  (VTBL_ENTRY)&_ZN6S231C63v44Ev,
  (VTBL_ENTRY)&_ZN6S231C63v45Ev,
  (VTBL_ENTRY)&_ZN6S231C63v46Ev,
  (VTBL_ENTRY)&_ZN6S231C63v47Ev,
  (VTBL_ENTRY)&_ZN6S231C63v48Ev,
  (VTBL_ENTRY)&_ZN6S231C63v49Ev,
  (VTBL_ENTRY)&_ZN6S231C63v50Ev,
  (VTBL_ENTRY)&_ZN6S231C63v51Ev,
  (VTBL_ENTRY)&_ZN6S231C63v52Ev,
  (VTBL_ENTRY)&_ZN6S231C63v53Ev,
  (VTBL_ENTRY)&_ZN6S231C63v54Ev,
  (VTBL_ENTRY)&_ZN6S231C63v55Ev,
  (VTBL_ENTRY)&_ZN6S231C63v56Ev,
  (VTBL_ENTRY)&_ZN6S231C63v57Ev,
  (VTBL_ENTRY)&_ZN6S231C63v58Ev,
  (VTBL_ENTRY)&_ZN6S231C63v59Ev,
  (VTBL_ENTRY)&_ZN6S231C63v60Ev,
  (VTBL_ENTRY)&_ZN6S231C63v61Ev,
  (VTBL_ENTRY)&_ZN6S231C63v62Ev,
  (VTBL_ENTRY)&_ZN6S231C63v63Ev,
  (VTBL_ENTRY)&_ZN6S231C63v64Ev,
  (VTBL_ENTRY)&_ZN6S231C63v65Ev,
  (VTBL_ENTRY)&_ZN6S231C63v66Ev,
  (VTBL_ENTRY)&_ZN6S231C63v67Ev,
  (VTBL_ENTRY)&_ZN6S231C63v68Ev,
  (VTBL_ENTRY)&_ZN6S231C53v69Ev,
  (VTBL_ENTRY)&_ZN6S231C53v70Ev,
  (VTBL_ENTRY)&_ZN6S231C53v71Ev,
  (VTBL_ENTRY)&_ZN6S231C53v72Ev,
  (VTBL_ENTRY)&_ZN6S231C53v73Ev,
  (VTBL_ENTRY)&_ZN6S231C53v74Ev,
  (VTBL_ENTRY)&_ZN6S231C53v75Ev,
  (VTBL_ENTRY)&_ZN6S231C53v76Ev,
  (VTBL_ENTRY)&_ZN6S231C53v77Ev,
  (VTBL_ENTRY)&_ZN6S231C53v78Ev,
  (VTBL_ENTRY)&_ZN6S231C53v79Ev,
  (VTBL_ENTRY)&_ZN6S231C53v80Ev,
  (VTBL_ENTRY)&_ZN6S231C53v81Ev,
  (VTBL_ENTRY)&_ZN6S231C53v82Ev,
  (VTBL_ENTRY)&_ZN6S231C53v83Ev,
  (VTBL_ENTRY)&_ZN6S231C53v84Ev,
  (VTBL_ENTRY)&_ZN6S231C53v85Ev,
  (VTBL_ENTRY)&_ZN6S231C53v86Ev,
  (VTBL_ENTRY)&_ZN6S231C53v87Ev,
  (VTBL_ENTRY)&_ZN6S231C53v88Ev,
  (VTBL_ENTRY)&_ZN6S231C53v89Ev,
  (VTBL_ENTRY)&_ZN6S231C53v90Ev,
  (VTBL_ENTRY)&_ZN6S231C53v91Ev,
  (VTBL_ENTRY)&_ZN6S231C53v92Ev,
  (VTBL_ENTRY)&_ZN6S231C53v93Ev,
  (VTBL_ENTRY)&_ZN6S231C53v94Ev,
  (VTBL_ENTRY)&_ZN6S231C53v95Ev,
  (VTBL_ENTRY)&_ZN6S231C43v96Ev,
  (VTBL_ENTRY)&_ZN6S231C43v97Ev,
  (VTBL_ENTRY)&_ZN6S231C43v98Ev,
  (VTBL_ENTRY)&_ZN6S231C43v99Ev,
  (VTBL_ENTRY)&_ZN6S231C44v100Ev,
  (VTBL_ENTRY)&_ZN6S231C44v101Ev,
  (VTBL_ENTRY)&_ZN6S231C44v102Ev,
  (VTBL_ENTRY)&_ZN6S231C44v103Ev,
  (VTBL_ENTRY)&_ZN6S231C44v104Ev,
  (VTBL_ENTRY)&_ZN6S231C44v105Ev,
  (VTBL_ENTRY)&_ZN6S231C44v106Ev,
  (VTBL_ENTRY)&_ZN6S231C44v107Ev,
  (VTBL_ENTRY)&_ZN6S231C44v108Ev,
  (VTBL_ENTRY)&_ZN6S231C44v109Ev,
  (VTBL_ENTRY)&_ZN6S231C44v110Ev,
  (VTBL_ENTRY)&_ZN6S231C44v111Ev,
  (VTBL_ENTRY)&_ZN6S231C44v112Ev,
  (VTBL_ENTRY)&_ZN6S231C44v113Ev,
};
extern VTBL_ENTRY _ZTI6S231C4[];
extern  VTBL_ENTRY _ZTV6S231C4[];
Class_Descriptor cd_S231C4 = {  "S231C4", // class name
  bases_S231C4, 2,
  &(vtc_S231C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S231C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S231C4),113, //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  S231C3  : S231C4 {
  ::S165C27 s231c3f0;
  int s231c3f1[2];
  unsigned int s231c3f2:1;
  virtual  ~S231C3(); // _ZN6S231C3D1Ev
  virtual void  v114(); // _ZN6S231C34v114Ev
  virtual void  v115(); // _ZN6S231C34v115Ev
  virtual void  v116(); // _ZN6S231C34v116Ev
  virtual void  v117(); // _ZN6S231C34v117Ev
  virtual void  v118(); // _ZN6S231C34v118Ev
  virtual void  v119(); // _ZN6S231C34v119Ev
  virtual void  v120(); // _ZN6S231C34v120Ev
  S231C3(); // tgen
};
//SIG(-1 S231C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 FC16{ BC17{ BC8}} Fi[2] Fi:1}


 S231C3 ::~S231C3(){ note_dtor("S231C3", this);}
void  S231C3 ::v114(){vfunc_called(this, "_ZN6S231C34v114Ev");}
void  S231C3 ::v115(){vfunc_called(this, "_ZN6S231C34v115Ev");}
void  S231C3 ::v116(){vfunc_called(this, "_ZN6S231C34v116Ev");}
void  S231C3 ::v117(){vfunc_called(this, "_ZN6S231C34v117Ev");}
void  S231C3 ::v118(){vfunc_called(this, "_ZN6S231C34v118Ev");}
void  S231C3 ::v119(){vfunc_called(this, "_ZN6S231C34v119Ev");}
void  S231C3 ::v120(){vfunc_called(this, "_ZN6S231C34v120Ev");}
S231C3 ::S231C3(){ note_ctor("S231C3", this);} // tgen

static void Test_S231C3()
{
  extern Class_Descriptor cd_S231C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,56)];
    init_test(&cd_S231C3, buf);
    S231C3 *dp, &lv = *(dp=new (buf) S231C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,220), "sizeof(S231C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S231C3)");
    check_base_class_offset(lv, (S231C6*)(S231C5*)(S231C4*), 0, "S231C3");
    check_base_class_offset(lv, (S231C5*)(S231C4*), 0, "S231C3");
    check_base_class_offset(lv, (S231C4*), 0, "S231C3");
    check_field_offset(lv, s231c3f0, ABISELECT(256,196), "S231C3.s231c3f0");
    check_field_offset(lv, s231c3f1, ABISELECT(272,208), "S231C3.s231c3f1");
    set_bf_and_test(lv, s231c3f2, ABISELECT(280,216), 0, 1, 1, "S231C3");
    test_class_info(&lv, &cd_S231C3);
    dp->~S231C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS231C3(Test_S231C3, "S231C3", ABISELECT(288,220));

#else // __cplusplus

extern void _ZN6S231C3C1Ev();
extern void _ZN6S231C3D1Ev();
Name_Map name_map_S231C3[] = {
  NSPAIR(_ZN6S231C3C1Ev),
  NSPAIR(_ZN6S231C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S231C6;
extern VTBL_ENTRY _ZTI6S231C6[];
extern  VTBL_ENTRY _ZTV6S231C6[];
extern Class_Descriptor cd_S231C5;
extern VTBL_ENTRY _ZTI6S231C5[];
extern  VTBL_ENTRY _ZTV6S231C5[];
extern Class_Descriptor cd_S231C4;
extern VTBL_ENTRY _ZTI6S231C4[];
extern  VTBL_ENTRY _ZTV6S231C4[];
static Base_Class bases_S231C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S231C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S231C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S231C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S231C3[];
extern void _ZN6S231C3D1Ev();
extern void _ZN6S231C3D0Ev();
extern void _ZN6S231C62v5Ev();
extern void _ZN6S231C62v6Ev();
extern void _ZN6S231C62v7Ev();
extern void _ZN6S231C62v8Ev();
extern void _ZN6S231C62v9Ev();
extern void _ZN6S231C63v10Ev();
extern void _ZN6S231C63v11Ev();
extern void _ZN6S231C63v12Ev();
extern void _ZN6S231C63v13Ev();
extern void _ZN6S231C63v14Ev();
extern void _ZN6S231C63v15Ev();
extern void _ZN6S231C63v16Ev();
extern void _ZN6S231C63v17Ev();
extern void _ZN6S231C63v18Ev();
extern void _ZN6S231C63v19Ev();
extern void _ZN6S231C63v20Ev();
extern void _ZN6S231C63v21Ev();
extern void _ZN6S231C63v22Ev();
extern void _ZN6S231C63v23Ev();
extern void _ZN6S231C63v24Ev();
extern void _ZN6S231C63v25Ev();
extern void _ZN6S231C63v26Ev();
extern void _ZN6S231C63v27Ev();
extern void _ZN6S231C63v28Ev();
extern void _ZN6S231C63v29Ev();
extern void _ZN6S231C63v30Ev();
extern void _ZN6S231C63v31Ev();
extern void _ZN6S231C63v32Ev();
extern void _ZN6S231C63v33Ev();
extern void _ZN6S231C63v34Ev();
extern void _ZN6S231C63v35Ev();
extern void _ZN6S231C63v36Ev();
extern void _ZN6S231C63v37Ev();
extern void _ZN6S231C63v38Ev();
extern void _ZN6S231C63v39Ev();
extern void _ZN6S231C63v40Ev();
extern void _ZN6S231C63v41Ev();
extern void _ZN6S231C63v42Ev();
extern void _ZN6S231C63v43Ev();
extern void _ZN6S231C63v44Ev();
extern void _ZN6S231C63v45Ev();
extern void _ZN6S231C63v46Ev();
extern void _ZN6S231C63v47Ev();
extern void _ZN6S231C63v48Ev();
extern void _ZN6S231C63v49Ev();
extern void _ZN6S231C63v50Ev();
extern void _ZN6S231C63v51Ev();
extern void _ZN6S231C63v52Ev();
extern void _ZN6S231C63v53Ev();
extern void _ZN6S231C63v54Ev();
extern void _ZN6S231C63v55Ev();
extern void _ZN6S231C63v56Ev();
extern void _ZN6S231C63v57Ev();
extern void _ZN6S231C63v58Ev();
extern void _ZN6S231C63v59Ev();
extern void _ZN6S231C63v60Ev();
extern void _ZN6S231C63v61Ev();
extern void _ZN6S231C63v62Ev();
extern void _ZN6S231C63v63Ev();
extern void _ZN6S231C63v64Ev();
extern void _ZN6S231C63v65Ev();
extern void _ZN6S231C63v66Ev();
extern void _ZN6S231C63v67Ev();
extern void _ZN6S231C63v68Ev();
extern void _ZN6S231C53v69Ev();
extern void _ZN6S231C53v70Ev();
extern void _ZN6S231C53v71Ev();
extern void _ZN6S231C53v72Ev();
extern void _ZN6S231C53v73Ev();
extern void _ZN6S231C53v74Ev();
extern void _ZN6S231C53v75Ev();
extern void _ZN6S231C53v76Ev();
extern void _ZN6S231C53v77Ev();
extern void _ZN6S231C53v78Ev();
extern void _ZN6S231C53v79Ev();
extern void _ZN6S231C53v80Ev();
extern void _ZN6S231C53v81Ev();
extern void _ZN6S231C53v82Ev();
extern void _ZN6S231C53v83Ev();
extern void _ZN6S231C53v84Ev();
extern void _ZN6S231C53v85Ev();
extern void _ZN6S231C53v86Ev();
extern void _ZN6S231C53v87Ev();
extern void _ZN6S231C53v88Ev();
extern void _ZN6S231C53v89Ev();
extern void _ZN6S231C53v90Ev();
extern void _ZN6S231C53v91Ev();
extern void _ZN6S231C53v92Ev();
extern void _ZN6S231C53v93Ev();
extern void _ZN6S231C53v94Ev();
extern void _ZN6S231C53v95Ev();
extern void _ZN6S231C43v96Ev();
extern void _ZN6S231C43v97Ev();
extern void _ZN6S231C43v98Ev();
extern void _ZN6S231C43v99Ev();
extern void _ZN6S231C44v100Ev();
extern void _ZN6S231C44v101Ev();
extern void _ZN6S231C44v102Ev();
extern void _ZN6S231C44v103Ev();
extern void _ZN6S231C44v104Ev();
extern void _ZN6S231C44v105Ev();
extern void _ZN6S231C44v106Ev();
extern void _ZN6S231C44v107Ev();
extern void _ZN6S231C44v108Ev();
extern void _ZN6S231C44v109Ev();
extern void _ZN6S231C44v110Ev();
extern void _ZN6S231C44v111Ev();
extern void _ZN6S231C44v112Ev();
extern void _ZN6S231C44v113Ev();
extern void _ZN6S231C34v114Ev();
extern void _ZN6S231C34v115Ev();
extern void _ZN6S231C34v116Ev();
extern void _ZN6S231C34v117Ev();
extern void _ZN6S231C34v118Ev();
extern void _ZN6S231C34v119Ev();
extern void _ZN6S231C34v120Ev();
static  VTBL_ENTRY vtc_S231C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S231C3[0]),
  (VTBL_ENTRY)&_ZN6S231C3D1Ev,
  (VTBL_ENTRY)&_ZN6S231C3D0Ev,
  (VTBL_ENTRY)&_ZN6S231C62v5Ev,
  (VTBL_ENTRY)&_ZN6S231C62v6Ev,
  (VTBL_ENTRY)&_ZN6S231C62v7Ev,
  (VTBL_ENTRY)&_ZN6S231C62v8Ev,
  (VTBL_ENTRY)&_ZN6S231C62v9Ev,
  (VTBL_ENTRY)&_ZN6S231C63v10Ev,
  (VTBL_ENTRY)&_ZN6S231C63v11Ev,
  (VTBL_ENTRY)&_ZN6S231C63v12Ev,
  (VTBL_ENTRY)&_ZN6S231C63v13Ev,
  (VTBL_ENTRY)&_ZN6S231C63v14Ev,
  (VTBL_ENTRY)&_ZN6S231C63v15Ev,
  (VTBL_ENTRY)&_ZN6S231C63v16Ev,
  (VTBL_ENTRY)&_ZN6S231C63v17Ev,
  (VTBL_ENTRY)&_ZN6S231C63v18Ev,
  (VTBL_ENTRY)&_ZN6S231C63v19Ev,
  (VTBL_ENTRY)&_ZN6S231C63v20Ev,
  (VTBL_ENTRY)&_ZN6S231C63v21Ev,
  (VTBL_ENTRY)&_ZN6S231C63v22Ev,
  (VTBL_ENTRY)&_ZN6S231C63v23Ev,
  (VTBL_ENTRY)&_ZN6S231C63v24Ev,
  (VTBL_ENTRY)&_ZN6S231C63v25Ev,
  (VTBL_ENTRY)&_ZN6S231C63v26Ev,
  (VTBL_ENTRY)&_ZN6S231C63v27Ev,
  (VTBL_ENTRY)&_ZN6S231C63v28Ev,
  (VTBL_ENTRY)&_ZN6S231C63v29Ev,
  (VTBL_ENTRY)&_ZN6S231C63v30Ev,
  (VTBL_ENTRY)&_ZN6S231C63v31Ev,
  (VTBL_ENTRY)&_ZN6S231C63v32Ev,
  (VTBL_ENTRY)&_ZN6S231C63v33Ev,
  (VTBL_ENTRY)&_ZN6S231C63v34Ev,
  (VTBL_ENTRY)&_ZN6S231C63v35Ev,
  (VTBL_ENTRY)&_ZN6S231C63v36Ev,
  (VTBL_ENTRY)&_ZN6S231C63v37Ev,
  (VTBL_ENTRY)&_ZN6S231C63v38Ev,
  (VTBL_ENTRY)&_ZN6S231C63v39Ev,
  (VTBL_ENTRY)&_ZN6S231C63v40Ev,
  (VTBL_ENTRY)&_ZN6S231C63v41Ev,
  (VTBL_ENTRY)&_ZN6S231C63v42Ev,
  (VTBL_ENTRY)&_ZN6S231C63v43Ev,
  (VTBL_ENTRY)&_ZN6S231C63v44Ev,
  (VTBL_ENTRY)&_ZN6S231C63v45Ev,
  (VTBL_ENTRY)&_ZN6S231C63v46Ev,
  (VTBL_ENTRY)&_ZN6S231C63v47Ev,
  (VTBL_ENTRY)&_ZN6S231C63v48Ev,
  (VTBL_ENTRY)&_ZN6S231C63v49Ev,
  (VTBL_ENTRY)&_ZN6S231C63v50Ev,
  (VTBL_ENTRY)&_ZN6S231C63v51Ev,
  (VTBL_ENTRY)&_ZN6S231C63v52Ev,
  (VTBL_ENTRY)&_ZN6S231C63v53Ev,
  (VTBL_ENTRY)&_ZN6S231C63v54Ev,
  (VTBL_ENTRY)&_ZN6S231C63v55Ev,
  (VTBL_ENTRY)&_ZN6S231C63v56Ev,
  (VTBL_ENTRY)&_ZN6S231C63v57Ev,
  (VTBL_ENTRY)&_ZN6S231C63v58Ev,
  (VTBL_ENTRY)&_ZN6S231C63v59Ev,
  (VTBL_ENTRY)&_ZN6S231C63v60Ev,
  (VTBL_ENTRY)&_ZN6S231C63v61Ev,
  (VTBL_ENTRY)&_ZN6S231C63v62Ev,
  (VTBL_ENTRY)&_ZN6S231C63v63Ev,
  (VTBL_ENTRY)&_ZN6S231C63v64Ev,
  (VTBL_ENTRY)&_ZN6S231C63v65Ev,
  (VTBL_ENTRY)&_ZN6S231C63v66Ev,
  (VTBL_ENTRY)&_ZN6S231C63v67Ev,
  (VTBL_ENTRY)&_ZN6S231C63v68Ev,
  (VTBL_ENTRY)&_ZN6S231C53v69Ev,
  (VTBL_ENTRY)&_ZN6S231C53v70Ev,
  (VTBL_ENTRY)&_ZN6S231C53v71Ev,
  (VTBL_ENTRY)&_ZN6S231C53v72Ev,
  (VTBL_ENTRY)&_ZN6S231C53v73Ev,
  (VTBL_ENTRY)&_ZN6S231C53v74Ev,
  (VTBL_ENTRY)&_ZN6S231C53v75Ev,
  (VTBL_ENTRY)&_ZN6S231C53v76Ev,
  (VTBL_ENTRY)&_ZN6S231C53v77Ev,
  (VTBL_ENTRY)&_ZN6S231C53v78Ev,
  (VTBL_ENTRY)&_ZN6S231C53v79Ev,
  (VTBL_ENTRY)&_ZN6S231C53v80Ev,
  (VTBL_ENTRY)&_ZN6S231C53v81Ev,
  (VTBL_ENTRY)&_ZN6S231C53v82Ev,
  (VTBL_ENTRY)&_ZN6S231C53v83Ev,
  (VTBL_ENTRY)&_ZN6S231C53v84Ev,
  (VTBL_ENTRY)&_ZN6S231C53v85Ev,
  (VTBL_ENTRY)&_ZN6S231C53v86Ev,
  (VTBL_ENTRY)&_ZN6S231C53v87Ev,
  (VTBL_ENTRY)&_ZN6S231C53v88Ev,
  (VTBL_ENTRY)&_ZN6S231C53v89Ev,
  (VTBL_ENTRY)&_ZN6S231C53v90Ev,
  (VTBL_ENTRY)&_ZN6S231C53v91Ev,
  (VTBL_ENTRY)&_ZN6S231C53v92Ev,
  (VTBL_ENTRY)&_ZN6S231C53v93Ev,
  (VTBL_ENTRY)&_ZN6S231C53v94Ev,
  (VTBL_ENTRY)&_ZN6S231C53v95Ev,
  (VTBL_ENTRY)&_ZN6S231C43v96Ev,
  (VTBL_ENTRY)&_ZN6S231C43v97Ev,
  (VTBL_ENTRY)&_ZN6S231C43v98Ev,
  (VTBL_ENTRY)&_ZN6S231C43v99Ev,
  (VTBL_ENTRY)&_ZN6S231C44v100Ev,
  (VTBL_ENTRY)&_ZN6S231C44v101Ev,
  (VTBL_ENTRY)&_ZN6S231C44v102Ev,
  (VTBL_ENTRY)&_ZN6S231C44v103Ev,
  (VTBL_ENTRY)&_ZN6S231C44v104Ev,
  (VTBL_ENTRY)&_ZN6S231C44v105Ev,
  (VTBL_ENTRY)&_ZN6S231C44v106Ev,
  (VTBL_ENTRY)&_ZN6S231C44v107Ev,
  (VTBL_ENTRY)&_ZN6S231C44v108Ev,
  (VTBL_ENTRY)&_ZN6S231C44v109Ev,
  (VTBL_ENTRY)&_ZN6S231C44v110Ev,
  (VTBL_ENTRY)&_ZN6S231C44v111Ev,
  (VTBL_ENTRY)&_ZN6S231C44v112Ev,
  (VTBL_ENTRY)&_ZN6S231C44v113Ev,
  (VTBL_ENTRY)&_ZN6S231C34v114Ev,
  (VTBL_ENTRY)&_ZN6S231C34v115Ev,
  (VTBL_ENTRY)&_ZN6S231C34v116Ev,
  (VTBL_ENTRY)&_ZN6S231C34v117Ev,
  (VTBL_ENTRY)&_ZN6S231C34v118Ev,
  (VTBL_ENTRY)&_ZN6S231C34v119Ev,
  (VTBL_ENTRY)&_ZN6S231C34v120Ev,
};
extern VTBL_ENTRY _ZTI6S231C3[];
extern  VTBL_ENTRY _ZTV6S231C3[];
Class_Descriptor cd_S231C3 = {  "S231C3", // class name
  bases_S231C3, 3,
  &(vtc_S231C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,220), // object size
  NSPAIRA(_ZTI6S231C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S231C3),120, //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  S231C2  : S231C3 {
  int s231c2f0;
  ::S165C27 s231c2f1;
  int s231c2f2;
  virtual  ~S231C2(); // _ZN6S231C2D1Ev
  virtual void  v121(); // _ZN6S231C24v121Ev
  virtual void  v122(); // _ZN6S231C24v122Ev
  virtual void  v123(); // _ZN6S231C24v123Ev
  virtual void  v124(); // _ZN6S231C24v124Ev
  virtual void  v125(); // _ZN6S231C24v125Ev
  virtual void  v126(); // _ZN6S231C24v126Ev
  S231C2(); // tgen
};
//SIG(-1 S231C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v93 v94 v95 v96 v97 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC15{ BC16{ BC9}} Fi:1} vd v116 v117 v118 v119 v120 v121 v122 FC17{ BC18{ BC9}} Fi[2] Fi:1} vd v1 v2 v3 v4 v5 v6 Fi FC17 Fi}


 S231C2 ::~S231C2(){ note_dtor("S231C2", this);}
void  S231C2 ::v121(){vfunc_called(this, "_ZN6S231C24v121Ev");}
void  S231C2 ::v122(){vfunc_called(this, "_ZN6S231C24v122Ev");}
void  S231C2 ::v123(){vfunc_called(this, "_ZN6S231C24v123Ev");}
void  S231C2 ::v124(){vfunc_called(this, "_ZN6S231C24v124Ev");}
void  S231C2 ::v125(){vfunc_called(this, "_ZN6S231C24v125Ev");}
void  S231C2 ::v126(){vfunc_called(this, "_ZN6S231C24v126Ev");}
S231C2 ::S231C2(){ note_ctor("S231C2", this);} // tgen

static void Test_S231C2()
{
  extern Class_Descriptor cd_S231C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,61)];
    init_test(&cd_S231C2, buf);
    S231C2 *dp, &lv = *(dp=new (buf) S231C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,240), "sizeof(S231C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S231C2)");
    check_base_class_offset(lv, (S231C6*)(S231C5*)(S231C4*)(S231C3*), 0, "S231C2");
    check_base_class_offset(lv, (S231C5*)(S231C4*)(S231C3*), 0, "S231C2");
    check_base_class_offset(lv, (S231C4*)(S231C3*), 0, "S231C2");
    check_base_class_offset(lv, (S231C3*), 0, "S231C2");
    check_field_offset(lv, s231c2f0, ABISELECT(284,220), "S231C2.s231c2f0");
    check_field_offset(lv, s231c2f1, ABISELECT(288,224), "S231C2.s231c2f1");
    check_field_offset(lv, s231c2f2, ABISELECT(304,236), "S231C2.s231c2f2");
    test_class_info(&lv, &cd_S231C2);
    dp->~S231C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS231C2(Test_S231C2, "S231C2", ABISELECT(312,240));

#else // __cplusplus

extern void _ZN6S231C2C1Ev();
extern void _ZN6S231C2D1Ev();
Name_Map name_map_S231C2[] = {
  NSPAIR(_ZN6S231C2C1Ev),
  NSPAIR(_ZN6S231C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S231C6;
extern VTBL_ENTRY _ZTI6S231C6[];
extern  VTBL_ENTRY _ZTV6S231C6[];
extern Class_Descriptor cd_S231C5;
extern VTBL_ENTRY _ZTI6S231C5[];
extern  VTBL_ENTRY _ZTV6S231C5[];
extern Class_Descriptor cd_S231C4;
extern VTBL_ENTRY _ZTI6S231C4[];
extern  VTBL_ENTRY _ZTV6S231C4[];
extern Class_Descriptor cd_S231C3;
extern VTBL_ENTRY _ZTI6S231C3[];
extern  VTBL_ENTRY _ZTV6S231C3[];
static Base_Class bases_S231C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S231C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S231C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S231C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S231C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S231C2[];
extern void _ZN6S231C2D1Ev();
extern void _ZN6S231C2D0Ev();
extern void _ZN6S231C62v5Ev();
extern void _ZN6S231C62v6Ev();
extern void _ZN6S231C62v7Ev();
extern void _ZN6S231C62v8Ev();
extern void _ZN6S231C62v9Ev();
extern void _ZN6S231C63v10Ev();
extern void _ZN6S231C63v11Ev();
extern void _ZN6S231C63v12Ev();
extern void _ZN6S231C63v13Ev();
extern void _ZN6S231C63v14Ev();
extern void _ZN6S231C63v15Ev();
extern void _ZN6S231C63v16Ev();
extern void _ZN6S231C63v17Ev();
extern void _ZN6S231C63v18Ev();
extern void _ZN6S231C63v19Ev();
extern void _ZN6S231C63v20Ev();
extern void _ZN6S231C63v21Ev();
extern void _ZN6S231C63v22Ev();
extern void _ZN6S231C63v23Ev();
extern void _ZN6S231C63v24Ev();
extern void _ZN6S231C63v25Ev();
extern void _ZN6S231C63v26Ev();
extern void _ZN6S231C63v27Ev();
extern void _ZN6S231C63v28Ev();
extern void _ZN6S231C63v29Ev();
extern void _ZN6S231C63v30Ev();
extern void _ZN6S231C63v31Ev();
extern void _ZN6S231C63v32Ev();
extern void _ZN6S231C63v33Ev();
extern void _ZN6S231C63v34Ev();
extern void _ZN6S231C63v35Ev();
extern void _ZN6S231C63v36Ev();
extern void _ZN6S231C63v37Ev();
extern void _ZN6S231C63v38Ev();
extern void _ZN6S231C63v39Ev();
extern void _ZN6S231C63v40Ev();
extern void _ZN6S231C63v41Ev();
extern void _ZN6S231C63v42Ev();
extern void _ZN6S231C63v43Ev();
extern void _ZN6S231C63v44Ev();
extern void _ZN6S231C63v45Ev();
extern void _ZN6S231C63v46Ev();
extern void _ZN6S231C63v47Ev();
extern void _ZN6S231C63v48Ev();
extern void _ZN6S231C63v49Ev();
extern void _ZN6S231C63v50Ev();
extern void _ZN6S231C63v51Ev();
extern void _ZN6S231C63v52Ev();
extern void _ZN6S231C63v53Ev();
extern void _ZN6S231C63v54Ev();
extern void _ZN6S231C63v55Ev();
extern void _ZN6S231C63v56Ev();
extern void _ZN6S231C63v57Ev();
extern void _ZN6S231C63v58Ev();
extern void _ZN6S231C63v59Ev();
extern void _ZN6S231C63v60Ev();
extern void _ZN6S231C63v61Ev();
extern void _ZN6S231C63v62Ev();
extern void _ZN6S231C63v63Ev();
extern void _ZN6S231C63v64Ev();
extern void _ZN6S231C63v65Ev();
extern void _ZN6S231C63v66Ev();
extern void _ZN6S231C63v67Ev();
extern void _ZN6S231C63v68Ev();
extern void _ZN6S231C53v69Ev();
extern void _ZN6S231C53v70Ev();
extern void _ZN6S231C53v71Ev();
extern void _ZN6S231C53v72Ev();
extern void _ZN6S231C53v73Ev();
extern void _ZN6S231C53v74Ev();
extern void _ZN6S231C53v75Ev();
extern void _ZN6S231C53v76Ev();
extern void _ZN6S231C53v77Ev();
extern void _ZN6S231C53v78Ev();
extern void _ZN6S231C53v79Ev();
extern void _ZN6S231C53v80Ev();
extern void _ZN6S231C53v81Ev();
extern void _ZN6S231C53v82Ev();
extern void _ZN6S231C53v83Ev();
extern void _ZN6S231C53v84Ev();
extern void _ZN6S231C53v85Ev();
extern void _ZN6S231C53v86Ev();
extern void _ZN6S231C53v87Ev();
extern void _ZN6S231C53v88Ev();
extern void _ZN6S231C53v89Ev();
extern void _ZN6S231C53v90Ev();
extern void _ZN6S231C53v91Ev();
extern void _ZN6S231C53v92Ev();
extern void _ZN6S231C53v93Ev();
extern void _ZN6S231C53v94Ev();
extern void _ZN6S231C53v95Ev();
extern void _ZN6S231C43v96Ev();
extern void _ZN6S231C43v97Ev();
extern void _ZN6S231C43v98Ev();
extern void _ZN6S231C43v99Ev();
extern void _ZN6S231C44v100Ev();
extern void _ZN6S231C44v101Ev();
extern void _ZN6S231C44v102Ev();
extern void _ZN6S231C44v103Ev();
extern void _ZN6S231C44v104Ev();
extern void _ZN6S231C44v105Ev();
extern void _ZN6S231C44v106Ev();
extern void _ZN6S231C44v107Ev();
extern void _ZN6S231C44v108Ev();
extern void _ZN6S231C44v109Ev();
extern void _ZN6S231C44v110Ev();
extern void _ZN6S231C44v111Ev();
extern void _ZN6S231C44v112Ev();
extern void _ZN6S231C44v113Ev();
extern void _ZN6S231C34v114Ev();
extern void _ZN6S231C34v115Ev();
extern void _ZN6S231C34v116Ev();
extern void _ZN6S231C34v117Ev();
extern void _ZN6S231C34v118Ev();
extern void _ZN6S231C34v119Ev();
extern void _ZN6S231C34v120Ev();
extern void _ZN6S231C24v121Ev();
extern void _ZN6S231C24v122Ev();
extern void _ZN6S231C24v123Ev();
extern void _ZN6S231C24v124Ev();
extern void _ZN6S231C24v125Ev();
extern void _ZN6S231C24v126Ev();
static  VTBL_ENTRY vtc_S231C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S231C2[0]),
  (VTBL_ENTRY)&_ZN6S231C2D1Ev,
  (VTBL_ENTRY)&_ZN6S231C2D0Ev,
  (VTBL_ENTRY)&_ZN6S231C62v5Ev,
  (VTBL_ENTRY)&_ZN6S231C62v6Ev,
  (VTBL_ENTRY)&_ZN6S231C62v7Ev,
  (VTBL_ENTRY)&_ZN6S231C62v8Ev,
  (VTBL_ENTRY)&_ZN6S231C62v9Ev,
  (VTBL_ENTRY)&_ZN6S231C63v10Ev,
  (VTBL_ENTRY)&_ZN6S231C63v11Ev,
  (VTBL_ENTRY)&_ZN6S231C63v12Ev,
  (VTBL_ENTRY)&_ZN6S231C63v13Ev,
  (VTBL_ENTRY)&_ZN6S231C63v14Ev,
  (VTBL_ENTRY)&_ZN6S231C63v15Ev,
  (VTBL_ENTRY)&_ZN6S231C63v16Ev,
  (VTBL_ENTRY)&_ZN6S231C63v17Ev,
  (VTBL_ENTRY)&_ZN6S231C63v18Ev,
  (VTBL_ENTRY)&_ZN6S231C63v19Ev,
  (VTBL_ENTRY)&_ZN6S231C63v20Ev,
  (VTBL_ENTRY)&_ZN6S231C63v21Ev,
  (VTBL_ENTRY)&_ZN6S231C63v22Ev,
  (VTBL_ENTRY)&_ZN6S231C63v23Ev,
  (VTBL_ENTRY)&_ZN6S231C63v24Ev,
  (VTBL_ENTRY)&_ZN6S231C63v25Ev,
  (VTBL_ENTRY)&_ZN6S231C63v26Ev,
  (VTBL_ENTRY)&_ZN6S231C63v27Ev,
  (VTBL_ENTRY)&_ZN6S231C63v28Ev,
  (VTBL_ENTRY)&_ZN6S231C63v29Ev,
  (VTBL_ENTRY)&_ZN6S231C63v30Ev,
  (VTBL_ENTRY)&_ZN6S231C63v31Ev,
  (VTBL_ENTRY)&_ZN6S231C63v32Ev,
  (VTBL_ENTRY)&_ZN6S231C63v33Ev,
  (VTBL_ENTRY)&_ZN6S231C63v34Ev,
  (VTBL_ENTRY)&_ZN6S231C63v35Ev,
  (VTBL_ENTRY)&_ZN6S231C63v36Ev,
  (VTBL_ENTRY)&_ZN6S231C63v37Ev,
  (VTBL_ENTRY)&_ZN6S231C63v38Ev,
  (VTBL_ENTRY)&_ZN6S231C63v39Ev,
  (VTBL_ENTRY)&_ZN6S231C63v40Ev,
  (VTBL_ENTRY)&_ZN6S231C63v41Ev,
  (VTBL_ENTRY)&_ZN6S231C63v42Ev,
  (VTBL_ENTRY)&_ZN6S231C63v43Ev,
  (VTBL_ENTRY)&_ZN6S231C63v44Ev,
  (VTBL_ENTRY)&_ZN6S231C63v45Ev,
  (VTBL_ENTRY)&_ZN6S231C63v46Ev,
  (VTBL_ENTRY)&_ZN6S231C63v47Ev,
  (VTBL_ENTRY)&_ZN6S231C63v48Ev,
  (VTBL_ENTRY)&_ZN6S231C63v49Ev,
  (VTBL_ENTRY)&_ZN6S231C63v50Ev,
  (VTBL_ENTRY)&_ZN6S231C63v51Ev,
  (VTBL_ENTRY)&_ZN6S231C63v52Ev,
  (VTBL_ENTRY)&_ZN6S231C63v53Ev,
  (VTBL_ENTRY)&_ZN6S231C63v54Ev,
  (VTBL_ENTRY)&_ZN6S231C63v55Ev,
  (VTBL_ENTRY)&_ZN6S231C63v56Ev,
  (VTBL_ENTRY)&_ZN6S231C63v57Ev,
  (VTBL_ENTRY)&_ZN6S231C63v58Ev,
  (VTBL_ENTRY)&_ZN6S231C63v59Ev,
  (VTBL_ENTRY)&_ZN6S231C63v60Ev,
  (VTBL_ENTRY)&_ZN6S231C63v61Ev,
  (VTBL_ENTRY)&_ZN6S231C63v62Ev,
  (VTBL_ENTRY)&_ZN6S231C63v63Ev,
  (VTBL_ENTRY)&_ZN6S231C63v64Ev,
  (VTBL_ENTRY)&_ZN6S231C63v65Ev,
  (VTBL_ENTRY)&_ZN6S231C63v66Ev,
  (VTBL_ENTRY)&_ZN6S231C63v67Ev,
  (VTBL_ENTRY)&_ZN6S231C63v68Ev,
  (VTBL_ENTRY)&_ZN6S231C53v69Ev,
  (VTBL_ENTRY)&_ZN6S231C53v70Ev,
  (VTBL_ENTRY)&_ZN6S231C53v71Ev,
  (VTBL_ENTRY)&_ZN6S231C53v72Ev,
  (VTBL_ENTRY)&_ZN6S231C53v73Ev,
  (VTBL_ENTRY)&_ZN6S231C53v74Ev,
  (VTBL_ENTRY)&_ZN6S231C53v75Ev,
  (VTBL_ENTRY)&_ZN6S231C53v76Ev,
  (VTBL_ENTRY)&_ZN6S231C53v77Ev,
  (VTBL_ENTRY)&_ZN6S231C53v78Ev,
  (VTBL_ENTRY)&_ZN6S231C53v79Ev,
  (VTBL_ENTRY)&_ZN6S231C53v80Ev,
  (VTBL_ENTRY)&_ZN6S231C53v81Ev,
  (VTBL_ENTRY)&_ZN6S231C53v82Ev,
  (VTBL_ENTRY)&_ZN6S231C53v83Ev,
  (VTBL_ENTRY)&_ZN6S231C53v84Ev,
  (VTBL_ENTRY)&_ZN6S231C53v85Ev,
  (VTBL_ENTRY)&_ZN6S231C53v86Ev,
  (VTBL_ENTRY)&_ZN6S231C53v87Ev,
  (VTBL_ENTRY)&_ZN6S231C53v88Ev,
  (VTBL_ENTRY)&_ZN6S231C53v89Ev,
  (VTBL_ENTRY)&_ZN6S231C53v90Ev,
  (VTBL_ENTRY)&_ZN6S231C53v91Ev,
  (VTBL_ENTRY)&_ZN6S231C53v92Ev,
  (VTBL_ENTRY)&_ZN6S231C53v93Ev,
  (VTBL_ENTRY)&_ZN6S231C53v94Ev,
  (VTBL_ENTRY)&_ZN6S231C53v95Ev,
  (VTBL_ENTRY)&_ZN6S231C43v96Ev,
  (VTBL_ENTRY)&_ZN6S231C43v97Ev,
  (VTBL_ENTRY)&_ZN6S231C43v98Ev,
  (VTBL_ENTRY)&_ZN6S231C43v99Ev,
  (VTBL_ENTRY)&_ZN6S231C44v100Ev,
  (VTBL_ENTRY)&_ZN6S231C44v101Ev,
  (VTBL_ENTRY)&_ZN6S231C44v102Ev,
  (VTBL_ENTRY)&_ZN6S231C44v103Ev,
  (VTBL_ENTRY)&_ZN6S231C44v104Ev,
  (VTBL_ENTRY)&_ZN6S231C44v105Ev,
  (VTBL_ENTRY)&_ZN6S231C44v106Ev,
  (VTBL_ENTRY)&_ZN6S231C44v107Ev,
  (VTBL_ENTRY)&_ZN6S231C44v108Ev,
  (VTBL_ENTRY)&_ZN6S231C44v109Ev,
  (VTBL_ENTRY)&_ZN6S231C44v110Ev,
  (VTBL_ENTRY)&_ZN6S231C44v111Ev,
  (VTBL_ENTRY)&_ZN6S231C44v112Ev,
  (VTBL_ENTRY)&_ZN6S231C44v113Ev,
  (VTBL_ENTRY)&_ZN6S231C34v114Ev,
  (VTBL_ENTRY)&_ZN6S231C34v115Ev,
  (VTBL_ENTRY)&_ZN6S231C34v116Ev,
  (VTBL_ENTRY)&_ZN6S231C34v117Ev,
  (VTBL_ENTRY)&_ZN6S231C34v118Ev,
  (VTBL_ENTRY)&_ZN6S231C34v119Ev,
  (VTBL_ENTRY)&_ZN6S231C34v120Ev,
  (VTBL_ENTRY)&_ZN6S231C24v121Ev,
  (VTBL_ENTRY)&_ZN6S231C24v122Ev,
  (VTBL_ENTRY)&_ZN6S231C24v123Ev,
  (VTBL_ENTRY)&_ZN6S231C24v124Ev,
  (VTBL_ENTRY)&_ZN6S231C24v125Ev,
  (VTBL_ENTRY)&_ZN6S231C24v126Ev,
};
extern VTBL_ENTRY _ZTI6S231C2[];
extern  VTBL_ENTRY _ZTV6S231C2[];
Class_Descriptor cd_S231C2 = {  "S231C2", // class name
  bases_S231C2, 4,
  &(vtc_S231C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,240), // object size
  NSPAIRA(_ZTI6S231C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S231C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S231C1  : S231C2 {
  unsigned int s231c1f0:1;
  void *s231c1f1;
  virtual  ~S231C1(); // _ZN6S231C1D1Ev
  virtual void  v1(); // _ZN6S231C12v1Ev
  virtual void  v2(); // _ZN6S231C12v2Ev
  virtual void  v3(); // _ZN6S231C12v3Ev
  virtual void  v4(); // _ZN6S231C12v4Ev
  S231C1(); // tgen
};
//SIG(1 S231C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 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 FC7{ 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 v91 v92 v93 v94 v95 Fp FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC7 FC11{ BC12{ BC10}} FC13{ m FC14{ m Fi[4]} FC15{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 FC16{ BC17{ BC10}} Fi:1} vd v114 v115 v116 v117 v118 v119 v120 FC18{ BC19{ BC10}} Fi[2] Fi:1} vd v121 v122 v123 v124 v125 v126 Fi FC18 Fi} vd v1 v2 v3 v4 Fi:1 Fp}


 S231C1 ::~S231C1(){ note_dtor("S231C1", this);}
void  S231C1 ::v1(){vfunc_called(this, "_ZN6S231C12v1Ev");}
void  S231C1 ::v2(){vfunc_called(this, "_ZN6S231C12v2Ev");}
void  S231C1 ::v3(){vfunc_called(this, "_ZN6S231C12v3Ev");}
void  S231C1 ::v4(){vfunc_called(this, "_ZN6S231C12v4Ev");}
S231C1 ::S231C1(){ note_ctor("S231C1", this);} // tgen

static void Test_S231C1()
{
  extern Class_Descriptor cd_S231C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,63)];
    init_test(&cd_S231C1, buf);
    S231C1 *dp, &lv = *(dp=new (buf) S231C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,248), "sizeof(S231C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S231C1)");
    check_base_class_offset(lv, (S231C6*)(S231C5*)(S231C4*)(S231C3*)(S231C2*), 0, "S231C1");
    check_base_class_offset(lv, (S231C5*)(S231C4*)(S231C3*)(S231C2*), 0, "S231C1");
    check_base_class_offset(lv, (S231C4*)(S231C3*)(S231C2*), 0, "S231C1");
    check_base_class_offset(lv, (S231C3*)(S231C2*), 0, "S231C1");
    check_base_class_offset(lv, (S231C2*), 0, "S231C1");
    set_bf_and_test(lv, s231c1f0, ABISELECT(308,240), 0, 1, 1, "S231C1");
    check_field_offset(lv, s231c1f1, ABISELECT(312,244), "S231C1.s231c1f1");
    test_class_info(&lv, &cd_S231C1);
    dp->~S231C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS231C1(Test_S231C1, "S231C1", ABISELECT(320,248));

#else // __cplusplus

extern void _ZN6S231C1C1Ev();
extern void _ZN6S231C1D1Ev();
Name_Map name_map_S231C1[] = {
  NSPAIR(_ZN6S231C1C1Ev),
  NSPAIR(_ZN6S231C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S231C6;
extern VTBL_ENTRY _ZTI6S231C6[];
extern  VTBL_ENTRY _ZTV6S231C6[];
extern Class_Descriptor cd_S231C5;
extern VTBL_ENTRY _ZTI6S231C5[];
extern  VTBL_ENTRY _ZTV6S231C5[];
extern Class_Descriptor cd_S231C4;
extern VTBL_ENTRY _ZTI6S231C4[];
extern  VTBL_ENTRY _ZTV6S231C4[];
extern Class_Descriptor cd_S231C3;
extern VTBL_ENTRY _ZTI6S231C3[];
extern  VTBL_ENTRY _ZTV6S231C3[];
extern Class_Descriptor cd_S231C2;
extern VTBL_ENTRY _ZTI6S231C2[];
extern  VTBL_ENTRY _ZTV6S231C2[];
static Base_Class bases_S231C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S231C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S231C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S231C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S231C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S231C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S231C1[];
extern void _ZN6S231C1D1Ev();
extern void _ZN6S231C1D0Ev();
extern void _ZN6S231C62v5Ev();
extern void _ZN6S231C62v6Ev();
extern void _ZN6S231C62v7Ev();
extern void _ZN6S231C62v8Ev();
extern void _ZN6S231C62v9Ev();
extern void _ZN6S231C63v10Ev();
extern void _ZN6S231C63v11Ev();
extern void _ZN6S231C63v12Ev();
extern void _ZN6S231C63v13Ev();
extern void _ZN6S231C63v14Ev();
extern void _ZN6S231C63v15Ev();
extern void _ZN6S231C63v16Ev();
extern void _ZN6S231C63v17Ev();
extern void _ZN6S231C63v18Ev();
extern void _ZN6S231C63v19Ev();
extern void _ZN6S231C63v20Ev();
extern void _ZN6S231C63v21Ev();
extern void _ZN6S231C63v22Ev();
extern void _ZN6S231C63v23Ev();
extern void _ZN6S231C63v24Ev();
extern void _ZN6S231C63v25Ev();
extern void _ZN6S231C63v26Ev();
extern void _ZN6S231C63v27Ev();
extern void _ZN6S231C63v28Ev();
extern void _ZN6S231C63v29Ev();
extern void _ZN6S231C63v30Ev();
extern void _ZN6S231C63v31Ev();
extern void _ZN6S231C63v32Ev();
extern void _ZN6S231C63v33Ev();
extern void _ZN6S231C63v34Ev();
extern void _ZN6S231C63v35Ev();
extern void _ZN6S231C63v36Ev();
extern void _ZN6S231C63v37Ev();
extern void _ZN6S231C63v38Ev();
extern void _ZN6S231C63v39Ev();
extern void _ZN6S231C63v40Ev();
extern void _ZN6S231C63v41Ev();
extern void _ZN6S231C63v42Ev();
extern void _ZN6S231C63v43Ev();
extern void _ZN6S231C63v44Ev();
extern void _ZN6S231C63v45Ev();
extern void _ZN6S231C63v46Ev();
extern void _ZN6S231C63v47Ev();
extern void _ZN6S231C63v48Ev();
extern void _ZN6S231C63v49Ev();
extern void _ZN6S231C63v50Ev();
extern void _ZN6S231C63v51Ev();
extern void _ZN6S231C63v52Ev();
extern void _ZN6S231C63v53Ev();
extern void _ZN6S231C63v54Ev();
extern void _ZN6S231C63v55Ev();
extern void _ZN6S231C63v56Ev();
extern void _ZN6S231C63v57Ev();
extern void _ZN6S231C63v58Ev();
extern void _ZN6S231C63v59Ev();
extern void _ZN6S231C63v60Ev();
extern void _ZN6S231C63v61Ev();
extern void _ZN6S231C63v62Ev();
extern void _ZN6S231C63v63Ev();
extern void _ZN6S231C63v64Ev();
extern void _ZN6S231C63v65Ev();
extern void _ZN6S231C63v66Ev();
extern void _ZN6S231C63v67Ev();
extern void _ZN6S231C63v68Ev();
extern void _ZN6S231C53v69Ev();
extern void _ZN6S231C53v70Ev();
extern void _ZN6S231C53v71Ev();
extern void _ZN6S231C53v72Ev();
extern void _ZN6S231C53v73Ev();
extern void _ZN6S231C53v74Ev();
extern void _ZN6S231C53v75Ev();
extern void _ZN6S231C53v76Ev();
extern void _ZN6S231C53v77Ev();
extern void _ZN6S231C53v78Ev();
extern void _ZN6S231C53v79Ev();
extern void _ZN6S231C53v80Ev();
extern void _ZN6S231C53v81Ev();
extern void _ZN6S231C53v82Ev();
extern void _ZN6S231C53v83Ev();
extern void _ZN6S231C53v84Ev();
extern void _ZN6S231C53v85Ev();
extern void _ZN6S231C53v86Ev();
extern void _ZN6S231C53v87Ev();
extern void _ZN6S231C53v88Ev();
extern void _ZN6S231C53v89Ev();
extern void _ZN6S231C53v90Ev();
extern void _ZN6S231C53v91Ev();
extern void _ZN6S231C53v92Ev();
extern void _ZN6S231C53v93Ev();
extern void _ZN6S231C53v94Ev();
extern void _ZN6S231C53v95Ev();
extern void _ZN6S231C43v96Ev();
extern void _ZN6S231C43v97Ev();
extern void _ZN6S231C43v98Ev();
extern void _ZN6S231C43v99Ev();
extern void _ZN6S231C44v100Ev();
extern void _ZN6S231C44v101Ev();
extern void _ZN6S231C44v102Ev();
extern void _ZN6S231C44v103Ev();
extern void _ZN6S231C44v104Ev();
extern void _ZN6S231C44v105Ev();
extern void _ZN6S231C44v106Ev();
extern void _ZN6S231C44v107Ev();
extern void _ZN6S231C44v108Ev();
extern void _ZN6S231C44v109Ev();
extern void _ZN6S231C44v110Ev();
extern void _ZN6S231C44v111Ev();
extern void _ZN6S231C44v112Ev();
extern void _ZN6S231C44v113Ev();
extern void _ZN6S231C34v114Ev();
extern void _ZN6S231C34v115Ev();
extern void _ZN6S231C34v116Ev();
extern void _ZN6S231C34v117Ev();
extern void _ZN6S231C34v118Ev();
extern void _ZN6S231C34v119Ev();
extern void _ZN6S231C34v120Ev();
extern void _ZN6S231C24v121Ev();
extern void _ZN6S231C24v122Ev();
extern void _ZN6S231C24v123Ev();
extern void _ZN6S231C24v124Ev();
extern void _ZN6S231C24v125Ev();
extern void _ZN6S231C24v126Ev();
extern void _ZN6S231C12v1Ev();
extern void _ZN6S231C12v2Ev();
extern void _ZN6S231C12v3Ev();
extern void _ZN6S231C12v4Ev();
static  VTBL_ENTRY vtc_S231C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S231C1[0]),
  (VTBL_ENTRY)&_ZN6S231C1D1Ev,
  (VTBL_ENTRY)&_ZN6S231C1D0Ev,
  (VTBL_ENTRY)&_ZN6S231C62v5Ev,
  (VTBL_ENTRY)&_ZN6S231C62v6Ev,
  (VTBL_ENTRY)&_ZN6S231C62v7Ev,
  (VTBL_ENTRY)&_ZN6S231C62v8Ev,
  (VTBL_ENTRY)&_ZN6S231C62v9Ev,
  (VTBL_ENTRY)&_ZN6S231C63v10Ev,
  (VTBL_ENTRY)&_ZN6S231C63v11Ev,
  (VTBL_ENTRY)&_ZN6S231C63v12Ev,
  (VTBL_ENTRY)&_ZN6S231C63v13Ev,
  (VTBL_ENTRY)&_ZN6S231C63v14Ev,
  (VTBL_ENTRY)&_ZN6S231C63v15Ev,
  (VTBL_ENTRY)&_ZN6S231C63v16Ev,
  (VTBL_ENTRY)&_ZN6S231C63v17Ev,
  (VTBL_ENTRY)&_ZN6S231C63v18Ev,
  (VTBL_ENTRY)&_ZN6S231C63v19Ev,
  (VTBL_ENTRY)&_ZN6S231C63v20Ev,
  (VTBL_ENTRY)&_ZN6S231C63v21Ev,
  (VTBL_ENTRY)&_ZN6S231C63v22Ev,
  (VTBL_ENTRY)&_ZN6S231C63v23Ev,
  (VTBL_ENTRY)&_ZN6S231C63v24Ev,
  (VTBL_ENTRY)&_ZN6S231C63v25Ev,
  (VTBL_ENTRY)&_ZN6S231C63v26Ev,
  (VTBL_ENTRY)&_ZN6S231C63v27Ev,
  (VTBL_ENTRY)&_ZN6S231C63v28Ev,
  (VTBL_ENTRY)&_ZN6S231C63v29Ev,
  (VTBL_ENTRY)&_ZN6S231C63v30Ev,
  (VTBL_ENTRY)&_ZN6S231C63v31Ev,
  (VTBL_ENTRY)&_ZN6S231C63v32Ev,
  (VTBL_ENTRY)&_ZN6S231C63v33Ev,
  (VTBL_ENTRY)&_ZN6S231C63v34Ev,
  (VTBL_ENTRY)&_ZN6S231C63v35Ev,
  (VTBL_ENTRY)&_ZN6S231C63v36Ev,
  (VTBL_ENTRY)&_ZN6S231C63v37Ev,
  (VTBL_ENTRY)&_ZN6S231C63v38Ev,
  (VTBL_ENTRY)&_ZN6S231C63v39Ev,
  (VTBL_ENTRY)&_ZN6S231C63v40Ev,
  (VTBL_ENTRY)&_ZN6S231C63v41Ev,
  (VTBL_ENTRY)&_ZN6S231C63v42Ev,
  (VTBL_ENTRY)&_ZN6S231C63v43Ev,
  (VTBL_ENTRY)&_ZN6S231C63v44Ev,
  (VTBL_ENTRY)&_ZN6S231C63v45Ev,
  (VTBL_ENTRY)&_ZN6S231C63v46Ev,
  (VTBL_ENTRY)&_ZN6S231C63v47Ev,
  (VTBL_ENTRY)&_ZN6S231C63v48Ev,
  (VTBL_ENTRY)&_ZN6S231C63v49Ev,
  (VTBL_ENTRY)&_ZN6S231C63v50Ev,
  (VTBL_ENTRY)&_ZN6S231C63v51Ev,
  (VTBL_ENTRY)&_ZN6S231C63v52Ev,
  (VTBL_ENTRY)&_ZN6S231C63v53Ev,
  (VTBL_ENTRY)&_ZN6S231C63v54Ev,
  (VTBL_ENTRY)&_ZN6S231C63v55Ev,
  (VTBL_ENTRY)&_ZN6S231C63v56Ev,
  (VTBL_ENTRY)&_ZN6S231C63v57Ev,
  (VTBL_ENTRY)&_ZN6S231C63v58Ev,
  (VTBL_ENTRY)&_ZN6S231C63v59Ev,
  (VTBL_ENTRY)&_ZN6S231C63v60Ev,
  (VTBL_ENTRY)&_ZN6S231C63v61Ev,
  (VTBL_ENTRY)&_ZN6S231C63v62Ev,
  (VTBL_ENTRY)&_ZN6S231C63v63Ev,
  (VTBL_ENTRY)&_ZN6S231C63v64Ev,
  (VTBL_ENTRY)&_ZN6S231C63v65Ev,
  (VTBL_ENTRY)&_ZN6S231C63v66Ev,
  (VTBL_ENTRY)&_ZN6S231C63v67Ev,
  (VTBL_ENTRY)&_ZN6S231C63v68Ev,
  (VTBL_ENTRY)&_ZN6S231C53v69Ev,
  (VTBL_ENTRY)&_ZN6S231C53v70Ev,
  (VTBL_ENTRY)&_ZN6S231C53v71Ev,
  (VTBL_ENTRY)&_ZN6S231C53v72Ev,
  (VTBL_ENTRY)&_ZN6S231C53v73Ev,
  (VTBL_ENTRY)&_ZN6S231C53v74Ev,
  (VTBL_ENTRY)&_ZN6S231C53v75Ev,
  (VTBL_ENTRY)&_ZN6S231C53v76Ev,
  (VTBL_ENTRY)&_ZN6S231C53v77Ev,
  (VTBL_ENTRY)&_ZN6S231C53v78Ev,
  (VTBL_ENTRY)&_ZN6S231C53v79Ev,
  (VTBL_ENTRY)&_ZN6S231C53v80Ev,
  (VTBL_ENTRY)&_ZN6S231C53v81Ev,
  (VTBL_ENTRY)&_ZN6S231C53v82Ev,
  (VTBL_ENTRY)&_ZN6S231C53v83Ev,
  (VTBL_ENTRY)&_ZN6S231C53v84Ev,
  (VTBL_ENTRY)&_ZN6S231C53v85Ev,
  (VTBL_ENTRY)&_ZN6S231C53v86Ev,
  (VTBL_ENTRY)&_ZN6S231C53v87Ev,
  (VTBL_ENTRY)&_ZN6S231C53v88Ev,
  (VTBL_ENTRY)&_ZN6S231C53v89Ev,
  (VTBL_ENTRY)&_ZN6S231C53v90Ev,
  (VTBL_ENTRY)&_ZN6S231C53v91Ev,
  (VTBL_ENTRY)&_ZN6S231C53v92Ev,
  (VTBL_ENTRY)&_ZN6S231C53v93Ev,
  (VTBL_ENTRY)&_ZN6S231C53v94Ev,
  (VTBL_ENTRY)&_ZN6S231C53v95Ev,
  (VTBL_ENTRY)&_ZN6S231C43v96Ev,
  (VTBL_ENTRY)&_ZN6S231C43v97Ev,
  (VTBL_ENTRY)&_ZN6S231C43v98Ev,
  (VTBL_ENTRY)&_ZN6S231C43v99Ev,
  (VTBL_ENTRY)&_ZN6S231C44v100Ev,
  (VTBL_ENTRY)&_ZN6S231C44v101Ev,
  (VTBL_ENTRY)&_ZN6S231C44v102Ev,
  (VTBL_ENTRY)&_ZN6S231C44v103Ev,
  (VTBL_ENTRY)&_ZN6S231C44v104Ev,
  (VTBL_ENTRY)&_ZN6S231C44v105Ev,
  (VTBL_ENTRY)&_ZN6S231C44v106Ev,
  (VTBL_ENTRY)&_ZN6S231C44v107Ev,
  (VTBL_ENTRY)&_ZN6S231C44v108Ev,
  (VTBL_ENTRY)&_ZN6S231C44v109Ev,
  (VTBL_ENTRY)&_ZN6S231C44v110Ev,
  (VTBL_ENTRY)&_ZN6S231C44v111Ev,
  (VTBL_ENTRY)&_ZN6S231C44v112Ev,
  (VTBL_ENTRY)&_ZN6S231C44v113Ev,
  (VTBL_ENTRY)&_ZN6S231C34v114Ev,
  (VTBL_ENTRY)&_ZN6S231C34v115Ev,
  (VTBL_ENTRY)&_ZN6S231C34v116Ev,
  (VTBL_ENTRY)&_ZN6S231C34v117Ev,
  (VTBL_ENTRY)&_ZN6S231C34v118Ev,
  (VTBL_ENTRY)&_ZN6S231C34v119Ev,
  (VTBL_ENTRY)&_ZN6S231C34v120Ev,
  (VTBL_ENTRY)&_ZN6S231C24v121Ev,
  (VTBL_ENTRY)&_ZN6S231C24v122Ev,
  (VTBL_ENTRY)&_ZN6S231C24v123Ev,
  (VTBL_ENTRY)&_ZN6S231C24v124Ev,
  (VTBL_ENTRY)&_ZN6S231C24v125Ev,
  (VTBL_ENTRY)&_ZN6S231C24v126Ev,
  (VTBL_ENTRY)&_ZN6S231C12v1Ev,
  (VTBL_ENTRY)&_ZN6S231C12v2Ev,
  (VTBL_ENTRY)&_ZN6S231C12v3Ev,
  (VTBL_ENTRY)&_ZN6S231C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S231C1[];
extern  VTBL_ENTRY _ZTV6S231C1[];
Class_Descriptor cd_S231C1 = {  "S231C1", // class name
  bases_S231C1, 5,
  &(vtc_S231C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,248), // object size
  NSPAIRA(_ZTI6S231C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S231C1),130, //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  S233C6  {
  int s233c6f0;
  __tsi64 s233c6f1;
  void *s233c6f2[4];
  int s233c6f3[2];
  void *s233c6f4;
  ::S615C17_nt s233c6f5;
  void *s233c6f6[2];
  virtual  ~S233C6(); // _ZN6S233C6D1Ev
  virtual void  v5(); // _ZN6S233C62v5Ev
  virtual void  v6(); // _ZN6S233C62v6Ev
  virtual void  v7(); // _ZN6S233C62v7Ev
  virtual void  v8(); // _ZN6S233C62v8Ev
  virtual void  v9(); // _ZN6S233C62v9Ev
  virtual void  v10(); // _ZN6S233C63v10Ev
  virtual void  v11(); // _ZN6S233C63v11Ev
  virtual void  v12(); // _ZN6S233C63v12Ev
  virtual void  v13(); // _ZN6S233C63v13Ev
  virtual void  v14(); // _ZN6S233C63v14Ev
  virtual void  v15(); // _ZN6S233C63v15Ev
  virtual void  v16(); // _ZN6S233C63v16Ev
  virtual void  v17(); // _ZN6S233C63v17Ev
  virtual void  v18(); // _ZN6S233C63v18Ev
  virtual void  v19(); // _ZN6S233C63v19Ev
  virtual void  v20(); // _ZN6S233C63v20Ev
  virtual void  v21(); // _ZN6S233C63v21Ev
  virtual void  v22(); // _ZN6S233C63v22Ev
  virtual void  v23(); // _ZN6S233C63v23Ev
  virtual void  v24(); // _ZN6S233C63v24Ev
  virtual void  v25(); // _ZN6S233C63v25Ev
  virtual void  v26(); // _ZN6S233C63v26Ev
  virtual void  v27(); // _ZN6S233C63v27Ev
  virtual void  v28(); // _ZN6S233C63v28Ev
  virtual void  v29(); // _ZN6S233C63v29Ev
  virtual void  v30(); // _ZN6S233C63v30Ev
  virtual void  v31(); // _ZN6S233C63v31Ev
  virtual void  v32(); // _ZN6S233C63v32Ev
  virtual void  v33(); // _ZN6S233C63v33Ev
  virtual void  v34(); // _ZN6S233C63v34Ev
  virtual void  v35(); // _ZN6S233C63v35Ev
  virtual void  v36(); // _ZN6S233C63v36Ev
  virtual void  v37(); // _ZN6S233C63v37Ev
  virtual void  v38(); // _ZN6S233C63v38Ev
  virtual void  v39(); // _ZN6S233C63v39Ev
  virtual void  v40(); // _ZN6S233C63v40Ev
  virtual void  v41(); // _ZN6S233C63v41Ev
  virtual void  v42(); // _ZN6S233C63v42Ev
  virtual void  v43(); // _ZN6S233C63v43Ev
  virtual void  v44(); // _ZN6S233C63v44Ev
  virtual void  v45(); // _ZN6S233C63v45Ev
  virtual void  v46(); // _ZN6S233C63v46Ev
  virtual void  v47(); // _ZN6S233C63v47Ev
  virtual void  v48(); // _ZN6S233C63v48Ev
  virtual void  v49(); // _ZN6S233C63v49Ev
  virtual void  v50(); // _ZN6S233C63v50Ev
  virtual void  v51(); // _ZN6S233C63v51Ev
  virtual void  v52(); // _ZN6S233C63v52Ev
  virtual void  v53(); // _ZN6S233C63v53Ev
  virtual void  v54(); // _ZN6S233C63v54Ev
  virtual void  v55(); // _ZN6S233C63v55Ev
  virtual void  v56(); // _ZN6S233C63v56Ev
  virtual void  v57(); // _ZN6S233C63v57Ev
  virtual void  v58(); // _ZN6S233C63v58Ev
  virtual void  v59(); // _ZN6S233C63v59Ev
  virtual void  v60(); // _ZN6S233C63v60Ev
  virtual void  v61(); // _ZN6S233C63v61Ev
  virtual void  v62(); // _ZN6S233C63v62Ev
  virtual void  v63(); // _ZN6S233C63v63Ev
  virtual void  v64(); // _ZN6S233C63v64Ev
  virtual void  v65(); // _ZN6S233C63v65Ev
  virtual void  v66(); // _ZN6S233C63v66Ev
  virtual void  v67(); // _ZN6S233C63v67Ev
  virtual void  v68(); // _ZN6S233C63v68Ev
  S233C6(); // tgen
};
//SIG(-1 S233C6) 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]}


 S233C6 ::~S233C6(){ note_dtor("S233C6", this);}
void  S233C6 ::v5(){vfunc_called(this, "_ZN6S233C62v5Ev");}
void  S233C6 ::v6(){vfunc_called(this, "_ZN6S233C62v6Ev");}
void  S233C6 ::v7(){vfunc_called(this, "_ZN6S233C62v7Ev");}
void  S233C6 ::v8(){vfunc_called(this, "_ZN6S233C62v8Ev");}
void  S233C6 ::v9(){vfunc_called(this, "_ZN6S233C62v9Ev");}
void  S233C6 ::v10(){vfunc_called(this, "_ZN6S233C63v10Ev");}
void  S233C6 ::v11(){vfunc_called(this, "_ZN6S233C63v11Ev");}
void  S233C6 ::v12(){vfunc_called(this, "_ZN6S233C63v12Ev");}
void  S233C6 ::v13(){vfunc_called(this, "_ZN6S233C63v13Ev");}
void  S233C6 ::v14(){vfunc_called(this, "_ZN6S233C63v14Ev");}
void  S233C6 ::v15(){vfunc_called(this, "_ZN6S233C63v15Ev");}
void  S233C6 ::v16(){vfunc_called(this, "_ZN6S233C63v16Ev");}
void  S233C6 ::v17(){vfunc_called(this, "_ZN6S233C63v17Ev");}
void  S233C6 ::v18(){vfunc_called(this, "_ZN6S233C63v18Ev");}
void  S233C6 ::v19(){vfunc_called(this, "_ZN6S233C63v19Ev");}
void  S233C6 ::v20(){vfunc_called(this, "_ZN6S233C63v20Ev");}
void  S233C6 ::v21(){vfunc_called(this, "_ZN6S233C63v21Ev");}
void  S233C6 ::v22(){vfunc_called(this, "_ZN6S233C63v22Ev");}
void  S233C6 ::v23(){vfunc_called(this, "_ZN6S233C63v23Ev");}
void  S233C6 ::v24(){vfunc_called(this, "_ZN6S233C63v24Ev");}
void  S233C6 ::v25(){vfunc_called(this, "_ZN6S233C63v25Ev");}
void  S233C6 ::v26(){vfunc_called(this, "_ZN6S233C63v26Ev");}
void  S233C6 ::v27(){vfunc_called(this, "_ZN6S233C63v27Ev");}
void  S233C6 ::v28(){vfunc_called(this, "_ZN6S233C63v28Ev");}
void  S233C6 ::v29(){vfunc_called(this, "_ZN6S233C63v29Ev");}
void  S233C6 ::v30(){vfunc_called(this, "_ZN6S233C63v30Ev");}
void  S233C6 ::v31(){vfunc_called(this, "_ZN6S233C63v31Ev");}
void  S233C6 ::v32(){vfunc_called(this, "_ZN6S233C63v32Ev");}
void  S233C6 ::v33(){vfunc_called(this, "_ZN6S233C63v33Ev");}
void  S233C6 ::v34(){vfunc_called(this, "_ZN6S233C63v34Ev");}
void  S233C6 ::v35(){vfunc_called(this, "_ZN6S233C63v35Ev");}
void  S233C6 ::v36(){vfunc_called(this, "_ZN6S233C63v36Ev");}
void  S233C6 ::v37(){vfunc_called(this, "_ZN6S233C63v37Ev");}
void  S233C6 ::v38(){vfunc_called(this, "_ZN6S233C63v38Ev");}
void  S233C6 ::v39(){vfunc_called(this, "_ZN6S233C63v39Ev");}
void  S233C6 ::v40(){vfunc_called(this, "_ZN6S233C63v40Ev");}
void  S233C6 ::v41(){vfunc_called(this, "_ZN6S233C63v41Ev");}
void  S233C6 ::v42(){vfunc_called(this, "_ZN6S233C63v42Ev");}
void  S233C6 ::v43(){vfunc_called(this, "_ZN6S233C63v43Ev");}
void  S233C6 ::v44(){vfunc_called(this, "_ZN6S233C63v44Ev");}
void  S233C6 ::v45(){vfunc_called(this, "_ZN6S233C63v45Ev");}
void  S233C6 ::v46(){vfunc_called(this, "_ZN6S233C63v46Ev");}
void  S233C6 ::v47(){vfunc_called(this, "_ZN6S233C63v47Ev");}
void  S233C6 ::v48(){vfunc_called(this, "_ZN6S233C63v48Ev");}
void  S233C6 ::v49(){vfunc_called(this, "_ZN6S233C63v49Ev");}
void  S233C6 ::v50(){vfunc_called(this, "_ZN6S233C63v50Ev");}
void  S233C6 ::v51(){vfunc_called(this, "_ZN6S233C63v51Ev");}
void  S233C6 ::v52(){vfunc_called(this, "_ZN6S233C63v52Ev");}
void  S233C6 ::v53(){vfunc_called(this, "_ZN6S233C63v53Ev");}
void  S233C6 ::v54(){vfunc_called(this, "_ZN6S233C63v54Ev");}
void  S233C6 ::v55(){vfunc_called(this, "_ZN6S233C63v55Ev");}
void  S233C6 ::v56(){vfunc_called(this, "_ZN6S233C63v56Ev");}
void  S233C6 ::v57(){vfunc_called(this, "_ZN6S233C63v57Ev");}
void  S233C6 ::v58(){vfunc_called(this, "_ZN6S233C63v58Ev");}
void  S233C6 ::v59(){vfunc_called(this, "_ZN6S233C63v59Ev");}
void  S233C6 ::v60(){vfunc_called(this, "_ZN6S233C63v60Ev");}
void  S233C6 ::v61(){vfunc_called(this, "_ZN6S233C63v61Ev");}
void  S233C6 ::v62(){vfunc_called(this, "_ZN6S233C63v62Ev");}
void  S233C6 ::v63(){vfunc_called(this, "_ZN6S233C63v63Ev");}
void  S233C6 ::v64(){vfunc_called(this, "_ZN6S233C63v64Ev");}
void  S233C6 ::v65(){vfunc_called(this, "_ZN6S233C63v65Ev");}
void  S233C6 ::v66(){vfunc_called(this, "_ZN6S233C63v66Ev");}
void  S233C6 ::v67(){vfunc_called(this, "_ZN6S233C63v67Ev");}
void  S233C6 ::v68(){vfunc_called(this, "_ZN6S233C63v68Ev");}
S233C6 ::S233C6(){ note_ctor("S233C6", this);} // tgen

static void Test_S233C6()
{
  extern Class_Descriptor cd_S233C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S233C6, buf);
    S233C6 *dp, &lv = *(dp=new (buf) S233C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S233C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S233C6)");
    check_field_offset(lv, s233c6f0, ABISELECT(8,4), "S233C6.s233c6f0");
    check_field_offset(lv, s233c6f1, ABISELECT(16,8), "S233C6.s233c6f1");
    check_field_offset(lv, s233c6f2, ABISELECT(24,16), "S233C6.s233c6f2");
    check_field_offset(lv, s233c6f3, ABISELECT(56,32), "S233C6.s233c6f3");
    check_field_offset(lv, s233c6f4, ABISELECT(64,40), "S233C6.s233c6f4");
    check_field_offset(lv, s233c6f5, ABISELECT(72,44), "S233C6.s233c6f5");
    check_field_offset(lv, s233c6f6, ABISELECT(80,52), "S233C6.s233c6f6");
    test_class_info(&lv, &cd_S233C6);
    dp->~S233C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS233C6(Test_S233C6, "S233C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S233C6C1Ev();
extern void _ZN6S233C6D1Ev();
Name_Map name_map_S233C6[] = {
  NSPAIR(_ZN6S233C6C1Ev),
  NSPAIR(_ZN6S233C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S233C6[];
extern void _ZN6S233C6D1Ev();
extern void _ZN6S233C6D0Ev();
extern void _ZN6S233C62v5Ev();
extern void _ZN6S233C62v6Ev();
extern void _ZN6S233C62v7Ev();
extern void _ZN6S233C62v8Ev();
extern void _ZN6S233C62v9Ev();
extern void _ZN6S233C63v10Ev();
extern void _ZN6S233C63v11Ev();
extern void _ZN6S233C63v12Ev();
extern void _ZN6S233C63v13Ev();
extern void _ZN6S233C63v14Ev();
extern void _ZN6S233C63v15Ev();
extern void _ZN6S233C63v16Ev();
extern void _ZN6S233C63v17Ev();
extern void _ZN6S233C63v18Ev();
extern void _ZN6S233C63v19Ev();
extern void _ZN6S233C63v20Ev();
extern void _ZN6S233C63v21Ev();
extern void _ZN6S233C63v22Ev();
extern void _ZN6S233C63v23Ev();
extern void _ZN6S233C63v24Ev();
extern void _ZN6S233C63v25Ev();
extern void _ZN6S233C63v26Ev();
extern void _ZN6S233C63v27Ev();
extern void _ZN6S233C63v28Ev();
extern void _ZN6S233C63v29Ev();
extern void _ZN6S233C63v30Ev();
extern void _ZN6S233C63v31Ev();
extern void _ZN6S233C63v32Ev();
extern void _ZN6S233C63v33Ev();
extern void _ZN6S233C63v34Ev();
extern void _ZN6S233C63v35Ev();
extern void _ZN6S233C63v36Ev();
extern void _ZN6S233C63v37Ev();
extern void _ZN6S233C63v38Ev();
extern void _ZN6S233C63v39Ev();
extern void _ZN6S233C63v40Ev();
extern void _ZN6S233C63v41Ev();
extern void _ZN6S233C63v42Ev();
extern void _ZN6S233C63v43Ev();
extern void _ZN6S233C63v44Ev();
extern void _ZN6S233C63v45Ev();
extern void _ZN6S233C63v46Ev();
extern void _ZN6S233C63v47Ev();
extern void _ZN6S233C63v48Ev();
extern void _ZN6S233C63v49Ev();
extern void _ZN6S233C63v50Ev();
extern void _ZN6S233C63v51Ev();
extern void _ZN6S233C63v52Ev();
extern void _ZN6S233C63v53Ev();
extern void _ZN6S233C63v54Ev();
extern void _ZN6S233C63v55Ev();
extern void _ZN6S233C63v56Ev();
extern void _ZN6S233C63v57Ev();
extern void _ZN6S233C63v58Ev();
extern void _ZN6S233C63v59Ev();
extern void _ZN6S233C63v60Ev();
extern void _ZN6S233C63v61Ev();
extern void _ZN6S233C63v62Ev();
extern void _ZN6S233C63v63Ev();
extern void _ZN6S233C63v64Ev();
extern void _ZN6S233C63v65Ev();
extern void _ZN6S233C63v66Ev();
extern void _ZN6S233C63v67Ev();
extern void _ZN6S233C63v68Ev();
static  VTBL_ENTRY vtc_S233C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S233C6[0]),
  (VTBL_ENTRY)&_ZN6S233C6D1Ev,
  (VTBL_ENTRY)&_ZN6S233C6D0Ev,
  (VTBL_ENTRY)&_ZN6S233C62v5Ev,
  (VTBL_ENTRY)&_ZN6S233C62v6Ev,
  (VTBL_ENTRY)&_ZN6S233C62v7Ev,
  (VTBL_ENTRY)&_ZN6S233C62v8Ev,
  (VTBL_ENTRY)&_ZN6S233C62v9Ev,
  (VTBL_ENTRY)&_ZN6S233C63v10Ev,
  (VTBL_ENTRY)&_ZN6S233C63v11Ev,
  (VTBL_ENTRY)&_ZN6S233C63v12Ev,
  (VTBL_ENTRY)&_ZN6S233C63v13Ev,
  (VTBL_ENTRY)&_ZN6S233C63v14Ev,
  (VTBL_ENTRY)&_ZN6S233C63v15Ev,
  (VTBL_ENTRY)&_ZN6S233C63v16Ev,
  (VTBL_ENTRY)&_ZN6S233C63v17Ev,
  (VTBL_ENTRY)&_ZN6S233C63v18Ev,
  (VTBL_ENTRY)&_ZN6S233C63v19Ev,
  (VTBL_ENTRY)&_ZN6S233C63v20Ev,
  (VTBL_ENTRY)&_ZN6S233C63v21Ev,
  (VTBL_ENTRY)&_ZN6S233C63v22Ev,
  (VTBL_ENTRY)&_ZN6S233C63v23Ev,
  (VTBL_ENTRY)&_ZN6S233C63v24Ev,
  (VTBL_ENTRY)&_ZN6S233C63v25Ev,
  (VTBL_ENTRY)&_ZN6S233C63v26Ev,
  (VTBL_ENTRY)&_ZN6S233C63v27Ev,
  (VTBL_ENTRY)&_ZN6S233C63v28Ev,
  (VTBL_ENTRY)&_ZN6S233C63v29Ev,
  (VTBL_ENTRY)&_ZN6S233C63v30Ev,
  (VTBL_ENTRY)&_ZN6S233C63v31Ev,
  (VTBL_ENTRY)&_ZN6S233C63v32Ev,
  (VTBL_ENTRY)&_ZN6S233C63v33Ev,
  (VTBL_ENTRY)&_ZN6S233C63v34Ev,
  (VTBL_ENTRY)&_ZN6S233C63v35Ev,
  (VTBL_ENTRY)&_ZN6S233C63v36Ev,
  (VTBL_ENTRY)&_ZN6S233C63v37Ev,
  (VTBL_ENTRY)&_ZN6S233C63v38Ev,
  (VTBL_ENTRY)&_ZN6S233C63v39Ev,
  (VTBL_ENTRY)&_ZN6S233C63v40Ev,
  (VTBL_ENTRY)&_ZN6S233C63v41Ev,
  (VTBL_ENTRY)&_ZN6S233C63v42Ev,
  (VTBL_ENTRY)&_ZN6S233C63v43Ev,
  (VTBL_ENTRY)&_ZN6S233C63v44Ev,
  (VTBL_ENTRY)&_ZN6S233C63v45Ev,
  (VTBL_ENTRY)&_ZN6S233C63v46Ev,
  (VTBL_ENTRY)&_ZN6S233C63v47Ev,
  (VTBL_ENTRY)&_ZN6S233C63v48Ev,
  (VTBL_ENTRY)&_ZN6S233C63v49Ev,
  (VTBL_ENTRY)&_ZN6S233C63v50Ev,
  (VTBL_ENTRY)&_ZN6S233C63v51Ev,
  (VTBL_ENTRY)&_ZN6S233C63v52Ev,
  (VTBL_ENTRY)&_ZN6S233C63v53Ev,
  (VTBL_ENTRY)&_ZN6S233C63v54Ev,
  (VTBL_ENTRY)&_ZN6S233C63v55Ev,
  (VTBL_ENTRY)&_ZN6S233C63v56Ev,
  (VTBL_ENTRY)&_ZN6S233C63v57Ev,
  (VTBL_ENTRY)&_ZN6S233C63v58Ev,
  (VTBL_ENTRY)&_ZN6S233C63v59Ev,
  (VTBL_ENTRY)&_ZN6S233C63v60Ev,
  (VTBL_ENTRY)&_ZN6S233C63v61Ev,
  (VTBL_ENTRY)&_ZN6S233C63v62Ev,
  (VTBL_ENTRY)&_ZN6S233C63v63Ev,
  (VTBL_ENTRY)&_ZN6S233C63v64Ev,
  (VTBL_ENTRY)&_ZN6S233C63v65Ev,
  (VTBL_ENTRY)&_ZN6S233C63v66Ev,
  (VTBL_ENTRY)&_ZN6S233C63v67Ev,
  (VTBL_ENTRY)&_ZN6S233C63v68Ev,
};
extern VTBL_ENTRY _ZTI6S233C6[];
extern  VTBL_ENTRY _ZTV6S233C6[];
Class_Descriptor cd_S233C6 = {  "S233C6", // class name
  0,0,//no base classes
  &(vtc_S233C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S233C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S233C6),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  S233C5  : S233C6 {
  void *s233c5f0;
  ::S1542C26 s233c5f1;
  ::S615C17_nt s233c5f2;
  ::S1542C22_nt s233c5f3;
  ::S615C12_nt s233c5f4;
  int s233c5f5;
  unsigned int s233c5f6:1;
  unsigned int s233c5f7:1;
  unsigned int s233c5f8:1;
  unsigned int s233c5f9:1;
  int s233c5f10[11];
  virtual  ~S233C5(); // _ZN6S233C5D1Ev
  virtual void  v69(); // _ZN6S233C53v69Ev
  virtual void  v70(); // _ZN6S233C53v70Ev
  virtual void  v71(); // _ZN6S233C53v71Ev
  virtual void  v72(); // _ZN6S233C53v72Ev
  virtual void  v73(); // _ZN6S233C53v73Ev
  virtual void  v74(); // _ZN6S233C53v74Ev
  virtual void  v75(); // _ZN6S233C53v75Ev
  virtual void  v76(); // _ZN6S233C53v76Ev
  virtual void  v77(); // _ZN6S233C53v77Ev
  virtual void  v78(); // _ZN6S233C53v78Ev
  virtual void  v79(); // _ZN6S233C53v79Ev
  virtual void  v80(); // _ZN6S233C53v80Ev
  virtual void  v81(); // _ZN6S233C53v81Ev
  virtual void  v82(); // _ZN6S233C53v82Ev
  virtual void  v83(); // _ZN6S233C53v83Ev
  virtual void  v84(); // _ZN6S233C53v84Ev
  virtual void  v85(); // _ZN6S233C53v85Ev
  virtual void  v86(); // _ZN6S233C53v86Ev
  virtual void  v87(); // _ZN6S233C53v87Ev
  virtual void  v88(); // _ZN6S233C53v88Ev
  virtual void  v89(); // _ZN6S233C53v89Ev
  virtual void  v90(); // _ZN6S233C53v90Ev
  virtual void  v91(); // _ZN6S233C53v91Ev
  virtual void  v92(); // _ZN6S233C53v92Ev
  virtual void  v93(); // _ZN6S233C53v93Ev
  virtual void  v94(); // _ZN6S233C53v94Ev
  virtual void  v95(); // _ZN6S233C53v95Ev
  S233C5(); // tgen
};
//SIG(-1 S233C5) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S233C5 ::~S233C5(){ note_dtor("S233C5", this);}
void  S233C5 ::v69(){vfunc_called(this, "_ZN6S233C53v69Ev");}
void  S233C5 ::v70(){vfunc_called(this, "_ZN6S233C53v70Ev");}
void  S233C5 ::v71(){vfunc_called(this, "_ZN6S233C53v71Ev");}
void  S233C5 ::v72(){vfunc_called(this, "_ZN6S233C53v72Ev");}
void  S233C5 ::v73(){vfunc_called(this, "_ZN6S233C53v73Ev");}
void  S233C5 ::v74(){vfunc_called(this, "_ZN6S233C53v74Ev");}
void  S233C5 ::v75(){vfunc_called(this, "_ZN6S233C53v75Ev");}
void  S233C5 ::v76(){vfunc_called(this, "_ZN6S233C53v76Ev");}
void  S233C5 ::v77(){vfunc_called(this, "_ZN6S233C53v77Ev");}
void  S233C5 ::v78(){vfunc_called(this, "_ZN6S233C53v78Ev");}
void  S233C5 ::v79(){vfunc_called(this, "_ZN6S233C53v79Ev");}
void  S233C5 ::v80(){vfunc_called(this, "_ZN6S233C53v80Ev");}
void  S233C5 ::v81(){vfunc_called(this, "_ZN6S233C53v81Ev");}
void  S233C5 ::v82(){vfunc_called(this, "_ZN6S233C53v82Ev");}
void  S233C5 ::v83(){vfunc_called(this, "_ZN6S233C53v83Ev");}
void  S233C5 ::v84(){vfunc_called(this, "_ZN6S233C53v84Ev");}
void  S233C5 ::v85(){vfunc_called(this, "_ZN6S233C53v85Ev");}
void  S233C5 ::v86(){vfunc_called(this, "_ZN6S233C53v86Ev");}
void  S233C5 ::v87(){vfunc_called(this, "_ZN6S233C53v87Ev");}
void  S233C5 ::v88(){vfunc_called(this, "_ZN6S233C53v88Ev");}
void  S233C5 ::v89(){vfunc_called(this, "_ZN6S233C53v89Ev");}
void  S233C5 ::v90(){vfunc_called(this, "_ZN6S233C53v90Ev");}
void  S233C5 ::v91(){vfunc_called(this, "_ZN6S233C53v91Ev");}
void  S233C5 ::v92(){vfunc_called(this, "_ZN6S233C53v92Ev");}
void  S233C5 ::v93(){vfunc_called(this, "_ZN6S233C53v93Ev");}
void  S233C5 ::v94(){vfunc_called(this, "_ZN6S233C53v94Ev");}
void  S233C5 ::v95(){vfunc_called(this, "_ZN6S233C53v95Ev");}
S233C5 ::S233C5(){ note_ctor("S233C5", this);} // tgen

static void Test_S233C5()
{
  extern Class_Descriptor cd_S233C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S233C5, buf);
    S233C5 *dp, &lv = *(dp=new (buf) S233C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S233C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S233C5)");
    check_base_class_offset(lv, (S233C6*), 0, "S233C5");
    check_field_offset(lv, s233c5f0, ABISELECT(96,60), "S233C5.s233c5f0");
    check_field_offset(lv, s233c5f1, ABISELECT(104,64), "S233C5.s233c5f1");
    check_field_offset(lv, s233c5f2, ABISELECT(120,76), "S233C5.s233c5f2");
    check_field_offset(lv, s233c5f3, ABISELECT(128,84), "S233C5.s233c5f3");
    check_field_offset(lv, s233c5f4, ABISELECT(144,96), "S233C5.s233c5f4");
    check_field_offset(lv, s233c5f5, ABISELECT(176,128), "S233C5.s233c5f5");
    set_bf_and_test(lv, s233c5f6, ABISELECT(180,132), 0, 1, 1, "S233C5");
    set_bf_and_test(lv, s233c5f7, ABISELECT(180,132), 1, 1, 1, "S233C5");
    set_bf_and_test(lv, s233c5f8, ABISELECT(180,132), 2, 1, 1, "S233C5");
    set_bf_and_test(lv, s233c5f9, ABISELECT(180,132), 3, 1, 1, "S233C5");
    check_field_offset(lv, s233c5f10, ABISELECT(184,136), "S233C5.s233c5f10");
    test_class_info(&lv, &cd_S233C5);
    dp->~S233C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS233C5(Test_S233C5, "S233C5", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S233C5C1Ev();
extern void _ZN6S233C5D1Ev();
Name_Map name_map_S233C5[] = {
  NSPAIR(_ZN6S233C5C1Ev),
  NSPAIR(_ZN6S233C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S233C6;
extern VTBL_ENTRY _ZTI6S233C6[];
extern  VTBL_ENTRY _ZTV6S233C6[];
static Base_Class bases_S233C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S233C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S233C5[];
extern void _ZN6S233C5D1Ev();
extern void _ZN6S233C5D0Ev();
extern void _ZN6S233C62v5Ev();
extern void _ZN6S233C62v6Ev();
extern void _ZN6S233C62v7Ev();
extern void _ZN6S233C62v8Ev();
extern void _ZN6S233C62v9Ev();
extern void _ZN6S233C63v10Ev();
extern void _ZN6S233C63v11Ev();
extern void _ZN6S233C63v12Ev();
extern void _ZN6S233C63v13Ev();
extern void _ZN6S233C63v14Ev();
extern void _ZN6S233C63v15Ev();
extern void _ZN6S233C63v16Ev();
extern void _ZN6S233C63v17Ev();
extern void _ZN6S233C63v18Ev();
extern void _ZN6S233C63v19Ev();
extern void _ZN6S233C63v20Ev();
extern void _ZN6S233C63v21Ev();
extern void _ZN6S233C63v22Ev();
extern void _ZN6S233C63v23Ev();
extern void _ZN6S233C63v24Ev();
extern void _ZN6S233C63v25Ev();
extern void _ZN6S233C63v26Ev();
extern void _ZN6S233C63v27Ev();
extern void _ZN6S233C63v28Ev();
extern void _ZN6S233C63v29Ev();
extern void _ZN6S233C63v30Ev();
extern void _ZN6S233C63v31Ev();
extern void _ZN6S233C63v32Ev();
extern void _ZN6S233C63v33Ev();
extern void _ZN6S233C63v34Ev();
extern void _ZN6S233C63v35Ev();
extern void _ZN6S233C63v36Ev();
extern void _ZN6S233C63v37Ev();
extern void _ZN6S233C63v38Ev();
extern void _ZN6S233C63v39Ev();
extern void _ZN6S233C63v40Ev();
extern void _ZN6S233C63v41Ev();
extern void _ZN6S233C63v42Ev();
extern void _ZN6S233C63v43Ev();
extern void _ZN6S233C63v44Ev();
extern void _ZN6S233C63v45Ev();
extern void _ZN6S233C63v46Ev();
extern void _ZN6S233C63v47Ev();
extern void _ZN6S233C63v48Ev();
extern void _ZN6S233C63v49Ev();
extern void _ZN6S233C63v50Ev();
extern void _ZN6S233C63v51Ev();
extern void _ZN6S233C63v52Ev();
extern void _ZN6S233C63v53Ev();
extern void _ZN6S233C63v54Ev();
extern void _ZN6S233C63v55Ev();
extern void _ZN6S233C63v56Ev();
extern void _ZN6S233C63v57Ev();
extern void _ZN6S233C63v58Ev();
extern void _ZN6S233C63v59Ev();
extern void _ZN6S233C63v60Ev();
extern void _ZN6S233C63v61Ev();
extern void _ZN6S233C63v62Ev();
extern void _ZN6S233C63v63Ev();
extern void _ZN6S233C63v64Ev();
extern void _ZN6S233C63v65Ev();
extern void _ZN6S233C63v66Ev();
extern void _ZN6S233C63v67Ev();
extern void _ZN6S233C63v68Ev();
extern void _ZN6S233C53v69Ev();
extern void _ZN6S233C53v70Ev();
extern void _ZN6S233C53v71Ev();
extern void _ZN6S233C53v72Ev();
extern void _ZN6S233C53v73Ev();
extern void _ZN6S233C53v74Ev();
extern void _ZN6S233C53v75Ev();
extern void _ZN6S233C53v76Ev();
extern void _ZN6S233C53v77Ev();
extern void _ZN6S233C53v78Ev();
extern void _ZN6S233C53v79Ev();
extern void _ZN6S233C53v80Ev();
extern void _ZN6S233C53v81Ev();
extern void _ZN6S233C53v82Ev();
extern void _ZN6S233C53v83Ev();
extern void _ZN6S233C53v84Ev();
extern void _ZN6S233C53v85Ev();
extern void _ZN6S233C53v86Ev();
extern void _ZN6S233C53v87Ev();
extern void _ZN6S233C53v88Ev();
extern void _ZN6S233C53v89Ev();
extern void _ZN6S233C53v90Ev();
extern void _ZN6S233C53v91Ev();
extern void _ZN6S233C53v92Ev();
extern void _ZN6S233C53v93Ev();
extern void _ZN6S233C53v94Ev();
extern void _ZN6S233C53v95Ev();
static  VTBL_ENTRY vtc_S233C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S233C5[0]),
  (VTBL_ENTRY)&_ZN6S233C5D1Ev,
  (VTBL_ENTRY)&_ZN6S233C5D0Ev,
  (VTBL_ENTRY)&_ZN6S233C62v5Ev,
  (VTBL_ENTRY)&_ZN6S233C62v6Ev,
  (VTBL_ENTRY)&_ZN6S233C62v7Ev,
  (VTBL_ENTRY)&_ZN6S233C62v8Ev,
  (VTBL_ENTRY)&_ZN6S233C62v9Ev,
  (VTBL_ENTRY)&_ZN6S233C63v10Ev,
  (VTBL_ENTRY)&_ZN6S233C63v11Ev,
  (VTBL_ENTRY)&_ZN6S233C63v12Ev,
  (VTBL_ENTRY)&_ZN6S233C63v13Ev,
  (VTBL_ENTRY)&_ZN6S233C63v14Ev,
  (VTBL_ENTRY)&_ZN6S233C63v15Ev,
  (VTBL_ENTRY)&_ZN6S233C63v16Ev,
  (VTBL_ENTRY)&_ZN6S233C63v17Ev,
  (VTBL_ENTRY)&_ZN6S233C63v18Ev,
  (VTBL_ENTRY)&_ZN6S233C63v19Ev,
  (VTBL_ENTRY)&_ZN6S233C63v20Ev,
  (VTBL_ENTRY)&_ZN6S233C63v21Ev,
  (VTBL_ENTRY)&_ZN6S233C63v22Ev,
  (VTBL_ENTRY)&_ZN6S233C63v23Ev,
  (VTBL_ENTRY)&_ZN6S233C63v24Ev,
  (VTBL_ENTRY)&_ZN6S233C63v25Ev,
  (VTBL_ENTRY)&_ZN6S233C63v26Ev,
  (VTBL_ENTRY)&_ZN6S233C63v27Ev,
  (VTBL_ENTRY)&_ZN6S233C63v28Ev,
  (VTBL_ENTRY)&_ZN6S233C63v29Ev,
  (VTBL_ENTRY)&_ZN6S233C63v30Ev,
  (VTBL_ENTRY)&_ZN6S233C63v31Ev,
  (VTBL_ENTRY)&_ZN6S233C63v32Ev,
  (VTBL_ENTRY)&_ZN6S233C63v33Ev,
  (VTBL_ENTRY)&_ZN6S233C63v34Ev,
  (VTBL_ENTRY)&_ZN6S233C63v35Ev,
  (VTBL_ENTRY)&_ZN6S233C63v36Ev,
  (VTBL_ENTRY)&_ZN6S233C63v37Ev,
  (VTBL_ENTRY)&_ZN6S233C63v38Ev,
  (VTBL_ENTRY)&_ZN6S233C63v39Ev,
  (VTBL_ENTRY)&_ZN6S233C63v40Ev,
  (VTBL_ENTRY)&_ZN6S233C63v41Ev,
  (VTBL_ENTRY)&_ZN6S233C63v42Ev,
  (VTBL_ENTRY)&_ZN6S233C63v43Ev,
  (VTBL_ENTRY)&_ZN6S233C63v44Ev,
  (VTBL_ENTRY)&_ZN6S233C63v45Ev,
  (VTBL_ENTRY)&_ZN6S233C63v46Ev,
  (VTBL_ENTRY)&_ZN6S233C63v47Ev,
  (VTBL_ENTRY)&_ZN6S233C63v48Ev,
  (VTBL_ENTRY)&_ZN6S233C63v49Ev,
  (VTBL_ENTRY)&_ZN6S233C63v50Ev,
  (VTBL_ENTRY)&_ZN6S233C63v51Ev,
  (VTBL_ENTRY)&_ZN6S233C63v52Ev,
  (VTBL_ENTRY)&_ZN6S233C63v53Ev,
  (VTBL_ENTRY)&_ZN6S233C63v54Ev,
  (VTBL_ENTRY)&_ZN6S233C63v55Ev,
  (VTBL_ENTRY)&_ZN6S233C63v56Ev,
  (VTBL_ENTRY)&_ZN6S233C63v57Ev,
  (VTBL_ENTRY)&_ZN6S233C63v58Ev,
  (VTBL_ENTRY)&_ZN6S233C63v59Ev,
  (VTBL_ENTRY)&_ZN6S233C63v60Ev,
  (VTBL_ENTRY)&_ZN6S233C63v61Ev,
  (VTBL_ENTRY)&_ZN6S233C63v62Ev,
  (VTBL_ENTRY)&_ZN6S233C63v63Ev,
  (VTBL_ENTRY)&_ZN6S233C63v64Ev,
  (VTBL_ENTRY)&_ZN6S233C63v65Ev,
  (VTBL_ENTRY)&_ZN6S233C63v66Ev,
  (VTBL_ENTRY)&_ZN6S233C63v67Ev,
  (VTBL_ENTRY)&_ZN6S233C63v68Ev,
  (VTBL_ENTRY)&_ZN6S233C53v69Ev,
  (VTBL_ENTRY)&_ZN6S233C53v70Ev,
  (VTBL_ENTRY)&_ZN6S233C53v71Ev,
  (VTBL_ENTRY)&_ZN6S233C53v72Ev,
  (VTBL_ENTRY)&_ZN6S233C53v73Ev,
  (VTBL_ENTRY)&_ZN6S233C53v74Ev,
  (VTBL_ENTRY)&_ZN6S233C53v75Ev,
  (VTBL_ENTRY)&_ZN6S233C53v76Ev,
  (VTBL_ENTRY)&_ZN6S233C53v77Ev,
  (VTBL_ENTRY)&_ZN6S233C53v78Ev,
  (VTBL_ENTRY)&_ZN6S233C53v79Ev,
  (VTBL_ENTRY)&_ZN6S233C53v80Ev,
  (VTBL_ENTRY)&_ZN6S233C53v81Ev,
  (VTBL_ENTRY)&_ZN6S233C53v82Ev,
  (VTBL_ENTRY)&_ZN6S233C53v83Ev,
  (VTBL_ENTRY)&_ZN6S233C53v84Ev,
  (VTBL_ENTRY)&_ZN6S233C53v85Ev,
  (VTBL_ENTRY)&_ZN6S233C53v86Ev,
  (VTBL_ENTRY)&_ZN6S233C53v87Ev,
  (VTBL_ENTRY)&_ZN6S233C53v88Ev,
  (VTBL_ENTRY)&_ZN6S233C53v89Ev,
  (VTBL_ENTRY)&_ZN6S233C53v90Ev,
  (VTBL_ENTRY)&_ZN6S233C53v91Ev,
  (VTBL_ENTRY)&_ZN6S233C53v92Ev,
  (VTBL_ENTRY)&_ZN6S233C53v93Ev,
  (VTBL_ENTRY)&_ZN6S233C53v94Ev,
  (VTBL_ENTRY)&_ZN6S233C53v95Ev,
};
extern VTBL_ENTRY _ZTI6S233C5[];
extern  VTBL_ENTRY _ZTV6S233C5[];
Class_Descriptor cd_S233C5 = {  "S233C5", // class name
  bases_S233C5, 1,
  &(vtc_S233C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S233C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S233C5),95, //virtual function table var
  2, // 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  S233C4  : S233C5 {
  ::S615C22_nt s233c4f0;
  unsigned int s233c4f1:1;
  virtual  ~S233C4(); // _ZN6S233C4D1Ev
  virtual void  v96(); // _ZN6S233C43v96Ev
  virtual void  v97(); // _ZN6S233C43v97Ev
  virtual void  v98(); // _ZN6S233C43v98Ev
  virtual void  v99(); // _ZN6S233C43v99Ev
  virtual void  v100(); // _ZN6S233C44v100Ev
  virtual void  v101(); // _ZN6S233C44v101Ev
  virtual void  v102(); // _ZN6S233C44v102Ev
  virtual void  v103(); // _ZN6S233C44v103Ev
  virtual void  v104(); // _ZN6S233C44v104Ev
  virtual void  v105(); // _ZN6S233C44v105Ev
  virtual void  v106(); // _ZN6S233C44v106Ev
  virtual void  v107(); // _ZN6S233C44v107Ev
  virtual void  v108(); // _ZN6S233C44v108Ev
  virtual void  v109(); // _ZN6S233C44v109Ev
  virtual void  v110(); // _ZN6S233C44v110Ev
  virtual void  v111(); // _ZN6S233C44v111Ev
  virtual void  v112(); // _ZN6S233C44v112Ev
  virtual void  v113(); // _ZN6S233C44v113Ev
  S233C4(); // tgen
};
//SIG(-1 S233C4) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S233C4 ::~S233C4(){ note_dtor("S233C4", this);}
void  S233C4 ::v96(){vfunc_called(this, "_ZN6S233C43v96Ev");}
void  S233C4 ::v97(){vfunc_called(this, "_ZN6S233C43v97Ev");}
void  S233C4 ::v98(){vfunc_called(this, "_ZN6S233C43v98Ev");}
void  S233C4 ::v99(){vfunc_called(this, "_ZN6S233C43v99Ev");}
void  S233C4 ::v100(){vfunc_called(this, "_ZN6S233C44v100Ev");}
void  S233C4 ::v101(){vfunc_called(this, "_ZN6S233C44v101Ev");}
void  S233C4 ::v102(){vfunc_called(this, "_ZN6S233C44v102Ev");}
void  S233C4 ::v103(){vfunc_called(this, "_ZN6S233C44v103Ev");}
void  S233C4 ::v104(){vfunc_called(this, "_ZN6S233C44v104Ev");}
void  S233C4 ::v105(){vfunc_called(this, "_ZN6S233C44v105Ev");}
void  S233C4 ::v106(){vfunc_called(this, "_ZN6S233C44v106Ev");}
void  S233C4 ::v107(){vfunc_called(this, "_ZN6S233C44v107Ev");}
void  S233C4 ::v108(){vfunc_called(this, "_ZN6S233C44v108Ev");}
void  S233C4 ::v109(){vfunc_called(this, "_ZN6S233C44v109Ev");}
void  S233C4 ::v110(){vfunc_called(this, "_ZN6S233C44v110Ev");}
void  S233C4 ::v111(){vfunc_called(this, "_ZN6S233C44v111Ev");}
void  S233C4 ::v112(){vfunc_called(this, "_ZN6S233C44v112Ev");}
void  S233C4 ::v113(){vfunc_called(this, "_ZN6S233C44v113Ev");}
S233C4 ::S233C4(){ note_ctor("S233C4", this);} // tgen

static void Test_S233C4()
{
  extern Class_Descriptor cd_S233C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S233C4, buf);
    S233C4 *dp, &lv = *(dp=new (buf) S233C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S233C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S233C4)");
    check_base_class_offset(lv, (S233C6*)(S233C5*), 0, "S233C4");
    check_base_class_offset(lv, (S233C5*), 0, "S233C4");
    check_field_offset(lv, s233c4f0, ABISELECT(232,180), "S233C4.s233c4f0");
    set_bf_and_test(lv, s233c4f1, ABISELECT(248,192), 0, 1, 1, "S233C4");
    test_class_info(&lv, &cd_S233C4);
    dp->~S233C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS233C4(Test_S233C4, "S233C4", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S233C4C1Ev();
extern void _ZN6S233C4D1Ev();
Name_Map name_map_S233C4[] = {
  NSPAIR(_ZN6S233C4C1Ev),
  NSPAIR(_ZN6S233C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S233C6;
extern VTBL_ENTRY _ZTI6S233C6[];
extern  VTBL_ENTRY _ZTV6S233C6[];
extern Class_Descriptor cd_S233C5;
extern VTBL_ENTRY _ZTI6S233C5[];
extern  VTBL_ENTRY _ZTV6S233C5[];
static Base_Class bases_S233C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S233C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S233C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S233C4[];
extern void _ZN6S233C4D1Ev();
extern void _ZN6S233C4D0Ev();
extern void _ZN6S233C62v5Ev();
extern void _ZN6S233C62v6Ev();
extern void _ZN6S233C62v7Ev();
extern void _ZN6S233C62v8Ev();
extern void _ZN6S233C62v9Ev();
extern void _ZN6S233C63v10Ev();
extern void _ZN6S233C63v11Ev();
extern void _ZN6S233C63v12Ev();
extern void _ZN6S233C63v13Ev();
extern void _ZN6S233C63v14Ev();
extern void _ZN6S233C63v15Ev();
extern void _ZN6S233C63v16Ev();
extern void _ZN6S233C63v17Ev();
extern void _ZN6S233C63v18Ev();
extern void _ZN6S233C63v19Ev();
extern void _ZN6S233C63v20Ev();
extern void _ZN6S233C63v21Ev();
extern void _ZN6S233C63v22Ev();
extern void _ZN6S233C63v23Ev();
extern void _ZN6S233C63v24Ev();
extern void _ZN6S233C63v25Ev();
extern void _ZN6S233C63v26Ev();
extern void _ZN6S233C63v27Ev();
extern void _ZN6S233C63v28Ev();
extern void _ZN6S233C63v29Ev();
extern void _ZN6S233C63v30Ev();
extern void _ZN6S233C63v31Ev();
extern void _ZN6S233C63v32Ev();
extern void _ZN6S233C63v33Ev();
extern void _ZN6S233C63v34Ev();
extern void _ZN6S233C63v35Ev();
extern void _ZN6S233C63v36Ev();
extern void _ZN6S233C63v37Ev();
extern void _ZN6S233C63v38Ev();
extern void _ZN6S233C63v39Ev();
extern void _ZN6S233C63v40Ev();
extern void _ZN6S233C63v41Ev();
extern void _ZN6S233C63v42Ev();
extern void _ZN6S233C63v43Ev();
extern void _ZN6S233C63v44Ev();
extern void _ZN6S233C63v45Ev();
extern void _ZN6S233C63v46Ev();
extern void _ZN6S233C63v47Ev();
extern void _ZN6S233C63v48Ev();
extern void _ZN6S233C63v49Ev();
extern void _ZN6S233C63v50Ev();
extern void _ZN6S233C63v51Ev();
extern void _ZN6S233C63v52Ev();
extern void _ZN6S233C63v53Ev();
extern void _ZN6S233C63v54Ev();
extern void _ZN6S233C63v55Ev();
extern void _ZN6S233C63v56Ev();
extern void _ZN6S233C63v57Ev();
extern void _ZN6S233C63v58Ev();
extern void _ZN6S233C63v59Ev();
extern void _ZN6S233C63v60Ev();
extern void _ZN6S233C63v61Ev();
extern void _ZN6S233C63v62Ev();
extern void _ZN6S233C63v63Ev();
extern void _ZN6S233C63v64Ev();
extern void _ZN6S233C63v65Ev();
extern void _ZN6S233C63v66Ev();
extern void _ZN6S233C63v67Ev();
extern void _ZN6S233C63v68Ev();
extern void _ZN6S233C53v69Ev();
extern void _ZN6S233C53v70Ev();
extern void _ZN6S233C53v71Ev();
extern void _ZN6S233C53v72Ev();
extern void _ZN6S233C53v73Ev();
extern void _ZN6S233C53v74Ev();
extern void _ZN6S233C53v75Ev();
extern void _ZN6S233C53v76Ev();
extern void _ZN6S233C53v77Ev();
extern void _ZN6S233C53v78Ev();
extern void _ZN6S233C53v79Ev();
extern void _ZN6S233C53v80Ev();
extern void _ZN6S233C53v81Ev();
extern void _ZN6S233C53v82Ev();
extern void _ZN6S233C53v83Ev();
extern void _ZN6S233C53v84Ev();
extern void _ZN6S233C53v85Ev();
extern void _ZN6S233C53v86Ev();
extern void _ZN6S233C53v87Ev();
extern void _ZN6S233C53v88Ev();
extern void _ZN6S233C53v89Ev();
extern void _ZN6S233C53v90Ev();
extern void _ZN6S233C53v91Ev();
extern void _ZN6S233C53v92Ev();
extern void _ZN6S233C53v93Ev();
extern void _ZN6S233C53v94Ev();
extern void _ZN6S233C53v95Ev();
extern void _ZN6S233C43v96Ev();
extern void _ZN6S233C43v97Ev();
extern void _ZN6S233C43v98Ev();
extern void _ZN6S233C43v99Ev();
extern void _ZN6S233C44v100Ev();
extern void _ZN6S233C44v101Ev();
extern void _ZN6S233C44v102Ev();
extern void _ZN6S233C44v103Ev();
extern void _ZN6S233C44v104Ev();
extern void _ZN6S233C44v105Ev();
extern void _ZN6S233C44v106Ev();
extern void _ZN6S233C44v107Ev();
extern void _ZN6S233C44v108Ev();
extern void _ZN6S233C44v109Ev();
extern void _ZN6S233C44v110Ev();
extern void _ZN6S233C44v111Ev();
extern void _ZN6S233C44v112Ev();
extern void _ZN6S233C44v113Ev();
static  VTBL_ENTRY vtc_S233C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S233C4[0]),
  (VTBL_ENTRY)&_ZN6S233C4D1Ev,
  (VTBL_ENTRY)&_ZN6S233C4D0Ev,
  (VTBL_ENTRY)&_ZN6S233C62v5Ev,
  (VTBL_ENTRY)&_ZN6S233C62v6Ev,
  (VTBL_ENTRY)&_ZN6S233C62v7Ev,
  (VTBL_ENTRY)&_ZN6S233C62v8Ev,
  (VTBL_ENTRY)&_ZN6S233C62v9Ev,
  (VTBL_ENTRY)&_ZN6S233C63v10Ev,
  (VTBL_ENTRY)&_ZN6S233C63v11Ev,
  (VTBL_ENTRY)&_ZN6S233C63v12Ev,
  (VTBL_ENTRY)&_ZN6S233C63v13Ev,
  (VTBL_ENTRY)&_ZN6S233C63v14Ev,
  (VTBL_ENTRY)&_ZN6S233C63v15Ev,
  (VTBL_ENTRY)&_ZN6S233C63v16Ev,
  (VTBL_ENTRY)&_ZN6S233C63v17Ev,
  (VTBL_ENTRY)&_ZN6S233C63v18Ev,
  (VTBL_ENTRY)&_ZN6S233C63v19Ev,
  (VTBL_ENTRY)&_ZN6S233C63v20Ev,
  (VTBL_ENTRY)&_ZN6S233C63v21Ev,
  (VTBL_ENTRY)&_ZN6S233C63v22Ev,
  (VTBL_ENTRY)&_ZN6S233C63v23Ev,
  (VTBL_ENTRY)&_ZN6S233C63v24Ev,
  (VTBL_ENTRY)&_ZN6S233C63v25Ev,
  (VTBL_ENTRY)&_ZN6S233C63v26Ev,
  (VTBL_ENTRY)&_ZN6S233C63v27Ev,
  (VTBL_ENTRY)&_ZN6S233C63v28Ev,
  (VTBL_ENTRY)&_ZN6S233C63v29Ev,
  (VTBL_ENTRY)&_ZN6S233C63v30Ev,
  (VTBL_ENTRY)&_ZN6S233C63v31Ev,
  (VTBL_ENTRY)&_ZN6S233C63v32Ev,
  (VTBL_ENTRY)&_ZN6S233C63v33Ev,
  (VTBL_ENTRY)&_ZN6S233C63v34Ev,
  (VTBL_ENTRY)&_ZN6S233C63v35Ev,
  (VTBL_ENTRY)&_ZN6S233C63v36Ev,
  (VTBL_ENTRY)&_ZN6S233C63v37Ev,
  (VTBL_ENTRY)&_ZN6S233C63v38Ev,
  (VTBL_ENTRY)&_ZN6S233C63v39Ev,
  (VTBL_ENTRY)&_ZN6S233C63v40Ev,
  (VTBL_ENTRY)&_ZN6S233C63v41Ev,
  (VTBL_ENTRY)&_ZN6S233C63v42Ev,
  (VTBL_ENTRY)&_ZN6S233C63v43Ev,
  (VTBL_ENTRY)&_ZN6S233C63v44Ev,
  (VTBL_ENTRY)&_ZN6S233C63v45Ev,
  (VTBL_ENTRY)&_ZN6S233C63v46Ev,
  (VTBL_ENTRY)&_ZN6S233C63v47Ev,
  (VTBL_ENTRY)&_ZN6S233C63v48Ev,
  (VTBL_ENTRY)&_ZN6S233C63v49Ev,
  (VTBL_ENTRY)&_ZN6S233C63v50Ev,
  (VTBL_ENTRY)&_ZN6S233C63v51Ev,
  (VTBL_ENTRY)&_ZN6S233C63v52Ev,
  (VTBL_ENTRY)&_ZN6S233C63v53Ev,
  (VTBL_ENTRY)&_ZN6S233C63v54Ev,
  (VTBL_ENTRY)&_ZN6S233C63v55Ev,
  (VTBL_ENTRY)&_ZN6S233C63v56Ev,
  (VTBL_ENTRY)&_ZN6S233C63v57Ev,
  (VTBL_ENTRY)&_ZN6S233C63v58Ev,
  (VTBL_ENTRY)&_ZN6S233C63v59Ev,
  (VTBL_ENTRY)&_ZN6S233C63v60Ev,
  (VTBL_ENTRY)&_ZN6S233C63v61Ev,
  (VTBL_ENTRY)&_ZN6S233C63v62Ev,
  (VTBL_ENTRY)&_ZN6S233C63v63Ev,
  (VTBL_ENTRY)&_ZN6S233C63v64Ev,
  (VTBL_ENTRY)&_ZN6S233C63v65Ev,
  (VTBL_ENTRY)&_ZN6S233C63v66Ev,
  (VTBL_ENTRY)&_ZN6S233C63v67Ev,
  (VTBL_ENTRY)&_ZN6S233C63v68Ev,
  (VTBL_ENTRY)&_ZN6S233C53v69Ev,
  (VTBL_ENTRY)&_ZN6S233C53v70Ev,
  (VTBL_ENTRY)&_ZN6S233C53v71Ev,
  (VTBL_ENTRY)&_ZN6S233C53v72Ev,
  (VTBL_ENTRY)&_ZN6S233C53v73Ev,
  (VTBL_ENTRY)&_ZN6S233C53v74Ev,
  (VTBL_ENTRY)&_ZN6S233C53v75Ev,
  (VTBL_ENTRY)&_ZN6S233C53v76Ev,
  (VTBL_ENTRY)&_ZN6S233C53v77Ev,
  (VTBL_ENTRY)&_ZN6S233C53v78Ev,
  (VTBL_ENTRY)&_ZN6S233C53v79Ev,
  (VTBL_ENTRY)&_ZN6S233C53v80Ev,
  (VTBL_ENTRY)&_ZN6S233C53v81Ev,
  (VTBL_ENTRY)&_ZN6S233C53v82Ev,
  (VTBL_ENTRY)&_ZN6S233C53v83Ev,
  (VTBL_ENTRY)&_ZN6S233C53v84Ev,
  (VTBL_ENTRY)&_ZN6S233C53v85Ev,
  (VTBL_ENTRY)&_ZN6S233C53v86Ev,
  (VTBL_ENTRY)&_ZN6S233C53v87Ev,
  (VTBL_ENTRY)&_ZN6S233C53v88Ev,
  (VTBL_ENTRY)&_ZN6S233C53v89Ev,
  (VTBL_ENTRY)&_ZN6S233C53v90Ev,
  (VTBL_ENTRY)&_ZN6S233C53v91Ev,
  (VTBL_ENTRY)&_ZN6S233C53v92Ev,
  (VTBL_ENTRY)&_ZN6S233C53v93Ev,
  (VTBL_ENTRY)&_ZN6S233C53v94Ev,
  (VTBL_ENTRY)&_ZN6S233C53v95Ev,
  (VTBL_ENTRY)&_ZN6S233C43v96Ev,
  (VTBL_ENTRY)&_ZN6S233C43v97Ev,
  (VTBL_ENTRY)&_ZN6S233C43v98Ev,
  (VTBL_ENTRY)&_ZN6S233C43v99Ev,
  (VTBL_ENTRY)&_ZN6S233C44v100Ev,
  (VTBL_ENTRY)&_ZN6S233C44v101Ev,
  (VTBL_ENTRY)&_ZN6S233C44v102Ev,
  (VTBL_ENTRY)&_ZN6S233C44v103Ev,
  (VTBL_ENTRY)&_ZN6S233C44v104Ev,
  (VTBL_ENTRY)&_ZN6S233C44v105Ev,
  (VTBL_ENTRY)&_ZN6S233C44v106Ev,
  (VTBL_ENTRY)&_ZN6S233C44v107Ev,
  (VTBL_ENTRY)&_ZN6S233C44v108Ev,
  (VTBL_ENTRY)&_ZN6S233C44v109Ev,
  (VTBL_ENTRY)&_ZN6S233C44v110Ev,
  (VTBL_ENTRY)&_ZN6S233C44v111Ev,
  (VTBL_ENTRY)&_ZN6S233C44v112Ev,
  (VTBL_ENTRY)&_ZN6S233C44v113Ev,
};
extern VTBL_ENTRY _ZTI6S233C4[];
extern  VTBL_ENTRY _ZTV6S233C4[];
Class_Descriptor cd_S233C4 = {  "S233C4", // class name
  bases_S233C4, 2,
  &(vtc_S233C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S233C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S233C4),113, //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  S233C3  : S233C4 {
  ::S165C27 s233c3f0;
  int s233c3f1[2];
  unsigned int s233c3f2:1;
  virtual  ~S233C3(); // _ZN6S233C3D1Ev
  virtual void  v114(); // _ZN6S233C34v114Ev
  virtual void  v115(); // _ZN6S233C34v115Ev
  virtual void  v116(); // _ZN6S233C34v116Ev
  virtual void  v117(); // _ZN6S233C34v117Ev
  virtual void  v118(); // _ZN6S233C34v118Ev
  virtual void  v119(); // _ZN6S233C34v119Ev
  virtual void  v120(); // _ZN6S233C34v120Ev
  S233C3(); // tgen
};
//SIG(-1 S233C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 FC16{ BC17{ BC8}} Fi[2] Fi:1}


 S233C3 ::~S233C3(){ note_dtor("S233C3", this);}
void  S233C3 ::v114(){vfunc_called(this, "_ZN6S233C34v114Ev");}
void  S233C3 ::v115(){vfunc_called(this, "_ZN6S233C34v115Ev");}
void  S233C3 ::v116(){vfunc_called(this, "_ZN6S233C34v116Ev");}
void  S233C3 ::v117(){vfunc_called(this, "_ZN6S233C34v117Ev");}
void  S233C3 ::v118(){vfunc_called(this, "_ZN6S233C34v118Ev");}
void  S233C3 ::v119(){vfunc_called(this, "_ZN6S233C34v119Ev");}
void  S233C3 ::v120(){vfunc_called(this, "_ZN6S233C34v120Ev");}
S233C3 ::S233C3(){ note_ctor("S233C3", this);} // tgen

static void Test_S233C3()
{
  extern Class_Descriptor cd_S233C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,56)];
    init_test(&cd_S233C3, buf);
    S233C3 *dp, &lv = *(dp=new (buf) S233C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,220), "sizeof(S233C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S233C3)");
    check_base_class_offset(lv, (S233C6*)(S233C5*)(S233C4*), 0, "S233C3");
    check_base_class_offset(lv, (S233C5*)(S233C4*), 0, "S233C3");
    check_base_class_offset(lv, (S233C4*), 0, "S233C3");
    check_field_offset(lv, s233c3f0, ABISELECT(256,196), "S233C3.s233c3f0");
    check_field_offset(lv, s233c3f1, ABISELECT(272,208), "S233C3.s233c3f1");
    set_bf_and_test(lv, s233c3f2, ABISELECT(280,216), 0, 1, 1, "S233C3");
    test_class_info(&lv, &cd_S233C3);
    dp->~S233C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS233C3(Test_S233C3, "S233C3", ABISELECT(288,220));

#else // __cplusplus

extern void _ZN6S233C3C1Ev();
extern void _ZN6S233C3D1Ev();
Name_Map name_map_S233C3[] = {
  NSPAIR(_ZN6S233C3C1Ev),
  NSPAIR(_ZN6S233C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S233C6;
extern VTBL_ENTRY _ZTI6S233C6[];
extern  VTBL_ENTRY _ZTV6S233C6[];
extern Class_Descriptor cd_S233C5;
extern VTBL_ENTRY _ZTI6S233C5[];
extern  VTBL_ENTRY _ZTV6S233C5[];
extern Class_Descriptor cd_S233C4;
extern VTBL_ENTRY _ZTI6S233C4[];
extern  VTBL_ENTRY _ZTV6S233C4[];
static Base_Class bases_S233C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S233C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S233C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S233C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S233C3[];
extern void _ZN6S233C3D1Ev();
extern void _ZN6S233C3D0Ev();
extern void _ZN6S233C62v5Ev();
extern void _ZN6S233C62v6Ev();
extern void _ZN6S233C62v7Ev();
extern void _ZN6S233C62v8Ev();
extern void _ZN6S233C62v9Ev();
extern void _ZN6S233C63v10Ev();
extern void _ZN6S233C63v11Ev();
extern void _ZN6S233C63v12Ev();
extern void _ZN6S233C63v13Ev();
extern void _ZN6S233C63v14Ev();
extern void _ZN6S233C63v15Ev();
extern void _ZN6S233C63v16Ev();
extern void _ZN6S233C63v17Ev();
extern void _ZN6S233C63v18Ev();
extern void _ZN6S233C63v19Ev();
extern void _ZN6S233C63v20Ev();
extern void _ZN6S233C63v21Ev();
extern void _ZN6S233C63v22Ev();
extern void _ZN6S233C63v23Ev();
extern void _ZN6S233C63v24Ev();
extern void _ZN6S233C63v25Ev();
extern void _ZN6S233C63v26Ev();
extern void _ZN6S233C63v27Ev();
extern void _ZN6S233C63v28Ev();
extern void _ZN6S233C63v29Ev();
extern void _ZN6S233C63v30Ev();
extern void _ZN6S233C63v31Ev();
extern void _ZN6S233C63v32Ev();
extern void _ZN6S233C63v33Ev();
extern void _ZN6S233C63v34Ev();
extern void _ZN6S233C63v35Ev();
extern void _ZN6S233C63v36Ev();
extern void _ZN6S233C63v37Ev();
extern void _ZN6S233C63v38Ev();
extern void _ZN6S233C63v39Ev();
extern void _ZN6S233C63v40Ev();
extern void _ZN6S233C63v41Ev();
extern void _ZN6S233C63v42Ev();
extern void _ZN6S233C63v43Ev();
extern void _ZN6S233C63v44Ev();
extern void _ZN6S233C63v45Ev();
extern void _ZN6S233C63v46Ev();
extern void _ZN6S233C63v47Ev();
extern void _ZN6S233C63v48Ev();
extern void _ZN6S233C63v49Ev();
extern void _ZN6S233C63v50Ev();
extern void _ZN6S233C63v51Ev();
extern void _ZN6S233C63v52Ev();
extern void _ZN6S233C63v53Ev();
extern void _ZN6S233C63v54Ev();
extern void _ZN6S233C63v55Ev();
extern void _ZN6S233C63v56Ev();
extern void _ZN6S233C63v57Ev();
extern void _ZN6S233C63v58Ev();
extern void _ZN6S233C63v59Ev();
extern void _ZN6S233C63v60Ev();
extern void _ZN6S233C63v61Ev();
extern void _ZN6S233C63v62Ev();
extern void _ZN6S233C63v63Ev();
extern void _ZN6S233C63v64Ev();
extern void _ZN6S233C63v65Ev();
extern void _ZN6S233C63v66Ev();
extern void _ZN6S233C63v67Ev();
extern void _ZN6S233C63v68Ev();
extern void _ZN6S233C53v69Ev();
extern void _ZN6S233C53v70Ev();
extern void _ZN6S233C53v71Ev();
extern void _ZN6S233C53v72Ev();
extern void _ZN6S233C53v73Ev();
extern void _ZN6S233C53v74Ev();
extern void _ZN6S233C53v75Ev();
extern void _ZN6S233C53v76Ev();
extern void _ZN6S233C53v77Ev();
extern void _ZN6S233C53v78Ev();
extern void _ZN6S233C53v79Ev();
extern void _ZN6S233C53v80Ev();
extern void _ZN6S233C53v81Ev();
extern void _ZN6S233C53v82Ev();
extern void _ZN6S233C53v83Ev();
extern void _ZN6S233C53v84Ev();
extern void _ZN6S233C53v85Ev();
extern void _ZN6S233C53v86Ev();
extern void _ZN6S233C53v87Ev();
extern void _ZN6S233C53v88Ev();
extern void _ZN6S233C53v89Ev();
extern void _ZN6S233C53v90Ev();
extern void _ZN6S233C53v91Ev();
extern void _ZN6S233C53v92Ev();
extern void _ZN6S233C53v93Ev();
extern void _ZN6S233C53v94Ev();
extern void _ZN6S233C53v95Ev();
extern void _ZN6S233C43v96Ev();
extern void _ZN6S233C43v97Ev();
extern void _ZN6S233C43v98Ev();
extern void _ZN6S233C43v99Ev();
extern void _ZN6S233C44v100Ev();
extern void _ZN6S233C44v101Ev();
extern void _ZN6S233C44v102Ev();
extern void _ZN6S233C44v103Ev();
extern void _ZN6S233C44v104Ev();
extern void _ZN6S233C44v105Ev();
extern void _ZN6S233C44v106Ev();
extern void _ZN6S233C44v107Ev();
extern void _ZN6S233C44v108Ev();
extern void _ZN6S233C44v109Ev();
extern void _ZN6S233C44v110Ev();
extern void _ZN6S233C44v111Ev();
extern void _ZN6S233C44v112Ev();
extern void _ZN6S233C44v113Ev();
extern void _ZN6S233C34v114Ev();
extern void _ZN6S233C34v115Ev();
extern void _ZN6S233C34v116Ev();
extern void _ZN6S233C34v117Ev();
extern void _ZN6S233C34v118Ev();
extern void _ZN6S233C34v119Ev();
extern void _ZN6S233C34v120Ev();
static  VTBL_ENTRY vtc_S233C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S233C3[0]),
  (VTBL_ENTRY)&_ZN6S233C3D1Ev,
  (VTBL_ENTRY)&_ZN6S233C3D0Ev,
  (VTBL_ENTRY)&_ZN6S233C62v5Ev,
  (VTBL_ENTRY)&_ZN6S233C62v6Ev,
  (VTBL_ENTRY)&_ZN6S233C62v7Ev,
  (VTBL_ENTRY)&_ZN6S233C62v8Ev,
  (VTBL_ENTRY)&_ZN6S233C62v9Ev,
  (VTBL_ENTRY)&_ZN6S233C63v10Ev,
  (VTBL_ENTRY)&_ZN6S233C63v11Ev,
  (VTBL_ENTRY)&_ZN6S233C63v12Ev,
  (VTBL_ENTRY)&_ZN6S233C63v13Ev,
  (VTBL_ENTRY)&_ZN6S233C63v14Ev,
  (VTBL_ENTRY)&_ZN6S233C63v15Ev,
  (VTBL_ENTRY)&_ZN6S233C63v16Ev,
  (VTBL_ENTRY)&_ZN6S233C63v17Ev,
  (VTBL_ENTRY)&_ZN6S233C63v18Ev,
  (VTBL_ENTRY)&_ZN6S233C63v19Ev,
  (VTBL_ENTRY)&_ZN6S233C63v20Ev,
  (VTBL_ENTRY)&_ZN6S233C63v21Ev,
  (VTBL_ENTRY)&_ZN6S233C63v22Ev,
  (VTBL_ENTRY)&_ZN6S233C63v23Ev,
  (VTBL_ENTRY)&_ZN6S233C63v24Ev,
  (VTBL_ENTRY)&_ZN6S233C63v25Ev,
  (VTBL_ENTRY)&_ZN6S233C63v26Ev,
  (VTBL_ENTRY)&_ZN6S233C63v27Ev,
  (VTBL_ENTRY)&_ZN6S233C63v28Ev,
  (VTBL_ENTRY)&_ZN6S233C63v29Ev,
  (VTBL_ENTRY)&_ZN6S233C63v30Ev,
  (VTBL_ENTRY)&_ZN6S233C63v31Ev,
  (VTBL_ENTRY)&_ZN6S233C63v32Ev,
  (VTBL_ENTRY)&_ZN6S233C63v33Ev,
  (VTBL_ENTRY)&_ZN6S233C63v34Ev,
  (VTBL_ENTRY)&_ZN6S233C63v35Ev,
  (VTBL_ENTRY)&_ZN6S233C63v36Ev,
  (VTBL_ENTRY)&_ZN6S233C63v37Ev,
  (VTBL_ENTRY)&_ZN6S233C63v38Ev,
  (VTBL_ENTRY)&_ZN6S233C63v39Ev,
  (VTBL_ENTRY)&_ZN6S233C63v40Ev,
  (VTBL_ENTRY)&_ZN6S233C63v41Ev,
  (VTBL_ENTRY)&_ZN6S233C63v42Ev,
  (VTBL_ENTRY)&_ZN6S233C63v43Ev,
  (VTBL_ENTRY)&_ZN6S233C63v44Ev,
  (VTBL_ENTRY)&_ZN6S233C63v45Ev,
  (VTBL_ENTRY)&_ZN6S233C63v46Ev,
  (VTBL_ENTRY)&_ZN6S233C63v47Ev,
  (VTBL_ENTRY)&_ZN6S233C63v48Ev,
  (VTBL_ENTRY)&_ZN6S233C63v49Ev,
  (VTBL_ENTRY)&_ZN6S233C63v50Ev,
  (VTBL_ENTRY)&_ZN6S233C63v51Ev,
  (VTBL_ENTRY)&_ZN6S233C63v52Ev,
  (VTBL_ENTRY)&_ZN6S233C63v53Ev,
  (VTBL_ENTRY)&_ZN6S233C63v54Ev,
  (VTBL_ENTRY)&_ZN6S233C63v55Ev,
  (VTBL_ENTRY)&_ZN6S233C63v56Ev,
  (VTBL_ENTRY)&_ZN6S233C63v57Ev,
  (VTBL_ENTRY)&_ZN6S233C63v58Ev,
  (VTBL_ENTRY)&_ZN6S233C63v59Ev,
  (VTBL_ENTRY)&_ZN6S233C63v60Ev,
  (VTBL_ENTRY)&_ZN6S233C63v61Ev,
  (VTBL_ENTRY)&_ZN6S233C63v62Ev,
  (VTBL_ENTRY)&_ZN6S233C63v63Ev,
  (VTBL_ENTRY)&_ZN6S233C63v64Ev,
  (VTBL_ENTRY)&_ZN6S233C63v65Ev,
  (VTBL_ENTRY)&_ZN6S233C63v66Ev,
  (VTBL_ENTRY)&_ZN6S233C63v67Ev,
  (VTBL_ENTRY)&_ZN6S233C63v68Ev,
  (VTBL_ENTRY)&_ZN6S233C53v69Ev,
  (VTBL_ENTRY)&_ZN6S233C53v70Ev,
  (VTBL_ENTRY)&_ZN6S233C53v71Ev,
  (VTBL_ENTRY)&_ZN6S233C53v72Ev,
  (VTBL_ENTRY)&_ZN6S233C53v73Ev,
  (VTBL_ENTRY)&_ZN6S233C53v74Ev,
  (VTBL_ENTRY)&_ZN6S233C53v75Ev,
  (VTBL_ENTRY)&_ZN6S233C53v76Ev,
  (VTBL_ENTRY)&_ZN6S233C53v77Ev,
  (VTBL_ENTRY)&_ZN6S233C53v78Ev,
  (VTBL_ENTRY)&_ZN6S233C53v79Ev,
  (VTBL_ENTRY)&_ZN6S233C53v80Ev,
  (VTBL_ENTRY)&_ZN6S233C53v81Ev,
  (VTBL_ENTRY)&_ZN6S233C53v82Ev,
  (VTBL_ENTRY)&_ZN6S233C53v83Ev,
  (VTBL_ENTRY)&_ZN6S233C53v84Ev,
  (VTBL_ENTRY)&_ZN6S233C53v85Ev,
  (VTBL_ENTRY)&_ZN6S233C53v86Ev,
  (VTBL_ENTRY)&_ZN6S233C53v87Ev,
  (VTBL_ENTRY)&_ZN6S233C53v88Ev,
  (VTBL_ENTRY)&_ZN6S233C53v89Ev,
  (VTBL_ENTRY)&_ZN6S233C53v90Ev,
  (VTBL_ENTRY)&_ZN6S233C53v91Ev,
  (VTBL_ENTRY)&_ZN6S233C53v92Ev,
  (VTBL_ENTRY)&_ZN6S233C53v93Ev,
  (VTBL_ENTRY)&_ZN6S233C53v94Ev,
  (VTBL_ENTRY)&_ZN6S233C53v95Ev,
  (VTBL_ENTRY)&_ZN6S233C43v96Ev,
  (VTBL_ENTRY)&_ZN6S233C43v97Ev,
  (VTBL_ENTRY)&_ZN6S233C43v98Ev,
  (VTBL_ENTRY)&_ZN6S233C43v99Ev,
  (VTBL_ENTRY)&_ZN6S233C44v100Ev,
  (VTBL_ENTRY)&_ZN6S233C44v101Ev,
  (VTBL_ENTRY)&_ZN6S233C44v102Ev,
  (VTBL_ENTRY)&_ZN6S233C44v103Ev,
  (VTBL_ENTRY)&_ZN6S233C44v104Ev,
  (VTBL_ENTRY)&_ZN6S233C44v105Ev,
  (VTBL_ENTRY)&_ZN6S233C44v106Ev,
  (VTBL_ENTRY)&_ZN6S233C44v107Ev,
  (VTBL_ENTRY)&_ZN6S233C44v108Ev,
  (VTBL_ENTRY)&_ZN6S233C44v109Ev,
  (VTBL_ENTRY)&_ZN6S233C44v110Ev,
  (VTBL_ENTRY)&_ZN6S233C44v111Ev,
  (VTBL_ENTRY)&_ZN6S233C44v112Ev,
  (VTBL_ENTRY)&_ZN6S233C44v113Ev,
  (VTBL_ENTRY)&_ZN6S233C34v114Ev,
  (VTBL_ENTRY)&_ZN6S233C34v115Ev,
  (VTBL_ENTRY)&_ZN6S233C34v116Ev,
  (VTBL_ENTRY)&_ZN6S233C34v117Ev,
  (VTBL_ENTRY)&_ZN6S233C34v118Ev,
  (VTBL_ENTRY)&_ZN6S233C34v119Ev,
  (VTBL_ENTRY)&_ZN6S233C34v120Ev,
};
extern VTBL_ENTRY _ZTI6S233C3[];
extern  VTBL_ENTRY _ZTV6S233C3[];
Class_Descriptor cd_S233C3 = {  "S233C3", // class name
  bases_S233C3, 3,
  &(vtc_S233C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,220), // object size
  NSPAIRA(_ZTI6S233C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S233C3),120, //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  S233C2  : S233C3 {
  int s233c2f0;
  ::S165C27 s233c2f1;
  int s233c2f2;
  virtual  ~S233C2(); // _ZN6S233C2D1Ev
  virtual void  v121(); // _ZN6S233C24v121Ev
  virtual void  v122(); // _ZN6S233C24v122Ev
  virtual void  v123(); // _ZN6S233C24v123Ev
  virtual void  v124(); // _ZN6S233C24v124Ev
  virtual void  v125(); // _ZN6S233C24v125Ev
  virtual void  v126(); // _ZN6S233C24v126Ev
  S233C2(); // tgen
};
//SIG(-1 S233C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v93 v94 v95 v96 v97 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC15{ BC16{ BC9}} Fi:1} vd v116 v117 v118 v119 v120 v121 v122 FC17{ BC18{ BC9}} Fi[2] Fi:1} vd v1 v2 v3 v4 v5 v6 Fi FC17 Fi}


 S233C2 ::~S233C2(){ note_dtor("S233C2", this);}
void  S233C2 ::v121(){vfunc_called(this, "_ZN6S233C24v121Ev");}
void  S233C2 ::v122(){vfunc_called(this, "_ZN6S233C24v122Ev");}
void  S233C2 ::v123(){vfunc_called(this, "_ZN6S233C24v123Ev");}
void  S233C2 ::v124(){vfunc_called(this, "_ZN6S233C24v124Ev");}
void  S233C2 ::v125(){vfunc_called(this, "_ZN6S233C24v125Ev");}
void  S233C2 ::v126(){vfunc_called(this, "_ZN6S233C24v126Ev");}
S233C2 ::S233C2(){ note_ctor("S233C2", this);} // tgen

static void Test_S233C2()
{
  extern Class_Descriptor cd_S233C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,61)];
    init_test(&cd_S233C2, buf);
    S233C2 *dp, &lv = *(dp=new (buf) S233C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,240), "sizeof(S233C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S233C2)");
    check_base_class_offset(lv, (S233C6*)(S233C5*)(S233C4*)(S233C3*), 0, "S233C2");
    check_base_class_offset(lv, (S233C5*)(S233C4*)(S233C3*), 0, "S233C2");
    check_base_class_offset(lv, (S233C4*)(S233C3*), 0, "S233C2");
    check_base_class_offset(lv, (S233C3*), 0, "S233C2");
    check_field_offset(lv, s233c2f0, ABISELECT(284,220), "S233C2.s233c2f0");
    check_field_offset(lv, s233c2f1, ABISELECT(288,224), "S233C2.s233c2f1");
    check_field_offset(lv, s233c2f2, ABISELECT(304,236), "S233C2.s233c2f2");
    test_class_info(&lv, &cd_S233C2);
    dp->~S233C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS233C2(Test_S233C2, "S233C2", ABISELECT(312,240));

#else // __cplusplus

extern void _ZN6S233C2C1Ev();
extern void _ZN6S233C2D1Ev();
Name_Map name_map_S233C2[] = {
  NSPAIR(_ZN6S233C2C1Ev),
  NSPAIR(_ZN6S233C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S233C6;
extern VTBL_ENTRY _ZTI6S233C6[];
extern  VTBL_ENTRY _ZTV6S233C6[];
extern Class_Descriptor cd_S233C5;
extern VTBL_ENTRY _ZTI6S233C5[];
extern  VTBL_ENTRY _ZTV6S233C5[];
extern Class_Descriptor cd_S233C4;
extern VTBL_ENTRY _ZTI6S233C4[];
extern  VTBL_ENTRY _ZTV6S233C4[];
extern Class_Descriptor cd_S233C3;
extern VTBL_ENTRY _ZTI6S233C3[];
extern  VTBL_ENTRY _ZTV6S233C3[];
static Base_Class bases_S233C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S233C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S233C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S233C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S233C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S233C2[];
extern void _ZN6S233C2D1Ev();
extern void _ZN6S233C2D0Ev();
extern void _ZN6S233C62v5Ev();
extern void _ZN6S233C62v6Ev();
extern void _ZN6S233C62v7Ev();
extern void _ZN6S233C62v8Ev();
extern void _ZN6S233C62v9Ev();
extern void _ZN6S233C63v10Ev();
extern void _ZN6S233C63v11Ev();
extern void _ZN6S233C63v12Ev();
extern void _ZN6S233C63v13Ev();
extern void _ZN6S233C63v14Ev();
extern void _ZN6S233C63v15Ev();
extern void _ZN6S233C63v16Ev();
extern void _ZN6S233C63v17Ev();
extern void _ZN6S233C63v18Ev();
extern void _ZN6S233C63v19Ev();
extern void _ZN6S233C63v20Ev();
extern void _ZN6S233C63v21Ev();
extern void _ZN6S233C63v22Ev();
extern void _ZN6S233C63v23Ev();
extern void _ZN6S233C63v24Ev();
extern void _ZN6S233C63v25Ev();
extern void _ZN6S233C63v26Ev();
extern void _ZN6S233C63v27Ev();
extern void _ZN6S233C63v28Ev();
extern void _ZN6S233C63v29Ev();
extern void _ZN6S233C63v30Ev();
extern void _ZN6S233C63v31Ev();
extern void _ZN6S233C63v32Ev();
extern void _ZN6S233C63v33Ev();
extern void _ZN6S233C63v34Ev();
extern void _ZN6S233C63v35Ev();
extern void _ZN6S233C63v36Ev();
extern void _ZN6S233C63v37Ev();
extern void _ZN6S233C63v38Ev();
extern void _ZN6S233C63v39Ev();
extern void _ZN6S233C63v40Ev();
extern void _ZN6S233C63v41Ev();
extern void _ZN6S233C63v42Ev();
extern void _ZN6S233C63v43Ev();
extern void _ZN6S233C63v44Ev();
extern void _ZN6S233C63v45Ev();
extern void _ZN6S233C63v46Ev();
extern void _ZN6S233C63v47Ev();
extern void _ZN6S233C63v48Ev();
extern void _ZN6S233C63v49Ev();
extern void _ZN6S233C63v50Ev();
extern void _ZN6S233C63v51Ev();
extern void _ZN6S233C63v52Ev();
extern void _ZN6S233C63v53Ev();
extern void _ZN6S233C63v54Ev();
extern void _ZN6S233C63v55Ev();
extern void _ZN6S233C63v56Ev();
extern void _ZN6S233C63v57Ev();
extern void _ZN6S233C63v58Ev();
extern void _ZN6S233C63v59Ev();
extern void _ZN6S233C63v60Ev();
extern void _ZN6S233C63v61Ev();
extern void _ZN6S233C63v62Ev();
extern void _ZN6S233C63v63Ev();
extern void _ZN6S233C63v64Ev();
extern void _ZN6S233C63v65Ev();
extern void _ZN6S233C63v66Ev();
extern void _ZN6S233C63v67Ev();
extern void _ZN6S233C63v68Ev();
extern void _ZN6S233C53v69Ev();
extern void _ZN6S233C53v70Ev();
extern void _ZN6S233C53v71Ev();
extern void _ZN6S233C53v72Ev();
extern void _ZN6S233C53v73Ev();
extern void _ZN6S233C53v74Ev();
extern void _ZN6S233C53v75Ev();
extern void _ZN6S233C53v76Ev();
extern void _ZN6S233C53v77Ev();
extern void _ZN6S233C53v78Ev();
extern void _ZN6S233C53v79Ev();
extern void _ZN6S233C53v80Ev();
extern void _ZN6S233C53v81Ev();
extern void _ZN6S233C53v82Ev();
extern void _ZN6S233C53v83Ev();
extern void _ZN6S233C53v84Ev();
extern void _ZN6S233C53v85Ev();
extern void _ZN6S233C53v86Ev();
extern void _ZN6S233C53v87Ev();
extern void _ZN6S233C53v88Ev();
extern void _ZN6S233C53v89Ev();
extern void _ZN6S233C53v90Ev();
extern void _ZN6S233C53v91Ev();
extern void _ZN6S233C53v92Ev();
extern void _ZN6S233C53v93Ev();
extern void _ZN6S233C53v94Ev();
extern void _ZN6S233C53v95Ev();
extern void _ZN6S233C43v96Ev();
extern void _ZN6S233C43v97Ev();
extern void _ZN6S233C43v98Ev();
extern void _ZN6S233C43v99Ev();
extern void _ZN6S233C44v100Ev();
extern void _ZN6S233C44v101Ev();
extern void _ZN6S233C44v102Ev();
extern void _ZN6S233C44v103Ev();
extern void _ZN6S233C44v104Ev();
extern void _ZN6S233C44v105Ev();
extern void _ZN6S233C44v106Ev();
extern void _ZN6S233C44v107Ev();
extern void _ZN6S233C44v108Ev();
extern void _ZN6S233C44v109Ev();
extern void _ZN6S233C44v110Ev();
extern void _ZN6S233C44v111Ev();
extern void _ZN6S233C44v112Ev();
extern void _ZN6S233C44v113Ev();
extern void _ZN6S233C34v114Ev();
extern void _ZN6S233C34v115Ev();
extern void _ZN6S233C34v116Ev();
extern void _ZN6S233C34v117Ev();
extern void _ZN6S233C34v118Ev();
extern void _ZN6S233C34v119Ev();
extern void _ZN6S233C34v120Ev();
extern void _ZN6S233C24v121Ev();
extern void _ZN6S233C24v122Ev();
extern void _ZN6S233C24v123Ev();
extern void _ZN6S233C24v124Ev();
extern void _ZN6S233C24v125Ev();
extern void _ZN6S233C24v126Ev();
static  VTBL_ENTRY vtc_S233C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S233C2[0]),
  (VTBL_ENTRY)&_ZN6S233C2D1Ev,
  (VTBL_ENTRY)&_ZN6S233C2D0Ev,
  (VTBL_ENTRY)&_ZN6S233C62v5Ev,
  (VTBL_ENTRY)&_ZN6S233C62v6Ev,
  (VTBL_ENTRY)&_ZN6S233C62v7Ev,
  (VTBL_ENTRY)&_ZN6S233C62v8Ev,
  (VTBL_ENTRY)&_ZN6S233C62v9Ev,
  (VTBL_ENTRY)&_ZN6S233C63v10Ev,
  (VTBL_ENTRY)&_ZN6S233C63v11Ev,
  (VTBL_ENTRY)&_ZN6S233C63v12Ev,
  (VTBL_ENTRY)&_ZN6S233C63v13Ev,
  (VTBL_ENTRY)&_ZN6S233C63v14Ev,
  (VTBL_ENTRY)&_ZN6S233C63v15Ev,
  (VTBL_ENTRY)&_ZN6S233C63v16Ev,
  (VTBL_ENTRY)&_ZN6S233C63v17Ev,
  (VTBL_ENTRY)&_ZN6S233C63v18Ev,
  (VTBL_ENTRY)&_ZN6S233C63v19Ev,
  (VTBL_ENTRY)&_ZN6S233C63v20Ev,
  (VTBL_ENTRY)&_ZN6S233C63v21Ev,
  (VTBL_ENTRY)&_ZN6S233C63v22Ev,
  (VTBL_ENTRY)&_ZN6S233C63v23Ev,
  (VTBL_ENTRY)&_ZN6S233C63v24Ev,
  (VTBL_ENTRY)&_ZN6S233C63v25Ev,
  (VTBL_ENTRY)&_ZN6S233C63v26Ev,
  (VTBL_ENTRY)&_ZN6S233C63v27Ev,
  (VTBL_ENTRY)&_ZN6S233C63v28Ev,
  (VTBL_ENTRY)&_ZN6S233C63v29Ev,
  (VTBL_ENTRY)&_ZN6S233C63v30Ev,
  (VTBL_ENTRY)&_ZN6S233C63v31Ev,
  (VTBL_ENTRY)&_ZN6S233C63v32Ev,
  (VTBL_ENTRY)&_ZN6S233C63v33Ev,
  (VTBL_ENTRY)&_ZN6S233C63v34Ev,
  (VTBL_ENTRY)&_ZN6S233C63v35Ev,
  (VTBL_ENTRY)&_ZN6S233C63v36Ev,
  (VTBL_ENTRY)&_ZN6S233C63v37Ev,
  (VTBL_ENTRY)&_ZN6S233C63v38Ev,
  (VTBL_ENTRY)&_ZN6S233C63v39Ev,
  (VTBL_ENTRY)&_ZN6S233C63v40Ev,
  (VTBL_ENTRY)&_ZN6S233C63v41Ev,
  (VTBL_ENTRY)&_ZN6S233C63v42Ev,
  (VTBL_ENTRY)&_ZN6S233C63v43Ev,
  (VTBL_ENTRY)&_ZN6S233C63v44Ev,
  (VTBL_ENTRY)&_ZN6S233C63v45Ev,
  (VTBL_ENTRY)&_ZN6S233C63v46Ev,
  (VTBL_ENTRY)&_ZN6S233C63v47Ev,
  (VTBL_ENTRY)&_ZN6S233C63v48Ev,
  (VTBL_ENTRY)&_ZN6S233C63v49Ev,
  (VTBL_ENTRY)&_ZN6S233C63v50Ev,
  (VTBL_ENTRY)&_ZN6S233C63v51Ev,
  (VTBL_ENTRY)&_ZN6S233C63v52Ev,
  (VTBL_ENTRY)&_ZN6S233C63v53Ev,
  (VTBL_ENTRY)&_ZN6S233C63v54Ev,
  (VTBL_ENTRY)&_ZN6S233C63v55Ev,
  (VTBL_ENTRY)&_ZN6S233C63v56Ev,
  (VTBL_ENTRY)&_ZN6S233C63v57Ev,
  (VTBL_ENTRY)&_ZN6S233C63v58Ev,
  (VTBL_ENTRY)&_ZN6S233C63v59Ev,
  (VTBL_ENTRY)&_ZN6S233C63v60Ev,
  (VTBL_ENTRY)&_ZN6S233C63v61Ev,
  (VTBL_ENTRY)&_ZN6S233C63v62Ev,
  (VTBL_ENTRY)&_ZN6S233C63v63Ev,
  (VTBL_ENTRY)&_ZN6S233C63v64Ev,
  (VTBL_ENTRY)&_ZN6S233C63v65Ev,
  (VTBL_ENTRY)&_ZN6S233C63v66Ev,
  (VTBL_ENTRY)&_ZN6S233C63v67Ev,
  (VTBL_ENTRY)&_ZN6S233C63v68Ev,
  (VTBL_ENTRY)&_ZN6S233C53v69Ev,
  (VTBL_ENTRY)&_ZN6S233C53v70Ev,
  (VTBL_ENTRY)&_ZN6S233C53v71Ev,
  (VTBL_ENTRY)&_ZN6S233C53v72Ev,
  (VTBL_ENTRY)&_ZN6S233C53v73Ev,
  (VTBL_ENTRY)&_ZN6S233C53v74Ev,
  (VTBL_ENTRY)&_ZN6S233C53v75Ev,
  (VTBL_ENTRY)&_ZN6S233C53v76Ev,
  (VTBL_ENTRY)&_ZN6S233C53v77Ev,
  (VTBL_ENTRY)&_ZN6S233C53v78Ev,
  (VTBL_ENTRY)&_ZN6S233C53v79Ev,
  (VTBL_ENTRY)&_ZN6S233C53v80Ev,
  (VTBL_ENTRY)&_ZN6S233C53v81Ev,
  (VTBL_ENTRY)&_ZN6S233C53v82Ev,
  (VTBL_ENTRY)&_ZN6S233C53v83Ev,
  (VTBL_ENTRY)&_ZN6S233C53v84Ev,
  (VTBL_ENTRY)&_ZN6S233C53v85Ev,
  (VTBL_ENTRY)&_ZN6S233C53v86Ev,
  (VTBL_ENTRY)&_ZN6S233C53v87Ev,
  (VTBL_ENTRY)&_ZN6S233C53v88Ev,
  (VTBL_ENTRY)&_ZN6S233C53v89Ev,
  (VTBL_ENTRY)&_ZN6S233C53v90Ev,
  (VTBL_ENTRY)&_ZN6S233C53v91Ev,
  (VTBL_ENTRY)&_ZN6S233C53v92Ev,
  (VTBL_ENTRY)&_ZN6S233C53v93Ev,
  (VTBL_ENTRY)&_ZN6S233C53v94Ev,
  (VTBL_ENTRY)&_ZN6S233C53v95Ev,
  (VTBL_ENTRY)&_ZN6S233C43v96Ev,
  (VTBL_ENTRY)&_ZN6S233C43v97Ev,
  (VTBL_ENTRY)&_ZN6S233C43v98Ev,
  (VTBL_ENTRY)&_ZN6S233C43v99Ev,
  (VTBL_ENTRY)&_ZN6S233C44v100Ev,
  (VTBL_ENTRY)&_ZN6S233C44v101Ev,
  (VTBL_ENTRY)&_ZN6S233C44v102Ev,
  (VTBL_ENTRY)&_ZN6S233C44v103Ev,
  (VTBL_ENTRY)&_ZN6S233C44v104Ev,
  (VTBL_ENTRY)&_ZN6S233C44v105Ev,
  (VTBL_ENTRY)&_ZN6S233C44v106Ev,
  (VTBL_ENTRY)&_ZN6S233C44v107Ev,
  (VTBL_ENTRY)&_ZN6S233C44v108Ev,
  (VTBL_ENTRY)&_ZN6S233C44v109Ev,
  (VTBL_ENTRY)&_ZN6S233C44v110Ev,
  (VTBL_ENTRY)&_ZN6S233C44v111Ev,
  (VTBL_ENTRY)&_ZN6S233C44v112Ev,
  (VTBL_ENTRY)&_ZN6S233C44v113Ev,
  (VTBL_ENTRY)&_ZN6S233C34v114Ev,
  (VTBL_ENTRY)&_ZN6S233C34v115Ev,
  (VTBL_ENTRY)&_ZN6S233C34v116Ev,
  (VTBL_ENTRY)&_ZN6S233C34v117Ev,
  (VTBL_ENTRY)&_ZN6S233C34v118Ev,
  (VTBL_ENTRY)&_ZN6S233C34v119Ev,
  (VTBL_ENTRY)&_ZN6S233C34v120Ev,
  (VTBL_ENTRY)&_ZN6S233C24v121Ev,
  (VTBL_ENTRY)&_ZN6S233C24v122Ev,
  (VTBL_ENTRY)&_ZN6S233C24v123Ev,
  (VTBL_ENTRY)&_ZN6S233C24v124Ev,
  (VTBL_ENTRY)&_ZN6S233C24v125Ev,
  (VTBL_ENTRY)&_ZN6S233C24v126Ev,
};
extern VTBL_ENTRY _ZTI6S233C2[];
extern  VTBL_ENTRY _ZTV6S233C2[];
Class_Descriptor cd_S233C2 = {  "S233C2", // class name
  bases_S233C2, 4,
  &(vtc_S233C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,240), // object size
  NSPAIRA(_ZTI6S233C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S233C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S233C1  : S233C2 {
  int s233c1f0[3];
  virtual  ~S233C1(); // _ZN6S233C1D1Ev
  virtual void  v1(); // _ZN6S233C12v1Ev
  virtual void  v2(); // _ZN6S233C12v2Ev
  virtual void  v3(); // _ZN6S233C12v3Ev
  virtual void  v4(); // _ZN6S233C12v4Ev
  S233C1(); // tgen
};
//SIG(1 S233C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 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 FC7{ 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 v91 v92 v93 v94 v95 Fp FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC7 FC11{ BC12{ BC10}} FC13{ m FC14{ m Fi[4]} FC15{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 FC16{ BC17{ BC10}} Fi:1} vd v114 v115 v116 v117 v118 v119 v120 FC18{ BC19{ BC10}} Fi[2] Fi:1} vd v121 v122 v123 v124 v125 v126 Fi FC18 Fi} vd v1 v2 v3 v4 Fi[3]}


 S233C1 ::~S233C1(){ note_dtor("S233C1", this);}
void  S233C1 ::v1(){vfunc_called(this, "_ZN6S233C12v1Ev");}
void  S233C1 ::v2(){vfunc_called(this, "_ZN6S233C12v2Ev");}
void  S233C1 ::v3(){vfunc_called(this, "_ZN6S233C12v3Ev");}
void  S233C1 ::v4(){vfunc_called(this, "_ZN6S233C12v4Ev");}
S233C1 ::S233C1(){ note_ctor("S233C1", this);} // tgen

static void Test_S233C1()
{
  extern Class_Descriptor cd_S233C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,64)];
    init_test(&cd_S233C1, buf);
    S233C1 *dp, &lv = *(dp=new (buf) S233C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,252), "sizeof(S233C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S233C1)");
    check_base_class_offset(lv, (S233C6*)(S233C5*)(S233C4*)(S233C3*)(S233C2*), 0, "S233C1");
    check_base_class_offset(lv, (S233C5*)(S233C4*)(S233C3*)(S233C2*), 0, "S233C1");
    check_base_class_offset(lv, (S233C4*)(S233C3*)(S233C2*), 0, "S233C1");
    check_base_class_offset(lv, (S233C3*)(S233C2*), 0, "S233C1");
    check_base_class_offset(lv, (S233C2*), 0, "S233C1");
    check_field_offset(lv, s233c1f0, ABISELECT(308,240), "S233C1.s233c1f0");
    test_class_info(&lv, &cd_S233C1);
    dp->~S233C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS233C1(Test_S233C1, "S233C1", ABISELECT(320,252));

#else // __cplusplus

extern void _ZN6S233C1C1Ev();
extern void _ZN6S233C1D1Ev();
Name_Map name_map_S233C1[] = {
  NSPAIR(_ZN6S233C1C1Ev),
  NSPAIR(_ZN6S233C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S233C6;
extern VTBL_ENTRY _ZTI6S233C6[];
extern  VTBL_ENTRY _ZTV6S233C6[];
extern Class_Descriptor cd_S233C5;
extern VTBL_ENTRY _ZTI6S233C5[];
extern  VTBL_ENTRY _ZTV6S233C5[];
extern Class_Descriptor cd_S233C4;
extern VTBL_ENTRY _ZTI6S233C4[];
extern  VTBL_ENTRY _ZTV6S233C4[];
extern Class_Descriptor cd_S233C3;
extern VTBL_ENTRY _ZTI6S233C3[];
extern  VTBL_ENTRY _ZTV6S233C3[];
extern Class_Descriptor cd_S233C2;
extern VTBL_ENTRY _ZTI6S233C2[];
extern  VTBL_ENTRY _ZTV6S233C2[];
static Base_Class bases_S233C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S233C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S233C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S233C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S233C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S233C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S233C1[];
extern void _ZN6S233C1D1Ev();
extern void _ZN6S233C1D0Ev();
extern void _ZN6S233C62v5Ev();
extern void _ZN6S233C62v6Ev();
extern void _ZN6S233C62v7Ev();
extern void _ZN6S233C62v8Ev();
extern void _ZN6S233C62v9Ev();
extern void _ZN6S233C63v10Ev();
extern void _ZN6S233C63v11Ev();
extern void _ZN6S233C63v12Ev();
extern void _ZN6S233C63v13Ev();
extern void _ZN6S233C63v14Ev();
extern void _ZN6S233C63v15Ev();
extern void _ZN6S233C63v16Ev();
extern void _ZN6S233C63v17Ev();
extern void _ZN6S233C63v18Ev();
extern void _ZN6S233C63v19Ev();
extern void _ZN6S233C63v20Ev();
extern void _ZN6S233C63v21Ev();
extern void _ZN6S233C63v22Ev();
extern void _ZN6S233C63v23Ev();
extern void _ZN6S233C63v24Ev();
extern void _ZN6S233C63v25Ev();
extern void _ZN6S233C63v26Ev();
extern void _ZN6S233C63v27Ev();
extern void _ZN6S233C63v28Ev();
extern void _ZN6S233C63v29Ev();
extern void _ZN6S233C63v30Ev();
extern void _ZN6S233C63v31Ev();
extern void _ZN6S233C63v32Ev();
extern void _ZN6S233C63v33Ev();
extern void _ZN6S233C63v34Ev();
extern void _ZN6S233C63v35Ev();
extern void _ZN6S233C63v36Ev();
extern void _ZN6S233C63v37Ev();
extern void _ZN6S233C63v38Ev();
extern void _ZN6S233C63v39Ev();
extern void _ZN6S233C63v40Ev();
extern void _ZN6S233C63v41Ev();
extern void _ZN6S233C63v42Ev();
extern void _ZN6S233C63v43Ev();
extern void _ZN6S233C63v44Ev();
extern void _ZN6S233C63v45Ev();
extern void _ZN6S233C63v46Ev();
extern void _ZN6S233C63v47Ev();
extern void _ZN6S233C63v48Ev();
extern void _ZN6S233C63v49Ev();
extern void _ZN6S233C63v50Ev();
extern void _ZN6S233C63v51Ev();
extern void _ZN6S233C63v52Ev();
extern void _ZN6S233C63v53Ev();
extern void _ZN6S233C63v54Ev();
extern void _ZN6S233C63v55Ev();
extern void _ZN6S233C63v56Ev();
extern void _ZN6S233C63v57Ev();
extern void _ZN6S233C63v58Ev();
extern void _ZN6S233C63v59Ev();
extern void _ZN6S233C63v60Ev();
extern void _ZN6S233C63v61Ev();
extern void _ZN6S233C63v62Ev();
extern void _ZN6S233C63v63Ev();
extern void _ZN6S233C63v64Ev();
extern void _ZN6S233C63v65Ev();
extern void _ZN6S233C63v66Ev();
extern void _ZN6S233C63v67Ev();
extern void _ZN6S233C63v68Ev();
extern void _ZN6S233C53v69Ev();
extern void _ZN6S233C53v70Ev();
extern void _ZN6S233C53v71Ev();
extern void _ZN6S233C53v72Ev();
extern void _ZN6S233C53v73Ev();
extern void _ZN6S233C53v74Ev();
extern void _ZN6S233C53v75Ev();
extern void _ZN6S233C53v76Ev();
extern void _ZN6S233C53v77Ev();
extern void _ZN6S233C53v78Ev();
extern void _ZN6S233C53v79Ev();
extern void _ZN6S233C53v80Ev();
extern void _ZN6S233C53v81Ev();
extern void _ZN6S233C53v82Ev();
extern void _ZN6S233C53v83Ev();
extern void _ZN6S233C53v84Ev();
extern void _ZN6S233C53v85Ev();
extern void _ZN6S233C53v86Ev();
extern void _ZN6S233C53v87Ev();
extern void _ZN6S233C53v88Ev();
extern void _ZN6S233C53v89Ev();
extern void _ZN6S233C53v90Ev();
extern void _ZN6S233C53v91Ev();
extern void _ZN6S233C53v92Ev();
extern void _ZN6S233C53v93Ev();
extern void _ZN6S233C53v94Ev();
extern void _ZN6S233C53v95Ev();
extern void _ZN6S233C43v96Ev();
extern void _ZN6S233C43v97Ev();
extern void _ZN6S233C43v98Ev();
extern void _ZN6S233C43v99Ev();
extern void _ZN6S233C44v100Ev();
extern void _ZN6S233C44v101Ev();
extern void _ZN6S233C44v102Ev();
extern void _ZN6S233C44v103Ev();
extern void _ZN6S233C44v104Ev();
extern void _ZN6S233C44v105Ev();
extern void _ZN6S233C44v106Ev();
extern void _ZN6S233C44v107Ev();
extern void _ZN6S233C44v108Ev();
extern void _ZN6S233C44v109Ev();
extern void _ZN6S233C44v110Ev();
extern void _ZN6S233C44v111Ev();
extern void _ZN6S233C44v112Ev();
extern void _ZN6S233C44v113Ev();
extern void _ZN6S233C34v114Ev();
extern void _ZN6S233C34v115Ev();
extern void _ZN6S233C34v116Ev();
extern void _ZN6S233C34v117Ev();
extern void _ZN6S233C34v118Ev();
extern void _ZN6S233C34v119Ev();
extern void _ZN6S233C34v120Ev();
extern void _ZN6S233C24v121Ev();
extern void _ZN6S233C24v122Ev();
extern void _ZN6S233C24v123Ev();
extern void _ZN6S233C24v124Ev();
extern void _ZN6S233C24v125Ev();
extern void _ZN6S233C24v126Ev();
extern void _ZN6S233C12v1Ev();
extern void _ZN6S233C12v2Ev();
extern void _ZN6S233C12v3Ev();
extern void _ZN6S233C12v4Ev();
static  VTBL_ENTRY vtc_S233C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S233C1[0]),
  (VTBL_ENTRY)&_ZN6S233C1D1Ev,
  (VTBL_ENTRY)&_ZN6S233C1D0Ev,
  (VTBL_ENTRY)&_ZN6S233C62v5Ev,
  (VTBL_ENTRY)&_ZN6S233C62v6Ev,
  (VTBL_ENTRY)&_ZN6S233C62v7Ev,
  (VTBL_ENTRY)&_ZN6S233C62v8Ev,
  (VTBL_ENTRY)&_ZN6S233C62v9Ev,
  (VTBL_ENTRY)&_ZN6S233C63v10Ev,
  (VTBL_ENTRY)&_ZN6S233C63v11Ev,
  (VTBL_ENTRY)&_ZN6S233C63v12Ev,
  (VTBL_ENTRY)&_ZN6S233C63v13Ev,
  (VTBL_ENTRY)&_ZN6S233C63v14Ev,
  (VTBL_ENTRY)&_ZN6S233C63v15Ev,
  (VTBL_ENTRY)&_ZN6S233C63v16Ev,
  (VTBL_ENTRY)&_ZN6S233C63v17Ev,
  (VTBL_ENTRY)&_ZN6S233C63v18Ev,
  (VTBL_ENTRY)&_ZN6S233C63v19Ev,
  (VTBL_ENTRY)&_ZN6S233C63v20Ev,
  (VTBL_ENTRY)&_ZN6S233C63v21Ev,
  (VTBL_ENTRY)&_ZN6S233C63v22Ev,
  (VTBL_ENTRY)&_ZN6S233C63v23Ev,
  (VTBL_ENTRY)&_ZN6S233C63v24Ev,
  (VTBL_ENTRY)&_ZN6S233C63v25Ev,
  (VTBL_ENTRY)&_ZN6S233C63v26Ev,
  (VTBL_ENTRY)&_ZN6S233C63v27Ev,
  (VTBL_ENTRY)&_ZN6S233C63v28Ev,
  (VTBL_ENTRY)&_ZN6S233C63v29Ev,
  (VTBL_ENTRY)&_ZN6S233C63v30Ev,
  (VTBL_ENTRY)&_ZN6S233C63v31Ev,
  (VTBL_ENTRY)&_ZN6S233C63v32Ev,
  (VTBL_ENTRY)&_ZN6S233C63v33Ev,
  (VTBL_ENTRY)&_ZN6S233C63v34Ev,
  (VTBL_ENTRY)&_ZN6S233C63v35Ev,
  (VTBL_ENTRY)&_ZN6S233C63v36Ev,
  (VTBL_ENTRY)&_ZN6S233C63v37Ev,
  (VTBL_ENTRY)&_ZN6S233C63v38Ev,
  (VTBL_ENTRY)&_ZN6S233C63v39Ev,
  (VTBL_ENTRY)&_ZN6S233C63v40Ev,
  (VTBL_ENTRY)&_ZN6S233C63v41Ev,
  (VTBL_ENTRY)&_ZN6S233C63v42Ev,
  (VTBL_ENTRY)&_ZN6S233C63v43Ev,
  (VTBL_ENTRY)&_ZN6S233C63v44Ev,
  (VTBL_ENTRY)&_ZN6S233C63v45Ev,
  (VTBL_ENTRY)&_ZN6S233C63v46Ev,
  (VTBL_ENTRY)&_ZN6S233C63v47Ev,
  (VTBL_ENTRY)&_ZN6S233C63v48Ev,
  (VTBL_ENTRY)&_ZN6S233C63v49Ev,
  (VTBL_ENTRY)&_ZN6S233C63v50Ev,
  (VTBL_ENTRY)&_ZN6S233C63v51Ev,
  (VTBL_ENTRY)&_ZN6S233C63v52Ev,
  (VTBL_ENTRY)&_ZN6S233C63v53Ev,
  (VTBL_ENTRY)&_ZN6S233C63v54Ev,
  (VTBL_ENTRY)&_ZN6S233C63v55Ev,
  (VTBL_ENTRY)&_ZN6S233C63v56Ev,
  (VTBL_ENTRY)&_ZN6S233C63v57Ev,
  (VTBL_ENTRY)&_ZN6S233C63v58Ev,
  (VTBL_ENTRY)&_ZN6S233C63v59Ev,
  (VTBL_ENTRY)&_ZN6S233C63v60Ev,
  (VTBL_ENTRY)&_ZN6S233C63v61Ev,
  (VTBL_ENTRY)&_ZN6S233C63v62Ev,
  (VTBL_ENTRY)&_ZN6S233C63v63Ev,
  (VTBL_ENTRY)&_ZN6S233C63v64Ev,
  (VTBL_ENTRY)&_ZN6S233C63v65Ev,
  (VTBL_ENTRY)&_ZN6S233C63v66Ev,
  (VTBL_ENTRY)&_ZN6S233C63v67Ev,
  (VTBL_ENTRY)&_ZN6S233C63v68Ev,
  (VTBL_ENTRY)&_ZN6S233C53v69Ev,
  (VTBL_ENTRY)&_ZN6S233C53v70Ev,
  (VTBL_ENTRY)&_ZN6S233C53v71Ev,
  (VTBL_ENTRY)&_ZN6S233C53v72Ev,
  (VTBL_ENTRY)&_ZN6S233C53v73Ev,
  (VTBL_ENTRY)&_ZN6S233C53v74Ev,
  (VTBL_ENTRY)&_ZN6S233C53v75Ev,
  (VTBL_ENTRY)&_ZN6S233C53v76Ev,
  (VTBL_ENTRY)&_ZN6S233C53v77Ev,
  (VTBL_ENTRY)&_ZN6S233C53v78Ev,
  (VTBL_ENTRY)&_ZN6S233C53v79Ev,
  (VTBL_ENTRY)&_ZN6S233C53v80Ev,
  (VTBL_ENTRY)&_ZN6S233C53v81Ev,
  (VTBL_ENTRY)&_ZN6S233C53v82Ev,
  (VTBL_ENTRY)&_ZN6S233C53v83Ev,
  (VTBL_ENTRY)&_ZN6S233C53v84Ev,
  (VTBL_ENTRY)&_ZN6S233C53v85Ev,
  (VTBL_ENTRY)&_ZN6S233C53v86Ev,
  (VTBL_ENTRY)&_ZN6S233C53v87Ev,
  (VTBL_ENTRY)&_ZN6S233C53v88Ev,
  (VTBL_ENTRY)&_ZN6S233C53v89Ev,
  (VTBL_ENTRY)&_ZN6S233C53v90Ev,
  (VTBL_ENTRY)&_ZN6S233C53v91Ev,
  (VTBL_ENTRY)&_ZN6S233C53v92Ev,
  (VTBL_ENTRY)&_ZN6S233C53v93Ev,
  (VTBL_ENTRY)&_ZN6S233C53v94Ev,
  (VTBL_ENTRY)&_ZN6S233C53v95Ev,
  (VTBL_ENTRY)&_ZN6S233C43v96Ev,
  (VTBL_ENTRY)&_ZN6S233C43v97Ev,
  (VTBL_ENTRY)&_ZN6S233C43v98Ev,
  (VTBL_ENTRY)&_ZN6S233C43v99Ev,
  (VTBL_ENTRY)&_ZN6S233C44v100Ev,
  (VTBL_ENTRY)&_ZN6S233C44v101Ev,
  (VTBL_ENTRY)&_ZN6S233C44v102Ev,
  (VTBL_ENTRY)&_ZN6S233C44v103Ev,
  (VTBL_ENTRY)&_ZN6S233C44v104Ev,
  (VTBL_ENTRY)&_ZN6S233C44v105Ev,
  (VTBL_ENTRY)&_ZN6S233C44v106Ev,
  (VTBL_ENTRY)&_ZN6S233C44v107Ev,
  (VTBL_ENTRY)&_ZN6S233C44v108Ev,
  (VTBL_ENTRY)&_ZN6S233C44v109Ev,
  (VTBL_ENTRY)&_ZN6S233C44v110Ev,
  (VTBL_ENTRY)&_ZN6S233C44v111Ev,
  (VTBL_ENTRY)&_ZN6S233C44v112Ev,
  (VTBL_ENTRY)&_ZN6S233C44v113Ev,
  (VTBL_ENTRY)&_ZN6S233C34v114Ev,
  (VTBL_ENTRY)&_ZN6S233C34v115Ev,
  (VTBL_ENTRY)&_ZN6S233C34v116Ev,
  (VTBL_ENTRY)&_ZN6S233C34v117Ev,
  (VTBL_ENTRY)&_ZN6S233C34v118Ev,
  (VTBL_ENTRY)&_ZN6S233C34v119Ev,
  (VTBL_ENTRY)&_ZN6S233C34v120Ev,
  (VTBL_ENTRY)&_ZN6S233C24v121Ev,
  (VTBL_ENTRY)&_ZN6S233C24v122Ev,
  (VTBL_ENTRY)&_ZN6S233C24v123Ev,
  (VTBL_ENTRY)&_ZN6S233C24v124Ev,
  (VTBL_ENTRY)&_ZN6S233C24v125Ev,
  (VTBL_ENTRY)&_ZN6S233C24v126Ev,
  (VTBL_ENTRY)&_ZN6S233C12v1Ev,
  (VTBL_ENTRY)&_ZN6S233C12v2Ev,
  (VTBL_ENTRY)&_ZN6S233C12v3Ev,
  (VTBL_ENTRY)&_ZN6S233C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S233C1[];
extern  VTBL_ENTRY _ZTV6S233C1[];
Class_Descriptor cd_S233C1 = {  "S233C1", // class name
  bases_S233C1, 5,
  &(vtc_S233C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,252), // object size
  NSPAIRA(_ZTI6S233C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S233C1),130, //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  S187C6  {
  int s187c6f0;
  __tsi64 s187c6f1;
  void *s187c6f2[4];
  int s187c6f3[2];
  void *s187c6f4;
  ::S615C17_nt s187c6f5;
  void *s187c6f6[2];
  virtual  ~S187C6(); // _ZN6S187C6D1Ev
  virtual void  v4(); // _ZN6S187C62v4Ev
  virtual void  v5(); // _ZN6S187C62v5Ev
  virtual void  v6(); // _ZN6S187C62v6Ev
  virtual void  v7(); // _ZN6S187C62v7Ev
  virtual void  v8(); // _ZN6S187C62v8Ev
  virtual void  v9(); // _ZN6S187C62v9Ev
  virtual void  v10(); // _ZN6S187C63v10Ev
  virtual void  v11(); // _ZN6S187C63v11Ev
  virtual void  v12(); // _ZN6S187C63v12Ev
  virtual void  v13(); // _ZN6S187C63v13Ev
  virtual void  v14(); // _ZN6S187C63v14Ev
  virtual void  v15(); // _ZN6S187C63v15Ev
  virtual void  v16(); // _ZN6S187C63v16Ev
  virtual void  v17(); // _ZN6S187C63v17Ev
  virtual void  v18(); // _ZN6S187C63v18Ev
  virtual void  v19(); // _ZN6S187C63v19Ev
  virtual void  v20(); // _ZN6S187C63v20Ev
  virtual void  v21(); // _ZN6S187C63v21Ev
  virtual void  v22(); // _ZN6S187C63v22Ev
  virtual void  v23(); // _ZN6S187C63v23Ev
  virtual void  v24(); // _ZN6S187C63v24Ev
  virtual void  v25(); // _ZN6S187C63v25Ev
  virtual void  v26(); // _ZN6S187C63v26Ev
  virtual void  v27(); // _ZN6S187C63v27Ev
  virtual void  v28(); // _ZN6S187C63v28Ev
  virtual void  v29(); // _ZN6S187C63v29Ev
  virtual void  v30(); // _ZN6S187C63v30Ev
  virtual void  v31(); // _ZN6S187C63v31Ev
  virtual void  v32(); // _ZN6S187C63v32Ev
  virtual void  v33(); // _ZN6S187C63v33Ev
  virtual void  v34(); // _ZN6S187C63v34Ev
  virtual void  v35(); // _ZN6S187C63v35Ev
  virtual void  v36(); // _ZN6S187C63v36Ev
  virtual void  v37(); // _ZN6S187C63v37Ev
  virtual void  v38(); // _ZN6S187C63v38Ev
  virtual void  v39(); // _ZN6S187C63v39Ev
  virtual void  v40(); // _ZN6S187C63v40Ev
  virtual void  v41(); // _ZN6S187C63v41Ev
  virtual void  v42(); // _ZN6S187C63v42Ev
  virtual void  v43(); // _ZN6S187C63v43Ev
  virtual void  v44(); // _ZN6S187C63v44Ev
  virtual void  v45(); // _ZN6S187C63v45Ev
  virtual void  v46(); // _ZN6S187C63v46Ev
  virtual void  v47(); // _ZN6S187C63v47Ev
  virtual void  v48(); // _ZN6S187C63v48Ev
  virtual void  v49(); // _ZN6S187C63v49Ev
  virtual void  v50(); // _ZN6S187C63v50Ev
  virtual void  v51(); // _ZN6S187C63v51Ev
  virtual void  v52(); // _ZN6S187C63v52Ev
  virtual void  v53(); // _ZN6S187C63v53Ev
  virtual void  v54(); // _ZN6S187C63v54Ev
  virtual void  v55(); // _ZN6S187C63v55Ev
  virtual void  v56(); // _ZN6S187C63v56Ev
  virtual void  v57(); // _ZN6S187C63v57Ev
  virtual void  v58(); // _ZN6S187C63v58Ev
  virtual void  v59(); // _ZN6S187C63v59Ev
  virtual void  v60(); // _ZN6S187C63v60Ev
  virtual void  v61(); // _ZN6S187C63v61Ev
  virtual void  v62(); // _ZN6S187C63v62Ev
  virtual void  v63(); // _ZN6S187C63v63Ev
  virtual void  v64(); // _ZN6S187C63v64Ev
  virtual void  v65(); // _ZN6S187C63v65Ev
  virtual void  v66(); // _ZN6S187C63v66Ev
  virtual void  v67(); // _ZN6S187C63v67Ev
  S187C6(); // tgen
};
//SIG(-1 S187C6) 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]}


 S187C6 ::~S187C6(){ note_dtor("S187C6", this);}
void  S187C6 ::v4(){vfunc_called(this, "_ZN6S187C62v4Ev");}
void  S187C6 ::v5(){vfunc_called(this, "_ZN6S187C62v5Ev");}
void  S187C6 ::v6(){vfunc_called(this, "_ZN6S187C62v6Ev");}
void  S187C6 ::v7(){vfunc_called(this, "_ZN6S187C62v7Ev");}
void  S187C6 ::v8(){vfunc_called(this, "_ZN6S187C62v8Ev");}
void  S187C6 ::v9(){vfunc_called(this, "_ZN6S187C62v9Ev");}
void  S187C6 ::v10(){vfunc_called(this, "_ZN6S187C63v10Ev");}
void  S187C6 ::v11(){vfunc_called(this, "_ZN6S187C63v11Ev");}
void  S187C6 ::v12(){vfunc_called(this, "_ZN6S187C63v12Ev");}
void  S187C6 ::v13(){vfunc_called(this, "_ZN6S187C63v13Ev");}
void  S187C6 ::v14(){vfunc_called(this, "_ZN6S187C63v14Ev");}
void  S187C6 ::v15(){vfunc_called(this, "_ZN6S187C63v15Ev");}
void  S187C6 ::v16(){vfunc_called(this, "_ZN6S187C63v16Ev");}
void  S187C6 ::v17(){vfunc_called(this, "_ZN6S187C63v17Ev");}
void  S187C6 ::v18(){vfunc_called(this, "_ZN6S187C63v18Ev");}
void  S187C6 ::v19(){vfunc_called(this, "_ZN6S187C63v19Ev");}
void  S187C6 ::v20(){vfunc_called(this, "_ZN6S187C63v20Ev");}
void  S187C6 ::v21(){vfunc_called(this, "_ZN6S187C63v21Ev");}
void  S187C6 ::v22(){vfunc_called(this, "_ZN6S187C63v22Ev");}
void  S187C6 ::v23(){vfunc_called(this, "_ZN6S187C63v23Ev");}
void  S187C6 ::v24(){vfunc_called(this, "_ZN6S187C63v24Ev");}
void  S187C6 ::v25(){vfunc_called(this, "_ZN6S187C63v25Ev");}
void  S187C6 ::v26(){vfunc_called(this, "_ZN6S187C63v26Ev");}
void  S187C6 ::v27(){vfunc_called(this, "_ZN6S187C63v27Ev");}
void  S187C6 ::v28(){vfunc_called(this, "_ZN6S187C63v28Ev");}
void  S187C6 ::v29(){vfunc_called(this, "_ZN6S187C63v29Ev");}
void  S187C6 ::v30(){vfunc_called(this, "_ZN6S187C63v30Ev");}
void  S187C6 ::v31(){vfunc_called(this, "_ZN6S187C63v31Ev");}
void  S187C6 ::v32(){vfunc_called(this, "_ZN6S187C63v32Ev");}
void  S187C6 ::v33(){vfunc_called(this, "_ZN6S187C63v33Ev");}
void  S187C6 ::v34(){vfunc_called(this, "_ZN6S187C63v34Ev");}
void  S187C6 ::v35(){vfunc_called(this, "_ZN6S187C63v35Ev");}
void  S187C6 ::v36(){vfunc_called(this, "_ZN6S187C63v36Ev");}
void  S187C6 ::v37(){vfunc_called(this, "_ZN6S187C63v37Ev");}
void  S187C6 ::v38(){vfunc_called(this, "_ZN6S187C63v38Ev");}
void  S187C6 ::v39(){vfunc_called(this, "_ZN6S187C63v39Ev");}
void  S187C6 ::v40(){vfunc_called(this, "_ZN6S187C63v40Ev");}
void  S187C6 ::v41(){vfunc_called(this, "_ZN6S187C63v41Ev");}
void  S187C6 ::v42(){vfunc_called(this, "_ZN6S187C63v42Ev");}
void  S187C6 ::v43(){vfunc_called(this, "_ZN6S187C63v43Ev");}
void  S187C6 ::v44(){vfunc_called(this, "_ZN6S187C63v44Ev");}
void  S187C6 ::v45(){vfunc_called(this, "_ZN6S187C63v45Ev");}
void  S187C6 ::v46(){vfunc_called(this, "_ZN6S187C63v46Ev");}
void  S187C6 ::v47(){vfunc_called(this, "_ZN6S187C63v47Ev");}
void  S187C6 ::v48(){vfunc_called(this, "_ZN6S187C63v48Ev");}
void  S187C6 ::v49(){vfunc_called(this, "_ZN6S187C63v49Ev");}
void  S187C6 ::v50(){vfunc_called(this, "_ZN6S187C63v50Ev");}
void  S187C6 ::v51(){vfunc_called(this, "_ZN6S187C63v51Ev");}
void  S187C6 ::v52(){vfunc_called(this, "_ZN6S187C63v52Ev");}
void  S187C6 ::v53(){vfunc_called(this, "_ZN6S187C63v53Ev");}
void  S187C6 ::v54(){vfunc_called(this, "_ZN6S187C63v54Ev");}
void  S187C6 ::v55(){vfunc_called(this, "_ZN6S187C63v55Ev");}
void  S187C6 ::v56(){vfunc_called(this, "_ZN6S187C63v56Ev");}
void  S187C6 ::v57(){vfunc_called(this, "_ZN6S187C63v57Ev");}
void  S187C6 ::v58(){vfunc_called(this, "_ZN6S187C63v58Ev");}
void  S187C6 ::v59(){vfunc_called(this, "_ZN6S187C63v59Ev");}
void  S187C6 ::v60(){vfunc_called(this, "_ZN6S187C63v60Ev");}
void  S187C6 ::v61(){vfunc_called(this, "_ZN6S187C63v61Ev");}
void  S187C6 ::v62(){vfunc_called(this, "_ZN6S187C63v62Ev");}
void  S187C6 ::v63(){vfunc_called(this, "_ZN6S187C63v63Ev");}
void  S187C6 ::v64(){vfunc_called(this, "_ZN6S187C63v64Ev");}
void  S187C6 ::v65(){vfunc_called(this, "_ZN6S187C63v65Ev");}
void  S187C6 ::v66(){vfunc_called(this, "_ZN6S187C63v66Ev");}
void  S187C6 ::v67(){vfunc_called(this, "_ZN6S187C63v67Ev");}
S187C6 ::S187C6(){ note_ctor("S187C6", this);} // tgen

static void Test_S187C6()
{
  extern Class_Descriptor cd_S187C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S187C6, buf);
    S187C6 *dp, &lv = *(dp=new (buf) S187C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S187C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S187C6)");
    check_field_offset(lv, s187c6f0, ABISELECT(8,4), "S187C6.s187c6f0");
    check_field_offset(lv, s187c6f1, ABISELECT(16,8), "S187C6.s187c6f1");
    check_field_offset(lv, s187c6f2, ABISELECT(24,16), "S187C6.s187c6f2");
    check_field_offset(lv, s187c6f3, ABISELECT(56,32), "S187C6.s187c6f3");
    check_field_offset(lv, s187c6f4, ABISELECT(64,40), "S187C6.s187c6f4");
    check_field_offset(lv, s187c6f5, ABISELECT(72,44), "S187C6.s187c6f5");
    check_field_offset(lv, s187c6f6, ABISELECT(80,52), "S187C6.s187c6f6");
    test_class_info(&lv, &cd_S187C6);
    dp->~S187C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS187C6(Test_S187C6, "S187C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S187C6C1Ev();
extern void _ZN6S187C6D1Ev();
Name_Map name_map_S187C6[] = {
  NSPAIR(_ZN6S187C6C1Ev),
  NSPAIR(_ZN6S187C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S187C6[];
extern void _ZN6S187C6D1Ev();
extern void _ZN6S187C6D0Ev();
extern void _ZN6S187C62v4Ev();
extern void _ZN6S187C62v5Ev();
extern void _ZN6S187C62v6Ev();
extern void _ZN6S187C62v7Ev();
extern void _ZN6S187C62v8Ev();
extern void _ZN6S187C62v9Ev();
extern void _ZN6S187C63v10Ev();
extern void _ZN6S187C63v11Ev();
extern void _ZN6S187C63v12Ev();
extern void _ZN6S187C63v13Ev();
extern void _ZN6S187C63v14Ev();
extern void _ZN6S187C63v15Ev();
extern void _ZN6S187C63v16Ev();
extern void _ZN6S187C63v17Ev();
extern void _ZN6S187C63v18Ev();
extern void _ZN6S187C63v19Ev();
extern void _ZN6S187C63v20Ev();
extern void _ZN6S187C63v21Ev();
extern void _ZN6S187C63v22Ev();
extern void _ZN6S187C63v23Ev();
extern void _ZN6S187C63v24Ev();
extern void _ZN6S187C63v25Ev();
extern void _ZN6S187C63v26Ev();
extern void _ZN6S187C63v27Ev();
extern void _ZN6S187C63v28Ev();
extern void _ZN6S187C63v29Ev();
extern void _ZN6S187C63v30Ev();
extern void _ZN6S187C63v31Ev();
extern void _ZN6S187C63v32Ev();
extern void _ZN6S187C63v33Ev();
extern void _ZN6S187C63v34Ev();
extern void _ZN6S187C63v35Ev();
extern void _ZN6S187C63v36Ev();
extern void _ZN6S187C63v37Ev();
extern void _ZN6S187C63v38Ev();
extern void _ZN6S187C63v39Ev();
extern void _ZN6S187C63v40Ev();
extern void _ZN6S187C63v41Ev();
extern void _ZN6S187C63v42Ev();
extern void _ZN6S187C63v43Ev();
extern void _ZN6S187C63v44Ev();
extern void _ZN6S187C63v45Ev();
extern void _ZN6S187C63v46Ev();
extern void _ZN6S187C63v47Ev();
extern void _ZN6S187C63v48Ev();
extern void _ZN6S187C63v49Ev();
extern void _ZN6S187C63v50Ev();
extern void _ZN6S187C63v51Ev();
extern void _ZN6S187C63v52Ev();
extern void _ZN6S187C63v53Ev();
extern void _ZN6S187C63v54Ev();
extern void _ZN6S187C63v55Ev();
extern void _ZN6S187C63v56Ev();
extern void _ZN6S187C63v57Ev();
extern void _ZN6S187C63v58Ev();
extern void _ZN6S187C63v59Ev();
extern void _ZN6S187C63v60Ev();
extern void _ZN6S187C63v61Ev();
extern void _ZN6S187C63v62Ev();
extern void _ZN6S187C63v63Ev();
extern void _ZN6S187C63v64Ev();
extern void _ZN6S187C63v65Ev();
extern void _ZN6S187C63v66Ev();
extern void _ZN6S187C63v67Ev();
static  VTBL_ENTRY vtc_S187C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S187C6[0]),
  (VTBL_ENTRY)&_ZN6S187C6D1Ev,
  (VTBL_ENTRY)&_ZN6S187C6D0Ev,
  (VTBL_ENTRY)&_ZN6S187C62v4Ev,
  (VTBL_ENTRY)&_ZN6S187C62v5Ev,
  (VTBL_ENTRY)&_ZN6S187C62v6Ev,
  (VTBL_ENTRY)&_ZN6S187C62v7Ev,
  (VTBL_ENTRY)&_ZN6S187C62v8Ev,
  (VTBL_ENTRY)&_ZN6S187C62v9Ev,
  (VTBL_ENTRY)&_ZN6S187C63v10Ev,
  (VTBL_ENTRY)&_ZN6S187C63v11Ev,
  (VTBL_ENTRY)&_ZN6S187C63v12Ev,
  (VTBL_ENTRY)&_ZN6S187C63v13Ev,
  (VTBL_ENTRY)&_ZN6S187C63v14Ev,
  (VTBL_ENTRY)&_ZN6S187C63v15Ev,
  (VTBL_ENTRY)&_ZN6S187C63v16Ev,
  (VTBL_ENTRY)&_ZN6S187C63v17Ev,
  (VTBL_ENTRY)&_ZN6S187C63v18Ev,
  (VTBL_ENTRY)&_ZN6S187C63v19Ev,
  (VTBL_ENTRY)&_ZN6S187C63v20Ev,
  (VTBL_ENTRY)&_ZN6S187C63v21Ev,
  (VTBL_ENTRY)&_ZN6S187C63v22Ev,
  (VTBL_ENTRY)&_ZN6S187C63v23Ev,
  (VTBL_ENTRY)&_ZN6S187C63v24Ev,
  (VTBL_ENTRY)&_ZN6S187C63v25Ev,
  (VTBL_ENTRY)&_ZN6S187C63v26Ev,
  (VTBL_ENTRY)&_ZN6S187C63v27Ev,
  (VTBL_ENTRY)&_ZN6S187C63v28Ev,
  (VTBL_ENTRY)&_ZN6S187C63v29Ev,
  (VTBL_ENTRY)&_ZN6S187C63v30Ev,
  (VTBL_ENTRY)&_ZN6S187C63v31Ev,
  (VTBL_ENTRY)&_ZN6S187C63v32Ev,
  (VTBL_ENTRY)&_ZN6S187C63v33Ev,
  (VTBL_ENTRY)&_ZN6S187C63v34Ev,
  (VTBL_ENTRY)&_ZN6S187C63v35Ev,
  (VTBL_ENTRY)&_ZN6S187C63v36Ev,
  (VTBL_ENTRY)&_ZN6S187C63v37Ev,
  (VTBL_ENTRY)&_ZN6S187C63v38Ev,
  (VTBL_ENTRY)&_ZN6S187C63v39Ev,
  (VTBL_ENTRY)&_ZN6S187C63v40Ev,
  (VTBL_ENTRY)&_ZN6S187C63v41Ev,
  (VTBL_ENTRY)&_ZN6S187C63v42Ev,
  (VTBL_ENTRY)&_ZN6S187C63v43Ev,
  (VTBL_ENTRY)&_ZN6S187C63v44Ev,
  (VTBL_ENTRY)&_ZN6S187C63v45Ev,
  (VTBL_ENTRY)&_ZN6S187C63v46Ev,
  (VTBL_ENTRY)&_ZN6S187C63v47Ev,
  (VTBL_ENTRY)&_ZN6S187C63v48Ev,
  (VTBL_ENTRY)&_ZN6S187C63v49Ev,
  (VTBL_ENTRY)&_ZN6S187C63v50Ev,
  (VTBL_ENTRY)&_ZN6S187C63v51Ev,
  (VTBL_ENTRY)&_ZN6S187C63v52Ev,
  (VTBL_ENTRY)&_ZN6S187C63v53Ev,
  (VTBL_ENTRY)&_ZN6S187C63v54Ev,
  (VTBL_ENTRY)&_ZN6S187C63v55Ev,
  (VTBL_ENTRY)&_ZN6S187C63v56Ev,
  (VTBL_ENTRY)&_ZN6S187C63v57Ev,
  (VTBL_ENTRY)&_ZN6S187C63v58Ev,
  (VTBL_ENTRY)&_ZN6S187C63v59Ev,
  (VTBL_ENTRY)&_ZN6S187C63v60Ev,
  (VTBL_ENTRY)&_ZN6S187C63v61Ev,
  (VTBL_ENTRY)&_ZN6S187C63v62Ev,
  (VTBL_ENTRY)&_ZN6S187C63v63Ev,
  (VTBL_ENTRY)&_ZN6S187C63v64Ev,
  (VTBL_ENTRY)&_ZN6S187C63v65Ev,
  (VTBL_ENTRY)&_ZN6S187C63v66Ev,
  (VTBL_ENTRY)&_ZN6S187C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S187C6[];
extern  VTBL_ENTRY _ZTV6S187C6[];
Class_Descriptor cd_S187C6 = {  "S187C6", // class name
  0,0,//no base classes
  &(vtc_S187C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S187C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S187C6),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  S187C5  : S187C6 {
  void *s187c5f0;
  ::S1542C26 s187c5f1;
  ::S615C17_nt s187c5f2;
  ::S1542C22_nt s187c5f3;
  ::S615C12_nt s187c5f4;
  int s187c5f5;
  unsigned int s187c5f6:1;
  unsigned int s187c5f7:1;
  unsigned int s187c5f8:1;
  unsigned int s187c5f9:1;
  int s187c5f10[11];
  virtual  ~S187C5(); // _ZN6S187C5D1Ev
  virtual void  v68(); // _ZN6S187C53v68Ev
  virtual void  v69(); // _ZN6S187C53v69Ev
  virtual void  v70(); // _ZN6S187C53v70Ev
  virtual void  v71(); // _ZN6S187C53v71Ev
  virtual void  v72(); // _ZN6S187C53v72Ev
  virtual void  v73(); // _ZN6S187C53v73Ev
  virtual void  v74(); // _ZN6S187C53v74Ev
  virtual void  v75(); // _ZN6S187C53v75Ev
  virtual void  v76(); // _ZN6S187C53v76Ev
  virtual void  v77(); // _ZN6S187C53v77Ev
  virtual void  v78(); // _ZN6S187C53v78Ev
  virtual void  v79(); // _ZN6S187C53v79Ev
  virtual void  v80(); // _ZN6S187C53v80Ev
  virtual void  v81(); // _ZN6S187C53v81Ev
  virtual void  v82(); // _ZN6S187C53v82Ev
  virtual void  v83(); // _ZN6S187C53v83Ev
  virtual void  v84(); // _ZN6S187C53v84Ev
  virtual void  v85(); // _ZN6S187C53v85Ev
  virtual void  v86(); // _ZN6S187C53v86Ev
  virtual void  v87(); // _ZN6S187C53v87Ev
  virtual void  v88(); // _ZN6S187C53v88Ev
  virtual void  v89(); // _ZN6S187C53v89Ev
  virtual void  v90(); // _ZN6S187C53v90Ev
  virtual void  v91(); // _ZN6S187C53v91Ev
  virtual void  v92(); // _ZN6S187C53v92Ev
  virtual void  v93(); // _ZN6S187C53v93Ev
  virtual void  v94(); // _ZN6S187C53v94Ev
  S187C5(); // tgen
};
//SIG(-1 S187C5) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S187C5 ::~S187C5(){ note_dtor("S187C5", this);}
void  S187C5 ::v68(){vfunc_called(this, "_ZN6S187C53v68Ev");}
void  S187C5 ::v69(){vfunc_called(this, "_ZN6S187C53v69Ev");}
void  S187C5 ::v70(){vfunc_called(this, "_ZN6S187C53v70Ev");}
void  S187C5 ::v71(){vfunc_called(this, "_ZN6S187C53v71Ev");}
void  S187C5 ::v72(){vfunc_called(this, "_ZN6S187C53v72Ev");}
void  S187C5 ::v73(){vfunc_called(this, "_ZN6S187C53v73Ev");}
void  S187C5 ::v74(){vfunc_called(this, "_ZN6S187C53v74Ev");}
void  S187C5 ::v75(){vfunc_called(this, "_ZN6S187C53v75Ev");}
void  S187C5 ::v76(){vfunc_called(this, "_ZN6S187C53v76Ev");}
void  S187C5 ::v77(){vfunc_called(this, "_ZN6S187C53v77Ev");}
void  S187C5 ::v78(){vfunc_called(this, "_ZN6S187C53v78Ev");}
void  S187C5 ::v79(){vfunc_called(this, "_ZN6S187C53v79Ev");}
void  S187C5 ::v80(){vfunc_called(this, "_ZN6S187C53v80Ev");}
void  S187C5 ::v81(){vfunc_called(this, "_ZN6S187C53v81Ev");}
void  S187C5 ::v82(){vfunc_called(this, "_ZN6S187C53v82Ev");}
void  S187C5 ::v83(){vfunc_called(this, "_ZN6S187C53v83Ev");}
void  S187C5 ::v84(){vfunc_called(this, "_ZN6S187C53v84Ev");}
void  S187C5 ::v85(){vfunc_called(this, "_ZN6S187C53v85Ev");}
void  S187C5 ::v86(){vfunc_called(this, "_ZN6S187C53v86Ev");}
void  S187C5 ::v87(){vfunc_called(this, "_ZN6S187C53v87Ev");}
void  S187C5 ::v88(){vfunc_called(this, "_ZN6S187C53v88Ev");}
void  S187C5 ::v89(){vfunc_called(this, "_ZN6S187C53v89Ev");}
void  S187C5 ::v90(){vfunc_called(this, "_ZN6S187C53v90Ev");}
void  S187C5 ::v91(){vfunc_called(this, "_ZN6S187C53v91Ev");}
void  S187C5 ::v92(){vfunc_called(this, "_ZN6S187C53v92Ev");}
void  S187C5 ::v93(){vfunc_called(this, "_ZN6S187C53v93Ev");}
void  S187C5 ::v94(){vfunc_called(this, "_ZN6S187C53v94Ev");}
S187C5 ::S187C5(){ note_ctor("S187C5", this);} // tgen

static void Test_S187C5()
{
  extern Class_Descriptor cd_S187C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S187C5, buf);
    S187C5 *dp, &lv = *(dp=new (buf) S187C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S187C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S187C5)");
    check_base_class_offset(lv, (S187C6*), 0, "S187C5");
    check_field_offset(lv, s187c5f0, ABISELECT(96,60), "S187C5.s187c5f0");
    check_field_offset(lv, s187c5f1, ABISELECT(104,64), "S187C5.s187c5f1");
    check_field_offset(lv, s187c5f2, ABISELECT(120,76), "S187C5.s187c5f2");
    check_field_offset(lv, s187c5f3, ABISELECT(128,84), "S187C5.s187c5f3");
    check_field_offset(lv, s187c5f4, ABISELECT(144,96), "S187C5.s187c5f4");
    check_field_offset(lv, s187c5f5, ABISELECT(176,128), "S187C5.s187c5f5");
    set_bf_and_test(lv, s187c5f6, ABISELECT(180,132), 0, 1, 1, "S187C5");
    set_bf_and_test(lv, s187c5f7, ABISELECT(180,132), 1, 1, 1, "S187C5");
    set_bf_and_test(lv, s187c5f8, ABISELECT(180,132), 2, 1, 1, "S187C5");
    set_bf_and_test(lv, s187c5f9, ABISELECT(180,132), 3, 1, 1, "S187C5");
    check_field_offset(lv, s187c5f10, ABISELECT(184,136), "S187C5.s187c5f10");
    test_class_info(&lv, &cd_S187C5);
    dp->~S187C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS187C5(Test_S187C5, "S187C5", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S187C5C1Ev();
extern void _ZN6S187C5D1Ev();
Name_Map name_map_S187C5[] = {
  NSPAIR(_ZN6S187C5C1Ev),
  NSPAIR(_ZN6S187C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S187C6;
extern VTBL_ENTRY _ZTI6S187C6[];
extern  VTBL_ENTRY _ZTV6S187C6[];
static Base_Class bases_S187C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S187C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S187C5[];
extern void _ZN6S187C5D1Ev();
extern void _ZN6S187C5D0Ev();
extern void _ZN6S187C62v4Ev();
extern void _ZN6S187C62v5Ev();
extern void _ZN6S187C62v6Ev();
extern void _ZN6S187C62v7Ev();
extern void _ZN6S187C62v8Ev();
extern void _ZN6S187C62v9Ev();
extern void _ZN6S187C63v10Ev();
extern void _ZN6S187C63v11Ev();
extern void _ZN6S187C63v12Ev();
extern void _ZN6S187C63v13Ev();
extern void _ZN6S187C63v14Ev();
extern void _ZN6S187C63v15Ev();
extern void _ZN6S187C63v16Ev();
extern void _ZN6S187C63v17Ev();
extern void _ZN6S187C63v18Ev();
extern void _ZN6S187C63v19Ev();
extern void _ZN6S187C63v20Ev();
extern void _ZN6S187C63v21Ev();
extern void _ZN6S187C63v22Ev();
extern void _ZN6S187C63v23Ev();
extern void _ZN6S187C63v24Ev();
extern void _ZN6S187C63v25Ev();
extern void _ZN6S187C63v26Ev();
extern void _ZN6S187C63v27Ev();
extern void _ZN6S187C63v28Ev();
extern void _ZN6S187C63v29Ev();
extern void _ZN6S187C63v30Ev();
extern void _ZN6S187C63v31Ev();
extern void _ZN6S187C63v32Ev();
extern void _ZN6S187C63v33Ev();
extern void _ZN6S187C63v34Ev();
extern void _ZN6S187C63v35Ev();
extern void _ZN6S187C63v36Ev();
extern void _ZN6S187C63v37Ev();
extern void _ZN6S187C63v38Ev();
extern void _ZN6S187C63v39Ev();
extern void _ZN6S187C63v40Ev();
extern void _ZN6S187C63v41Ev();
extern void _ZN6S187C63v42Ev();
extern void _ZN6S187C63v43Ev();
extern void _ZN6S187C63v44Ev();
extern void _ZN6S187C63v45Ev();
extern void _ZN6S187C63v46Ev();
extern void _ZN6S187C63v47Ev();
extern void _ZN6S187C63v48Ev();
extern void _ZN6S187C63v49Ev();
extern void _ZN6S187C63v50Ev();
extern void _ZN6S187C63v51Ev();
extern void _ZN6S187C63v52Ev();
extern void _ZN6S187C63v53Ev();
extern void _ZN6S187C63v54Ev();
extern void _ZN6S187C63v55Ev();
extern void _ZN6S187C63v56Ev();
extern void _ZN6S187C63v57Ev();
extern void _ZN6S187C63v58Ev();
extern void _ZN6S187C63v59Ev();
extern void _ZN6S187C63v60Ev();
extern void _ZN6S187C63v61Ev();
extern void _ZN6S187C63v62Ev();
extern void _ZN6S187C63v63Ev();
extern void _ZN6S187C63v64Ev();
extern void _ZN6S187C63v65Ev();
extern void _ZN6S187C63v66Ev();
extern void _ZN6S187C63v67Ev();
extern void _ZN6S187C53v68Ev();
extern void _ZN6S187C53v69Ev();
extern void _ZN6S187C53v70Ev();
extern void _ZN6S187C53v71Ev();
extern void _ZN6S187C53v72Ev();
extern void _ZN6S187C53v73Ev();
extern void _ZN6S187C53v74Ev();
extern void _ZN6S187C53v75Ev();
extern void _ZN6S187C53v76Ev();
extern void _ZN6S187C53v77Ev();
extern void _ZN6S187C53v78Ev();
extern void _ZN6S187C53v79Ev();
extern void _ZN6S187C53v80Ev();
extern void _ZN6S187C53v81Ev();
extern void _ZN6S187C53v82Ev();
extern void _ZN6S187C53v83Ev();
extern void _ZN6S187C53v84Ev();
extern void _ZN6S187C53v85Ev();
extern void _ZN6S187C53v86Ev();
extern void _ZN6S187C53v87Ev();
extern void _ZN6S187C53v88Ev();
extern void _ZN6S187C53v89Ev();
extern void _ZN6S187C53v90Ev();
extern void _ZN6S187C53v91Ev();
extern void _ZN6S187C53v92Ev();
extern void _ZN6S187C53v93Ev();
extern void _ZN6S187C53v94Ev();
static  VTBL_ENTRY vtc_S187C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S187C5[0]),
  (VTBL_ENTRY)&_ZN6S187C5D1Ev,
  (VTBL_ENTRY)&_ZN6S187C5D0Ev,
  (VTBL_ENTRY)&_ZN6S187C62v4Ev,
  (VTBL_ENTRY)&_ZN6S187C62v5Ev,
  (VTBL_ENTRY)&_ZN6S187C62v6Ev,
  (VTBL_ENTRY)&_ZN6S187C62v7Ev,
  (VTBL_ENTRY)&_ZN6S187C62v8Ev,
  (VTBL_ENTRY)&_ZN6S187C62v9Ev,
  (VTBL_ENTRY)&_ZN6S187C63v10Ev,
  (VTBL_ENTRY)&_ZN6S187C63v11Ev,
  (VTBL_ENTRY)&_ZN6S187C63v12Ev,
  (VTBL_ENTRY)&_ZN6S187C63v13Ev,
  (VTBL_ENTRY)&_ZN6S187C63v14Ev,
  (VTBL_ENTRY)&_ZN6S187C63v15Ev,
  (VTBL_ENTRY)&_ZN6S187C63v16Ev,
  (VTBL_ENTRY)&_ZN6S187C63v17Ev,
  (VTBL_ENTRY)&_ZN6S187C63v18Ev,
  (VTBL_ENTRY)&_ZN6S187C63v19Ev,
  (VTBL_ENTRY)&_ZN6S187C63v20Ev,
  (VTBL_ENTRY)&_ZN6S187C63v21Ev,
  (VTBL_ENTRY)&_ZN6S187C63v22Ev,
  (VTBL_ENTRY)&_ZN6S187C63v23Ev,
  (VTBL_ENTRY)&_ZN6S187C63v24Ev,
  (VTBL_ENTRY)&_ZN6S187C63v25Ev,
  (VTBL_ENTRY)&_ZN6S187C63v26Ev,
  (VTBL_ENTRY)&_ZN6S187C63v27Ev,
  (VTBL_ENTRY)&_ZN6S187C63v28Ev,
  (VTBL_ENTRY)&_ZN6S187C63v29Ev,
  (VTBL_ENTRY)&_ZN6S187C63v30Ev,
  (VTBL_ENTRY)&_ZN6S187C63v31Ev,
  (VTBL_ENTRY)&_ZN6S187C63v32Ev,
  (VTBL_ENTRY)&_ZN6S187C63v33Ev,
  (VTBL_ENTRY)&_ZN6S187C63v34Ev,
  (VTBL_ENTRY)&_ZN6S187C63v35Ev,
  (VTBL_ENTRY)&_ZN6S187C63v36Ev,
  (VTBL_ENTRY)&_ZN6S187C63v37Ev,
  (VTBL_ENTRY)&_ZN6S187C63v38Ev,
  (VTBL_ENTRY)&_ZN6S187C63v39Ev,
  (VTBL_ENTRY)&_ZN6S187C63v40Ev,
  (VTBL_ENTRY)&_ZN6S187C63v41Ev,
  (VTBL_ENTRY)&_ZN6S187C63v42Ev,
  (VTBL_ENTRY)&_ZN6S187C63v43Ev,
  (VTBL_ENTRY)&_ZN6S187C63v44Ev,
  (VTBL_ENTRY)&_ZN6S187C63v45Ev,
  (VTBL_ENTRY)&_ZN6S187C63v46Ev,
  (VTBL_ENTRY)&_ZN6S187C63v47Ev,
  (VTBL_ENTRY)&_ZN6S187C63v48Ev,
  (VTBL_ENTRY)&_ZN6S187C63v49Ev,
  (VTBL_ENTRY)&_ZN6S187C63v50Ev,
  (VTBL_ENTRY)&_ZN6S187C63v51Ev,
  (VTBL_ENTRY)&_ZN6S187C63v52Ev,
  (VTBL_ENTRY)&_ZN6S187C63v53Ev,
  (VTBL_ENTRY)&_ZN6S187C63v54Ev,
  (VTBL_ENTRY)&_ZN6S187C63v55Ev,
  (VTBL_ENTRY)&_ZN6S187C63v56Ev,
  (VTBL_ENTRY)&_ZN6S187C63v57Ev,
  (VTBL_ENTRY)&_ZN6S187C63v58Ev,
  (VTBL_ENTRY)&_ZN6S187C63v59Ev,
  (VTBL_ENTRY)&_ZN6S187C63v60Ev,
  (VTBL_ENTRY)&_ZN6S187C63v61Ev,
  (VTBL_ENTRY)&_ZN6S187C63v62Ev,
  (VTBL_ENTRY)&_ZN6S187C63v63Ev,
  (VTBL_ENTRY)&_ZN6S187C63v64Ev,
  (VTBL_ENTRY)&_ZN6S187C63v65Ev,
  (VTBL_ENTRY)&_ZN6S187C63v66Ev,
  (VTBL_ENTRY)&_ZN6S187C63v67Ev,
  (VTBL_ENTRY)&_ZN6S187C53v68Ev,
  (VTBL_ENTRY)&_ZN6S187C53v69Ev,
  (VTBL_ENTRY)&_ZN6S187C53v70Ev,
  (VTBL_ENTRY)&_ZN6S187C53v71Ev,
  (VTBL_ENTRY)&_ZN6S187C53v72Ev,
  (VTBL_ENTRY)&_ZN6S187C53v73Ev,
  (VTBL_ENTRY)&_ZN6S187C53v74Ev,
  (VTBL_ENTRY)&_ZN6S187C53v75Ev,
  (VTBL_ENTRY)&_ZN6S187C53v76Ev,
  (VTBL_ENTRY)&_ZN6S187C53v77Ev,
  (VTBL_ENTRY)&_ZN6S187C53v78Ev,
  (VTBL_ENTRY)&_ZN6S187C53v79Ev,
  (VTBL_ENTRY)&_ZN6S187C53v80Ev,
  (VTBL_ENTRY)&_ZN6S187C53v81Ev,
  (VTBL_ENTRY)&_ZN6S187C53v82Ev,
  (VTBL_ENTRY)&_ZN6S187C53v83Ev,
  (VTBL_ENTRY)&_ZN6S187C53v84Ev,
  (VTBL_ENTRY)&_ZN6S187C53v85Ev,
  (VTBL_ENTRY)&_ZN6S187C53v86Ev,
  (VTBL_ENTRY)&_ZN6S187C53v87Ev,
  (VTBL_ENTRY)&_ZN6S187C53v88Ev,
  (VTBL_ENTRY)&_ZN6S187C53v89Ev,
  (VTBL_ENTRY)&_ZN6S187C53v90Ev,
  (VTBL_ENTRY)&_ZN6S187C53v91Ev,
  (VTBL_ENTRY)&_ZN6S187C53v92Ev,
  (VTBL_ENTRY)&_ZN6S187C53v93Ev,
  (VTBL_ENTRY)&_ZN6S187C53v94Ev,
};
extern VTBL_ENTRY _ZTI6S187C5[];
extern  VTBL_ENTRY _ZTV6S187C5[];
Class_Descriptor cd_S187C5 = {  "S187C5", // class name
  bases_S187C5, 1,
  &(vtc_S187C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S187C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S187C5),95, //virtual function table var
  2, // 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  S187C4  : S187C5 {
  ::S615C22_nt s187c4f0;
  unsigned int s187c4f1:1;
  virtual  ~S187C4(); // _ZN6S187C4D1Ev
  virtual void  v95(); // _ZN6S187C43v95Ev
  virtual void  v96(); // _ZN6S187C43v96Ev
  virtual void  v97(); // _ZN6S187C43v97Ev
  virtual void  v98(); // _ZN6S187C43v98Ev
  virtual void  v99(); // _ZN6S187C43v99Ev
  virtual void  v100(); // _ZN6S187C44v100Ev
  virtual void  v101(); // _ZN6S187C44v101Ev
  virtual void  v102(); // _ZN6S187C44v102Ev
  virtual void  v103(); // _ZN6S187C44v103Ev
  virtual void  v104(); // _ZN6S187C44v104Ev
  virtual void  v105(); // _ZN6S187C44v105Ev
  virtual void  v106(); // _ZN6S187C44v106Ev
  virtual void  v107(); // _ZN6S187C44v107Ev
  virtual void  v108(); // _ZN6S187C44v108Ev
  virtual void  v109(); // _ZN6S187C44v109Ev
  virtual void  v110(); // _ZN6S187C44v110Ev
  virtual void  v111(); // _ZN6S187C44v111Ev
  virtual void  v112(); // _ZN6S187C44v112Ev
  S187C4(); // tgen
};
//SIG(-1 S187C4) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S187C4 ::~S187C4(){ note_dtor("S187C4", this);}
void  S187C4 ::v95(){vfunc_called(this, "_ZN6S187C43v95Ev");}
void  S187C4 ::v96(){vfunc_called(this, "_ZN6S187C43v96Ev");}
void  S187C4 ::v97(){vfunc_called(this, "_ZN6S187C43v97Ev");}
void  S187C4 ::v98(){vfunc_called(this, "_ZN6S187C43v98Ev");}
void  S187C4 ::v99(){vfunc_called(this, "_ZN6S187C43v99Ev");}
void  S187C4 ::v100(){vfunc_called(this, "_ZN6S187C44v100Ev");}
void  S187C4 ::v101(){vfunc_called(this, "_ZN6S187C44v101Ev");}
void  S187C4 ::v102(){vfunc_called(this, "_ZN6S187C44v102Ev");}
void  S187C4 ::v103(){vfunc_called(this, "_ZN6S187C44v103Ev");}
void  S187C4 ::v104(){vfunc_called(this, "_ZN6S187C44v104Ev");}
void  S187C4 ::v105(){vfunc_called(this, "_ZN6S187C44v105Ev");}
void  S187C4 ::v106(){vfunc_called(this, "_ZN6S187C44v106Ev");}
void  S187C4 ::v107(){vfunc_called(this, "_ZN6S187C44v107Ev");}
void  S187C4 ::v108(){vfunc_called(this, "_ZN6S187C44v108Ev");}
void  S187C4 ::v109(){vfunc_called(this, "_ZN6S187C44v109Ev");}
void  S187C4 ::v110(){vfunc_called(this, "_ZN6S187C44v110Ev");}
void  S187C4 ::v111(){vfunc_called(this, "_ZN6S187C44v111Ev");}
void  S187C4 ::v112(){vfunc_called(this, "_ZN6S187C44v112Ev");}
S187C4 ::S187C4(){ note_ctor("S187C4", this);} // tgen

static void Test_S187C4()
{
  extern Class_Descriptor cd_S187C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S187C4, buf);
    S187C4 *dp, &lv = *(dp=new (buf) S187C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S187C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S187C4)");
    check_base_class_offset(lv, (S187C6*)(S187C5*), 0, "S187C4");
    check_base_class_offset(lv, (S187C5*), 0, "S187C4");
    check_field_offset(lv, s187c4f0, ABISELECT(232,180), "S187C4.s187c4f0");
    set_bf_and_test(lv, s187c4f1, ABISELECT(248,192), 0, 1, 1, "S187C4");
    test_class_info(&lv, &cd_S187C4);
    dp->~S187C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS187C4(Test_S187C4, "S187C4", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S187C4C1Ev();
extern void _ZN6S187C4D1Ev();
Name_Map name_map_S187C4[] = {
  NSPAIR(_ZN6S187C4C1Ev),
  NSPAIR(_ZN6S187C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S187C6;
extern VTBL_ENTRY _ZTI6S187C6[];
extern  VTBL_ENTRY _ZTV6S187C6[];
extern Class_Descriptor cd_S187C5;
extern VTBL_ENTRY _ZTI6S187C5[];
extern  VTBL_ENTRY _ZTV6S187C5[];
static Base_Class bases_S187C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S187C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S187C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S187C4[];
extern void _ZN6S187C4D1Ev();
extern void _ZN6S187C4D0Ev();
extern void _ZN6S187C62v4Ev();
extern void _ZN6S187C62v5Ev();
extern void _ZN6S187C62v6Ev();
extern void _ZN6S187C62v7Ev();
extern void _ZN6S187C62v8Ev();
extern void _ZN6S187C62v9Ev();
extern void _ZN6S187C63v10Ev();
extern void _ZN6S187C63v11Ev();
extern void _ZN6S187C63v12Ev();
extern void _ZN6S187C63v13Ev();
extern void _ZN6S187C63v14Ev();
extern void _ZN6S187C63v15Ev();
extern void _ZN6S187C63v16Ev();
extern void _ZN6S187C63v17Ev();
extern void _ZN6S187C63v18Ev();
extern void _ZN6S187C63v19Ev();
extern void _ZN6S187C63v20Ev();
extern void _ZN6S187C63v21Ev();
extern void _ZN6S187C63v22Ev();
extern void _ZN6S187C63v23Ev();
extern void _ZN6S187C63v24Ev();
extern void _ZN6S187C63v25Ev();
extern void _ZN6S187C63v26Ev();
extern void _ZN6S187C63v27Ev();
extern void _ZN6S187C63v28Ev();
extern void _ZN6S187C63v29Ev();
extern void _ZN6S187C63v30Ev();
extern void _ZN6S187C63v31Ev();
extern void _ZN6S187C63v32Ev();
extern void _ZN6S187C63v33Ev();
extern void _ZN6S187C63v34Ev();
extern void _ZN6S187C63v35Ev();
extern void _ZN6S187C63v36Ev();
extern void _ZN6S187C63v37Ev();
extern void _ZN6S187C63v38Ev();
extern void _ZN6S187C63v39Ev();
extern void _ZN6S187C63v40Ev();
extern void _ZN6S187C63v41Ev();
extern void _ZN6S187C63v42Ev();
extern void _ZN6S187C63v43Ev();
extern void _ZN6S187C63v44Ev();
extern void _ZN6S187C63v45Ev();
extern void _ZN6S187C63v46Ev();
extern void _ZN6S187C63v47Ev();
extern void _ZN6S187C63v48Ev();
extern void _ZN6S187C63v49Ev();
extern void _ZN6S187C63v50Ev();
extern void _ZN6S187C63v51Ev();
extern void _ZN6S187C63v52Ev();
extern void _ZN6S187C63v53Ev();
extern void _ZN6S187C63v54Ev();
extern void _ZN6S187C63v55Ev();
extern void _ZN6S187C63v56Ev();
extern void _ZN6S187C63v57Ev();
extern void _ZN6S187C63v58Ev();
extern void _ZN6S187C63v59Ev();
extern void _ZN6S187C63v60Ev();
extern void _ZN6S187C63v61Ev();
extern void _ZN6S187C63v62Ev();
extern void _ZN6S187C63v63Ev();
extern void _ZN6S187C63v64Ev();
extern void _ZN6S187C63v65Ev();
extern void _ZN6S187C63v66Ev();
extern void _ZN6S187C63v67Ev();
extern void _ZN6S187C53v68Ev();
extern void _ZN6S187C53v69Ev();
extern void _ZN6S187C53v70Ev();
extern void _ZN6S187C53v71Ev();
extern void _ZN6S187C53v72Ev();
extern void _ZN6S187C53v73Ev();
extern void _ZN6S187C53v74Ev();
extern void _ZN6S187C53v75Ev();
extern void _ZN6S187C53v76Ev();
extern void _ZN6S187C53v77Ev();
extern void _ZN6S187C53v78Ev();
extern void _ZN6S187C53v79Ev();
extern void _ZN6S187C53v80Ev();
extern void _ZN6S187C53v81Ev();
extern void _ZN6S187C53v82Ev();
extern void _ZN6S187C53v83Ev();
extern void _ZN6S187C53v84Ev();
extern void _ZN6S187C53v85Ev();
extern void _ZN6S187C53v86Ev();
extern void _ZN6S187C53v87Ev();
extern void _ZN6S187C53v88Ev();
extern void _ZN6S187C53v89Ev();
extern void _ZN6S187C53v90Ev();
extern void _ZN6S187C53v91Ev();
extern void _ZN6S187C53v92Ev();
extern void _ZN6S187C53v93Ev();
extern void _ZN6S187C53v94Ev();
extern void _ZN6S187C43v95Ev();
extern void _ZN6S187C43v96Ev();
extern void _ZN6S187C43v97Ev();
extern void _ZN6S187C43v98Ev();
extern void _ZN6S187C43v99Ev();
extern void _ZN6S187C44v100Ev();
extern void _ZN6S187C44v101Ev();
extern void _ZN6S187C44v102Ev();
extern void _ZN6S187C44v103Ev();
extern void _ZN6S187C44v104Ev();
extern void _ZN6S187C44v105Ev();
extern void _ZN6S187C44v106Ev();
extern void _ZN6S187C44v107Ev();
extern void _ZN6S187C44v108Ev();
extern void _ZN6S187C44v109Ev();
extern void _ZN6S187C44v110Ev();
extern void _ZN6S187C44v111Ev();
extern void _ZN6S187C44v112Ev();
static  VTBL_ENTRY vtc_S187C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S187C4[0]),
  (VTBL_ENTRY)&_ZN6S187C4D1Ev,
  (VTBL_ENTRY)&_ZN6S187C4D0Ev,
  (VTBL_ENTRY)&_ZN6S187C62v4Ev,
  (VTBL_ENTRY)&_ZN6S187C62v5Ev,
  (VTBL_ENTRY)&_ZN6S187C62v6Ev,
  (VTBL_ENTRY)&_ZN6S187C62v7Ev,
  (VTBL_ENTRY)&_ZN6S187C62v8Ev,
  (VTBL_ENTRY)&_ZN6S187C62v9Ev,
  (VTBL_ENTRY)&_ZN6S187C63v10Ev,
  (VTBL_ENTRY)&_ZN6S187C63v11Ev,
  (VTBL_ENTRY)&_ZN6S187C63v12Ev,
  (VTBL_ENTRY)&_ZN6S187C63v13Ev,
  (VTBL_ENTRY)&_ZN6S187C63v14Ev,
  (VTBL_ENTRY)&_ZN6S187C63v15Ev,
  (VTBL_ENTRY)&_ZN6S187C63v16Ev,
  (VTBL_ENTRY)&_ZN6S187C63v17Ev,
  (VTBL_ENTRY)&_ZN6S187C63v18Ev,
  (VTBL_ENTRY)&_ZN6S187C63v19Ev,
  (VTBL_ENTRY)&_ZN6S187C63v20Ev,
  (VTBL_ENTRY)&_ZN6S187C63v21Ev,
  (VTBL_ENTRY)&_ZN6S187C63v22Ev,
  (VTBL_ENTRY)&_ZN6S187C63v23Ev,
  (VTBL_ENTRY)&_ZN6S187C63v24Ev,
  (VTBL_ENTRY)&_ZN6S187C63v25Ev,
  (VTBL_ENTRY)&_ZN6S187C63v26Ev,
  (VTBL_ENTRY)&_ZN6S187C63v27Ev,
  (VTBL_ENTRY)&_ZN6S187C63v28Ev,
  (VTBL_ENTRY)&_ZN6S187C63v29Ev,
  (VTBL_ENTRY)&_ZN6S187C63v30Ev,
  (VTBL_ENTRY)&_ZN6S187C63v31Ev,
  (VTBL_ENTRY)&_ZN6S187C63v32Ev,
  (VTBL_ENTRY)&_ZN6S187C63v33Ev,
  (VTBL_ENTRY)&_ZN6S187C63v34Ev,
  (VTBL_ENTRY)&_ZN6S187C63v35Ev,
  (VTBL_ENTRY)&_ZN6S187C63v36Ev,
  (VTBL_ENTRY)&_ZN6S187C63v37Ev,
  (VTBL_ENTRY)&_ZN6S187C63v38Ev,
  (VTBL_ENTRY)&_ZN6S187C63v39Ev,
  (VTBL_ENTRY)&_ZN6S187C63v40Ev,
  (VTBL_ENTRY)&_ZN6S187C63v41Ev,
  (VTBL_ENTRY)&_ZN6S187C63v42Ev,
  (VTBL_ENTRY)&_ZN6S187C63v43Ev,
  (VTBL_ENTRY)&_ZN6S187C63v44Ev,
  (VTBL_ENTRY)&_ZN6S187C63v45Ev,
  (VTBL_ENTRY)&_ZN6S187C63v46Ev,
  (VTBL_ENTRY)&_ZN6S187C63v47Ev,
  (VTBL_ENTRY)&_ZN6S187C63v48Ev,
  (VTBL_ENTRY)&_ZN6S187C63v49Ev,
  (VTBL_ENTRY)&_ZN6S187C63v50Ev,
  (VTBL_ENTRY)&_ZN6S187C63v51Ev,
  (VTBL_ENTRY)&_ZN6S187C63v52Ev,
  (VTBL_ENTRY)&_ZN6S187C63v53Ev,
  (VTBL_ENTRY)&_ZN6S187C63v54Ev,
  (VTBL_ENTRY)&_ZN6S187C63v55Ev,
  (VTBL_ENTRY)&_ZN6S187C63v56Ev,
  (VTBL_ENTRY)&_ZN6S187C63v57Ev,
  (VTBL_ENTRY)&_ZN6S187C63v58Ev,
  (VTBL_ENTRY)&_ZN6S187C63v59Ev,
  (VTBL_ENTRY)&_ZN6S187C63v60Ev,
  (VTBL_ENTRY)&_ZN6S187C63v61Ev,
  (VTBL_ENTRY)&_ZN6S187C63v62Ev,
  (VTBL_ENTRY)&_ZN6S187C63v63Ev,
  (VTBL_ENTRY)&_ZN6S187C63v64Ev,
  (VTBL_ENTRY)&_ZN6S187C63v65Ev,
  (VTBL_ENTRY)&_ZN6S187C63v66Ev,
  (VTBL_ENTRY)&_ZN6S187C63v67Ev,
  (VTBL_ENTRY)&_ZN6S187C53v68Ev,
  (VTBL_ENTRY)&_ZN6S187C53v69Ev,
  (VTBL_ENTRY)&_ZN6S187C53v70Ev,
  (VTBL_ENTRY)&_ZN6S187C53v71Ev,
  (VTBL_ENTRY)&_ZN6S187C53v72Ev,
  (VTBL_ENTRY)&_ZN6S187C53v73Ev,
  (VTBL_ENTRY)&_ZN6S187C53v74Ev,
  (VTBL_ENTRY)&_ZN6S187C53v75Ev,
  (VTBL_ENTRY)&_ZN6S187C53v76Ev,
  (VTBL_ENTRY)&_ZN6S187C53v77Ev,
  (VTBL_ENTRY)&_ZN6S187C53v78Ev,
  (VTBL_ENTRY)&_ZN6S187C53v79Ev,
  (VTBL_ENTRY)&_ZN6S187C53v80Ev,
  (VTBL_ENTRY)&_ZN6S187C53v81Ev,
  (VTBL_ENTRY)&_ZN6S187C53v82Ev,
  (VTBL_ENTRY)&_ZN6S187C53v83Ev,
  (VTBL_ENTRY)&_ZN6S187C53v84Ev,
  (VTBL_ENTRY)&_ZN6S187C53v85Ev,
  (VTBL_ENTRY)&_ZN6S187C53v86Ev,
  (VTBL_ENTRY)&_ZN6S187C53v87Ev,
  (VTBL_ENTRY)&_ZN6S187C53v88Ev,
  (VTBL_ENTRY)&_ZN6S187C53v89Ev,
  (VTBL_ENTRY)&_ZN6S187C53v90Ev,
  (VTBL_ENTRY)&_ZN6S187C53v91Ev,
  (VTBL_ENTRY)&_ZN6S187C53v92Ev,
  (VTBL_ENTRY)&_ZN6S187C53v93Ev,
  (VTBL_ENTRY)&_ZN6S187C53v94Ev,
  (VTBL_ENTRY)&_ZN6S187C43v95Ev,
  (VTBL_ENTRY)&_ZN6S187C43v96Ev,
  (VTBL_ENTRY)&_ZN6S187C43v97Ev,
  (VTBL_ENTRY)&_ZN6S187C43v98Ev,
  (VTBL_ENTRY)&_ZN6S187C43v99Ev,
  (VTBL_ENTRY)&_ZN6S187C44v100Ev,
  (VTBL_ENTRY)&_ZN6S187C44v101Ev,
  (VTBL_ENTRY)&_ZN6S187C44v102Ev,
  (VTBL_ENTRY)&_ZN6S187C44v103Ev,
  (VTBL_ENTRY)&_ZN6S187C44v104Ev,
  (VTBL_ENTRY)&_ZN6S187C44v105Ev,
  (VTBL_ENTRY)&_ZN6S187C44v106Ev,
  (VTBL_ENTRY)&_ZN6S187C44v107Ev,
  (VTBL_ENTRY)&_ZN6S187C44v108Ev,
  (VTBL_ENTRY)&_ZN6S187C44v109Ev,
  (VTBL_ENTRY)&_ZN6S187C44v110Ev,
  (VTBL_ENTRY)&_ZN6S187C44v111Ev,
  (VTBL_ENTRY)&_ZN6S187C44v112Ev,
};
extern VTBL_ENTRY _ZTI6S187C4[];
extern  VTBL_ENTRY _ZTV6S187C4[];
Class_Descriptor cd_S187C4 = {  "S187C4", // class name
  bases_S187C4, 2,
  &(vtc_S187C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S187C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S187C4),113, //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  S187C3  : S187C4 {
  ::S165C27 s187c3f0;
  int s187c3f1[2];
  unsigned int s187c3f2:1;
  virtual  ~S187C3(); // _ZN6S187C3D1Ev
  virtual void  v113(); // _ZN6S187C34v113Ev
  virtual void  v114(); // _ZN6S187C34v114Ev
  virtual void  v115(); // _ZN6S187C34v115Ev
  virtual void  v116(); // _ZN6S187C34v116Ev
  virtual void  v117(); // _ZN6S187C34v117Ev
  virtual void  v118(); // _ZN6S187C34v118Ev
  virtual void  v119(); // _ZN6S187C34v119Ev
  S187C3(); // tgen
};
//SIG(-1 S187C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 FC16{ BC17{ BC8}} Fi[2] Fi:1}


 S187C3 ::~S187C3(){ note_dtor("S187C3", this);}
void  S187C3 ::v113(){vfunc_called(this, "_ZN6S187C34v113Ev");}
void  S187C3 ::v114(){vfunc_called(this, "_ZN6S187C34v114Ev");}
void  S187C3 ::v115(){vfunc_called(this, "_ZN6S187C34v115Ev");}
void  S187C3 ::v116(){vfunc_called(this, "_ZN6S187C34v116Ev");}
void  S187C3 ::v117(){vfunc_called(this, "_ZN6S187C34v117Ev");}
void  S187C3 ::v118(){vfunc_called(this, "_ZN6S187C34v118Ev");}
void  S187C3 ::v119(){vfunc_called(this, "_ZN6S187C34v119Ev");}
S187C3 ::S187C3(){ note_ctor("S187C3", this);} // tgen

static void Test_S187C3()
{
  extern Class_Descriptor cd_S187C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,56)];
    init_test(&cd_S187C3, buf);
    S187C3 *dp, &lv = *(dp=new (buf) S187C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,220), "sizeof(S187C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S187C3)");
    check_base_class_offset(lv, (S187C6*)(S187C5*)(S187C4*), 0, "S187C3");
    check_base_class_offset(lv, (S187C5*)(S187C4*), 0, "S187C3");
    check_base_class_offset(lv, (S187C4*), 0, "S187C3");
    check_field_offset(lv, s187c3f0, ABISELECT(256,196), "S187C3.s187c3f0");
    check_field_offset(lv, s187c3f1, ABISELECT(272,208), "S187C3.s187c3f1");
    set_bf_and_test(lv, s187c3f2, ABISELECT(280,216), 0, 1, 1, "S187C3");
    test_class_info(&lv, &cd_S187C3);
    dp->~S187C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS187C3(Test_S187C3, "S187C3", ABISELECT(288,220));

#else // __cplusplus

extern void _ZN6S187C3C1Ev();
extern void _ZN6S187C3D1Ev();
Name_Map name_map_S187C3[] = {
  NSPAIR(_ZN6S187C3C1Ev),
  NSPAIR(_ZN6S187C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S187C6;
extern VTBL_ENTRY _ZTI6S187C6[];
extern  VTBL_ENTRY _ZTV6S187C6[];
extern Class_Descriptor cd_S187C5;
extern VTBL_ENTRY _ZTI6S187C5[];
extern  VTBL_ENTRY _ZTV6S187C5[];
extern Class_Descriptor cd_S187C4;
extern VTBL_ENTRY _ZTI6S187C4[];
extern  VTBL_ENTRY _ZTV6S187C4[];
static Base_Class bases_S187C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S187C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S187C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S187C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S187C3[];
extern void _ZN6S187C3D1Ev();
extern void _ZN6S187C3D0Ev();
extern void _ZN6S187C62v4Ev();
extern void _ZN6S187C62v5Ev();
extern void _ZN6S187C62v6Ev();
extern void _ZN6S187C62v7Ev();
extern void _ZN6S187C62v8Ev();
extern void _ZN6S187C62v9Ev();
extern void _ZN6S187C63v10Ev();
extern void _ZN6S187C63v11Ev();
extern void _ZN6S187C63v12Ev();
extern void _ZN6S187C63v13Ev();
extern void _ZN6S187C63v14Ev();
extern void _ZN6S187C63v15Ev();
extern void _ZN6S187C63v16Ev();
extern void _ZN6S187C63v17Ev();
extern void _ZN6S187C63v18Ev();
extern void _ZN6S187C63v19Ev();
extern void _ZN6S187C63v20Ev();
extern void _ZN6S187C63v21Ev();
extern void _ZN6S187C63v22Ev();
extern void _ZN6S187C63v23Ev();
extern void _ZN6S187C63v24Ev();
extern void _ZN6S187C63v25Ev();
extern void _ZN6S187C63v26Ev();
extern void _ZN6S187C63v27Ev();
extern void _ZN6S187C63v28Ev();
extern void _ZN6S187C63v29Ev();
extern void _ZN6S187C63v30Ev();
extern void _ZN6S187C63v31Ev();
extern void _ZN6S187C63v32Ev();
extern void _ZN6S187C63v33Ev();
extern void _ZN6S187C63v34Ev();
extern void _ZN6S187C63v35Ev();
extern void _ZN6S187C63v36Ev();
extern void _ZN6S187C63v37Ev();
extern void _ZN6S187C63v38Ev();
extern void _ZN6S187C63v39Ev();
extern void _ZN6S187C63v40Ev();
extern void _ZN6S187C63v41Ev();
extern void _ZN6S187C63v42Ev();
extern void _ZN6S187C63v43Ev();
extern void _ZN6S187C63v44Ev();
extern void _ZN6S187C63v45Ev();
extern void _ZN6S187C63v46Ev();
extern void _ZN6S187C63v47Ev();
extern void _ZN6S187C63v48Ev();
extern void _ZN6S187C63v49Ev();
extern void _ZN6S187C63v50Ev();
extern void _ZN6S187C63v51Ev();
extern void _ZN6S187C63v52Ev();
extern void _ZN6S187C63v53Ev();
extern void _ZN6S187C63v54Ev();
extern void _ZN6S187C63v55Ev();
extern void _ZN6S187C63v56Ev();
extern void _ZN6S187C63v57Ev();
extern void _ZN6S187C63v58Ev();
extern void _ZN6S187C63v59Ev();
extern void _ZN6S187C63v60Ev();
extern void _ZN6S187C63v61Ev();
extern void _ZN6S187C63v62Ev();
extern void _ZN6S187C63v63Ev();
extern void _ZN6S187C63v64Ev();
extern void _ZN6S187C63v65Ev();
extern void _ZN6S187C63v66Ev();
extern void _ZN6S187C63v67Ev();
extern void _ZN6S187C53v68Ev();
extern void _ZN6S187C53v69Ev();
extern void _ZN6S187C53v70Ev();
extern void _ZN6S187C53v71Ev();
extern void _ZN6S187C53v72Ev();
extern void _ZN6S187C53v73Ev();
extern void _ZN6S187C53v74Ev();
extern void _ZN6S187C53v75Ev();
extern void _ZN6S187C53v76Ev();
extern void _ZN6S187C53v77Ev();
extern void _ZN6S187C53v78Ev();
extern void _ZN6S187C53v79Ev();
extern void _ZN6S187C53v80Ev();
extern void _ZN6S187C53v81Ev();
extern void _ZN6S187C53v82Ev();
extern void _ZN6S187C53v83Ev();
extern void _ZN6S187C53v84Ev();
extern void _ZN6S187C53v85Ev();
extern void _ZN6S187C53v86Ev();
extern void _ZN6S187C53v87Ev();
extern void _ZN6S187C53v88Ev();
extern void _ZN6S187C53v89Ev();
extern void _ZN6S187C53v90Ev();
extern void _ZN6S187C53v91Ev();
extern void _ZN6S187C53v92Ev();
extern void _ZN6S187C53v93Ev();
extern void _ZN6S187C53v94Ev();
extern void _ZN6S187C43v95Ev();
extern void _ZN6S187C43v96Ev();
extern void _ZN6S187C43v97Ev();
extern void _ZN6S187C43v98Ev();
extern void _ZN6S187C43v99Ev();
extern void _ZN6S187C44v100Ev();
extern void _ZN6S187C44v101Ev();
extern void _ZN6S187C44v102Ev();
extern void _ZN6S187C44v103Ev();
extern void _ZN6S187C44v104Ev();
extern void _ZN6S187C44v105Ev();
extern void _ZN6S187C44v106Ev();
extern void _ZN6S187C44v107Ev();
extern void _ZN6S187C44v108Ev();
extern void _ZN6S187C44v109Ev();
extern void _ZN6S187C44v110Ev();
extern void _ZN6S187C44v111Ev();
extern void _ZN6S187C44v112Ev();
extern void _ZN6S187C34v113Ev();
extern void _ZN6S187C34v114Ev();
extern void _ZN6S187C34v115Ev();
extern void _ZN6S187C34v116Ev();
extern void _ZN6S187C34v117Ev();
extern void _ZN6S187C34v118Ev();
extern void _ZN6S187C34v119Ev();
static  VTBL_ENTRY vtc_S187C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S187C3[0]),
  (VTBL_ENTRY)&_ZN6S187C3D1Ev,
  (VTBL_ENTRY)&_ZN6S187C3D0Ev,
  (VTBL_ENTRY)&_ZN6S187C62v4Ev,
  (VTBL_ENTRY)&_ZN6S187C62v5Ev,
  (VTBL_ENTRY)&_ZN6S187C62v6Ev,
  (VTBL_ENTRY)&_ZN6S187C62v7Ev,
  (VTBL_ENTRY)&_ZN6S187C62v8Ev,
  (VTBL_ENTRY)&_ZN6S187C62v9Ev,
  (VTBL_ENTRY)&_ZN6S187C63v10Ev,
  (VTBL_ENTRY)&_ZN6S187C63v11Ev,
  (VTBL_ENTRY)&_ZN6S187C63v12Ev,
  (VTBL_ENTRY)&_ZN6S187C63v13Ev,
  (VTBL_ENTRY)&_ZN6S187C63v14Ev,
  (VTBL_ENTRY)&_ZN6S187C63v15Ev,
  (VTBL_ENTRY)&_ZN6S187C63v16Ev,
  (VTBL_ENTRY)&_ZN6S187C63v17Ev,
  (VTBL_ENTRY)&_ZN6S187C63v18Ev,
  (VTBL_ENTRY)&_ZN6S187C63v19Ev,
  (VTBL_ENTRY)&_ZN6S187C63v20Ev,
  (VTBL_ENTRY)&_ZN6S187C63v21Ev,
  (VTBL_ENTRY)&_ZN6S187C63v22Ev,
  (VTBL_ENTRY)&_ZN6S187C63v23Ev,
  (VTBL_ENTRY)&_ZN6S187C63v24Ev,
  (VTBL_ENTRY)&_ZN6S187C63v25Ev,
  (VTBL_ENTRY)&_ZN6S187C63v26Ev,
  (VTBL_ENTRY)&_ZN6S187C63v27Ev,
  (VTBL_ENTRY)&_ZN6S187C63v28Ev,
  (VTBL_ENTRY)&_ZN6S187C63v29Ev,
  (VTBL_ENTRY)&_ZN6S187C63v30Ev,
  (VTBL_ENTRY)&_ZN6S187C63v31Ev,
  (VTBL_ENTRY)&_ZN6S187C63v32Ev,
  (VTBL_ENTRY)&_ZN6S187C63v33Ev,
  (VTBL_ENTRY)&_ZN6S187C63v34Ev,
  (VTBL_ENTRY)&_ZN6S187C63v35Ev,
  (VTBL_ENTRY)&_ZN6S187C63v36Ev,
  (VTBL_ENTRY)&_ZN6S187C63v37Ev,
  (VTBL_ENTRY)&_ZN6S187C63v38Ev,
  (VTBL_ENTRY)&_ZN6S187C63v39Ev,
  (VTBL_ENTRY)&_ZN6S187C63v40Ev,
  (VTBL_ENTRY)&_ZN6S187C63v41Ev,
  (VTBL_ENTRY)&_ZN6S187C63v42Ev,
  (VTBL_ENTRY)&_ZN6S187C63v43Ev,
  (VTBL_ENTRY)&_ZN6S187C63v44Ev,
  (VTBL_ENTRY)&_ZN6S187C63v45Ev,
  (VTBL_ENTRY)&_ZN6S187C63v46Ev,
  (VTBL_ENTRY)&_ZN6S187C63v47Ev,
  (VTBL_ENTRY)&_ZN6S187C63v48Ev,
  (VTBL_ENTRY)&_ZN6S187C63v49Ev,
  (VTBL_ENTRY)&_ZN6S187C63v50Ev,
  (VTBL_ENTRY)&_ZN6S187C63v51Ev,
  (VTBL_ENTRY)&_ZN6S187C63v52Ev,
  (VTBL_ENTRY)&_ZN6S187C63v53Ev,
  (VTBL_ENTRY)&_ZN6S187C63v54Ev,
  (VTBL_ENTRY)&_ZN6S187C63v55Ev,
  (VTBL_ENTRY)&_ZN6S187C63v56Ev,
  (VTBL_ENTRY)&_ZN6S187C63v57Ev,
  (VTBL_ENTRY)&_ZN6S187C63v58Ev,
  (VTBL_ENTRY)&_ZN6S187C63v59Ev,
  (VTBL_ENTRY)&_ZN6S187C63v60Ev,
  (VTBL_ENTRY)&_ZN6S187C63v61Ev,
  (VTBL_ENTRY)&_ZN6S187C63v62Ev,
  (VTBL_ENTRY)&_ZN6S187C63v63Ev,
  (VTBL_ENTRY)&_ZN6S187C63v64Ev,
  (VTBL_ENTRY)&_ZN6S187C63v65Ev,
  (VTBL_ENTRY)&_ZN6S187C63v66Ev,
  (VTBL_ENTRY)&_ZN6S187C63v67Ev,
  (VTBL_ENTRY)&_ZN6S187C53v68Ev,
  (VTBL_ENTRY)&_ZN6S187C53v69Ev,
  (VTBL_ENTRY)&_ZN6S187C53v70Ev,
  (VTBL_ENTRY)&_ZN6S187C53v71Ev,
  (VTBL_ENTRY)&_ZN6S187C53v72Ev,
  (VTBL_ENTRY)&_ZN6S187C53v73Ev,
  (VTBL_ENTRY)&_ZN6S187C53v74Ev,
  (VTBL_ENTRY)&_ZN6S187C53v75Ev,
  (VTBL_ENTRY)&_ZN6S187C53v76Ev,
  (VTBL_ENTRY)&_ZN6S187C53v77Ev,
  (VTBL_ENTRY)&_ZN6S187C53v78Ev,
  (VTBL_ENTRY)&_ZN6S187C53v79Ev,
  (VTBL_ENTRY)&_ZN6S187C53v80Ev,
  (VTBL_ENTRY)&_ZN6S187C53v81Ev,
  (VTBL_ENTRY)&_ZN6S187C53v82Ev,
  (VTBL_ENTRY)&_ZN6S187C53v83Ev,
  (VTBL_ENTRY)&_ZN6S187C53v84Ev,
  (VTBL_ENTRY)&_ZN6S187C53v85Ev,
  (VTBL_ENTRY)&_ZN6S187C53v86Ev,
  (VTBL_ENTRY)&_ZN6S187C53v87Ev,
  (VTBL_ENTRY)&_ZN6S187C53v88Ev,
  (VTBL_ENTRY)&_ZN6S187C53v89Ev,
  (VTBL_ENTRY)&_ZN6S187C53v90Ev,
  (VTBL_ENTRY)&_ZN6S187C53v91Ev,
  (VTBL_ENTRY)&_ZN6S187C53v92Ev,
  (VTBL_ENTRY)&_ZN6S187C53v93Ev,
  (VTBL_ENTRY)&_ZN6S187C53v94Ev,
  (VTBL_ENTRY)&_ZN6S187C43v95Ev,
  (VTBL_ENTRY)&_ZN6S187C43v96Ev,
  (VTBL_ENTRY)&_ZN6S187C43v97Ev,
  (VTBL_ENTRY)&_ZN6S187C43v98Ev,
  (VTBL_ENTRY)&_ZN6S187C43v99Ev,
  (VTBL_ENTRY)&_ZN6S187C44v100Ev,
  (VTBL_ENTRY)&_ZN6S187C44v101Ev,
  (VTBL_ENTRY)&_ZN6S187C44v102Ev,
  (VTBL_ENTRY)&_ZN6S187C44v103Ev,
  (VTBL_ENTRY)&_ZN6S187C44v104Ev,
  (VTBL_ENTRY)&_ZN6S187C44v105Ev,
  (VTBL_ENTRY)&_ZN6S187C44v106Ev,
  (VTBL_ENTRY)&_ZN6S187C44v107Ev,
  (VTBL_ENTRY)&_ZN6S187C44v108Ev,
  (VTBL_ENTRY)&_ZN6S187C44v109Ev,
  (VTBL_ENTRY)&_ZN6S187C44v110Ev,
  (VTBL_ENTRY)&_ZN6S187C44v111Ev,
  (VTBL_ENTRY)&_ZN6S187C44v112Ev,
  (VTBL_ENTRY)&_ZN6S187C34v113Ev,
  (VTBL_ENTRY)&_ZN6S187C34v114Ev,
  (VTBL_ENTRY)&_ZN6S187C34v115Ev,
  (VTBL_ENTRY)&_ZN6S187C34v116Ev,
  (VTBL_ENTRY)&_ZN6S187C34v117Ev,
  (VTBL_ENTRY)&_ZN6S187C34v118Ev,
  (VTBL_ENTRY)&_ZN6S187C34v119Ev,
};
extern VTBL_ENTRY _ZTI6S187C3[];
extern  VTBL_ENTRY _ZTV6S187C3[];
Class_Descriptor cd_S187C3 = {  "S187C3", // class name
  bases_S187C3, 3,
  &(vtc_S187C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,220), // object size
  NSPAIRA(_ZTI6S187C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S187C3),120, //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  S187C2  : S187C3 {
  int s187c2f0;
  ::S165C27 s187c2f1;
  int s187c2f2;
  virtual  ~S187C2(); // _ZN6S187C2D1Ev
  virtual void  v120(); // _ZN6S187C24v120Ev
  virtual void  v121(); // _ZN6S187C24v121Ev
  virtual void  v122(); // _ZN6S187C24v122Ev
  virtual void  v123(); // _ZN6S187C24v123Ev
  virtual void  v124(); // _ZN6S187C24v124Ev
  virtual void  v125(); // _ZN6S187C24v125Ev
  S187C2(); // tgen
};
//SIG(-1 S187C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v93 v94 v95 v96 v97 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC15{ BC16{ BC9}} Fi:1} vd v116 v117 v118 v119 v120 v121 v122 FC17{ BC18{ BC9}} Fi[2] Fi:1} vd v1 v2 v3 v4 v5 v6 Fi FC17 Fi}


 S187C2 ::~S187C2(){ note_dtor("S187C2", this);}
void  S187C2 ::v120(){vfunc_called(this, "_ZN6S187C24v120Ev");}
void  S187C2 ::v121(){vfunc_called(this, "_ZN6S187C24v121Ev");}
void  S187C2 ::v122(){vfunc_called(this, "_ZN6S187C24v122Ev");}
void  S187C2 ::v123(){vfunc_called(this, "_ZN6S187C24v123Ev");}
void  S187C2 ::v124(){vfunc_called(this, "_ZN6S187C24v124Ev");}
void  S187C2 ::v125(){vfunc_called(this, "_ZN6S187C24v125Ev");}
S187C2 ::S187C2(){ note_ctor("S187C2", this);} // tgen

static void Test_S187C2()
{
  extern Class_Descriptor cd_S187C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,61)];
    init_test(&cd_S187C2, buf);
    S187C2 *dp, &lv = *(dp=new (buf) S187C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,240), "sizeof(S187C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S187C2)");
    check_base_class_offset(lv, (S187C6*)(S187C5*)(S187C4*)(S187C3*), 0, "S187C2");
    check_base_class_offset(lv, (S187C5*)(S187C4*)(S187C3*), 0, "S187C2");
    check_base_class_offset(lv, (S187C4*)(S187C3*), 0, "S187C2");
    check_base_class_offset(lv, (S187C3*), 0, "S187C2");
    check_field_offset(lv, s187c2f0, ABISELECT(284,220), "S187C2.s187c2f0");
    check_field_offset(lv, s187c2f1, ABISELECT(288,224), "S187C2.s187c2f1");
    check_field_offset(lv, s187c2f2, ABISELECT(304,236), "S187C2.s187c2f2");
    test_class_info(&lv, &cd_S187C2);
    dp->~S187C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS187C2(Test_S187C2, "S187C2", ABISELECT(312,240));

#else // __cplusplus

extern void _ZN6S187C2C1Ev();
extern void _ZN6S187C2D1Ev();
Name_Map name_map_S187C2[] = {
  NSPAIR(_ZN6S187C2C1Ev),
  NSPAIR(_ZN6S187C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S187C6;
extern VTBL_ENTRY _ZTI6S187C6[];
extern  VTBL_ENTRY _ZTV6S187C6[];
extern Class_Descriptor cd_S187C5;
extern VTBL_ENTRY _ZTI6S187C5[];
extern  VTBL_ENTRY _ZTV6S187C5[];
extern Class_Descriptor cd_S187C4;
extern VTBL_ENTRY _ZTI6S187C4[];
extern  VTBL_ENTRY _ZTV6S187C4[];
extern Class_Descriptor cd_S187C3;
extern VTBL_ENTRY _ZTI6S187C3[];
extern  VTBL_ENTRY _ZTV6S187C3[];
static Base_Class bases_S187C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S187C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S187C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S187C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S187C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S187C2[];
extern void _ZN6S187C2D1Ev();
extern void _ZN6S187C2D0Ev();
extern void _ZN6S187C62v4Ev();
extern void _ZN6S187C62v5Ev();
extern void _ZN6S187C62v6Ev();
extern void _ZN6S187C62v7Ev();
extern void _ZN6S187C62v8Ev();
extern void _ZN6S187C62v9Ev();
extern void _ZN6S187C63v10Ev();
extern void _ZN6S187C63v11Ev();
extern void _ZN6S187C63v12Ev();
extern void _ZN6S187C63v13Ev();
extern void _ZN6S187C63v14Ev();
extern void _ZN6S187C63v15Ev();
extern void _ZN6S187C63v16Ev();
extern void _ZN6S187C63v17Ev();
extern void _ZN6S187C63v18Ev();
extern void _ZN6S187C63v19Ev();
extern void _ZN6S187C63v20Ev();
extern void _ZN6S187C63v21Ev();
extern void _ZN6S187C63v22Ev();
extern void _ZN6S187C63v23Ev();
extern void _ZN6S187C63v24Ev();
extern void _ZN6S187C63v25Ev();
extern void _ZN6S187C63v26Ev();
extern void _ZN6S187C63v27Ev();
extern void _ZN6S187C63v28Ev();
extern void _ZN6S187C63v29Ev();
extern void _ZN6S187C63v30Ev();
extern void _ZN6S187C63v31Ev();
extern void _ZN6S187C63v32Ev();
extern void _ZN6S187C63v33Ev();
extern void _ZN6S187C63v34Ev();
extern void _ZN6S187C63v35Ev();
extern void _ZN6S187C63v36Ev();
extern void _ZN6S187C63v37Ev();
extern void _ZN6S187C63v38Ev();
extern void _ZN6S187C63v39Ev();
extern void _ZN6S187C63v40Ev();
extern void _ZN6S187C63v41Ev();
extern void _ZN6S187C63v42Ev();
extern void _ZN6S187C63v43Ev();
extern void _ZN6S187C63v44Ev();
extern void _ZN6S187C63v45Ev();
extern void _ZN6S187C63v46Ev();
extern void _ZN6S187C63v47Ev();
extern void _ZN6S187C63v48Ev();
extern void _ZN6S187C63v49Ev();
extern void _ZN6S187C63v50Ev();
extern void _ZN6S187C63v51Ev();
extern void _ZN6S187C63v52Ev();
extern void _ZN6S187C63v53Ev();
extern void _ZN6S187C63v54Ev();
extern void _ZN6S187C63v55Ev();
extern void _ZN6S187C63v56Ev();
extern void _ZN6S187C63v57Ev();
extern void _ZN6S187C63v58Ev();
extern void _ZN6S187C63v59Ev();
extern void _ZN6S187C63v60Ev();
extern void _ZN6S187C63v61Ev();
extern void _ZN6S187C63v62Ev();
extern void _ZN6S187C63v63Ev();
extern void _ZN6S187C63v64Ev();
extern void _ZN6S187C63v65Ev();
extern void _ZN6S187C63v66Ev();
extern void _ZN6S187C63v67Ev();
extern void _ZN6S187C53v68Ev();
extern void _ZN6S187C53v69Ev();
extern void _ZN6S187C53v70Ev();
extern void _ZN6S187C53v71Ev();
extern void _ZN6S187C53v72Ev();
extern void _ZN6S187C53v73Ev();
extern void _ZN6S187C53v74Ev();
extern void _ZN6S187C53v75Ev();
extern void _ZN6S187C53v76Ev();
extern void _ZN6S187C53v77Ev();
extern void _ZN6S187C53v78Ev();
extern void _ZN6S187C53v79Ev();
extern void _ZN6S187C53v80Ev();
extern void _ZN6S187C53v81Ev();
extern void _ZN6S187C53v82Ev();
extern void _ZN6S187C53v83Ev();
extern void _ZN6S187C53v84Ev();
extern void _ZN6S187C53v85Ev();
extern void _ZN6S187C53v86Ev();
extern void _ZN6S187C53v87Ev();
extern void _ZN6S187C53v88Ev();
extern void _ZN6S187C53v89Ev();
extern void _ZN6S187C53v90Ev();
extern void _ZN6S187C53v91Ev();
extern void _ZN6S187C53v92Ev();
extern void _ZN6S187C53v93Ev();
extern void _ZN6S187C53v94Ev();
extern void _ZN6S187C43v95Ev();
extern void _ZN6S187C43v96Ev();
extern void _ZN6S187C43v97Ev();
extern void _ZN6S187C43v98Ev();
extern void _ZN6S187C43v99Ev();
extern void _ZN6S187C44v100Ev();
extern void _ZN6S187C44v101Ev();
extern void _ZN6S187C44v102Ev();
extern void _ZN6S187C44v103Ev();
extern void _ZN6S187C44v104Ev();
extern void _ZN6S187C44v105Ev();
extern void _ZN6S187C44v106Ev();
extern void _ZN6S187C44v107Ev();
extern void _ZN6S187C44v108Ev();
extern void _ZN6S187C44v109Ev();
extern void _ZN6S187C44v110Ev();
extern void _ZN6S187C44v111Ev();
extern void _ZN6S187C44v112Ev();
extern void _ZN6S187C34v113Ev();
extern void _ZN6S187C34v114Ev();
extern void _ZN6S187C34v115Ev();
extern void _ZN6S187C34v116Ev();
extern void _ZN6S187C34v117Ev();
extern void _ZN6S187C34v118Ev();
extern void _ZN6S187C34v119Ev();
extern void _ZN6S187C24v120Ev();
extern void _ZN6S187C24v121Ev();
extern void _ZN6S187C24v122Ev();
extern void _ZN6S187C24v123Ev();
extern void _ZN6S187C24v124Ev();
extern void _ZN6S187C24v125Ev();
static  VTBL_ENTRY vtc_S187C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S187C2[0]),
  (VTBL_ENTRY)&_ZN6S187C2D1Ev,
  (VTBL_ENTRY)&_ZN6S187C2D0Ev,
  (VTBL_ENTRY)&_ZN6S187C62v4Ev,
  (VTBL_ENTRY)&_ZN6S187C62v5Ev,
  (VTBL_ENTRY)&_ZN6S187C62v6Ev,
  (VTBL_ENTRY)&_ZN6S187C62v7Ev,
  (VTBL_ENTRY)&_ZN6S187C62v8Ev,
  (VTBL_ENTRY)&_ZN6S187C62v9Ev,
  (VTBL_ENTRY)&_ZN6S187C63v10Ev,
  (VTBL_ENTRY)&_ZN6S187C63v11Ev,
  (VTBL_ENTRY)&_ZN6S187C63v12Ev,
  (VTBL_ENTRY)&_ZN6S187C63v13Ev,
  (VTBL_ENTRY)&_ZN6S187C63v14Ev,
  (VTBL_ENTRY)&_ZN6S187C63v15Ev,
  (VTBL_ENTRY)&_ZN6S187C63v16Ev,
  (VTBL_ENTRY)&_ZN6S187C63v17Ev,
  (VTBL_ENTRY)&_ZN6S187C63v18Ev,
  (VTBL_ENTRY)&_ZN6S187C63v19Ev,
  (VTBL_ENTRY)&_ZN6S187C63v20Ev,
  (VTBL_ENTRY)&_ZN6S187C63v21Ev,
  (VTBL_ENTRY)&_ZN6S187C63v22Ev,
  (VTBL_ENTRY)&_ZN6S187C63v23Ev,
  (VTBL_ENTRY)&_ZN6S187C63v24Ev,
  (VTBL_ENTRY)&_ZN6S187C63v25Ev,
  (VTBL_ENTRY)&_ZN6S187C63v26Ev,
  (VTBL_ENTRY)&_ZN6S187C63v27Ev,
  (VTBL_ENTRY)&_ZN6S187C63v28Ev,
  (VTBL_ENTRY)&_ZN6S187C63v29Ev,
  (VTBL_ENTRY)&_ZN6S187C63v30Ev,
  (VTBL_ENTRY)&_ZN6S187C63v31Ev,
  (VTBL_ENTRY)&_ZN6S187C63v32Ev,
  (VTBL_ENTRY)&_ZN6S187C63v33Ev,
  (VTBL_ENTRY)&_ZN6S187C63v34Ev,
  (VTBL_ENTRY)&_ZN6S187C63v35Ev,
  (VTBL_ENTRY)&_ZN6S187C63v36Ev,
  (VTBL_ENTRY)&_ZN6S187C63v37Ev,
  (VTBL_ENTRY)&_ZN6S187C63v38Ev,
  (VTBL_ENTRY)&_ZN6S187C63v39Ev,
  (VTBL_ENTRY)&_ZN6S187C63v40Ev,
  (VTBL_ENTRY)&_ZN6S187C63v41Ev,
  (VTBL_ENTRY)&_ZN6S187C63v42Ev,
  (VTBL_ENTRY)&_ZN6S187C63v43Ev,
  (VTBL_ENTRY)&_ZN6S187C63v44Ev,
  (VTBL_ENTRY)&_ZN6S187C63v45Ev,
  (VTBL_ENTRY)&_ZN6S187C63v46Ev,
  (VTBL_ENTRY)&_ZN6S187C63v47Ev,
  (VTBL_ENTRY)&_ZN6S187C63v48Ev,
  (VTBL_ENTRY)&_ZN6S187C63v49Ev,
  (VTBL_ENTRY)&_ZN6S187C63v50Ev,
  (VTBL_ENTRY)&_ZN6S187C63v51Ev,
  (VTBL_ENTRY)&_ZN6S187C63v52Ev,
  (VTBL_ENTRY)&_ZN6S187C63v53Ev,
  (VTBL_ENTRY)&_ZN6S187C63v54Ev,
  (VTBL_ENTRY)&_ZN6S187C63v55Ev,
  (VTBL_ENTRY)&_ZN6S187C63v56Ev,
  (VTBL_ENTRY)&_ZN6S187C63v57Ev,
  (VTBL_ENTRY)&_ZN6S187C63v58Ev,
  (VTBL_ENTRY)&_ZN6S187C63v59Ev,
  (VTBL_ENTRY)&_ZN6S187C63v60Ev,
  (VTBL_ENTRY)&_ZN6S187C63v61Ev,
  (VTBL_ENTRY)&_ZN6S187C63v62Ev,
  (VTBL_ENTRY)&_ZN6S187C63v63Ev,
  (VTBL_ENTRY)&_ZN6S187C63v64Ev,
  (VTBL_ENTRY)&_ZN6S187C63v65Ev,
  (VTBL_ENTRY)&_ZN6S187C63v66Ev,
  (VTBL_ENTRY)&_ZN6S187C63v67Ev,
  (VTBL_ENTRY)&_ZN6S187C53v68Ev,
  (VTBL_ENTRY)&_ZN6S187C53v69Ev,
  (VTBL_ENTRY)&_ZN6S187C53v70Ev,
  (VTBL_ENTRY)&_ZN6S187C53v71Ev,
  (VTBL_ENTRY)&_ZN6S187C53v72Ev,
  (VTBL_ENTRY)&_ZN6S187C53v73Ev,
  (VTBL_ENTRY)&_ZN6S187C53v74Ev,
  (VTBL_ENTRY)&_ZN6S187C53v75Ev,
  (VTBL_ENTRY)&_ZN6S187C53v76Ev,
  (VTBL_ENTRY)&_ZN6S187C53v77Ev,
  (VTBL_ENTRY)&_ZN6S187C53v78Ev,
  (VTBL_ENTRY)&_ZN6S187C53v79Ev,
  (VTBL_ENTRY)&_ZN6S187C53v80Ev,
  (VTBL_ENTRY)&_ZN6S187C53v81Ev,
  (VTBL_ENTRY)&_ZN6S187C53v82Ev,
  (VTBL_ENTRY)&_ZN6S187C53v83Ev,
  (VTBL_ENTRY)&_ZN6S187C53v84Ev,
  (VTBL_ENTRY)&_ZN6S187C53v85Ev,
  (VTBL_ENTRY)&_ZN6S187C53v86Ev,
  (VTBL_ENTRY)&_ZN6S187C53v87Ev,
  (VTBL_ENTRY)&_ZN6S187C53v88Ev,
  (VTBL_ENTRY)&_ZN6S187C53v89Ev,
  (VTBL_ENTRY)&_ZN6S187C53v90Ev,
  (VTBL_ENTRY)&_ZN6S187C53v91Ev,
  (VTBL_ENTRY)&_ZN6S187C53v92Ev,
  (VTBL_ENTRY)&_ZN6S187C53v93Ev,
  (VTBL_ENTRY)&_ZN6S187C53v94Ev,
  (VTBL_ENTRY)&_ZN6S187C43v95Ev,
  (VTBL_ENTRY)&_ZN6S187C43v96Ev,
  (VTBL_ENTRY)&_ZN6S187C43v97Ev,
  (VTBL_ENTRY)&_ZN6S187C43v98Ev,
  (VTBL_ENTRY)&_ZN6S187C43v99Ev,
  (VTBL_ENTRY)&_ZN6S187C44v100Ev,
  (VTBL_ENTRY)&_ZN6S187C44v101Ev,
  (VTBL_ENTRY)&_ZN6S187C44v102Ev,
  (VTBL_ENTRY)&_ZN6S187C44v103Ev,
  (VTBL_ENTRY)&_ZN6S187C44v104Ev,
  (VTBL_ENTRY)&_ZN6S187C44v105Ev,
  (VTBL_ENTRY)&_ZN6S187C44v106Ev,
  (VTBL_ENTRY)&_ZN6S187C44v107Ev,
  (VTBL_ENTRY)&_ZN6S187C44v108Ev,
  (VTBL_ENTRY)&_ZN6S187C44v109Ev,
  (VTBL_ENTRY)&_ZN6S187C44v110Ev,
  (VTBL_ENTRY)&_ZN6S187C44v111Ev,
  (VTBL_ENTRY)&_ZN6S187C44v112Ev,
  (VTBL_ENTRY)&_ZN6S187C34v113Ev,
  (VTBL_ENTRY)&_ZN6S187C34v114Ev,
  (VTBL_ENTRY)&_ZN6S187C34v115Ev,
  (VTBL_ENTRY)&_ZN6S187C34v116Ev,
  (VTBL_ENTRY)&_ZN6S187C34v117Ev,
  (VTBL_ENTRY)&_ZN6S187C34v118Ev,
  (VTBL_ENTRY)&_ZN6S187C34v119Ev,
  (VTBL_ENTRY)&_ZN6S187C24v120Ev,
  (VTBL_ENTRY)&_ZN6S187C24v121Ev,
  (VTBL_ENTRY)&_ZN6S187C24v122Ev,
  (VTBL_ENTRY)&_ZN6S187C24v123Ev,
  (VTBL_ENTRY)&_ZN6S187C24v124Ev,
  (VTBL_ENTRY)&_ZN6S187C24v125Ev,
};
extern VTBL_ENTRY _ZTI6S187C2[];
extern  VTBL_ENTRY _ZTV6S187C2[];
Class_Descriptor cd_S187C2 = {  "S187C2", // class name
  bases_S187C2, 4,
  &(vtc_S187C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,240), // object size
  NSPAIRA(_ZTI6S187C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S187C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S187C1  : S187C2 {
  int s187c1f0[16];
  virtual  ~S187C1(); // _ZN6S187C1D1Ev
  virtual void  v1(); // _ZN6S187C12v1Ev
  virtual void  v2(); // _ZN6S187C12v2Ev
  virtual void  v3(); // _ZN6S187C12v3Ev
  S187C1(); // tgen
};
//SIG(1 S187C1) 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 v90 v91 v92 v93 v94 Fp FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC7 FC11{ BC12{ BC10}} FC13{ m FC14{ m Fi[4]} FC15{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 FC16{ BC17{ BC10}} Fi:1} vd v113 v114 v115 v116 v117 v118 v119 FC18{ BC19{ BC10}} Fi[2] Fi:1} vd v120 v121 v122 v123 v124 v125 Fi FC18 Fi} vd v1 v2 v3 Fi[16]}


 S187C1 ::~S187C1(){ note_dtor("S187C1", this);}
void  S187C1 ::v1(){vfunc_called(this, "_ZN6S187C12v1Ev");}
void  S187C1 ::v2(){vfunc_called(this, "_ZN6S187C12v2Ev");}
void  S187C1 ::v3(){vfunc_called(this, "_ZN6S187C12v3Ev");}
S187C1 ::S187C1(){ note_ctor("S187C1", this);} // tgen

static void Test_S187C1()
{
  extern Class_Descriptor cd_S187C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,77)];
    init_test(&cd_S187C1, buf);
    S187C1 *dp, &lv = *(dp=new (buf) S187C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,304), "sizeof(S187C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S187C1)");
    check_base_class_offset(lv, (S187C6*)(S187C5*)(S187C4*)(S187C3*)(S187C2*), 0, "S187C1");
    check_base_class_offset(lv, (S187C5*)(S187C4*)(S187C3*)(S187C2*), 0, "S187C1");
    check_base_class_offset(lv, (S187C4*)(S187C3*)(S187C2*), 0, "S187C1");
    check_base_class_offset(lv, (S187C3*)(S187C2*), 0, "S187C1");
    check_base_class_offset(lv, (S187C2*), 0, "S187C1");
    check_field_offset(lv, s187c1f0, ABISELECT(308,240), "S187C1.s187c1f0");
    test_class_info(&lv, &cd_S187C1);
    dp->~S187C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS187C1(Test_S187C1, "S187C1", ABISELECT(376,304));

#else // __cplusplus

extern void _ZN6S187C1C1Ev();
extern void _ZN6S187C1D1Ev();
Name_Map name_map_S187C1[] = {
  NSPAIR(_ZN6S187C1C1Ev),
  NSPAIR(_ZN6S187C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S187C6;
extern VTBL_ENTRY _ZTI6S187C6[];
extern  VTBL_ENTRY _ZTV6S187C6[];
extern Class_Descriptor cd_S187C5;
extern VTBL_ENTRY _ZTI6S187C5[];
extern  VTBL_ENTRY _ZTV6S187C5[];
extern Class_Descriptor cd_S187C4;
extern VTBL_ENTRY _ZTI6S187C4[];
extern  VTBL_ENTRY _ZTV6S187C4[];
extern Class_Descriptor cd_S187C3;
extern VTBL_ENTRY _ZTI6S187C3[];
extern  VTBL_ENTRY _ZTV6S187C3[];
extern Class_Descriptor cd_S187C2;
extern VTBL_ENTRY _ZTI6S187C2[];
extern  VTBL_ENTRY _ZTV6S187C2[];
static Base_Class bases_S187C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S187C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S187C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S187C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S187C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S187C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S187C1[];
extern void _ZN6S187C1D1Ev();
extern void _ZN6S187C1D0Ev();
extern void _ZN6S187C62v4Ev();
extern void _ZN6S187C62v5Ev();
extern void _ZN6S187C62v6Ev();
extern void _ZN6S187C62v7Ev();
extern void _ZN6S187C62v8Ev();
extern void _ZN6S187C62v9Ev();
extern void _ZN6S187C63v10Ev();
extern void _ZN6S187C63v11Ev();
extern void _ZN6S187C63v12Ev();
extern void _ZN6S187C63v13Ev();
extern void _ZN6S187C63v14Ev();
extern void _ZN6S187C63v15Ev();
extern void _ZN6S187C63v16Ev();
extern void _ZN6S187C63v17Ev();
extern void _ZN6S187C63v18Ev();
extern void _ZN6S187C63v19Ev();
extern void _ZN6S187C63v20Ev();
extern void _ZN6S187C63v21Ev();
extern void _ZN6S187C63v22Ev();
extern void _ZN6S187C63v23Ev();
extern void _ZN6S187C63v24Ev();
extern void _ZN6S187C63v25Ev();
extern void _ZN6S187C63v26Ev();
extern void _ZN6S187C63v27Ev();
extern void _ZN6S187C63v28Ev();
extern void _ZN6S187C63v29Ev();
extern void _ZN6S187C63v30Ev();
extern void _ZN6S187C63v31Ev();
extern void _ZN6S187C63v32Ev();
extern void _ZN6S187C63v33Ev();
extern void _ZN6S187C63v34Ev();
extern void _ZN6S187C63v35Ev();
extern void _ZN6S187C63v36Ev();
extern void _ZN6S187C63v37Ev();
extern void _ZN6S187C63v38Ev();
extern void _ZN6S187C63v39Ev();
extern void _ZN6S187C63v40Ev();
extern void _ZN6S187C63v41Ev();
extern void _ZN6S187C63v42Ev();
extern void _ZN6S187C63v43Ev();
extern void _ZN6S187C63v44Ev();
extern void _ZN6S187C63v45Ev();
extern void _ZN6S187C63v46Ev();
extern void _ZN6S187C63v47Ev();
extern void _ZN6S187C63v48Ev();
extern void _ZN6S187C63v49Ev();
extern void _ZN6S187C63v50Ev();
extern void _ZN6S187C63v51Ev();
extern void _ZN6S187C63v52Ev();
extern void _ZN6S187C63v53Ev();
extern void _ZN6S187C63v54Ev();
extern void _ZN6S187C63v55Ev();
extern void _ZN6S187C63v56Ev();
extern void _ZN6S187C63v57Ev();
extern void _ZN6S187C63v58Ev();
extern void _ZN6S187C63v59Ev();
extern void _ZN6S187C63v60Ev();
extern void _ZN6S187C63v61Ev();
extern void _ZN6S187C63v62Ev();
extern void _ZN6S187C63v63Ev();
extern void _ZN6S187C63v64Ev();
extern void _ZN6S187C63v65Ev();
extern void _ZN6S187C63v66Ev();
extern void _ZN6S187C63v67Ev();
extern void _ZN6S187C53v68Ev();
extern void _ZN6S187C53v69Ev();
extern void _ZN6S187C53v70Ev();
extern void _ZN6S187C53v71Ev();
extern void _ZN6S187C53v72Ev();
extern void _ZN6S187C53v73Ev();
extern void _ZN6S187C53v74Ev();
extern void _ZN6S187C53v75Ev();
extern void _ZN6S187C53v76Ev();
extern void _ZN6S187C53v77Ev();
extern void _ZN6S187C53v78Ev();
extern void _ZN6S187C53v79Ev();
extern void _ZN6S187C53v80Ev();
extern void _ZN6S187C53v81Ev();
extern void _ZN6S187C53v82Ev();
extern void _ZN6S187C53v83Ev();
extern void _ZN6S187C53v84Ev();
extern void _ZN6S187C53v85Ev();
extern void _ZN6S187C53v86Ev();
extern void _ZN6S187C53v87Ev();
extern void _ZN6S187C53v88Ev();
extern void _ZN6S187C53v89Ev();
extern void _ZN6S187C53v90Ev();
extern void _ZN6S187C53v91Ev();
extern void _ZN6S187C53v92Ev();
extern void _ZN6S187C53v93Ev();
extern void _ZN6S187C53v94Ev();
extern void _ZN6S187C43v95Ev();
extern void _ZN6S187C43v96Ev();
extern void _ZN6S187C43v97Ev();
extern void _ZN6S187C43v98Ev();
extern void _ZN6S187C43v99Ev();
extern void _ZN6S187C44v100Ev();
extern void _ZN6S187C44v101Ev();
extern void _ZN6S187C44v102Ev();
extern void _ZN6S187C44v103Ev();
extern void _ZN6S187C44v104Ev();
extern void _ZN6S187C44v105Ev();
extern void _ZN6S187C44v106Ev();
extern void _ZN6S187C44v107Ev();
extern void _ZN6S187C44v108Ev();
extern void _ZN6S187C44v109Ev();
extern void _ZN6S187C44v110Ev();
extern void _ZN6S187C44v111Ev();
extern void _ZN6S187C44v112Ev();
extern void _ZN6S187C34v113Ev();
extern void _ZN6S187C34v114Ev();
extern void _ZN6S187C34v115Ev();
extern void _ZN6S187C34v116Ev();
extern void _ZN6S187C34v117Ev();
extern void _ZN6S187C34v118Ev();
extern void _ZN6S187C34v119Ev();
extern void _ZN6S187C24v120Ev();
extern void _ZN6S187C24v121Ev();
extern void _ZN6S187C24v122Ev();
extern void _ZN6S187C24v123Ev();
extern void _ZN6S187C24v124Ev();
extern void _ZN6S187C24v125Ev();
extern void _ZN6S187C12v1Ev();
extern void _ZN6S187C12v2Ev();
extern void _ZN6S187C12v3Ev();
static  VTBL_ENTRY vtc_S187C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S187C1[0]),
  (VTBL_ENTRY)&_ZN6S187C1D1Ev,
  (VTBL_ENTRY)&_ZN6S187C1D0Ev,
  (VTBL_ENTRY)&_ZN6S187C62v4Ev,
  (VTBL_ENTRY)&_ZN6S187C62v5Ev,
  (VTBL_ENTRY)&_ZN6S187C62v6Ev,
  (VTBL_ENTRY)&_ZN6S187C62v7Ev,
  (VTBL_ENTRY)&_ZN6S187C62v8Ev,
  (VTBL_ENTRY)&_ZN6S187C62v9Ev,
  (VTBL_ENTRY)&_ZN6S187C63v10Ev,
  (VTBL_ENTRY)&_ZN6S187C63v11Ev,
  (VTBL_ENTRY)&_ZN6S187C63v12Ev,
  (VTBL_ENTRY)&_ZN6S187C63v13Ev,
  (VTBL_ENTRY)&_ZN6S187C63v14Ev,
  (VTBL_ENTRY)&_ZN6S187C63v15Ev,
  (VTBL_ENTRY)&_ZN6S187C63v16Ev,
  (VTBL_ENTRY)&_ZN6S187C63v17Ev,
  (VTBL_ENTRY)&_ZN6S187C63v18Ev,
  (VTBL_ENTRY)&_ZN6S187C63v19Ev,
  (VTBL_ENTRY)&_ZN6S187C63v20Ev,
  (VTBL_ENTRY)&_ZN6S187C63v21Ev,
  (VTBL_ENTRY)&_ZN6S187C63v22Ev,
  (VTBL_ENTRY)&_ZN6S187C63v23Ev,
  (VTBL_ENTRY)&_ZN6S187C63v24Ev,
  (VTBL_ENTRY)&_ZN6S187C63v25Ev,
  (VTBL_ENTRY)&_ZN6S187C63v26Ev,
  (VTBL_ENTRY)&_ZN6S187C63v27Ev,
  (VTBL_ENTRY)&_ZN6S187C63v28Ev,
  (VTBL_ENTRY)&_ZN6S187C63v29Ev,
  (VTBL_ENTRY)&_ZN6S187C63v30Ev,
  (VTBL_ENTRY)&_ZN6S187C63v31Ev,
  (VTBL_ENTRY)&_ZN6S187C63v32Ev,
  (VTBL_ENTRY)&_ZN6S187C63v33Ev,
  (VTBL_ENTRY)&_ZN6S187C63v34Ev,
  (VTBL_ENTRY)&_ZN6S187C63v35Ev,
  (VTBL_ENTRY)&_ZN6S187C63v36Ev,
  (VTBL_ENTRY)&_ZN6S187C63v37Ev,
  (VTBL_ENTRY)&_ZN6S187C63v38Ev,
  (VTBL_ENTRY)&_ZN6S187C63v39Ev,
  (VTBL_ENTRY)&_ZN6S187C63v40Ev,
  (VTBL_ENTRY)&_ZN6S187C63v41Ev,
  (VTBL_ENTRY)&_ZN6S187C63v42Ev,
  (VTBL_ENTRY)&_ZN6S187C63v43Ev,
  (VTBL_ENTRY)&_ZN6S187C63v44Ev,
  (VTBL_ENTRY)&_ZN6S187C63v45Ev,
  (VTBL_ENTRY)&_ZN6S187C63v46Ev,
  (VTBL_ENTRY)&_ZN6S187C63v47Ev,
  (VTBL_ENTRY)&_ZN6S187C63v48Ev,
  (VTBL_ENTRY)&_ZN6S187C63v49Ev,
  (VTBL_ENTRY)&_ZN6S187C63v50Ev,
  (VTBL_ENTRY)&_ZN6S187C63v51Ev,
  (VTBL_ENTRY)&_ZN6S187C63v52Ev,
  (VTBL_ENTRY)&_ZN6S187C63v53Ev,
  (VTBL_ENTRY)&_ZN6S187C63v54Ev,
  (VTBL_ENTRY)&_ZN6S187C63v55Ev,
  (VTBL_ENTRY)&_ZN6S187C63v56Ev,
  (VTBL_ENTRY)&_ZN6S187C63v57Ev,
  (VTBL_ENTRY)&_ZN6S187C63v58Ev,
  (VTBL_ENTRY)&_ZN6S187C63v59Ev,
  (VTBL_ENTRY)&_ZN6S187C63v60Ev,
  (VTBL_ENTRY)&_ZN6S187C63v61Ev,
  (VTBL_ENTRY)&_ZN6S187C63v62Ev,
  (VTBL_ENTRY)&_ZN6S187C63v63Ev,
  (VTBL_ENTRY)&_ZN6S187C63v64Ev,
  (VTBL_ENTRY)&_ZN6S187C63v65Ev,
  (VTBL_ENTRY)&_ZN6S187C63v66Ev,
  (VTBL_ENTRY)&_ZN6S187C63v67Ev,
  (VTBL_ENTRY)&_ZN6S187C53v68Ev,
  (VTBL_ENTRY)&_ZN6S187C53v69Ev,
  (VTBL_ENTRY)&_ZN6S187C53v70Ev,
  (VTBL_ENTRY)&_ZN6S187C53v71Ev,
  (VTBL_ENTRY)&_ZN6S187C53v72Ev,
  (VTBL_ENTRY)&_ZN6S187C53v73Ev,
  (VTBL_ENTRY)&_ZN6S187C53v74Ev,
  (VTBL_ENTRY)&_ZN6S187C53v75Ev,
  (VTBL_ENTRY)&_ZN6S187C53v76Ev,
  (VTBL_ENTRY)&_ZN6S187C53v77Ev,
  (VTBL_ENTRY)&_ZN6S187C53v78Ev,
  (VTBL_ENTRY)&_ZN6S187C53v79Ev,
  (VTBL_ENTRY)&_ZN6S187C53v80Ev,
  (VTBL_ENTRY)&_ZN6S187C53v81Ev,
  (VTBL_ENTRY)&_ZN6S187C53v82Ev,
  (VTBL_ENTRY)&_ZN6S187C53v83Ev,
  (VTBL_ENTRY)&_ZN6S187C53v84Ev,
  (VTBL_ENTRY)&_ZN6S187C53v85Ev,
  (VTBL_ENTRY)&_ZN6S187C53v86Ev,
  (VTBL_ENTRY)&_ZN6S187C53v87Ev,
  (VTBL_ENTRY)&_ZN6S187C53v88Ev,
  (VTBL_ENTRY)&_ZN6S187C53v89Ev,
  (VTBL_ENTRY)&_ZN6S187C53v90Ev,
  (VTBL_ENTRY)&_ZN6S187C53v91Ev,
  (VTBL_ENTRY)&_ZN6S187C53v92Ev,
  (VTBL_ENTRY)&_ZN6S187C53v93Ev,
  (VTBL_ENTRY)&_ZN6S187C53v94Ev,
  (VTBL_ENTRY)&_ZN6S187C43v95Ev,
  (VTBL_ENTRY)&_ZN6S187C43v96Ev,
  (VTBL_ENTRY)&_ZN6S187C43v97Ev,
  (VTBL_ENTRY)&_ZN6S187C43v98Ev,
  (VTBL_ENTRY)&_ZN6S187C43v99Ev,
  (VTBL_ENTRY)&_ZN6S187C44v100Ev,
  (VTBL_ENTRY)&_ZN6S187C44v101Ev,
  (VTBL_ENTRY)&_ZN6S187C44v102Ev,
  (VTBL_ENTRY)&_ZN6S187C44v103Ev,
  (VTBL_ENTRY)&_ZN6S187C44v104Ev,
  (VTBL_ENTRY)&_ZN6S187C44v105Ev,
  (VTBL_ENTRY)&_ZN6S187C44v106Ev,
  (VTBL_ENTRY)&_ZN6S187C44v107Ev,
  (VTBL_ENTRY)&_ZN6S187C44v108Ev,
  (VTBL_ENTRY)&_ZN6S187C44v109Ev,
  (VTBL_ENTRY)&_ZN6S187C44v110Ev,
  (VTBL_ENTRY)&_ZN6S187C44v111Ev,
  (VTBL_ENTRY)&_ZN6S187C44v112Ev,
  (VTBL_ENTRY)&_ZN6S187C34v113Ev,
  (VTBL_ENTRY)&_ZN6S187C34v114Ev,
  (VTBL_ENTRY)&_ZN6S187C34v115Ev,
  (VTBL_ENTRY)&_ZN6S187C34v116Ev,
  (VTBL_ENTRY)&_ZN6S187C34v117Ev,
  (VTBL_ENTRY)&_ZN6S187C34v118Ev,
  (VTBL_ENTRY)&_ZN6S187C34v119Ev,
  (VTBL_ENTRY)&_ZN6S187C24v120Ev,
  (VTBL_ENTRY)&_ZN6S187C24v121Ev,
  (VTBL_ENTRY)&_ZN6S187C24v122Ev,
  (VTBL_ENTRY)&_ZN6S187C24v123Ev,
  (VTBL_ENTRY)&_ZN6S187C24v124Ev,
  (VTBL_ENTRY)&_ZN6S187C24v125Ev,
  (VTBL_ENTRY)&_ZN6S187C12v1Ev,
  (VTBL_ENTRY)&_ZN6S187C12v2Ev,
  (VTBL_ENTRY)&_ZN6S187C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S187C1[];
extern  VTBL_ENTRY _ZTV6S187C1[];
Class_Descriptor cd_S187C1 = {  "S187C1", // class name
  bases_S187C1, 5,
  &(vtc_S187C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,304), // object size
  NSPAIRA(_ZTI6S187C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S187C1),129, //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  S1460C4  {
  int s1460c4f0;
  __tsi64 s1460c4f1;
  void *s1460c4f2[4];
  int s1460c4f3[2];
  void *s1460c4f4;
  ::S615C17_nt s1460c4f5;
  void *s1460c4f6[2];
  virtual  ~S1460C4(); // _ZN7S1460C4D1Ev
  virtual void  v5(); // _ZN7S1460C42v5Ev
  virtual void  v6(); // _ZN7S1460C42v6Ev
  virtual void  v7(); // _ZN7S1460C42v7Ev
  virtual void  v8(); // _ZN7S1460C42v8Ev
  virtual void  v9(); // _ZN7S1460C42v9Ev
  virtual void  v10(); // _ZN7S1460C43v10Ev
  virtual void  v11(); // _ZN7S1460C43v11Ev
  virtual void  v12(); // _ZN7S1460C43v12Ev
  virtual void  v13(); // _ZN7S1460C43v13Ev
  virtual void  v14(); // _ZN7S1460C43v14Ev
  virtual void  v15(); // _ZN7S1460C43v15Ev
  virtual void  v16(); // _ZN7S1460C43v16Ev
  virtual void  v17(); // _ZN7S1460C43v17Ev
  virtual void  v18(); // _ZN7S1460C43v18Ev
  virtual void  v19(); // _ZN7S1460C43v19Ev
  virtual void  v20(); // _ZN7S1460C43v20Ev
  virtual void  v21(); // _ZN7S1460C43v21Ev
  virtual void  v22(); // _ZN7S1460C43v22Ev
  virtual void  v23(); // _ZN7S1460C43v23Ev
  virtual void  v24(); // _ZN7S1460C43v24Ev
  virtual void  v25(); // _ZN7S1460C43v25Ev
  virtual void  v26(); // _ZN7S1460C43v26Ev
  virtual void  v27(); // _ZN7S1460C43v27Ev
  virtual void  v28(); // _ZN7S1460C43v28Ev
  virtual void  v29(); // _ZN7S1460C43v29Ev
  virtual void  v30(); // _ZN7S1460C43v30Ev
  virtual void  v31(); // _ZN7S1460C43v31Ev
  virtual void  v32(); // _ZN7S1460C43v32Ev
  virtual void  v33(); // _ZN7S1460C43v33Ev
  virtual void  v34(); // _ZN7S1460C43v34Ev
  virtual void  v35(); // _ZN7S1460C43v35Ev
  virtual void  v36(); // _ZN7S1460C43v36Ev
  virtual void  v37(); // _ZN7S1460C43v37Ev
  virtual void  v38(); // _ZN7S1460C43v38Ev
  virtual void  v39(); // _ZN7S1460C43v39Ev
  virtual void  v40(); // _ZN7S1460C43v40Ev
  virtual void  v41(); // _ZN7S1460C43v41Ev
  virtual void  v42(); // _ZN7S1460C43v42Ev
  virtual void  v43(); // _ZN7S1460C43v43Ev
  virtual void  v44(); // _ZN7S1460C43v44Ev
  virtual void  v45(); // _ZN7S1460C43v45Ev
  virtual void  v46(); // _ZN7S1460C43v46Ev
  virtual void  v47(); // _ZN7S1460C43v47Ev
  virtual void  v48(); // _ZN7S1460C43v48Ev
  virtual void  v49(); // _ZN7S1460C43v49Ev
  virtual void  v50(); // _ZN7S1460C43v50Ev
  virtual void  v51(); // _ZN7S1460C43v51Ev
  virtual void  v52(); // _ZN7S1460C43v52Ev
  virtual void  v53(); // _ZN7S1460C43v53Ev
  virtual void  v54(); // _ZN7S1460C43v54Ev
  virtual void  v55(); // _ZN7S1460C43v55Ev
  virtual void  v56(); // _ZN7S1460C43v56Ev
  virtual void  v57(); // _ZN7S1460C43v57Ev
  virtual void  v58(); // _ZN7S1460C43v58Ev
  virtual void  v59(); // _ZN7S1460C43v59Ev
  virtual void  v60(); // _ZN7S1460C43v60Ev
  virtual void  v61(); // _ZN7S1460C43v61Ev
  virtual void  v62(); // _ZN7S1460C43v62Ev
  virtual void  v63(); // _ZN7S1460C43v63Ev
  virtual void  v64(); // _ZN7S1460C43v64Ev
  virtual void  v65(); // _ZN7S1460C43v65Ev
  virtual void  v66(); // _ZN7S1460C43v66Ev
  virtual void  v67(); // _ZN7S1460C43v67Ev
  virtual void  v68(); // _ZN7S1460C43v68Ev
  S1460C4(); // tgen
};
//SIG(-1 S1460C4) 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]}


 S1460C4 ::~S1460C4(){ note_dtor("S1460C4", this);}
void  S1460C4 ::v5(){vfunc_called(this, "_ZN7S1460C42v5Ev");}
void  S1460C4 ::v6(){vfunc_called(this, "_ZN7S1460C42v6Ev");}
void  S1460C4 ::v7(){vfunc_called(this, "_ZN7S1460C42v7Ev");}
void  S1460C4 ::v8(){vfunc_called(this, "_ZN7S1460C42v8Ev");}
void  S1460C4 ::v9(){vfunc_called(this, "_ZN7S1460C42v9Ev");}
void  S1460C4 ::v10(){vfunc_called(this, "_ZN7S1460C43v10Ev");}
void  S1460C4 ::v11(){vfunc_called(this, "_ZN7S1460C43v11Ev");}
void  S1460C4 ::v12(){vfunc_called(this, "_ZN7S1460C43v12Ev");}
void  S1460C4 ::v13(){vfunc_called(this, "_ZN7S1460C43v13Ev");}
void  S1460C4 ::v14(){vfunc_called(this, "_ZN7S1460C43v14Ev");}
void  S1460C4 ::v15(){vfunc_called(this, "_ZN7S1460C43v15Ev");}
void  S1460C4 ::v16(){vfunc_called(this, "_ZN7S1460C43v16Ev");}
void  S1460C4 ::v17(){vfunc_called(this, "_ZN7S1460C43v17Ev");}
void  S1460C4 ::v18(){vfunc_called(this, "_ZN7S1460C43v18Ev");}
void  S1460C4 ::v19(){vfunc_called(this, "_ZN7S1460C43v19Ev");}
void  S1460C4 ::v20(){vfunc_called(this, "_ZN7S1460C43v20Ev");}
void  S1460C4 ::v21(){vfunc_called(this, "_ZN7S1460C43v21Ev");}
void  S1460C4 ::v22(){vfunc_called(this, "_ZN7S1460C43v22Ev");}
void  S1460C4 ::v23(){vfunc_called(this, "_ZN7S1460C43v23Ev");}
void  S1460C4 ::v24(){vfunc_called(this, "_ZN7S1460C43v24Ev");}
void  S1460C4 ::v25(){vfunc_called(this, "_ZN7S1460C43v25Ev");}
void  S1460C4 ::v26(){vfunc_called(this, "_ZN7S1460C43v26Ev");}
void  S1460C4 ::v27(){vfunc_called(this, "_ZN7S1460C43v27Ev");}
void  S1460C4 ::v28(){vfunc_called(this, "_ZN7S1460C43v28Ev");}
void  S1460C4 ::v29(){vfunc_called(this, "_ZN7S1460C43v29Ev");}
void  S1460C4 ::v30(){vfunc_called(this, "_ZN7S1460C43v30Ev");}
void  S1460C4 ::v31(){vfunc_called(this, "_ZN7S1460C43v31Ev");}
void  S1460C4 ::v32(){vfunc_called(this, "_ZN7S1460C43v32Ev");}
void  S1460C4 ::v33(){vfunc_called(this, "_ZN7S1460C43v33Ev");}
void  S1460C4 ::v34(){vfunc_called(this, "_ZN7S1460C43v34Ev");}
void  S1460C4 ::v35(){vfunc_called(this, "_ZN7S1460C43v35Ev");}
void  S1460C4 ::v36(){vfunc_called(this, "_ZN7S1460C43v36Ev");}
void  S1460C4 ::v37(){vfunc_called(this, "_ZN7S1460C43v37Ev");}
void  S1460C4 ::v38(){vfunc_called(this, "_ZN7S1460C43v38Ev");}
void  S1460C4 ::v39(){vfunc_called(this, "_ZN7S1460C43v39Ev");}
void  S1460C4 ::v40(){vfunc_called(this, "_ZN7S1460C43v40Ev");}
void  S1460C4 ::v41(){vfunc_called(this, "_ZN7S1460C43v41Ev");}
void  S1460C4 ::v42(){vfunc_called(this, "_ZN7S1460C43v42Ev");}
void  S1460C4 ::v43(){vfunc_called(this, "_ZN7S1460C43v43Ev");}
void  S1460C4 ::v44(){vfunc_called(this, "_ZN7S1460C43v44Ev");}
void  S1460C4 ::v45(){vfunc_called(this, "_ZN7S1460C43v45Ev");}
void  S1460C4 ::v46(){vfunc_called(this, "_ZN7S1460C43v46Ev");}
void  S1460C4 ::v47(){vfunc_called(this, "_ZN7S1460C43v47Ev");}
void  S1460C4 ::v48(){vfunc_called(this, "_ZN7S1460C43v48Ev");}
void  S1460C4 ::v49(){vfunc_called(this, "_ZN7S1460C43v49Ev");}
void  S1460C4 ::v50(){vfunc_called(this, "_ZN7S1460C43v50Ev");}
void  S1460C4 ::v51(){vfunc_called(this, "_ZN7S1460C43v51Ev");}
void  S1460C4 ::v52(){vfunc_called(this, "_ZN7S1460C43v52Ev");}
void  S1460C4 ::v53(){vfunc_called(this, "_ZN7S1460C43v53Ev");}
void  S1460C4 ::v54(){vfunc_called(this, "_ZN7S1460C43v54Ev");}
void  S1460C4 ::v55(){vfunc_called(this, "_ZN7S1460C43v55Ev");}
void  S1460C4 ::v56(){vfunc_called(this, "_ZN7S1460C43v56Ev");}
void  S1460C4 ::v57(){vfunc_called(this, "_ZN7S1460C43v57Ev");}
void  S1460C4 ::v58(){vfunc_called(this, "_ZN7S1460C43v58Ev");}
void  S1460C4 ::v59(){vfunc_called(this, "_ZN7S1460C43v59Ev");}
void  S1460C4 ::v60(){vfunc_called(this, "_ZN7S1460C43v60Ev");}
void  S1460C4 ::v61(){vfunc_called(this, "_ZN7S1460C43v61Ev");}
void  S1460C4 ::v62(){vfunc_called(this, "_ZN7S1460C43v62Ev");}
void  S1460C4 ::v63(){vfunc_called(this, "_ZN7S1460C43v63Ev");}
void  S1460C4 ::v64(){vfunc_called(this, "_ZN7S1460C43v64Ev");}
void  S1460C4 ::v65(){vfunc_called(this, "_ZN7S1460C43v65Ev");}
void  S1460C4 ::v66(){vfunc_called(this, "_ZN7S1460C43v66Ev");}
void  S1460C4 ::v67(){vfunc_called(this, "_ZN7S1460C43v67Ev");}
void  S1460C4 ::v68(){vfunc_called(this, "_ZN7S1460C43v68Ev");}
S1460C4 ::S1460C4(){ note_ctor("S1460C4", this);} // tgen

static void Test_S1460C4()
{
  extern Class_Descriptor cd_S1460C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1460C4, buf);
    S1460C4 *dp, &lv = *(dp=new (buf) S1460C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1460C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1460C4)");
    check_field_offset(lv, s1460c4f0, ABISELECT(8,4), "S1460C4.s1460c4f0");
    check_field_offset(lv, s1460c4f1, ABISELECT(16,8), "S1460C4.s1460c4f1");
    check_field_offset(lv, s1460c4f2, ABISELECT(24,16), "S1460C4.s1460c4f2");
    check_field_offset(lv, s1460c4f3, ABISELECT(56,32), "S1460C4.s1460c4f3");
    check_field_offset(lv, s1460c4f4, ABISELECT(64,40), "S1460C4.s1460c4f4");
    check_field_offset(lv, s1460c4f5, ABISELECT(72,44), "S1460C4.s1460c4f5");
    check_field_offset(lv, s1460c4f6, ABISELECT(80,52), "S1460C4.s1460c4f6");
    test_class_info(&lv, &cd_S1460C4);
    dp->~S1460C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1460C4(Test_S1460C4, "S1460C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1460C4C1Ev();
extern void _ZN7S1460C4D1Ev();
Name_Map name_map_S1460C4[] = {
  NSPAIR(_ZN7S1460C4C1Ev),
  NSPAIR(_ZN7S1460C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1460C4[];
extern void _ZN7S1460C4D1Ev();
extern void _ZN7S1460C4D0Ev();
extern void _ZN7S1460C42v5Ev();
extern void _ZN7S1460C42v6Ev();
extern void _ZN7S1460C42v7Ev();
extern void _ZN7S1460C42v8Ev();
extern void _ZN7S1460C42v9Ev();
extern void _ZN7S1460C43v10Ev();
extern void _ZN7S1460C43v11Ev();
extern void _ZN7S1460C43v12Ev();
extern void _ZN7S1460C43v13Ev();
extern void _ZN7S1460C43v14Ev();
extern void _ZN7S1460C43v15Ev();
extern void _ZN7S1460C43v16Ev();
extern void _ZN7S1460C43v17Ev();
extern void _ZN7S1460C43v18Ev();
extern void _ZN7S1460C43v19Ev();
extern void _ZN7S1460C43v20Ev();
extern void _ZN7S1460C43v21Ev();
extern void _ZN7S1460C43v22Ev();
extern void _ZN7S1460C43v23Ev();
extern void _ZN7S1460C43v24Ev();
extern void _ZN7S1460C43v25Ev();
extern void _ZN7S1460C43v26Ev();
extern void _ZN7S1460C43v27Ev();
extern void _ZN7S1460C43v28Ev();
extern void _ZN7S1460C43v29Ev();
extern void _ZN7S1460C43v30Ev();
extern void _ZN7S1460C43v31Ev();
extern void _ZN7S1460C43v32Ev();
extern void _ZN7S1460C43v33Ev();
extern void _ZN7S1460C43v34Ev();
extern void _ZN7S1460C43v35Ev();
extern void _ZN7S1460C43v36Ev();
extern void _ZN7S1460C43v37Ev();
extern void _ZN7S1460C43v38Ev();
extern void _ZN7S1460C43v39Ev();
extern void _ZN7S1460C43v40Ev();
extern void _ZN7S1460C43v41Ev();
extern void _ZN7S1460C43v42Ev();
extern void _ZN7S1460C43v43Ev();
extern void _ZN7S1460C43v44Ev();
extern void _ZN7S1460C43v45Ev();
extern void _ZN7S1460C43v46Ev();
extern void _ZN7S1460C43v47Ev();
extern void _ZN7S1460C43v48Ev();
extern void _ZN7S1460C43v49Ev();
extern void _ZN7S1460C43v50Ev();
extern void _ZN7S1460C43v51Ev();
extern void _ZN7S1460C43v52Ev();
extern void _ZN7S1460C43v53Ev();
extern void _ZN7S1460C43v54Ev();
extern void _ZN7S1460C43v55Ev();
extern void _ZN7S1460C43v56Ev();
extern void _ZN7S1460C43v57Ev();
extern void _ZN7S1460C43v58Ev();
extern void _ZN7S1460C43v59Ev();
extern void _ZN7S1460C43v60Ev();
extern void _ZN7S1460C43v61Ev();
extern void _ZN7S1460C43v62Ev();
extern void _ZN7S1460C43v63Ev();
extern void _ZN7S1460C43v64Ev();
extern void _ZN7S1460C43v65Ev();
extern void _ZN7S1460C43v66Ev();
extern void _ZN7S1460C43v67Ev();
extern void _ZN7S1460C43v68Ev();
static  VTBL_ENTRY vtc_S1460C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1460C4[0]),
  (VTBL_ENTRY)&_ZN7S1460C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1460C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v68Ev,
};
extern VTBL_ENTRY _ZTI7S1460C4[];
extern  VTBL_ENTRY _ZTV7S1460C4[];
Class_Descriptor cd_S1460C4 = {  "S1460C4", // class name
  0,0,//no base classes
  &(vtc_S1460C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1460C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1460C4),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  S1460C3  : S1460C4 {
  void *s1460c3f0;
  ::S1542C26 s1460c3f1;
  ::S615C17_nt s1460c3f2;
  ::S1542C22_nt s1460c3f3;
  ::S615C12_nt s1460c3f4;
  int s1460c3f5;
  unsigned int s1460c3f6:1;
  unsigned int s1460c3f7:1;
  unsigned int s1460c3f8:1;
  unsigned int s1460c3f9:1;
  int s1460c3f10[11];
  virtual  ~S1460C3(); // _ZN7S1460C3D1Ev
  virtual void  v69(); // _ZN7S1460C33v69Ev
  virtual void  v70(); // _ZN7S1460C33v70Ev
  virtual void  v71(); // _ZN7S1460C33v71Ev
  virtual void  v72(); // _ZN7S1460C33v72Ev
  virtual void  v73(); // _ZN7S1460C33v73Ev
  virtual void  v74(); // _ZN7S1460C33v74Ev
  virtual void  v75(); // _ZN7S1460C33v75Ev
  virtual void  v76(); // _ZN7S1460C33v76Ev
  virtual void  v77(); // _ZN7S1460C33v77Ev
  virtual void  v78(); // _ZN7S1460C33v78Ev
  virtual void  v79(); // _ZN7S1460C33v79Ev
  virtual void  v80(); // _ZN7S1460C33v80Ev
  virtual void  v81(); // _ZN7S1460C33v81Ev
  virtual void  v82(); // _ZN7S1460C33v82Ev
  virtual void  v83(); // _ZN7S1460C33v83Ev
  virtual void  v84(); // _ZN7S1460C33v84Ev
  virtual void  v85(); // _ZN7S1460C33v85Ev
  virtual void  v86(); // _ZN7S1460C33v86Ev
  virtual void  v87(); // _ZN7S1460C33v87Ev
  virtual void  v88(); // _ZN7S1460C33v88Ev
  virtual void  v89(); // _ZN7S1460C33v89Ev
  virtual void  v90(); // _ZN7S1460C33v90Ev
  virtual void  v91(); // _ZN7S1460C33v91Ev
  virtual void  v92(); // _ZN7S1460C33v92Ev
  virtual void  v93(); // _ZN7S1460C33v93Ev
  virtual void  v94(); // _ZN7S1460C33v94Ev
  virtual void  v95(); // _ZN7S1460C33v95Ev
  S1460C3(); // tgen
};
//SIG(-1 S1460C3) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S1460C3 ::~S1460C3(){ note_dtor("S1460C3", this);}
void  S1460C3 ::v69(){vfunc_called(this, "_ZN7S1460C33v69Ev");}
void  S1460C3 ::v70(){vfunc_called(this, "_ZN7S1460C33v70Ev");}
void  S1460C3 ::v71(){vfunc_called(this, "_ZN7S1460C33v71Ev");}
void  S1460C3 ::v72(){vfunc_called(this, "_ZN7S1460C33v72Ev");}
void  S1460C3 ::v73(){vfunc_called(this, "_ZN7S1460C33v73Ev");}
void  S1460C3 ::v74(){vfunc_called(this, "_ZN7S1460C33v74Ev");}
void  S1460C3 ::v75(){vfunc_called(this, "_ZN7S1460C33v75Ev");}
void  S1460C3 ::v76(){vfunc_called(this, "_ZN7S1460C33v76Ev");}
void  S1460C3 ::v77(){vfunc_called(this, "_ZN7S1460C33v77Ev");}
void  S1460C3 ::v78(){vfunc_called(this, "_ZN7S1460C33v78Ev");}
void  S1460C3 ::v79(){vfunc_called(this, "_ZN7S1460C33v79Ev");}
void  S1460C3 ::v80(){vfunc_called(this, "_ZN7S1460C33v80Ev");}
void  S1460C3 ::v81(){vfunc_called(this, "_ZN7S1460C33v81Ev");}
void  S1460C3 ::v82(){vfunc_called(this, "_ZN7S1460C33v82Ev");}
void  S1460C3 ::v83(){vfunc_called(this, "_ZN7S1460C33v83Ev");}
void  S1460C3 ::v84(){vfunc_called(this, "_ZN7S1460C33v84Ev");}
void  S1460C3 ::v85(){vfunc_called(this, "_ZN7S1460C33v85Ev");}
void  S1460C3 ::v86(){vfunc_called(this, "_ZN7S1460C33v86Ev");}
void  S1460C3 ::v87(){vfunc_called(this, "_ZN7S1460C33v87Ev");}
void  S1460C3 ::v88(){vfunc_called(this, "_ZN7S1460C33v88Ev");}
void  S1460C3 ::v89(){vfunc_called(this, "_ZN7S1460C33v89Ev");}
void  S1460C3 ::v90(){vfunc_called(this, "_ZN7S1460C33v90Ev");}
void  S1460C3 ::v91(){vfunc_called(this, "_ZN7S1460C33v91Ev");}
void  S1460C3 ::v92(){vfunc_called(this, "_ZN7S1460C33v92Ev");}
void  S1460C3 ::v93(){vfunc_called(this, "_ZN7S1460C33v93Ev");}
void  S1460C3 ::v94(){vfunc_called(this, "_ZN7S1460C33v94Ev");}
void  S1460C3 ::v95(){vfunc_called(this, "_ZN7S1460C33v95Ev");}
S1460C3 ::S1460C3(){ note_ctor("S1460C3", this);} // tgen

static void Test_S1460C3()
{
  extern Class_Descriptor cd_S1460C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S1460C3, buf);
    S1460C3 *dp, &lv = *(dp=new (buf) S1460C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S1460C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1460C3)");
    check_base_class_offset(lv, (S1460C4*), 0, "S1460C3");
    check_field_offset(lv, s1460c3f0, ABISELECT(96,60), "S1460C3.s1460c3f0");
    check_field_offset(lv, s1460c3f1, ABISELECT(104,64), "S1460C3.s1460c3f1");
    check_field_offset(lv, s1460c3f2, ABISELECT(120,76), "S1460C3.s1460c3f2");
    check_field_offset(lv, s1460c3f3, ABISELECT(128,84), "S1460C3.s1460c3f3");
    check_field_offset(lv, s1460c3f4, ABISELECT(144,96), "S1460C3.s1460c3f4");
    check_field_offset(lv, s1460c3f5, ABISELECT(176,128), "S1460C3.s1460c3f5");
    set_bf_and_test(lv, s1460c3f6, ABISELECT(180,132), 0, 1, 1, "S1460C3");
    set_bf_and_test(lv, s1460c3f7, ABISELECT(180,132), 1, 1, 1, "S1460C3");
    set_bf_and_test(lv, s1460c3f8, ABISELECT(180,132), 2, 1, 1, "S1460C3");
    set_bf_and_test(lv, s1460c3f9, ABISELECT(180,132), 3, 1, 1, "S1460C3");
    check_field_offset(lv, s1460c3f10, ABISELECT(184,136), "S1460C3.s1460c3f10");
    test_class_info(&lv, &cd_S1460C3);
    dp->~S1460C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1460C3(Test_S1460C3, "S1460C3", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN7S1460C3C1Ev();
extern void _ZN7S1460C3D1Ev();
Name_Map name_map_S1460C3[] = {
  NSPAIR(_ZN7S1460C3C1Ev),
  NSPAIR(_ZN7S1460C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1460C4;
extern VTBL_ENTRY _ZTI7S1460C4[];
extern  VTBL_ENTRY _ZTV7S1460C4[];
static Base_Class bases_S1460C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1460C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1460C3[];
extern void _ZN7S1460C3D1Ev();
extern void _ZN7S1460C3D0Ev();
extern void _ZN7S1460C42v5Ev();
extern void _ZN7S1460C42v6Ev();
extern void _ZN7S1460C42v7Ev();
extern void _ZN7S1460C42v8Ev();
extern void _ZN7S1460C42v9Ev();
extern void _ZN7S1460C43v10Ev();
extern void _ZN7S1460C43v11Ev();
extern void _ZN7S1460C43v12Ev();
extern void _ZN7S1460C43v13Ev();
extern void _ZN7S1460C43v14Ev();
extern void _ZN7S1460C43v15Ev();
extern void _ZN7S1460C43v16Ev();
extern void _ZN7S1460C43v17Ev();
extern void _ZN7S1460C43v18Ev();
extern void _ZN7S1460C43v19Ev();
extern void _ZN7S1460C43v20Ev();
extern void _ZN7S1460C43v21Ev();
extern void _ZN7S1460C43v22Ev();
extern void _ZN7S1460C43v23Ev();
extern void _ZN7S1460C43v24Ev();
extern void _ZN7S1460C43v25Ev();
extern void _ZN7S1460C43v26Ev();
extern void _ZN7S1460C43v27Ev();
extern void _ZN7S1460C43v28Ev();
extern void _ZN7S1460C43v29Ev();
extern void _ZN7S1460C43v30Ev();
extern void _ZN7S1460C43v31Ev();
extern void _ZN7S1460C43v32Ev();
extern void _ZN7S1460C43v33Ev();
extern void _ZN7S1460C43v34Ev();
extern void _ZN7S1460C43v35Ev();
extern void _ZN7S1460C43v36Ev();
extern void _ZN7S1460C43v37Ev();
extern void _ZN7S1460C43v38Ev();
extern void _ZN7S1460C43v39Ev();
extern void _ZN7S1460C43v40Ev();
extern void _ZN7S1460C43v41Ev();
extern void _ZN7S1460C43v42Ev();
extern void _ZN7S1460C43v43Ev();
extern void _ZN7S1460C43v44Ev();
extern void _ZN7S1460C43v45Ev();
extern void _ZN7S1460C43v46Ev();
extern void _ZN7S1460C43v47Ev();
extern void _ZN7S1460C43v48Ev();
extern void _ZN7S1460C43v49Ev();
extern void _ZN7S1460C43v50Ev();
extern void _ZN7S1460C43v51Ev();
extern void _ZN7S1460C43v52Ev();
extern void _ZN7S1460C43v53Ev();
extern void _ZN7S1460C43v54Ev();
extern void _ZN7S1460C43v55Ev();
extern void _ZN7S1460C43v56Ev();
extern void _ZN7S1460C43v57Ev();
extern void _ZN7S1460C43v58Ev();
extern void _ZN7S1460C43v59Ev();
extern void _ZN7S1460C43v60Ev();
extern void _ZN7S1460C43v61Ev();
extern void _ZN7S1460C43v62Ev();
extern void _ZN7S1460C43v63Ev();
extern void _ZN7S1460C43v64Ev();
extern void _ZN7S1460C43v65Ev();
extern void _ZN7S1460C43v66Ev();
extern void _ZN7S1460C43v67Ev();
extern void _ZN7S1460C43v68Ev();
extern void _ZN7S1460C33v69Ev();
extern void _ZN7S1460C33v70Ev();
extern void _ZN7S1460C33v71Ev();
extern void _ZN7S1460C33v72Ev();
extern void _ZN7S1460C33v73Ev();
extern void _ZN7S1460C33v74Ev();
extern void _ZN7S1460C33v75Ev();
extern void _ZN7S1460C33v76Ev();
extern void _ZN7S1460C33v77Ev();
extern void _ZN7S1460C33v78Ev();
extern void _ZN7S1460C33v79Ev();
extern void _ZN7S1460C33v80Ev();
extern void _ZN7S1460C33v81Ev();
extern void _ZN7S1460C33v82Ev();
extern void _ZN7S1460C33v83Ev();
extern void _ZN7S1460C33v84Ev();
extern void _ZN7S1460C33v85Ev();
extern void _ZN7S1460C33v86Ev();
extern void _ZN7S1460C33v87Ev();
extern void _ZN7S1460C33v88Ev();
extern void _ZN7S1460C33v89Ev();
extern void _ZN7S1460C33v90Ev();
extern void _ZN7S1460C33v91Ev();
extern void _ZN7S1460C33v92Ev();
extern void _ZN7S1460C33v93Ev();
extern void _ZN7S1460C33v94Ev();
extern void _ZN7S1460C33v95Ev();
static  VTBL_ENTRY vtc_S1460C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1460C3[0]),
  (VTBL_ENTRY)&_ZN7S1460C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1460C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v95Ev,
};
extern VTBL_ENTRY _ZTI7S1460C3[];
extern  VTBL_ENTRY _ZTV7S1460C3[];
Class_Descriptor cd_S1460C3 = {  "S1460C3", // class name
  bases_S1460C3, 1,
  &(vtc_S1460C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI7S1460C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1460C3),95, //virtual function table var
  2, // 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  S1460C2  : S1460C3 {
  ::S615C17_nt s1460c2f0;
  int s1460c2f1;
  unsigned int s1460c2f2:1;
  unsigned int s1460c2f3:1;
  unsigned int s1460c2f4:1;
  unsigned int s1460c2f5:1;
  unsigned int s1460c2f6:1;
  unsigned int s1460c2f7:1;
  unsigned int s1460c2f8:1;
  unsigned int s1460c2f9:1;
  unsigned int s1460c2f10:1;
  unsigned int s1460c2f11:1;
  unsigned int s1460c2f12:1;
  unsigned int s1460c2f13:1;
  unsigned int s1460c2f14:1;
  int s1460c2f15[2];
  void *s1460c2f16;
  int s1460c2f17[2];
  ::S615C17_nt s1460c2f18;
  int s1460c2f19;
  void *s1460c2f20[2];
  char s1460c2f21[6];
  virtual  ~S1460C2(); // _ZN7S1460C2D1Ev
  virtual void  v96(); // _ZN7S1460C23v96Ev
  virtual void  v97(); // _ZN7S1460C23v97Ev
  virtual void  v98(); // _ZN7S1460C23v98Ev
  virtual void  v99(); // _ZN7S1460C23v99Ev
  virtual void  v100(); // _ZN7S1460C24v100Ev
  virtual void  v101(); // _ZN7S1460C24v101Ev
  virtual void  v102(); // _ZN7S1460C24v102Ev
  virtual void  v103(); // _ZN7S1460C24v103Ev
  virtual void  v104(); // _ZN7S1460C24v104Ev
  virtual void  v105(); // _ZN7S1460C24v105Ev
  virtual void  v106(); // _ZN7S1460C24v106Ev
  virtual void  v107(); // _ZN7S1460C24v107Ev
  virtual void  v108(); // _ZN7S1460C24v108Ev
  virtual void  v109(); // _ZN7S1460C24v109Ev
  virtual void  v110(); // _ZN7S1460C24v110Ev
  virtual void  v111(); // _ZN7S1460C24v111Ev
  virtual void  v112(); // _ZN7S1460C24v112Ev
  virtual void  v113(); // _ZN7S1460C24v113Ev
  virtual void  v114(); // _ZN7S1460C24v114Ev
  virtual void  v115(); // _ZN7S1460C24v115Ev
  virtual void  v116(); // _ZN7S1460C24v116Ev
  virtual void  v117(); // _ZN7S1460C24v117Ev
  virtual void  v118(); // _ZN7S1460C24v118Ev
  virtual void  v119(); // _ZN7S1460C24v119Ev
  virtual void  v120(); // _ZN7S1460C24v120Ev
  S1460C2(); // tgen
};
//SIG(-1 S1460C2) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} 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 FC4 Fi 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[2] Fp Fi[2] FC4 Fi Fp[2] Fc[6]}


 S1460C2 ::~S1460C2(){ note_dtor("S1460C2", this);}
void  S1460C2 ::v96(){vfunc_called(this, "_ZN7S1460C23v96Ev");}
void  S1460C2 ::v97(){vfunc_called(this, "_ZN7S1460C23v97Ev");}
void  S1460C2 ::v98(){vfunc_called(this, "_ZN7S1460C23v98Ev");}
void  S1460C2 ::v99(){vfunc_called(this, "_ZN7S1460C23v99Ev");}
void  S1460C2 ::v100(){vfunc_called(this, "_ZN7S1460C24v100Ev");}
void  S1460C2 ::v101(){vfunc_called(this, "_ZN7S1460C24v101Ev");}
void  S1460C2 ::v102(){vfunc_called(this, "_ZN7S1460C24v102Ev");}
void  S1460C2 ::v103(){vfunc_called(this, "_ZN7S1460C24v103Ev");}
void  S1460C2 ::v104(){vfunc_called(this, "_ZN7S1460C24v104Ev");}
void  S1460C2 ::v105(){vfunc_called(this, "_ZN7S1460C24v105Ev");}
void  S1460C2 ::v106(){vfunc_called(this, "_ZN7S1460C24v106Ev");}
void  S1460C2 ::v107(){vfunc_called(this, "_ZN7S1460C24v107Ev");}
void  S1460C2 ::v108(){vfunc_called(this, "_ZN7S1460C24v108Ev");}
void  S1460C2 ::v109(){vfunc_called(this, "_ZN7S1460C24v109Ev");}
void  S1460C2 ::v110(){vfunc_called(this, "_ZN7S1460C24v110Ev");}
void  S1460C2 ::v111(){vfunc_called(this, "_ZN7S1460C24v111Ev");}
void  S1460C2 ::v112(){vfunc_called(this, "_ZN7S1460C24v112Ev");}
void  S1460C2 ::v113(){vfunc_called(this, "_ZN7S1460C24v113Ev");}
void  S1460C2 ::v114(){vfunc_called(this, "_ZN7S1460C24v114Ev");}
void  S1460C2 ::v115(){vfunc_called(this, "_ZN7S1460C24v115Ev");}
void  S1460C2 ::v116(){vfunc_called(this, "_ZN7S1460C24v116Ev");}
void  S1460C2 ::v117(){vfunc_called(this, "_ZN7S1460C24v117Ev");}
void  S1460C2 ::v118(){vfunc_called(this, "_ZN7S1460C24v118Ev");}
void  S1460C2 ::v119(){vfunc_called(this, "_ZN7S1460C24v119Ev");}
void  S1460C2 ::v120(){vfunc_called(this, "_ZN7S1460C24v120Ev");}
S1460C2 ::S1460C2(){ note_ctor("S1460C2", this);} // tgen

static void Test_S1460C2()
{
  extern Class_Descriptor cd_S1460C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,62)];
    init_test(&cd_S1460C2, buf);
    S1460C2 *dp, &lv = *(dp=new (buf) S1460C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,244), "sizeof(S1460C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1460C2)");
    check_base_class_offset(lv, (S1460C4*)(S1460C3*), 0, "S1460C2");
    check_base_class_offset(lv, (S1460C3*), 0, "S1460C2");
    check_field_offset(lv, s1460c2f0, ABISELECT(228,180), "S1460C2.s1460c2f0");
    check_field_offset(lv, s1460c2f1, ABISELECT(236,188), "S1460C2.s1460c2f1");
    set_bf_and_test(lv, s1460c2f2, ABISELECT(240,192), 0, 1, 1, "S1460C2");
    set_bf_and_test(lv, s1460c2f3, ABISELECT(240,192), 1, 1, 1, "S1460C2");
    set_bf_and_test(lv, s1460c2f4, ABISELECT(240,192), 2, 1, 1, "S1460C2");
    set_bf_and_test(lv, s1460c2f5, ABISELECT(240,192), 3, 1, 1, "S1460C2");
    set_bf_and_test(lv, s1460c2f6, ABISELECT(240,192), 4, 1, 1, "S1460C2");
    set_bf_and_test(lv, s1460c2f7, ABISELECT(240,192), 5, 1, 1, "S1460C2");
    set_bf_and_test(lv, s1460c2f8, ABISELECT(240,192), 6, 1, 1, "S1460C2");
    set_bf_and_test(lv, s1460c2f9, ABISELECT(240,192), 7, 1, 1, "S1460C2");
    set_bf_and_test(lv, s1460c2f10, ABISELECT(241,193), 0, 1, 1, "S1460C2");
    set_bf_and_test(lv, s1460c2f11, ABISELECT(241,193), 1, 1, 1, "S1460C2");
    set_bf_and_test(lv, s1460c2f12, ABISELECT(241,193), 2, 1, 1, "S1460C2");
    set_bf_and_test(lv, s1460c2f13, ABISELECT(241,193), 3, 1, 1, "S1460C2");
    set_bf_and_test(lv, s1460c2f14, ABISELECT(241,193), 4, 1, 1, "S1460C2");
    check_field_offset(lv, s1460c2f15, ABISELECT(244,196), "S1460C2.s1460c2f15");
    check_field_offset(lv, s1460c2f16, ABISELECT(256,204), "S1460C2.s1460c2f16");
    check_field_offset(lv, s1460c2f17, ABISELECT(264,208), "S1460C2.s1460c2f17");
    check_field_offset(lv, s1460c2f18, ABISELECT(272,216), "S1460C2.s1460c2f18");
    check_field_offset(lv, s1460c2f19, ABISELECT(280,224), "S1460C2.s1460c2f19");
    check_field_offset(lv, s1460c2f20, ABISELECT(288,228), "S1460C2.s1460c2f20");
    check_field_offset(lv, s1460c2f21, ABISELECT(304,236), "S1460C2.s1460c2f21");
    test_class_info(&lv, &cd_S1460C2);
    dp->~S1460C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1460C2(Test_S1460C2, "S1460C2", ABISELECT(312,244));

#else // __cplusplus

extern void _ZN7S1460C2C1Ev();
extern void _ZN7S1460C2D1Ev();
Name_Map name_map_S1460C2[] = {
  NSPAIR(_ZN7S1460C2C1Ev),
  NSPAIR(_ZN7S1460C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1460C4;
extern VTBL_ENTRY _ZTI7S1460C4[];
extern  VTBL_ENTRY _ZTV7S1460C4[];
extern Class_Descriptor cd_S1460C3;
extern VTBL_ENTRY _ZTI7S1460C3[];
extern  VTBL_ENTRY _ZTV7S1460C3[];
static Base_Class bases_S1460C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1460C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1460C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1460C2[];
extern void _ZN7S1460C2D1Ev();
extern void _ZN7S1460C2D0Ev();
extern void _ZN7S1460C42v5Ev();
extern void _ZN7S1460C42v6Ev();
extern void _ZN7S1460C42v7Ev();
extern void _ZN7S1460C42v8Ev();
extern void _ZN7S1460C42v9Ev();
extern void _ZN7S1460C43v10Ev();
extern void _ZN7S1460C43v11Ev();
extern void _ZN7S1460C43v12Ev();
extern void _ZN7S1460C43v13Ev();
extern void _ZN7S1460C43v14Ev();
extern void _ZN7S1460C43v15Ev();
extern void _ZN7S1460C43v16Ev();
extern void _ZN7S1460C43v17Ev();
extern void _ZN7S1460C43v18Ev();
extern void _ZN7S1460C43v19Ev();
extern void _ZN7S1460C43v20Ev();
extern void _ZN7S1460C43v21Ev();
extern void _ZN7S1460C43v22Ev();
extern void _ZN7S1460C43v23Ev();
extern void _ZN7S1460C43v24Ev();
extern void _ZN7S1460C43v25Ev();
extern void _ZN7S1460C43v26Ev();
extern void _ZN7S1460C43v27Ev();
extern void _ZN7S1460C43v28Ev();
extern void _ZN7S1460C43v29Ev();
extern void _ZN7S1460C43v30Ev();
extern void _ZN7S1460C43v31Ev();
extern void _ZN7S1460C43v32Ev();
extern void _ZN7S1460C43v33Ev();
extern void _ZN7S1460C43v34Ev();
extern void _ZN7S1460C43v35Ev();
extern void _ZN7S1460C43v36Ev();
extern void _ZN7S1460C43v37Ev();
extern void _ZN7S1460C43v38Ev();
extern void _ZN7S1460C43v39Ev();
extern void _ZN7S1460C43v40Ev();
extern void _ZN7S1460C43v41Ev();
extern void _ZN7S1460C43v42Ev();
extern void _ZN7S1460C43v43Ev();
extern void _ZN7S1460C43v44Ev();
extern void _ZN7S1460C43v45Ev();
extern void _ZN7S1460C43v46Ev();
extern void _ZN7S1460C43v47Ev();
extern void _ZN7S1460C43v48Ev();
extern void _ZN7S1460C43v49Ev();
extern void _ZN7S1460C43v50Ev();
extern void _ZN7S1460C43v51Ev();
extern void _ZN7S1460C43v52Ev();
extern void _ZN7S1460C43v53Ev();
extern void _ZN7S1460C43v54Ev();
extern void _ZN7S1460C43v55Ev();
extern void _ZN7S1460C43v56Ev();
extern void _ZN7S1460C43v57Ev();
extern void _ZN7S1460C43v58Ev();
extern void _ZN7S1460C43v59Ev();
extern void _ZN7S1460C43v60Ev();
extern void _ZN7S1460C43v61Ev();
extern void _ZN7S1460C43v62Ev();
extern void _ZN7S1460C43v63Ev();
extern void _ZN7S1460C43v64Ev();
extern void _ZN7S1460C43v65Ev();
extern void _ZN7S1460C43v66Ev();
extern void _ZN7S1460C43v67Ev();
extern void _ZN7S1460C43v68Ev();
extern void _ZN7S1460C33v69Ev();
extern void _ZN7S1460C33v70Ev();
extern void _ZN7S1460C33v71Ev();
extern void _ZN7S1460C33v72Ev();
extern void _ZN7S1460C33v73Ev();
extern void _ZN7S1460C33v74Ev();
extern void _ZN7S1460C33v75Ev();
extern void _ZN7S1460C33v76Ev();
extern void _ZN7S1460C33v77Ev();
extern void _ZN7S1460C33v78Ev();
extern void _ZN7S1460C33v79Ev();
extern void _ZN7S1460C33v80Ev();
extern void _ZN7S1460C33v81Ev();
extern void _ZN7S1460C33v82Ev();
extern void _ZN7S1460C33v83Ev();
extern void _ZN7S1460C33v84Ev();
extern void _ZN7S1460C33v85Ev();
extern void _ZN7S1460C33v86Ev();
extern void _ZN7S1460C33v87Ev();
extern void _ZN7S1460C33v88Ev();
extern void _ZN7S1460C33v89Ev();
extern void _ZN7S1460C33v90Ev();
extern void _ZN7S1460C33v91Ev();
extern void _ZN7S1460C33v92Ev();
extern void _ZN7S1460C33v93Ev();
extern void _ZN7S1460C33v94Ev();
extern void _ZN7S1460C33v95Ev();
extern void _ZN7S1460C23v96Ev();
extern void _ZN7S1460C23v97Ev();
extern void _ZN7S1460C23v98Ev();
extern void _ZN7S1460C23v99Ev();
extern void _ZN7S1460C24v100Ev();
extern void _ZN7S1460C24v101Ev();
extern void _ZN7S1460C24v102Ev();
extern void _ZN7S1460C24v103Ev();
extern void _ZN7S1460C24v104Ev();
extern void _ZN7S1460C24v105Ev();
extern void _ZN7S1460C24v106Ev();
extern void _ZN7S1460C24v107Ev();
extern void _ZN7S1460C24v108Ev();
extern void _ZN7S1460C24v109Ev();
extern void _ZN7S1460C24v110Ev();
extern void _ZN7S1460C24v111Ev();
extern void _ZN7S1460C24v112Ev();
extern void _ZN7S1460C24v113Ev();
extern void _ZN7S1460C24v114Ev();
extern void _ZN7S1460C24v115Ev();
extern void _ZN7S1460C24v116Ev();
extern void _ZN7S1460C24v117Ev();
extern void _ZN7S1460C24v118Ev();
extern void _ZN7S1460C24v119Ev();
extern void _ZN7S1460C24v120Ev();
static  VTBL_ENTRY vtc_S1460C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1460C2[0]),
  (VTBL_ENTRY)&_ZN7S1460C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1460C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1460C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1460C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1460C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1460C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v113Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v114Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v115Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v116Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v117Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v118Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v119Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v120Ev,
};
extern VTBL_ENTRY _ZTI7S1460C2[];
extern  VTBL_ENTRY _ZTV7S1460C2[];
Class_Descriptor cd_S1460C2 = {  "S1460C2", // class name
  bases_S1460C2, 2,
  &(vtc_S1460C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,244), // object size
  NSPAIRA(_ZTI7S1460C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1460C2),120, //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  S1460C1  : S1460C2 {
  virtual  ~S1460C1(); // _ZN7S1460C1D1Ev
  virtual void  v1(); // _ZN7S1460C12v1Ev
  virtual void  v2(); // _ZN7S1460C12v2Ev
  virtual void  v3(); // _ZN7S1460C12v3Ev
  virtual void  v4(); // _ZN7S1460C12v4Ev
  S1460C1(); // tgen
};
//SIG(1 S1460C1) 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 v91 v92 v93 v94 v95 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd 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 FC5 Fi 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[2] Fp Fi[2] FC5 Fi Fp[2] Fc[6]} vd v1 v2 v3 v4}


 S1460C1 ::~S1460C1(){ note_dtor("S1460C1", this);}
void  S1460C1 ::v1(){vfunc_called(this, "_ZN7S1460C12v1Ev");}
void  S1460C1 ::v2(){vfunc_called(this, "_ZN7S1460C12v2Ev");}
void  S1460C1 ::v3(){vfunc_called(this, "_ZN7S1460C12v3Ev");}
void  S1460C1 ::v4(){vfunc_called(this, "_ZN7S1460C12v4Ev");}
S1460C1 ::S1460C1(){ note_ctor("S1460C1", this);} // tgen

static void Test_S1460C1()
{
  extern Class_Descriptor cd_S1460C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,62)];
    init_test(&cd_S1460C1, buf);
    S1460C1 *dp, &lv = *(dp=new (buf) S1460C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,244), "sizeof(S1460C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1460C1)");
    check_base_class_offset(lv, (S1460C4*)(S1460C3*)(S1460C2*), 0, "S1460C1");
    check_base_class_offset(lv, (S1460C3*)(S1460C2*), 0, "S1460C1");
    check_base_class_offset(lv, (S1460C2*), 0, "S1460C1");
    test_class_info(&lv, &cd_S1460C1);
    dp->~S1460C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1460C1(Test_S1460C1, "S1460C1", ABISELECT(312,244));

#else // __cplusplus

extern void _ZN7S1460C1C1Ev();
extern void _ZN7S1460C1D1Ev();
Name_Map name_map_S1460C1[] = {
  NSPAIR(_ZN7S1460C1C1Ev),
  NSPAIR(_ZN7S1460C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1460C4;
extern VTBL_ENTRY _ZTI7S1460C4[];
extern  VTBL_ENTRY _ZTV7S1460C4[];
extern Class_Descriptor cd_S1460C3;
extern VTBL_ENTRY _ZTI7S1460C3[];
extern  VTBL_ENTRY _ZTV7S1460C3[];
extern Class_Descriptor cd_S1460C2;
extern VTBL_ENTRY _ZTI7S1460C2[];
extern  VTBL_ENTRY _ZTV7S1460C2[];
static Base_Class bases_S1460C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1460C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1460C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1460C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1460C1[];
extern void _ZN7S1460C1D1Ev();
extern void _ZN7S1460C1D0Ev();
extern void _ZN7S1460C42v5Ev();
extern void _ZN7S1460C42v6Ev();
extern void _ZN7S1460C42v7Ev();
extern void _ZN7S1460C42v8Ev();
extern void _ZN7S1460C42v9Ev();
extern void _ZN7S1460C43v10Ev();
extern void _ZN7S1460C43v11Ev();
extern void _ZN7S1460C43v12Ev();
extern void _ZN7S1460C43v13Ev();
extern void _ZN7S1460C43v14Ev();
extern void _ZN7S1460C43v15Ev();
extern void _ZN7S1460C43v16Ev();
extern void _ZN7S1460C43v17Ev();
extern void _ZN7S1460C43v18Ev();
extern void _ZN7S1460C43v19Ev();
extern void _ZN7S1460C43v20Ev();
extern void _ZN7S1460C43v21Ev();
extern void _ZN7S1460C43v22Ev();
extern void _ZN7S1460C43v23Ev();
extern void _ZN7S1460C43v24Ev();
extern void _ZN7S1460C43v25Ev();
extern void _ZN7S1460C43v26Ev();
extern void _ZN7S1460C43v27Ev();
extern void _ZN7S1460C43v28Ev();
extern void _ZN7S1460C43v29Ev();
extern void _ZN7S1460C43v30Ev();
extern void _ZN7S1460C43v31Ev();
extern void _ZN7S1460C43v32Ev();
extern void _ZN7S1460C43v33Ev();
extern void _ZN7S1460C43v34Ev();
extern void _ZN7S1460C43v35Ev();
extern void _ZN7S1460C43v36Ev();
extern void _ZN7S1460C43v37Ev();
extern void _ZN7S1460C43v38Ev();
extern void _ZN7S1460C43v39Ev();
extern void _ZN7S1460C43v40Ev();
extern void _ZN7S1460C43v41Ev();
extern void _ZN7S1460C43v42Ev();
extern void _ZN7S1460C43v43Ev();
extern void _ZN7S1460C43v44Ev();
extern void _ZN7S1460C43v45Ev();
extern void _ZN7S1460C43v46Ev();
extern void _ZN7S1460C43v47Ev();
extern void _ZN7S1460C43v48Ev();
extern void _ZN7S1460C43v49Ev();
extern void _ZN7S1460C43v50Ev();
extern void _ZN7S1460C43v51Ev();
extern void _ZN7S1460C43v52Ev();
extern void _ZN7S1460C43v53Ev();
extern void _ZN7S1460C43v54Ev();
extern void _ZN7S1460C43v55Ev();
extern void _ZN7S1460C43v56Ev();
extern void _ZN7S1460C43v57Ev();
extern void _ZN7S1460C43v58Ev();
extern void _ZN7S1460C43v59Ev();
extern void _ZN7S1460C43v60Ev();
extern void _ZN7S1460C43v61Ev();
extern void _ZN7S1460C43v62Ev();
extern void _ZN7S1460C43v63Ev();
extern void _ZN7S1460C43v64Ev();
extern void _ZN7S1460C43v65Ev();
extern void _ZN7S1460C43v66Ev();
extern void _ZN7S1460C43v67Ev();
extern void _ZN7S1460C43v68Ev();
extern void _ZN7S1460C33v69Ev();
extern void _ZN7S1460C33v70Ev();
extern void _ZN7S1460C33v71Ev();
extern void _ZN7S1460C33v72Ev();
extern void _ZN7S1460C33v73Ev();
extern void _ZN7S1460C33v74Ev();
extern void _ZN7S1460C33v75Ev();
extern void _ZN7S1460C33v76Ev();
extern void _ZN7S1460C33v77Ev();
extern void _ZN7S1460C33v78Ev();
extern void _ZN7S1460C33v79Ev();
extern void _ZN7S1460C33v80Ev();
extern void _ZN7S1460C33v81Ev();
extern void _ZN7S1460C33v82Ev();
extern void _ZN7S1460C33v83Ev();
extern void _ZN7S1460C33v84Ev();
extern void _ZN7S1460C33v85Ev();
extern void _ZN7S1460C33v86Ev();
extern void _ZN7S1460C33v87Ev();
extern void _ZN7S1460C33v88Ev();
extern void _ZN7S1460C33v89Ev();
extern void _ZN7S1460C33v90Ev();
extern void _ZN7S1460C33v91Ev();
extern void _ZN7S1460C33v92Ev();
extern void _ZN7S1460C33v93Ev();
extern void _ZN7S1460C33v94Ev();
extern void _ZN7S1460C33v95Ev();
extern void _ZN7S1460C23v96Ev();
extern void _ZN7S1460C23v97Ev();
extern void _ZN7S1460C23v98Ev();
extern void _ZN7S1460C23v99Ev();
extern void _ZN7S1460C24v100Ev();
extern void _ZN7S1460C24v101Ev();
extern void _ZN7S1460C24v102Ev();
extern void _ZN7S1460C24v103Ev();
extern void _ZN7S1460C24v104Ev();
extern void _ZN7S1460C24v105Ev();
extern void _ZN7S1460C24v106Ev();
extern void _ZN7S1460C24v107Ev();
extern void _ZN7S1460C24v108Ev();
extern void _ZN7S1460C24v109Ev();
extern void _ZN7S1460C24v110Ev();
extern void _ZN7S1460C24v111Ev();
extern void _ZN7S1460C24v112Ev();
extern void _ZN7S1460C24v113Ev();
extern void _ZN7S1460C24v114Ev();
extern void _ZN7S1460C24v115Ev();
extern void _ZN7S1460C24v116Ev();
extern void _ZN7S1460C24v117Ev();
extern void _ZN7S1460C24v118Ev();
extern void _ZN7S1460C24v119Ev();
extern void _ZN7S1460C24v120Ev();
extern void _ZN7S1460C12v1Ev();
extern void _ZN7S1460C12v2Ev();
extern void _ZN7S1460C12v3Ev();
extern void _ZN7S1460C12v4Ev();
static  VTBL_ENTRY vtc_S1460C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1460C1[0]),
  (VTBL_ENTRY)&_ZN7S1460C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1460C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1460C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1460C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1460C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1460C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1460C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1460C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1460C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v113Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v114Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v115Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v116Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v117Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v118Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v119Ev,
  (VTBL_ENTRY)&_ZN7S1460C24v120Ev,
  (VTBL_ENTRY)&_ZN7S1460C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1460C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1460C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1460C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1460C1[];
extern  VTBL_ENTRY _ZTV7S1460C1[];
Class_Descriptor cd_S1460C1 = {  "S1460C1", // class name
  bases_S1460C1, 3,
  &(vtc_S1460C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,244), // object size
  NSPAIRA(_ZTI7S1460C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1460C1),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  S188C6  {
  int s188c6f0;
  __tsi64 s188c6f1;
  void *s188c6f2[4];
  int s188c6f3[2];
  void *s188c6f4;
  ::S615C17_nt s188c6f5;
  void *s188c6f6[2];
  virtual  ~S188C6(); // _ZN6S188C6D1Ev
  virtual void  v4(); // _ZN6S188C62v4Ev
  virtual void  v5(); // _ZN6S188C62v5Ev
  virtual void  v6(); // _ZN6S188C62v6Ev
  virtual void  v7(); // _ZN6S188C62v7Ev
  virtual void  v8(); // _ZN6S188C62v8Ev
  virtual void  v9(); // _ZN6S188C62v9Ev
  virtual void  v10(); // _ZN6S188C63v10Ev
  virtual void  v11(); // _ZN6S188C63v11Ev
  virtual void  v12(); // _ZN6S188C63v12Ev
  virtual void  v13(); // _ZN6S188C63v13Ev
  virtual void  v14(); // _ZN6S188C63v14Ev
  virtual void  v15(); // _ZN6S188C63v15Ev
  virtual void  v16(); // _ZN6S188C63v16Ev
  virtual void  v17(); // _ZN6S188C63v17Ev
  virtual void  v18(); // _ZN6S188C63v18Ev
  virtual void  v19(); // _ZN6S188C63v19Ev
  virtual void  v20(); // _ZN6S188C63v20Ev
  virtual void  v21(); // _ZN6S188C63v21Ev
  virtual void  v22(); // _ZN6S188C63v22Ev
  virtual void  v23(); // _ZN6S188C63v23Ev
  virtual void  v24(); // _ZN6S188C63v24Ev
  virtual void  v25(); // _ZN6S188C63v25Ev
  virtual void  v26(); // _ZN6S188C63v26Ev
  virtual void  v27(); // _ZN6S188C63v27Ev
  virtual void  v28(); // _ZN6S188C63v28Ev
  virtual void  v29(); // _ZN6S188C63v29Ev
  virtual void  v30(); // _ZN6S188C63v30Ev
  virtual void  v31(); // _ZN6S188C63v31Ev
  virtual void  v32(); // _ZN6S188C63v32Ev
  virtual void  v33(); // _ZN6S188C63v33Ev
  virtual void  v34(); // _ZN6S188C63v34Ev
  virtual void  v35(); // _ZN6S188C63v35Ev
  virtual void  v36(); // _ZN6S188C63v36Ev
  virtual void  v37(); // _ZN6S188C63v37Ev
  virtual void  v38(); // _ZN6S188C63v38Ev
  virtual void  v39(); // _ZN6S188C63v39Ev
  virtual void  v40(); // _ZN6S188C63v40Ev
  virtual void  v41(); // _ZN6S188C63v41Ev
  virtual void  v42(); // _ZN6S188C63v42Ev
  virtual void  v43(); // _ZN6S188C63v43Ev
  virtual void  v44(); // _ZN6S188C63v44Ev
  virtual void  v45(); // _ZN6S188C63v45Ev
  virtual void  v46(); // _ZN6S188C63v46Ev
  virtual void  v47(); // _ZN6S188C63v47Ev
  virtual void  v48(); // _ZN6S188C63v48Ev
  virtual void  v49(); // _ZN6S188C63v49Ev
  virtual void  v50(); // _ZN6S188C63v50Ev
  virtual void  v51(); // _ZN6S188C63v51Ev
  virtual void  v52(); // _ZN6S188C63v52Ev
  virtual void  v53(); // _ZN6S188C63v53Ev
  virtual void  v54(); // _ZN6S188C63v54Ev
  virtual void  v55(); // _ZN6S188C63v55Ev
  virtual void  v56(); // _ZN6S188C63v56Ev
  virtual void  v57(); // _ZN6S188C63v57Ev
  virtual void  v58(); // _ZN6S188C63v58Ev
  virtual void  v59(); // _ZN6S188C63v59Ev
  virtual void  v60(); // _ZN6S188C63v60Ev
  virtual void  v61(); // _ZN6S188C63v61Ev
  virtual void  v62(); // _ZN6S188C63v62Ev
  virtual void  v63(); // _ZN6S188C63v63Ev
  virtual void  v64(); // _ZN6S188C63v64Ev
  virtual void  v65(); // _ZN6S188C63v65Ev
  virtual void  v66(); // _ZN6S188C63v66Ev
  virtual void  v67(); // _ZN6S188C63v67Ev
  S188C6(); // tgen
};
//SIG(-1 S188C6) 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]}


 S188C6 ::~S188C6(){ note_dtor("S188C6", this);}
void  S188C6 ::v4(){vfunc_called(this, "_ZN6S188C62v4Ev");}
void  S188C6 ::v5(){vfunc_called(this, "_ZN6S188C62v5Ev");}
void  S188C6 ::v6(){vfunc_called(this, "_ZN6S188C62v6Ev");}
void  S188C6 ::v7(){vfunc_called(this, "_ZN6S188C62v7Ev");}
void  S188C6 ::v8(){vfunc_called(this, "_ZN6S188C62v8Ev");}
void  S188C6 ::v9(){vfunc_called(this, "_ZN6S188C62v9Ev");}
void  S188C6 ::v10(){vfunc_called(this, "_ZN6S188C63v10Ev");}
void  S188C6 ::v11(){vfunc_called(this, "_ZN6S188C63v11Ev");}
void  S188C6 ::v12(){vfunc_called(this, "_ZN6S188C63v12Ev");}
void  S188C6 ::v13(){vfunc_called(this, "_ZN6S188C63v13Ev");}
void  S188C6 ::v14(){vfunc_called(this, "_ZN6S188C63v14Ev");}
void  S188C6 ::v15(){vfunc_called(this, "_ZN6S188C63v15Ev");}
void  S188C6 ::v16(){vfunc_called(this, "_ZN6S188C63v16Ev");}
void  S188C6 ::v17(){vfunc_called(this, "_ZN6S188C63v17Ev");}
void  S188C6 ::v18(){vfunc_called(this, "_ZN6S188C63v18Ev");}
void  S188C6 ::v19(){vfunc_called(this, "_ZN6S188C63v19Ev");}
void  S188C6 ::v20(){vfunc_called(this, "_ZN6S188C63v20Ev");}
void  S188C6 ::v21(){vfunc_called(this, "_ZN6S188C63v21Ev");}
void  S188C6 ::v22(){vfunc_called(this, "_ZN6S188C63v22Ev");}
void  S188C6 ::v23(){vfunc_called(this, "_ZN6S188C63v23Ev");}
void  S188C6 ::v24(){vfunc_called(this, "_ZN6S188C63v24Ev");}
void  S188C6 ::v25(){vfunc_called(this, "_ZN6S188C63v25Ev");}
void  S188C6 ::v26(){vfunc_called(this, "_ZN6S188C63v26Ev");}
void  S188C6 ::v27(){vfunc_called(this, "_ZN6S188C63v27Ev");}
void  S188C6 ::v28(){vfunc_called(this, "_ZN6S188C63v28Ev");}
void  S188C6 ::v29(){vfunc_called(this, "_ZN6S188C63v29Ev");}
void  S188C6 ::v30(){vfunc_called(this, "_ZN6S188C63v30Ev");}
void  S188C6 ::v31(){vfunc_called(this, "_ZN6S188C63v31Ev");}
void  S188C6 ::v32(){vfunc_called(this, "_ZN6S188C63v32Ev");}
void  S188C6 ::v33(){vfunc_called(this, "_ZN6S188C63v33Ev");}
void  S188C6 ::v34(){vfunc_called(this, "_ZN6S188C63v34Ev");}
void  S188C6 ::v35(){vfunc_called(this, "_ZN6S188C63v35Ev");}
void  S188C6 ::v36(){vfunc_called(this, "_ZN6S188C63v36Ev");}
void  S188C6 ::v37(){vfunc_called(this, "_ZN6S188C63v37Ev");}
void  S188C6 ::v38(){vfunc_called(this, "_ZN6S188C63v38Ev");}
void  S188C6 ::v39(){vfunc_called(this, "_ZN6S188C63v39Ev");}
void  S188C6 ::v40(){vfunc_called(this, "_ZN6S188C63v40Ev");}
void  S188C6 ::v41(){vfunc_called(this, "_ZN6S188C63v41Ev");}
void  S188C6 ::v42(){vfunc_called(this, "_ZN6S188C63v42Ev");}
void  S188C6 ::v43(){vfunc_called(this, "_ZN6S188C63v43Ev");}
void  S188C6 ::v44(){vfunc_called(this, "_ZN6S188C63v44Ev");}
void  S188C6 ::v45(){vfunc_called(this, "_ZN6S188C63v45Ev");}
void  S188C6 ::v46(){vfunc_called(this, "_ZN6S188C63v46Ev");}
void  S188C6 ::v47(){vfunc_called(this, "_ZN6S188C63v47Ev");}
void  S188C6 ::v48(){vfunc_called(this, "_ZN6S188C63v48Ev");}
void  S188C6 ::v49(){vfunc_called(this, "_ZN6S188C63v49Ev");}
void  S188C6 ::v50(){vfunc_called(this, "_ZN6S188C63v50Ev");}
void  S188C6 ::v51(){vfunc_called(this, "_ZN6S188C63v51Ev");}
void  S188C6 ::v52(){vfunc_called(this, "_ZN6S188C63v52Ev");}
void  S188C6 ::v53(){vfunc_called(this, "_ZN6S188C63v53Ev");}
void  S188C6 ::v54(){vfunc_called(this, "_ZN6S188C63v54Ev");}
void  S188C6 ::v55(){vfunc_called(this, "_ZN6S188C63v55Ev");}
void  S188C6 ::v56(){vfunc_called(this, "_ZN6S188C63v56Ev");}
void  S188C6 ::v57(){vfunc_called(this, "_ZN6S188C63v57Ev");}
void  S188C6 ::v58(){vfunc_called(this, "_ZN6S188C63v58Ev");}
void  S188C6 ::v59(){vfunc_called(this, "_ZN6S188C63v59Ev");}
void  S188C6 ::v60(){vfunc_called(this, "_ZN6S188C63v60Ev");}
void  S188C6 ::v61(){vfunc_called(this, "_ZN6S188C63v61Ev");}
void  S188C6 ::v62(){vfunc_called(this, "_ZN6S188C63v62Ev");}
void  S188C6 ::v63(){vfunc_called(this, "_ZN6S188C63v63Ev");}
void  S188C6 ::v64(){vfunc_called(this, "_ZN6S188C63v64Ev");}
void  S188C6 ::v65(){vfunc_called(this, "_ZN6S188C63v65Ev");}
void  S188C6 ::v66(){vfunc_called(this, "_ZN6S188C63v66Ev");}
void  S188C6 ::v67(){vfunc_called(this, "_ZN6S188C63v67Ev");}
S188C6 ::S188C6(){ note_ctor("S188C6", this);} // tgen

static void Test_S188C6()
{
  extern Class_Descriptor cd_S188C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S188C6, buf);
    S188C6 *dp, &lv = *(dp=new (buf) S188C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S188C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S188C6)");
    check_field_offset(lv, s188c6f0, ABISELECT(8,4), "S188C6.s188c6f0");
    check_field_offset(lv, s188c6f1, ABISELECT(16,8), "S188C6.s188c6f1");
    check_field_offset(lv, s188c6f2, ABISELECT(24,16), "S188C6.s188c6f2");
    check_field_offset(lv, s188c6f3, ABISELECT(56,32), "S188C6.s188c6f3");
    check_field_offset(lv, s188c6f4, ABISELECT(64,40), "S188C6.s188c6f4");
    check_field_offset(lv, s188c6f5, ABISELECT(72,44), "S188C6.s188c6f5");
    check_field_offset(lv, s188c6f6, ABISELECT(80,52), "S188C6.s188c6f6");
    test_class_info(&lv, &cd_S188C6);
    dp->~S188C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS188C6(Test_S188C6, "S188C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S188C6C1Ev();
extern void _ZN6S188C6D1Ev();
Name_Map name_map_S188C6[] = {
  NSPAIR(_ZN6S188C6C1Ev),
  NSPAIR(_ZN6S188C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S188C6[];
extern void _ZN6S188C6D1Ev();
extern void _ZN6S188C6D0Ev();
extern void _ZN6S188C62v4Ev();
extern void _ZN6S188C62v5Ev();
extern void _ZN6S188C62v6Ev();
extern void _ZN6S188C62v7Ev();
extern void _ZN6S188C62v8Ev();
extern void _ZN6S188C62v9Ev();
extern void _ZN6S188C63v10Ev();
extern void _ZN6S188C63v11Ev();
extern void _ZN6S188C63v12Ev();
extern void _ZN6S188C63v13Ev();
extern void _ZN6S188C63v14Ev();
extern void _ZN6S188C63v15Ev();
extern void _ZN6S188C63v16Ev();
extern void _ZN6S188C63v17Ev();
extern void _ZN6S188C63v18Ev();
extern void _ZN6S188C63v19Ev();
extern void _ZN6S188C63v20Ev();
extern void _ZN6S188C63v21Ev();
extern void _ZN6S188C63v22Ev();
extern void _ZN6S188C63v23Ev();
extern void _ZN6S188C63v24Ev();
extern void _ZN6S188C63v25Ev();
extern void _ZN6S188C63v26Ev();
extern void _ZN6S188C63v27Ev();
extern void _ZN6S188C63v28Ev();
extern void _ZN6S188C63v29Ev();
extern void _ZN6S188C63v30Ev();
extern void _ZN6S188C63v31Ev();
extern void _ZN6S188C63v32Ev();
extern void _ZN6S188C63v33Ev();
extern void _ZN6S188C63v34Ev();
extern void _ZN6S188C63v35Ev();
extern void _ZN6S188C63v36Ev();
extern void _ZN6S188C63v37Ev();
extern void _ZN6S188C63v38Ev();
extern void _ZN6S188C63v39Ev();
extern void _ZN6S188C63v40Ev();
extern void _ZN6S188C63v41Ev();
extern void _ZN6S188C63v42Ev();
extern void _ZN6S188C63v43Ev();
extern void _ZN6S188C63v44Ev();
extern void _ZN6S188C63v45Ev();
extern void _ZN6S188C63v46Ev();
extern void _ZN6S188C63v47Ev();
extern void _ZN6S188C63v48Ev();
extern void _ZN6S188C63v49Ev();
extern void _ZN6S188C63v50Ev();
extern void _ZN6S188C63v51Ev();
extern void _ZN6S188C63v52Ev();
extern void _ZN6S188C63v53Ev();
extern void _ZN6S188C63v54Ev();
extern void _ZN6S188C63v55Ev();
extern void _ZN6S188C63v56Ev();
extern void _ZN6S188C63v57Ev();
extern void _ZN6S188C63v58Ev();
extern void _ZN6S188C63v59Ev();
extern void _ZN6S188C63v60Ev();
extern void _ZN6S188C63v61Ev();
extern void _ZN6S188C63v62Ev();
extern void _ZN6S188C63v63Ev();
extern void _ZN6S188C63v64Ev();
extern void _ZN6S188C63v65Ev();
extern void _ZN6S188C63v66Ev();
extern void _ZN6S188C63v67Ev();
static  VTBL_ENTRY vtc_S188C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S188C6[0]),
  (VTBL_ENTRY)&_ZN6S188C6D1Ev,
  (VTBL_ENTRY)&_ZN6S188C6D0Ev,
  (VTBL_ENTRY)&_ZN6S188C62v4Ev,
  (VTBL_ENTRY)&_ZN6S188C62v5Ev,
  (VTBL_ENTRY)&_ZN6S188C62v6Ev,
  (VTBL_ENTRY)&_ZN6S188C62v7Ev,
  (VTBL_ENTRY)&_ZN6S188C62v8Ev,
  (VTBL_ENTRY)&_ZN6S188C62v9Ev,
  (VTBL_ENTRY)&_ZN6S188C63v10Ev,
  (VTBL_ENTRY)&_ZN6S188C63v11Ev,
  (VTBL_ENTRY)&_ZN6S188C63v12Ev,
  (VTBL_ENTRY)&_ZN6S188C63v13Ev,
  (VTBL_ENTRY)&_ZN6S188C63v14Ev,
  (VTBL_ENTRY)&_ZN6S188C63v15Ev,
  (VTBL_ENTRY)&_ZN6S188C63v16Ev,
  (VTBL_ENTRY)&_ZN6S188C63v17Ev,
  (VTBL_ENTRY)&_ZN6S188C63v18Ev,
  (VTBL_ENTRY)&_ZN6S188C63v19Ev,
  (VTBL_ENTRY)&_ZN6S188C63v20Ev,
  (VTBL_ENTRY)&_ZN6S188C63v21Ev,
  (VTBL_ENTRY)&_ZN6S188C63v22Ev,
  (VTBL_ENTRY)&_ZN6S188C63v23Ev,
  (VTBL_ENTRY)&_ZN6S188C63v24Ev,
  (VTBL_ENTRY)&_ZN6S188C63v25Ev,
  (VTBL_ENTRY)&_ZN6S188C63v26Ev,
  (VTBL_ENTRY)&_ZN6S188C63v27Ev,
  (VTBL_ENTRY)&_ZN6S188C63v28Ev,
  (VTBL_ENTRY)&_ZN6S188C63v29Ev,
  (VTBL_ENTRY)&_ZN6S188C63v30Ev,
  (VTBL_ENTRY)&_ZN6S188C63v31Ev,
  (VTBL_ENTRY)&_ZN6S188C63v32Ev,
  (VTBL_ENTRY)&_ZN6S188C63v33Ev,
  (VTBL_ENTRY)&_ZN6S188C63v34Ev,
  (VTBL_ENTRY)&_ZN6S188C63v35Ev,
  (VTBL_ENTRY)&_ZN6S188C63v36Ev,
  (VTBL_ENTRY)&_ZN6S188C63v37Ev,
  (VTBL_ENTRY)&_ZN6S188C63v38Ev,
  (VTBL_ENTRY)&_ZN6S188C63v39Ev,
  (VTBL_ENTRY)&_ZN6S188C63v40Ev,
  (VTBL_ENTRY)&_ZN6S188C63v41Ev,
  (VTBL_ENTRY)&_ZN6S188C63v42Ev,
  (VTBL_ENTRY)&_ZN6S188C63v43Ev,
  (VTBL_ENTRY)&_ZN6S188C63v44Ev,
  (VTBL_ENTRY)&_ZN6S188C63v45Ev,
  (VTBL_ENTRY)&_ZN6S188C63v46Ev,
  (VTBL_ENTRY)&_ZN6S188C63v47Ev,
  (VTBL_ENTRY)&_ZN6S188C63v48Ev,
  (VTBL_ENTRY)&_ZN6S188C63v49Ev,
  (VTBL_ENTRY)&_ZN6S188C63v50Ev,
  (VTBL_ENTRY)&_ZN6S188C63v51Ev,
  (VTBL_ENTRY)&_ZN6S188C63v52Ev,
  (VTBL_ENTRY)&_ZN6S188C63v53Ev,
  (VTBL_ENTRY)&_ZN6S188C63v54Ev,
  (VTBL_ENTRY)&_ZN6S188C63v55Ev,
  (VTBL_ENTRY)&_ZN6S188C63v56Ev,
  (VTBL_ENTRY)&_ZN6S188C63v57Ev,
  (VTBL_ENTRY)&_ZN6S188C63v58Ev,
  (VTBL_ENTRY)&_ZN6S188C63v59Ev,
  (VTBL_ENTRY)&_ZN6S188C63v60Ev,
  (VTBL_ENTRY)&_ZN6S188C63v61Ev,
  (VTBL_ENTRY)&_ZN6S188C63v62Ev,
  (VTBL_ENTRY)&_ZN6S188C63v63Ev,
  (VTBL_ENTRY)&_ZN6S188C63v64Ev,
  (VTBL_ENTRY)&_ZN6S188C63v65Ev,
  (VTBL_ENTRY)&_ZN6S188C63v66Ev,
  (VTBL_ENTRY)&_ZN6S188C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S188C6[];
extern  VTBL_ENTRY _ZTV6S188C6[];
Class_Descriptor cd_S188C6 = {  "S188C6", // class name
  0,0,//no base classes
  &(vtc_S188C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S188C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S188C6),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  S188C5  : S188C6 {
  void *s188c5f0;
  ::S1542C26 s188c5f1;
  ::S615C17_nt s188c5f2;
  ::S1542C22_nt s188c5f3;
  ::S615C12_nt s188c5f4;
  int s188c5f5;
  unsigned int s188c5f6:1;
  unsigned int s188c5f7:1;
  unsigned int s188c5f8:1;
  unsigned int s188c5f9:1;
  int s188c5f10[11];
  virtual  ~S188C5(); // _ZN6S188C5D1Ev
  virtual void  v68(); // _ZN6S188C53v68Ev
  virtual void  v69(); // _ZN6S188C53v69Ev
  virtual void  v70(); // _ZN6S188C53v70Ev
  virtual void  v71(); // _ZN6S188C53v71Ev
  virtual void  v72(); // _ZN6S188C53v72Ev
  virtual void  v73(); // _ZN6S188C53v73Ev
  virtual void  v74(); // _ZN6S188C53v74Ev
  virtual void  v75(); // _ZN6S188C53v75Ev
  virtual void  v76(); // _ZN6S188C53v76Ev
  virtual void  v77(); // _ZN6S188C53v77Ev
  virtual void  v78(); // _ZN6S188C53v78Ev
  virtual void  v79(); // _ZN6S188C53v79Ev
  virtual void  v80(); // _ZN6S188C53v80Ev
  virtual void  v81(); // _ZN6S188C53v81Ev
  virtual void  v82(); // _ZN6S188C53v82Ev
  virtual void  v83(); // _ZN6S188C53v83Ev
  virtual void  v84(); // _ZN6S188C53v84Ev
  virtual void  v85(); // _ZN6S188C53v85Ev
  virtual void  v86(); // _ZN6S188C53v86Ev
  virtual void  v87(); // _ZN6S188C53v87Ev
  virtual void  v88(); // _ZN6S188C53v88Ev
  virtual void  v89(); // _ZN6S188C53v89Ev
  virtual void  v90(); // _ZN6S188C53v90Ev
  virtual void  v91(); // _ZN6S188C53v91Ev
  virtual void  v92(); // _ZN6S188C53v92Ev
  virtual void  v93(); // _ZN6S188C53v93Ev
  virtual void  v94(); // _ZN6S188C53v94Ev
  S188C5(); // tgen
};
//SIG(-1 S188C5) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S188C5 ::~S188C5(){ note_dtor("S188C5", this);}
void  S188C5 ::v68(){vfunc_called(this, "_ZN6S188C53v68Ev");}
void  S188C5 ::v69(){vfunc_called(this, "_ZN6S188C53v69Ev");}
void  S188C5 ::v70(){vfunc_called(this, "_ZN6S188C53v70Ev");}
void  S188C5 ::v71(){vfunc_called(this, "_ZN6S188C53v71Ev");}
void  S188C5 ::v72(){vfunc_called(this, "_ZN6S188C53v72Ev");}
void  S188C5 ::v73(){vfunc_called(this, "_ZN6S188C53v73Ev");}
void  S188C5 ::v74(){vfunc_called(this, "_ZN6S188C53v74Ev");}
void  S188C5 ::v75(){vfunc_called(this, "_ZN6S188C53v75Ev");}
void  S188C5 ::v76(){vfunc_called(this, "_ZN6S188C53v76Ev");}
void  S188C5 ::v77(){vfunc_called(this, "_ZN6S188C53v77Ev");}
void  S188C5 ::v78(){vfunc_called(this, "_ZN6S188C53v78Ev");}
void  S188C5 ::v79(){vfunc_called(this, "_ZN6S188C53v79Ev");}
void  S188C5 ::v80(){vfunc_called(this, "_ZN6S188C53v80Ev");}
void  S188C5 ::v81(){vfunc_called(this, "_ZN6S188C53v81Ev");}
void  S188C5 ::v82(){vfunc_called(this, "_ZN6S188C53v82Ev");}
void  S188C5 ::v83(){vfunc_called(this, "_ZN6S188C53v83Ev");}
void  S188C5 ::v84(){vfunc_called(this, "_ZN6S188C53v84Ev");}
void  S188C5 ::v85(){vfunc_called(this, "_ZN6S188C53v85Ev");}
void  S188C5 ::v86(){vfunc_called(this, "_ZN6S188C53v86Ev");}
void  S188C5 ::v87(){vfunc_called(this, "_ZN6S188C53v87Ev");}
void  S188C5 ::v88(){vfunc_called(this, "_ZN6S188C53v88Ev");}
void  S188C5 ::v89(){vfunc_called(this, "_ZN6S188C53v89Ev");}
void  S188C5 ::v90(){vfunc_called(this, "_ZN6S188C53v90Ev");}
void  S188C5 ::v91(){vfunc_called(this, "_ZN6S188C53v91Ev");}
void  S188C5 ::v92(){vfunc_called(this, "_ZN6S188C53v92Ev");}
void  S188C5 ::v93(){vfunc_called(this, "_ZN6S188C53v93Ev");}
void  S188C5 ::v94(){vfunc_called(this, "_ZN6S188C53v94Ev");}
S188C5 ::S188C5(){ note_ctor("S188C5", this);} // tgen

static void Test_S188C5()
{
  extern Class_Descriptor cd_S188C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S188C5, buf);
    S188C5 *dp, &lv = *(dp=new (buf) S188C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S188C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S188C5)");
    check_base_class_offset(lv, (S188C6*), 0, "S188C5");
    check_field_offset(lv, s188c5f0, ABISELECT(96,60), "S188C5.s188c5f0");
    check_field_offset(lv, s188c5f1, ABISELECT(104,64), "S188C5.s188c5f1");
    check_field_offset(lv, s188c5f2, ABISELECT(120,76), "S188C5.s188c5f2");
    check_field_offset(lv, s188c5f3, ABISELECT(128,84), "S188C5.s188c5f3");
    check_field_offset(lv, s188c5f4, ABISELECT(144,96), "S188C5.s188c5f4");
    check_field_offset(lv, s188c5f5, ABISELECT(176,128), "S188C5.s188c5f5");
    set_bf_and_test(lv, s188c5f6, ABISELECT(180,132), 0, 1, 1, "S188C5");
    set_bf_and_test(lv, s188c5f7, ABISELECT(180,132), 1, 1, 1, "S188C5");
    set_bf_and_test(lv, s188c5f8, ABISELECT(180,132), 2, 1, 1, "S188C5");
    set_bf_and_test(lv, s188c5f9, ABISELECT(180,132), 3, 1, 1, "S188C5");
    check_field_offset(lv, s188c5f10, ABISELECT(184,136), "S188C5.s188c5f10");
    test_class_info(&lv, &cd_S188C5);
    dp->~S188C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS188C5(Test_S188C5, "S188C5", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S188C5C1Ev();
extern void _ZN6S188C5D1Ev();
Name_Map name_map_S188C5[] = {
  NSPAIR(_ZN6S188C5C1Ev),
  NSPAIR(_ZN6S188C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S188C6;
extern VTBL_ENTRY _ZTI6S188C6[];
extern  VTBL_ENTRY _ZTV6S188C6[];
static Base_Class bases_S188C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S188C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S188C5[];
extern void _ZN6S188C5D1Ev();
extern void _ZN6S188C5D0Ev();
extern void _ZN6S188C62v4Ev();
extern void _ZN6S188C62v5Ev();
extern void _ZN6S188C62v6Ev();
extern void _ZN6S188C62v7Ev();
extern void _ZN6S188C62v8Ev();
extern void _ZN6S188C62v9Ev();
extern void _ZN6S188C63v10Ev();
extern void _ZN6S188C63v11Ev();
extern void _ZN6S188C63v12Ev();
extern void _ZN6S188C63v13Ev();
extern void _ZN6S188C63v14Ev();
extern void _ZN6S188C63v15Ev();
extern void _ZN6S188C63v16Ev();
extern void _ZN6S188C63v17Ev();
extern void _ZN6S188C63v18Ev();
extern void _ZN6S188C63v19Ev();
extern void _ZN6S188C63v20Ev();
extern void _ZN6S188C63v21Ev();
extern void _ZN6S188C63v22Ev();
extern void _ZN6S188C63v23Ev();
extern void _ZN6S188C63v24Ev();
extern void _ZN6S188C63v25Ev();
extern void _ZN6S188C63v26Ev();
extern void _ZN6S188C63v27Ev();
extern void _ZN6S188C63v28Ev();
extern void _ZN6S188C63v29Ev();
extern void _ZN6S188C63v30Ev();
extern void _ZN6S188C63v31Ev();
extern void _ZN6S188C63v32Ev();
extern void _ZN6S188C63v33Ev();
extern void _ZN6S188C63v34Ev();
extern void _ZN6S188C63v35Ev();
extern void _ZN6S188C63v36Ev();
extern void _ZN6S188C63v37Ev();
extern void _ZN6S188C63v38Ev();
extern void _ZN6S188C63v39Ev();
extern void _ZN6S188C63v40Ev();
extern void _ZN6S188C63v41Ev();
extern void _ZN6S188C63v42Ev();
extern void _ZN6S188C63v43Ev();
extern void _ZN6S188C63v44Ev();
extern void _ZN6S188C63v45Ev();
extern void _ZN6S188C63v46Ev();
extern void _ZN6S188C63v47Ev();
extern void _ZN6S188C63v48Ev();
extern void _ZN6S188C63v49Ev();
extern void _ZN6S188C63v50Ev();
extern void _ZN6S188C63v51Ev();
extern void _ZN6S188C63v52Ev();
extern void _ZN6S188C63v53Ev();
extern void _ZN6S188C63v54Ev();
extern void _ZN6S188C63v55Ev();
extern void _ZN6S188C63v56Ev();
extern void _ZN6S188C63v57Ev();
extern void _ZN6S188C63v58Ev();
extern void _ZN6S188C63v59Ev();
extern void _ZN6S188C63v60Ev();
extern void _ZN6S188C63v61Ev();
extern void _ZN6S188C63v62Ev();
extern void _ZN6S188C63v63Ev();
extern void _ZN6S188C63v64Ev();
extern void _ZN6S188C63v65Ev();
extern void _ZN6S188C63v66Ev();
extern void _ZN6S188C63v67Ev();
extern void _ZN6S188C53v68Ev();
extern void _ZN6S188C53v69Ev();
extern void _ZN6S188C53v70Ev();
extern void _ZN6S188C53v71Ev();
extern void _ZN6S188C53v72Ev();
extern void _ZN6S188C53v73Ev();
extern void _ZN6S188C53v74Ev();
extern void _ZN6S188C53v75Ev();
extern void _ZN6S188C53v76Ev();
extern void _ZN6S188C53v77Ev();
extern void _ZN6S188C53v78Ev();
extern void _ZN6S188C53v79Ev();
extern void _ZN6S188C53v80Ev();
extern void _ZN6S188C53v81Ev();
extern void _ZN6S188C53v82Ev();
extern void _ZN6S188C53v83Ev();
extern void _ZN6S188C53v84Ev();
extern void _ZN6S188C53v85Ev();
extern void _ZN6S188C53v86Ev();
extern void _ZN6S188C53v87Ev();
extern void _ZN6S188C53v88Ev();
extern void _ZN6S188C53v89Ev();
extern void _ZN6S188C53v90Ev();
extern void _ZN6S188C53v91Ev();
extern void _ZN6S188C53v92Ev();
extern void _ZN6S188C53v93Ev();
extern void _ZN6S188C53v94Ev();
static  VTBL_ENTRY vtc_S188C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S188C5[0]),
  (VTBL_ENTRY)&_ZN6S188C5D1Ev,
  (VTBL_ENTRY)&_ZN6S188C5D0Ev,
  (VTBL_ENTRY)&_ZN6S188C62v4Ev,
  (VTBL_ENTRY)&_ZN6S188C62v5Ev,
  (VTBL_ENTRY)&_ZN6S188C62v6Ev,
  (VTBL_ENTRY)&_ZN6S188C62v7Ev,
  (VTBL_ENTRY)&_ZN6S188C62v8Ev,
  (VTBL_ENTRY)&_ZN6S188C62v9Ev,
  (VTBL_ENTRY)&_ZN6S188C63v10Ev,
  (VTBL_ENTRY)&_ZN6S188C63v11Ev,
  (VTBL_ENTRY)&_ZN6S188C63v12Ev,
  (VTBL_ENTRY)&_ZN6S188C63v13Ev,
  (VTBL_ENTRY)&_ZN6S188C63v14Ev,
  (VTBL_ENTRY)&_ZN6S188C63v15Ev,
  (VTBL_ENTRY)&_ZN6S188C63v16Ev,
  (VTBL_ENTRY)&_ZN6S188C63v17Ev,
  (VTBL_ENTRY)&_ZN6S188C63v18Ev,
  (VTBL_ENTRY)&_ZN6S188C63v19Ev,
  (VTBL_ENTRY)&_ZN6S188C63v20Ev,
  (VTBL_ENTRY)&_ZN6S188C63v21Ev,
  (VTBL_ENTRY)&_ZN6S188C63v22Ev,
  (VTBL_ENTRY)&_ZN6S188C63v23Ev,
  (VTBL_ENTRY)&_ZN6S188C63v24Ev,
  (VTBL_ENTRY)&_ZN6S188C63v25Ev,
  (VTBL_ENTRY)&_ZN6S188C63v26Ev,
  (VTBL_ENTRY)&_ZN6S188C63v27Ev,
  (VTBL_ENTRY)&_ZN6S188C63v28Ev,
  (VTBL_ENTRY)&_ZN6S188C63v29Ev,
  (VTBL_ENTRY)&_ZN6S188C63v30Ev,
  (VTBL_ENTRY)&_ZN6S188C63v31Ev,
  (VTBL_ENTRY)&_ZN6S188C63v32Ev,
  (VTBL_ENTRY)&_ZN6S188C63v33Ev,
  (VTBL_ENTRY)&_ZN6S188C63v34Ev,
  (VTBL_ENTRY)&_ZN6S188C63v35Ev,
  (VTBL_ENTRY)&_ZN6S188C63v36Ev,
  (VTBL_ENTRY)&_ZN6S188C63v37Ev,
  (VTBL_ENTRY)&_ZN6S188C63v38Ev,
  (VTBL_ENTRY)&_ZN6S188C63v39Ev,
  (VTBL_ENTRY)&_ZN6S188C63v40Ev,
  (VTBL_ENTRY)&_ZN6S188C63v41Ev,
  (VTBL_ENTRY)&_ZN6S188C63v42Ev,
  (VTBL_ENTRY)&_ZN6S188C63v43Ev,
  (VTBL_ENTRY)&_ZN6S188C63v44Ev,
  (VTBL_ENTRY)&_ZN6S188C63v45Ev,
  (VTBL_ENTRY)&_ZN6S188C63v46Ev,
  (VTBL_ENTRY)&_ZN6S188C63v47Ev,
  (VTBL_ENTRY)&_ZN6S188C63v48Ev,
  (VTBL_ENTRY)&_ZN6S188C63v49Ev,
  (VTBL_ENTRY)&_ZN6S188C63v50Ev,
  (VTBL_ENTRY)&_ZN6S188C63v51Ev,
  (VTBL_ENTRY)&_ZN6S188C63v52Ev,
  (VTBL_ENTRY)&_ZN6S188C63v53Ev,
  (VTBL_ENTRY)&_ZN6S188C63v54Ev,
  (VTBL_ENTRY)&_ZN6S188C63v55Ev,
  (VTBL_ENTRY)&_ZN6S188C63v56Ev,
  (VTBL_ENTRY)&_ZN6S188C63v57Ev,
  (VTBL_ENTRY)&_ZN6S188C63v58Ev,
  (VTBL_ENTRY)&_ZN6S188C63v59Ev,
  (VTBL_ENTRY)&_ZN6S188C63v60Ev,
  (VTBL_ENTRY)&_ZN6S188C63v61Ev,
  (VTBL_ENTRY)&_ZN6S188C63v62Ev,
  (VTBL_ENTRY)&_ZN6S188C63v63Ev,
  (VTBL_ENTRY)&_ZN6S188C63v64Ev,
  (VTBL_ENTRY)&_ZN6S188C63v65Ev,
  (VTBL_ENTRY)&_ZN6S188C63v66Ev,
  (VTBL_ENTRY)&_ZN6S188C63v67Ev,
  (VTBL_ENTRY)&_ZN6S188C53v68Ev,
  (VTBL_ENTRY)&_ZN6S188C53v69Ev,
  (VTBL_ENTRY)&_ZN6S188C53v70Ev,
  (VTBL_ENTRY)&_ZN6S188C53v71Ev,
  (VTBL_ENTRY)&_ZN6S188C53v72Ev,
  (VTBL_ENTRY)&_ZN6S188C53v73Ev,
  (VTBL_ENTRY)&_ZN6S188C53v74Ev,
  (VTBL_ENTRY)&_ZN6S188C53v75Ev,
  (VTBL_ENTRY)&_ZN6S188C53v76Ev,
  (VTBL_ENTRY)&_ZN6S188C53v77Ev,
  (VTBL_ENTRY)&_ZN6S188C53v78Ev,
  (VTBL_ENTRY)&_ZN6S188C53v79Ev,
  (VTBL_ENTRY)&_ZN6S188C53v80Ev,
  (VTBL_ENTRY)&_ZN6S188C53v81Ev,
  (VTBL_ENTRY)&_ZN6S188C53v82Ev,
  (VTBL_ENTRY)&_ZN6S188C53v83Ev,
  (VTBL_ENTRY)&_ZN6S188C53v84Ev,
  (VTBL_ENTRY)&_ZN6S188C53v85Ev,
  (VTBL_ENTRY)&_ZN6S188C53v86Ev,
  (VTBL_ENTRY)&_ZN6S188C53v87Ev,
  (VTBL_ENTRY)&_ZN6S188C53v88Ev,
  (VTBL_ENTRY)&_ZN6S188C53v89Ev,
  (VTBL_ENTRY)&_ZN6S188C53v90Ev,
  (VTBL_ENTRY)&_ZN6S188C53v91Ev,
  (VTBL_ENTRY)&_ZN6S188C53v92Ev,
  (VTBL_ENTRY)&_ZN6S188C53v93Ev,
  (VTBL_ENTRY)&_ZN6S188C53v94Ev,
};
extern VTBL_ENTRY _ZTI6S188C5[];
extern  VTBL_ENTRY _ZTV6S188C5[];
Class_Descriptor cd_S188C5 = {  "S188C5", // class name
  bases_S188C5, 1,
  &(vtc_S188C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S188C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S188C5),95, //virtual function table var
  2, // 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  S188C4  : S188C5 {
  ::S615C22_nt s188c4f0;
  unsigned int s188c4f1:1;
  virtual  ~S188C4(); // _ZN6S188C4D1Ev
  virtual void  v95(); // _ZN6S188C43v95Ev
  virtual void  v96(); // _ZN6S188C43v96Ev
  virtual void  v97(); // _ZN6S188C43v97Ev
  virtual void  v98(); // _ZN6S188C43v98Ev
  virtual void  v99(); // _ZN6S188C43v99Ev
  virtual void  v100(); // _ZN6S188C44v100Ev
  virtual void  v101(); // _ZN6S188C44v101Ev
  virtual void  v102(); // _ZN6S188C44v102Ev
  virtual void  v103(); // _ZN6S188C44v103Ev
  virtual void  v104(); // _ZN6S188C44v104Ev
  virtual void  v105(); // _ZN6S188C44v105Ev
  virtual void  v106(); // _ZN6S188C44v106Ev
  virtual void  v107(); // _ZN6S188C44v107Ev
  virtual void  v108(); // _ZN6S188C44v108Ev
  virtual void  v109(); // _ZN6S188C44v109Ev
  virtual void  v110(); // _ZN6S188C44v110Ev
  virtual void  v111(); // _ZN6S188C44v111Ev
  virtual void  v112(); // _ZN6S188C44v112Ev
  S188C4(); // tgen
};
//SIG(-1 S188C4) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S188C4 ::~S188C4(){ note_dtor("S188C4", this);}
void  S188C4 ::v95(){vfunc_called(this, "_ZN6S188C43v95Ev");}
void  S188C4 ::v96(){vfunc_called(this, "_ZN6S188C43v96Ev");}
void  S188C4 ::v97(){vfunc_called(this, "_ZN6S188C43v97Ev");}
void  S188C4 ::v98(){vfunc_called(this, "_ZN6S188C43v98Ev");}
void  S188C4 ::v99(){vfunc_called(this, "_ZN6S188C43v99Ev");}
void  S188C4 ::v100(){vfunc_called(this, "_ZN6S188C44v100Ev");}
void  S188C4 ::v101(){vfunc_called(this, "_ZN6S188C44v101Ev");}
void  S188C4 ::v102(){vfunc_called(this, "_ZN6S188C44v102Ev");}
void  S188C4 ::v103(){vfunc_called(this, "_ZN6S188C44v103Ev");}
void  S188C4 ::v104(){vfunc_called(this, "_ZN6S188C44v104Ev");}
void  S188C4 ::v105(){vfunc_called(this, "_ZN6S188C44v105Ev");}
void  S188C4 ::v106(){vfunc_called(this, "_ZN6S188C44v106Ev");}
void  S188C4 ::v107(){vfunc_called(this, "_ZN6S188C44v107Ev");}
void  S188C4 ::v108(){vfunc_called(this, "_ZN6S188C44v108Ev");}
void  S188C4 ::v109(){vfunc_called(this, "_ZN6S188C44v109Ev");}
void  S188C4 ::v110(){vfunc_called(this, "_ZN6S188C44v110Ev");}
void  S188C4 ::v111(){vfunc_called(this, "_ZN6S188C44v111Ev");}
void  S188C4 ::v112(){vfunc_called(this, "_ZN6S188C44v112Ev");}
S188C4 ::S188C4(){ note_ctor("S188C4", this);} // tgen

static void Test_S188C4()
{
  extern Class_Descriptor cd_S188C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S188C4, buf);
    S188C4 *dp, &lv = *(dp=new (buf) S188C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S188C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S188C4)");
    check_base_class_offset(lv, (S188C6*)(S188C5*), 0, "S188C4");
    check_base_class_offset(lv, (S188C5*), 0, "S188C4");
    check_field_offset(lv, s188c4f0, ABISELECT(232,180), "S188C4.s188c4f0");
    set_bf_and_test(lv, s188c4f1, ABISELECT(248,192), 0, 1, 1, "S188C4");
    test_class_info(&lv, &cd_S188C4);
    dp->~S188C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS188C4(Test_S188C4, "S188C4", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S188C4C1Ev();
extern void _ZN6S188C4D1Ev();
Name_Map name_map_S188C4[] = {
  NSPAIR(_ZN6S188C4C1Ev),
  NSPAIR(_ZN6S188C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S188C6;
extern VTBL_ENTRY _ZTI6S188C6[];
extern  VTBL_ENTRY _ZTV6S188C6[];
extern Class_Descriptor cd_S188C5;
extern VTBL_ENTRY _ZTI6S188C5[];
extern  VTBL_ENTRY _ZTV6S188C5[];
static Base_Class bases_S188C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S188C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S188C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S188C4[];
extern void _ZN6S188C4D1Ev();
extern void _ZN6S188C4D0Ev();
extern void _ZN6S188C62v4Ev();
extern void _ZN6S188C62v5Ev();
extern void _ZN6S188C62v6Ev();
extern void _ZN6S188C62v7Ev();
extern void _ZN6S188C62v8Ev();
extern void _ZN6S188C62v9Ev();
extern void _ZN6S188C63v10Ev();
extern void _ZN6S188C63v11Ev();
extern void _ZN6S188C63v12Ev();
extern void _ZN6S188C63v13Ev();
extern void _ZN6S188C63v14Ev();
extern void _ZN6S188C63v15Ev();
extern void _ZN6S188C63v16Ev();
extern void _ZN6S188C63v17Ev();
extern void _ZN6S188C63v18Ev();
extern void _ZN6S188C63v19Ev();
extern void _ZN6S188C63v20Ev();
extern void _ZN6S188C63v21Ev();
extern void _ZN6S188C63v22Ev();
extern void _ZN6S188C63v23Ev();
extern void _ZN6S188C63v24Ev();
extern void _ZN6S188C63v25Ev();
extern void _ZN6S188C63v26Ev();
extern void _ZN6S188C63v27Ev();
extern void _ZN6S188C63v28Ev();
extern void _ZN6S188C63v29Ev();
extern void _ZN6S188C63v30Ev();
extern void _ZN6S188C63v31Ev();
extern void _ZN6S188C63v32Ev();
extern void _ZN6S188C63v33Ev();
extern void _ZN6S188C63v34Ev();
extern void _ZN6S188C63v35Ev();
extern void _ZN6S188C63v36Ev();
extern void _ZN6S188C63v37Ev();
extern void _ZN6S188C63v38Ev();
extern void _ZN6S188C63v39Ev();
extern void _ZN6S188C63v40Ev();
extern void _ZN6S188C63v41Ev();
extern void _ZN6S188C63v42Ev();
extern void _ZN6S188C63v43Ev();
extern void _ZN6S188C63v44Ev();
extern void _ZN6S188C63v45Ev();
extern void _ZN6S188C63v46Ev();
extern void _ZN6S188C63v47Ev();
extern void _ZN6S188C63v48Ev();
extern void _ZN6S188C63v49Ev();
extern void _ZN6S188C63v50Ev();
extern void _ZN6S188C63v51Ev();
extern void _ZN6S188C63v52Ev();
extern void _ZN6S188C63v53Ev();
extern void _ZN6S188C63v54Ev();
extern void _ZN6S188C63v55Ev();
extern void _ZN6S188C63v56Ev();
extern void _ZN6S188C63v57Ev();
extern void _ZN6S188C63v58Ev();
extern void _ZN6S188C63v59Ev();
extern void _ZN6S188C63v60Ev();
extern void _ZN6S188C63v61Ev();
extern void _ZN6S188C63v62Ev();
extern void _ZN6S188C63v63Ev();
extern void _ZN6S188C63v64Ev();
extern void _ZN6S188C63v65Ev();
extern void _ZN6S188C63v66Ev();
extern void _ZN6S188C63v67Ev();
extern void _ZN6S188C53v68Ev();
extern void _ZN6S188C53v69Ev();
extern void _ZN6S188C53v70Ev();
extern void _ZN6S188C53v71Ev();
extern void _ZN6S188C53v72Ev();
extern void _ZN6S188C53v73Ev();
extern void _ZN6S188C53v74Ev();
extern void _ZN6S188C53v75Ev();
extern void _ZN6S188C53v76Ev();
extern void _ZN6S188C53v77Ev();
extern void _ZN6S188C53v78Ev();
extern void _ZN6S188C53v79Ev();
extern void _ZN6S188C53v80Ev();
extern void _ZN6S188C53v81Ev();
extern void _ZN6S188C53v82Ev();
extern void _ZN6S188C53v83Ev();
extern void _ZN6S188C53v84Ev();
extern void _ZN6S188C53v85Ev();
extern void _ZN6S188C53v86Ev();
extern void _ZN6S188C53v87Ev();
extern void _ZN6S188C53v88Ev();
extern void _ZN6S188C53v89Ev();
extern void _ZN6S188C53v90Ev();
extern void _ZN6S188C53v91Ev();
extern void _ZN6S188C53v92Ev();
extern void _ZN6S188C53v93Ev();
extern void _ZN6S188C53v94Ev();
extern void _ZN6S188C43v95Ev();
extern void _ZN6S188C43v96Ev();
extern void _ZN6S188C43v97Ev();
extern void _ZN6S188C43v98Ev();
extern void _ZN6S188C43v99Ev();
extern void _ZN6S188C44v100Ev();
extern void _ZN6S188C44v101Ev();
extern void _ZN6S188C44v102Ev();
extern void _ZN6S188C44v103Ev();
extern void _ZN6S188C44v104Ev();
extern void _ZN6S188C44v105Ev();
extern void _ZN6S188C44v106Ev();
extern void _ZN6S188C44v107Ev();
extern void _ZN6S188C44v108Ev();
extern void _ZN6S188C44v109Ev();
extern void _ZN6S188C44v110Ev();
extern void _ZN6S188C44v111Ev();
extern void _ZN6S188C44v112Ev();
static  VTBL_ENTRY vtc_S188C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S188C4[0]),
  (VTBL_ENTRY)&_ZN6S188C4D1Ev,
  (VTBL_ENTRY)&_ZN6S188C4D0Ev,
  (VTBL_ENTRY)&_ZN6S188C62v4Ev,
  (VTBL_ENTRY)&_ZN6S188C62v5Ev,
  (VTBL_ENTRY)&_ZN6S188C62v6Ev,
  (VTBL_ENTRY)&_ZN6S188C62v7Ev,
  (VTBL_ENTRY)&_ZN6S188C62v8Ev,
  (VTBL_ENTRY)&_ZN6S188C62v9Ev,
  (VTBL_ENTRY)&_ZN6S188C63v10Ev,
  (VTBL_ENTRY)&_ZN6S188C63v11Ev,
  (VTBL_ENTRY)&_ZN6S188C63v12Ev,
  (VTBL_ENTRY)&_ZN6S188C63v13Ev,
  (VTBL_ENTRY)&_ZN6S188C63v14Ev,
  (VTBL_ENTRY)&_ZN6S188C63v15Ev,
  (VTBL_ENTRY)&_ZN6S188C63v16Ev,
  (VTBL_ENTRY)&_ZN6S188C63v17Ev,
  (VTBL_ENTRY)&_ZN6S188C63v18Ev,
  (VTBL_ENTRY)&_ZN6S188C63v19Ev,
  (VTBL_ENTRY)&_ZN6S188C63v20Ev,
  (VTBL_ENTRY)&_ZN6S188C63v21Ev,
  (VTBL_ENTRY)&_ZN6S188C63v22Ev,
  (VTBL_ENTRY)&_ZN6S188C63v23Ev,
  (VTBL_ENTRY)&_ZN6S188C63v24Ev,
  (VTBL_ENTRY)&_ZN6S188C63v25Ev,
  (VTBL_ENTRY)&_ZN6S188C63v26Ev,
  (VTBL_ENTRY)&_ZN6S188C63v27Ev,
  (VTBL_ENTRY)&_ZN6S188C63v28Ev,
  (VTBL_ENTRY)&_ZN6S188C63v29Ev,
  (VTBL_ENTRY)&_ZN6S188C63v30Ev,
  (VTBL_ENTRY)&_ZN6S188C63v31Ev,
  (VTBL_ENTRY)&_ZN6S188C63v32Ev,
  (VTBL_ENTRY)&_ZN6S188C63v33Ev,
  (VTBL_ENTRY)&_ZN6S188C63v34Ev,
  (VTBL_ENTRY)&_ZN6S188C63v35Ev,
  (VTBL_ENTRY)&_ZN6S188C63v36Ev,
  (VTBL_ENTRY)&_ZN6S188C63v37Ev,
  (VTBL_ENTRY)&_ZN6S188C63v38Ev,
  (VTBL_ENTRY)&_ZN6S188C63v39Ev,
  (VTBL_ENTRY)&_ZN6S188C63v40Ev,
  (VTBL_ENTRY)&_ZN6S188C63v41Ev,
  (VTBL_ENTRY)&_ZN6S188C63v42Ev,
  (VTBL_ENTRY)&_ZN6S188C63v43Ev,
  (VTBL_ENTRY)&_ZN6S188C63v44Ev,
  (VTBL_ENTRY)&_ZN6S188C63v45Ev,
  (VTBL_ENTRY)&_ZN6S188C63v46Ev,
  (VTBL_ENTRY)&_ZN6S188C63v47Ev,
  (VTBL_ENTRY)&_ZN6S188C63v48Ev,
  (VTBL_ENTRY)&_ZN6S188C63v49Ev,
  (VTBL_ENTRY)&_ZN6S188C63v50Ev,
  (VTBL_ENTRY)&_ZN6S188C63v51Ev,
  (VTBL_ENTRY)&_ZN6S188C63v52Ev,
  (VTBL_ENTRY)&_ZN6S188C63v53Ev,
  (VTBL_ENTRY)&_ZN6S188C63v54Ev,
  (VTBL_ENTRY)&_ZN6S188C63v55Ev,
  (VTBL_ENTRY)&_ZN6S188C63v56Ev,
  (VTBL_ENTRY)&_ZN6S188C63v57Ev,
  (VTBL_ENTRY)&_ZN6S188C63v58Ev,
  (VTBL_ENTRY)&_ZN6S188C63v59Ev,
  (VTBL_ENTRY)&_ZN6S188C63v60Ev,
  (VTBL_ENTRY)&_ZN6S188C63v61Ev,
  (VTBL_ENTRY)&_ZN6S188C63v62Ev,
  (VTBL_ENTRY)&_ZN6S188C63v63Ev,
  (VTBL_ENTRY)&_ZN6S188C63v64Ev,
  (VTBL_ENTRY)&_ZN6S188C63v65Ev,
  (VTBL_ENTRY)&_ZN6S188C63v66Ev,
  (VTBL_ENTRY)&_ZN6S188C63v67Ev,
  (VTBL_ENTRY)&_ZN6S188C53v68Ev,
  (VTBL_ENTRY)&_ZN6S188C53v69Ev,
  (VTBL_ENTRY)&_ZN6S188C53v70Ev,
  (VTBL_ENTRY)&_ZN6S188C53v71Ev,
  (VTBL_ENTRY)&_ZN6S188C53v72Ev,
  (VTBL_ENTRY)&_ZN6S188C53v73Ev,
  (VTBL_ENTRY)&_ZN6S188C53v74Ev,
  (VTBL_ENTRY)&_ZN6S188C53v75Ev,
  (VTBL_ENTRY)&_ZN6S188C53v76Ev,
  (VTBL_ENTRY)&_ZN6S188C53v77Ev,
  (VTBL_ENTRY)&_ZN6S188C53v78Ev,
  (VTBL_ENTRY)&_ZN6S188C53v79Ev,
  (VTBL_ENTRY)&_ZN6S188C53v80Ev,
  (VTBL_ENTRY)&_ZN6S188C53v81Ev,
  (VTBL_ENTRY)&_ZN6S188C53v82Ev,
  (VTBL_ENTRY)&_ZN6S188C53v83Ev,
  (VTBL_ENTRY)&_ZN6S188C53v84Ev,
  (VTBL_ENTRY)&_ZN6S188C53v85Ev,
  (VTBL_ENTRY)&_ZN6S188C53v86Ev,
  (VTBL_ENTRY)&_ZN6S188C53v87Ev,
  (VTBL_ENTRY)&_ZN6S188C53v88Ev,
  (VTBL_ENTRY)&_ZN6S188C53v89Ev,
  (VTBL_ENTRY)&_ZN6S188C53v90Ev,
  (VTBL_ENTRY)&_ZN6S188C53v91Ev,
  (VTBL_ENTRY)&_ZN6S188C53v92Ev,
  (VTBL_ENTRY)&_ZN6S188C53v93Ev,
  (VTBL_ENTRY)&_ZN6S188C53v94Ev,
  (VTBL_ENTRY)&_ZN6S188C43v95Ev,
  (VTBL_ENTRY)&_ZN6S188C43v96Ev,
  (VTBL_ENTRY)&_ZN6S188C43v97Ev,
  (VTBL_ENTRY)&_ZN6S188C43v98Ev,
  (VTBL_ENTRY)&_ZN6S188C43v99Ev,
  (VTBL_ENTRY)&_ZN6S188C44v100Ev,
  (VTBL_ENTRY)&_ZN6S188C44v101Ev,
  (VTBL_ENTRY)&_ZN6S188C44v102Ev,
  (VTBL_ENTRY)&_ZN6S188C44v103Ev,
  (VTBL_ENTRY)&_ZN6S188C44v104Ev,
  (VTBL_ENTRY)&_ZN6S188C44v105Ev,
  (VTBL_ENTRY)&_ZN6S188C44v106Ev,
  (VTBL_ENTRY)&_ZN6S188C44v107Ev,
  (VTBL_ENTRY)&_ZN6S188C44v108Ev,
  (VTBL_ENTRY)&_ZN6S188C44v109Ev,
  (VTBL_ENTRY)&_ZN6S188C44v110Ev,
  (VTBL_ENTRY)&_ZN6S188C44v111Ev,
  (VTBL_ENTRY)&_ZN6S188C44v112Ev,
};
extern VTBL_ENTRY _ZTI6S188C4[];
extern  VTBL_ENTRY _ZTV6S188C4[];
Class_Descriptor cd_S188C4 = {  "S188C4", // class name
  bases_S188C4, 2,
  &(vtc_S188C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S188C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S188C4),113, //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  S188C3  : S188C4 {
  ::S165C27 s188c3f0;
  int s188c3f1[2];
  unsigned int s188c3f2:1;
  virtual  ~S188C3(); // _ZN6S188C3D1Ev
  virtual void  v113(); // _ZN6S188C34v113Ev
  virtual void  v114(); // _ZN6S188C34v114Ev
  virtual void  v115(); // _ZN6S188C34v115Ev
  virtual void  v116(); // _ZN6S188C34v116Ev
  virtual void  v117(); // _ZN6S188C34v117Ev
  virtual void  v118(); // _ZN6S188C34v118Ev
  virtual void  v119(); // _ZN6S188C34v119Ev
  S188C3(); // tgen
};
//SIG(-1 S188C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 FC16{ BC17{ BC8}} Fi[2] Fi:1}


 S188C3 ::~S188C3(){ note_dtor("S188C3", this);}
void  S188C3 ::v113(){vfunc_called(this, "_ZN6S188C34v113Ev");}
void  S188C3 ::v114(){vfunc_called(this, "_ZN6S188C34v114Ev");}
void  S188C3 ::v115(){vfunc_called(this, "_ZN6S188C34v115Ev");}
void  S188C3 ::v116(){vfunc_called(this, "_ZN6S188C34v116Ev");}
void  S188C3 ::v117(){vfunc_called(this, "_ZN6S188C34v117Ev");}
void  S188C3 ::v118(){vfunc_called(this, "_ZN6S188C34v118Ev");}
void  S188C3 ::v119(){vfunc_called(this, "_ZN6S188C34v119Ev");}
S188C3 ::S188C3(){ note_ctor("S188C3", this);} // tgen

static void Test_S188C3()
{
  extern Class_Descriptor cd_S188C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,56)];
    init_test(&cd_S188C3, buf);
    S188C3 *dp, &lv = *(dp=new (buf) S188C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,220), "sizeof(S188C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S188C3)");
    check_base_class_offset(lv, (S188C6*)(S188C5*)(S188C4*), 0, "S188C3");
    check_base_class_offset(lv, (S188C5*)(S188C4*), 0, "S188C3");
    check_base_class_offset(lv, (S188C4*), 0, "S188C3");
    check_field_offset(lv, s188c3f0, ABISELECT(256,196), "S188C3.s188c3f0");
    check_field_offset(lv, s188c3f1, ABISELECT(272,208), "S188C3.s188c3f1");
    set_bf_and_test(lv, s188c3f2, ABISELECT(280,216), 0, 1, 1, "S188C3");
    test_class_info(&lv, &cd_S188C3);
    dp->~S188C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS188C3(Test_S188C3, "S188C3", ABISELECT(288,220));

#else // __cplusplus

extern void _ZN6S188C3C1Ev();
extern void _ZN6S188C3D1Ev();
Name_Map name_map_S188C3[] = {
  NSPAIR(_ZN6S188C3C1Ev),
  NSPAIR(_ZN6S188C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S188C6;
extern VTBL_ENTRY _ZTI6S188C6[];
extern  VTBL_ENTRY _ZTV6S188C6[];
extern Class_Descriptor cd_S188C5;
extern VTBL_ENTRY _ZTI6S188C5[];
extern  VTBL_ENTRY _ZTV6S188C5[];
extern Class_Descriptor cd_S188C4;
extern VTBL_ENTRY _ZTI6S188C4[];
extern  VTBL_ENTRY _ZTV6S188C4[];
static Base_Class bases_S188C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S188C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S188C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S188C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S188C3[];
extern void _ZN6S188C3D1Ev();
extern void _ZN6S188C3D0Ev();
extern void _ZN6S188C62v4Ev();
extern void _ZN6S188C62v5Ev();
extern void _ZN6S188C62v6Ev();
extern void _ZN6S188C62v7Ev();
extern void _ZN6S188C62v8Ev();
extern void _ZN6S188C62v9Ev();
extern void _ZN6S188C63v10Ev();
extern void _ZN6S188C63v11Ev();
extern void _ZN6S188C63v12Ev();
extern void _ZN6S188C63v13Ev();
extern void _ZN6S188C63v14Ev();
extern void _ZN6S188C63v15Ev();
extern void _ZN6S188C63v16Ev();
extern void _ZN6S188C63v17Ev();
extern void _ZN6S188C63v18Ev();
extern void _ZN6S188C63v19Ev();
extern void _ZN6S188C63v20Ev();
extern void _ZN6S188C63v21Ev();
extern void _ZN6S188C63v22Ev();
extern void _ZN6S188C63v23Ev();
extern void _ZN6S188C63v24Ev();
extern void _ZN6S188C63v25Ev();
extern void _ZN6S188C63v26Ev();
extern void _ZN6S188C63v27Ev();
extern void _ZN6S188C63v28Ev();
extern void _ZN6S188C63v29Ev();
extern void _ZN6S188C63v30Ev();
extern void _ZN6S188C63v31Ev();
extern void _ZN6S188C63v32Ev();
extern void _ZN6S188C63v33Ev();
extern void _ZN6S188C63v34Ev();
extern void _ZN6S188C63v35Ev();
extern void _ZN6S188C63v36Ev();
extern void _ZN6S188C63v37Ev();
extern void _ZN6S188C63v38Ev();
extern void _ZN6S188C63v39Ev();
extern void _ZN6S188C63v40Ev();
extern void _ZN6S188C63v41Ev();
extern void _ZN6S188C63v42Ev();
extern void _ZN6S188C63v43Ev();
extern void _ZN6S188C63v44Ev();
extern void _ZN6S188C63v45Ev();
extern void _ZN6S188C63v46Ev();
extern void _ZN6S188C63v47Ev();
extern void _ZN6S188C63v48Ev();
extern void _ZN6S188C63v49Ev();
extern void _ZN6S188C63v50Ev();
extern void _ZN6S188C63v51Ev();
extern void _ZN6S188C63v52Ev();
extern void _ZN6S188C63v53Ev();
extern void _ZN6S188C63v54Ev();
extern void _ZN6S188C63v55Ev();
extern void _ZN6S188C63v56Ev();
extern void _ZN6S188C63v57Ev();
extern void _ZN6S188C63v58Ev();
extern void _ZN6S188C63v59Ev();
extern void _ZN6S188C63v60Ev();
extern void _ZN6S188C63v61Ev();
extern void _ZN6S188C63v62Ev();
extern void _ZN6S188C63v63Ev();
extern void _ZN6S188C63v64Ev();
extern void _ZN6S188C63v65Ev();
extern void _ZN6S188C63v66Ev();
extern void _ZN6S188C63v67Ev();
extern void _ZN6S188C53v68Ev();
extern void _ZN6S188C53v69Ev();
extern void _ZN6S188C53v70Ev();
extern void _ZN6S188C53v71Ev();
extern void _ZN6S188C53v72Ev();
extern void _ZN6S188C53v73Ev();
extern void _ZN6S188C53v74Ev();
extern void _ZN6S188C53v75Ev();
extern void _ZN6S188C53v76Ev();
extern void _ZN6S188C53v77Ev();
extern void _ZN6S188C53v78Ev();
extern void _ZN6S188C53v79Ev();
extern void _ZN6S188C53v80Ev();
extern void _ZN6S188C53v81Ev();
extern void _ZN6S188C53v82Ev();
extern void _ZN6S188C53v83Ev();
extern void _ZN6S188C53v84Ev();
extern void _ZN6S188C53v85Ev();
extern void _ZN6S188C53v86Ev();
extern void _ZN6S188C53v87Ev();
extern void _ZN6S188C53v88Ev();
extern void _ZN6S188C53v89Ev();
extern void _ZN6S188C53v90Ev();
extern void _ZN6S188C53v91Ev();
extern void _ZN6S188C53v92Ev();
extern void _ZN6S188C53v93Ev();
extern void _ZN6S188C53v94Ev();
extern void _ZN6S188C43v95Ev();
extern void _ZN6S188C43v96Ev();
extern void _ZN6S188C43v97Ev();
extern void _ZN6S188C43v98Ev();
extern void _ZN6S188C43v99Ev();
extern void _ZN6S188C44v100Ev();
extern void _ZN6S188C44v101Ev();
extern void _ZN6S188C44v102Ev();
extern void _ZN6S188C44v103Ev();
extern void _ZN6S188C44v104Ev();
extern void _ZN6S188C44v105Ev();
extern void _ZN6S188C44v106Ev();
extern void _ZN6S188C44v107Ev();
extern void _ZN6S188C44v108Ev();
extern void _ZN6S188C44v109Ev();
extern void _ZN6S188C44v110Ev();
extern void _ZN6S188C44v111Ev();
extern void _ZN6S188C44v112Ev();
extern void _ZN6S188C34v113Ev();
extern void _ZN6S188C34v114Ev();
extern void _ZN6S188C34v115Ev();
extern void _ZN6S188C34v116Ev();
extern void _ZN6S188C34v117Ev();
extern void _ZN6S188C34v118Ev();
extern void _ZN6S188C34v119Ev();
static  VTBL_ENTRY vtc_S188C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S188C3[0]),
  (VTBL_ENTRY)&_ZN6S188C3D1Ev,
  (VTBL_ENTRY)&_ZN6S188C3D0Ev,
  (VTBL_ENTRY)&_ZN6S188C62v4Ev,
  (VTBL_ENTRY)&_ZN6S188C62v5Ev,
  (VTBL_ENTRY)&_ZN6S188C62v6Ev,
  (VTBL_ENTRY)&_ZN6S188C62v7Ev,
  (VTBL_ENTRY)&_ZN6S188C62v8Ev,
  (VTBL_ENTRY)&_ZN6S188C62v9Ev,
  (VTBL_ENTRY)&_ZN6S188C63v10Ev,
  (VTBL_ENTRY)&_ZN6S188C63v11Ev,
  (VTBL_ENTRY)&_ZN6S188C63v12Ev,
  (VTBL_ENTRY)&_ZN6S188C63v13Ev,
  (VTBL_ENTRY)&_ZN6S188C63v14Ev,
  (VTBL_ENTRY)&_ZN6S188C63v15Ev,
  (VTBL_ENTRY)&_ZN6S188C63v16Ev,
  (VTBL_ENTRY)&_ZN6S188C63v17Ev,
  (VTBL_ENTRY)&_ZN6S188C63v18Ev,
  (VTBL_ENTRY)&_ZN6S188C63v19Ev,
  (VTBL_ENTRY)&_ZN6S188C63v20Ev,
  (VTBL_ENTRY)&_ZN6S188C63v21Ev,
  (VTBL_ENTRY)&_ZN6S188C63v22Ev,
  (VTBL_ENTRY)&_ZN6S188C63v23Ev,
  (VTBL_ENTRY)&_ZN6S188C63v24Ev,
  (VTBL_ENTRY)&_ZN6S188C63v25Ev,
  (VTBL_ENTRY)&_ZN6S188C63v26Ev,
  (VTBL_ENTRY)&_ZN6S188C63v27Ev,
  (VTBL_ENTRY)&_ZN6S188C63v28Ev,
  (VTBL_ENTRY)&_ZN6S188C63v29Ev,
  (VTBL_ENTRY)&_ZN6S188C63v30Ev,
  (VTBL_ENTRY)&_ZN6S188C63v31Ev,
  (VTBL_ENTRY)&_ZN6S188C63v32Ev,
  (VTBL_ENTRY)&_ZN6S188C63v33Ev,
  (VTBL_ENTRY)&_ZN6S188C63v34Ev,
  (VTBL_ENTRY)&_ZN6S188C63v35Ev,
  (VTBL_ENTRY)&_ZN6S188C63v36Ev,
  (VTBL_ENTRY)&_ZN6S188C63v37Ev,
  (VTBL_ENTRY)&_ZN6S188C63v38Ev,
  (VTBL_ENTRY)&_ZN6S188C63v39Ev,
  (VTBL_ENTRY)&_ZN6S188C63v40Ev,
  (VTBL_ENTRY)&_ZN6S188C63v41Ev,
  (VTBL_ENTRY)&_ZN6S188C63v42Ev,
  (VTBL_ENTRY)&_ZN6S188C63v43Ev,
  (VTBL_ENTRY)&_ZN6S188C63v44Ev,
  (VTBL_ENTRY)&_ZN6S188C63v45Ev,
  (VTBL_ENTRY)&_ZN6S188C63v46Ev,
  (VTBL_ENTRY)&_ZN6S188C63v47Ev,
  (VTBL_ENTRY)&_ZN6S188C63v48Ev,
  (VTBL_ENTRY)&_ZN6S188C63v49Ev,
  (VTBL_ENTRY)&_ZN6S188C63v50Ev,
  (VTBL_ENTRY)&_ZN6S188C63v51Ev,
  (VTBL_ENTRY)&_ZN6S188C63v52Ev,
  (VTBL_ENTRY)&_ZN6S188C63v53Ev,
  (VTBL_ENTRY)&_ZN6S188C63v54Ev,
  (VTBL_ENTRY)&_ZN6S188C63v55Ev,
  (VTBL_ENTRY)&_ZN6S188C63v56Ev,
  (VTBL_ENTRY)&_ZN6S188C63v57Ev,
  (VTBL_ENTRY)&_ZN6S188C63v58Ev,
  (VTBL_ENTRY)&_ZN6S188C63v59Ev,
  (VTBL_ENTRY)&_ZN6S188C63v60Ev,
  (VTBL_ENTRY)&_ZN6S188C63v61Ev,
  (VTBL_ENTRY)&_ZN6S188C63v62Ev,
  (VTBL_ENTRY)&_ZN6S188C63v63Ev,
  (VTBL_ENTRY)&_ZN6S188C63v64Ev,
  (VTBL_ENTRY)&_ZN6S188C63v65Ev,
  (VTBL_ENTRY)&_ZN6S188C63v66Ev,
  (VTBL_ENTRY)&_ZN6S188C63v67Ev,
  (VTBL_ENTRY)&_ZN6S188C53v68Ev,
  (VTBL_ENTRY)&_ZN6S188C53v69Ev,
  (VTBL_ENTRY)&_ZN6S188C53v70Ev,
  (VTBL_ENTRY)&_ZN6S188C53v71Ev,
  (VTBL_ENTRY)&_ZN6S188C53v72Ev,
  (VTBL_ENTRY)&_ZN6S188C53v73Ev,
  (VTBL_ENTRY)&_ZN6S188C53v74Ev,
  (VTBL_ENTRY)&_ZN6S188C53v75Ev,
  (VTBL_ENTRY)&_ZN6S188C53v76Ev,
  (VTBL_ENTRY)&_ZN6S188C53v77Ev,
  (VTBL_ENTRY)&_ZN6S188C53v78Ev,
  (VTBL_ENTRY)&_ZN6S188C53v79Ev,
  (VTBL_ENTRY)&_ZN6S188C53v80Ev,
  (VTBL_ENTRY)&_ZN6S188C53v81Ev,
  (VTBL_ENTRY)&_ZN6S188C53v82Ev,
  (VTBL_ENTRY)&_ZN6S188C53v83Ev,
  (VTBL_ENTRY)&_ZN6S188C53v84Ev,
  (VTBL_ENTRY)&_ZN6S188C53v85Ev,
  (VTBL_ENTRY)&_ZN6S188C53v86Ev,
  (VTBL_ENTRY)&_ZN6S188C53v87Ev,
  (VTBL_ENTRY)&_ZN6S188C53v88Ev,
  (VTBL_ENTRY)&_ZN6S188C53v89Ev,
  (VTBL_ENTRY)&_ZN6S188C53v90Ev,
  (VTBL_ENTRY)&_ZN6S188C53v91Ev,
  (VTBL_ENTRY)&_ZN6S188C53v92Ev,
  (VTBL_ENTRY)&_ZN6S188C53v93Ev,
  (VTBL_ENTRY)&_ZN6S188C53v94Ev,
  (VTBL_ENTRY)&_ZN6S188C43v95Ev,
  (VTBL_ENTRY)&_ZN6S188C43v96Ev,
  (VTBL_ENTRY)&_ZN6S188C43v97Ev,
  (VTBL_ENTRY)&_ZN6S188C43v98Ev,
  (VTBL_ENTRY)&_ZN6S188C43v99Ev,
  (VTBL_ENTRY)&_ZN6S188C44v100Ev,
  (VTBL_ENTRY)&_ZN6S188C44v101Ev,
  (VTBL_ENTRY)&_ZN6S188C44v102Ev,
  (VTBL_ENTRY)&_ZN6S188C44v103Ev,
  (VTBL_ENTRY)&_ZN6S188C44v104Ev,
  (VTBL_ENTRY)&_ZN6S188C44v105Ev,
  (VTBL_ENTRY)&_ZN6S188C44v106Ev,
  (VTBL_ENTRY)&_ZN6S188C44v107Ev,
  (VTBL_ENTRY)&_ZN6S188C44v108Ev,
  (VTBL_ENTRY)&_ZN6S188C44v109Ev,
  (VTBL_ENTRY)&_ZN6S188C44v110Ev,
  (VTBL_ENTRY)&_ZN6S188C44v111Ev,
  (VTBL_ENTRY)&_ZN6S188C44v112Ev,
  (VTBL_ENTRY)&_ZN6S188C34v113Ev,
  (VTBL_ENTRY)&_ZN6S188C34v114Ev,
  (VTBL_ENTRY)&_ZN6S188C34v115Ev,
  (VTBL_ENTRY)&_ZN6S188C34v116Ev,
  (VTBL_ENTRY)&_ZN6S188C34v117Ev,
  (VTBL_ENTRY)&_ZN6S188C34v118Ev,
  (VTBL_ENTRY)&_ZN6S188C34v119Ev,
};
extern VTBL_ENTRY _ZTI6S188C3[];
extern  VTBL_ENTRY _ZTV6S188C3[];
Class_Descriptor cd_S188C3 = {  "S188C3", // class name
  bases_S188C3, 3,
  &(vtc_S188C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,220), // object size
  NSPAIRA(_ZTI6S188C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S188C3),120, //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  S188C2  : S188C3 {
  int s188c2f0;
  ::S165C27 s188c2f1;
  int s188c2f2;
  virtual  ~S188C2(); // _ZN6S188C2D1Ev
  virtual void  v120(); // _ZN6S188C24v120Ev
  virtual void  v121(); // _ZN6S188C24v121Ev
  virtual void  v122(); // _ZN6S188C24v122Ev
  virtual void  v123(); // _ZN6S188C24v123Ev
  virtual void  v124(); // _ZN6S188C24v124Ev
  virtual void  v125(); // _ZN6S188C24v125Ev
  S188C2(); // tgen
};
//SIG(-1 S188C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v93 v94 v95 v96 v97 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC15{ BC16{ BC9}} Fi:1} vd v116 v117 v118 v119 v120 v121 v122 FC17{ BC18{ BC9}} Fi[2] Fi:1} vd v1 v2 v3 v4 v5 v6 Fi FC17 Fi}


 S188C2 ::~S188C2(){ note_dtor("S188C2", this);}
void  S188C2 ::v120(){vfunc_called(this, "_ZN6S188C24v120Ev");}
void  S188C2 ::v121(){vfunc_called(this, "_ZN6S188C24v121Ev");}
void  S188C2 ::v122(){vfunc_called(this, "_ZN6S188C24v122Ev");}
void  S188C2 ::v123(){vfunc_called(this, "_ZN6S188C24v123Ev");}
void  S188C2 ::v124(){vfunc_called(this, "_ZN6S188C24v124Ev");}
void  S188C2 ::v125(){vfunc_called(this, "_ZN6S188C24v125Ev");}
S188C2 ::S188C2(){ note_ctor("S188C2", this);} // tgen

static void Test_S188C2()
{
  extern Class_Descriptor cd_S188C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,61)];
    init_test(&cd_S188C2, buf);
    S188C2 *dp, &lv = *(dp=new (buf) S188C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,240), "sizeof(S188C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S188C2)");
    check_base_class_offset(lv, (S188C6*)(S188C5*)(S188C4*)(S188C3*), 0, "S188C2");
    check_base_class_offset(lv, (S188C5*)(S188C4*)(S188C3*), 0, "S188C2");
    check_base_class_offset(lv, (S188C4*)(S188C3*), 0, "S188C2");
    check_base_class_offset(lv, (S188C3*), 0, "S188C2");
    check_field_offset(lv, s188c2f0, ABISELECT(284,220), "S188C2.s188c2f0");
    check_field_offset(lv, s188c2f1, ABISELECT(288,224), "S188C2.s188c2f1");
    check_field_offset(lv, s188c2f2, ABISELECT(304,236), "S188C2.s188c2f2");
    test_class_info(&lv, &cd_S188C2);
    dp->~S188C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS188C2(Test_S188C2, "S188C2", ABISELECT(312,240));

#else // __cplusplus

extern void _ZN6S188C2C1Ev();
extern void _ZN6S188C2D1Ev();
Name_Map name_map_S188C2[] = {
  NSPAIR(_ZN6S188C2C1Ev),
  NSPAIR(_ZN6S188C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S188C6;
extern VTBL_ENTRY _ZTI6S188C6[];
extern  VTBL_ENTRY _ZTV6S188C6[];
extern Class_Descriptor cd_S188C5;
extern VTBL_ENTRY _ZTI6S188C5[];
extern  VTBL_ENTRY _ZTV6S188C5[];
extern Class_Descriptor cd_S188C4;
extern VTBL_ENTRY _ZTI6S188C4[];
extern  VTBL_ENTRY _ZTV6S188C4[];
extern Class_Descriptor cd_S188C3;
extern VTBL_ENTRY _ZTI6S188C3[];
extern  VTBL_ENTRY _ZTV6S188C3[];
static Base_Class bases_S188C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S188C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S188C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S188C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S188C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S188C2[];
extern void _ZN6S188C2D1Ev();
extern void _ZN6S188C2D0Ev();
extern void _ZN6S188C62v4Ev();
extern void _ZN6S188C62v5Ev();
extern void _ZN6S188C62v6Ev();
extern void _ZN6S188C62v7Ev();
extern void _ZN6S188C62v8Ev();
extern void _ZN6S188C62v9Ev();
extern void _ZN6S188C63v10Ev();
extern void _ZN6S188C63v11Ev();
extern void _ZN6S188C63v12Ev();
extern void _ZN6S188C63v13Ev();
extern void _ZN6S188C63v14Ev();
extern void _ZN6S188C63v15Ev();
extern void _ZN6S188C63v16Ev();
extern void _ZN6S188C63v17Ev();
extern void _ZN6S188C63v18Ev();
extern void _ZN6S188C63v19Ev();
extern void _ZN6S188C63v20Ev();
extern void _ZN6S188C63v21Ev();
extern void _ZN6S188C63v22Ev();
extern void _ZN6S188C63v23Ev();
extern void _ZN6S188C63v24Ev();
extern void _ZN6S188C63v25Ev();
extern void _ZN6S188C63v26Ev();
extern void _ZN6S188C63v27Ev();
extern void _ZN6S188C63v28Ev();
extern void _ZN6S188C63v29Ev();
extern void _ZN6S188C63v30Ev();
extern void _ZN6S188C63v31Ev();
extern void _ZN6S188C63v32Ev();
extern void _ZN6S188C63v33Ev();
extern void _ZN6S188C63v34Ev();
extern void _ZN6S188C63v35Ev();
extern void _ZN6S188C63v36Ev();
extern void _ZN6S188C63v37Ev();
extern void _ZN6S188C63v38Ev();
extern void _ZN6S188C63v39Ev();
extern void _ZN6S188C63v40Ev();
extern void _ZN6S188C63v41Ev();
extern void _ZN6S188C63v42Ev();
extern void _ZN6S188C63v43Ev();
extern void _ZN6S188C63v44Ev();
extern void _ZN6S188C63v45Ev();
extern void _ZN6S188C63v46Ev();
extern void _ZN6S188C63v47Ev();
extern void _ZN6S188C63v48Ev();
extern void _ZN6S188C63v49Ev();
extern void _ZN6S188C63v50Ev();
extern void _ZN6S188C63v51Ev();
extern void _ZN6S188C63v52Ev();
extern void _ZN6S188C63v53Ev();
extern void _ZN6S188C63v54Ev();
extern void _ZN6S188C63v55Ev();
extern void _ZN6S188C63v56Ev();
extern void _ZN6S188C63v57Ev();
extern void _ZN6S188C63v58Ev();
extern void _ZN6S188C63v59Ev();
extern void _ZN6S188C63v60Ev();
extern void _ZN6S188C63v61Ev();
extern void _ZN6S188C63v62Ev();
extern void _ZN6S188C63v63Ev();
extern void _ZN6S188C63v64Ev();
extern void _ZN6S188C63v65Ev();
extern void _ZN6S188C63v66Ev();
extern void _ZN6S188C63v67Ev();
extern void _ZN6S188C53v68Ev();
extern void _ZN6S188C53v69Ev();
extern void _ZN6S188C53v70Ev();
extern void _ZN6S188C53v71Ev();
extern void _ZN6S188C53v72Ev();
extern void _ZN6S188C53v73Ev();
extern void _ZN6S188C53v74Ev();
extern void _ZN6S188C53v75Ev();
extern void _ZN6S188C53v76Ev();
extern void _ZN6S188C53v77Ev();
extern void _ZN6S188C53v78Ev();
extern void _ZN6S188C53v79Ev();
extern void _ZN6S188C53v80Ev();
extern void _ZN6S188C53v81Ev();
extern void _ZN6S188C53v82Ev();
extern void _ZN6S188C53v83Ev();
extern void _ZN6S188C53v84Ev();
extern void _ZN6S188C53v85Ev();
extern void _ZN6S188C53v86Ev();
extern void _ZN6S188C53v87Ev();
extern void _ZN6S188C53v88Ev();
extern void _ZN6S188C53v89Ev();
extern void _ZN6S188C53v90Ev();
extern void _ZN6S188C53v91Ev();
extern void _ZN6S188C53v92Ev();
extern void _ZN6S188C53v93Ev();
extern void _ZN6S188C53v94Ev();
extern void _ZN6S188C43v95Ev();
extern void _ZN6S188C43v96Ev();
extern void _ZN6S188C43v97Ev();
extern void _ZN6S188C43v98Ev();
extern void _ZN6S188C43v99Ev();
extern void _ZN6S188C44v100Ev();
extern void _ZN6S188C44v101Ev();
extern void _ZN6S188C44v102Ev();
extern void _ZN6S188C44v103Ev();
extern void _ZN6S188C44v104Ev();
extern void _ZN6S188C44v105Ev();
extern void _ZN6S188C44v106Ev();
extern void _ZN6S188C44v107Ev();
extern void _ZN6S188C44v108Ev();
extern void _ZN6S188C44v109Ev();
extern void _ZN6S188C44v110Ev();
extern void _ZN6S188C44v111Ev();
extern void _ZN6S188C44v112Ev();
extern void _ZN6S188C34v113Ev();
extern void _ZN6S188C34v114Ev();
extern void _ZN6S188C34v115Ev();
extern void _ZN6S188C34v116Ev();
extern void _ZN6S188C34v117Ev();
extern void _ZN6S188C34v118Ev();
extern void _ZN6S188C34v119Ev();
extern void _ZN6S188C24v120Ev();
extern void _ZN6S188C24v121Ev();
extern void _ZN6S188C24v122Ev();
extern void _ZN6S188C24v123Ev();
extern void _ZN6S188C24v124Ev();
extern void _ZN6S188C24v125Ev();
static  VTBL_ENTRY vtc_S188C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S188C2[0]),
  (VTBL_ENTRY)&_ZN6S188C2D1Ev,
  (VTBL_ENTRY)&_ZN6S188C2D0Ev,
  (VTBL_ENTRY)&_ZN6S188C62v4Ev,
  (VTBL_ENTRY)&_ZN6S188C62v5Ev,
  (VTBL_ENTRY)&_ZN6S188C62v6Ev,
  (VTBL_ENTRY)&_ZN6S188C62v7Ev,
  (VTBL_ENTRY)&_ZN6S188C62v8Ev,
  (VTBL_ENTRY)&_ZN6S188C62v9Ev,
  (VTBL_ENTRY)&_ZN6S188C63v10Ev,
  (VTBL_ENTRY)&_ZN6S188C63v11Ev,
  (VTBL_ENTRY)&_ZN6S188C63v12Ev,
  (VTBL_ENTRY)&_ZN6S188C63v13Ev,
  (VTBL_ENTRY)&_ZN6S188C63v14Ev,
  (VTBL_ENTRY)&_ZN6S188C63v15Ev,
  (VTBL_ENTRY)&_ZN6S188C63v16Ev,
  (VTBL_ENTRY)&_ZN6S188C63v17Ev,
  (VTBL_ENTRY)&_ZN6S188C63v18Ev,
  (VTBL_ENTRY)&_ZN6S188C63v19Ev,
  (VTBL_ENTRY)&_ZN6S188C63v20Ev,
  (VTBL_ENTRY)&_ZN6S188C63v21Ev,
  (VTBL_ENTRY)&_ZN6S188C63v22Ev,
  (VTBL_ENTRY)&_ZN6S188C63v23Ev,
  (VTBL_ENTRY)&_ZN6S188C63v24Ev,
  (VTBL_ENTRY)&_ZN6S188C63v25Ev,
  (VTBL_ENTRY)&_ZN6S188C63v26Ev,
  (VTBL_ENTRY)&_ZN6S188C63v27Ev,
  (VTBL_ENTRY)&_ZN6S188C63v28Ev,
  (VTBL_ENTRY)&_ZN6S188C63v29Ev,
  (VTBL_ENTRY)&_ZN6S188C63v30Ev,
  (VTBL_ENTRY)&_ZN6S188C63v31Ev,
  (VTBL_ENTRY)&_ZN6S188C63v32Ev,
  (VTBL_ENTRY)&_ZN6S188C63v33Ev,
  (VTBL_ENTRY)&_ZN6S188C63v34Ev,
  (VTBL_ENTRY)&_ZN6S188C63v35Ev,
  (VTBL_ENTRY)&_ZN6S188C63v36Ev,
  (VTBL_ENTRY)&_ZN6S188C63v37Ev,
  (VTBL_ENTRY)&_ZN6S188C63v38Ev,
  (VTBL_ENTRY)&_ZN6S188C63v39Ev,
  (VTBL_ENTRY)&_ZN6S188C63v40Ev,
  (VTBL_ENTRY)&_ZN6S188C63v41Ev,
  (VTBL_ENTRY)&_ZN6S188C63v42Ev,
  (VTBL_ENTRY)&_ZN6S188C63v43Ev,
  (VTBL_ENTRY)&_ZN6S188C63v44Ev,
  (VTBL_ENTRY)&_ZN6S188C63v45Ev,
  (VTBL_ENTRY)&_ZN6S188C63v46Ev,
  (VTBL_ENTRY)&_ZN6S188C63v47Ev,
  (VTBL_ENTRY)&_ZN6S188C63v48Ev,
  (VTBL_ENTRY)&_ZN6S188C63v49Ev,
  (VTBL_ENTRY)&_ZN6S188C63v50Ev,
  (VTBL_ENTRY)&_ZN6S188C63v51Ev,
  (VTBL_ENTRY)&_ZN6S188C63v52Ev,
  (VTBL_ENTRY)&_ZN6S188C63v53Ev,
  (VTBL_ENTRY)&_ZN6S188C63v54Ev,
  (VTBL_ENTRY)&_ZN6S188C63v55Ev,
  (VTBL_ENTRY)&_ZN6S188C63v56Ev,
  (VTBL_ENTRY)&_ZN6S188C63v57Ev,
  (VTBL_ENTRY)&_ZN6S188C63v58Ev,
  (VTBL_ENTRY)&_ZN6S188C63v59Ev,
  (VTBL_ENTRY)&_ZN6S188C63v60Ev,
  (VTBL_ENTRY)&_ZN6S188C63v61Ev,
  (VTBL_ENTRY)&_ZN6S188C63v62Ev,
  (VTBL_ENTRY)&_ZN6S188C63v63Ev,
  (VTBL_ENTRY)&_ZN6S188C63v64Ev,
  (VTBL_ENTRY)&_ZN6S188C63v65Ev,
  (VTBL_ENTRY)&_ZN6S188C63v66Ev,
  (VTBL_ENTRY)&_ZN6S188C63v67Ev,
  (VTBL_ENTRY)&_ZN6S188C53v68Ev,
  (VTBL_ENTRY)&_ZN6S188C53v69Ev,
  (VTBL_ENTRY)&_ZN6S188C53v70Ev,
  (VTBL_ENTRY)&_ZN6S188C53v71Ev,
  (VTBL_ENTRY)&_ZN6S188C53v72Ev,
  (VTBL_ENTRY)&_ZN6S188C53v73Ev,
  (VTBL_ENTRY)&_ZN6S188C53v74Ev,
  (VTBL_ENTRY)&_ZN6S188C53v75Ev,
  (VTBL_ENTRY)&_ZN6S188C53v76Ev,
  (VTBL_ENTRY)&_ZN6S188C53v77Ev,
  (VTBL_ENTRY)&_ZN6S188C53v78Ev,
  (VTBL_ENTRY)&_ZN6S188C53v79Ev,
  (VTBL_ENTRY)&_ZN6S188C53v80Ev,
  (VTBL_ENTRY)&_ZN6S188C53v81Ev,
  (VTBL_ENTRY)&_ZN6S188C53v82Ev,
  (VTBL_ENTRY)&_ZN6S188C53v83Ev,
  (VTBL_ENTRY)&_ZN6S188C53v84Ev,
  (VTBL_ENTRY)&_ZN6S188C53v85Ev,
  (VTBL_ENTRY)&_ZN6S188C53v86Ev,
  (VTBL_ENTRY)&_ZN6S188C53v87Ev,
  (VTBL_ENTRY)&_ZN6S188C53v88Ev,
  (VTBL_ENTRY)&_ZN6S188C53v89Ev,
  (VTBL_ENTRY)&_ZN6S188C53v90Ev,
  (VTBL_ENTRY)&_ZN6S188C53v91Ev,
  (VTBL_ENTRY)&_ZN6S188C53v92Ev,
  (VTBL_ENTRY)&_ZN6S188C53v93Ev,
  (VTBL_ENTRY)&_ZN6S188C53v94Ev,
  (VTBL_ENTRY)&_ZN6S188C43v95Ev,
  (VTBL_ENTRY)&_ZN6S188C43v96Ev,
  (VTBL_ENTRY)&_ZN6S188C43v97Ev,
  (VTBL_ENTRY)&_ZN6S188C43v98Ev,
  (VTBL_ENTRY)&_ZN6S188C43v99Ev,
  (VTBL_ENTRY)&_ZN6S188C44v100Ev,
  (VTBL_ENTRY)&_ZN6S188C44v101Ev,
  (VTBL_ENTRY)&_ZN6S188C44v102Ev,
  (VTBL_ENTRY)&_ZN6S188C44v103Ev,
  (VTBL_ENTRY)&_ZN6S188C44v104Ev,
  (VTBL_ENTRY)&_ZN6S188C44v105Ev,
  (VTBL_ENTRY)&_ZN6S188C44v106Ev,
  (VTBL_ENTRY)&_ZN6S188C44v107Ev,
  (VTBL_ENTRY)&_ZN6S188C44v108Ev,
  (VTBL_ENTRY)&_ZN6S188C44v109Ev,
  (VTBL_ENTRY)&_ZN6S188C44v110Ev,
  (VTBL_ENTRY)&_ZN6S188C44v111Ev,
  (VTBL_ENTRY)&_ZN6S188C44v112Ev,
  (VTBL_ENTRY)&_ZN6S188C34v113Ev,
  (VTBL_ENTRY)&_ZN6S188C34v114Ev,
  (VTBL_ENTRY)&_ZN6S188C34v115Ev,
  (VTBL_ENTRY)&_ZN6S188C34v116Ev,
  (VTBL_ENTRY)&_ZN6S188C34v117Ev,
  (VTBL_ENTRY)&_ZN6S188C34v118Ev,
  (VTBL_ENTRY)&_ZN6S188C34v119Ev,
  (VTBL_ENTRY)&_ZN6S188C24v120Ev,
  (VTBL_ENTRY)&_ZN6S188C24v121Ev,
  (VTBL_ENTRY)&_ZN6S188C24v122Ev,
  (VTBL_ENTRY)&_ZN6S188C24v123Ev,
  (VTBL_ENTRY)&_ZN6S188C24v124Ev,
  (VTBL_ENTRY)&_ZN6S188C24v125Ev,
};
extern VTBL_ENTRY _ZTI6S188C2[];
extern  VTBL_ENTRY _ZTV6S188C2[];
Class_Descriptor cd_S188C2 = {  "S188C2", // class name
  bases_S188C2, 4,
  &(vtc_S188C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,240), // object size
  NSPAIRA(_ZTI6S188C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S188C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S188C1  : S188C2 {
  virtual  ~S188C1(); // _ZN6S188C1D1Ev
  virtual void  v1(); // _ZN6S188C12v1Ev
  virtual void  v2(); // _ZN6S188C12v2Ev
  virtual void  v3(); // _ZN6S188C12v3Ev
  S188C1(); // tgen
};
//SIG(1 S188C1) 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 v90 v91 v92 v93 v94 Fp FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC7 FC11{ BC12{ BC10}} FC13{ m FC14{ m Fi[4]} FC15{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 FC16{ BC17{ BC10}} Fi:1} vd v113 v114 v115 v116 v117 v118 v119 FC18{ BC19{ BC10}} Fi[2] Fi:1} vd v120 v121 v122 v123 v124 v125 Fi FC18 Fi} vd v1 v2 v3}


 S188C1 ::~S188C1(){ note_dtor("S188C1", this);}
void  S188C1 ::v1(){vfunc_called(this, "_ZN6S188C12v1Ev");}
void  S188C1 ::v2(){vfunc_called(this, "_ZN6S188C12v2Ev");}
void  S188C1 ::v3(){vfunc_called(this, "_ZN6S188C12v3Ev");}
S188C1 ::S188C1(){ note_ctor("S188C1", this);} // tgen

static void Test_S188C1()
{
  extern Class_Descriptor cd_S188C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,61)];
    init_test(&cd_S188C1, buf);
    S188C1 *dp, &lv = *(dp=new (buf) S188C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,240), "sizeof(S188C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S188C1)");
    check_base_class_offset(lv, (S188C6*)(S188C5*)(S188C4*)(S188C3*)(S188C2*), 0, "S188C1");
    check_base_class_offset(lv, (S188C5*)(S188C4*)(S188C3*)(S188C2*), 0, "S188C1");
    check_base_class_offset(lv, (S188C4*)(S188C3*)(S188C2*), 0, "S188C1");
    check_base_class_offset(lv, (S188C3*)(S188C2*), 0, "S188C1");
    check_base_class_offset(lv, (S188C2*), 0, "S188C1");
    test_class_info(&lv, &cd_S188C1);
    dp->~S188C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS188C1(Test_S188C1, "S188C1", ABISELECT(312,240));

#else // __cplusplus

extern void _ZN6S188C1C1Ev();
extern void _ZN6S188C1D1Ev();
Name_Map name_map_S188C1[] = {
  NSPAIR(_ZN6S188C1C1Ev),
  NSPAIR(_ZN6S188C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S188C6;
extern VTBL_ENTRY _ZTI6S188C6[];
extern  VTBL_ENTRY _ZTV6S188C6[];
extern Class_Descriptor cd_S188C5;
extern VTBL_ENTRY _ZTI6S188C5[];
extern  VTBL_ENTRY _ZTV6S188C5[];
extern Class_Descriptor cd_S188C4;
extern VTBL_ENTRY _ZTI6S188C4[];
extern  VTBL_ENTRY _ZTV6S188C4[];
extern Class_Descriptor cd_S188C3;
extern VTBL_ENTRY _ZTI6S188C3[];
extern  VTBL_ENTRY _ZTV6S188C3[];
extern Class_Descriptor cd_S188C2;
extern VTBL_ENTRY _ZTI6S188C2[];
extern  VTBL_ENTRY _ZTV6S188C2[];
static Base_Class bases_S188C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S188C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S188C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S188C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S188C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S188C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S188C1[];
extern void _ZN6S188C1D1Ev();
extern void _ZN6S188C1D0Ev();
extern void _ZN6S188C62v4Ev();
extern void _ZN6S188C62v5Ev();
extern void _ZN6S188C62v6Ev();
extern void _ZN6S188C62v7Ev();
extern void _ZN6S188C62v8Ev();
extern void _ZN6S188C62v9Ev();
extern void _ZN6S188C63v10Ev();
extern void _ZN6S188C63v11Ev();
extern void _ZN6S188C63v12Ev();
extern void _ZN6S188C63v13Ev();
extern void _ZN6S188C63v14Ev();
extern void _ZN6S188C63v15Ev();
extern void _ZN6S188C63v16Ev();
extern void _ZN6S188C63v17Ev();
extern void _ZN6S188C63v18Ev();
extern void _ZN6S188C63v19Ev();
extern void _ZN6S188C63v20Ev();
extern void _ZN6S188C63v21Ev();
extern void _ZN6S188C63v22Ev();
extern void _ZN6S188C63v23Ev();
extern void _ZN6S188C63v24Ev();
extern void _ZN6S188C63v25Ev();
extern void _ZN6S188C63v26Ev();
extern void _ZN6S188C63v27Ev();
extern void _ZN6S188C63v28Ev();
extern void _ZN6S188C63v29Ev();
extern void _ZN6S188C63v30Ev();
extern void _ZN6S188C63v31Ev();
extern void _ZN6S188C63v32Ev();
extern void _ZN6S188C63v33Ev();
extern void _ZN6S188C63v34Ev();
extern void _ZN6S188C63v35Ev();
extern void _ZN6S188C63v36Ev();
extern void _ZN6S188C63v37Ev();
extern void _ZN6S188C63v38Ev();
extern void _ZN6S188C63v39Ev();
extern void _ZN6S188C63v40Ev();
extern void _ZN6S188C63v41Ev();
extern void _ZN6S188C63v42Ev();
extern void _ZN6S188C63v43Ev();
extern void _ZN6S188C63v44Ev();
extern void _ZN6S188C63v45Ev();
extern void _ZN6S188C63v46Ev();
extern void _ZN6S188C63v47Ev();
extern void _ZN6S188C63v48Ev();
extern void _ZN6S188C63v49Ev();
extern void _ZN6S188C63v50Ev();
extern void _ZN6S188C63v51Ev();
extern void _ZN6S188C63v52Ev();
extern void _ZN6S188C63v53Ev();
extern void _ZN6S188C63v54Ev();
extern void _ZN6S188C63v55Ev();
extern void _ZN6S188C63v56Ev();
extern void _ZN6S188C63v57Ev();
extern void _ZN6S188C63v58Ev();
extern void _ZN6S188C63v59Ev();
extern void _ZN6S188C63v60Ev();
extern void _ZN6S188C63v61Ev();
extern void _ZN6S188C63v62Ev();
extern void _ZN6S188C63v63Ev();
extern void _ZN6S188C63v64Ev();
extern void _ZN6S188C63v65Ev();
extern void _ZN6S188C63v66Ev();
extern void _ZN6S188C63v67Ev();
extern void _ZN6S188C53v68Ev();
extern void _ZN6S188C53v69Ev();
extern void _ZN6S188C53v70Ev();
extern void _ZN6S188C53v71Ev();
extern void _ZN6S188C53v72Ev();
extern void _ZN6S188C53v73Ev();
extern void _ZN6S188C53v74Ev();
extern void _ZN6S188C53v75Ev();
extern void _ZN6S188C53v76Ev();
extern void _ZN6S188C53v77Ev();
extern void _ZN6S188C53v78Ev();
extern void _ZN6S188C53v79Ev();
extern void _ZN6S188C53v80Ev();
extern void _ZN6S188C53v81Ev();
extern void _ZN6S188C53v82Ev();
extern void _ZN6S188C53v83Ev();
extern void _ZN6S188C53v84Ev();
extern void _ZN6S188C53v85Ev();
extern void _ZN6S188C53v86Ev();
extern void _ZN6S188C53v87Ev();
extern void _ZN6S188C53v88Ev();
extern void _ZN6S188C53v89Ev();
extern void _ZN6S188C53v90Ev();
extern void _ZN6S188C53v91Ev();
extern void _ZN6S188C53v92Ev();
extern void _ZN6S188C53v93Ev();
extern void _ZN6S188C53v94Ev();
extern void _ZN6S188C43v95Ev();
extern void _ZN6S188C43v96Ev();
extern void _ZN6S188C43v97Ev();
extern void _ZN6S188C43v98Ev();
extern void _ZN6S188C43v99Ev();
extern void _ZN6S188C44v100Ev();
extern void _ZN6S188C44v101Ev();
extern void _ZN6S188C44v102Ev();
extern void _ZN6S188C44v103Ev();
extern void _ZN6S188C44v104Ev();
extern void _ZN6S188C44v105Ev();
extern void _ZN6S188C44v106Ev();
extern void _ZN6S188C44v107Ev();
extern void _ZN6S188C44v108Ev();
extern void _ZN6S188C44v109Ev();
extern void _ZN6S188C44v110Ev();
extern void _ZN6S188C44v111Ev();
extern void _ZN6S188C44v112Ev();
extern void _ZN6S188C34v113Ev();
extern void _ZN6S188C34v114Ev();
extern void _ZN6S188C34v115Ev();
extern void _ZN6S188C34v116Ev();
extern void _ZN6S188C34v117Ev();
extern void _ZN6S188C34v118Ev();
extern void _ZN6S188C34v119Ev();
extern void _ZN6S188C24v120Ev();
extern void _ZN6S188C24v121Ev();
extern void _ZN6S188C24v122Ev();
extern void _ZN6S188C24v123Ev();
extern void _ZN6S188C24v124Ev();
extern void _ZN6S188C24v125Ev();
extern void _ZN6S188C12v1Ev();
extern void _ZN6S188C12v2Ev();
extern void _ZN6S188C12v3Ev();
static  VTBL_ENTRY vtc_S188C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S188C1[0]),
  (VTBL_ENTRY)&_ZN6S188C1D1Ev,
  (VTBL_ENTRY)&_ZN6S188C1D0Ev,
  (VTBL_ENTRY)&_ZN6S188C62v4Ev,
  (VTBL_ENTRY)&_ZN6S188C62v5Ev,
  (VTBL_ENTRY)&_ZN6S188C62v6Ev,
  (VTBL_ENTRY)&_ZN6S188C62v7Ev,
  (VTBL_ENTRY)&_ZN6S188C62v8Ev,
  (VTBL_ENTRY)&_ZN6S188C62v9Ev,
  (VTBL_ENTRY)&_ZN6S188C63v10Ev,
  (VTBL_ENTRY)&_ZN6S188C63v11Ev,
  (VTBL_ENTRY)&_ZN6S188C63v12Ev,
  (VTBL_ENTRY)&_ZN6S188C63v13Ev,
  (VTBL_ENTRY)&_ZN6S188C63v14Ev,
  (VTBL_ENTRY)&_ZN6S188C63v15Ev,
  (VTBL_ENTRY)&_ZN6S188C63v16Ev,
  (VTBL_ENTRY)&_ZN6S188C63v17Ev,
  (VTBL_ENTRY)&_ZN6S188C63v18Ev,
  (VTBL_ENTRY)&_ZN6S188C63v19Ev,
  (VTBL_ENTRY)&_ZN6S188C63v20Ev,
  (VTBL_ENTRY)&_ZN6S188C63v21Ev,
  (VTBL_ENTRY)&_ZN6S188C63v22Ev,
  (VTBL_ENTRY)&_ZN6S188C63v23Ev,
  (VTBL_ENTRY)&_ZN6S188C63v24Ev,
  (VTBL_ENTRY)&_ZN6S188C63v25Ev,
  (VTBL_ENTRY)&_ZN6S188C63v26Ev,
  (VTBL_ENTRY)&_ZN6S188C63v27Ev,
  (VTBL_ENTRY)&_ZN6S188C63v28Ev,
  (VTBL_ENTRY)&_ZN6S188C63v29Ev,
  (VTBL_ENTRY)&_ZN6S188C63v30Ev,
  (VTBL_ENTRY)&_ZN6S188C63v31Ev,
  (VTBL_ENTRY)&_ZN6S188C63v32Ev,
  (VTBL_ENTRY)&_ZN6S188C63v33Ev,
  (VTBL_ENTRY)&_ZN6S188C63v34Ev,
  (VTBL_ENTRY)&_ZN6S188C63v35Ev,
  (VTBL_ENTRY)&_ZN6S188C63v36Ev,
  (VTBL_ENTRY)&_ZN6S188C63v37Ev,
  (VTBL_ENTRY)&_ZN6S188C63v38Ev,
  (VTBL_ENTRY)&_ZN6S188C63v39Ev,
  (VTBL_ENTRY)&_ZN6S188C63v40Ev,
  (VTBL_ENTRY)&_ZN6S188C63v41Ev,
  (VTBL_ENTRY)&_ZN6S188C63v42Ev,
  (VTBL_ENTRY)&_ZN6S188C63v43Ev,
  (VTBL_ENTRY)&_ZN6S188C63v44Ev,
  (VTBL_ENTRY)&_ZN6S188C63v45Ev,
  (VTBL_ENTRY)&_ZN6S188C63v46Ev,
  (VTBL_ENTRY)&_ZN6S188C63v47Ev,
  (VTBL_ENTRY)&_ZN6S188C63v48Ev,
  (VTBL_ENTRY)&_ZN6S188C63v49Ev,
  (VTBL_ENTRY)&_ZN6S188C63v50Ev,
  (VTBL_ENTRY)&_ZN6S188C63v51Ev,
  (VTBL_ENTRY)&_ZN6S188C63v52Ev,
  (VTBL_ENTRY)&_ZN6S188C63v53Ev,
  (VTBL_ENTRY)&_ZN6S188C63v54Ev,
  (VTBL_ENTRY)&_ZN6S188C63v55Ev,
  (VTBL_ENTRY)&_ZN6S188C63v56Ev,
  (VTBL_ENTRY)&_ZN6S188C63v57Ev,
  (VTBL_ENTRY)&_ZN6S188C63v58Ev,
  (VTBL_ENTRY)&_ZN6S188C63v59Ev,
  (VTBL_ENTRY)&_ZN6S188C63v60Ev,
  (VTBL_ENTRY)&_ZN6S188C63v61Ev,
  (VTBL_ENTRY)&_ZN6S188C63v62Ev,
  (VTBL_ENTRY)&_ZN6S188C63v63Ev,
  (VTBL_ENTRY)&_ZN6S188C63v64Ev,
  (VTBL_ENTRY)&_ZN6S188C63v65Ev,
  (VTBL_ENTRY)&_ZN6S188C63v66Ev,
  (VTBL_ENTRY)&_ZN6S188C63v67Ev,
  (VTBL_ENTRY)&_ZN6S188C53v68Ev,
  (VTBL_ENTRY)&_ZN6S188C53v69Ev,
  (VTBL_ENTRY)&_ZN6S188C53v70Ev,
  (VTBL_ENTRY)&_ZN6S188C53v71Ev,
  (VTBL_ENTRY)&_ZN6S188C53v72Ev,
  (VTBL_ENTRY)&_ZN6S188C53v73Ev,
  (VTBL_ENTRY)&_ZN6S188C53v74Ev,
  (VTBL_ENTRY)&_ZN6S188C53v75Ev,
  (VTBL_ENTRY)&_ZN6S188C53v76Ev,
  (VTBL_ENTRY)&_ZN6S188C53v77Ev,
  (VTBL_ENTRY)&_ZN6S188C53v78Ev,
  (VTBL_ENTRY)&_ZN6S188C53v79Ev,
  (VTBL_ENTRY)&_ZN6S188C53v80Ev,
  (VTBL_ENTRY)&_ZN6S188C53v81Ev,
  (VTBL_ENTRY)&_ZN6S188C53v82Ev,
  (VTBL_ENTRY)&_ZN6S188C53v83Ev,
  (VTBL_ENTRY)&_ZN6S188C53v84Ev,
  (VTBL_ENTRY)&_ZN6S188C53v85Ev,
  (VTBL_ENTRY)&_ZN6S188C53v86Ev,
  (VTBL_ENTRY)&_ZN6S188C53v87Ev,
  (VTBL_ENTRY)&_ZN6S188C53v88Ev,
  (VTBL_ENTRY)&_ZN6S188C53v89Ev,
  (VTBL_ENTRY)&_ZN6S188C53v90Ev,
  (VTBL_ENTRY)&_ZN6S188C53v91Ev,
  (VTBL_ENTRY)&_ZN6S188C53v92Ev,
  (VTBL_ENTRY)&_ZN6S188C53v93Ev,
  (VTBL_ENTRY)&_ZN6S188C53v94Ev,
  (VTBL_ENTRY)&_ZN6S188C43v95Ev,
  (VTBL_ENTRY)&_ZN6S188C43v96Ev,
  (VTBL_ENTRY)&_ZN6S188C43v97Ev,
  (VTBL_ENTRY)&_ZN6S188C43v98Ev,
  (VTBL_ENTRY)&_ZN6S188C43v99Ev,
  (VTBL_ENTRY)&_ZN6S188C44v100Ev,
  (VTBL_ENTRY)&_ZN6S188C44v101Ev,
  (VTBL_ENTRY)&_ZN6S188C44v102Ev,
  (VTBL_ENTRY)&_ZN6S188C44v103Ev,
  (VTBL_ENTRY)&_ZN6S188C44v104Ev,
  (VTBL_ENTRY)&_ZN6S188C44v105Ev,
  (VTBL_ENTRY)&_ZN6S188C44v106Ev,
  (VTBL_ENTRY)&_ZN6S188C44v107Ev,
  (VTBL_ENTRY)&_ZN6S188C44v108Ev,
  (VTBL_ENTRY)&_ZN6S188C44v109Ev,
  (VTBL_ENTRY)&_ZN6S188C44v110Ev,
  (VTBL_ENTRY)&_ZN6S188C44v111Ev,
  (VTBL_ENTRY)&_ZN6S188C44v112Ev,
  (VTBL_ENTRY)&_ZN6S188C34v113Ev,
  (VTBL_ENTRY)&_ZN6S188C34v114Ev,
  (VTBL_ENTRY)&_ZN6S188C34v115Ev,
  (VTBL_ENTRY)&_ZN6S188C34v116Ev,
  (VTBL_ENTRY)&_ZN6S188C34v117Ev,
  (VTBL_ENTRY)&_ZN6S188C34v118Ev,
  (VTBL_ENTRY)&_ZN6S188C34v119Ev,
  (VTBL_ENTRY)&_ZN6S188C24v120Ev,
  (VTBL_ENTRY)&_ZN6S188C24v121Ev,
  (VTBL_ENTRY)&_ZN6S188C24v122Ev,
  (VTBL_ENTRY)&_ZN6S188C24v123Ev,
  (VTBL_ENTRY)&_ZN6S188C24v124Ev,
  (VTBL_ENTRY)&_ZN6S188C24v125Ev,
  (VTBL_ENTRY)&_ZN6S188C12v1Ev,
  (VTBL_ENTRY)&_ZN6S188C12v2Ev,
  (VTBL_ENTRY)&_ZN6S188C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S188C1[];
extern  VTBL_ENTRY _ZTV6S188C1[];
Class_Descriptor cd_S188C1 = {  "S188C1", // class name
  bases_S188C1, 5,
  &(vtc_S188C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,240), // object size
  NSPAIRA(_ZTI6S188C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S188C1),129, //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  S471C5  {
  int s471c5f0;
  __tsi64 s471c5f1;
  void *s471c5f2[4];
  int s471c5f3[2];
  void *s471c5f4;
  ::S615C17_nt s471c5f5;
  void *s471c5f6[2];
  virtual  ~S471C5(); // _ZN6S471C5D1Ev
  virtual void  v10(); // _ZN6S471C53v10Ev
  virtual void  v11(); // _ZN6S471C53v11Ev
  virtual void  v12(); // _ZN6S471C53v12Ev
  virtual void  v13(); // _ZN6S471C53v13Ev
  virtual void  v14(); // _ZN6S471C53v14Ev
  virtual void  v15(); // _ZN6S471C53v15Ev
  virtual void  v16(); // _ZN6S471C53v16Ev
  virtual void  v17(); // _ZN6S471C53v17Ev
  virtual void  v18(); // _ZN6S471C53v18Ev
  virtual void  v19(); // _ZN6S471C53v19Ev
  virtual void  v20(); // _ZN6S471C53v20Ev
  virtual void  v21(); // _ZN6S471C53v21Ev
  virtual void  v22(); // _ZN6S471C53v22Ev
  virtual void  v23(); // _ZN6S471C53v23Ev
  virtual void  v24(); // _ZN6S471C53v24Ev
  virtual void  v25(); // _ZN6S471C53v25Ev
  virtual void  v26(); // _ZN6S471C53v26Ev
  virtual void  v27(); // _ZN6S471C53v27Ev
  virtual void  v28(); // _ZN6S471C53v28Ev
  virtual void  v29(); // _ZN6S471C53v29Ev
  virtual void  v30(); // _ZN6S471C53v30Ev
  virtual void  v31(); // _ZN6S471C53v31Ev
  virtual void  v32(); // _ZN6S471C53v32Ev
  virtual void  v33(); // _ZN6S471C53v33Ev
  virtual void  v34(); // _ZN6S471C53v34Ev
  virtual void  v35(); // _ZN6S471C53v35Ev
  virtual void  v36(); // _ZN6S471C53v36Ev
  virtual void  v37(); // _ZN6S471C53v37Ev
  virtual void  v38(); // _ZN6S471C53v38Ev
  virtual void  v39(); // _ZN6S471C53v39Ev
  virtual void  v40(); // _ZN6S471C53v40Ev
  virtual void  v41(); // _ZN6S471C53v41Ev
  virtual void  v42(); // _ZN6S471C53v42Ev
  virtual void  v43(); // _ZN6S471C53v43Ev
  virtual void  v44(); // _ZN6S471C53v44Ev
  virtual void  v45(); // _ZN6S471C53v45Ev
  virtual void  v46(); // _ZN6S471C53v46Ev
  virtual void  v47(); // _ZN6S471C53v47Ev
  virtual void  v48(); // _ZN6S471C53v48Ev
  virtual void  v49(); // _ZN6S471C53v49Ev
  virtual void  v50(); // _ZN6S471C53v50Ev
  virtual void  v51(); // _ZN6S471C53v51Ev
  virtual void  v52(); // _ZN6S471C53v52Ev
  virtual void  v53(); // _ZN6S471C53v53Ev
  virtual void  v54(); // _ZN6S471C53v54Ev
  virtual void  v55(); // _ZN6S471C53v55Ev
  virtual void  v56(); // _ZN6S471C53v56Ev
  virtual void  v57(); // _ZN6S471C53v57Ev
  virtual void  v58(); // _ZN6S471C53v58Ev
  virtual void  v59(); // _ZN6S471C53v59Ev
  virtual void  v60(); // _ZN6S471C53v60Ev
  virtual void  v61(); // _ZN6S471C53v61Ev
  virtual void  v62(); // _ZN6S471C53v62Ev
  virtual void  v63(); // _ZN6S471C53v63Ev
  virtual void  v64(); // _ZN6S471C53v64Ev
  virtual void  v65(); // _ZN6S471C53v65Ev
  virtual void  v66(); // _ZN6S471C53v66Ev
  virtual void  v67(); // _ZN6S471C53v67Ev
  virtual void  v68(); // _ZN6S471C53v68Ev
  virtual void  v69(); // _ZN6S471C53v69Ev
  virtual void  v70(); // _ZN6S471C53v70Ev
  virtual void  v71(); // _ZN6S471C53v71Ev
  virtual void  v72(); // _ZN6S471C53v72Ev
  virtual void  v73(); // _ZN6S471C53v73Ev
  S471C5(); // tgen
};
//SIG(-1 S471C5) 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]}


 S471C5 ::~S471C5(){ note_dtor("S471C5", this);}
void  S471C5 ::v10(){vfunc_called(this, "_ZN6S471C53v10Ev");}
void  S471C5 ::v11(){vfunc_called(this, "_ZN6S471C53v11Ev");}
void  S471C5 ::v12(){vfunc_called(this, "_ZN6S471C53v12Ev");}
void  S471C5 ::v13(){vfunc_called(this, "_ZN6S471C53v13Ev");}
void  S471C5 ::v14(){vfunc_called(this, "_ZN6S471C53v14Ev");}
void  S471C5 ::v15(){vfunc_called(this, "_ZN6S471C53v15Ev");}
void  S471C5 ::v16(){vfunc_called(this, "_ZN6S471C53v16Ev");}
void  S471C5 ::v17(){vfunc_called(this, "_ZN6S471C53v17Ev");}
void  S471C5 ::v18(){vfunc_called(this, "_ZN6S471C53v18Ev");}
void  S471C5 ::v19(){vfunc_called(this, "_ZN6S471C53v19Ev");}
void  S471C5 ::v20(){vfunc_called(this, "_ZN6S471C53v20Ev");}
void  S471C5 ::v21(){vfunc_called(this, "_ZN6S471C53v21Ev");}
void  S471C5 ::v22(){vfunc_called(this, "_ZN6S471C53v22Ev");}
void  S471C5 ::v23(){vfunc_called(this, "_ZN6S471C53v23Ev");}
void  S471C5 ::v24(){vfunc_called(this, "_ZN6S471C53v24Ev");}
void  S471C5 ::v25(){vfunc_called(this, "_ZN6S471C53v25Ev");}
void  S471C5 ::v26(){vfunc_called(this, "_ZN6S471C53v26Ev");}
void  S471C5 ::v27(){vfunc_called(this, "_ZN6S471C53v27Ev");}
void  S471C5 ::v28(){vfunc_called(this, "_ZN6S471C53v28Ev");}
void  S471C5 ::v29(){vfunc_called(this, "_ZN6S471C53v29Ev");}
void  S471C5 ::v30(){vfunc_called(this, "_ZN6S471C53v30Ev");}
void  S471C5 ::v31(){vfunc_called(this, "_ZN6S471C53v31Ev");}
void  S471C5 ::v32(){vfunc_called(this, "_ZN6S471C53v32Ev");}
void  S471C5 ::v33(){vfunc_called(this, "_ZN6S471C53v33Ev");}
void  S471C5 ::v34(){vfunc_called(this, "_ZN6S471C53v34Ev");}
void  S471C5 ::v35(){vfunc_called(this, "_ZN6S471C53v35Ev");}
void  S471C5 ::v36(){vfunc_called(this, "_ZN6S471C53v36Ev");}
void  S471C5 ::v37(){vfunc_called(this, "_ZN6S471C53v37Ev");}
void  S471C5 ::v38(){vfunc_called(this, "_ZN6S471C53v38Ev");}
void  S471C5 ::v39(){vfunc_called(this, "_ZN6S471C53v39Ev");}
void  S471C5 ::v40(){vfunc_called(this, "_ZN6S471C53v40Ev");}
void  S471C5 ::v41(){vfunc_called(this, "_ZN6S471C53v41Ev");}
void  S471C5 ::v42(){vfunc_called(this, "_ZN6S471C53v42Ev");}
void  S471C5 ::v43(){vfunc_called(this, "_ZN6S471C53v43Ev");}
void  S471C5 ::v44(){vfunc_called(this, "_ZN6S471C53v44Ev");}
void  S471C5 ::v45(){vfunc_called(this, "_ZN6S471C53v45Ev");}
void  S471C5 ::v46(){vfunc_called(this, "_ZN6S471C53v46Ev");}
void  S471C5 ::v47(){vfunc_called(this, "_ZN6S471C53v47Ev");}
void  S471C5 ::v48(){vfunc_called(this, "_ZN6S471C53v48Ev");}
void  S471C5 ::v49(){vfunc_called(this, "_ZN6S471C53v49Ev");}
void  S471C5 ::v50(){vfunc_called(this, "_ZN6S471C53v50Ev");}
void  S471C5 ::v51(){vfunc_called(this, "_ZN6S471C53v51Ev");}
void  S471C5 ::v52(){vfunc_called(this, "_ZN6S471C53v52Ev");}
void  S471C5 ::v53(){vfunc_called(this, "_ZN6S471C53v53Ev");}
void  S471C5 ::v54(){vfunc_called(this, "_ZN6S471C53v54Ev");}
void  S471C5 ::v55(){vfunc_called(this, "_ZN6S471C53v55Ev");}
void  S471C5 ::v56(){vfunc_called(this, "_ZN6S471C53v56Ev");}
void  S471C5 ::v57(){vfunc_called(this, "_ZN6S471C53v57Ev");}
void  S471C5 ::v58(){vfunc_called(this, "_ZN6S471C53v58Ev");}
void  S471C5 ::v59(){vfunc_called(this, "_ZN6S471C53v59Ev");}
void  S471C5 ::v60(){vfunc_called(this, "_ZN6S471C53v60Ev");}
void  S471C5 ::v61(){vfunc_called(this, "_ZN6S471C53v61Ev");}
void  S471C5 ::v62(){vfunc_called(this, "_ZN6S471C53v62Ev");}
void  S471C5 ::v63(){vfunc_called(this, "_ZN6S471C53v63Ev");}
void  S471C5 ::v64(){vfunc_called(this, "_ZN6S471C53v64Ev");}
void  S471C5 ::v65(){vfunc_called(this, "_ZN6S471C53v65Ev");}
void  S471C5 ::v66(){vfunc_called(this, "_ZN6S471C53v66Ev");}
void  S471C5 ::v67(){vfunc_called(this, "_ZN6S471C53v67Ev");}
void  S471C5 ::v68(){vfunc_called(this, "_ZN6S471C53v68Ev");}
void  S471C5 ::v69(){vfunc_called(this, "_ZN6S471C53v69Ev");}
void  S471C5 ::v70(){vfunc_called(this, "_ZN6S471C53v70Ev");}
void  S471C5 ::v71(){vfunc_called(this, "_ZN6S471C53v71Ev");}
void  S471C5 ::v72(){vfunc_called(this, "_ZN6S471C53v72Ev");}
void  S471C5 ::v73(){vfunc_called(this, "_ZN6S471C53v73Ev");}
S471C5 ::S471C5(){ note_ctor("S471C5", this);} // tgen

static void Test_S471C5()
{
  extern Class_Descriptor cd_S471C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S471C5, buf);
    S471C5 *dp, &lv = *(dp=new (buf) S471C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S471C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S471C5)");
    check_field_offset(lv, s471c5f0, ABISELECT(8,4), "S471C5.s471c5f0");
    check_field_offset(lv, s471c5f1, ABISELECT(16,8), "S471C5.s471c5f1");
    check_field_offset(lv, s471c5f2, ABISELECT(24,16), "S471C5.s471c5f2");
    check_field_offset(lv, s471c5f3, ABISELECT(56,32), "S471C5.s471c5f3");
    check_field_offset(lv, s471c5f4, ABISELECT(64,40), "S471C5.s471c5f4");
    check_field_offset(lv, s471c5f5, ABISELECT(72,44), "S471C5.s471c5f5");
    check_field_offset(lv, s471c5f6, ABISELECT(80,52), "S471C5.s471c5f6");
    test_class_info(&lv, &cd_S471C5);
    dp->~S471C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS471C5(Test_S471C5, "S471C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S471C5C1Ev();
extern void _ZN6S471C5D1Ev();
Name_Map name_map_S471C5[] = {
  NSPAIR(_ZN6S471C5C1Ev),
  NSPAIR(_ZN6S471C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S471C5[];
extern void _ZN6S471C5D1Ev();
extern void _ZN6S471C5D0Ev();
extern void _ZN6S471C53v10Ev();
extern void _ZN6S471C53v11Ev();
extern void _ZN6S471C53v12Ev();
extern void _ZN6S471C53v13Ev();
extern void _ZN6S471C53v14Ev();
extern void _ZN6S471C53v15Ev();
extern void _ZN6S471C53v16Ev();
extern void _ZN6S471C53v17Ev();
extern void _ZN6S471C53v18Ev();
extern void _ZN6S471C53v19Ev();
extern void _ZN6S471C53v20Ev();
extern void _ZN6S471C53v21Ev();
extern void _ZN6S471C53v22Ev();
extern void _ZN6S471C53v23Ev();
extern void _ZN6S471C53v24Ev();
extern void _ZN6S471C53v25Ev();
extern void _ZN6S471C53v26Ev();
extern void _ZN6S471C53v27Ev();
extern void _ZN6S471C53v28Ev();
extern void _ZN6S471C53v29Ev();
extern void _ZN6S471C53v30Ev();
extern void _ZN6S471C53v31Ev();
extern void _ZN6S471C53v32Ev();
extern void _ZN6S471C53v33Ev();
extern void _ZN6S471C53v34Ev();
extern void _ZN6S471C53v35Ev();
extern void _ZN6S471C53v36Ev();
extern void _ZN6S471C53v37Ev();
extern void _ZN6S471C53v38Ev();
extern void _ZN6S471C53v39Ev();
extern void _ZN6S471C53v40Ev();
extern void _ZN6S471C53v41Ev();
extern void _ZN6S471C53v42Ev();
extern void _ZN6S471C53v43Ev();
extern void _ZN6S471C53v44Ev();
extern void _ZN6S471C53v45Ev();
extern void _ZN6S471C53v46Ev();
extern void _ZN6S471C53v47Ev();
extern void _ZN6S471C53v48Ev();
extern void _ZN6S471C53v49Ev();
extern void _ZN6S471C53v50Ev();
extern void _ZN6S471C53v51Ev();
extern void _ZN6S471C53v52Ev();
extern void _ZN6S471C53v53Ev();
extern void _ZN6S471C53v54Ev();
extern void _ZN6S471C53v55Ev();
extern void _ZN6S471C53v56Ev();
extern void _ZN6S471C53v57Ev();
extern void _ZN6S471C53v58Ev();
extern void _ZN6S471C53v59Ev();
extern void _ZN6S471C53v60Ev();
extern void _ZN6S471C53v61Ev();
extern void _ZN6S471C53v62Ev();
extern void _ZN6S471C53v63Ev();
extern void _ZN6S471C53v64Ev();
extern void _ZN6S471C53v65Ev();
extern void _ZN6S471C53v66Ev();
extern void _ZN6S471C53v67Ev();
extern void _ZN6S471C53v68Ev();
extern void _ZN6S471C53v69Ev();
extern void _ZN6S471C53v70Ev();
extern void _ZN6S471C53v71Ev();
extern void _ZN6S471C53v72Ev();
extern void _ZN6S471C53v73Ev();
static  VTBL_ENTRY vtc_S471C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S471C5[0]),
  (VTBL_ENTRY)&_ZN6S471C5D1Ev,
  (VTBL_ENTRY)&_ZN6S471C5D0Ev,
  (VTBL_ENTRY)&_ZN6S471C53v10Ev,
  (VTBL_ENTRY)&_ZN6S471C53v11Ev,
  (VTBL_ENTRY)&_ZN6S471C53v12Ev,
  (VTBL_ENTRY)&_ZN6S471C53v13Ev,
  (VTBL_ENTRY)&_ZN6S471C53v14Ev,
  (VTBL_ENTRY)&_ZN6S471C53v15Ev,
  (VTBL_ENTRY)&_ZN6S471C53v16Ev,
  (VTBL_ENTRY)&_ZN6S471C53v17Ev,
  (VTBL_ENTRY)&_ZN6S471C53v18Ev,
  (VTBL_ENTRY)&_ZN6S471C53v19Ev,
  (VTBL_ENTRY)&_ZN6S471C53v20Ev,
  (VTBL_ENTRY)&_ZN6S471C53v21Ev,
  (VTBL_ENTRY)&_ZN6S471C53v22Ev,
  (VTBL_ENTRY)&_ZN6S471C53v23Ev,
  (VTBL_ENTRY)&_ZN6S471C53v24Ev,
  (VTBL_ENTRY)&_ZN6S471C53v25Ev,
  (VTBL_ENTRY)&_ZN6S471C53v26Ev,
  (VTBL_ENTRY)&_ZN6S471C53v27Ev,
  (VTBL_ENTRY)&_ZN6S471C53v28Ev,
  (VTBL_ENTRY)&_ZN6S471C53v29Ev,
  (VTBL_ENTRY)&_ZN6S471C53v30Ev,
  (VTBL_ENTRY)&_ZN6S471C53v31Ev,
  (VTBL_ENTRY)&_ZN6S471C53v32Ev,
  (VTBL_ENTRY)&_ZN6S471C53v33Ev,
  (VTBL_ENTRY)&_ZN6S471C53v34Ev,
  (VTBL_ENTRY)&_ZN6S471C53v35Ev,
  (VTBL_ENTRY)&_ZN6S471C53v36Ev,
  (VTBL_ENTRY)&_ZN6S471C53v37Ev,
  (VTBL_ENTRY)&_ZN6S471C53v38Ev,
  (VTBL_ENTRY)&_ZN6S471C53v39Ev,
  (VTBL_ENTRY)&_ZN6S471C53v40Ev,
  (VTBL_ENTRY)&_ZN6S471C53v41Ev,
  (VTBL_ENTRY)&_ZN6S471C53v42Ev,
  (VTBL_ENTRY)&_ZN6S471C53v43Ev,
  (VTBL_ENTRY)&_ZN6S471C53v44Ev,
  (VTBL_ENTRY)&_ZN6S471C53v45Ev,
  (VTBL_ENTRY)&_ZN6S471C53v46Ev,
  (VTBL_ENTRY)&_ZN6S471C53v47Ev,
  (VTBL_ENTRY)&_ZN6S471C53v48Ev,
  (VTBL_ENTRY)&_ZN6S471C53v49Ev,
  (VTBL_ENTRY)&_ZN6S471C53v50Ev,
  (VTBL_ENTRY)&_ZN6S471C53v51Ev,
  (VTBL_ENTRY)&_ZN6S471C53v52Ev,
  (VTBL_ENTRY)&_ZN6S471C53v53Ev,
  (VTBL_ENTRY)&_ZN6S471C53v54Ev,
  (VTBL_ENTRY)&_ZN6S471C53v55Ev,
  (VTBL_ENTRY)&_ZN6S471C53v56Ev,
  (VTBL_ENTRY)&_ZN6S471C53v57Ev,
  (VTBL_ENTRY)&_ZN6S471C53v58Ev,
  (VTBL_ENTRY)&_ZN6S471C53v59Ev,
  (VTBL_ENTRY)&_ZN6S471C53v60Ev,
  (VTBL_ENTRY)&_ZN6S471C53v61Ev,
  (VTBL_ENTRY)&_ZN6S471C53v62Ev,
  (VTBL_ENTRY)&_ZN6S471C53v63Ev,
  (VTBL_ENTRY)&_ZN6S471C53v64Ev,
  (VTBL_ENTRY)&_ZN6S471C53v65Ev,
  (VTBL_ENTRY)&_ZN6S471C53v66Ev,
  (VTBL_ENTRY)&_ZN6S471C53v67Ev,
  (VTBL_ENTRY)&_ZN6S471C53v68Ev,
  (VTBL_ENTRY)&_ZN6S471C53v69Ev,
  (VTBL_ENTRY)&_ZN6S471C53v70Ev,
  (VTBL_ENTRY)&_ZN6S471C53v71Ev,
  (VTBL_ENTRY)&_ZN6S471C53v72Ev,
  (VTBL_ENTRY)&_ZN6S471C53v73Ev,
};
extern VTBL_ENTRY _ZTI6S471C5[];
extern  VTBL_ENTRY _ZTV6S471C5[];
Class_Descriptor cd_S471C5 = {  "S471C5", // class name
  0,0,//no base classes
  &(vtc_S471C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S471C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S471C5),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  S471C4  : S471C5 {
  void *s471c4f0;
  ::S1542C26 s471c4f1;
  ::S615C17_nt s471c4f2;
  ::S1542C22_nt s471c4f3;
  ::S615C12_nt s471c4f4;
  int s471c4f5;
  unsigned int s471c4f6:1;
  unsigned int s471c4f7:1;
  unsigned int s471c4f8:1;
  unsigned int s471c4f9:1;
  int s471c4f10[11];
  virtual  ~S471C4(); // _ZN6S471C4D1Ev
  virtual void  v74(); // _ZN6S471C43v74Ev
  virtual void  v75(); // _ZN6S471C43v75Ev
  virtual void  v76(); // _ZN6S471C43v76Ev
  virtual void  v77(); // _ZN6S471C43v77Ev
  virtual void  v78(); // _ZN6S471C43v78Ev
  virtual void  v79(); // _ZN6S471C43v79Ev
  virtual void  v80(); // _ZN6S471C43v80Ev
  virtual void  v81(); // _ZN6S471C43v81Ev
  virtual void  v82(); // _ZN6S471C43v82Ev
  virtual void  v83(); // _ZN6S471C43v83Ev
  virtual void  v84(); // _ZN6S471C43v84Ev
  virtual void  v85(); // _ZN6S471C43v85Ev
  virtual void  v86(); // _ZN6S471C43v86Ev
  virtual void  v87(); // _ZN6S471C43v87Ev
  virtual void  v88(); // _ZN6S471C43v88Ev
  virtual void  v89(); // _ZN6S471C43v89Ev
  virtual void  v90(); // _ZN6S471C43v90Ev
  virtual void  v91(); // _ZN6S471C43v91Ev
  virtual void  v92(); // _ZN6S471C43v92Ev
  virtual void  v93(); // _ZN6S471C43v93Ev
  virtual void  v94(); // _ZN6S471C43v94Ev
  virtual void  v95(); // _ZN6S471C43v95Ev
  virtual void  v96(); // _ZN6S471C43v96Ev
  virtual void  v97(); // _ZN6S471C43v97Ev
  virtual void  v98(); // _ZN6S471C43v98Ev
  virtual void  v99(); // _ZN6S471C43v99Ev
  virtual void  v100(); // _ZN6S471C44v100Ev
  S471C4(); // tgen
};
//SIG(-1 S471C4) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S471C4 ::~S471C4(){ note_dtor("S471C4", this);}
void  S471C4 ::v74(){vfunc_called(this, "_ZN6S471C43v74Ev");}
void  S471C4 ::v75(){vfunc_called(this, "_ZN6S471C43v75Ev");}
void  S471C4 ::v76(){vfunc_called(this, "_ZN6S471C43v76Ev");}
void  S471C4 ::v77(){vfunc_called(this, "_ZN6S471C43v77Ev");}
void  S471C4 ::v78(){vfunc_called(this, "_ZN6S471C43v78Ev");}
void  S471C4 ::v79(){vfunc_called(this, "_ZN6S471C43v79Ev");}
void  S471C4 ::v80(){vfunc_called(this, "_ZN6S471C43v80Ev");}
void  S471C4 ::v81(){vfunc_called(this, "_ZN6S471C43v81Ev");}
void  S471C4 ::v82(){vfunc_called(this, "_ZN6S471C43v82Ev");}
void  S471C4 ::v83(){vfunc_called(this, "_ZN6S471C43v83Ev");}
void  S471C4 ::v84(){vfunc_called(this, "_ZN6S471C43v84Ev");}
void  S471C4 ::v85(){vfunc_called(this, "_ZN6S471C43v85Ev");}
void  S471C4 ::v86(){vfunc_called(this, "_ZN6S471C43v86Ev");}
void  S471C4 ::v87(){vfunc_called(this, "_ZN6S471C43v87Ev");}
void  S471C4 ::v88(){vfunc_called(this, "_ZN6S471C43v88Ev");}
void  S471C4 ::v89(){vfunc_called(this, "_ZN6S471C43v89Ev");}
void  S471C4 ::v90(){vfunc_called(this, "_ZN6S471C43v90Ev");}
void  S471C4 ::v91(){vfunc_called(this, "_ZN6S471C43v91Ev");}
void  S471C4 ::v92(){vfunc_called(this, "_ZN6S471C43v92Ev");}
void  S471C4 ::v93(){vfunc_called(this, "_ZN6S471C43v93Ev");}
void  S471C4 ::v94(){vfunc_called(this, "_ZN6S471C43v94Ev");}
void  S471C4 ::v95(){vfunc_called(this, "_ZN6S471C43v95Ev");}
void  S471C4 ::v96(){vfunc_called(this, "_ZN6S471C43v96Ev");}
void  S471C4 ::v97(){vfunc_called(this, "_ZN6S471C43v97Ev");}
void  S471C4 ::v98(){vfunc_called(this, "_ZN6S471C43v98Ev");}
void  S471C4 ::v99(){vfunc_called(this, "_ZN6S471C43v99Ev");}
void  S471C4 ::v100(){vfunc_called(this, "_ZN6S471C44v100Ev");}
S471C4 ::S471C4(){ note_ctor("S471C4", this);} // tgen

static void Test_S471C4()
{
  extern Class_Descriptor cd_S471C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S471C4, buf);
    S471C4 *dp, &lv = *(dp=new (buf) S471C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S471C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S471C4)");
    check_base_class_offset(lv, (S471C5*), 0, "S471C4");
    check_field_offset(lv, s471c4f0, ABISELECT(96,60), "S471C4.s471c4f0");
    check_field_offset(lv, s471c4f1, ABISELECT(104,64), "S471C4.s471c4f1");
    check_field_offset(lv, s471c4f2, ABISELECT(120,76), "S471C4.s471c4f2");
    check_field_offset(lv, s471c4f3, ABISELECT(128,84), "S471C4.s471c4f3");
    check_field_offset(lv, s471c4f4, ABISELECT(144,96), "S471C4.s471c4f4");
    check_field_offset(lv, s471c4f5, ABISELECT(176,128), "S471C4.s471c4f5");
    set_bf_and_test(lv, s471c4f6, ABISELECT(180,132), 0, 1, 1, "S471C4");
    set_bf_and_test(lv, s471c4f7, ABISELECT(180,132), 1, 1, 1, "S471C4");
    set_bf_and_test(lv, s471c4f8, ABISELECT(180,132), 2, 1, 1, "S471C4");
    set_bf_and_test(lv, s471c4f9, ABISELECT(180,132), 3, 1, 1, "S471C4");
    check_field_offset(lv, s471c4f10, ABISELECT(184,136), "S471C4.s471c4f10");
    test_class_info(&lv, &cd_S471C4);
    dp->~S471C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS471C4(Test_S471C4, "S471C4", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S471C4C1Ev();
extern void _ZN6S471C4D1Ev();
Name_Map name_map_S471C4[] = {
  NSPAIR(_ZN6S471C4C1Ev),
  NSPAIR(_ZN6S471C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S471C5;
extern VTBL_ENTRY _ZTI6S471C5[];
extern  VTBL_ENTRY _ZTV6S471C5[];
static Base_Class bases_S471C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S471C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S471C4[];
extern void _ZN6S471C4D1Ev();
extern void _ZN6S471C4D0Ev();
extern void _ZN6S471C53v10Ev();
extern void _ZN6S471C53v11Ev();
extern void _ZN6S471C53v12Ev();
extern void _ZN6S471C53v13Ev();
extern void _ZN6S471C53v14Ev();
extern void _ZN6S471C53v15Ev();
extern void _ZN6S471C53v16Ev();
extern void _ZN6S471C53v17Ev();
extern void _ZN6S471C53v18Ev();
extern void _ZN6S471C53v19Ev();
extern void _ZN6S471C53v20Ev();
extern void _ZN6S471C53v21Ev();
extern void _ZN6S471C53v22Ev();
extern void _ZN6S471C53v23Ev();
extern void _ZN6S471C53v24Ev();
extern void _ZN6S471C53v25Ev();
extern void _ZN6S471C53v26Ev();
extern void _ZN6S471C53v27Ev();
extern void _ZN6S471C53v28Ev();
extern void _ZN6S471C53v29Ev();
extern void _ZN6S471C53v30Ev();
extern void _ZN6S471C53v31Ev();
extern void _ZN6S471C53v32Ev();
extern void _ZN6S471C53v33Ev();
extern void _ZN6S471C53v34Ev();
extern void _ZN6S471C53v35Ev();
extern void _ZN6S471C53v36Ev();
extern void _ZN6S471C53v37Ev();
extern void _ZN6S471C53v38Ev();
extern void _ZN6S471C53v39Ev();
extern void _ZN6S471C53v40Ev();
extern void _ZN6S471C53v41Ev();
extern void _ZN6S471C53v42Ev();
extern void _ZN6S471C53v43Ev();
extern void _ZN6S471C53v44Ev();
extern void _ZN6S471C53v45Ev();
extern void _ZN6S471C53v46Ev();
extern void _ZN6S471C53v47Ev();
extern void _ZN6S471C53v48Ev();
extern void _ZN6S471C53v49Ev();
extern void _ZN6S471C53v50Ev();
extern void _ZN6S471C53v51Ev();
extern void _ZN6S471C53v52Ev();
extern void _ZN6S471C53v53Ev();
extern void _ZN6S471C53v54Ev();
extern void _ZN6S471C53v55Ev();
extern void _ZN6S471C53v56Ev();
extern void _ZN6S471C53v57Ev();
extern void _ZN6S471C53v58Ev();
extern void _ZN6S471C53v59Ev();
extern void _ZN6S471C53v60Ev();
extern void _ZN6S471C53v61Ev();
extern void _ZN6S471C53v62Ev();
extern void _ZN6S471C53v63Ev();
extern void _ZN6S471C53v64Ev();
extern void _ZN6S471C53v65Ev();
extern void _ZN6S471C53v66Ev();
extern void _ZN6S471C53v67Ev();
extern void _ZN6S471C53v68Ev();
extern void _ZN6S471C53v69Ev();
extern void _ZN6S471C53v70Ev();
extern void _ZN6S471C53v71Ev();
extern void _ZN6S471C53v72Ev();
extern void _ZN6S471C53v73Ev();
extern void _ZN6S471C43v74Ev();
extern void _ZN6S471C43v75Ev();
extern void _ZN6S471C43v76Ev();
extern void _ZN6S471C43v77Ev();
extern void _ZN6S471C43v78Ev();
extern void _ZN6S471C43v79Ev();
extern void _ZN6S471C43v80Ev();
extern void _ZN6S471C43v81Ev();
extern void _ZN6S471C43v82Ev();
extern void _ZN6S471C43v83Ev();
extern void _ZN6S471C43v84Ev();
extern void _ZN6S471C43v85Ev();
extern void _ZN6S471C43v86Ev();
extern void _ZN6S471C43v87Ev();
extern void _ZN6S471C43v88Ev();
extern void _ZN6S471C43v89Ev();
extern void _ZN6S471C43v90Ev();
extern void _ZN6S471C43v91Ev();
extern void _ZN6S471C43v92Ev();
extern void _ZN6S471C43v93Ev();
extern void _ZN6S471C43v94Ev();
extern void _ZN6S471C43v95Ev();
extern void _ZN6S471C43v96Ev();
extern void _ZN6S471C43v97Ev();
extern void _ZN6S471C43v98Ev();
extern void _ZN6S471C43v99Ev();
extern void _ZN6S471C44v100Ev();
static  VTBL_ENTRY vtc_S471C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S471C4[0]),
  (VTBL_ENTRY)&_ZN6S471C4D1Ev,
  (VTBL_ENTRY)&_ZN6S471C4D0Ev,
  (VTBL_ENTRY)&_ZN6S471C53v10Ev,
  (VTBL_ENTRY)&_ZN6S471C53v11Ev,
  (VTBL_ENTRY)&_ZN6S471C53v12Ev,
  (VTBL_ENTRY)&_ZN6S471C53v13Ev,
  (VTBL_ENTRY)&_ZN6S471C53v14Ev,
  (VTBL_ENTRY)&_ZN6S471C53v15Ev,
  (VTBL_ENTRY)&_ZN6S471C53v16Ev,
  (VTBL_ENTRY)&_ZN6S471C53v17Ev,
  (VTBL_ENTRY)&_ZN6S471C53v18Ev,
  (VTBL_ENTRY)&_ZN6S471C53v19Ev,
  (VTBL_ENTRY)&_ZN6S471C53v20Ev,
  (VTBL_ENTRY)&_ZN6S471C53v21Ev,
  (VTBL_ENTRY)&_ZN6S471C53v22Ev,
  (VTBL_ENTRY)&_ZN6S471C53v23Ev,
  (VTBL_ENTRY)&_ZN6S471C53v24Ev,
  (VTBL_ENTRY)&_ZN6S471C53v25Ev,
  (VTBL_ENTRY)&_ZN6S471C53v26Ev,
  (VTBL_ENTRY)&_ZN6S471C53v27Ev,
  (VTBL_ENTRY)&_ZN6S471C53v28Ev,
  (VTBL_ENTRY)&_ZN6S471C53v29Ev,
  (VTBL_ENTRY)&_ZN6S471C53v30Ev,
  (VTBL_ENTRY)&_ZN6S471C53v31Ev,
  (VTBL_ENTRY)&_ZN6S471C53v32Ev,
  (VTBL_ENTRY)&_ZN6S471C53v33Ev,
  (VTBL_ENTRY)&_ZN6S471C53v34Ev,
  (VTBL_ENTRY)&_ZN6S471C53v35Ev,
  (VTBL_ENTRY)&_ZN6S471C53v36Ev,
  (VTBL_ENTRY)&_ZN6S471C53v37Ev,
  (VTBL_ENTRY)&_ZN6S471C53v38Ev,
  (VTBL_ENTRY)&_ZN6S471C53v39Ev,
  (VTBL_ENTRY)&_ZN6S471C53v40Ev,
  (VTBL_ENTRY)&_ZN6S471C53v41Ev,
  (VTBL_ENTRY)&_ZN6S471C53v42Ev,
  (VTBL_ENTRY)&_ZN6S471C53v43Ev,
  (VTBL_ENTRY)&_ZN6S471C53v44Ev,
  (VTBL_ENTRY)&_ZN6S471C53v45Ev,
  (VTBL_ENTRY)&_ZN6S471C53v46Ev,
  (VTBL_ENTRY)&_ZN6S471C53v47Ev,
  (VTBL_ENTRY)&_ZN6S471C53v48Ev,
  (VTBL_ENTRY)&_ZN6S471C53v49Ev,
  (VTBL_ENTRY)&_ZN6S471C53v50Ev,
  (VTBL_ENTRY)&_ZN6S471C53v51Ev,
  (VTBL_ENTRY)&_ZN6S471C53v52Ev,
  (VTBL_ENTRY)&_ZN6S471C53v53Ev,
  (VTBL_ENTRY)&_ZN6S471C53v54Ev,
  (VTBL_ENTRY)&_ZN6S471C53v55Ev,
  (VTBL_ENTRY)&_ZN6S471C53v56Ev,
  (VTBL_ENTRY)&_ZN6S471C53v57Ev,
  (VTBL_ENTRY)&_ZN6S471C53v58Ev,
  (VTBL_ENTRY)&_ZN6S471C53v59Ev,
  (VTBL_ENTRY)&_ZN6S471C53v60Ev,
  (VTBL_ENTRY)&_ZN6S471C53v61Ev,
  (VTBL_ENTRY)&_ZN6S471C53v62Ev,
  (VTBL_ENTRY)&_ZN6S471C53v63Ev,
  (VTBL_ENTRY)&_ZN6S471C53v64Ev,
  (VTBL_ENTRY)&_ZN6S471C53v65Ev,
  (VTBL_ENTRY)&_ZN6S471C53v66Ev,
  (VTBL_ENTRY)&_ZN6S471C53v67Ev,
  (VTBL_ENTRY)&_ZN6S471C53v68Ev,
  (VTBL_ENTRY)&_ZN6S471C53v69Ev,
  (VTBL_ENTRY)&_ZN6S471C53v70Ev,
  (VTBL_ENTRY)&_ZN6S471C53v71Ev,
  (VTBL_ENTRY)&_ZN6S471C53v72Ev,
  (VTBL_ENTRY)&_ZN6S471C53v73Ev,
  (VTBL_ENTRY)&_ZN6S471C43v74Ev,
  (VTBL_ENTRY)&_ZN6S471C43v75Ev,
  (VTBL_ENTRY)&_ZN6S471C43v76Ev,
  (VTBL_ENTRY)&_ZN6S471C43v77Ev,
  (VTBL_ENTRY)&_ZN6S471C43v78Ev,
  (VTBL_ENTRY)&_ZN6S471C43v79Ev,
  (VTBL_ENTRY)&_ZN6S471C43v80Ev,
  (VTBL_ENTRY)&_ZN6S471C43v81Ev,
  (VTBL_ENTRY)&_ZN6S471C43v82Ev,
  (VTBL_ENTRY)&_ZN6S471C43v83Ev,
  (VTBL_ENTRY)&_ZN6S471C43v84Ev,
  (VTBL_ENTRY)&_ZN6S471C43v85Ev,
  (VTBL_ENTRY)&_ZN6S471C43v86Ev,
  (VTBL_ENTRY)&_ZN6S471C43v87Ev,
  (VTBL_ENTRY)&_ZN6S471C43v88Ev,
  (VTBL_ENTRY)&_ZN6S471C43v89Ev,
  (VTBL_ENTRY)&_ZN6S471C43v90Ev,
  (VTBL_ENTRY)&_ZN6S471C43v91Ev,
  (VTBL_ENTRY)&_ZN6S471C43v92Ev,
  (VTBL_ENTRY)&_ZN6S471C43v93Ev,
  (VTBL_ENTRY)&_ZN6S471C43v94Ev,
  (VTBL_ENTRY)&_ZN6S471C43v95Ev,
  (VTBL_ENTRY)&_ZN6S471C43v96Ev,
  (VTBL_ENTRY)&_ZN6S471C43v97Ev,
  (VTBL_ENTRY)&_ZN6S471C43v98Ev,
  (VTBL_ENTRY)&_ZN6S471C43v99Ev,
  (VTBL_ENTRY)&_ZN6S471C44v100Ev,
};
extern VTBL_ENTRY _ZTI6S471C4[];
extern  VTBL_ENTRY _ZTV6S471C4[];
Class_Descriptor cd_S471C4 = {  "S471C4", // class name
  bases_S471C4, 1,
  &(vtc_S471C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S471C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S471C4),95, //virtual function table var
  2, // 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  S471C3  : S471C4 {
  ::S615C22_nt s471c3f0;
  unsigned int s471c3f1:1;
  virtual  ~S471C3(); // _ZN6S471C3D1Ev
  virtual void  v101(); // _ZN6S471C34v101Ev
  virtual void  v102(); // _ZN6S471C34v102Ev
  virtual void  v103(); // _ZN6S471C34v103Ev
  virtual void  v104(); // _ZN6S471C34v104Ev
  virtual void  v105(); // _ZN6S471C34v105Ev
  virtual void  v106(); // _ZN6S471C34v106Ev
  virtual void  v107(); // _ZN6S471C34v107Ev
  virtual void  v108(); // _ZN6S471C34v108Ev
  virtual void  v109(); // _ZN6S471C34v109Ev
  virtual void  v110(); // _ZN6S471C34v110Ev
  virtual void  v111(); // _ZN6S471C34v111Ev
  virtual void  v112(); // _ZN6S471C34v112Ev
  virtual void  v113(); // _ZN6S471C34v113Ev
  virtual void  v114(); // _ZN6S471C34v114Ev
  virtual void  v115(); // _ZN6S471C34v115Ev
  virtual void  v116(); // _ZN6S471C34v116Ev
  virtual void  v117(); // _ZN6S471C34v117Ev
  virtual void  v118(); // _ZN6S471C34v118Ev
  S471C3(); // tgen
};
//SIG(-1 S471C3) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S471C3 ::~S471C3(){ note_dtor("S471C3", this);}
void  S471C3 ::v101(){vfunc_called(this, "_ZN6S471C34v101Ev");}
void  S471C3 ::v102(){vfunc_called(this, "_ZN6S471C34v102Ev");}
void  S471C3 ::v103(){vfunc_called(this, "_ZN6S471C34v103Ev");}
void  S471C3 ::v104(){vfunc_called(this, "_ZN6S471C34v104Ev");}
void  S471C3 ::v105(){vfunc_called(this, "_ZN6S471C34v105Ev");}
void  S471C3 ::v106(){vfunc_called(this, "_ZN6S471C34v106Ev");}
void  S471C3 ::v107(){vfunc_called(this, "_ZN6S471C34v107Ev");}
void  S471C3 ::v108(){vfunc_called(this, "_ZN6S471C34v108Ev");}
void  S471C3 ::v109(){vfunc_called(this, "_ZN6S471C34v109Ev");}
void  S471C3 ::v110(){vfunc_called(this, "_ZN6S471C34v110Ev");}
void  S471C3 ::v111(){vfunc_called(this, "_ZN6S471C34v111Ev");}
void  S471C3 ::v112(){vfunc_called(this, "_ZN6S471C34v112Ev");}
void  S471C3 ::v113(){vfunc_called(this, "_ZN6S471C34v113Ev");}
void  S471C3 ::v114(){vfunc_called(this, "_ZN6S471C34v114Ev");}
void  S471C3 ::v115(){vfunc_called(this, "_ZN6S471C34v115Ev");}
void  S471C3 ::v116(){vfunc_called(this, "_ZN6S471C34v116Ev");}
void  S471C3 ::v117(){vfunc_called(this, "_ZN6S471C34v117Ev");}
void  S471C3 ::v118(){vfunc_called(this, "_ZN6S471C34v118Ev");}
S471C3 ::S471C3(){ note_ctor("S471C3", this);} // tgen

static void Test_S471C3()
{
  extern Class_Descriptor cd_S471C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S471C3, buf);
    S471C3 *dp, &lv = *(dp=new (buf) S471C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S471C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S471C3)");
    check_base_class_offset(lv, (S471C5*)(S471C4*), 0, "S471C3");
    check_base_class_offset(lv, (S471C4*), 0, "S471C3");
    check_field_offset(lv, s471c3f0, ABISELECT(232,180), "S471C3.s471c3f0");
    set_bf_and_test(lv, s471c3f1, ABISELECT(248,192), 0, 1, 1, "S471C3");
    test_class_info(&lv, &cd_S471C3);
    dp->~S471C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS471C3(Test_S471C3, "S471C3", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S471C3C1Ev();
extern void _ZN6S471C3D1Ev();
Name_Map name_map_S471C3[] = {
  NSPAIR(_ZN6S471C3C1Ev),
  NSPAIR(_ZN6S471C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S471C5;
extern VTBL_ENTRY _ZTI6S471C5[];
extern  VTBL_ENTRY _ZTV6S471C5[];
extern Class_Descriptor cd_S471C4;
extern VTBL_ENTRY _ZTI6S471C4[];
extern  VTBL_ENTRY _ZTV6S471C4[];
static Base_Class bases_S471C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S471C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S471C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S471C3[];
extern void _ZN6S471C3D1Ev();
extern void _ZN6S471C3D0Ev();
extern void _ZN6S471C53v10Ev();
extern void _ZN6S471C53v11Ev();
extern void _ZN6S471C53v12Ev();
extern void _ZN6S471C53v13Ev();
extern void _ZN6S471C53v14Ev();
extern void _ZN6S471C53v15Ev();
extern void _ZN6S471C53v16Ev();
extern void _ZN6S471C53v17Ev();
extern void _ZN6S471C53v18Ev();
extern void _ZN6S471C53v19Ev();
extern void _ZN6S471C53v20Ev();
extern void _ZN6S471C53v21Ev();
extern void _ZN6S471C53v22Ev();
extern void _ZN6S471C53v23Ev();
extern void _ZN6S471C53v24Ev();
extern void _ZN6S471C53v25Ev();
extern void _ZN6S471C53v26Ev();
extern void _ZN6S471C53v27Ev();
extern void _ZN6S471C53v28Ev();
extern void _ZN6S471C53v29Ev();
extern void _ZN6S471C53v30Ev();
extern void _ZN6S471C53v31Ev();
extern void _ZN6S471C53v32Ev();
extern void _ZN6S471C53v33Ev();
extern void _ZN6S471C53v34Ev();
extern void _ZN6S471C53v35Ev();
extern void _ZN6S471C53v36Ev();
extern void _ZN6S471C53v37Ev();
extern void _ZN6S471C53v38Ev();
extern void _ZN6S471C53v39Ev();
extern void _ZN6S471C53v40Ev();
extern void _ZN6S471C53v41Ev();
extern void _ZN6S471C53v42Ev();
extern void _ZN6S471C53v43Ev();
extern void _ZN6S471C53v44Ev();
extern void _ZN6S471C53v45Ev();
extern void _ZN6S471C53v46Ev();
extern void _ZN6S471C53v47Ev();
extern void _ZN6S471C53v48Ev();
extern void _ZN6S471C53v49Ev();
extern void _ZN6S471C53v50Ev();
extern void _ZN6S471C53v51Ev();
extern void _ZN6S471C53v52Ev();
extern void _ZN6S471C53v53Ev();
extern void _ZN6S471C53v54Ev();
extern void _ZN6S471C53v55Ev();
extern void _ZN6S471C53v56Ev();
extern void _ZN6S471C53v57Ev();
extern void _ZN6S471C53v58Ev();
extern void _ZN6S471C53v59Ev();
extern void _ZN6S471C53v60Ev();
extern void _ZN6S471C53v61Ev();
extern void _ZN6S471C53v62Ev();
extern void _ZN6S471C53v63Ev();
extern void _ZN6S471C53v64Ev();
extern void _ZN6S471C53v65Ev();
extern void _ZN6S471C53v66Ev();
extern void _ZN6S471C53v67Ev();
extern void _ZN6S471C53v68Ev();
extern void _ZN6S471C53v69Ev();
extern void _ZN6S471C53v70Ev();
extern void _ZN6S471C53v71Ev();
extern void _ZN6S471C53v72Ev();
extern void _ZN6S471C53v73Ev();
extern void _ZN6S471C43v74Ev();
extern void _ZN6S471C43v75Ev();
extern void _ZN6S471C43v76Ev();
extern void _ZN6S471C43v77Ev();
extern void _ZN6S471C43v78Ev();
extern void _ZN6S471C43v79Ev();
extern void _ZN6S471C43v80Ev();
extern void _ZN6S471C43v81Ev();
extern void _ZN6S471C43v82Ev();
extern void _ZN6S471C43v83Ev();
extern void _ZN6S471C43v84Ev();
extern void _ZN6S471C43v85Ev();
extern void _ZN6S471C43v86Ev();
extern void _ZN6S471C43v87Ev();
extern void _ZN6S471C43v88Ev();
extern void _ZN6S471C43v89Ev();
extern void _ZN6S471C43v90Ev();
extern void _ZN6S471C43v91Ev();
extern void _ZN6S471C43v92Ev();
extern void _ZN6S471C43v93Ev();
extern void _ZN6S471C43v94Ev();
extern void _ZN6S471C43v95Ev();
extern void _ZN6S471C43v96Ev();
extern void _ZN6S471C43v97Ev();
extern void _ZN6S471C43v98Ev();
extern void _ZN6S471C43v99Ev();
extern void _ZN6S471C44v100Ev();
extern void _ZN6S471C34v101Ev();
extern void _ZN6S471C34v102Ev();
extern void _ZN6S471C34v103Ev();
extern void _ZN6S471C34v104Ev();
extern void _ZN6S471C34v105Ev();
extern void _ZN6S471C34v106Ev();
extern void _ZN6S471C34v107Ev();
extern void _ZN6S471C34v108Ev();
extern void _ZN6S471C34v109Ev();
extern void _ZN6S471C34v110Ev();
extern void _ZN6S471C34v111Ev();
extern void _ZN6S471C34v112Ev();
extern void _ZN6S471C34v113Ev();
extern void _ZN6S471C34v114Ev();
extern void _ZN6S471C34v115Ev();
extern void _ZN6S471C34v116Ev();
extern void _ZN6S471C34v117Ev();
extern void _ZN6S471C34v118Ev();
static  VTBL_ENTRY vtc_S471C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S471C3[0]),
  (VTBL_ENTRY)&_ZN6S471C3D1Ev,
  (VTBL_ENTRY)&_ZN6S471C3D0Ev,
  (VTBL_ENTRY)&_ZN6S471C53v10Ev,
  (VTBL_ENTRY)&_ZN6S471C53v11Ev,
  (VTBL_ENTRY)&_ZN6S471C53v12Ev,
  (VTBL_ENTRY)&_ZN6S471C53v13Ev,
  (VTBL_ENTRY)&_ZN6S471C53v14Ev,
  (VTBL_ENTRY)&_ZN6S471C53v15Ev,
  (VTBL_ENTRY)&_ZN6S471C53v16Ev,
  (VTBL_ENTRY)&_ZN6S471C53v17Ev,
  (VTBL_ENTRY)&_ZN6S471C53v18Ev,
  (VTBL_ENTRY)&_ZN6S471C53v19Ev,
  (VTBL_ENTRY)&_ZN6S471C53v20Ev,
  (VTBL_ENTRY)&_ZN6S471C53v21Ev,
  (VTBL_ENTRY)&_ZN6S471C53v22Ev,
  (VTBL_ENTRY)&_ZN6S471C53v23Ev,
  (VTBL_ENTRY)&_ZN6S471C53v24Ev,
  (VTBL_ENTRY)&_ZN6S471C53v25Ev,
  (VTBL_ENTRY)&_ZN6S471C53v26Ev,
  (VTBL_ENTRY)&_ZN6S471C53v27Ev,
  (VTBL_ENTRY)&_ZN6S471C53v28Ev,
  (VTBL_ENTRY)&_ZN6S471C53v29Ev,
  (VTBL_ENTRY)&_ZN6S471C53v30Ev,
  (VTBL_ENTRY)&_ZN6S471C53v31Ev,
  (VTBL_ENTRY)&_ZN6S471C53v32Ev,
  (VTBL_ENTRY)&_ZN6S471C53v33Ev,
  (VTBL_ENTRY)&_ZN6S471C53v34Ev,
  (VTBL_ENTRY)&_ZN6S471C53v35Ev,
  (VTBL_ENTRY)&_ZN6S471C53v36Ev,
  (VTBL_ENTRY)&_ZN6S471C53v37Ev,
  (VTBL_ENTRY)&_ZN6S471C53v38Ev,
  (VTBL_ENTRY)&_ZN6S471C53v39Ev,
  (VTBL_ENTRY)&_ZN6S471C53v40Ev,
  (VTBL_ENTRY)&_ZN6S471C53v41Ev,
  (VTBL_ENTRY)&_ZN6S471C53v42Ev,
  (VTBL_ENTRY)&_ZN6S471C53v43Ev,
  (VTBL_ENTRY)&_ZN6S471C53v44Ev,
  (VTBL_ENTRY)&_ZN6S471C53v45Ev,
  (VTBL_ENTRY)&_ZN6S471C53v46Ev,
  (VTBL_ENTRY)&_ZN6S471C53v47Ev,
  (VTBL_ENTRY)&_ZN6S471C53v48Ev,
  (VTBL_ENTRY)&_ZN6S471C53v49Ev,
  (VTBL_ENTRY)&_ZN6S471C53v50Ev,
  (VTBL_ENTRY)&_ZN6S471C53v51Ev,
  (VTBL_ENTRY)&_ZN6S471C53v52Ev,
  (VTBL_ENTRY)&_ZN6S471C53v53Ev,
  (VTBL_ENTRY)&_ZN6S471C53v54Ev,
  (VTBL_ENTRY)&_ZN6S471C53v55Ev,
  (VTBL_ENTRY)&_ZN6S471C53v56Ev,
  (VTBL_ENTRY)&_ZN6S471C53v57Ev,
  (VTBL_ENTRY)&_ZN6S471C53v58Ev,
  (VTBL_ENTRY)&_ZN6S471C53v59Ev,
  (VTBL_ENTRY)&_ZN6S471C53v60Ev,
  (VTBL_ENTRY)&_ZN6S471C53v61Ev,
  (VTBL_ENTRY)&_ZN6S471C53v62Ev,
  (VTBL_ENTRY)&_ZN6S471C53v63Ev,
  (VTBL_ENTRY)&_ZN6S471C53v64Ev,
  (VTBL_ENTRY)&_ZN6S471C53v65Ev,
  (VTBL_ENTRY)&_ZN6S471C53v66Ev,
  (VTBL_ENTRY)&_ZN6S471C53v67Ev,
  (VTBL_ENTRY)&_ZN6S471C53v68Ev,
  (VTBL_ENTRY)&_ZN6S471C53v69Ev,
  (VTBL_ENTRY)&_ZN6S471C53v70Ev,
  (VTBL_ENTRY)&_ZN6S471C53v71Ev,
  (VTBL_ENTRY)&_ZN6S471C53v72Ev,
  (VTBL_ENTRY)&_ZN6S471C53v73Ev,
  (VTBL_ENTRY)&_ZN6S471C43v74Ev,
  (VTBL_ENTRY)&_ZN6S471C43v75Ev,
  (VTBL_ENTRY)&_ZN6S471C43v76Ev,
  (VTBL_ENTRY)&_ZN6S471C43v77Ev,
  (VTBL_ENTRY)&_ZN6S471C43v78Ev,
  (VTBL_ENTRY)&_ZN6S471C43v79Ev,
  (VTBL_ENTRY)&_ZN6S471C43v80Ev,
  (VTBL_ENTRY)&_ZN6S471C43v81Ev,
  (VTBL_ENTRY)&_ZN6S471C43v82Ev,
  (VTBL_ENTRY)&_ZN6S471C43v83Ev,
  (VTBL_ENTRY)&_ZN6S471C43v84Ev,
  (VTBL_ENTRY)&_ZN6S471C43v85Ev,
  (VTBL_ENTRY)&_ZN6S471C43v86Ev,
  (VTBL_ENTRY)&_ZN6S471C43v87Ev,
  (VTBL_ENTRY)&_ZN6S471C43v88Ev,
  (VTBL_ENTRY)&_ZN6S471C43v89Ev,
  (VTBL_ENTRY)&_ZN6S471C43v90Ev,
  (VTBL_ENTRY)&_ZN6S471C43v91Ev,
  (VTBL_ENTRY)&_ZN6S471C43v92Ev,
  (VTBL_ENTRY)&_ZN6S471C43v93Ev,
  (VTBL_ENTRY)&_ZN6S471C43v94Ev,
  (VTBL_ENTRY)&_ZN6S471C43v95Ev,
  (VTBL_ENTRY)&_ZN6S471C43v96Ev,
  (VTBL_ENTRY)&_ZN6S471C43v97Ev,
  (VTBL_ENTRY)&_ZN6S471C43v98Ev,
  (VTBL_ENTRY)&_ZN6S471C43v99Ev,
  (VTBL_ENTRY)&_ZN6S471C44v100Ev,
  (VTBL_ENTRY)&_ZN6S471C34v101Ev,
  (VTBL_ENTRY)&_ZN6S471C34v102Ev,
  (VTBL_ENTRY)&_ZN6S471C34v103Ev,
  (VTBL_ENTRY)&_ZN6S471C34v104Ev,
  (VTBL_ENTRY)&_ZN6S471C34v105Ev,
  (VTBL_ENTRY)&_ZN6S471C34v106Ev,
  (VTBL_ENTRY)&_ZN6S471C34v107Ev,
  (VTBL_ENTRY)&_ZN6S471C34v108Ev,
  (VTBL_ENTRY)&_ZN6S471C34v109Ev,
  (VTBL_ENTRY)&_ZN6S471C34v110Ev,
  (VTBL_ENTRY)&_ZN6S471C34v111Ev,
  (VTBL_ENTRY)&_ZN6S471C34v112Ev,
  (VTBL_ENTRY)&_ZN6S471C34v113Ev,
  (VTBL_ENTRY)&_ZN6S471C34v114Ev,
  (VTBL_ENTRY)&_ZN6S471C34v115Ev,
  (VTBL_ENTRY)&_ZN6S471C34v116Ev,
  (VTBL_ENTRY)&_ZN6S471C34v117Ev,
  (VTBL_ENTRY)&_ZN6S471C34v118Ev,
};
extern VTBL_ENTRY _ZTI6S471C3[];
extern  VTBL_ENTRY _ZTV6S471C3[];
Class_Descriptor cd_S471C3 = {  "S471C3", // class name
  bases_S471C3, 2,
  &(vtc_S471C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S471C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S471C3),113, //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  S471C2  : S471C3 {
  ::S165C27 s471c2f0;
  int s471c2f1[2];
  unsigned int s471c2f2:1;
  virtual  ~S471C2(); // _ZN6S471C2D1Ev
  virtual void  v119(); // _ZN6S471C24v119Ev
  virtual void  v120(); // _ZN6S471C24v120Ev
  virtual void  v121(); // _ZN6S471C24v121Ev
  virtual void  v122(); // _ZN6S471C24v122Ev
  virtual void  v123(); // _ZN6S471C24v123Ev
  virtual void  v124(); // _ZN6S471C24v124Ev
  virtual void  v125(); // _ZN6S471C24v125Ev
  S471C2(); // tgen
};
//SIG(-1 S471C2) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 FC16{ BC17{ BC8}} Fi[2] Fi:1}


 S471C2 ::~S471C2(){ note_dtor("S471C2", this);}
void  S471C2 ::v119(){vfunc_called(this, "_ZN6S471C24v119Ev");}
void  S471C2 ::v120(){vfunc_called(this, "_ZN6S471C24v120Ev");}
void  S471C2 ::v121(){vfunc_called(this, "_ZN6S471C24v121Ev");}
void  S471C2 ::v122(){vfunc_called(this, "_ZN6S471C24v122Ev");}
void  S471C2 ::v123(){vfunc_called(this, "_ZN6S471C24v123Ev");}
void  S471C2 ::v124(){vfunc_called(this, "_ZN6S471C24v124Ev");}
void  S471C2 ::v125(){vfunc_called(this, "_ZN6S471C24v125Ev");}
S471C2 ::S471C2(){ note_ctor("S471C2", this);} // tgen

static void Test_S471C2()
{
  extern Class_Descriptor cd_S471C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,56)];
    init_test(&cd_S471C2, buf);
    S471C2 *dp, &lv = *(dp=new (buf) S471C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,220), "sizeof(S471C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S471C2)");
    check_base_class_offset(lv, (S471C5*)(S471C4*)(S471C3*), 0, "S471C2");
    check_base_class_offset(lv, (S471C4*)(S471C3*), 0, "S471C2");
    check_base_class_offset(lv, (S471C3*), 0, "S471C2");
    check_field_offset(lv, s471c2f0, ABISELECT(256,196), "S471C2.s471c2f0");
    check_field_offset(lv, s471c2f1, ABISELECT(272,208), "S471C2.s471c2f1");
    set_bf_and_test(lv, s471c2f2, ABISELECT(280,216), 0, 1, 1, "S471C2");
    test_class_info(&lv, &cd_S471C2);
    dp->~S471C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS471C2(Test_S471C2, "S471C2", ABISELECT(288,220));

#else // __cplusplus

extern void _ZN6S471C2C1Ev();
extern void _ZN6S471C2D1Ev();
Name_Map name_map_S471C2[] = {
  NSPAIR(_ZN6S471C2C1Ev),
  NSPAIR(_ZN6S471C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S471C5;
extern VTBL_ENTRY _ZTI6S471C5[];
extern  VTBL_ENTRY _ZTV6S471C5[];
extern Class_Descriptor cd_S471C4;
extern VTBL_ENTRY _ZTI6S471C4[];
extern  VTBL_ENTRY _ZTV6S471C4[];
extern Class_Descriptor cd_S471C3;
extern VTBL_ENTRY _ZTI6S471C3[];
extern  VTBL_ENTRY _ZTV6S471C3[];
static Base_Class bases_S471C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S471C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S471C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S471C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S471C2[];
extern void _ZN6S471C2D1Ev();
extern void _ZN6S471C2D0Ev();
extern void _ZN6S471C53v10Ev();
extern void _ZN6S471C53v11Ev();
extern void _ZN6S471C53v12Ev();
extern void _ZN6S471C53v13Ev();
extern void _ZN6S471C53v14Ev();
extern void _ZN6S471C53v15Ev();
extern void _ZN6S471C53v16Ev();
extern void _ZN6S471C53v17Ev();
extern void _ZN6S471C53v18Ev();
extern void _ZN6S471C53v19Ev();
extern void _ZN6S471C53v20Ev();
extern void _ZN6S471C53v21Ev();
extern void _ZN6S471C53v22Ev();
extern void _ZN6S471C53v23Ev();
extern void _ZN6S471C53v24Ev();
extern void _ZN6S471C53v25Ev();
extern void _ZN6S471C53v26Ev();
extern void _ZN6S471C53v27Ev();
extern void _ZN6S471C53v28Ev();
extern void _ZN6S471C53v29Ev();
extern void _ZN6S471C53v30Ev();
extern void _ZN6S471C53v31Ev();
extern void _ZN6S471C53v32Ev();
extern void _ZN6S471C53v33Ev();
extern void _ZN6S471C53v34Ev();
extern void _ZN6S471C53v35Ev();
extern void _ZN6S471C53v36Ev();
extern void _ZN6S471C53v37Ev();
extern void _ZN6S471C53v38Ev();
extern void _ZN6S471C53v39Ev();
extern void _ZN6S471C53v40Ev();
extern void _ZN6S471C53v41Ev();
extern void _ZN6S471C53v42Ev();
extern void _ZN6S471C53v43Ev();
extern void _ZN6S471C53v44Ev();
extern void _ZN6S471C53v45Ev();
extern void _ZN6S471C53v46Ev();
extern void _ZN6S471C53v47Ev();
extern void _ZN6S471C53v48Ev();
extern void _ZN6S471C53v49Ev();
extern void _ZN6S471C53v50Ev();
extern void _ZN6S471C53v51Ev();
extern void _ZN6S471C53v52Ev();
extern void _ZN6S471C53v53Ev();
extern void _ZN6S471C53v54Ev();
extern void _ZN6S471C53v55Ev();
extern void _ZN6S471C53v56Ev();
extern void _ZN6S471C53v57Ev();
extern void _ZN6S471C53v58Ev();
extern void _ZN6S471C53v59Ev();
extern void _ZN6S471C53v60Ev();
extern void _ZN6S471C53v61Ev();
extern void _ZN6S471C53v62Ev();
extern void _ZN6S471C53v63Ev();
extern void _ZN6S471C53v64Ev();
extern void _ZN6S471C53v65Ev();
extern void _ZN6S471C53v66Ev();
extern void _ZN6S471C53v67Ev();
extern void _ZN6S471C53v68Ev();
extern void _ZN6S471C53v69Ev();
extern void _ZN6S471C53v70Ev();
extern void _ZN6S471C53v71Ev();
extern void _ZN6S471C53v72Ev();
extern void _ZN6S471C53v73Ev();
extern void _ZN6S471C43v74Ev();
extern void _ZN6S471C43v75Ev();
extern void _ZN6S471C43v76Ev();
extern void _ZN6S471C43v77Ev();
extern void _ZN6S471C43v78Ev();
extern void _ZN6S471C43v79Ev();
extern void _ZN6S471C43v80Ev();
extern void _ZN6S471C43v81Ev();
extern void _ZN6S471C43v82Ev();
extern void _ZN6S471C43v83Ev();
extern void _ZN6S471C43v84Ev();
extern void _ZN6S471C43v85Ev();
extern void _ZN6S471C43v86Ev();
extern void _ZN6S471C43v87Ev();
extern void _ZN6S471C43v88Ev();
extern void _ZN6S471C43v89Ev();
extern void _ZN6S471C43v90Ev();
extern void _ZN6S471C43v91Ev();
extern void _ZN6S471C43v92Ev();
extern void _ZN6S471C43v93Ev();
extern void _ZN6S471C43v94Ev();
extern void _ZN6S471C43v95Ev();
extern void _ZN6S471C43v96Ev();
extern void _ZN6S471C43v97Ev();
extern void _ZN6S471C43v98Ev();
extern void _ZN6S471C43v99Ev();
extern void _ZN6S471C44v100Ev();
extern void _ZN6S471C34v101Ev();
extern void _ZN6S471C34v102Ev();
extern void _ZN6S471C34v103Ev();
extern void _ZN6S471C34v104Ev();
extern void _ZN6S471C34v105Ev();
extern void _ZN6S471C34v106Ev();
extern void _ZN6S471C34v107Ev();
extern void _ZN6S471C34v108Ev();
extern void _ZN6S471C34v109Ev();
extern void _ZN6S471C34v110Ev();
extern void _ZN6S471C34v111Ev();
extern void _ZN6S471C34v112Ev();
extern void _ZN6S471C34v113Ev();
extern void _ZN6S471C34v114Ev();
extern void _ZN6S471C34v115Ev();
extern void _ZN6S471C34v116Ev();
extern void _ZN6S471C34v117Ev();
extern void _ZN6S471C34v118Ev();
extern void _ZN6S471C24v119Ev();
extern void _ZN6S471C24v120Ev();
extern void _ZN6S471C24v121Ev();
extern void _ZN6S471C24v122Ev();
extern void _ZN6S471C24v123Ev();
extern void _ZN6S471C24v124Ev();
extern void _ZN6S471C24v125Ev();
static  VTBL_ENTRY vtc_S471C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S471C2[0]),
  (VTBL_ENTRY)&_ZN6S471C2D1Ev,
  (VTBL_ENTRY)&_ZN6S471C2D0Ev,
  (VTBL_ENTRY)&_ZN6S471C53v10Ev,
  (VTBL_ENTRY)&_ZN6S471C53v11Ev,
  (VTBL_ENTRY)&_ZN6S471C53v12Ev,
  (VTBL_ENTRY)&_ZN6S471C53v13Ev,
  (VTBL_ENTRY)&_ZN6S471C53v14Ev,
  (VTBL_ENTRY)&_ZN6S471C53v15Ev,
  (VTBL_ENTRY)&_ZN6S471C53v16Ev,
  (VTBL_ENTRY)&_ZN6S471C53v17Ev,
  (VTBL_ENTRY)&_ZN6S471C53v18Ev,
  (VTBL_ENTRY)&_ZN6S471C53v19Ev,
  (VTBL_ENTRY)&_ZN6S471C53v20Ev,
  (VTBL_ENTRY)&_ZN6S471C53v21Ev,
  (VTBL_ENTRY)&_ZN6S471C53v22Ev,
  (VTBL_ENTRY)&_ZN6S471C53v23Ev,
  (VTBL_ENTRY)&_ZN6S471C53v24Ev,
  (VTBL_ENTRY)&_ZN6S471C53v25Ev,
  (VTBL_ENTRY)&_ZN6S471C53v26Ev,
  (VTBL_ENTRY)&_ZN6S471C53v27Ev,
  (VTBL_ENTRY)&_ZN6S471C53v28Ev,
  (VTBL_ENTRY)&_ZN6S471C53v29Ev,
  (VTBL_ENTRY)&_ZN6S471C53v30Ev,
  (VTBL_ENTRY)&_ZN6S471C53v31Ev,
  (VTBL_ENTRY)&_ZN6S471C53v32Ev,
  (VTBL_ENTRY)&_ZN6S471C53v33Ev,
  (VTBL_ENTRY)&_ZN6S471C53v34Ev,
  (VTBL_ENTRY)&_ZN6S471C53v35Ev,
  (VTBL_ENTRY)&_ZN6S471C53v36Ev,
  (VTBL_ENTRY)&_ZN6S471C53v37Ev,
  (VTBL_ENTRY)&_ZN6S471C53v38Ev,
  (VTBL_ENTRY)&_ZN6S471C53v39Ev,
  (VTBL_ENTRY)&_ZN6S471C53v40Ev,
  (VTBL_ENTRY)&_ZN6S471C53v41Ev,
  (VTBL_ENTRY)&_ZN6S471C53v42Ev,
  (VTBL_ENTRY)&_ZN6S471C53v43Ev,
  (VTBL_ENTRY)&_ZN6S471C53v44Ev,
  (VTBL_ENTRY)&_ZN6S471C53v45Ev,
  (VTBL_ENTRY)&_ZN6S471C53v46Ev,
  (VTBL_ENTRY)&_ZN6S471C53v47Ev,
  (VTBL_ENTRY)&_ZN6S471C53v48Ev,
  (VTBL_ENTRY)&_ZN6S471C53v49Ev,
  (VTBL_ENTRY)&_ZN6S471C53v50Ev,
  (VTBL_ENTRY)&_ZN6S471C53v51Ev,
  (VTBL_ENTRY)&_ZN6S471C53v52Ev,
  (VTBL_ENTRY)&_ZN6S471C53v53Ev,
  (VTBL_ENTRY)&_ZN6S471C53v54Ev,
  (VTBL_ENTRY)&_ZN6S471C53v55Ev,
  (VTBL_ENTRY)&_ZN6S471C53v56Ev,
  (VTBL_ENTRY)&_ZN6S471C53v57Ev,
  (VTBL_ENTRY)&_ZN6S471C53v58Ev,
  (VTBL_ENTRY)&_ZN6S471C53v59Ev,
  (VTBL_ENTRY)&_ZN6S471C53v60Ev,
  (VTBL_ENTRY)&_ZN6S471C53v61Ev,
  (VTBL_ENTRY)&_ZN6S471C53v62Ev,
  (VTBL_ENTRY)&_ZN6S471C53v63Ev,
  (VTBL_ENTRY)&_ZN6S471C53v64Ev,
  (VTBL_ENTRY)&_ZN6S471C53v65Ev,
  (VTBL_ENTRY)&_ZN6S471C53v66Ev,
  (VTBL_ENTRY)&_ZN6S471C53v67Ev,
  (VTBL_ENTRY)&_ZN6S471C53v68Ev,
  (VTBL_ENTRY)&_ZN6S471C53v69Ev,
  (VTBL_ENTRY)&_ZN6S471C53v70Ev,
  (VTBL_ENTRY)&_ZN6S471C53v71Ev,
  (VTBL_ENTRY)&_ZN6S471C53v72Ev,
  (VTBL_ENTRY)&_ZN6S471C53v73Ev,
  (VTBL_ENTRY)&_ZN6S471C43v74Ev,
  (VTBL_ENTRY)&_ZN6S471C43v75Ev,
  (VTBL_ENTRY)&_ZN6S471C43v76Ev,
  (VTBL_ENTRY)&_ZN6S471C43v77Ev,
  (VTBL_ENTRY)&_ZN6S471C43v78Ev,
  (VTBL_ENTRY)&_ZN6S471C43v79Ev,
  (VTBL_ENTRY)&_ZN6S471C43v80Ev,
  (VTBL_ENTRY)&_ZN6S471C43v81Ev,
  (VTBL_ENTRY)&_ZN6S471C43v82Ev,
  (VTBL_ENTRY)&_ZN6S471C43v83Ev,
  (VTBL_ENTRY)&_ZN6S471C43v84Ev,
  (VTBL_ENTRY)&_ZN6S471C43v85Ev,
  (VTBL_ENTRY)&_ZN6S471C43v86Ev,
  (VTBL_ENTRY)&_ZN6S471C43v87Ev,
  (VTBL_ENTRY)&_ZN6S471C43v88Ev,
  (VTBL_ENTRY)&_ZN6S471C43v89Ev,
  (VTBL_ENTRY)&_ZN6S471C43v90Ev,
  (VTBL_ENTRY)&_ZN6S471C43v91Ev,
  (VTBL_ENTRY)&_ZN6S471C43v92Ev,
  (VTBL_ENTRY)&_ZN6S471C43v93Ev,
  (VTBL_ENTRY)&_ZN6S471C43v94Ev,
  (VTBL_ENTRY)&_ZN6S471C43v95Ev,
  (VTBL_ENTRY)&_ZN6S471C43v96Ev,
  (VTBL_ENTRY)&_ZN6S471C43v97Ev,
  (VTBL_ENTRY)&_ZN6S471C43v98Ev,
  (VTBL_ENTRY)&_ZN6S471C43v99Ev,
  (VTBL_ENTRY)&_ZN6S471C44v100Ev,
  (VTBL_ENTRY)&_ZN6S471C34v101Ev,
  (VTBL_ENTRY)&_ZN6S471C34v102Ev,
  (VTBL_ENTRY)&_ZN6S471C34v103Ev,
  (VTBL_ENTRY)&_ZN6S471C34v104Ev,
  (VTBL_ENTRY)&_ZN6S471C34v105Ev,
  (VTBL_ENTRY)&_ZN6S471C34v106Ev,
  (VTBL_ENTRY)&_ZN6S471C34v107Ev,
  (VTBL_ENTRY)&_ZN6S471C34v108Ev,
  (VTBL_ENTRY)&_ZN6S471C34v109Ev,
  (VTBL_ENTRY)&_ZN6S471C34v110Ev,
  (VTBL_ENTRY)&_ZN6S471C34v111Ev,
  (VTBL_ENTRY)&_ZN6S471C34v112Ev,
  (VTBL_ENTRY)&_ZN6S471C34v113Ev,
  (VTBL_ENTRY)&_ZN6S471C34v114Ev,
  (VTBL_ENTRY)&_ZN6S471C34v115Ev,
  (VTBL_ENTRY)&_ZN6S471C34v116Ev,
  (VTBL_ENTRY)&_ZN6S471C34v117Ev,
  (VTBL_ENTRY)&_ZN6S471C34v118Ev,
  (VTBL_ENTRY)&_ZN6S471C24v119Ev,
  (VTBL_ENTRY)&_ZN6S471C24v120Ev,
  (VTBL_ENTRY)&_ZN6S471C24v121Ev,
  (VTBL_ENTRY)&_ZN6S471C24v122Ev,
  (VTBL_ENTRY)&_ZN6S471C24v123Ev,
  (VTBL_ENTRY)&_ZN6S471C24v124Ev,
  (VTBL_ENTRY)&_ZN6S471C24v125Ev,
};
extern VTBL_ENTRY _ZTI6S471C2[];
extern  VTBL_ENTRY _ZTV6S471C2[];
Class_Descriptor cd_S471C2 = {  "S471C2", // class name
  bases_S471C2, 3,
  &(vtc_S471C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,220), // object size
  NSPAIRA(_ZTI6S471C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S471C2),120, //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  S471C1  : S471C2 {
  int s471c1f0[5];
  ::S165C27 s471c1f1;
  unsigned int s471c1f2:1;
  virtual  ~S471C1(); // _ZN6S471C1D1Ev
  virtual void  v1(); // _ZN6S471C12v1Ev
  virtual void  v2(); // _ZN6S471C12v2Ev
  virtual void  v3(); // _ZN6S471C12v3Ev
  virtual void  v4(); // _ZN6S471C12v4Ev
  virtual void  v5(); // _ZN6S471C12v5Ev
  virtual void  v6(); // _ZN6S471C12v6Ev
  virtual void  v7(); // _ZN6S471C12v7Ev
  virtual void  v8(); // _ZN6S471C12v8Ev
  virtual void  v9(); // _ZN6S471C12v9Ev
  S471C1(); // tgen
};
//SIG(1 S471C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 FC15{ BC16{ BC9}} Fi:1} vd v119 v120 v121 v122 v123 v124 v125 FC17{ BC18{ BC9}} Fi[2] Fi:1} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi[5] FC17 Fi:1}


 S471C1 ::~S471C1(){ note_dtor("S471C1", this);}
void  S471C1 ::v1(){vfunc_called(this, "_ZN6S471C12v1Ev");}
void  S471C1 ::v2(){vfunc_called(this, "_ZN6S471C12v2Ev");}
void  S471C1 ::v3(){vfunc_called(this, "_ZN6S471C12v3Ev");}
void  S471C1 ::v4(){vfunc_called(this, "_ZN6S471C12v4Ev");}
void  S471C1 ::v5(){vfunc_called(this, "_ZN6S471C12v5Ev");}
void  S471C1 ::v6(){vfunc_called(this, "_ZN6S471C12v6Ev");}
void  S471C1 ::v7(){vfunc_called(this, "_ZN6S471C12v7Ev");}
void  S471C1 ::v8(){vfunc_called(this, "_ZN6S471C12v8Ev");}
void  S471C1 ::v9(){vfunc_called(this, "_ZN6S471C12v9Ev");}
S471C1 ::S471C1(){ note_ctor("S471C1", this);} // tgen

static void Test_S471C1()
{
  extern Class_Descriptor cd_S471C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,65)];
    init_test(&cd_S471C1, buf);
    S471C1 *dp, &lv = *(dp=new (buf) S471C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,256), "sizeof(S471C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S471C1)");
    check_base_class_offset(lv, (S471C5*)(S471C4*)(S471C3*)(S471C2*), 0, "S471C1");
    check_base_class_offset(lv, (S471C4*)(S471C3*)(S471C2*), 0, "S471C1");
    check_base_class_offset(lv, (S471C3*)(S471C2*), 0, "S471C1");
    check_base_class_offset(lv, (S471C2*), 0, "S471C1");
    check_field_offset(lv, s471c1f0, ABISELECT(284,220), "S471C1.s471c1f0");
    check_field_offset(lv, s471c1f1, ABISELECT(304,240), "S471C1.s471c1f1");
    set_bf_and_test(lv, s471c1f2, ABISELECT(320,252), 0, 1, 1, "S471C1");
    test_class_info(&lv, &cd_S471C1);
    dp->~S471C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS471C1(Test_S471C1, "S471C1", ABISELECT(328,256));

#else // __cplusplus

extern void _ZN6S471C1C1Ev();
extern void _ZN6S471C1D1Ev();
Name_Map name_map_S471C1[] = {
  NSPAIR(_ZN6S471C1C1Ev),
  NSPAIR(_ZN6S471C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S471C5;
extern VTBL_ENTRY _ZTI6S471C5[];
extern  VTBL_ENTRY _ZTV6S471C5[];
extern Class_Descriptor cd_S471C4;
extern VTBL_ENTRY _ZTI6S471C4[];
extern  VTBL_ENTRY _ZTV6S471C4[];
extern Class_Descriptor cd_S471C3;
extern VTBL_ENTRY _ZTI6S471C3[];
extern  VTBL_ENTRY _ZTV6S471C3[];
extern Class_Descriptor cd_S471C2;
extern VTBL_ENTRY _ZTI6S471C2[];
extern  VTBL_ENTRY _ZTV6S471C2[];
static Base_Class bases_S471C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S471C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S471C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S471C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S471C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S471C1[];
extern void _ZN6S471C1D1Ev();
extern void _ZN6S471C1D0Ev();
extern void _ZN6S471C53v10Ev();
extern void _ZN6S471C53v11Ev();
extern void _ZN6S471C53v12Ev();
extern void _ZN6S471C53v13Ev();
extern void _ZN6S471C53v14Ev();
extern void _ZN6S471C53v15Ev();
extern void _ZN6S471C53v16Ev();
extern void _ZN6S471C53v17Ev();
extern void _ZN6S471C53v18Ev();
extern void _ZN6S471C53v19Ev();
extern void _ZN6S471C53v20Ev();
extern void _ZN6S471C53v21Ev();
extern void _ZN6S471C53v22Ev();
extern void _ZN6S471C53v23Ev();
extern void _ZN6S471C53v24Ev();
extern void _ZN6S471C53v25Ev();
extern void _ZN6S471C53v26Ev();
extern void _ZN6S471C53v27Ev();
extern void _ZN6S471C53v28Ev();
extern void _ZN6S471C53v29Ev();
extern void _ZN6S471C53v30Ev();
extern void _ZN6S471C53v31Ev();
extern void _ZN6S471C53v32Ev();
extern void _ZN6S471C53v33Ev();
extern void _ZN6S471C53v34Ev();
extern void _ZN6S471C53v35Ev();
extern void _ZN6S471C53v36Ev();
extern void _ZN6S471C53v37Ev();
extern void _ZN6S471C53v38Ev();
extern void _ZN6S471C53v39Ev();
extern void _ZN6S471C53v40Ev();
extern void _ZN6S471C53v41Ev();
extern void _ZN6S471C53v42Ev();
extern void _ZN6S471C53v43Ev();
extern void _ZN6S471C53v44Ev();
extern void _ZN6S471C53v45Ev();
extern void _ZN6S471C53v46Ev();
extern void _ZN6S471C53v47Ev();
extern void _ZN6S471C53v48Ev();
extern void _ZN6S471C53v49Ev();
extern void _ZN6S471C53v50Ev();
extern void _ZN6S471C53v51Ev();
extern void _ZN6S471C53v52Ev();
extern void _ZN6S471C53v53Ev();
extern void _ZN6S471C53v54Ev();
extern void _ZN6S471C53v55Ev();
extern void _ZN6S471C53v56Ev();
extern void _ZN6S471C53v57Ev();
extern void _ZN6S471C53v58Ev();
extern void _ZN6S471C53v59Ev();
extern void _ZN6S471C53v60Ev();
extern void _ZN6S471C53v61Ev();
extern void _ZN6S471C53v62Ev();
extern void _ZN6S471C53v63Ev();
extern void _ZN6S471C53v64Ev();
extern void _ZN6S471C53v65Ev();
extern void _ZN6S471C53v66Ev();
extern void _ZN6S471C53v67Ev();
extern void _ZN6S471C53v68Ev();
extern void _ZN6S471C53v69Ev();
extern void _ZN6S471C53v70Ev();
extern void _ZN6S471C53v71Ev();
extern void _ZN6S471C53v72Ev();
extern void _ZN6S471C53v73Ev();
extern void _ZN6S471C43v74Ev();
extern void _ZN6S471C43v75Ev();
extern void _ZN6S471C43v76Ev();
extern void _ZN6S471C43v77Ev();
extern void _ZN6S471C43v78Ev();
extern void _ZN6S471C43v79Ev();
extern void _ZN6S471C43v80Ev();
extern void _ZN6S471C43v81Ev();
extern void _ZN6S471C43v82Ev();
extern void _ZN6S471C43v83Ev();
extern void _ZN6S471C43v84Ev();
extern void _ZN6S471C43v85Ev();
extern void _ZN6S471C43v86Ev();
extern void _ZN6S471C43v87Ev();
extern void _ZN6S471C43v88Ev();
extern void _ZN6S471C43v89Ev();
extern void _ZN6S471C43v90Ev();
extern void _ZN6S471C43v91Ev();
extern void _ZN6S471C43v92Ev();
extern void _ZN6S471C43v93Ev();
extern void _ZN6S471C43v94Ev();
extern void _ZN6S471C43v95Ev();
extern void _ZN6S471C43v96Ev();
extern void _ZN6S471C43v97Ev();
extern void _ZN6S471C43v98Ev();
extern void _ZN6S471C43v99Ev();
extern void _ZN6S471C44v100Ev();
extern void _ZN6S471C34v101Ev();
extern void _ZN6S471C34v102Ev();
extern void _ZN6S471C34v103Ev();
extern void _ZN6S471C34v104Ev();
extern void _ZN6S471C34v105Ev();
extern void _ZN6S471C34v106Ev();
extern void _ZN6S471C34v107Ev();
extern void _ZN6S471C34v108Ev();
extern void _ZN6S471C34v109Ev();
extern void _ZN6S471C34v110Ev();
extern void _ZN6S471C34v111Ev();
extern void _ZN6S471C34v112Ev();
extern void _ZN6S471C34v113Ev();
extern void _ZN6S471C34v114Ev();
extern void _ZN6S471C34v115Ev();
extern void _ZN6S471C34v116Ev();
extern void _ZN6S471C34v117Ev();
extern void _ZN6S471C34v118Ev();
extern void _ZN6S471C24v119Ev();
extern void _ZN6S471C24v120Ev();
extern void _ZN6S471C24v121Ev();
extern void _ZN6S471C24v122Ev();
extern void _ZN6S471C24v123Ev();
extern void _ZN6S471C24v124Ev();
extern void _ZN6S471C24v125Ev();
extern void _ZN6S471C12v1Ev();
extern void _ZN6S471C12v2Ev();
extern void _ZN6S471C12v3Ev();
extern void _ZN6S471C12v4Ev();
extern void _ZN6S471C12v5Ev();
extern void _ZN6S471C12v6Ev();
extern void _ZN6S471C12v7Ev();
extern void _ZN6S471C12v8Ev();
extern void _ZN6S471C12v9Ev();
static  VTBL_ENTRY vtc_S471C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S471C1[0]),
  (VTBL_ENTRY)&_ZN6S471C1D1Ev,
  (VTBL_ENTRY)&_ZN6S471C1D0Ev,
  (VTBL_ENTRY)&_ZN6S471C53v10Ev,
  (VTBL_ENTRY)&_ZN6S471C53v11Ev,
  (VTBL_ENTRY)&_ZN6S471C53v12Ev,
  (VTBL_ENTRY)&_ZN6S471C53v13Ev,
  (VTBL_ENTRY)&_ZN6S471C53v14Ev,
  (VTBL_ENTRY)&_ZN6S471C53v15Ev,
  (VTBL_ENTRY)&_ZN6S471C53v16Ev,
  (VTBL_ENTRY)&_ZN6S471C53v17Ev,
  (VTBL_ENTRY)&_ZN6S471C53v18Ev,
  (VTBL_ENTRY)&_ZN6S471C53v19Ev,
  (VTBL_ENTRY)&_ZN6S471C53v20Ev,
  (VTBL_ENTRY)&_ZN6S471C53v21Ev,
  (VTBL_ENTRY)&_ZN6S471C53v22Ev,
  (VTBL_ENTRY)&_ZN6S471C53v23Ev,
  (VTBL_ENTRY)&_ZN6S471C53v24Ev,
  (VTBL_ENTRY)&_ZN6S471C53v25Ev,
  (VTBL_ENTRY)&_ZN6S471C53v26Ev,
  (VTBL_ENTRY)&_ZN6S471C53v27Ev,
  (VTBL_ENTRY)&_ZN6S471C53v28Ev,
  (VTBL_ENTRY)&_ZN6S471C53v29Ev,
  (VTBL_ENTRY)&_ZN6S471C53v30Ev,
  (VTBL_ENTRY)&_ZN6S471C53v31Ev,
  (VTBL_ENTRY)&_ZN6S471C53v32Ev,
  (VTBL_ENTRY)&_ZN6S471C53v33Ev,
  (VTBL_ENTRY)&_ZN6S471C53v34Ev,
  (VTBL_ENTRY)&_ZN6S471C53v35Ev,
  (VTBL_ENTRY)&_ZN6S471C53v36Ev,
  (VTBL_ENTRY)&_ZN6S471C53v37Ev,
  (VTBL_ENTRY)&_ZN6S471C53v38Ev,
  (VTBL_ENTRY)&_ZN6S471C53v39Ev,
  (VTBL_ENTRY)&_ZN6S471C53v40Ev,
  (VTBL_ENTRY)&_ZN6S471C53v41Ev,
  (VTBL_ENTRY)&_ZN6S471C53v42Ev,
  (VTBL_ENTRY)&_ZN6S471C53v43Ev,
  (VTBL_ENTRY)&_ZN6S471C53v44Ev,
  (VTBL_ENTRY)&_ZN6S471C53v45Ev,
  (VTBL_ENTRY)&_ZN6S471C53v46Ev,
  (VTBL_ENTRY)&_ZN6S471C53v47Ev,
  (VTBL_ENTRY)&_ZN6S471C53v48Ev,
  (VTBL_ENTRY)&_ZN6S471C53v49Ev,
  (VTBL_ENTRY)&_ZN6S471C53v50Ev,
  (VTBL_ENTRY)&_ZN6S471C53v51Ev,
  (VTBL_ENTRY)&_ZN6S471C53v52Ev,
  (VTBL_ENTRY)&_ZN6S471C53v53Ev,
  (VTBL_ENTRY)&_ZN6S471C53v54Ev,
  (VTBL_ENTRY)&_ZN6S471C53v55Ev,
  (VTBL_ENTRY)&_ZN6S471C53v56Ev,
  (VTBL_ENTRY)&_ZN6S471C53v57Ev,
  (VTBL_ENTRY)&_ZN6S471C53v58Ev,
  (VTBL_ENTRY)&_ZN6S471C53v59Ev,
  (VTBL_ENTRY)&_ZN6S471C53v60Ev,
  (VTBL_ENTRY)&_ZN6S471C53v61Ev,
  (VTBL_ENTRY)&_ZN6S471C53v62Ev,
  (VTBL_ENTRY)&_ZN6S471C53v63Ev,
  (VTBL_ENTRY)&_ZN6S471C53v64Ev,
  (VTBL_ENTRY)&_ZN6S471C53v65Ev,
  (VTBL_ENTRY)&_ZN6S471C53v66Ev,
  (VTBL_ENTRY)&_ZN6S471C53v67Ev,
  (VTBL_ENTRY)&_ZN6S471C53v68Ev,
  (VTBL_ENTRY)&_ZN6S471C53v69Ev,
  (VTBL_ENTRY)&_ZN6S471C53v70Ev,
  (VTBL_ENTRY)&_ZN6S471C53v71Ev,
  (VTBL_ENTRY)&_ZN6S471C53v72Ev,
  (VTBL_ENTRY)&_ZN6S471C53v73Ev,
  (VTBL_ENTRY)&_ZN6S471C43v74Ev,
  (VTBL_ENTRY)&_ZN6S471C43v75Ev,
  (VTBL_ENTRY)&_ZN6S471C43v76Ev,
  (VTBL_ENTRY)&_ZN6S471C43v77Ev,
  (VTBL_ENTRY)&_ZN6S471C43v78Ev,
  (VTBL_ENTRY)&_ZN6S471C43v79Ev,
  (VTBL_ENTRY)&_ZN6S471C43v80Ev,
  (VTBL_ENTRY)&_ZN6S471C43v81Ev,
  (VTBL_ENTRY)&_ZN6S471C43v82Ev,
  (VTBL_ENTRY)&_ZN6S471C43v83Ev,
  (VTBL_ENTRY)&_ZN6S471C43v84Ev,
  (VTBL_ENTRY)&_ZN6S471C43v85Ev,
  (VTBL_ENTRY)&_ZN6S471C43v86Ev,
  (VTBL_ENTRY)&_ZN6S471C43v87Ev,
  (VTBL_ENTRY)&_ZN6S471C43v88Ev,
  (VTBL_ENTRY)&_ZN6S471C43v89Ev,
  (VTBL_ENTRY)&_ZN6S471C43v90Ev,
  (VTBL_ENTRY)&_ZN6S471C43v91Ev,
  (VTBL_ENTRY)&_ZN6S471C43v92Ev,
  (VTBL_ENTRY)&_ZN6S471C43v93Ev,
  (VTBL_ENTRY)&_ZN6S471C43v94Ev,
  (VTBL_ENTRY)&_ZN6S471C43v95Ev,
  (VTBL_ENTRY)&_ZN6S471C43v96Ev,
  (VTBL_ENTRY)&_ZN6S471C43v97Ev,
  (VTBL_ENTRY)&_ZN6S471C43v98Ev,
  (VTBL_ENTRY)&_ZN6S471C43v99Ev,
  (VTBL_ENTRY)&_ZN6S471C44v100Ev,
  (VTBL_ENTRY)&_ZN6S471C34v101Ev,
  (VTBL_ENTRY)&_ZN6S471C34v102Ev,
  (VTBL_ENTRY)&_ZN6S471C34v103Ev,
  (VTBL_ENTRY)&_ZN6S471C34v104Ev,
  (VTBL_ENTRY)&_ZN6S471C34v105Ev,
  (VTBL_ENTRY)&_ZN6S471C34v106Ev,
  (VTBL_ENTRY)&_ZN6S471C34v107Ev,
  (VTBL_ENTRY)&_ZN6S471C34v108Ev,
  (VTBL_ENTRY)&_ZN6S471C34v109Ev,
  (VTBL_ENTRY)&_ZN6S471C34v110Ev,
  (VTBL_ENTRY)&_ZN6S471C34v111Ev,
  (VTBL_ENTRY)&_ZN6S471C34v112Ev,
  (VTBL_ENTRY)&_ZN6S471C34v113Ev,
  (VTBL_ENTRY)&_ZN6S471C34v114Ev,
  (VTBL_ENTRY)&_ZN6S471C34v115Ev,
  (VTBL_ENTRY)&_ZN6S471C34v116Ev,
  (VTBL_ENTRY)&_ZN6S471C34v117Ev,
  (VTBL_ENTRY)&_ZN6S471C34v118Ev,
  (VTBL_ENTRY)&_ZN6S471C24v119Ev,
  (VTBL_ENTRY)&_ZN6S471C24v120Ev,
  (VTBL_ENTRY)&_ZN6S471C24v121Ev,
  (VTBL_ENTRY)&_ZN6S471C24v122Ev,
  (VTBL_ENTRY)&_ZN6S471C24v123Ev,
  (VTBL_ENTRY)&_ZN6S471C24v124Ev,
  (VTBL_ENTRY)&_ZN6S471C24v125Ev,
  (VTBL_ENTRY)&_ZN6S471C12v1Ev,
  (VTBL_ENTRY)&_ZN6S471C12v2Ev,
  (VTBL_ENTRY)&_ZN6S471C12v3Ev,
  (VTBL_ENTRY)&_ZN6S471C12v4Ev,
  (VTBL_ENTRY)&_ZN6S471C12v5Ev,
  (VTBL_ENTRY)&_ZN6S471C12v6Ev,
  (VTBL_ENTRY)&_ZN6S471C12v7Ev,
  (VTBL_ENTRY)&_ZN6S471C12v8Ev,
  (VTBL_ENTRY)&_ZN6S471C12v9Ev,
};
extern VTBL_ENTRY _ZTI6S471C1[];
extern  VTBL_ENTRY _ZTV6S471C1[];
Class_Descriptor cd_S471C1 = {  "S471C1", // class name
  bases_S471C1, 4,
  &(vtc_S471C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,256), // object size
  NSPAIRA(_ZTI6S471C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S471C1),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  S702C5  {
  int s702c5f0;
  __tsi64 s702c5f1;
  void *s702c5f2[4];
  int s702c5f3[2];
  void *s702c5f4;
  ::S615C17_nt s702c5f5;
  void *s702c5f6[2];
  virtual  ~S702C5(); // _ZN6S702C5D1Ev
  virtual void  v8(); // _ZN6S702C52v8Ev
  virtual void  v9(); // _ZN6S702C52v9Ev
  virtual void  v10(); // _ZN6S702C53v10Ev
  virtual void  v11(); // _ZN6S702C53v11Ev
  virtual void  v12(); // _ZN6S702C53v12Ev
  virtual void  v13(); // _ZN6S702C53v13Ev
  virtual void  v14(); // _ZN6S702C53v14Ev
  virtual void  v15(); // _ZN6S702C53v15Ev
  virtual void  v16(); // _ZN6S702C53v16Ev
  virtual void  v17(); // _ZN6S702C53v17Ev
  virtual void  v18(); // _ZN6S702C53v18Ev
  virtual void  v19(); // _ZN6S702C53v19Ev
  virtual void  v20(); // _ZN6S702C53v20Ev
  virtual void  v21(); // _ZN6S702C53v21Ev
  virtual void  v22(); // _ZN6S702C53v22Ev
  virtual void  v23(); // _ZN6S702C53v23Ev
  virtual void  v24(); // _ZN6S702C53v24Ev
  virtual void  v25(); // _ZN6S702C53v25Ev
  virtual void  v26(); // _ZN6S702C53v26Ev
  virtual void  v27(); // _ZN6S702C53v27Ev
  virtual void  v28(); // _ZN6S702C53v28Ev
  virtual void  v29(); // _ZN6S702C53v29Ev
  virtual void  v30(); // _ZN6S702C53v30Ev
  virtual void  v31(); // _ZN6S702C53v31Ev
  virtual void  v32(); // _ZN6S702C53v32Ev
  virtual void  v33(); // _ZN6S702C53v33Ev
  virtual void  v34(); // _ZN6S702C53v34Ev
  virtual void  v35(); // _ZN6S702C53v35Ev
  virtual void  v36(); // _ZN6S702C53v36Ev
  virtual void  v37(); // _ZN6S702C53v37Ev
  virtual void  v38(); // _ZN6S702C53v38Ev
  virtual void  v39(); // _ZN6S702C53v39Ev
  virtual void  v40(); // _ZN6S702C53v40Ev
  virtual void  v41(); // _ZN6S702C53v41Ev
  virtual void  v42(); // _ZN6S702C53v42Ev
  virtual void  v43(); // _ZN6S702C53v43Ev
  virtual void  v44(); // _ZN6S702C53v44Ev
  virtual void  v45(); // _ZN6S702C53v45Ev
  virtual void  v46(); // _ZN6S702C53v46Ev
  virtual void  v47(); // _ZN6S702C53v47Ev
  virtual void  v48(); // _ZN6S702C53v48Ev
  virtual void  v49(); // _ZN6S702C53v49Ev
  virtual void  v50(); // _ZN6S702C53v50Ev
  virtual void  v51(); // _ZN6S702C53v51Ev
  virtual void  v52(); // _ZN6S702C53v52Ev
  virtual void  v53(); // _ZN6S702C53v53Ev
  virtual void  v54(); // _ZN6S702C53v54Ev
  virtual void  v55(); // _ZN6S702C53v55Ev
  virtual void  v56(); // _ZN6S702C53v56Ev
  virtual void  v57(); // _ZN6S702C53v57Ev
  virtual void  v58(); // _ZN6S702C53v58Ev
  virtual void  v59(); // _ZN6S702C53v59Ev
  virtual void  v60(); // _ZN6S702C53v60Ev
  virtual void  v61(); // _ZN6S702C53v61Ev
  virtual void  v62(); // _ZN6S702C53v62Ev
  virtual void  v63(); // _ZN6S702C53v63Ev
  virtual void  v64(); // _ZN6S702C53v64Ev
  virtual void  v65(); // _ZN6S702C53v65Ev
  virtual void  v66(); // _ZN6S702C53v66Ev
  virtual void  v67(); // _ZN6S702C53v67Ev
  virtual void  v68(); // _ZN6S702C53v68Ev
  virtual void  v69(); // _ZN6S702C53v69Ev
  virtual void  v70(); // _ZN6S702C53v70Ev
  virtual void  v71(); // _ZN6S702C53v71Ev
  S702C5(); // tgen
};
//SIG(-1 S702C5) 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]}


 S702C5 ::~S702C5(){ note_dtor("S702C5", this);}
void  S702C5 ::v8(){vfunc_called(this, "_ZN6S702C52v8Ev");}
void  S702C5 ::v9(){vfunc_called(this, "_ZN6S702C52v9Ev");}
void  S702C5 ::v10(){vfunc_called(this, "_ZN6S702C53v10Ev");}
void  S702C5 ::v11(){vfunc_called(this, "_ZN6S702C53v11Ev");}
void  S702C5 ::v12(){vfunc_called(this, "_ZN6S702C53v12Ev");}
void  S702C5 ::v13(){vfunc_called(this, "_ZN6S702C53v13Ev");}
void  S702C5 ::v14(){vfunc_called(this, "_ZN6S702C53v14Ev");}
void  S702C5 ::v15(){vfunc_called(this, "_ZN6S702C53v15Ev");}
void  S702C5 ::v16(){vfunc_called(this, "_ZN6S702C53v16Ev");}
void  S702C5 ::v17(){vfunc_called(this, "_ZN6S702C53v17Ev");}
void  S702C5 ::v18(){vfunc_called(this, "_ZN6S702C53v18Ev");}
void  S702C5 ::v19(){vfunc_called(this, "_ZN6S702C53v19Ev");}
void  S702C5 ::v20(){vfunc_called(this, "_ZN6S702C53v20Ev");}
void  S702C5 ::v21(){vfunc_called(this, "_ZN6S702C53v21Ev");}
void  S702C5 ::v22(){vfunc_called(this, "_ZN6S702C53v22Ev");}
void  S702C5 ::v23(){vfunc_called(this, "_ZN6S702C53v23Ev");}
void  S702C5 ::v24(){vfunc_called(this, "_ZN6S702C53v24Ev");}
void  S702C5 ::v25(){vfunc_called(this, "_ZN6S702C53v25Ev");}
void  S702C5 ::v26(){vfunc_called(this, "_ZN6S702C53v26Ev");}
void  S702C5 ::v27(){vfunc_called(this, "_ZN6S702C53v27Ev");}
void  S702C5 ::v28(){vfunc_called(this, "_ZN6S702C53v28Ev");}
void  S702C5 ::v29(){vfunc_called(this, "_ZN6S702C53v29Ev");}
void  S702C5 ::v30(){vfunc_called(this, "_ZN6S702C53v30Ev");}
void  S702C5 ::v31(){vfunc_called(this, "_ZN6S702C53v31Ev");}
void  S702C5 ::v32(){vfunc_called(this, "_ZN6S702C53v32Ev");}
void  S702C5 ::v33(){vfunc_called(this, "_ZN6S702C53v33Ev");}
void  S702C5 ::v34(){vfunc_called(this, "_ZN6S702C53v34Ev");}
void  S702C5 ::v35(){vfunc_called(this, "_ZN6S702C53v35Ev");}
void  S702C5 ::v36(){vfunc_called(this, "_ZN6S702C53v36Ev");}
void  S702C5 ::v37(){vfunc_called(this, "_ZN6S702C53v37Ev");}
void  S702C5 ::v38(){vfunc_called(this, "_ZN6S702C53v38Ev");}
void  S702C5 ::v39(){vfunc_called(this, "_ZN6S702C53v39Ev");}
void  S702C5 ::v40(){vfunc_called(this, "_ZN6S702C53v40Ev");}
void  S702C5 ::v41(){vfunc_called(this, "_ZN6S702C53v41Ev");}
void  S702C5 ::v42(){vfunc_called(this, "_ZN6S702C53v42Ev");}
void  S702C5 ::v43(){vfunc_called(this, "_ZN6S702C53v43Ev");}
void  S702C5 ::v44(){vfunc_called(this, "_ZN6S702C53v44Ev");}
void  S702C5 ::v45(){vfunc_called(this, "_ZN6S702C53v45Ev");}
void  S702C5 ::v46(){vfunc_called(this, "_ZN6S702C53v46Ev");}
void  S702C5 ::v47(){vfunc_called(this, "_ZN6S702C53v47Ev");}
void  S702C5 ::v48(){vfunc_called(this, "_ZN6S702C53v48Ev");}
void  S702C5 ::v49(){vfunc_called(this, "_ZN6S702C53v49Ev");}
void  S702C5 ::v50(){vfunc_called(this, "_ZN6S702C53v50Ev");}
void  S702C5 ::v51(){vfunc_called(this, "_ZN6S702C53v51Ev");}
void  S702C5 ::v52(){vfunc_called(this, "_ZN6S702C53v52Ev");}
void  S702C5 ::v53(){vfunc_called(this, "_ZN6S702C53v53Ev");}
void  S702C5 ::v54(){vfunc_called(this, "_ZN6S702C53v54Ev");}
void  S702C5 ::v55(){vfunc_called(this, "_ZN6S702C53v55Ev");}
void  S702C5 ::v56(){vfunc_called(this, "_ZN6S702C53v56Ev");}
void  S702C5 ::v57(){vfunc_called(this, "_ZN6S702C53v57Ev");}
void  S702C5 ::v58(){vfunc_called(this, "_ZN6S702C53v58Ev");}
void  S702C5 ::v59(){vfunc_called(this, "_ZN6S702C53v59Ev");}
void  S702C5 ::v60(){vfunc_called(this, "_ZN6S702C53v60Ev");}
void  S702C5 ::v61(){vfunc_called(this, "_ZN6S702C53v61Ev");}
void  S702C5 ::v62(){vfunc_called(this, "_ZN6S702C53v62Ev");}
void  S702C5 ::v63(){vfunc_called(this, "_ZN6S702C53v63Ev");}
void  S702C5 ::v64(){vfunc_called(this, "_ZN6S702C53v64Ev");}
void  S702C5 ::v65(){vfunc_called(this, "_ZN6S702C53v65Ev");}
void  S702C5 ::v66(){vfunc_called(this, "_ZN6S702C53v66Ev");}
void  S702C5 ::v67(){vfunc_called(this, "_ZN6S702C53v67Ev");}
void  S702C5 ::v68(){vfunc_called(this, "_ZN6S702C53v68Ev");}
void  S702C5 ::v69(){vfunc_called(this, "_ZN6S702C53v69Ev");}
void  S702C5 ::v70(){vfunc_called(this, "_ZN6S702C53v70Ev");}
void  S702C5 ::v71(){vfunc_called(this, "_ZN6S702C53v71Ev");}
S702C5 ::S702C5(){ note_ctor("S702C5", this);} // tgen

static void Test_S702C5()
{
  extern Class_Descriptor cd_S702C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S702C5, buf);
    S702C5 *dp, &lv = *(dp=new (buf) S702C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S702C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S702C5)");
    check_field_offset(lv, s702c5f0, ABISELECT(8,4), "S702C5.s702c5f0");
    check_field_offset(lv, s702c5f1, ABISELECT(16,8), "S702C5.s702c5f1");
    check_field_offset(lv, s702c5f2, ABISELECT(24,16), "S702C5.s702c5f2");
    check_field_offset(lv, s702c5f3, ABISELECT(56,32), "S702C5.s702c5f3");
    check_field_offset(lv, s702c5f4, ABISELECT(64,40), "S702C5.s702c5f4");
    check_field_offset(lv, s702c5f5, ABISELECT(72,44), "S702C5.s702c5f5");
    check_field_offset(lv, s702c5f6, ABISELECT(80,52), "S702C5.s702c5f6");
    test_class_info(&lv, &cd_S702C5);
    dp->~S702C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS702C5(Test_S702C5, "S702C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S702C5C1Ev();
extern void _ZN6S702C5D1Ev();
Name_Map name_map_S702C5[] = {
  NSPAIR(_ZN6S702C5C1Ev),
  NSPAIR(_ZN6S702C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S702C5[];
extern void _ZN6S702C5D1Ev();
extern void _ZN6S702C5D0Ev();
extern void _ZN6S702C52v8Ev();
extern void _ZN6S702C52v9Ev();
extern void _ZN6S702C53v10Ev();
extern void _ZN6S702C53v11Ev();
extern void _ZN6S702C53v12Ev();
extern void _ZN6S702C53v13Ev();
extern void _ZN6S702C53v14Ev();
extern void _ZN6S702C53v15Ev();
extern void _ZN6S702C53v16Ev();
extern void _ZN6S702C53v17Ev();
extern void _ZN6S702C53v18Ev();
extern void _ZN6S702C53v19Ev();
extern void _ZN6S702C53v20Ev();
extern void _ZN6S702C53v21Ev();
extern void _ZN6S702C53v22Ev();
extern void _ZN6S702C53v23Ev();
extern void _ZN6S702C53v24Ev();
extern void _ZN6S702C53v25Ev();
extern void _ZN6S702C53v26Ev();
extern void _ZN6S702C53v27Ev();
extern void _ZN6S702C53v28Ev();
extern void _ZN6S702C53v29Ev();
extern void _ZN6S702C53v30Ev();
extern void _ZN6S702C53v31Ev();
extern void _ZN6S702C53v32Ev();
extern void _ZN6S702C53v33Ev();
extern void _ZN6S702C53v34Ev();
extern void _ZN6S702C53v35Ev();
extern void _ZN6S702C53v36Ev();
extern void _ZN6S702C53v37Ev();
extern void _ZN6S702C53v38Ev();
extern void _ZN6S702C53v39Ev();
extern void _ZN6S702C53v40Ev();
extern void _ZN6S702C53v41Ev();
extern void _ZN6S702C53v42Ev();
extern void _ZN6S702C53v43Ev();
extern void _ZN6S702C53v44Ev();
extern void _ZN6S702C53v45Ev();
extern void _ZN6S702C53v46Ev();
extern void _ZN6S702C53v47Ev();
extern void _ZN6S702C53v48Ev();
extern void _ZN6S702C53v49Ev();
extern void _ZN6S702C53v50Ev();
extern void _ZN6S702C53v51Ev();
extern void _ZN6S702C53v52Ev();
extern void _ZN6S702C53v53Ev();
extern void _ZN6S702C53v54Ev();
extern void _ZN6S702C53v55Ev();
extern void _ZN6S702C53v56Ev();
extern void _ZN6S702C53v57Ev();
extern void _ZN6S702C53v58Ev();
extern void _ZN6S702C53v59Ev();
extern void _ZN6S702C53v60Ev();
extern void _ZN6S702C53v61Ev();
extern void _ZN6S702C53v62Ev();
extern void _ZN6S702C53v63Ev();
extern void _ZN6S702C53v64Ev();
extern void _ZN6S702C53v65Ev();
extern void _ZN6S702C53v66Ev();
extern void _ZN6S702C53v67Ev();
extern void _ZN6S702C53v68Ev();
extern void _ZN6S702C53v69Ev();
extern void _ZN6S702C53v70Ev();
extern void _ZN6S702C53v71Ev();
static  VTBL_ENTRY vtc_S702C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S702C5[0]),
  (VTBL_ENTRY)&_ZN6S702C5D1Ev,
  (VTBL_ENTRY)&_ZN6S702C5D0Ev,
  (VTBL_ENTRY)&_ZN6S702C52v8Ev,
  (VTBL_ENTRY)&_ZN6S702C52v9Ev,
  (VTBL_ENTRY)&_ZN6S702C53v10Ev,
  (VTBL_ENTRY)&_ZN6S702C53v11Ev,
  (VTBL_ENTRY)&_ZN6S702C53v12Ev,
  (VTBL_ENTRY)&_ZN6S702C53v13Ev,
  (VTBL_ENTRY)&_ZN6S702C53v14Ev,
  (VTBL_ENTRY)&_ZN6S702C53v15Ev,
  (VTBL_ENTRY)&_ZN6S702C53v16Ev,
  (VTBL_ENTRY)&_ZN6S702C53v17Ev,
  (VTBL_ENTRY)&_ZN6S702C53v18Ev,
  (VTBL_ENTRY)&_ZN6S702C53v19Ev,
  (VTBL_ENTRY)&_ZN6S702C53v20Ev,
  (VTBL_ENTRY)&_ZN6S702C53v21Ev,
  (VTBL_ENTRY)&_ZN6S702C53v22Ev,
  (VTBL_ENTRY)&_ZN6S702C53v23Ev,
  (VTBL_ENTRY)&_ZN6S702C53v24Ev,
  (VTBL_ENTRY)&_ZN6S702C53v25Ev,
  (VTBL_ENTRY)&_ZN6S702C53v26Ev,
  (VTBL_ENTRY)&_ZN6S702C53v27Ev,
  (VTBL_ENTRY)&_ZN6S702C53v28Ev,
  (VTBL_ENTRY)&_ZN6S702C53v29Ev,
  (VTBL_ENTRY)&_ZN6S702C53v30Ev,
  (VTBL_ENTRY)&_ZN6S702C53v31Ev,
  (VTBL_ENTRY)&_ZN6S702C53v32Ev,
  (VTBL_ENTRY)&_ZN6S702C53v33Ev,
  (VTBL_ENTRY)&_ZN6S702C53v34Ev,
  (VTBL_ENTRY)&_ZN6S702C53v35Ev,
  (VTBL_ENTRY)&_ZN6S702C53v36Ev,
  (VTBL_ENTRY)&_ZN6S702C53v37Ev,
  (VTBL_ENTRY)&_ZN6S702C53v38Ev,
  (VTBL_ENTRY)&_ZN6S702C53v39Ev,
  (VTBL_ENTRY)&_ZN6S702C53v40Ev,
  (VTBL_ENTRY)&_ZN6S702C53v41Ev,
  (VTBL_ENTRY)&_ZN6S702C53v42Ev,
  (VTBL_ENTRY)&_ZN6S702C53v43Ev,
  (VTBL_ENTRY)&_ZN6S702C53v44Ev,
  (VTBL_ENTRY)&_ZN6S702C53v45Ev,
  (VTBL_ENTRY)&_ZN6S702C53v46Ev,
  (VTBL_ENTRY)&_ZN6S702C53v47Ev,
  (VTBL_ENTRY)&_ZN6S702C53v48Ev,
  (VTBL_ENTRY)&_ZN6S702C53v49Ev,
  (VTBL_ENTRY)&_ZN6S702C53v50Ev,
  (VTBL_ENTRY)&_ZN6S702C53v51Ev,
  (VTBL_ENTRY)&_ZN6S702C53v52Ev,
  (VTBL_ENTRY)&_ZN6S702C53v53Ev,
  (VTBL_ENTRY)&_ZN6S702C53v54Ev,
  (VTBL_ENTRY)&_ZN6S702C53v55Ev,
  (VTBL_ENTRY)&_ZN6S702C53v56Ev,
  (VTBL_ENTRY)&_ZN6S702C53v57Ev,
  (VTBL_ENTRY)&_ZN6S702C53v58Ev,
  (VTBL_ENTRY)&_ZN6S702C53v59Ev,
  (VTBL_ENTRY)&_ZN6S702C53v60Ev,
  (VTBL_ENTRY)&_ZN6S702C53v61Ev,
  (VTBL_ENTRY)&_ZN6S702C53v62Ev,
  (VTBL_ENTRY)&_ZN6S702C53v63Ev,
  (VTBL_ENTRY)&_ZN6S702C53v64Ev,
  (VTBL_ENTRY)&_ZN6S702C53v65Ev,
  (VTBL_ENTRY)&_ZN6S702C53v66Ev,
  (VTBL_ENTRY)&_ZN6S702C53v67Ev,
  (VTBL_ENTRY)&_ZN6S702C53v68Ev,
  (VTBL_ENTRY)&_ZN6S702C53v69Ev,
  (VTBL_ENTRY)&_ZN6S702C53v70Ev,
  (VTBL_ENTRY)&_ZN6S702C53v71Ev,
};
extern VTBL_ENTRY _ZTI6S702C5[];
extern  VTBL_ENTRY _ZTV6S702C5[];
Class_Descriptor cd_S702C5 = {  "S702C5", // class name
  0,0,//no base classes
  &(vtc_S702C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S702C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S702C5),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  S702C4  : S702C5 {
  void *s702c4f0;
  ::S1542C26 s702c4f1;
  ::S615C17_nt s702c4f2;
  ::S1542C22_nt s702c4f3;
  ::S615C12_nt s702c4f4;
  int s702c4f5;
  unsigned int s702c4f6:1;
  unsigned int s702c4f7:1;
  unsigned int s702c4f8:1;
  unsigned int s702c4f9:1;
  int s702c4f10[11];
  virtual  ~S702C4(); // _ZN6S702C4D1Ev
  virtual void  v72(); // _ZN6S702C43v72Ev
  virtual void  v73(); // _ZN6S702C43v73Ev
  virtual void  v74(); // _ZN6S702C43v74Ev
  virtual void  v75(); // _ZN6S702C43v75Ev
  virtual void  v76(); // _ZN6S702C43v76Ev
  virtual void  v77(); // _ZN6S702C43v77Ev
  virtual void  v78(); // _ZN6S702C43v78Ev
  virtual void  v79(); // _ZN6S702C43v79Ev
  virtual void  v80(); // _ZN6S702C43v80Ev
  virtual void  v81(); // _ZN6S702C43v81Ev
  virtual void  v82(); // _ZN6S702C43v82Ev
  virtual void  v83(); // _ZN6S702C43v83Ev
  virtual void  v84(); // _ZN6S702C43v84Ev
  virtual void  v85(); // _ZN6S702C43v85Ev
  virtual void  v86(); // _ZN6S702C43v86Ev
  virtual void  v87(); // _ZN6S702C43v87Ev
  virtual void  v88(); // _ZN6S702C43v88Ev
  virtual void  v89(); // _ZN6S702C43v89Ev
  virtual void  v90(); // _ZN6S702C43v90Ev
  virtual void  v91(); // _ZN6S702C43v91Ev
  virtual void  v92(); // _ZN6S702C43v92Ev
  virtual void  v93(); // _ZN6S702C43v93Ev
  virtual void  v94(); // _ZN6S702C43v94Ev
  virtual void  v95(); // _ZN6S702C43v95Ev
  virtual void  v96(); // _ZN6S702C43v96Ev
  virtual void  v97(); // _ZN6S702C43v97Ev
  virtual void  v98(); // _ZN6S702C43v98Ev
  S702C4(); // tgen
};
//SIG(-1 S702C4) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S702C4 ::~S702C4(){ note_dtor("S702C4", this);}
void  S702C4 ::v72(){vfunc_called(this, "_ZN6S702C43v72Ev");}
void  S702C4 ::v73(){vfunc_called(this, "_ZN6S702C43v73Ev");}
void  S702C4 ::v74(){vfunc_called(this, "_ZN6S702C43v74Ev");}
void  S702C4 ::v75(){vfunc_called(this, "_ZN6S702C43v75Ev");}
void  S702C4 ::v76(){vfunc_called(this, "_ZN6S702C43v76Ev");}
void  S702C4 ::v77(){vfunc_called(this, "_ZN6S702C43v77Ev");}
void  S702C4 ::v78(){vfunc_called(this, "_ZN6S702C43v78Ev");}
void  S702C4 ::v79(){vfunc_called(this, "_ZN6S702C43v79Ev");}
void  S702C4 ::v80(){vfunc_called(this, "_ZN6S702C43v80Ev");}
void  S702C4 ::v81(){vfunc_called(this, "_ZN6S702C43v81Ev");}
void  S702C4 ::v82(){vfunc_called(this, "_ZN6S702C43v82Ev");}
void  S702C4 ::v83(){vfunc_called(this, "_ZN6S702C43v83Ev");}
void  S702C4 ::v84(){vfunc_called(this, "_ZN6S702C43v84Ev");}
void  S702C4 ::v85(){vfunc_called(this, "_ZN6S702C43v85Ev");}
void  S702C4 ::v86(){vfunc_called(this, "_ZN6S702C43v86Ev");}
void  S702C4 ::v87(){vfunc_called(this, "_ZN6S702C43v87Ev");}
void  S702C4 ::v88(){vfunc_called(this, "_ZN6S702C43v88Ev");}
void  S702C4 ::v89(){vfunc_called(this, "_ZN6S702C43v89Ev");}
void  S702C4 ::v90(){vfunc_called(this, "_ZN6S702C43v90Ev");}
void  S702C4 ::v91(){vfunc_called(this, "_ZN6S702C43v91Ev");}
void  S702C4 ::v92(){vfunc_called(this, "_ZN6S702C43v92Ev");}
void  S702C4 ::v93(){vfunc_called(this, "_ZN6S702C43v93Ev");}
void  S702C4 ::v94(){vfunc_called(this, "_ZN6S702C43v94Ev");}
void  S702C4 ::v95(){vfunc_called(this, "_ZN6S702C43v95Ev");}
void  S702C4 ::v96(){vfunc_called(this, "_ZN6S702C43v96Ev");}
void  S702C4 ::v97(){vfunc_called(this, "_ZN6S702C43v97Ev");}
void  S702C4 ::v98(){vfunc_called(this, "_ZN6S702C43v98Ev");}
S702C4 ::S702C4(){ note_ctor("S702C4", this);} // tgen

static void Test_S702C4()
{
  extern Class_Descriptor cd_S702C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S702C4, buf);
    S702C4 *dp, &lv = *(dp=new (buf) S702C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S702C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S702C4)");
    check_base_class_offset(lv, (S702C5*), 0, "S702C4");
    check_field_offset(lv, s702c4f0, ABISELECT(96,60), "S702C4.s702c4f0");
    check_field_offset(lv, s702c4f1, ABISELECT(104,64), "S702C4.s702c4f1");
    check_field_offset(lv, s702c4f2, ABISELECT(120,76), "S702C4.s702c4f2");
    check_field_offset(lv, s702c4f3, ABISELECT(128,84), "S702C4.s702c4f3");
    check_field_offset(lv, s702c4f4, ABISELECT(144,96), "S702C4.s702c4f4");
    check_field_offset(lv, s702c4f5, ABISELECT(176,128), "S702C4.s702c4f5");
    set_bf_and_test(lv, s702c4f6, ABISELECT(180,132), 0, 1, 1, "S702C4");
    set_bf_and_test(lv, s702c4f7, ABISELECT(180,132), 1, 1, 1, "S702C4");
    set_bf_and_test(lv, s702c4f8, ABISELECT(180,132), 2, 1, 1, "S702C4");
    set_bf_and_test(lv, s702c4f9, ABISELECT(180,132), 3, 1, 1, "S702C4");
    check_field_offset(lv, s702c4f10, ABISELECT(184,136), "S702C4.s702c4f10");
    test_class_info(&lv, &cd_S702C4);
    dp->~S702C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS702C4(Test_S702C4, "S702C4", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S702C4C1Ev();
extern void _ZN6S702C4D1Ev();
Name_Map name_map_S702C4[] = {
  NSPAIR(_ZN6S702C4C1Ev),
  NSPAIR(_ZN6S702C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S702C5;
extern VTBL_ENTRY _ZTI6S702C5[];
extern  VTBL_ENTRY _ZTV6S702C5[];
static Base_Class bases_S702C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S702C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S702C4[];
extern void _ZN6S702C4D1Ev();
extern void _ZN6S702C4D0Ev();
extern void _ZN6S702C52v8Ev();
extern void _ZN6S702C52v9Ev();
extern void _ZN6S702C53v10Ev();
extern void _ZN6S702C53v11Ev();
extern void _ZN6S702C53v12Ev();
extern void _ZN6S702C53v13Ev();
extern void _ZN6S702C53v14Ev();
extern void _ZN6S702C53v15Ev();
extern void _ZN6S702C53v16Ev();
extern void _ZN6S702C53v17Ev();
extern void _ZN6S702C53v18Ev();
extern void _ZN6S702C53v19Ev();
extern void _ZN6S702C53v20Ev();
extern void _ZN6S702C53v21Ev();
extern void _ZN6S702C53v22Ev();
extern void _ZN6S702C53v23Ev();
extern void _ZN6S702C53v24Ev();
extern void _ZN6S702C53v25Ev();
extern void _ZN6S702C53v26Ev();
extern void _ZN6S702C53v27Ev();
extern void _ZN6S702C53v28Ev();
extern void _ZN6S702C53v29Ev();
extern void _ZN6S702C53v30Ev();
extern void _ZN6S702C53v31Ev();
extern void _ZN6S702C53v32Ev();
extern void _ZN6S702C53v33Ev();
extern void _ZN6S702C53v34Ev();
extern void _ZN6S702C53v35Ev();
extern void _ZN6S702C53v36Ev();
extern void _ZN6S702C53v37Ev();
extern void _ZN6S702C53v38Ev();
extern void _ZN6S702C53v39Ev();
extern void _ZN6S702C53v40Ev();
extern void _ZN6S702C53v41Ev();
extern void _ZN6S702C53v42Ev();
extern void _ZN6S702C53v43Ev();
extern void _ZN6S702C53v44Ev();
extern void _ZN6S702C53v45Ev();
extern void _ZN6S702C53v46Ev();
extern void _ZN6S702C53v47Ev();
extern void _ZN6S702C53v48Ev();
extern void _ZN6S702C53v49Ev();
extern void _ZN6S702C53v50Ev();
extern void _ZN6S702C53v51Ev();
extern void _ZN6S702C53v52Ev();
extern void _ZN6S702C53v53Ev();
extern void _ZN6S702C53v54Ev();
extern void _ZN6S702C53v55Ev();
extern void _ZN6S702C53v56Ev();
extern void _ZN6S702C53v57Ev();
extern void _ZN6S702C53v58Ev();
extern void _ZN6S702C53v59Ev();
extern void _ZN6S702C53v60Ev();
extern void _ZN6S702C53v61Ev();
extern void _ZN6S702C53v62Ev();
extern void _ZN6S702C53v63Ev();
extern void _ZN6S702C53v64Ev();
extern void _ZN6S702C53v65Ev();
extern void _ZN6S702C53v66Ev();
extern void _ZN6S702C53v67Ev();
extern void _ZN6S702C53v68Ev();
extern void _ZN6S702C53v69Ev();
extern void _ZN6S702C53v70Ev();
extern void _ZN6S702C53v71Ev();
extern void _ZN6S702C43v72Ev();
extern void _ZN6S702C43v73Ev();
extern void _ZN6S702C43v74Ev();
extern void _ZN6S702C43v75Ev();
extern void _ZN6S702C43v76Ev();
extern void _ZN6S702C43v77Ev();
extern void _ZN6S702C43v78Ev();
extern void _ZN6S702C43v79Ev();
extern void _ZN6S702C43v80Ev();
extern void _ZN6S702C43v81Ev();
extern void _ZN6S702C43v82Ev();
extern void _ZN6S702C43v83Ev();
extern void _ZN6S702C43v84Ev();
extern void _ZN6S702C43v85Ev();
extern void _ZN6S702C43v86Ev();
extern void _ZN6S702C43v87Ev();
extern void _ZN6S702C43v88Ev();
extern void _ZN6S702C43v89Ev();
extern void _ZN6S702C43v90Ev();
extern void _ZN6S702C43v91Ev();
extern void _ZN6S702C43v92Ev();
extern void _ZN6S702C43v93Ev();
extern void _ZN6S702C43v94Ev();
extern void _ZN6S702C43v95Ev();
extern void _ZN6S702C43v96Ev();
extern void _ZN6S702C43v97Ev();
extern void _ZN6S702C43v98Ev();
static  VTBL_ENTRY vtc_S702C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S702C4[0]),
  (VTBL_ENTRY)&_ZN6S702C4D1Ev,
  (VTBL_ENTRY)&_ZN6S702C4D0Ev,
  (VTBL_ENTRY)&_ZN6S702C52v8Ev,
  (VTBL_ENTRY)&_ZN6S702C52v9Ev,
  (VTBL_ENTRY)&_ZN6S702C53v10Ev,
  (VTBL_ENTRY)&_ZN6S702C53v11Ev,
  (VTBL_ENTRY)&_ZN6S702C53v12Ev,
  (VTBL_ENTRY)&_ZN6S702C53v13Ev,
  (VTBL_ENTRY)&_ZN6S702C53v14Ev,
  (VTBL_ENTRY)&_ZN6S702C53v15Ev,
  (VTBL_ENTRY)&_ZN6S702C53v16Ev,
  (VTBL_ENTRY)&_ZN6S702C53v17Ev,
  (VTBL_ENTRY)&_ZN6S702C53v18Ev,
  (VTBL_ENTRY)&_ZN6S702C53v19Ev,
  (VTBL_ENTRY)&_ZN6S702C53v20Ev,
  (VTBL_ENTRY)&_ZN6S702C53v21Ev,
  (VTBL_ENTRY)&_ZN6S702C53v22Ev,
  (VTBL_ENTRY)&_ZN6S702C53v23Ev,
  (VTBL_ENTRY)&_ZN6S702C53v24Ev,
  (VTBL_ENTRY)&_ZN6S702C53v25Ev,
  (VTBL_ENTRY)&_ZN6S702C53v26Ev,
  (VTBL_ENTRY)&_ZN6S702C53v27Ev,
  (VTBL_ENTRY)&_ZN6S702C53v28Ev,
  (VTBL_ENTRY)&_ZN6S702C53v29Ev,
  (VTBL_ENTRY)&_ZN6S702C53v30Ev,
  (VTBL_ENTRY)&_ZN6S702C53v31Ev,
  (VTBL_ENTRY)&_ZN6S702C53v32Ev,
  (VTBL_ENTRY)&_ZN6S702C53v33Ev,
  (VTBL_ENTRY)&_ZN6S702C53v34Ev,
  (VTBL_ENTRY)&_ZN6S702C53v35Ev,
  (VTBL_ENTRY)&_ZN6S702C53v36Ev,
  (VTBL_ENTRY)&_ZN6S702C53v37Ev,
  (VTBL_ENTRY)&_ZN6S702C53v38Ev,
  (VTBL_ENTRY)&_ZN6S702C53v39Ev,
  (VTBL_ENTRY)&_ZN6S702C53v40Ev,
  (VTBL_ENTRY)&_ZN6S702C53v41Ev,
  (VTBL_ENTRY)&_ZN6S702C53v42Ev,
  (VTBL_ENTRY)&_ZN6S702C53v43Ev,
  (VTBL_ENTRY)&_ZN6S702C53v44Ev,
  (VTBL_ENTRY)&_ZN6S702C53v45Ev,
  (VTBL_ENTRY)&_ZN6S702C53v46Ev,
  (VTBL_ENTRY)&_ZN6S702C53v47Ev,
  (VTBL_ENTRY)&_ZN6S702C53v48Ev,
  (VTBL_ENTRY)&_ZN6S702C53v49Ev,
  (VTBL_ENTRY)&_ZN6S702C53v50Ev,
  (VTBL_ENTRY)&_ZN6S702C53v51Ev,
  (VTBL_ENTRY)&_ZN6S702C53v52Ev,
  (VTBL_ENTRY)&_ZN6S702C53v53Ev,
  (VTBL_ENTRY)&_ZN6S702C53v54Ev,
  (VTBL_ENTRY)&_ZN6S702C53v55Ev,
  (VTBL_ENTRY)&_ZN6S702C53v56Ev,
  (VTBL_ENTRY)&_ZN6S702C53v57Ev,
  (VTBL_ENTRY)&_ZN6S702C53v58Ev,
  (VTBL_ENTRY)&_ZN6S702C53v59Ev,
  (VTBL_ENTRY)&_ZN6S702C53v60Ev,
  (VTBL_ENTRY)&_ZN6S702C53v61Ev,
  (VTBL_ENTRY)&_ZN6S702C53v62Ev,
  (VTBL_ENTRY)&_ZN6S702C53v63Ev,
  (VTBL_ENTRY)&_ZN6S702C53v64Ev,
  (VTBL_ENTRY)&_ZN6S702C53v65Ev,
  (VTBL_ENTRY)&_ZN6S702C53v66Ev,
  (VTBL_ENTRY)&_ZN6S702C53v67Ev,
  (VTBL_ENTRY)&_ZN6S702C53v68Ev,
  (VTBL_ENTRY)&_ZN6S702C53v69Ev,
  (VTBL_ENTRY)&_ZN6S702C53v70Ev,
  (VTBL_ENTRY)&_ZN6S702C53v71Ev,
  (VTBL_ENTRY)&_ZN6S702C43v72Ev,
  (VTBL_ENTRY)&_ZN6S702C43v73Ev,
  (VTBL_ENTRY)&_ZN6S702C43v74Ev,
  (VTBL_ENTRY)&_ZN6S702C43v75Ev,
  (VTBL_ENTRY)&_ZN6S702C43v76Ev,
  (VTBL_ENTRY)&_ZN6S702C43v77Ev,
  (VTBL_ENTRY)&_ZN6S702C43v78Ev,
  (VTBL_ENTRY)&_ZN6S702C43v79Ev,
  (VTBL_ENTRY)&_ZN6S702C43v80Ev,
  (VTBL_ENTRY)&_ZN6S702C43v81Ev,
  (VTBL_ENTRY)&_ZN6S702C43v82Ev,
  (VTBL_ENTRY)&_ZN6S702C43v83Ev,
  (VTBL_ENTRY)&_ZN6S702C43v84Ev,
  (VTBL_ENTRY)&_ZN6S702C43v85Ev,
  (VTBL_ENTRY)&_ZN6S702C43v86Ev,
  (VTBL_ENTRY)&_ZN6S702C43v87Ev,
  (VTBL_ENTRY)&_ZN6S702C43v88Ev,
  (VTBL_ENTRY)&_ZN6S702C43v89Ev,
  (VTBL_ENTRY)&_ZN6S702C43v90Ev,
  (VTBL_ENTRY)&_ZN6S702C43v91Ev,
  (VTBL_ENTRY)&_ZN6S702C43v92Ev,
  (VTBL_ENTRY)&_ZN6S702C43v93Ev,
  (VTBL_ENTRY)&_ZN6S702C43v94Ev,
  (VTBL_ENTRY)&_ZN6S702C43v95Ev,
  (VTBL_ENTRY)&_ZN6S702C43v96Ev,
  (VTBL_ENTRY)&_ZN6S702C43v97Ev,
  (VTBL_ENTRY)&_ZN6S702C43v98Ev,
};
extern VTBL_ENTRY _ZTI6S702C4[];
extern  VTBL_ENTRY _ZTV6S702C4[];
Class_Descriptor cd_S702C4 = {  "S702C4", // class name
  bases_S702C4, 1,
  &(vtc_S702C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S702C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S702C4),95, //virtual function table var
  2, // 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  S702C3  : S702C4 {
  ::S615C22_nt s702c3f0;
  unsigned int s702c3f1:1;
  virtual  ~S702C3(); // _ZN6S702C3D1Ev
  virtual void  v99(); // _ZN6S702C33v99Ev
  virtual void  v100(); // _ZN6S702C34v100Ev
  virtual void  v101(); // _ZN6S702C34v101Ev
  virtual void  v102(); // _ZN6S702C34v102Ev
  virtual void  v103(); // _ZN6S702C34v103Ev
  virtual void  v104(); // _ZN6S702C34v104Ev
  virtual void  v105(); // _ZN6S702C34v105Ev
  virtual void  v106(); // _ZN6S702C34v106Ev
  virtual void  v107(); // _ZN6S702C34v107Ev
  virtual void  v108(); // _ZN6S702C34v108Ev
  virtual void  v109(); // _ZN6S702C34v109Ev
  virtual void  v110(); // _ZN6S702C34v110Ev
  virtual void  v111(); // _ZN6S702C34v111Ev
  virtual void  v112(); // _ZN6S702C34v112Ev
  virtual void  v113(); // _ZN6S702C34v113Ev
  virtual void  v114(); // _ZN6S702C34v114Ev
  virtual void  v115(); // _ZN6S702C34v115Ev
  virtual void  v116(); // _ZN6S702C34v116Ev
  S702C3(); // tgen
};
//SIG(-1 S702C3) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S702C3 ::~S702C3(){ note_dtor("S702C3", this);}
void  S702C3 ::v99(){vfunc_called(this, "_ZN6S702C33v99Ev");}
void  S702C3 ::v100(){vfunc_called(this, "_ZN6S702C34v100Ev");}
void  S702C3 ::v101(){vfunc_called(this, "_ZN6S702C34v101Ev");}
void  S702C3 ::v102(){vfunc_called(this, "_ZN6S702C34v102Ev");}
void  S702C3 ::v103(){vfunc_called(this, "_ZN6S702C34v103Ev");}
void  S702C3 ::v104(){vfunc_called(this, "_ZN6S702C34v104Ev");}
void  S702C3 ::v105(){vfunc_called(this, "_ZN6S702C34v105Ev");}
void  S702C3 ::v106(){vfunc_called(this, "_ZN6S702C34v106Ev");}
void  S702C3 ::v107(){vfunc_called(this, "_ZN6S702C34v107Ev");}
void  S702C3 ::v108(){vfunc_called(this, "_ZN6S702C34v108Ev");}
void  S702C3 ::v109(){vfunc_called(this, "_ZN6S702C34v109Ev");}
void  S702C3 ::v110(){vfunc_called(this, "_ZN6S702C34v110Ev");}
void  S702C3 ::v111(){vfunc_called(this, "_ZN6S702C34v111Ev");}
void  S702C3 ::v112(){vfunc_called(this, "_ZN6S702C34v112Ev");}
void  S702C3 ::v113(){vfunc_called(this, "_ZN6S702C34v113Ev");}
void  S702C3 ::v114(){vfunc_called(this, "_ZN6S702C34v114Ev");}
void  S702C3 ::v115(){vfunc_called(this, "_ZN6S702C34v115Ev");}
void  S702C3 ::v116(){vfunc_called(this, "_ZN6S702C34v116Ev");}
S702C3 ::S702C3(){ note_ctor("S702C3", this);} // tgen

static void Test_S702C3()
{
  extern Class_Descriptor cd_S702C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S702C3, buf);
    S702C3 *dp, &lv = *(dp=new (buf) S702C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S702C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S702C3)");
    check_base_class_offset(lv, (S702C5*)(S702C4*), 0, "S702C3");
    check_base_class_offset(lv, (S702C4*), 0, "S702C3");
    check_field_offset(lv, s702c3f0, ABISELECT(232,180), "S702C3.s702c3f0");
    set_bf_and_test(lv, s702c3f1, ABISELECT(248,192), 0, 1, 1, "S702C3");
    test_class_info(&lv, &cd_S702C3);
    dp->~S702C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS702C3(Test_S702C3, "S702C3", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S702C3C1Ev();
extern void _ZN6S702C3D1Ev();
Name_Map name_map_S702C3[] = {
  NSPAIR(_ZN6S702C3C1Ev),
  NSPAIR(_ZN6S702C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S702C5;
extern VTBL_ENTRY _ZTI6S702C5[];
extern  VTBL_ENTRY _ZTV6S702C5[];
extern Class_Descriptor cd_S702C4;
extern VTBL_ENTRY _ZTI6S702C4[];
extern  VTBL_ENTRY _ZTV6S702C4[];
static Base_Class bases_S702C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S702C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S702C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S702C3[];
extern void _ZN6S702C3D1Ev();
extern void _ZN6S702C3D0Ev();
extern void _ZN6S702C52v8Ev();
extern void _ZN6S702C52v9Ev();
extern void _ZN6S702C53v10Ev();
extern void _ZN6S702C53v11Ev();
extern void _ZN6S702C53v12Ev();
extern void _ZN6S702C53v13Ev();
extern void _ZN6S702C53v14Ev();
extern void _ZN6S702C53v15Ev();
extern void _ZN6S702C53v16Ev();
extern void _ZN6S702C53v17Ev();
extern void _ZN6S702C53v18Ev();
extern void _ZN6S702C53v19Ev();
extern void _ZN6S702C53v20Ev();
extern void _ZN6S702C53v21Ev();
extern void _ZN6S702C53v22Ev();
extern void _ZN6S702C53v23Ev();
extern void _ZN6S702C53v24Ev();
extern void _ZN6S702C53v25Ev();
extern void _ZN6S702C53v26Ev();
extern void _ZN6S702C53v27Ev();
extern void _ZN6S702C53v28Ev();
extern void _ZN6S702C53v29Ev();
extern void _ZN6S702C53v30Ev();
extern void _ZN6S702C53v31Ev();
extern void _ZN6S702C53v32Ev();
extern void _ZN6S702C53v33Ev();
extern void _ZN6S702C53v34Ev();
extern void _ZN6S702C53v35Ev();
extern void _ZN6S702C53v36Ev();
extern void _ZN6S702C53v37Ev();
extern void _ZN6S702C53v38Ev();
extern void _ZN6S702C53v39Ev();
extern void _ZN6S702C53v40Ev();
extern void _ZN6S702C53v41Ev();
extern void _ZN6S702C53v42Ev();
extern void _ZN6S702C53v43Ev();
extern void _ZN6S702C53v44Ev();
extern void _ZN6S702C53v45Ev();
extern void _ZN6S702C53v46Ev();
extern void _ZN6S702C53v47Ev();
extern void _ZN6S702C53v48Ev();
extern void _ZN6S702C53v49Ev();
extern void _ZN6S702C53v50Ev();
extern void _ZN6S702C53v51Ev();
extern void _ZN6S702C53v52Ev();
extern void _ZN6S702C53v53Ev();
extern void _ZN6S702C53v54Ev();
extern void _ZN6S702C53v55Ev();
extern void _ZN6S702C53v56Ev();
extern void _ZN6S702C53v57Ev();
extern void _ZN6S702C53v58Ev();
extern void _ZN6S702C53v59Ev();
extern void _ZN6S702C53v60Ev();
extern void _ZN6S702C53v61Ev();
extern void _ZN6S702C53v62Ev();
extern void _ZN6S702C53v63Ev();
extern void _ZN6S702C53v64Ev();
extern void _ZN6S702C53v65Ev();
extern void _ZN6S702C53v66Ev();
extern void _ZN6S702C53v67Ev();
extern void _ZN6S702C53v68Ev();
extern void _ZN6S702C53v69Ev();
extern void _ZN6S702C53v70Ev();
extern void _ZN6S702C53v71Ev();
extern void _ZN6S702C43v72Ev();
extern void _ZN6S702C43v73Ev();
extern void _ZN6S702C43v74Ev();
extern void _ZN6S702C43v75Ev();
extern void _ZN6S702C43v76Ev();
extern void _ZN6S702C43v77Ev();
extern void _ZN6S702C43v78Ev();
extern void _ZN6S702C43v79Ev();
extern void _ZN6S702C43v80Ev();
extern void _ZN6S702C43v81Ev();
extern void _ZN6S702C43v82Ev();
extern void _ZN6S702C43v83Ev();
extern void _ZN6S702C43v84Ev();
extern void _ZN6S702C43v85Ev();
extern void _ZN6S702C43v86Ev();
extern void _ZN6S702C43v87Ev();
extern void _ZN6S702C43v88Ev();
extern void _ZN6S702C43v89Ev();
extern void _ZN6S702C43v90Ev();
extern void _ZN6S702C43v91Ev();
extern void _ZN6S702C43v92Ev();
extern void _ZN6S702C43v93Ev();
extern void _ZN6S702C43v94Ev();
extern void _ZN6S702C43v95Ev();
extern void _ZN6S702C43v96Ev();
extern void _ZN6S702C43v97Ev();
extern void _ZN6S702C43v98Ev();
extern void _ZN6S702C33v99Ev();
extern void _ZN6S702C34v100Ev();
extern void _ZN6S702C34v101Ev();
extern void _ZN6S702C34v102Ev();
extern void _ZN6S702C34v103Ev();
extern void _ZN6S702C34v104Ev();
extern void _ZN6S702C34v105Ev();
extern void _ZN6S702C34v106Ev();
extern void _ZN6S702C34v107Ev();
extern void _ZN6S702C34v108Ev();
extern void _ZN6S702C34v109Ev();
extern void _ZN6S702C34v110Ev();
extern void _ZN6S702C34v111Ev();
extern void _ZN6S702C34v112Ev();
extern void _ZN6S702C34v113Ev();
extern void _ZN6S702C34v114Ev();
extern void _ZN6S702C34v115Ev();
extern void _ZN6S702C34v116Ev();
static  VTBL_ENTRY vtc_S702C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S702C3[0]),
  (VTBL_ENTRY)&_ZN6S702C3D1Ev,
  (VTBL_ENTRY)&_ZN6S702C3D0Ev,
  (VTBL_ENTRY)&_ZN6S702C52v8Ev,
  (VTBL_ENTRY)&_ZN6S702C52v9Ev,
  (VTBL_ENTRY)&_ZN6S702C53v10Ev,
  (VTBL_ENTRY)&_ZN6S702C53v11Ev,
  (VTBL_ENTRY)&_ZN6S702C53v12Ev,
  (VTBL_ENTRY)&_ZN6S702C53v13Ev,
  (VTBL_ENTRY)&_ZN6S702C53v14Ev,
  (VTBL_ENTRY)&_ZN6S702C53v15Ev,
  (VTBL_ENTRY)&_ZN6S702C53v16Ev,
  (VTBL_ENTRY)&_ZN6S702C53v17Ev,
  (VTBL_ENTRY)&_ZN6S702C53v18Ev,
  (VTBL_ENTRY)&_ZN6S702C53v19Ev,
  (VTBL_ENTRY)&_ZN6S702C53v20Ev,
  (VTBL_ENTRY)&_ZN6S702C53v21Ev,
  (VTBL_ENTRY)&_ZN6S702C53v22Ev,
  (VTBL_ENTRY)&_ZN6S702C53v23Ev,
  (VTBL_ENTRY)&_ZN6S702C53v24Ev,
  (VTBL_ENTRY)&_ZN6S702C53v25Ev,
  (VTBL_ENTRY)&_ZN6S702C53v26Ev,
  (VTBL_ENTRY)&_ZN6S702C53v27Ev,
  (VTBL_ENTRY)&_ZN6S702C53v28Ev,
  (VTBL_ENTRY)&_ZN6S702C53v29Ev,
  (VTBL_ENTRY)&_ZN6S702C53v30Ev,
  (VTBL_ENTRY)&_ZN6S702C53v31Ev,
  (VTBL_ENTRY)&_ZN6S702C53v32Ev,
  (VTBL_ENTRY)&_ZN6S702C53v33Ev,
  (VTBL_ENTRY)&_ZN6S702C53v34Ev,
  (VTBL_ENTRY)&_ZN6S702C53v35Ev,
  (VTBL_ENTRY)&_ZN6S702C53v36Ev,
  (VTBL_ENTRY)&_ZN6S702C53v37Ev,
  (VTBL_ENTRY)&_ZN6S702C53v38Ev,
  (VTBL_ENTRY)&_ZN6S702C53v39Ev,
  (VTBL_ENTRY)&_ZN6S702C53v40Ev,
  (VTBL_ENTRY)&_ZN6S702C53v41Ev,
  (VTBL_ENTRY)&_ZN6S702C53v42Ev,
  (VTBL_ENTRY)&_ZN6S702C53v43Ev,
  (VTBL_ENTRY)&_ZN6S702C53v44Ev,
  (VTBL_ENTRY)&_ZN6S702C53v45Ev,
  (VTBL_ENTRY)&_ZN6S702C53v46Ev,
  (VTBL_ENTRY)&_ZN6S702C53v47Ev,
  (VTBL_ENTRY)&_ZN6S702C53v48Ev,
  (VTBL_ENTRY)&_ZN6S702C53v49Ev,
  (VTBL_ENTRY)&_ZN6S702C53v50Ev,
  (VTBL_ENTRY)&_ZN6S702C53v51Ev,
  (VTBL_ENTRY)&_ZN6S702C53v52Ev,
  (VTBL_ENTRY)&_ZN6S702C53v53Ev,
  (VTBL_ENTRY)&_ZN6S702C53v54Ev,
  (VTBL_ENTRY)&_ZN6S702C53v55Ev,
  (VTBL_ENTRY)&_ZN6S702C53v56Ev,
  (VTBL_ENTRY)&_ZN6S702C53v57Ev,
  (VTBL_ENTRY)&_ZN6S702C53v58Ev,
  (VTBL_ENTRY)&_ZN6S702C53v59Ev,
  (VTBL_ENTRY)&_ZN6S702C53v60Ev,
  (VTBL_ENTRY)&_ZN6S702C53v61Ev,
  (VTBL_ENTRY)&_ZN6S702C53v62Ev,
  (VTBL_ENTRY)&_ZN6S702C53v63Ev,
  (VTBL_ENTRY)&_ZN6S702C53v64Ev,
  (VTBL_ENTRY)&_ZN6S702C53v65Ev,
  (VTBL_ENTRY)&_ZN6S702C53v66Ev,
  (VTBL_ENTRY)&_ZN6S702C53v67Ev,
  (VTBL_ENTRY)&_ZN6S702C53v68Ev,
  (VTBL_ENTRY)&_ZN6S702C53v69Ev,
  (VTBL_ENTRY)&_ZN6S702C53v70Ev,
  (VTBL_ENTRY)&_ZN6S702C53v71Ev,
  (VTBL_ENTRY)&_ZN6S702C43v72Ev,
  (VTBL_ENTRY)&_ZN6S702C43v73Ev,
  (VTBL_ENTRY)&_ZN6S702C43v74Ev,
  (VTBL_ENTRY)&_ZN6S702C43v75Ev,
  (VTBL_ENTRY)&_ZN6S702C43v76Ev,
  (VTBL_ENTRY)&_ZN6S702C43v77Ev,
  (VTBL_ENTRY)&_ZN6S702C43v78Ev,
  (VTBL_ENTRY)&_ZN6S702C43v79Ev,
  (VTBL_ENTRY)&_ZN6S702C43v80Ev,
  (VTBL_ENTRY)&_ZN6S702C43v81Ev,
  (VTBL_ENTRY)&_ZN6S702C43v82Ev,
  (VTBL_ENTRY)&_ZN6S702C43v83Ev,
  (VTBL_ENTRY)&_ZN6S702C43v84Ev,
  (VTBL_ENTRY)&_ZN6S702C43v85Ev,
  (VTBL_ENTRY)&_ZN6S702C43v86Ev,
  (VTBL_ENTRY)&_ZN6S702C43v87Ev,
  (VTBL_ENTRY)&_ZN6S702C43v88Ev,
  (VTBL_ENTRY)&_ZN6S702C43v89Ev,
  (VTBL_ENTRY)&_ZN6S702C43v90Ev,
  (VTBL_ENTRY)&_ZN6S702C43v91Ev,
  (VTBL_ENTRY)&_ZN6S702C43v92Ev,
  (VTBL_ENTRY)&_ZN6S702C43v93Ev,
  (VTBL_ENTRY)&_ZN6S702C43v94Ev,
  (VTBL_ENTRY)&_ZN6S702C43v95Ev,
  (VTBL_ENTRY)&_ZN6S702C43v96Ev,
  (VTBL_ENTRY)&_ZN6S702C43v97Ev,
  (VTBL_ENTRY)&_ZN6S702C43v98Ev,
  (VTBL_ENTRY)&_ZN6S702C33v99Ev,
  (VTBL_ENTRY)&_ZN6S702C34v100Ev,
  (VTBL_ENTRY)&_ZN6S702C34v101Ev,
  (VTBL_ENTRY)&_ZN6S702C34v102Ev,
  (VTBL_ENTRY)&_ZN6S702C34v103Ev,
  (VTBL_ENTRY)&_ZN6S702C34v104Ev,
  (VTBL_ENTRY)&_ZN6S702C34v105Ev,
  (VTBL_ENTRY)&_ZN6S702C34v106Ev,
  (VTBL_ENTRY)&_ZN6S702C34v107Ev,
  (VTBL_ENTRY)&_ZN6S702C34v108Ev,
  (VTBL_ENTRY)&_ZN6S702C34v109Ev,
  (VTBL_ENTRY)&_ZN6S702C34v110Ev,
  (VTBL_ENTRY)&_ZN6S702C34v111Ev,
  (VTBL_ENTRY)&_ZN6S702C34v112Ev,
  (VTBL_ENTRY)&_ZN6S702C34v113Ev,
  (VTBL_ENTRY)&_ZN6S702C34v114Ev,
  (VTBL_ENTRY)&_ZN6S702C34v115Ev,
  (VTBL_ENTRY)&_ZN6S702C34v116Ev,
};
extern VTBL_ENTRY _ZTI6S702C3[];
extern  VTBL_ENTRY _ZTV6S702C3[];
Class_Descriptor cd_S702C3 = {  "S702C3", // class name
  bases_S702C3, 2,
  &(vtc_S702C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S702C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S702C3),113, //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  S702C2  : S702C3 {
  ::S165C27 s702c2f0;
  int s702c2f1[2];
  unsigned int s702c2f2:1;
  virtual  ~S702C2(); // _ZN6S702C2D1Ev
  virtual void  v117(); // _ZN6S702C24v117Ev
  virtual void  v118(); // _ZN6S702C24v118Ev
  virtual void  v119(); // _ZN6S702C24v119Ev
  virtual void  v120(); // _ZN6S702C24v120Ev
  virtual void  v121(); // _ZN6S702C24v121Ev
  virtual void  v122(); // _ZN6S702C24v122Ev
  virtual void  v123(); // _ZN6S702C24v123Ev
  S702C2(); // tgen
};
//SIG(-1 S702C2) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 FC16{ BC17{ BC8}} Fi[2] Fi:1}


 S702C2 ::~S702C2(){ note_dtor("S702C2", this);}
void  S702C2 ::v117(){vfunc_called(this, "_ZN6S702C24v117Ev");}
void  S702C2 ::v118(){vfunc_called(this, "_ZN6S702C24v118Ev");}
void  S702C2 ::v119(){vfunc_called(this, "_ZN6S702C24v119Ev");}
void  S702C2 ::v120(){vfunc_called(this, "_ZN6S702C24v120Ev");}
void  S702C2 ::v121(){vfunc_called(this, "_ZN6S702C24v121Ev");}
void  S702C2 ::v122(){vfunc_called(this, "_ZN6S702C24v122Ev");}
void  S702C2 ::v123(){vfunc_called(this, "_ZN6S702C24v123Ev");}
S702C2 ::S702C2(){ note_ctor("S702C2", this);} // tgen

static void Test_S702C2()
{
  extern Class_Descriptor cd_S702C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,56)];
    init_test(&cd_S702C2, buf);
    S702C2 *dp, &lv = *(dp=new (buf) S702C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,220), "sizeof(S702C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S702C2)");
    check_base_class_offset(lv, (S702C5*)(S702C4*)(S702C3*), 0, "S702C2");
    check_base_class_offset(lv, (S702C4*)(S702C3*), 0, "S702C2");
    check_base_class_offset(lv, (S702C3*), 0, "S702C2");
    check_field_offset(lv, s702c2f0, ABISELECT(256,196), "S702C2.s702c2f0");
    check_field_offset(lv, s702c2f1, ABISELECT(272,208), "S702C2.s702c2f1");
    set_bf_and_test(lv, s702c2f2, ABISELECT(280,216), 0, 1, 1, "S702C2");
    test_class_info(&lv, &cd_S702C2);
    dp->~S702C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS702C2(Test_S702C2, "S702C2", ABISELECT(288,220));

#else // __cplusplus

extern void _ZN6S702C2C1Ev();
extern void _ZN6S702C2D1Ev();
Name_Map name_map_S702C2[] = {
  NSPAIR(_ZN6S702C2C1Ev),
  NSPAIR(_ZN6S702C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S702C5;
extern VTBL_ENTRY _ZTI6S702C5[];
extern  VTBL_ENTRY _ZTV6S702C5[];
extern Class_Descriptor cd_S702C4;
extern VTBL_ENTRY _ZTI6S702C4[];
extern  VTBL_ENTRY _ZTV6S702C4[];
extern Class_Descriptor cd_S702C3;
extern VTBL_ENTRY _ZTI6S702C3[];
extern  VTBL_ENTRY _ZTV6S702C3[];
static Base_Class bases_S702C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S702C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S702C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S702C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S702C2[];
extern void _ZN6S702C2D1Ev();
extern void _ZN6S702C2D0Ev();
extern void _ZN6S702C52v8Ev();
extern void _ZN6S702C52v9Ev();
extern void _ZN6S702C53v10Ev();
extern void _ZN6S702C53v11Ev();
extern void _ZN6S702C53v12Ev();
extern void _ZN6S702C53v13Ev();
extern void _ZN6S702C53v14Ev();
extern void _ZN6S702C53v15Ev();
extern void _ZN6S702C53v16Ev();
extern void _ZN6S702C53v17Ev();
extern void _ZN6S702C53v18Ev();
extern void _ZN6S702C53v19Ev();
extern void _ZN6S702C53v20Ev();
extern void _ZN6S702C53v21Ev();
extern void _ZN6S702C53v22Ev();
extern void _ZN6S702C53v23Ev();
extern void _ZN6S702C53v24Ev();
extern void _ZN6S702C53v25Ev();
extern void _ZN6S702C53v26Ev();
extern void _ZN6S702C53v27Ev();
extern void _ZN6S702C53v28Ev();
extern void _ZN6S702C53v29Ev();
extern void _ZN6S702C53v30Ev();
extern void _ZN6S702C53v31Ev();
extern void _ZN6S702C53v32Ev();
extern void _ZN6S702C53v33Ev();
extern void _ZN6S702C53v34Ev();
extern void _ZN6S702C53v35Ev();
extern void _ZN6S702C53v36Ev();
extern void _ZN6S702C53v37Ev();
extern void _ZN6S702C53v38Ev();
extern void _ZN6S702C53v39Ev();
extern void _ZN6S702C53v40Ev();
extern void _ZN6S702C53v41Ev();
extern void _ZN6S702C53v42Ev();
extern void _ZN6S702C53v43Ev();
extern void _ZN6S702C53v44Ev();
extern void _ZN6S702C53v45Ev();
extern void _ZN6S702C53v46Ev();
extern void _ZN6S702C53v47Ev();
extern void _ZN6S702C53v48Ev();
extern void _ZN6S702C53v49Ev();
extern void _ZN6S702C53v50Ev();
extern void _ZN6S702C53v51Ev();
extern void _ZN6S702C53v52Ev();
extern void _ZN6S702C53v53Ev();
extern void _ZN6S702C53v54Ev();
extern void _ZN6S702C53v55Ev();
extern void _ZN6S702C53v56Ev();
extern void _ZN6S702C53v57Ev();
extern void _ZN6S702C53v58Ev();
extern void _ZN6S702C53v59Ev();
extern void _ZN6S702C53v60Ev();
extern void _ZN6S702C53v61Ev();
extern void _ZN6S702C53v62Ev();
extern void _ZN6S702C53v63Ev();
extern void _ZN6S702C53v64Ev();
extern void _ZN6S702C53v65Ev();
extern void _ZN6S702C53v66Ev();
extern void _ZN6S702C53v67Ev();
extern void _ZN6S702C53v68Ev();
extern void _ZN6S702C53v69Ev();
extern void _ZN6S702C53v70Ev();
extern void _ZN6S702C53v71Ev();
extern void _ZN6S702C43v72Ev();
extern void _ZN6S702C43v73Ev();
extern void _ZN6S702C43v74Ev();
extern void _ZN6S702C43v75Ev();
extern void _ZN6S702C43v76Ev();
extern void _ZN6S702C43v77Ev();
extern void _ZN6S702C43v78Ev();
extern void _ZN6S702C43v79Ev();
extern void _ZN6S702C43v80Ev();
extern void _ZN6S702C43v81Ev();
extern void _ZN6S702C43v82Ev();
extern void _ZN6S702C43v83Ev();
extern void _ZN6S702C43v84Ev();
extern void _ZN6S702C43v85Ev();
extern void _ZN6S702C43v86Ev();
extern void _ZN6S702C43v87Ev();
extern void _ZN6S702C43v88Ev();
extern void _ZN6S702C43v89Ev();
extern void _ZN6S702C43v90Ev();
extern void _ZN6S702C43v91Ev();
extern void _ZN6S702C43v92Ev();
extern void _ZN6S702C43v93Ev();
extern void _ZN6S702C43v94Ev();
extern void _ZN6S702C43v95Ev();
extern void _ZN6S702C43v96Ev();
extern void _ZN6S702C43v97Ev();
extern void _ZN6S702C43v98Ev();
extern void _ZN6S702C33v99Ev();
extern void _ZN6S702C34v100Ev();
extern void _ZN6S702C34v101Ev();
extern void _ZN6S702C34v102Ev();
extern void _ZN6S702C34v103Ev();
extern void _ZN6S702C34v104Ev();
extern void _ZN6S702C34v105Ev();
extern void _ZN6S702C34v106Ev();
extern void _ZN6S702C34v107Ev();
extern void _ZN6S702C34v108Ev();
extern void _ZN6S702C34v109Ev();
extern void _ZN6S702C34v110Ev();
extern void _ZN6S702C34v111Ev();
extern void _ZN6S702C34v112Ev();
extern void _ZN6S702C34v113Ev();
extern void _ZN6S702C34v114Ev();
extern void _ZN6S702C34v115Ev();
extern void _ZN6S702C34v116Ev();
extern void _ZN6S702C24v117Ev();
extern void _ZN6S702C24v118Ev();
extern void _ZN6S702C24v119Ev();
extern void _ZN6S702C24v120Ev();
extern void _ZN6S702C24v121Ev();
extern void _ZN6S702C24v122Ev();
extern void _ZN6S702C24v123Ev();
static  VTBL_ENTRY vtc_S702C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S702C2[0]),
  (VTBL_ENTRY)&_ZN6S702C2D1Ev,
  (VTBL_ENTRY)&_ZN6S702C2D0Ev,
  (VTBL_ENTRY)&_ZN6S702C52v8Ev,
  (VTBL_ENTRY)&_ZN6S702C52v9Ev,
  (VTBL_ENTRY)&_ZN6S702C53v10Ev,
  (VTBL_ENTRY)&_ZN6S702C53v11Ev,
  (VTBL_ENTRY)&_ZN6S702C53v12Ev,
  (VTBL_ENTRY)&_ZN6S702C53v13Ev,
  (VTBL_ENTRY)&_ZN6S702C53v14Ev,
  (VTBL_ENTRY)&_ZN6S702C53v15Ev,
  (VTBL_ENTRY)&_ZN6S702C53v16Ev,
  (VTBL_ENTRY)&_ZN6S702C53v17Ev,
  (VTBL_ENTRY)&_ZN6S702C53v18Ev,
  (VTBL_ENTRY)&_ZN6S702C53v19Ev,
  (VTBL_ENTRY)&_ZN6S702C53v20Ev,
  (VTBL_ENTRY)&_ZN6S702C53v21Ev,
  (VTBL_ENTRY)&_ZN6S702C53v22Ev,
  (VTBL_ENTRY)&_ZN6S702C53v23Ev,
  (VTBL_ENTRY)&_ZN6S702C53v24Ev,
  (VTBL_ENTRY)&_ZN6S702C53v25Ev,
  (VTBL_ENTRY)&_ZN6S702C53v26Ev,
  (VTBL_ENTRY)&_ZN6S702C53v27Ev,
  (VTBL_ENTRY)&_ZN6S702C53v28Ev,
  (VTBL_ENTRY)&_ZN6S702C53v29Ev,
  (VTBL_ENTRY)&_ZN6S702C53v30Ev,
  (VTBL_ENTRY)&_ZN6S702C53v31Ev,
  (VTBL_ENTRY)&_ZN6S702C53v32Ev,
  (VTBL_ENTRY)&_ZN6S702C53v33Ev,
  (VTBL_ENTRY)&_ZN6S702C53v34Ev,
  (VTBL_ENTRY)&_ZN6S702C53v35Ev,
  (VTBL_ENTRY)&_ZN6S702C53v36Ev,
  (VTBL_ENTRY)&_ZN6S702C53v37Ev,
  (VTBL_ENTRY)&_ZN6S702C53v38Ev,
  (VTBL_ENTRY)&_ZN6S702C53v39Ev,
  (VTBL_ENTRY)&_ZN6S702C53v40Ev,
  (VTBL_ENTRY)&_ZN6S702C53v41Ev,
  (VTBL_ENTRY)&_ZN6S702C53v42Ev,
  (VTBL_ENTRY)&_ZN6S702C53v43Ev,
  (VTBL_ENTRY)&_ZN6S702C53v44Ev,
  (VTBL_ENTRY)&_ZN6S702C53v45Ev,
  (VTBL_ENTRY)&_ZN6S702C53v46Ev,
  (VTBL_ENTRY)&_ZN6S702C53v47Ev,
  (VTBL_ENTRY)&_ZN6S702C53v48Ev,
  (VTBL_ENTRY)&_ZN6S702C53v49Ev,
  (VTBL_ENTRY)&_ZN6S702C53v50Ev,
  (VTBL_ENTRY)&_ZN6S702C53v51Ev,
  (VTBL_ENTRY)&_ZN6S702C53v52Ev,
  (VTBL_ENTRY)&_ZN6S702C53v53Ev,
  (VTBL_ENTRY)&_ZN6S702C53v54Ev,
  (VTBL_ENTRY)&_ZN6S702C53v55Ev,
  (VTBL_ENTRY)&_ZN6S702C53v56Ev,
  (VTBL_ENTRY)&_ZN6S702C53v57Ev,
  (VTBL_ENTRY)&_ZN6S702C53v58Ev,
  (VTBL_ENTRY)&_ZN6S702C53v59Ev,
  (VTBL_ENTRY)&_ZN6S702C53v60Ev,
  (VTBL_ENTRY)&_ZN6S702C53v61Ev,
  (VTBL_ENTRY)&_ZN6S702C53v62Ev,
  (VTBL_ENTRY)&_ZN6S702C53v63Ev,
  (VTBL_ENTRY)&_ZN6S702C53v64Ev,
  (VTBL_ENTRY)&_ZN6S702C53v65Ev,
  (VTBL_ENTRY)&_ZN6S702C53v66Ev,
  (VTBL_ENTRY)&_ZN6S702C53v67Ev,
  (VTBL_ENTRY)&_ZN6S702C53v68Ev,
  (VTBL_ENTRY)&_ZN6S702C53v69Ev,
  (VTBL_ENTRY)&_ZN6S702C53v70Ev,
  (VTBL_ENTRY)&_ZN6S702C53v71Ev,
  (VTBL_ENTRY)&_ZN6S702C43v72Ev,
  (VTBL_ENTRY)&_ZN6S702C43v73Ev,
  (VTBL_ENTRY)&_ZN6S702C43v74Ev,
  (VTBL_ENTRY)&_ZN6S702C43v75Ev,
  (VTBL_ENTRY)&_ZN6S702C43v76Ev,
  (VTBL_ENTRY)&_ZN6S702C43v77Ev,
  (VTBL_ENTRY)&_ZN6S702C43v78Ev,
  (VTBL_ENTRY)&_ZN6S702C43v79Ev,
  (VTBL_ENTRY)&_ZN6S702C43v80Ev,
  (VTBL_ENTRY)&_ZN6S702C43v81Ev,
  (VTBL_ENTRY)&_ZN6S702C43v82Ev,
  (VTBL_ENTRY)&_ZN6S702C43v83Ev,
  (VTBL_ENTRY)&_ZN6S702C43v84Ev,
  (VTBL_ENTRY)&_ZN6S702C43v85Ev,
  (VTBL_ENTRY)&_ZN6S702C43v86Ev,
  (VTBL_ENTRY)&_ZN6S702C43v87Ev,
  (VTBL_ENTRY)&_ZN6S702C43v88Ev,
  (VTBL_ENTRY)&_ZN6S702C43v89Ev,
  (VTBL_ENTRY)&_ZN6S702C43v90Ev,
  (VTBL_ENTRY)&_ZN6S702C43v91Ev,
  (VTBL_ENTRY)&_ZN6S702C43v92Ev,
  (VTBL_ENTRY)&_ZN6S702C43v93Ev,
  (VTBL_ENTRY)&_ZN6S702C43v94Ev,
  (VTBL_ENTRY)&_ZN6S702C43v95Ev,
  (VTBL_ENTRY)&_ZN6S702C43v96Ev,
  (VTBL_ENTRY)&_ZN6S702C43v97Ev,
  (VTBL_ENTRY)&_ZN6S702C43v98Ev,
  (VTBL_ENTRY)&_ZN6S702C33v99Ev,
  (VTBL_ENTRY)&_ZN6S702C34v100Ev,
  (VTBL_ENTRY)&_ZN6S702C34v101Ev,
  (VTBL_ENTRY)&_ZN6S702C34v102Ev,
  (VTBL_ENTRY)&_ZN6S702C34v103Ev,
  (VTBL_ENTRY)&_ZN6S702C34v104Ev,
  (VTBL_ENTRY)&_ZN6S702C34v105Ev,
  (VTBL_ENTRY)&_ZN6S702C34v106Ev,
  (VTBL_ENTRY)&_ZN6S702C34v107Ev,
  (VTBL_ENTRY)&_ZN6S702C34v108Ev,
  (VTBL_ENTRY)&_ZN6S702C34v109Ev,
  (VTBL_ENTRY)&_ZN6S702C34v110Ev,
  (VTBL_ENTRY)&_ZN6S702C34v111Ev,
  (VTBL_ENTRY)&_ZN6S702C34v112Ev,
  (VTBL_ENTRY)&_ZN6S702C34v113Ev,
  (VTBL_ENTRY)&_ZN6S702C34v114Ev,
  (VTBL_ENTRY)&_ZN6S702C34v115Ev,
  (VTBL_ENTRY)&_ZN6S702C34v116Ev,
  (VTBL_ENTRY)&_ZN6S702C24v117Ev,
  (VTBL_ENTRY)&_ZN6S702C24v118Ev,
  (VTBL_ENTRY)&_ZN6S702C24v119Ev,
  (VTBL_ENTRY)&_ZN6S702C24v120Ev,
  (VTBL_ENTRY)&_ZN6S702C24v121Ev,
  (VTBL_ENTRY)&_ZN6S702C24v122Ev,
  (VTBL_ENTRY)&_ZN6S702C24v123Ev,
};
extern VTBL_ENTRY _ZTI6S702C2[];
extern  VTBL_ENTRY _ZTV6S702C2[];
Class_Descriptor cd_S702C2 = {  "S702C2", // class name
  bases_S702C2, 3,
  &(vtc_S702C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,220), // object size
  NSPAIRA(_ZTI6S702C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S702C2),120, //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  S702C1  : S702C2 {
  ::S165C25 s702c1f0;
  void *s702c1f1;
  int s702c1f2;
  virtual  ~S702C1(); // _ZN6S702C1D1Ev
  virtual void  v1(); // _ZN6S702C12v1Ev
  virtual void  v2(); // _ZN6S702C12v2Ev
  virtual void  v3(); // _ZN6S702C12v3Ev
  virtual void  v4(); // _ZN6S702C12v4Ev
  virtual void  v5(); // _ZN6S702C12v5Ev
  virtual void  v6(); // _ZN6S702C12v6Ev
  virtual void  v7(); // _ZN6S702C12v7Ev
  S702C1(); // tgen
};
//SIG(1 S702C1) 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 v94 v95 v96 v97 v98 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC15{ BC16{ BC9}} Fi:1} vd v117 v118 v119 v120 v121 v122 v123 FC17{ BC18{ BC9}} Fi[2] Fi:1} vd v1 v2 v3 v4 v5 v6 v7 FC19{ BC20{ BC9}} Fp Fi}


 S702C1 ::~S702C1(){ note_dtor("S702C1", this);}
void  S702C1 ::v1(){vfunc_called(this, "_ZN6S702C12v1Ev");}
void  S702C1 ::v2(){vfunc_called(this, "_ZN6S702C12v2Ev");}
void  S702C1 ::v3(){vfunc_called(this, "_ZN6S702C12v3Ev");}
void  S702C1 ::v4(){vfunc_called(this, "_ZN6S702C12v4Ev");}
void  S702C1 ::v5(){vfunc_called(this, "_ZN6S702C12v5Ev");}
void  S702C1 ::v6(){vfunc_called(this, "_ZN6S702C12v6Ev");}
void  S702C1 ::v7(){vfunc_called(this, "_ZN6S702C12v7Ev");}
S702C1 ::S702C1(){ note_ctor("S702C1", this);} // tgen

static void Test_S702C1()
{
  extern Class_Descriptor cd_S702C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,61)];
    init_test(&cd_S702C1, buf);
    S702C1 *dp, &lv = *(dp=new (buf) S702C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,240), "sizeof(S702C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S702C1)");
    check_base_class_offset(lv, (S702C5*)(S702C4*)(S702C3*)(S702C2*), 0, "S702C1");
    check_base_class_offset(lv, (S702C4*)(S702C3*)(S702C2*), 0, "S702C1");
    check_base_class_offset(lv, (S702C3*)(S702C2*), 0, "S702C1");
    check_base_class_offset(lv, (S702C2*), 0, "S702C1");
    check_field_offset(lv, s702c1f0, ABISELECT(288,220), "S702C1.s702c1f0");
    check_field_offset(lv, s702c1f1, ABISELECT(304,232), "S702C1.s702c1f1");
    check_field_offset(lv, s702c1f2, ABISELECT(312,236), "S702C1.s702c1f2");
    test_class_info(&lv, &cd_S702C1);
    dp->~S702C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS702C1(Test_S702C1, "S702C1", ABISELECT(320,240));

#else // __cplusplus

extern void _ZN6S702C1C1Ev();
extern void _ZN6S702C1D1Ev();
Name_Map name_map_S702C1[] = {
  NSPAIR(_ZN6S702C1C1Ev),
  NSPAIR(_ZN6S702C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S702C5;
extern VTBL_ENTRY _ZTI6S702C5[];
extern  VTBL_ENTRY _ZTV6S702C5[];
extern Class_Descriptor cd_S702C4;
extern VTBL_ENTRY _ZTI6S702C4[];
extern  VTBL_ENTRY _ZTV6S702C4[];
extern Class_Descriptor cd_S702C3;
extern VTBL_ENTRY _ZTI6S702C3[];
extern  VTBL_ENTRY _ZTV6S702C3[];
extern Class_Descriptor cd_S702C2;
extern VTBL_ENTRY _ZTI6S702C2[];
extern  VTBL_ENTRY _ZTV6S702C2[];
static Base_Class bases_S702C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S702C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S702C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S702C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S702C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S702C1[];
extern void _ZN6S702C1D1Ev();
extern void _ZN6S702C1D0Ev();
extern void _ZN6S702C52v8Ev();
extern void _ZN6S702C52v9Ev();
extern void _ZN6S702C53v10Ev();
extern void _ZN6S702C53v11Ev();
extern void _ZN6S702C53v12Ev();
extern void _ZN6S702C53v13Ev();
extern void _ZN6S702C53v14Ev();
extern void _ZN6S702C53v15Ev();
extern void _ZN6S702C53v16Ev();
extern void _ZN6S702C53v17Ev();
extern void _ZN6S702C53v18Ev();
extern void _ZN6S702C53v19Ev();
extern void _ZN6S702C53v20Ev();
extern void _ZN6S702C53v21Ev();
extern void _ZN6S702C53v22Ev();
extern void _ZN6S702C53v23Ev();
extern void _ZN6S702C53v24Ev();
extern void _ZN6S702C53v25Ev();
extern void _ZN6S702C53v26Ev();
extern void _ZN6S702C53v27Ev();
extern void _ZN6S702C53v28Ev();
extern void _ZN6S702C53v29Ev();
extern void _ZN6S702C53v30Ev();
extern void _ZN6S702C53v31Ev();
extern void _ZN6S702C53v32Ev();
extern void _ZN6S702C53v33Ev();
extern void _ZN6S702C53v34Ev();
extern void _ZN6S702C53v35Ev();
extern void _ZN6S702C53v36Ev();
extern void _ZN6S702C53v37Ev();
extern void _ZN6S702C53v38Ev();
extern void _ZN6S702C53v39Ev();
extern void _ZN6S702C53v40Ev();
extern void _ZN6S702C53v41Ev();
extern void _ZN6S702C53v42Ev();
extern void _ZN6S702C53v43Ev();
extern void _ZN6S702C53v44Ev();
extern void _ZN6S702C53v45Ev();
extern void _ZN6S702C53v46Ev();
extern void _ZN6S702C53v47Ev();
extern void _ZN6S702C53v48Ev();
extern void _ZN6S702C53v49Ev();
extern void _ZN6S702C53v50Ev();
extern void _ZN6S702C53v51Ev();
extern void _ZN6S702C53v52Ev();
extern void _ZN6S702C53v53Ev();
extern void _ZN6S702C53v54Ev();
extern void _ZN6S702C53v55Ev();
extern void _ZN6S702C53v56Ev();
extern void _ZN6S702C53v57Ev();
extern void _ZN6S702C53v58Ev();
extern void _ZN6S702C53v59Ev();
extern void _ZN6S702C53v60Ev();
extern void _ZN6S702C53v61Ev();
extern void _ZN6S702C53v62Ev();
extern void _ZN6S702C53v63Ev();
extern void _ZN6S702C53v64Ev();
extern void _ZN6S702C53v65Ev();
extern void _ZN6S702C53v66Ev();
extern void _ZN6S702C53v67Ev();
extern void _ZN6S702C53v68Ev();
extern void _ZN6S702C53v69Ev();
extern void _ZN6S702C53v70Ev();
extern void _ZN6S702C53v71Ev();
extern void _ZN6S702C43v72Ev();
extern void _ZN6S702C43v73Ev();
extern void _ZN6S702C43v74Ev();
extern void _ZN6S702C43v75Ev();
extern void _ZN6S702C43v76Ev();
extern void _ZN6S702C43v77Ev();
extern void _ZN6S702C43v78Ev();
extern void _ZN6S702C43v79Ev();
extern void _ZN6S702C43v80Ev();
extern void _ZN6S702C43v81Ev();
extern void _ZN6S702C43v82Ev();
extern void _ZN6S702C43v83Ev();
extern void _ZN6S702C43v84Ev();
extern void _ZN6S702C43v85Ev();
extern void _ZN6S702C43v86Ev();
extern void _ZN6S702C43v87Ev();
extern void _ZN6S702C43v88Ev();
extern void _ZN6S702C43v89Ev();
extern void _ZN6S702C43v90Ev();
extern void _ZN6S702C43v91Ev();
extern void _ZN6S702C43v92Ev();
extern void _ZN6S702C43v93Ev();
extern void _ZN6S702C43v94Ev();
extern void _ZN6S702C43v95Ev();
extern void _ZN6S702C43v96Ev();
extern void _ZN6S702C43v97Ev();
extern void _ZN6S702C43v98Ev();
extern void _ZN6S702C33v99Ev();
extern void _ZN6S702C34v100Ev();
extern void _ZN6S702C34v101Ev();
extern void _ZN6S702C34v102Ev();
extern void _ZN6S702C34v103Ev();
extern void _ZN6S702C34v104Ev();
extern void _ZN6S702C34v105Ev();
extern void _ZN6S702C34v106Ev();
extern void _ZN6S702C34v107Ev();
extern void _ZN6S702C34v108Ev();
extern void _ZN6S702C34v109Ev();
extern void _ZN6S702C34v110Ev();
extern void _ZN6S702C34v111Ev();
extern void _ZN6S702C34v112Ev();
extern void _ZN6S702C34v113Ev();
extern void _ZN6S702C34v114Ev();
extern void _ZN6S702C34v115Ev();
extern void _ZN6S702C34v116Ev();
extern void _ZN6S702C24v117Ev();
extern void _ZN6S702C24v118Ev();
extern void _ZN6S702C24v119Ev();
extern void _ZN6S702C24v120Ev();
extern void _ZN6S702C24v121Ev();
extern void _ZN6S702C24v122Ev();
extern void _ZN6S702C24v123Ev();
extern void _ZN6S702C12v1Ev();
extern void _ZN6S702C12v2Ev();
extern void _ZN6S702C12v3Ev();
extern void _ZN6S702C12v4Ev();
extern void _ZN6S702C12v5Ev();
extern void _ZN6S702C12v6Ev();
extern void _ZN6S702C12v7Ev();
static  VTBL_ENTRY vtc_S702C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S702C1[0]),
  (VTBL_ENTRY)&_ZN6S702C1D1Ev,
  (VTBL_ENTRY)&_ZN6S702C1D0Ev,
  (VTBL_ENTRY)&_ZN6S702C52v8Ev,
  (VTBL_ENTRY)&_ZN6S702C52v9Ev,
  (VTBL_ENTRY)&_ZN6S702C53v10Ev,
  (VTBL_ENTRY)&_ZN6S702C53v11Ev,
  (VTBL_ENTRY)&_ZN6S702C53v12Ev,
  (VTBL_ENTRY)&_ZN6S702C53v13Ev,
  (VTBL_ENTRY)&_ZN6S702C53v14Ev,
  (VTBL_ENTRY)&_ZN6S702C53v15Ev,
  (VTBL_ENTRY)&_ZN6S702C53v16Ev,
  (VTBL_ENTRY)&_ZN6S702C53v17Ev,
  (VTBL_ENTRY)&_ZN6S702C53v18Ev,
  (VTBL_ENTRY)&_ZN6S702C53v19Ev,
  (VTBL_ENTRY)&_ZN6S702C53v20Ev,
  (VTBL_ENTRY)&_ZN6S702C53v21Ev,
  (VTBL_ENTRY)&_ZN6S702C53v22Ev,
  (VTBL_ENTRY)&_ZN6S702C53v23Ev,
  (VTBL_ENTRY)&_ZN6S702C53v24Ev,
  (VTBL_ENTRY)&_ZN6S702C53v25Ev,
  (VTBL_ENTRY)&_ZN6S702C53v26Ev,
  (VTBL_ENTRY)&_ZN6S702C53v27Ev,
  (VTBL_ENTRY)&_ZN6S702C53v28Ev,
  (VTBL_ENTRY)&_ZN6S702C53v29Ev,
  (VTBL_ENTRY)&_ZN6S702C53v30Ev,
  (VTBL_ENTRY)&_ZN6S702C53v31Ev,
  (VTBL_ENTRY)&_ZN6S702C53v32Ev,
  (VTBL_ENTRY)&_ZN6S702C53v33Ev,
  (VTBL_ENTRY)&_ZN6S702C53v34Ev,
  (VTBL_ENTRY)&_ZN6S702C53v35Ev,
  (VTBL_ENTRY)&_ZN6S702C53v36Ev,
  (VTBL_ENTRY)&_ZN6S702C53v37Ev,
  (VTBL_ENTRY)&_ZN6S702C53v38Ev,
  (VTBL_ENTRY)&_ZN6S702C53v39Ev,
  (VTBL_ENTRY)&_ZN6S702C53v40Ev,
  (VTBL_ENTRY)&_ZN6S702C53v41Ev,
  (VTBL_ENTRY)&_ZN6S702C53v42Ev,
  (VTBL_ENTRY)&_ZN6S702C53v43Ev,
  (VTBL_ENTRY)&_ZN6S702C53v44Ev,
  (VTBL_ENTRY)&_ZN6S702C53v45Ev,
  (VTBL_ENTRY)&_ZN6S702C53v46Ev,
  (VTBL_ENTRY)&_ZN6S702C53v47Ev,
  (VTBL_ENTRY)&_ZN6S702C53v48Ev,
  (VTBL_ENTRY)&_ZN6S702C53v49Ev,
  (VTBL_ENTRY)&_ZN6S702C53v50Ev,
  (VTBL_ENTRY)&_ZN6S702C53v51Ev,
  (VTBL_ENTRY)&_ZN6S702C53v52Ev,
  (VTBL_ENTRY)&_ZN6S702C53v53Ev,
  (VTBL_ENTRY)&_ZN6S702C53v54Ev,
  (VTBL_ENTRY)&_ZN6S702C53v55Ev,
  (VTBL_ENTRY)&_ZN6S702C53v56Ev,
  (VTBL_ENTRY)&_ZN6S702C53v57Ev,
  (VTBL_ENTRY)&_ZN6S702C53v58Ev,
  (VTBL_ENTRY)&_ZN6S702C53v59Ev,
  (VTBL_ENTRY)&_ZN6S702C53v60Ev,
  (VTBL_ENTRY)&_ZN6S702C53v61Ev,
  (VTBL_ENTRY)&_ZN6S702C53v62Ev,
  (VTBL_ENTRY)&_ZN6S702C53v63Ev,
  (VTBL_ENTRY)&_ZN6S702C53v64Ev,
  (VTBL_ENTRY)&_ZN6S702C53v65Ev,
  (VTBL_ENTRY)&_ZN6S702C53v66Ev,
  (VTBL_ENTRY)&_ZN6S702C53v67Ev,
  (VTBL_ENTRY)&_ZN6S702C53v68Ev,
  (VTBL_ENTRY)&_ZN6S702C53v69Ev,
  (VTBL_ENTRY)&_ZN6S702C53v70Ev,
  (VTBL_ENTRY)&_ZN6S702C53v71Ev,
  (VTBL_ENTRY)&_ZN6S702C43v72Ev,
  (VTBL_ENTRY)&_ZN6S702C43v73Ev,
  (VTBL_ENTRY)&_ZN6S702C43v74Ev,
  (VTBL_ENTRY)&_ZN6S702C43v75Ev,
  (VTBL_ENTRY)&_ZN6S702C43v76Ev,
  (VTBL_ENTRY)&_ZN6S702C43v77Ev,
  (VTBL_ENTRY)&_ZN6S702C43v78Ev,
  (VTBL_ENTRY)&_ZN6S702C43v79Ev,
  (VTBL_ENTRY)&_ZN6S702C43v80Ev,
  (VTBL_ENTRY)&_ZN6S702C43v81Ev,
  (VTBL_ENTRY)&_ZN6S702C43v82Ev,
  (VTBL_ENTRY)&_ZN6S702C43v83Ev,
  (VTBL_ENTRY)&_ZN6S702C43v84Ev,
  (VTBL_ENTRY)&_ZN6S702C43v85Ev,
  (VTBL_ENTRY)&_ZN6S702C43v86Ev,
  (VTBL_ENTRY)&_ZN6S702C43v87Ev,
  (VTBL_ENTRY)&_ZN6S702C43v88Ev,
  (VTBL_ENTRY)&_ZN6S702C43v89Ev,
  (VTBL_ENTRY)&_ZN6S702C43v90Ev,
  (VTBL_ENTRY)&_ZN6S702C43v91Ev,
  (VTBL_ENTRY)&_ZN6S702C43v92Ev,
  (VTBL_ENTRY)&_ZN6S702C43v93Ev,
  (VTBL_ENTRY)&_ZN6S702C43v94Ev,
  (VTBL_ENTRY)&_ZN6S702C43v95Ev,
  (VTBL_ENTRY)&_ZN6S702C43v96Ev,
  (VTBL_ENTRY)&_ZN6S702C43v97Ev,
  (VTBL_ENTRY)&_ZN6S702C43v98Ev,
  (VTBL_ENTRY)&_ZN6S702C33v99Ev,
  (VTBL_ENTRY)&_ZN6S702C34v100Ev,
  (VTBL_ENTRY)&_ZN6S702C34v101Ev,
  (VTBL_ENTRY)&_ZN6S702C34v102Ev,
  (VTBL_ENTRY)&_ZN6S702C34v103Ev,
  (VTBL_ENTRY)&_ZN6S702C34v104Ev,
  (VTBL_ENTRY)&_ZN6S702C34v105Ev,
  (VTBL_ENTRY)&_ZN6S702C34v106Ev,
  (VTBL_ENTRY)&_ZN6S702C34v107Ev,
  (VTBL_ENTRY)&_ZN6S702C34v108Ev,
  (VTBL_ENTRY)&_ZN6S702C34v109Ev,
  (VTBL_ENTRY)&_ZN6S702C34v110Ev,
  (VTBL_ENTRY)&_ZN6S702C34v111Ev,
  (VTBL_ENTRY)&_ZN6S702C34v112Ev,
  (VTBL_ENTRY)&_ZN6S702C34v113Ev,
  (VTBL_ENTRY)&_ZN6S702C34v114Ev,
  (VTBL_ENTRY)&_ZN6S702C34v115Ev,
  (VTBL_ENTRY)&_ZN6S702C34v116Ev,
  (VTBL_ENTRY)&_ZN6S702C24v117Ev,
  (VTBL_ENTRY)&_ZN6S702C24v118Ev,
  (VTBL_ENTRY)&_ZN6S702C24v119Ev,
  (VTBL_ENTRY)&_ZN6S702C24v120Ev,
  (VTBL_ENTRY)&_ZN6S702C24v121Ev,
  (VTBL_ENTRY)&_ZN6S702C24v122Ev,
  (VTBL_ENTRY)&_ZN6S702C24v123Ev,
  (VTBL_ENTRY)&_ZN6S702C12v1Ev,
  (VTBL_ENTRY)&_ZN6S702C12v2Ev,
  (VTBL_ENTRY)&_ZN6S702C12v3Ev,
  (VTBL_ENTRY)&_ZN6S702C12v4Ev,
  (VTBL_ENTRY)&_ZN6S702C12v5Ev,
  (VTBL_ENTRY)&_ZN6S702C12v6Ev,
  (VTBL_ENTRY)&_ZN6S702C12v7Ev,
};
extern VTBL_ENTRY _ZTI6S702C1[];
extern  VTBL_ENTRY _ZTV6S702C1[];
Class_Descriptor cd_S702C1 = {  "S702C1", // class name
  bases_S702C1, 4,
  &(vtc_S702C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,240), // object size
  NSPAIRA(_ZTI6S702C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S702C1),127, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1543C4  {
  int s1543c4f0;
  __tsi64 s1543c4f1;
  void *s1543c4f2[4];
  int s1543c4f3[2];
  void *s1543c4f4;
  ::S615C17_nt s1543c4f5;
  void *s1543c4f6[2];
  virtual  ~S1543C4(); // _ZN7S1543C4D1Ev
  virtual void  v7(); // _ZN7S1543C42v7Ev
  virtual void  v8(); // _ZN7S1543C42v8Ev
  virtual void  v9(); // _ZN7S1543C42v9Ev
  virtual void  v10(); // _ZN7S1543C43v10Ev
  virtual void  v11(); // _ZN7S1543C43v11Ev
  virtual void  v12(); // _ZN7S1543C43v12Ev
  virtual void  v13(); // _ZN7S1543C43v13Ev
  virtual void  v14(); // _ZN7S1543C43v14Ev
  virtual void  v15(); // _ZN7S1543C43v15Ev
  virtual void  v16(); // _ZN7S1543C43v16Ev
  virtual void  v17(); // _ZN7S1543C43v17Ev
  virtual void  v18(); // _ZN7S1543C43v18Ev
  virtual void  v19(); // _ZN7S1543C43v19Ev
  virtual void  v20(); // _ZN7S1543C43v20Ev
  virtual void  v21(); // _ZN7S1543C43v21Ev
  virtual void  v22(); // _ZN7S1543C43v22Ev
  virtual void  v23(); // _ZN7S1543C43v23Ev
  virtual void  v24(); // _ZN7S1543C43v24Ev
  virtual void  v25(); // _ZN7S1543C43v25Ev
  virtual void  v26(); // _ZN7S1543C43v26Ev
  virtual void  v27(); // _ZN7S1543C43v27Ev
  virtual void  v28(); // _ZN7S1543C43v28Ev
  virtual void  v29(); // _ZN7S1543C43v29Ev
  virtual void  v30(); // _ZN7S1543C43v30Ev
  virtual void  v31(); // _ZN7S1543C43v31Ev
  virtual void  v32(); // _ZN7S1543C43v32Ev
  virtual void  v33(); // _ZN7S1543C43v33Ev
  virtual void  v34(); // _ZN7S1543C43v34Ev
  virtual void  v35(); // _ZN7S1543C43v35Ev
  virtual void  v36(); // _ZN7S1543C43v36Ev
  virtual void  v37(); // _ZN7S1543C43v37Ev
  virtual void  v38(); // _ZN7S1543C43v38Ev
  virtual void  v39(); // _ZN7S1543C43v39Ev
  virtual void  v40(); // _ZN7S1543C43v40Ev
  virtual void  v41(); // _ZN7S1543C43v41Ev
  virtual void  v42(); // _ZN7S1543C43v42Ev
  virtual void  v43(); // _ZN7S1543C43v43Ev
  virtual void  v44(); // _ZN7S1543C43v44Ev
  virtual void  v45(); // _ZN7S1543C43v45Ev
  virtual void  v46(); // _ZN7S1543C43v46Ev
  virtual void  v47(); // _ZN7S1543C43v47Ev
  virtual void  v48(); // _ZN7S1543C43v48Ev
  virtual void  v49(); // _ZN7S1543C43v49Ev
  virtual void  v50(); // _ZN7S1543C43v50Ev
  virtual void  v51(); // _ZN7S1543C43v51Ev
  virtual void  v52(); // _ZN7S1543C43v52Ev
  virtual void  v53(); // _ZN7S1543C43v53Ev
  virtual void  v54(); // _ZN7S1543C43v54Ev
  virtual void  v55(); // _ZN7S1543C43v55Ev
  virtual void  v56(); // _ZN7S1543C43v56Ev
  virtual void  v57(); // _ZN7S1543C43v57Ev
  virtual void  v58(); // _ZN7S1543C43v58Ev
  virtual void  v59(); // _ZN7S1543C43v59Ev
  virtual void  v60(); // _ZN7S1543C43v60Ev
  virtual void  v61(); // _ZN7S1543C43v61Ev
  virtual void  v62(); // _ZN7S1543C43v62Ev
  virtual void  v63(); // _ZN7S1543C43v63Ev
  virtual void  v64(); // _ZN7S1543C43v64Ev
  virtual void  v65(); // _ZN7S1543C43v65Ev
  virtual void  v66(); // _ZN7S1543C43v66Ev
  virtual void  v67(); // _ZN7S1543C43v67Ev
  virtual void  v68(); // _ZN7S1543C43v68Ev
  virtual void  v69(); // _ZN7S1543C43v69Ev
  virtual void  v70(); // _ZN7S1543C43v70Ev
  S1543C4(); // tgen
};
//SIG(-1 S1543C4) 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]}


 S1543C4 ::~S1543C4(){ note_dtor("S1543C4", this);}
void  S1543C4 ::v7(){vfunc_called(this, "_ZN7S1543C42v7Ev");}
void  S1543C4 ::v8(){vfunc_called(this, "_ZN7S1543C42v8Ev");}
void  S1543C4 ::v9(){vfunc_called(this, "_ZN7S1543C42v9Ev");}
void  S1543C4 ::v10(){vfunc_called(this, "_ZN7S1543C43v10Ev");}
void  S1543C4 ::v11(){vfunc_called(this, "_ZN7S1543C43v11Ev");}
void  S1543C4 ::v12(){vfunc_called(this, "_ZN7S1543C43v12Ev");}
void  S1543C4 ::v13(){vfunc_called(this, "_ZN7S1543C43v13Ev");}
void  S1543C4 ::v14(){vfunc_called(this, "_ZN7S1543C43v14Ev");}
void  S1543C4 ::v15(){vfunc_called(this, "_ZN7S1543C43v15Ev");}
void  S1543C4 ::v16(){vfunc_called(this, "_ZN7S1543C43v16Ev");}
void  S1543C4 ::v17(){vfunc_called(this, "_ZN7S1543C43v17Ev");}
void  S1543C4 ::v18(){vfunc_called(this, "_ZN7S1543C43v18Ev");}
void  S1543C4 ::v19(){vfunc_called(this, "_ZN7S1543C43v19Ev");}
void  S1543C4 ::v20(){vfunc_called(this, "_ZN7S1543C43v20Ev");}
void  S1543C4 ::v21(){vfunc_called(this, "_ZN7S1543C43v21Ev");}
void  S1543C4 ::v22(){vfunc_called(this, "_ZN7S1543C43v22Ev");}
void  S1543C4 ::v23(){vfunc_called(this, "_ZN7S1543C43v23Ev");}
void  S1543C4 ::v24(){vfunc_called(this, "_ZN7S1543C43v24Ev");}
void  S1543C4 ::v25(){vfunc_called(this, "_ZN7S1543C43v25Ev");}
void  S1543C4 ::v26(){vfunc_called(this, "_ZN7S1543C43v26Ev");}
void  S1543C4 ::v27(){vfunc_called(this, "_ZN7S1543C43v27Ev");}
void  S1543C4 ::v28(){vfunc_called(this, "_ZN7S1543C43v28Ev");}
void  S1543C4 ::v29(){vfunc_called(this, "_ZN7S1543C43v29Ev");}
void  S1543C4 ::v30(){vfunc_called(this, "_ZN7S1543C43v30Ev");}
void  S1543C4 ::v31(){vfunc_called(this, "_ZN7S1543C43v31Ev");}
void  S1543C4 ::v32(){vfunc_called(this, "_ZN7S1543C43v32Ev");}
void  S1543C4 ::v33(){vfunc_called(this, "_ZN7S1543C43v33Ev");}
void  S1543C4 ::v34(){vfunc_called(this, "_ZN7S1543C43v34Ev");}
void  S1543C4 ::v35(){vfunc_called(this, "_ZN7S1543C43v35Ev");}
void  S1543C4 ::v36(){vfunc_called(this, "_ZN7S1543C43v36Ev");}
void  S1543C4 ::v37(){vfunc_called(this, "_ZN7S1543C43v37Ev");}
void  S1543C4 ::v38(){vfunc_called(this, "_ZN7S1543C43v38Ev");}
void  S1543C4 ::v39(){vfunc_called(this, "_ZN7S1543C43v39Ev");}
void  S1543C4 ::v40(){vfunc_called(this, "_ZN7S1543C43v40Ev");}
void  S1543C4 ::v41(){vfunc_called(this, "_ZN7S1543C43v41Ev");}
void  S1543C4 ::v42(){vfunc_called(this, "_ZN7S1543C43v42Ev");}
void  S1543C4 ::v43(){vfunc_called(this, "_ZN7S1543C43v43Ev");}
void  S1543C4 ::v44(){vfunc_called(this, "_ZN7S1543C43v44Ev");}
void  S1543C4 ::v45(){vfunc_called(this, "_ZN7S1543C43v45Ev");}
void  S1543C4 ::v46(){vfunc_called(this, "_ZN7S1543C43v46Ev");}
void  S1543C4 ::v47(){vfunc_called(this, "_ZN7S1543C43v47Ev");}
void  S1543C4 ::v48(){vfunc_called(this, "_ZN7S1543C43v48Ev");}
void  S1543C4 ::v49(){vfunc_called(this, "_ZN7S1543C43v49Ev");}
void  S1543C4 ::v50(){vfunc_called(this, "_ZN7S1543C43v50Ev");}
void  S1543C4 ::v51(){vfunc_called(this, "_ZN7S1543C43v51Ev");}
void  S1543C4 ::v52(){vfunc_called(this, "_ZN7S1543C43v52Ev");}
void  S1543C4 ::v53(){vfunc_called(this, "_ZN7S1543C43v53Ev");}
void  S1543C4 ::v54(){vfunc_called(this, "_ZN7S1543C43v54Ev");}
void  S1543C4 ::v55(){vfunc_called(this, "_ZN7S1543C43v55Ev");}
void  S1543C4 ::v56(){vfunc_called(this, "_ZN7S1543C43v56Ev");}
void  S1543C4 ::v57(){vfunc_called(this, "_ZN7S1543C43v57Ev");}
void  S1543C4 ::v58(){vfunc_called(this, "_ZN7S1543C43v58Ev");}
void  S1543C4 ::v59(){vfunc_called(this, "_ZN7S1543C43v59Ev");}
void  S1543C4 ::v60(){vfunc_called(this, "_ZN7S1543C43v60Ev");}
void  S1543C4 ::v61(){vfunc_called(this, "_ZN7S1543C43v61Ev");}
void  S1543C4 ::v62(){vfunc_called(this, "_ZN7S1543C43v62Ev");}
void  S1543C4 ::v63(){vfunc_called(this, "_ZN7S1543C43v63Ev");}
void  S1543C4 ::v64(){vfunc_called(this, "_ZN7S1543C43v64Ev");}
void  S1543C4 ::v65(){vfunc_called(this, "_ZN7S1543C43v65Ev");}
void  S1543C4 ::v66(){vfunc_called(this, "_ZN7S1543C43v66Ev");}
void  S1543C4 ::v67(){vfunc_called(this, "_ZN7S1543C43v67Ev");}
void  S1543C4 ::v68(){vfunc_called(this, "_ZN7S1543C43v68Ev");}
void  S1543C4 ::v69(){vfunc_called(this, "_ZN7S1543C43v69Ev");}
void  S1543C4 ::v70(){vfunc_called(this, "_ZN7S1543C43v70Ev");}
S1543C4 ::S1543C4(){ note_ctor("S1543C4", this);} // tgen

static void Test_S1543C4()
{
  extern Class_Descriptor cd_S1543C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1543C4, buf);
    S1543C4 *dp, &lv = *(dp=new (buf) S1543C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1543C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1543C4)");
    check_field_offset(lv, s1543c4f0, ABISELECT(8,4), "S1543C4.s1543c4f0");
    check_field_offset(lv, s1543c4f1, ABISELECT(16,8), "S1543C4.s1543c4f1");
    check_field_offset(lv, s1543c4f2, ABISELECT(24,16), "S1543C4.s1543c4f2");
    check_field_offset(lv, s1543c4f3, ABISELECT(56,32), "S1543C4.s1543c4f3");
    check_field_offset(lv, s1543c4f4, ABISELECT(64,40), "S1543C4.s1543c4f4");
    check_field_offset(lv, s1543c4f5, ABISELECT(72,44), "S1543C4.s1543c4f5");
    check_field_offset(lv, s1543c4f6, ABISELECT(80,52), "S1543C4.s1543c4f6");
    test_class_info(&lv, &cd_S1543C4);
    dp->~S1543C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1543C4(Test_S1543C4, "S1543C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1543C4C1Ev();
extern void _ZN7S1543C4D1Ev();
Name_Map name_map_S1543C4[] = {
  NSPAIR(_ZN7S1543C4C1Ev),
  NSPAIR(_ZN7S1543C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1543C4[];
extern void _ZN7S1543C4D1Ev();
extern void _ZN7S1543C4D0Ev();
extern void _ZN7S1543C42v7Ev();
extern void _ZN7S1543C42v8Ev();
extern void _ZN7S1543C42v9Ev();
extern void _ZN7S1543C43v10Ev();
extern void _ZN7S1543C43v11Ev();
extern void _ZN7S1543C43v12Ev();
extern void _ZN7S1543C43v13Ev();
extern void _ZN7S1543C43v14Ev();
extern void _ZN7S1543C43v15Ev();
extern void _ZN7S1543C43v16Ev();
extern void _ZN7S1543C43v17Ev();
extern void _ZN7S1543C43v18Ev();
extern void _ZN7S1543C43v19Ev();
extern void _ZN7S1543C43v20Ev();
extern void _ZN7S1543C43v21Ev();
extern void _ZN7S1543C43v22Ev();
extern void _ZN7S1543C43v23Ev();
extern void _ZN7S1543C43v24Ev();
extern void _ZN7S1543C43v25Ev();
extern void _ZN7S1543C43v26Ev();
extern void _ZN7S1543C43v27Ev();
extern void _ZN7S1543C43v28Ev();
extern void _ZN7S1543C43v29Ev();
extern void _ZN7S1543C43v30Ev();
extern void _ZN7S1543C43v31Ev();
extern void _ZN7S1543C43v32Ev();
extern void _ZN7S1543C43v33Ev();
extern void _ZN7S1543C43v34Ev();
extern void _ZN7S1543C43v35Ev();
extern void _ZN7S1543C43v36Ev();
extern void _ZN7S1543C43v37Ev();
extern void _ZN7S1543C43v38Ev();
extern void _ZN7S1543C43v39Ev();
extern void _ZN7S1543C43v40Ev();
extern void _ZN7S1543C43v41Ev();
extern void _ZN7S1543C43v42Ev();
extern void _ZN7S1543C43v43Ev();
extern void _ZN7S1543C43v44Ev();
extern void _ZN7S1543C43v45Ev();
extern void _ZN7S1543C43v46Ev();
extern void _ZN7S1543C43v47Ev();
extern void _ZN7S1543C43v48Ev();
extern void _ZN7S1543C43v49Ev();
extern void _ZN7S1543C43v50Ev();
extern void _ZN7S1543C43v51Ev();
extern void _ZN7S1543C43v52Ev();
extern void _ZN7S1543C43v53Ev();
extern void _ZN7S1543C43v54Ev();
extern void _ZN7S1543C43v55Ev();
extern void _ZN7S1543C43v56Ev();
extern void _ZN7S1543C43v57Ev();
extern void _ZN7S1543C43v58Ev();
extern void _ZN7S1543C43v59Ev();
extern void _ZN7S1543C43v60Ev();
extern void _ZN7S1543C43v61Ev();
extern void _ZN7S1543C43v62Ev();
extern void _ZN7S1543C43v63Ev();
extern void _ZN7S1543C43v64Ev();
extern void _ZN7S1543C43v65Ev();
extern void _ZN7S1543C43v66Ev();
extern void _ZN7S1543C43v67Ev();
extern void _ZN7S1543C43v68Ev();
extern void _ZN7S1543C43v69Ev();
extern void _ZN7S1543C43v70Ev();
static  VTBL_ENTRY vtc_S1543C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1543C4[0]),
  (VTBL_ENTRY)&_ZN7S1543C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1543C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1543C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1543C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1543C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v70Ev,
};
extern VTBL_ENTRY _ZTI7S1543C4[];
extern  VTBL_ENTRY _ZTV7S1543C4[];
Class_Descriptor cd_S1543C4 = {  "S1543C4", // class name
  0,0,//no base classes
  &(vtc_S1543C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1543C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1543C4),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  S1543C3  : S1543C4 {
  void *s1543c3f0;
  ::S1542C26 s1543c3f1;
  ::S615C17_nt s1543c3f2;
  ::S1542C22_nt s1543c3f3;
  ::S615C12_nt s1543c3f4;
  int s1543c3f5;
  unsigned int s1543c3f6:1;
  unsigned int s1543c3f7:1;
  unsigned int s1543c3f8:1;
  unsigned int s1543c3f9:1;
  int s1543c3f10[11];
  virtual  ~S1543C3(); // _ZN7S1543C3D1Ev
  virtual void  v71(); // _ZN7S1543C33v71Ev
  virtual void  v72(); // _ZN7S1543C33v72Ev
  virtual void  v73(); // _ZN7S1543C33v73Ev
  virtual void  v74(); // _ZN7S1543C33v74Ev
  virtual void  v75(); // _ZN7S1543C33v75Ev
  virtual void  v76(); // _ZN7S1543C33v76Ev
  virtual void  v77(); // _ZN7S1543C33v77Ev
  virtual void  v78(); // _ZN7S1543C33v78Ev
  virtual void  v79(); // _ZN7S1543C33v79Ev
  virtual void  v80(); // _ZN7S1543C33v80Ev
  virtual void  v81(); // _ZN7S1543C33v81Ev
  virtual void  v82(); // _ZN7S1543C33v82Ev
  virtual void  v83(); // _ZN7S1543C33v83Ev
  virtual void  v84(); // _ZN7S1543C33v84Ev
  virtual void  v85(); // _ZN7S1543C33v85Ev
  virtual void  v86(); // _ZN7S1543C33v86Ev
  virtual void  v87(); // _ZN7S1543C33v87Ev
  virtual void  v88(); // _ZN7S1543C33v88Ev
  virtual void  v89(); // _ZN7S1543C33v89Ev
  virtual void  v90(); // _ZN7S1543C33v90Ev
  virtual void  v91(); // _ZN7S1543C33v91Ev
  virtual void  v92(); // _ZN7S1543C33v92Ev
  virtual void  v93(); // _ZN7S1543C33v93Ev
  virtual void  v94(); // _ZN7S1543C33v94Ev
  virtual void  v95(); // _ZN7S1543C33v95Ev
  virtual void  v96(); // _ZN7S1543C33v96Ev
  virtual void  v97(); // _ZN7S1543C33v97Ev
  S1543C3(); // tgen
};
//SIG(-1 S1543C3) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S1543C3 ::~S1543C3(){ note_dtor("S1543C3", this);}
void  S1543C3 ::v71(){vfunc_called(this, "_ZN7S1543C33v71Ev");}
void  S1543C3 ::v72(){vfunc_called(this, "_ZN7S1543C33v72Ev");}
void  S1543C3 ::v73(){vfunc_called(this, "_ZN7S1543C33v73Ev");}
void  S1543C3 ::v74(){vfunc_called(this, "_ZN7S1543C33v74Ev");}
void  S1543C3 ::v75(){vfunc_called(this, "_ZN7S1543C33v75Ev");}
void  S1543C3 ::v76(){vfunc_called(this, "_ZN7S1543C33v76Ev");}
void  S1543C3 ::v77(){vfunc_called(this, "_ZN7S1543C33v77Ev");}
void  S1543C3 ::v78(){vfunc_called(this, "_ZN7S1543C33v78Ev");}
void  S1543C3 ::v79(){vfunc_called(this, "_ZN7S1543C33v79Ev");}
void  S1543C3 ::v80(){vfunc_called(this, "_ZN7S1543C33v80Ev");}
void  S1543C3 ::v81(){vfunc_called(this, "_ZN7S1543C33v81Ev");}
void  S1543C3 ::v82(){vfunc_called(this, "_ZN7S1543C33v82Ev");}
void  S1543C3 ::v83(){vfunc_called(this, "_ZN7S1543C33v83Ev");}
void  S1543C3 ::v84(){vfunc_called(this, "_ZN7S1543C33v84Ev");}
void  S1543C3 ::v85(){vfunc_called(this, "_ZN7S1543C33v85Ev");}
void  S1543C3 ::v86(){vfunc_called(this, "_ZN7S1543C33v86Ev");}
void  S1543C3 ::v87(){vfunc_called(this, "_ZN7S1543C33v87Ev");}
void  S1543C3 ::v88(){vfunc_called(this, "_ZN7S1543C33v88Ev");}
void  S1543C3 ::v89(){vfunc_called(this, "_ZN7S1543C33v89Ev");}
void  S1543C3 ::v90(){vfunc_called(this, "_ZN7S1543C33v90Ev");}
void  S1543C3 ::v91(){vfunc_called(this, "_ZN7S1543C33v91Ev");}
void  S1543C3 ::v92(){vfunc_called(this, "_ZN7S1543C33v92Ev");}
void  S1543C3 ::v93(){vfunc_called(this, "_ZN7S1543C33v93Ev");}
void  S1543C3 ::v94(){vfunc_called(this, "_ZN7S1543C33v94Ev");}
void  S1543C3 ::v95(){vfunc_called(this, "_ZN7S1543C33v95Ev");}
void  S1543C3 ::v96(){vfunc_called(this, "_ZN7S1543C33v96Ev");}
void  S1543C3 ::v97(){vfunc_called(this, "_ZN7S1543C33v97Ev");}
S1543C3 ::S1543C3(){ note_ctor("S1543C3", this);} // tgen

static void Test_S1543C3()
{
  extern Class_Descriptor cd_S1543C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S1543C3, buf);
    S1543C3 *dp, &lv = *(dp=new (buf) S1543C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S1543C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1543C3)");
    check_base_class_offset(lv, (S1543C4*), 0, "S1543C3");
    check_field_offset(lv, s1543c3f0, ABISELECT(96,60), "S1543C3.s1543c3f0");
    check_field_offset(lv, s1543c3f1, ABISELECT(104,64), "S1543C3.s1543c3f1");
    check_field_offset(lv, s1543c3f2, ABISELECT(120,76), "S1543C3.s1543c3f2");
    check_field_offset(lv, s1543c3f3, ABISELECT(128,84), "S1543C3.s1543c3f3");
    check_field_offset(lv, s1543c3f4, ABISELECT(144,96), "S1543C3.s1543c3f4");
    check_field_offset(lv, s1543c3f5, ABISELECT(176,128), "S1543C3.s1543c3f5");
    set_bf_and_test(lv, s1543c3f6, ABISELECT(180,132), 0, 1, 1, "S1543C3");
    set_bf_and_test(lv, s1543c3f7, ABISELECT(180,132), 1, 1, 1, "S1543C3");
    set_bf_and_test(lv, s1543c3f8, ABISELECT(180,132), 2, 1, 1, "S1543C3");
    set_bf_and_test(lv, s1543c3f9, ABISELECT(180,132), 3, 1, 1, "S1543C3");
    check_field_offset(lv, s1543c3f10, ABISELECT(184,136), "S1543C3.s1543c3f10");
    test_class_info(&lv, &cd_S1543C3);
    dp->~S1543C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1543C3(Test_S1543C3, "S1543C3", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN7S1543C3C1Ev();
extern void _ZN7S1543C3D1Ev();
Name_Map name_map_S1543C3[] = {
  NSPAIR(_ZN7S1543C3C1Ev),
  NSPAIR(_ZN7S1543C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1543C4;
extern VTBL_ENTRY _ZTI7S1543C4[];
extern  VTBL_ENTRY _ZTV7S1543C4[];
static Base_Class bases_S1543C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1543C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1543C3[];
extern void _ZN7S1543C3D1Ev();
extern void _ZN7S1543C3D0Ev();
extern void _ZN7S1543C42v7Ev();
extern void _ZN7S1543C42v8Ev();
extern void _ZN7S1543C42v9Ev();
extern void _ZN7S1543C43v10Ev();
extern void _ZN7S1543C43v11Ev();
extern void _ZN7S1543C43v12Ev();
extern void _ZN7S1543C43v13Ev();
extern void _ZN7S1543C43v14Ev();
extern void _ZN7S1543C43v15Ev();
extern void _ZN7S1543C43v16Ev();
extern void _ZN7S1543C43v17Ev();
extern void _ZN7S1543C43v18Ev();
extern void _ZN7S1543C43v19Ev();
extern void _ZN7S1543C43v20Ev();
extern void _ZN7S1543C43v21Ev();
extern void _ZN7S1543C43v22Ev();
extern void _ZN7S1543C43v23Ev();
extern void _ZN7S1543C43v24Ev();
extern void _ZN7S1543C43v25Ev();
extern void _ZN7S1543C43v26Ev();
extern void _ZN7S1543C43v27Ev();
extern void _ZN7S1543C43v28Ev();
extern void _ZN7S1543C43v29Ev();
extern void _ZN7S1543C43v30Ev();
extern void _ZN7S1543C43v31Ev();
extern void _ZN7S1543C43v32Ev();
extern void _ZN7S1543C43v33Ev();
extern void _ZN7S1543C43v34Ev();
extern void _ZN7S1543C43v35Ev();
extern void _ZN7S1543C43v36Ev();
extern void _ZN7S1543C43v37Ev();
extern void _ZN7S1543C43v38Ev();
extern void _ZN7S1543C43v39Ev();
extern void _ZN7S1543C43v40Ev();
extern void _ZN7S1543C43v41Ev();
extern void _ZN7S1543C43v42Ev();
extern void _ZN7S1543C43v43Ev();
extern void _ZN7S1543C43v44Ev();
extern void _ZN7S1543C43v45Ev();
extern void _ZN7S1543C43v46Ev();
extern void _ZN7S1543C43v47Ev();
extern void _ZN7S1543C43v48Ev();
extern void _ZN7S1543C43v49Ev();
extern void _ZN7S1543C43v50Ev();
extern void _ZN7S1543C43v51Ev();
extern void _ZN7S1543C43v52Ev();
extern void _ZN7S1543C43v53Ev();
extern void _ZN7S1543C43v54Ev();
extern void _ZN7S1543C43v55Ev();
extern void _ZN7S1543C43v56Ev();
extern void _ZN7S1543C43v57Ev();
extern void _ZN7S1543C43v58Ev();
extern void _ZN7S1543C43v59Ev();
extern void _ZN7S1543C43v60Ev();
extern void _ZN7S1543C43v61Ev();
extern void _ZN7S1543C43v62Ev();
extern void _ZN7S1543C43v63Ev();
extern void _ZN7S1543C43v64Ev();
extern void _ZN7S1543C43v65Ev();
extern void _ZN7S1543C43v66Ev();
extern void _ZN7S1543C43v67Ev();
extern void _ZN7S1543C43v68Ev();
extern void _ZN7S1543C43v69Ev();
extern void _ZN7S1543C43v70Ev();
extern void _ZN7S1543C33v71Ev();
extern void _ZN7S1543C33v72Ev();
extern void _ZN7S1543C33v73Ev();
extern void _ZN7S1543C33v74Ev();
extern void _ZN7S1543C33v75Ev();
extern void _ZN7S1543C33v76Ev();
extern void _ZN7S1543C33v77Ev();
extern void _ZN7S1543C33v78Ev();
extern void _ZN7S1543C33v79Ev();
extern void _ZN7S1543C33v80Ev();
extern void _ZN7S1543C33v81Ev();
extern void _ZN7S1543C33v82Ev();
extern void _ZN7S1543C33v83Ev();
extern void _ZN7S1543C33v84Ev();
extern void _ZN7S1543C33v85Ev();
extern void _ZN7S1543C33v86Ev();
extern void _ZN7S1543C33v87Ev();
extern void _ZN7S1543C33v88Ev();
extern void _ZN7S1543C33v89Ev();
extern void _ZN7S1543C33v90Ev();
extern void _ZN7S1543C33v91Ev();
extern void _ZN7S1543C33v92Ev();
extern void _ZN7S1543C33v93Ev();
extern void _ZN7S1543C33v94Ev();
extern void _ZN7S1543C33v95Ev();
extern void _ZN7S1543C33v96Ev();
extern void _ZN7S1543C33v97Ev();
static  VTBL_ENTRY vtc_S1543C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1543C3[0]),
  (VTBL_ENTRY)&_ZN7S1543C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1543C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1543C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1543C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1543C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v97Ev,
};
extern VTBL_ENTRY _ZTI7S1543C3[];
extern  VTBL_ENTRY _ZTV7S1543C3[];
Class_Descriptor cd_S1543C3 = {  "S1543C3", // class name
  bases_S1543C3, 1,
  &(vtc_S1543C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI7S1543C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1543C3),95, //virtual function table var
  2, // 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  S1543C2  : S1543C3 {
  ::S615C22_nt s1543c2f0;
  unsigned int s1543c2f1:1;
  virtual  ~S1543C2(); // _ZN7S1543C2D1Ev
  virtual void  v98(); // _ZN7S1543C23v98Ev
  virtual void  v99(); // _ZN7S1543C23v99Ev
  virtual void  v100(); // _ZN7S1543C24v100Ev
  virtual void  v101(); // _ZN7S1543C24v101Ev
  virtual void  v102(); // _ZN7S1543C24v102Ev
  virtual void  v103(); // _ZN7S1543C24v103Ev
  virtual void  v104(); // _ZN7S1543C24v104Ev
  virtual void  v105(); // _ZN7S1543C24v105Ev
  virtual void  v106(); // _ZN7S1543C24v106Ev
  virtual void  v107(); // _ZN7S1543C24v107Ev
  virtual void  v108(); // _ZN7S1543C24v108Ev
  virtual void  v109(); // _ZN7S1543C24v109Ev
  virtual void  v110(); // _ZN7S1543C24v110Ev
  virtual void  v111(); // _ZN7S1543C24v111Ev
  virtual void  v112(); // _ZN7S1543C24v112Ev
  virtual void  v113(); // _ZN7S1543C24v113Ev
  virtual void  v114(); // _ZN7S1543C24v114Ev
  virtual void  v115(); // _ZN7S1543C24v115Ev
  S1543C2(); // tgen
};
//SIG(-1 S1543C2) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S1543C2 ::~S1543C2(){ note_dtor("S1543C2", this);}
void  S1543C2 ::v98(){vfunc_called(this, "_ZN7S1543C23v98Ev");}
void  S1543C2 ::v99(){vfunc_called(this, "_ZN7S1543C23v99Ev");}
void  S1543C2 ::v100(){vfunc_called(this, "_ZN7S1543C24v100Ev");}
void  S1543C2 ::v101(){vfunc_called(this, "_ZN7S1543C24v101Ev");}
void  S1543C2 ::v102(){vfunc_called(this, "_ZN7S1543C24v102Ev");}
void  S1543C2 ::v103(){vfunc_called(this, "_ZN7S1543C24v103Ev");}
void  S1543C2 ::v104(){vfunc_called(this, "_ZN7S1543C24v104Ev");}
void  S1543C2 ::v105(){vfunc_called(this, "_ZN7S1543C24v105Ev");}
void  S1543C2 ::v106(){vfunc_called(this, "_ZN7S1543C24v106Ev");}
void  S1543C2 ::v107(){vfunc_called(this, "_ZN7S1543C24v107Ev");}
void  S1543C2 ::v108(){vfunc_called(this, "_ZN7S1543C24v108Ev");}
void  S1543C2 ::v109(){vfunc_called(this, "_ZN7S1543C24v109Ev");}
void  S1543C2 ::v110(){vfunc_called(this, "_ZN7S1543C24v110Ev");}
void  S1543C2 ::v111(){vfunc_called(this, "_ZN7S1543C24v111Ev");}
void  S1543C2 ::v112(){vfunc_called(this, "_ZN7S1543C24v112Ev");}
void  S1543C2 ::v113(){vfunc_called(this, "_ZN7S1543C24v113Ev");}
void  S1543C2 ::v114(){vfunc_called(this, "_ZN7S1543C24v114Ev");}
void  S1543C2 ::v115(){vfunc_called(this, "_ZN7S1543C24v115Ev");}
S1543C2 ::S1543C2(){ note_ctor("S1543C2", this);} // tgen

static void Test_S1543C2()
{
  extern Class_Descriptor cd_S1543C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1543C2, buf);
    S1543C2 *dp, &lv = *(dp=new (buf) S1543C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1543C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1543C2)");
    check_base_class_offset(lv, (S1543C4*)(S1543C3*), 0, "S1543C2");
    check_base_class_offset(lv, (S1543C3*), 0, "S1543C2");
    check_field_offset(lv, s1543c2f0, ABISELECT(232,180), "S1543C2.s1543c2f0");
    set_bf_and_test(lv, s1543c2f1, ABISELECT(248,192), 0, 1, 1, "S1543C2");
    test_class_info(&lv, &cd_S1543C2);
    dp->~S1543C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1543C2(Test_S1543C2, "S1543C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1543C2C1Ev();
extern void _ZN7S1543C2D1Ev();
Name_Map name_map_S1543C2[] = {
  NSPAIR(_ZN7S1543C2C1Ev),
  NSPAIR(_ZN7S1543C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1543C4;
extern VTBL_ENTRY _ZTI7S1543C4[];
extern  VTBL_ENTRY _ZTV7S1543C4[];
extern Class_Descriptor cd_S1543C3;
extern VTBL_ENTRY _ZTI7S1543C3[];
extern  VTBL_ENTRY _ZTV7S1543C3[];
static Base_Class bases_S1543C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1543C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1543C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1543C2[];
extern void _ZN7S1543C2D1Ev();
extern void _ZN7S1543C2D0Ev();
extern void _ZN7S1543C42v7Ev();
extern void _ZN7S1543C42v8Ev();
extern void _ZN7S1543C42v9Ev();
extern void _ZN7S1543C43v10Ev();
extern void _ZN7S1543C43v11Ev();
extern void _ZN7S1543C43v12Ev();
extern void _ZN7S1543C43v13Ev();
extern void _ZN7S1543C43v14Ev();
extern void _ZN7S1543C43v15Ev();
extern void _ZN7S1543C43v16Ev();
extern void _ZN7S1543C43v17Ev();
extern void _ZN7S1543C43v18Ev();
extern void _ZN7S1543C43v19Ev();
extern void _ZN7S1543C43v20Ev();
extern void _ZN7S1543C43v21Ev();
extern void _ZN7S1543C43v22Ev();
extern void _ZN7S1543C43v23Ev();
extern void _ZN7S1543C43v24Ev();
extern void _ZN7S1543C43v25Ev();
extern void _ZN7S1543C43v26Ev();
extern void _ZN7S1543C43v27Ev();
extern void _ZN7S1543C43v28Ev();
extern void _ZN7S1543C43v29Ev();
extern void _ZN7S1543C43v30Ev();
extern void _ZN7S1543C43v31Ev();
extern void _ZN7S1543C43v32Ev();
extern void _ZN7S1543C43v33Ev();
extern void _ZN7S1543C43v34Ev();
extern void _ZN7S1543C43v35Ev();
extern void _ZN7S1543C43v36Ev();
extern void _ZN7S1543C43v37Ev();
extern void _ZN7S1543C43v38Ev();
extern void _ZN7S1543C43v39Ev();
extern void _ZN7S1543C43v40Ev();
extern void _ZN7S1543C43v41Ev();
extern void _ZN7S1543C43v42Ev();
extern void _ZN7S1543C43v43Ev();
extern void _ZN7S1543C43v44Ev();
extern void _ZN7S1543C43v45Ev();
extern void _ZN7S1543C43v46Ev();
extern void _ZN7S1543C43v47Ev();
extern void _ZN7S1543C43v48Ev();
extern void _ZN7S1543C43v49Ev();
extern void _ZN7S1543C43v50Ev();
extern void _ZN7S1543C43v51Ev();
extern void _ZN7S1543C43v52Ev();
extern void _ZN7S1543C43v53Ev();
extern void _ZN7S1543C43v54Ev();
extern void _ZN7S1543C43v55Ev();
extern void _ZN7S1543C43v56Ev();
extern void _ZN7S1543C43v57Ev();
extern void _ZN7S1543C43v58Ev();
extern void _ZN7S1543C43v59Ev();
extern void _ZN7S1543C43v60Ev();
extern void _ZN7S1543C43v61Ev();
extern void _ZN7S1543C43v62Ev();
extern void _ZN7S1543C43v63Ev();
extern void _ZN7S1543C43v64Ev();
extern void _ZN7S1543C43v65Ev();
extern void _ZN7S1543C43v66Ev();
extern void _ZN7S1543C43v67Ev();
extern void _ZN7S1543C43v68Ev();
extern void _ZN7S1543C43v69Ev();
extern void _ZN7S1543C43v70Ev();
extern void _ZN7S1543C33v71Ev();
extern void _ZN7S1543C33v72Ev();
extern void _ZN7S1543C33v73Ev();
extern void _ZN7S1543C33v74Ev();
extern void _ZN7S1543C33v75Ev();
extern void _ZN7S1543C33v76Ev();
extern void _ZN7S1543C33v77Ev();
extern void _ZN7S1543C33v78Ev();
extern void _ZN7S1543C33v79Ev();
extern void _ZN7S1543C33v80Ev();
extern void _ZN7S1543C33v81Ev();
extern void _ZN7S1543C33v82Ev();
extern void _ZN7S1543C33v83Ev();
extern void _ZN7S1543C33v84Ev();
extern void _ZN7S1543C33v85Ev();
extern void _ZN7S1543C33v86Ev();
extern void _ZN7S1543C33v87Ev();
extern void _ZN7S1543C33v88Ev();
extern void _ZN7S1543C33v89Ev();
extern void _ZN7S1543C33v90Ev();
extern void _ZN7S1543C33v91Ev();
extern void _ZN7S1543C33v92Ev();
extern void _ZN7S1543C33v93Ev();
extern void _ZN7S1543C33v94Ev();
extern void _ZN7S1543C33v95Ev();
extern void _ZN7S1543C33v96Ev();
extern void _ZN7S1543C33v97Ev();
extern void _ZN7S1543C23v98Ev();
extern void _ZN7S1543C23v99Ev();
extern void _ZN7S1543C24v100Ev();
extern void _ZN7S1543C24v101Ev();
extern void _ZN7S1543C24v102Ev();
extern void _ZN7S1543C24v103Ev();
extern void _ZN7S1543C24v104Ev();
extern void _ZN7S1543C24v105Ev();
extern void _ZN7S1543C24v106Ev();
extern void _ZN7S1543C24v107Ev();
extern void _ZN7S1543C24v108Ev();
extern void _ZN7S1543C24v109Ev();
extern void _ZN7S1543C24v110Ev();
extern void _ZN7S1543C24v111Ev();
extern void _ZN7S1543C24v112Ev();
extern void _ZN7S1543C24v113Ev();
extern void _ZN7S1543C24v114Ev();
extern void _ZN7S1543C24v115Ev();
static  VTBL_ENTRY vtc_S1543C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1543C2[0]),
  (VTBL_ENTRY)&_ZN7S1543C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1543C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1543C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1543C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1543C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1543C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1543C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v113Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v114Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v115Ev,
};
extern VTBL_ENTRY _ZTI7S1543C2[];
extern  VTBL_ENTRY _ZTV7S1543C2[];
Class_Descriptor cd_S1543C2 = {  "S1543C2", // class name
  bases_S1543C2, 2,
  &(vtc_S1543C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1543C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1543C2),113, //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  S1543C1  : S1543C2 {
  void *s1543c1f0;
  ::S615C17_nt s1543c1f1;
  ::S165C27 s1543c1f2;
  ::S165C27 s1543c1f3;
  ::S165C27 s1543c1f4;
  ::S165C25 s1543c1f5;
  ::S165C20 s1543c1f6;
  ::S165C14 s1543c1f7;
  virtual  ~S1543C1(); // _ZN7S1543C1D1Ev
  virtual void  v1(); // _ZN7S1543C12v1Ev
  virtual void  v2(); // _ZN7S1543C12v2Ev
  virtual void  v3(); // _ZN7S1543C12v3Ev
  virtual void  v4(); // _ZN7S1543C12v4Ev
  virtual void  v5(); // _ZN7S1543C12v5Ev
  virtual void  v6(); // _ZN7S1543C12v6Ev
  S1543C1(); // tgen
};
//SIG(1 S1543C1) C1{ BC2{ BC3{ BC4{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 Fp FC5 FC16{ BC17{ BC8}} FC16 FC16 FC18{ BC19{ BC8}} FC20{ BC21{ BC8}} FC22{ BC23{ BC8}}}


 S1543C1 ::~S1543C1(){ note_dtor("S1543C1", this);}
void  S1543C1 ::v1(){vfunc_called(this, "_ZN7S1543C12v1Ev");}
void  S1543C1 ::v2(){vfunc_called(this, "_ZN7S1543C12v2Ev");}
void  S1543C1 ::v3(){vfunc_called(this, "_ZN7S1543C12v3Ev");}
void  S1543C1 ::v4(){vfunc_called(this, "_ZN7S1543C12v4Ev");}
void  S1543C1 ::v5(){vfunc_called(this, "_ZN7S1543C12v5Ev");}
void  S1543C1 ::v6(){vfunc_called(this, "_ZN7S1543C12v6Ev");}
S1543C1 ::S1543C1(){ note_ctor("S1543C1", this);} // tgen

static void Test_S1543C1()
{
  extern Class_Descriptor cd_S1543C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,71)];
    init_test(&cd_S1543C1, buf);
    S1543C1 *dp, &lv = *(dp=new (buf) S1543C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,280), "sizeof(S1543C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1543C1)");
    check_base_class_offset(lv, (S1543C4*)(S1543C3*)(S1543C2*), 0, "S1543C1");
    check_base_class_offset(lv, (S1543C3*)(S1543C2*), 0, "S1543C1");
    check_base_class_offset(lv, (S1543C2*), 0, "S1543C1");
    check_field_offset(lv, s1543c1f0, ABISELECT(256,196), "S1543C1.s1543c1f0");
    check_field_offset(lv, s1543c1f1, ABISELECT(264,200), "S1543C1.s1543c1f1");
    check_field_offset(lv, s1543c1f2, ABISELECT(272,208), "S1543C1.s1543c1f2");
    check_field_offset(lv, s1543c1f3, ABISELECT(288,220), "S1543C1.s1543c1f3");
    check_field_offset(lv, s1543c1f4, ABISELECT(304,232), "S1543C1.s1543c1f4");
    check_field_offset(lv, s1543c1f5, ABISELECT(320,244), "S1543C1.s1543c1f5");
    check_field_offset(lv, s1543c1f6, ABISELECT(336,256), "S1543C1.s1543c1f6");
    check_field_offset(lv, s1543c1f7, ABISELECT(352,268), "S1543C1.s1543c1f7");
    test_class_info(&lv, &cd_S1543C1);
    dp->~S1543C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1543C1(Test_S1543C1, "S1543C1", ABISELECT(368,280));

#else // __cplusplus

extern void _ZN7S1543C1C1Ev();
extern void _ZN7S1543C1D1Ev();
Name_Map name_map_S1543C1[] = {
  NSPAIR(_ZN7S1543C1C1Ev),
  NSPAIR(_ZN7S1543C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1543C4;
extern VTBL_ENTRY _ZTI7S1543C4[];
extern  VTBL_ENTRY _ZTV7S1543C4[];
extern Class_Descriptor cd_S1543C3;
extern VTBL_ENTRY _ZTI7S1543C3[];
extern  VTBL_ENTRY _ZTV7S1543C3[];
extern Class_Descriptor cd_S1543C2;
extern VTBL_ENTRY _ZTI7S1543C2[];
extern  VTBL_ENTRY _ZTV7S1543C2[];
static Base_Class bases_S1543C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1543C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1543C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1543C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1543C1[];
extern void _ZN7S1543C1D1Ev();
extern void _ZN7S1543C1D0Ev();
extern void _ZN7S1543C42v7Ev();
extern void _ZN7S1543C42v8Ev();
extern void _ZN7S1543C42v9Ev();
extern void _ZN7S1543C43v10Ev();
extern void _ZN7S1543C43v11Ev();
extern void _ZN7S1543C43v12Ev();
extern void _ZN7S1543C43v13Ev();
extern void _ZN7S1543C43v14Ev();
extern void _ZN7S1543C43v15Ev();
extern void _ZN7S1543C43v16Ev();
extern void _ZN7S1543C43v17Ev();
extern void _ZN7S1543C43v18Ev();
extern void _ZN7S1543C43v19Ev();
extern void _ZN7S1543C43v20Ev();
extern void _ZN7S1543C43v21Ev();
extern void _ZN7S1543C43v22Ev();
extern void _ZN7S1543C43v23Ev();
extern void _ZN7S1543C43v24Ev();
extern void _ZN7S1543C43v25Ev();
extern void _ZN7S1543C43v26Ev();
extern void _ZN7S1543C43v27Ev();
extern void _ZN7S1543C43v28Ev();
extern void _ZN7S1543C43v29Ev();
extern void _ZN7S1543C43v30Ev();
extern void _ZN7S1543C43v31Ev();
extern void _ZN7S1543C43v32Ev();
extern void _ZN7S1543C43v33Ev();
extern void _ZN7S1543C43v34Ev();
extern void _ZN7S1543C43v35Ev();
extern void _ZN7S1543C43v36Ev();
extern void _ZN7S1543C43v37Ev();
extern void _ZN7S1543C43v38Ev();
extern void _ZN7S1543C43v39Ev();
extern void _ZN7S1543C43v40Ev();
extern void _ZN7S1543C43v41Ev();
extern void _ZN7S1543C43v42Ev();
extern void _ZN7S1543C43v43Ev();
extern void _ZN7S1543C43v44Ev();
extern void _ZN7S1543C43v45Ev();
extern void _ZN7S1543C43v46Ev();
extern void _ZN7S1543C43v47Ev();
extern void _ZN7S1543C43v48Ev();
extern void _ZN7S1543C43v49Ev();
extern void _ZN7S1543C43v50Ev();
extern void _ZN7S1543C43v51Ev();
extern void _ZN7S1543C43v52Ev();
extern void _ZN7S1543C43v53Ev();
extern void _ZN7S1543C43v54Ev();
extern void _ZN7S1543C43v55Ev();
extern void _ZN7S1543C43v56Ev();
extern void _ZN7S1543C43v57Ev();
extern void _ZN7S1543C43v58Ev();
extern void _ZN7S1543C43v59Ev();
extern void _ZN7S1543C43v60Ev();
extern void _ZN7S1543C43v61Ev();
extern void _ZN7S1543C43v62Ev();
extern void _ZN7S1543C43v63Ev();
extern void _ZN7S1543C43v64Ev();
extern void _ZN7S1543C43v65Ev();
extern void _ZN7S1543C43v66Ev();
extern void _ZN7S1543C43v67Ev();
extern void _ZN7S1543C43v68Ev();
extern void _ZN7S1543C43v69Ev();
extern void _ZN7S1543C43v70Ev();
extern void _ZN7S1543C33v71Ev();
extern void _ZN7S1543C33v72Ev();
extern void _ZN7S1543C33v73Ev();
extern void _ZN7S1543C33v74Ev();
extern void _ZN7S1543C33v75Ev();
extern void _ZN7S1543C33v76Ev();
extern void _ZN7S1543C33v77Ev();
extern void _ZN7S1543C33v78Ev();
extern void _ZN7S1543C33v79Ev();
extern void _ZN7S1543C33v80Ev();
extern void _ZN7S1543C33v81Ev();
extern void _ZN7S1543C33v82Ev();
extern void _ZN7S1543C33v83Ev();
extern void _ZN7S1543C33v84Ev();
extern void _ZN7S1543C33v85Ev();
extern void _ZN7S1543C33v86Ev();
extern void _ZN7S1543C33v87Ev();
extern void _ZN7S1543C33v88Ev();
extern void _ZN7S1543C33v89Ev();
extern void _ZN7S1543C33v90Ev();
extern void _ZN7S1543C33v91Ev();
extern void _ZN7S1543C33v92Ev();
extern void _ZN7S1543C33v93Ev();
extern void _ZN7S1543C33v94Ev();
extern void _ZN7S1543C33v95Ev();
extern void _ZN7S1543C33v96Ev();
extern void _ZN7S1543C33v97Ev();
extern void _ZN7S1543C23v98Ev();
extern void _ZN7S1543C23v99Ev();
extern void _ZN7S1543C24v100Ev();
extern void _ZN7S1543C24v101Ev();
extern void _ZN7S1543C24v102Ev();
extern void _ZN7S1543C24v103Ev();
extern void _ZN7S1543C24v104Ev();
extern void _ZN7S1543C24v105Ev();
extern void _ZN7S1543C24v106Ev();
extern void _ZN7S1543C24v107Ev();
extern void _ZN7S1543C24v108Ev();
extern void _ZN7S1543C24v109Ev();
extern void _ZN7S1543C24v110Ev();
extern void _ZN7S1543C24v111Ev();
extern void _ZN7S1543C24v112Ev();
extern void _ZN7S1543C24v113Ev();
extern void _ZN7S1543C24v114Ev();
extern void _ZN7S1543C24v115Ev();
extern void _ZN7S1543C12v1Ev();
extern void _ZN7S1543C12v2Ev();
extern void _ZN7S1543C12v3Ev();
extern void _ZN7S1543C12v4Ev();
extern void _ZN7S1543C12v5Ev();
extern void _ZN7S1543C12v6Ev();
static  VTBL_ENTRY vtc_S1543C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1543C1[0]),
  (VTBL_ENTRY)&_ZN7S1543C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1543C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1543C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1543C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1543C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1543C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1543C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1543C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1543C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v113Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v114Ev,
  (VTBL_ENTRY)&_ZN7S1543C24v115Ev,
  (VTBL_ENTRY)&_ZN7S1543C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1543C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1543C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1543C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1543C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1543C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1543C1[];
extern  VTBL_ENTRY _ZTV7S1543C1[];
Class_Descriptor cd_S1543C1 = {  "S1543C1", // class name
  bases_S1543C1, 3,
  &(vtc_S1543C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,280), // object size
  NSPAIRA(_ZTI7S1543C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1543C1),119, //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  S564C5  {
  int s564c5f0;
  __tsi64 s564c5f1;
  void *s564c5f2[4];
  int s564c5f3[2];
  void *s564c5f4;
  ::S615C17_nt s564c5f5;
  void *s564c5f6[2];
  virtual  ~S564C5(); // _ZN6S564C5D1Ev
  virtual void  v4(); // _ZN6S564C52v4Ev
  virtual void  v5(); // _ZN6S564C52v5Ev
  virtual void  v6(); // _ZN6S564C52v6Ev
  virtual void  v7(); // _ZN6S564C52v7Ev
  virtual void  v8(); // _ZN6S564C52v8Ev
  virtual void  v9(); // _ZN6S564C52v9Ev
  virtual void  v10(); // _ZN6S564C53v10Ev
  virtual void  v11(); // _ZN6S564C53v11Ev
  virtual void  v12(); // _ZN6S564C53v12Ev
  virtual void  v13(); // _ZN6S564C53v13Ev
  virtual void  v14(); // _ZN6S564C53v14Ev
  virtual void  v15(); // _ZN6S564C53v15Ev
  virtual void  v16(); // _ZN6S564C53v16Ev
  virtual void  v17(); // _ZN6S564C53v17Ev
  virtual void  v18(); // _ZN6S564C53v18Ev
  virtual void  v19(); // _ZN6S564C53v19Ev
  virtual void  v20(); // _ZN6S564C53v20Ev
  virtual void  v21(); // _ZN6S564C53v21Ev
  virtual void  v22(); // _ZN6S564C53v22Ev
  virtual void  v23(); // _ZN6S564C53v23Ev
  virtual void  v24(); // _ZN6S564C53v24Ev
  virtual void  v25(); // _ZN6S564C53v25Ev
  virtual void  v26(); // _ZN6S564C53v26Ev
  virtual void  v27(); // _ZN6S564C53v27Ev
  virtual void  v28(); // _ZN6S564C53v28Ev
  virtual void  v29(); // _ZN6S564C53v29Ev
  virtual void  v30(); // _ZN6S564C53v30Ev
  virtual void  v31(); // _ZN6S564C53v31Ev
  virtual void  v32(); // _ZN6S564C53v32Ev
  virtual void  v33(); // _ZN6S564C53v33Ev
  virtual void  v34(); // _ZN6S564C53v34Ev
  virtual void  v35(); // _ZN6S564C53v35Ev
  virtual void  v36(); // _ZN6S564C53v36Ev
  virtual void  v37(); // _ZN6S564C53v37Ev
  virtual void  v38(); // _ZN6S564C53v38Ev
  virtual void  v39(); // _ZN6S564C53v39Ev
  virtual void  v40(); // _ZN6S564C53v40Ev
  virtual void  v41(); // _ZN6S564C53v41Ev
  virtual void  v42(); // _ZN6S564C53v42Ev
  virtual void  v43(); // _ZN6S564C53v43Ev
  virtual void  v44(); // _ZN6S564C53v44Ev
  virtual void  v45(); // _ZN6S564C53v45Ev
  virtual void  v46(); // _ZN6S564C53v46Ev
  virtual void  v47(); // _ZN6S564C53v47Ev
  virtual void  v48(); // _ZN6S564C53v48Ev
  virtual void  v49(); // _ZN6S564C53v49Ev
  virtual void  v50(); // _ZN6S564C53v50Ev
  virtual void  v51(); // _ZN6S564C53v51Ev
  virtual void  v52(); // _ZN6S564C53v52Ev
  virtual void  v53(); // _ZN6S564C53v53Ev
  virtual void  v54(); // _ZN6S564C53v54Ev
  virtual void  v55(); // _ZN6S564C53v55Ev
  virtual void  v56(); // _ZN6S564C53v56Ev
  virtual void  v57(); // _ZN6S564C53v57Ev
  virtual void  v58(); // _ZN6S564C53v58Ev
  virtual void  v59(); // _ZN6S564C53v59Ev
  virtual void  v60(); // _ZN6S564C53v60Ev
  virtual void  v61(); // _ZN6S564C53v61Ev
  virtual void  v62(); // _ZN6S564C53v62Ev
  virtual void  v63(); // _ZN6S564C53v63Ev
  virtual void  v64(); // _ZN6S564C53v64Ev
  virtual void  v65(); // _ZN6S564C53v65Ev
  virtual void  v66(); // _ZN6S564C53v66Ev
  virtual void  v67(); // _ZN6S564C53v67Ev
  S564C5(); // tgen
};
//SIG(-1 S564C5) 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]}


 S564C5 ::~S564C5(){ note_dtor("S564C5", this);}
void  S564C5 ::v4(){vfunc_called(this, "_ZN6S564C52v4Ev");}
void  S564C5 ::v5(){vfunc_called(this, "_ZN6S564C52v5Ev");}
void  S564C5 ::v6(){vfunc_called(this, "_ZN6S564C52v6Ev");}
void  S564C5 ::v7(){vfunc_called(this, "_ZN6S564C52v7Ev");}
void  S564C5 ::v8(){vfunc_called(this, "_ZN6S564C52v8Ev");}
void  S564C5 ::v9(){vfunc_called(this, "_ZN6S564C52v9Ev");}
void  S564C5 ::v10(){vfunc_called(this, "_ZN6S564C53v10Ev");}
void  S564C5 ::v11(){vfunc_called(this, "_ZN6S564C53v11Ev");}
void  S564C5 ::v12(){vfunc_called(this, "_ZN6S564C53v12Ev");}
void  S564C5 ::v13(){vfunc_called(this, "_ZN6S564C53v13Ev");}
void  S564C5 ::v14(){vfunc_called(this, "_ZN6S564C53v14Ev");}
void  S564C5 ::v15(){vfunc_called(this, "_ZN6S564C53v15Ev");}
void  S564C5 ::v16(){vfunc_called(this, "_ZN6S564C53v16Ev");}
void  S564C5 ::v17(){vfunc_called(this, "_ZN6S564C53v17Ev");}
void  S564C5 ::v18(){vfunc_called(this, "_ZN6S564C53v18Ev");}
void  S564C5 ::v19(){vfunc_called(this, "_ZN6S564C53v19Ev");}
void  S564C5 ::v20(){vfunc_called(this, "_ZN6S564C53v20Ev");}
void  S564C5 ::v21(){vfunc_called(this, "_ZN6S564C53v21Ev");}
void  S564C5 ::v22(){vfunc_called(this, "_ZN6S564C53v22Ev");}
void  S564C5 ::v23(){vfunc_called(this, "_ZN6S564C53v23Ev");}
void  S564C5 ::v24(){vfunc_called(this, "_ZN6S564C53v24Ev");}
void  S564C5 ::v25(){vfunc_called(this, "_ZN6S564C53v25Ev");}
void  S564C5 ::v26(){vfunc_called(this, "_ZN6S564C53v26Ev");}
void  S564C5 ::v27(){vfunc_called(this, "_ZN6S564C53v27Ev");}
void  S564C5 ::v28(){vfunc_called(this, "_ZN6S564C53v28Ev");}
void  S564C5 ::v29(){vfunc_called(this, "_ZN6S564C53v29Ev");}
void  S564C5 ::v30(){vfunc_called(this, "_ZN6S564C53v30Ev");}
void  S564C5 ::v31(){vfunc_called(this, "_ZN6S564C53v31Ev");}
void  S564C5 ::v32(){vfunc_called(this, "_ZN6S564C53v32Ev");}
void  S564C5 ::v33(){vfunc_called(this, "_ZN6S564C53v33Ev");}
void  S564C5 ::v34(){vfunc_called(this, "_ZN6S564C53v34Ev");}
void  S564C5 ::v35(){vfunc_called(this, "_ZN6S564C53v35Ev");}
void  S564C5 ::v36(){vfunc_called(this, "_ZN6S564C53v36Ev");}
void  S564C5 ::v37(){vfunc_called(this, "_ZN6S564C53v37Ev");}
void  S564C5 ::v38(){vfunc_called(this, "_ZN6S564C53v38Ev");}
void  S564C5 ::v39(){vfunc_called(this, "_ZN6S564C53v39Ev");}
void  S564C5 ::v40(){vfunc_called(this, "_ZN6S564C53v40Ev");}
void  S564C5 ::v41(){vfunc_called(this, "_ZN6S564C53v41Ev");}
void  S564C5 ::v42(){vfunc_called(this, "_ZN6S564C53v42Ev");}
void  S564C5 ::v43(){vfunc_called(this, "_ZN6S564C53v43Ev");}
void  S564C5 ::v44(){vfunc_called(this, "_ZN6S564C53v44Ev");}
void  S564C5 ::v45(){vfunc_called(this, "_ZN6S564C53v45Ev");}
void  S564C5 ::v46(){vfunc_called(this, "_ZN6S564C53v46Ev");}
void  S564C5 ::v47(){vfunc_called(this, "_ZN6S564C53v47Ev");}
void  S564C5 ::v48(){vfunc_called(this, "_ZN6S564C53v48Ev");}
void  S564C5 ::v49(){vfunc_called(this, "_ZN6S564C53v49Ev");}
void  S564C5 ::v50(){vfunc_called(this, "_ZN6S564C53v50Ev");}
void  S564C5 ::v51(){vfunc_called(this, "_ZN6S564C53v51Ev");}
void  S564C5 ::v52(){vfunc_called(this, "_ZN6S564C53v52Ev");}
void  S564C5 ::v53(){vfunc_called(this, "_ZN6S564C53v53Ev");}
void  S564C5 ::v54(){vfunc_called(this, "_ZN6S564C53v54Ev");}
void  S564C5 ::v55(){vfunc_called(this, "_ZN6S564C53v55Ev");}
void  S564C5 ::v56(){vfunc_called(this, "_ZN6S564C53v56Ev");}
void  S564C5 ::v57(){vfunc_called(this, "_ZN6S564C53v57Ev");}
void  S564C5 ::v58(){vfunc_called(this, "_ZN6S564C53v58Ev");}
void  S564C5 ::v59(){vfunc_called(this, "_ZN6S564C53v59Ev");}
void  S564C5 ::v60(){vfunc_called(this, "_ZN6S564C53v60Ev");}
void  S564C5 ::v61(){vfunc_called(this, "_ZN6S564C53v61Ev");}
void  S564C5 ::v62(){vfunc_called(this, "_ZN6S564C53v62Ev");}
void  S564C5 ::v63(){vfunc_called(this, "_ZN6S564C53v63Ev");}
void  S564C5 ::v64(){vfunc_called(this, "_ZN6S564C53v64Ev");}
void  S564C5 ::v65(){vfunc_called(this, "_ZN6S564C53v65Ev");}
void  S564C5 ::v66(){vfunc_called(this, "_ZN6S564C53v66Ev");}
void  S564C5 ::v67(){vfunc_called(this, "_ZN6S564C53v67Ev");}
S564C5 ::S564C5(){ note_ctor("S564C5", this);} // tgen

static void Test_S564C5()
{
  extern Class_Descriptor cd_S564C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S564C5, buf);
    S564C5 *dp, &lv = *(dp=new (buf) S564C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S564C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S564C5)");
    check_field_offset(lv, s564c5f0, ABISELECT(8,4), "S564C5.s564c5f0");
    check_field_offset(lv, s564c5f1, ABISELECT(16,8), "S564C5.s564c5f1");
    check_field_offset(lv, s564c5f2, ABISELECT(24,16), "S564C5.s564c5f2");
    check_field_offset(lv, s564c5f3, ABISELECT(56,32), "S564C5.s564c5f3");
    check_field_offset(lv, s564c5f4, ABISELECT(64,40), "S564C5.s564c5f4");
    check_field_offset(lv, s564c5f5, ABISELECT(72,44), "S564C5.s564c5f5");
    check_field_offset(lv, s564c5f6, ABISELECT(80,52), "S564C5.s564c5f6");
    test_class_info(&lv, &cd_S564C5);
    dp->~S564C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS564C5(Test_S564C5, "S564C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S564C5C1Ev();
extern void _ZN6S564C5D1Ev();
Name_Map name_map_S564C5[] = {
  NSPAIR(_ZN6S564C5C1Ev),
  NSPAIR(_ZN6S564C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S564C5[];
extern void _ZN6S564C5D1Ev();
extern void _ZN6S564C5D0Ev();
extern void _ZN6S564C52v4Ev();
extern void _ZN6S564C52v5Ev();
extern void _ZN6S564C52v6Ev();
extern void _ZN6S564C52v7Ev();
extern void _ZN6S564C52v8Ev();
extern void _ZN6S564C52v9Ev();
extern void _ZN6S564C53v10Ev();
extern void _ZN6S564C53v11Ev();
extern void _ZN6S564C53v12Ev();
extern void _ZN6S564C53v13Ev();
extern void _ZN6S564C53v14Ev();
extern void _ZN6S564C53v15Ev();
extern void _ZN6S564C53v16Ev();
extern void _ZN6S564C53v17Ev();
extern void _ZN6S564C53v18Ev();
extern void _ZN6S564C53v19Ev();
extern void _ZN6S564C53v20Ev();
extern void _ZN6S564C53v21Ev();
extern void _ZN6S564C53v22Ev();
extern void _ZN6S564C53v23Ev();
extern void _ZN6S564C53v24Ev();
extern void _ZN6S564C53v25Ev();
extern void _ZN6S564C53v26Ev();
extern void _ZN6S564C53v27Ev();
extern void _ZN6S564C53v28Ev();
extern void _ZN6S564C53v29Ev();
extern void _ZN6S564C53v30Ev();
extern void _ZN6S564C53v31Ev();
extern void _ZN6S564C53v32Ev();
extern void _ZN6S564C53v33Ev();
extern void _ZN6S564C53v34Ev();
extern void _ZN6S564C53v35Ev();
extern void _ZN6S564C53v36Ev();
extern void _ZN6S564C53v37Ev();
extern void _ZN6S564C53v38Ev();
extern void _ZN6S564C53v39Ev();
extern void _ZN6S564C53v40Ev();
extern void _ZN6S564C53v41Ev();
extern void _ZN6S564C53v42Ev();
extern void _ZN6S564C53v43Ev();
extern void _ZN6S564C53v44Ev();
extern void _ZN6S564C53v45Ev();
extern void _ZN6S564C53v46Ev();
extern void _ZN6S564C53v47Ev();
extern void _ZN6S564C53v48Ev();
extern void _ZN6S564C53v49Ev();
extern void _ZN6S564C53v50Ev();
extern void _ZN6S564C53v51Ev();
extern void _ZN6S564C53v52Ev();
extern void _ZN6S564C53v53Ev();
extern void _ZN6S564C53v54Ev();
extern void _ZN6S564C53v55Ev();
extern void _ZN6S564C53v56Ev();
extern void _ZN6S564C53v57Ev();
extern void _ZN6S564C53v58Ev();
extern void _ZN6S564C53v59Ev();
extern void _ZN6S564C53v60Ev();
extern void _ZN6S564C53v61Ev();
extern void _ZN6S564C53v62Ev();
extern void _ZN6S564C53v63Ev();
extern void _ZN6S564C53v64Ev();
extern void _ZN6S564C53v65Ev();
extern void _ZN6S564C53v66Ev();
extern void _ZN6S564C53v67Ev();
static  VTBL_ENTRY vtc_S564C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S564C5[0]),
  (VTBL_ENTRY)&_ZN6S564C5D1Ev,
  (VTBL_ENTRY)&_ZN6S564C5D0Ev,
  (VTBL_ENTRY)&_ZN6S564C52v4Ev,
  (VTBL_ENTRY)&_ZN6S564C52v5Ev,
  (VTBL_ENTRY)&_ZN6S564C52v6Ev,
  (VTBL_ENTRY)&_ZN6S564C52v7Ev,
  (VTBL_ENTRY)&_ZN6S564C52v8Ev,
  (VTBL_ENTRY)&_ZN6S564C52v9Ev,
  (VTBL_ENTRY)&_ZN6S564C53v10Ev,
  (VTBL_ENTRY)&_ZN6S564C53v11Ev,
  (VTBL_ENTRY)&_ZN6S564C53v12Ev,
  (VTBL_ENTRY)&_ZN6S564C53v13Ev,
  (VTBL_ENTRY)&_ZN6S564C53v14Ev,
  (VTBL_ENTRY)&_ZN6S564C53v15Ev,
  (VTBL_ENTRY)&_ZN6S564C53v16Ev,
  (VTBL_ENTRY)&_ZN6S564C53v17Ev,
  (VTBL_ENTRY)&_ZN6S564C53v18Ev,
  (VTBL_ENTRY)&_ZN6S564C53v19Ev,
  (VTBL_ENTRY)&_ZN6S564C53v20Ev,
  (VTBL_ENTRY)&_ZN6S564C53v21Ev,
  (VTBL_ENTRY)&_ZN6S564C53v22Ev,
  (VTBL_ENTRY)&_ZN6S564C53v23Ev,
  (VTBL_ENTRY)&_ZN6S564C53v24Ev,
  (VTBL_ENTRY)&_ZN6S564C53v25Ev,
  (VTBL_ENTRY)&_ZN6S564C53v26Ev,
  (VTBL_ENTRY)&_ZN6S564C53v27Ev,
  (VTBL_ENTRY)&_ZN6S564C53v28Ev,
  (VTBL_ENTRY)&_ZN6S564C53v29Ev,
  (VTBL_ENTRY)&_ZN6S564C53v30Ev,
  (VTBL_ENTRY)&_ZN6S564C53v31Ev,
  (VTBL_ENTRY)&_ZN6S564C53v32Ev,
  (VTBL_ENTRY)&_ZN6S564C53v33Ev,
  (VTBL_ENTRY)&_ZN6S564C53v34Ev,
  (VTBL_ENTRY)&_ZN6S564C53v35Ev,
  (VTBL_ENTRY)&_ZN6S564C53v36Ev,
  (VTBL_ENTRY)&_ZN6S564C53v37Ev,
  (VTBL_ENTRY)&_ZN6S564C53v38Ev,
  (VTBL_ENTRY)&_ZN6S564C53v39Ev,
  (VTBL_ENTRY)&_ZN6S564C53v40Ev,
  (VTBL_ENTRY)&_ZN6S564C53v41Ev,
  (VTBL_ENTRY)&_ZN6S564C53v42Ev,
  (VTBL_ENTRY)&_ZN6S564C53v43Ev,
  (VTBL_ENTRY)&_ZN6S564C53v44Ev,
  (VTBL_ENTRY)&_ZN6S564C53v45Ev,
  (VTBL_ENTRY)&_ZN6S564C53v46Ev,
  (VTBL_ENTRY)&_ZN6S564C53v47Ev,
  (VTBL_ENTRY)&_ZN6S564C53v48Ev,
  (VTBL_ENTRY)&_ZN6S564C53v49Ev,
  (VTBL_ENTRY)&_ZN6S564C53v50Ev,
  (VTBL_ENTRY)&_ZN6S564C53v51Ev,
  (VTBL_ENTRY)&_ZN6S564C53v52Ev,
  (VTBL_ENTRY)&_ZN6S564C53v53Ev,
  (VTBL_ENTRY)&_ZN6S564C53v54Ev,
  (VTBL_ENTRY)&_ZN6S564C53v55Ev,
  (VTBL_ENTRY)&_ZN6S564C53v56Ev,
  (VTBL_ENTRY)&_ZN6S564C53v57Ev,
  (VTBL_ENTRY)&_ZN6S564C53v58Ev,
  (VTBL_ENTRY)&_ZN6S564C53v59Ev,
  (VTBL_ENTRY)&_ZN6S564C53v60Ev,
  (VTBL_ENTRY)&_ZN6S564C53v61Ev,
  (VTBL_ENTRY)&_ZN6S564C53v62Ev,
  (VTBL_ENTRY)&_ZN6S564C53v63Ev,
  (VTBL_ENTRY)&_ZN6S564C53v64Ev,
  (VTBL_ENTRY)&_ZN6S564C53v65Ev,
  (VTBL_ENTRY)&_ZN6S564C53v66Ev,
  (VTBL_ENTRY)&_ZN6S564C53v67Ev,
};
extern VTBL_ENTRY _ZTI6S564C5[];
extern  VTBL_ENTRY _ZTV6S564C5[];
Class_Descriptor cd_S564C5 = {  "S564C5", // class name
  0,0,//no base classes
  &(vtc_S564C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S564C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S564C5),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  S564C4  : S564C5 {
  void *s564c4f0;
  ::S1542C26 s564c4f1;
  ::S615C17_nt s564c4f2;
  ::S1542C22_nt s564c4f3;
  ::S615C12_nt s564c4f4;
  int s564c4f5;
  unsigned int s564c4f6:1;
  unsigned int s564c4f7:1;
  unsigned int s564c4f8:1;
  unsigned int s564c4f9:1;
  int s564c4f10[11];
  virtual  ~S564C4(); // _ZN6S564C4D1Ev
  virtual void  v68(); // _ZN6S564C43v68Ev
  virtual void  v69(); // _ZN6S564C43v69Ev
  virtual void  v70(); // _ZN6S564C43v70Ev
  virtual void  v71(); // _ZN6S564C43v71Ev
  virtual void  v72(); // _ZN6S564C43v72Ev
  virtual void  v73(); // _ZN6S564C43v73Ev
  virtual void  v74(); // _ZN6S564C43v74Ev
  virtual void  v75(); // _ZN6S564C43v75Ev
  virtual void  v76(); // _ZN6S564C43v76Ev
  virtual void  v77(); // _ZN6S564C43v77Ev
  virtual void  v78(); // _ZN6S564C43v78Ev
  virtual void  v79(); // _ZN6S564C43v79Ev
  virtual void  v80(); // _ZN6S564C43v80Ev
  virtual void  v81(); // _ZN6S564C43v81Ev
  virtual void  v82(); // _ZN6S564C43v82Ev
  virtual void  v83(); // _ZN6S564C43v83Ev
  virtual void  v84(); // _ZN6S564C43v84Ev
  virtual void  v85(); // _ZN6S564C43v85Ev
  virtual void  v86(); // _ZN6S564C43v86Ev
  virtual void  v87(); // _ZN6S564C43v87Ev
  virtual void  v88(); // _ZN6S564C43v88Ev
  virtual void  v89(); // _ZN6S564C43v89Ev
  virtual void  v90(); // _ZN6S564C43v90Ev
  virtual void  v91(); // _ZN6S564C43v91Ev
  virtual void  v92(); // _ZN6S564C43v92Ev
  virtual void  v93(); // _ZN6S564C43v93Ev
  virtual void  v94(); // _ZN6S564C43v94Ev
  S564C4(); // tgen
};
//SIG(-1 S564C4) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S564C4 ::~S564C4(){ note_dtor("S564C4", this);}
void  S564C4 ::v68(){vfunc_called(this, "_ZN6S564C43v68Ev");}
void  S564C4 ::v69(){vfunc_called(this, "_ZN6S564C43v69Ev");}
void  S564C4 ::v70(){vfunc_called(this, "_ZN6S564C43v70Ev");}
void  S564C4 ::v71(){vfunc_called(this, "_ZN6S564C43v71Ev");}
void  S564C4 ::v72(){vfunc_called(this, "_ZN6S564C43v72Ev");}
void  S564C4 ::v73(){vfunc_called(this, "_ZN6S564C43v73Ev");}
void  S564C4 ::v74(){vfunc_called(this, "_ZN6S564C43v74Ev");}
void  S564C4 ::v75(){vfunc_called(this, "_ZN6S564C43v75Ev");}
void  S564C4 ::v76(){vfunc_called(this, "_ZN6S564C43v76Ev");}
void  S564C4 ::v77(){vfunc_called(this, "_ZN6S564C43v77Ev");}
void  S564C4 ::v78(){vfunc_called(this, "_ZN6S564C43v78Ev");}
void  S564C4 ::v79(){vfunc_called(this, "_ZN6S564C43v79Ev");}
void  S564C4 ::v80(){vfunc_called(this, "_ZN6S564C43v80Ev");}
void  S564C4 ::v81(){vfunc_called(this, "_ZN6S564C43v81Ev");}
void  S564C4 ::v82(){vfunc_called(this, "_ZN6S564C43v82Ev");}
void  S564C4 ::v83(){vfunc_called(this, "_ZN6S564C43v83Ev");}
void  S564C4 ::v84(){vfunc_called(this, "_ZN6S564C43v84Ev");}
void  S564C4 ::v85(){vfunc_called(this, "_ZN6S564C43v85Ev");}
void  S564C4 ::v86(){vfunc_called(this, "_ZN6S564C43v86Ev");}
void  S564C4 ::v87(){vfunc_called(this, "_ZN6S564C43v87Ev");}
void  S564C4 ::v88(){vfunc_called(this, "_ZN6S564C43v88Ev");}
void  S564C4 ::v89(){vfunc_called(this, "_ZN6S564C43v89Ev");}
void  S564C4 ::v90(){vfunc_called(this, "_ZN6S564C43v90Ev");}
void  S564C4 ::v91(){vfunc_called(this, "_ZN6S564C43v91Ev");}
void  S564C4 ::v92(){vfunc_called(this, "_ZN6S564C43v92Ev");}
void  S564C4 ::v93(){vfunc_called(this, "_ZN6S564C43v93Ev");}
void  S564C4 ::v94(){vfunc_called(this, "_ZN6S564C43v94Ev");}
S564C4 ::S564C4(){ note_ctor("S564C4", this);} // tgen

static void Test_S564C4()
{
  extern Class_Descriptor cd_S564C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S564C4, buf);
    S564C4 *dp, &lv = *(dp=new (buf) S564C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S564C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S564C4)");
    check_base_class_offset(lv, (S564C5*), 0, "S564C4");
    check_field_offset(lv, s564c4f0, ABISELECT(96,60), "S564C4.s564c4f0");
    check_field_offset(lv, s564c4f1, ABISELECT(104,64), "S564C4.s564c4f1");
    check_field_offset(lv, s564c4f2, ABISELECT(120,76), "S564C4.s564c4f2");
    check_field_offset(lv, s564c4f3, ABISELECT(128,84), "S564C4.s564c4f3");
    check_field_offset(lv, s564c4f4, ABISELECT(144,96), "S564C4.s564c4f4");
    check_field_offset(lv, s564c4f5, ABISELECT(176,128), "S564C4.s564c4f5");
    set_bf_and_test(lv, s564c4f6, ABISELECT(180,132), 0, 1, 1, "S564C4");
    set_bf_and_test(lv, s564c4f7, ABISELECT(180,132), 1, 1, 1, "S564C4");
    set_bf_and_test(lv, s564c4f8, ABISELECT(180,132), 2, 1, 1, "S564C4");
    set_bf_and_test(lv, s564c4f9, ABISELECT(180,132), 3, 1, 1, "S564C4");
    check_field_offset(lv, s564c4f10, ABISELECT(184,136), "S564C4.s564c4f10");
    test_class_info(&lv, &cd_S564C4);
    dp->~S564C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS564C4(Test_S564C4, "S564C4", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S564C4C1Ev();
extern void _ZN6S564C4D1Ev();
Name_Map name_map_S564C4[] = {
  NSPAIR(_ZN6S564C4C1Ev),
  NSPAIR(_ZN6S564C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S564C5;
extern VTBL_ENTRY _ZTI6S564C5[];
extern  VTBL_ENTRY _ZTV6S564C5[];
static Base_Class bases_S564C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S564C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S564C4[];
extern void _ZN6S564C4D1Ev();
extern void _ZN6S564C4D0Ev();
extern void _ZN6S564C52v4Ev();
extern void _ZN6S564C52v5Ev();
extern void _ZN6S564C52v6Ev();
extern void _ZN6S564C52v7Ev();
extern void _ZN6S564C52v8Ev();
extern void _ZN6S564C52v9Ev();
extern void _ZN6S564C53v10Ev();
extern void _ZN6S564C53v11Ev();
extern void _ZN6S564C53v12Ev();
extern void _ZN6S564C53v13Ev();
extern void _ZN6S564C53v14Ev();
extern void _ZN6S564C53v15Ev();
extern void _ZN6S564C53v16Ev();
extern void _ZN6S564C53v17Ev();
extern void _ZN6S564C53v18Ev();
extern void _ZN6S564C53v19Ev();
extern void _ZN6S564C53v20Ev();
extern void _ZN6S564C53v21Ev();
extern void _ZN6S564C53v22Ev();
extern void _ZN6S564C53v23Ev();
extern void _ZN6S564C53v24Ev();
extern void _ZN6S564C53v25Ev();
extern void _ZN6S564C53v26Ev();
extern void _ZN6S564C53v27Ev();
extern void _ZN6S564C53v28Ev();
extern void _ZN6S564C53v29Ev();
extern void _ZN6S564C53v30Ev();
extern void _ZN6S564C53v31Ev();
extern void _ZN6S564C53v32Ev();
extern void _ZN6S564C53v33Ev();
extern void _ZN6S564C53v34Ev();
extern void _ZN6S564C53v35Ev();
extern void _ZN6S564C53v36Ev();
extern void _ZN6S564C53v37Ev();
extern void _ZN6S564C53v38Ev();
extern void _ZN6S564C53v39Ev();
extern void _ZN6S564C53v40Ev();
extern void _ZN6S564C53v41Ev();
extern void _ZN6S564C53v42Ev();
extern void _ZN6S564C53v43Ev();
extern void _ZN6S564C53v44Ev();
extern void _ZN6S564C53v45Ev();
extern void _ZN6S564C53v46Ev();
extern void _ZN6S564C53v47Ev();
extern void _ZN6S564C53v48Ev();
extern void _ZN6S564C53v49Ev();
extern void _ZN6S564C53v50Ev();
extern void _ZN6S564C53v51Ev();
extern void _ZN6S564C53v52Ev();
extern void _ZN6S564C53v53Ev();
extern void _ZN6S564C53v54Ev();
extern void _ZN6S564C53v55Ev();
extern void _ZN6S564C53v56Ev();
extern void _ZN6S564C53v57Ev();
extern void _ZN6S564C53v58Ev();
extern void _ZN6S564C53v59Ev();
extern void _ZN6S564C53v60Ev();
extern void _ZN6S564C53v61Ev();
extern void _ZN6S564C53v62Ev();
extern void _ZN6S564C53v63Ev();
extern void _ZN6S564C53v64Ev();
extern void _ZN6S564C53v65Ev();
extern void _ZN6S564C53v66Ev();
extern void _ZN6S564C53v67Ev();
extern void _ZN6S564C43v68Ev();
extern void _ZN6S564C43v69Ev();
extern void _ZN6S564C43v70Ev();
extern void _ZN6S564C43v71Ev();
extern void _ZN6S564C43v72Ev();
extern void _ZN6S564C43v73Ev();
extern void _ZN6S564C43v74Ev();
extern void _ZN6S564C43v75Ev();
extern void _ZN6S564C43v76Ev();
extern void _ZN6S564C43v77Ev();
extern void _ZN6S564C43v78Ev();
extern void _ZN6S564C43v79Ev();
extern void _ZN6S564C43v80Ev();
extern void _ZN6S564C43v81Ev();
extern void _ZN6S564C43v82Ev();
extern void _ZN6S564C43v83Ev();
extern void _ZN6S564C43v84Ev();
extern void _ZN6S564C43v85Ev();
extern void _ZN6S564C43v86Ev();
extern void _ZN6S564C43v87Ev();
extern void _ZN6S564C43v88Ev();
extern void _ZN6S564C43v89Ev();
extern void _ZN6S564C43v90Ev();
extern void _ZN6S564C43v91Ev();
extern void _ZN6S564C43v92Ev();
extern void _ZN6S564C43v93Ev();
extern void _ZN6S564C43v94Ev();
static  VTBL_ENTRY vtc_S564C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S564C4[0]),
  (VTBL_ENTRY)&_ZN6S564C4D1Ev,
  (VTBL_ENTRY)&_ZN6S564C4D0Ev,
  (VTBL_ENTRY)&_ZN6S564C52v4Ev,
  (VTBL_ENTRY)&_ZN6S564C52v5Ev,
  (VTBL_ENTRY)&_ZN6S564C52v6Ev,
  (VTBL_ENTRY)&_ZN6S564C52v7Ev,
  (VTBL_ENTRY)&_ZN6S564C52v8Ev,
  (VTBL_ENTRY)&_ZN6S564C52v9Ev,
  (VTBL_ENTRY)&_ZN6S564C53v10Ev,
  (VTBL_ENTRY)&_ZN6S564C53v11Ev,
  (VTBL_ENTRY)&_ZN6S564C53v12Ev,
  (VTBL_ENTRY)&_ZN6S564C53v13Ev,
  (VTBL_ENTRY)&_ZN6S564C53v14Ev,
  (VTBL_ENTRY)&_ZN6S564C53v15Ev,
  (VTBL_ENTRY)&_ZN6S564C53v16Ev,
  (VTBL_ENTRY)&_ZN6S564C53v17Ev,
  (VTBL_ENTRY)&_ZN6S564C53v18Ev,
  (VTBL_ENTRY)&_ZN6S564C53v19Ev,
  (VTBL_ENTRY)&_ZN6S564C53v20Ev,
  (VTBL_ENTRY)&_ZN6S564C53v21Ev,
  (VTBL_ENTRY)&_ZN6S564C53v22Ev,
  (VTBL_ENTRY)&_ZN6S564C53v23Ev,
  (VTBL_ENTRY)&_ZN6S564C53v24Ev,
  (VTBL_ENTRY)&_ZN6S564C53v25Ev,
  (VTBL_ENTRY)&_ZN6S564C53v26Ev,
  (VTBL_ENTRY)&_ZN6S564C53v27Ev,
  (VTBL_ENTRY)&_ZN6S564C53v28Ev,
  (VTBL_ENTRY)&_ZN6S564C53v29Ev,
  (VTBL_ENTRY)&_ZN6S564C53v30Ev,
  (VTBL_ENTRY)&_ZN6S564C53v31Ev,
  (VTBL_ENTRY)&_ZN6S564C53v32Ev,
  (VTBL_ENTRY)&_ZN6S564C53v33Ev,
  (VTBL_ENTRY)&_ZN6S564C53v34Ev,
  (VTBL_ENTRY)&_ZN6S564C53v35Ev,
  (VTBL_ENTRY)&_ZN6S564C53v36Ev,
  (VTBL_ENTRY)&_ZN6S564C53v37Ev,
  (VTBL_ENTRY)&_ZN6S564C53v38Ev,
  (VTBL_ENTRY)&_ZN6S564C53v39Ev,
  (VTBL_ENTRY)&_ZN6S564C53v40Ev,
  (VTBL_ENTRY)&_ZN6S564C53v41Ev,
  (VTBL_ENTRY)&_ZN6S564C53v42Ev,
  (VTBL_ENTRY)&_ZN6S564C53v43Ev,
  (VTBL_ENTRY)&_ZN6S564C53v44Ev,
  (VTBL_ENTRY)&_ZN6S564C53v45Ev,
  (VTBL_ENTRY)&_ZN6S564C53v46Ev,
  (VTBL_ENTRY)&_ZN6S564C53v47Ev,
  (VTBL_ENTRY)&_ZN6S564C53v48Ev,
  (VTBL_ENTRY)&_ZN6S564C53v49Ev,
  (VTBL_ENTRY)&_ZN6S564C53v50Ev,
  (VTBL_ENTRY)&_ZN6S564C53v51Ev,
  (VTBL_ENTRY)&_ZN6S564C53v52Ev,
  (VTBL_ENTRY)&_ZN6S564C53v53Ev,
  (VTBL_ENTRY)&_ZN6S564C53v54Ev,
  (VTBL_ENTRY)&_ZN6S564C53v55Ev,
  (VTBL_ENTRY)&_ZN6S564C53v56Ev,
  (VTBL_ENTRY)&_ZN6S564C53v57Ev,
  (VTBL_ENTRY)&_ZN6S564C53v58Ev,
  (VTBL_ENTRY)&_ZN6S564C53v59Ev,
  (VTBL_ENTRY)&_ZN6S564C53v60Ev,
  (VTBL_ENTRY)&_ZN6S564C53v61Ev,
  (VTBL_ENTRY)&_ZN6S564C53v62Ev,
  (VTBL_ENTRY)&_ZN6S564C53v63Ev,
  (VTBL_ENTRY)&_ZN6S564C53v64Ev,
  (VTBL_ENTRY)&_ZN6S564C53v65Ev,
  (VTBL_ENTRY)&_ZN6S564C53v66Ev,
  (VTBL_ENTRY)&_ZN6S564C53v67Ev,
  (VTBL_ENTRY)&_ZN6S564C43v68Ev,
  (VTBL_ENTRY)&_ZN6S564C43v69Ev,
  (VTBL_ENTRY)&_ZN6S564C43v70Ev,
  (VTBL_ENTRY)&_ZN6S564C43v71Ev,
  (VTBL_ENTRY)&_ZN6S564C43v72Ev,
  (VTBL_ENTRY)&_ZN6S564C43v73Ev,
  (VTBL_ENTRY)&_ZN6S564C43v74Ev,
  (VTBL_ENTRY)&_ZN6S564C43v75Ev,
  (VTBL_ENTRY)&_ZN6S564C43v76Ev,
  (VTBL_ENTRY)&_ZN6S564C43v77Ev,
  (VTBL_ENTRY)&_ZN6S564C43v78Ev,
  (VTBL_ENTRY)&_ZN6S564C43v79Ev,
  (VTBL_ENTRY)&_ZN6S564C43v80Ev,
  (VTBL_ENTRY)&_ZN6S564C43v81Ev,
  (VTBL_ENTRY)&_ZN6S564C43v82Ev,
  (VTBL_ENTRY)&_ZN6S564C43v83Ev,
  (VTBL_ENTRY)&_ZN6S564C43v84Ev,
  (VTBL_ENTRY)&_ZN6S564C43v85Ev,
  (VTBL_ENTRY)&_ZN6S564C43v86Ev,
  (VTBL_ENTRY)&_ZN6S564C43v87Ev,
  (VTBL_ENTRY)&_ZN6S564C43v88Ev,
  (VTBL_ENTRY)&_ZN6S564C43v89Ev,
  (VTBL_ENTRY)&_ZN6S564C43v90Ev,
  (VTBL_ENTRY)&_ZN6S564C43v91Ev,
  (VTBL_ENTRY)&_ZN6S564C43v92Ev,
  (VTBL_ENTRY)&_ZN6S564C43v93Ev,
  (VTBL_ENTRY)&_ZN6S564C43v94Ev,
};
extern VTBL_ENTRY _ZTI6S564C4[];
extern  VTBL_ENTRY _ZTV6S564C4[];
Class_Descriptor cd_S564C4 = {  "S564C4", // class name
  bases_S564C4, 1,
  &(vtc_S564C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S564C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S564C4),95, //virtual function table var
  2, // 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  S564C3  : S564C4 {
  ::S615C22_nt s564c3f0;
  unsigned int s564c3f1:1;
  virtual  ~S564C3(); // _ZN6S564C3D1Ev
  virtual void  v95(); // _ZN6S564C33v95Ev
  virtual void  v96(); // _ZN6S564C33v96Ev
  virtual void  v97(); // _ZN6S564C33v97Ev
  virtual void  v98(); // _ZN6S564C33v98Ev
  virtual void  v99(); // _ZN6S564C33v99Ev
  virtual void  v100(); // _ZN6S564C34v100Ev
  virtual void  v101(); // _ZN6S564C34v101Ev
  virtual void  v102(); // _ZN6S564C34v102Ev
  virtual void  v103(); // _ZN6S564C34v103Ev
  virtual void  v104(); // _ZN6S564C34v104Ev
  virtual void  v105(); // _ZN6S564C34v105Ev
  virtual void  v106(); // _ZN6S564C34v106Ev
  virtual void  v107(); // _ZN6S564C34v107Ev
  virtual void  v108(); // _ZN6S564C34v108Ev
  virtual void  v109(); // _ZN6S564C34v109Ev
  virtual void  v110(); // _ZN6S564C34v110Ev
  virtual void  v111(); // _ZN6S564C34v111Ev
  virtual void  v112(); // _ZN6S564C34v112Ev
  S564C3(); // tgen
};
//SIG(-1 S564C3) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S564C3 ::~S564C3(){ note_dtor("S564C3", this);}
void  S564C3 ::v95(){vfunc_called(this, "_ZN6S564C33v95Ev");}
void  S564C3 ::v96(){vfunc_called(this, "_ZN6S564C33v96Ev");}
void  S564C3 ::v97(){vfunc_called(this, "_ZN6S564C33v97Ev");}
void  S564C3 ::v98(){vfunc_called(this, "_ZN6S564C33v98Ev");}
void  S564C3 ::v99(){vfunc_called(this, "_ZN6S564C33v99Ev");}
void  S564C3 ::v100(){vfunc_called(this, "_ZN6S564C34v100Ev");}
void  S564C3 ::v101(){vfunc_called(this, "_ZN6S564C34v101Ev");}
void  S564C3 ::v102(){vfunc_called(this, "_ZN6S564C34v102Ev");}
void  S564C3 ::v103(){vfunc_called(this, "_ZN6S564C34v103Ev");}
void  S564C3 ::v104(){vfunc_called(this, "_ZN6S564C34v104Ev");}
void  S564C3 ::v105(){vfunc_called(this, "_ZN6S564C34v105Ev");}
void  S564C3 ::v106(){vfunc_called(this, "_ZN6S564C34v106Ev");}
void  S564C3 ::v107(){vfunc_called(this, "_ZN6S564C34v107Ev");}
void  S564C3 ::v108(){vfunc_called(this, "_ZN6S564C34v108Ev");}
void  S564C3 ::v109(){vfunc_called(this, "_ZN6S564C34v109Ev");}
void  S564C3 ::v110(){vfunc_called(this, "_ZN6S564C34v110Ev");}
void  S564C3 ::v111(){vfunc_called(this, "_ZN6S564C34v111Ev");}
void  S564C3 ::v112(){vfunc_called(this, "_ZN6S564C34v112Ev");}
S564C3 ::S564C3(){ note_ctor("S564C3", this);} // tgen

static void Test_S564C3()
{
  extern Class_Descriptor cd_S564C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S564C3, buf);
    S564C3 *dp, &lv = *(dp=new (buf) S564C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S564C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S564C3)");
    check_base_class_offset(lv, (S564C5*)(S564C4*), 0, "S564C3");
    check_base_class_offset(lv, (S564C4*), 0, "S564C3");
    check_field_offset(lv, s564c3f0, ABISELECT(232,180), "S564C3.s564c3f0");
    set_bf_and_test(lv, s564c3f1, ABISELECT(248,192), 0, 1, 1, "S564C3");
    test_class_info(&lv, &cd_S564C3);
    dp->~S564C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS564C3(Test_S564C3, "S564C3", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S564C3C1Ev();
extern void _ZN6S564C3D1Ev();
Name_Map name_map_S564C3[] = {
  NSPAIR(_ZN6S564C3C1Ev),
  NSPAIR(_ZN6S564C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S564C5;
extern VTBL_ENTRY _ZTI6S564C5[];
extern  VTBL_ENTRY _ZTV6S564C5[];
extern Class_Descriptor cd_S564C4;
extern VTBL_ENTRY _ZTI6S564C4[];
extern  VTBL_ENTRY _ZTV6S564C4[];
static Base_Class bases_S564C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S564C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S564C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S564C3[];
extern void _ZN6S564C3D1Ev();
extern void _ZN6S564C3D0Ev();
extern void _ZN6S564C52v4Ev();
extern void _ZN6S564C52v5Ev();
extern void _ZN6S564C52v6Ev();
extern void _ZN6S564C52v7Ev();
extern void _ZN6S564C52v8Ev();
extern void _ZN6S564C52v9Ev();
extern void _ZN6S564C53v10Ev();
extern void _ZN6S564C53v11Ev();
extern void _ZN6S564C53v12Ev();
extern void _ZN6S564C53v13Ev();
extern void _ZN6S564C53v14Ev();
extern void _ZN6S564C53v15Ev();
extern void _ZN6S564C53v16Ev();
extern void _ZN6S564C53v17Ev();
extern void _ZN6S564C53v18Ev();
extern void _ZN6S564C53v19Ev();
extern void _ZN6S564C53v20Ev();
extern void _ZN6S564C53v21Ev();
extern void _ZN6S564C53v22Ev();
extern void _ZN6S564C53v23Ev();
extern void _ZN6S564C53v24Ev();
extern void _ZN6S564C53v25Ev();
extern void _ZN6S564C53v26Ev();
extern void _ZN6S564C53v27Ev();
extern void _ZN6S564C53v28Ev();
extern void _ZN6S564C53v29Ev();
extern void _ZN6S564C53v30Ev();
extern void _ZN6S564C53v31Ev();
extern void _ZN6S564C53v32Ev();
extern void _ZN6S564C53v33Ev();
extern void _ZN6S564C53v34Ev();
extern void _ZN6S564C53v35Ev();
extern void _ZN6S564C53v36Ev();
extern void _ZN6S564C53v37Ev();
extern void _ZN6S564C53v38Ev();
extern void _ZN6S564C53v39Ev();
extern void _ZN6S564C53v40Ev();
extern void _ZN6S564C53v41Ev();
extern void _ZN6S564C53v42Ev();
extern void _ZN6S564C53v43Ev();
extern void _ZN6S564C53v44Ev();
extern void _ZN6S564C53v45Ev();
extern void _ZN6S564C53v46Ev();
extern void _ZN6S564C53v47Ev();
extern void _ZN6S564C53v48Ev();
extern void _ZN6S564C53v49Ev();
extern void _ZN6S564C53v50Ev();
extern void _ZN6S564C53v51Ev();
extern void _ZN6S564C53v52Ev();
extern void _ZN6S564C53v53Ev();
extern void _ZN6S564C53v54Ev();
extern void _ZN6S564C53v55Ev();
extern void _ZN6S564C53v56Ev();
extern void _ZN6S564C53v57Ev();
extern void _ZN6S564C53v58Ev();
extern void _ZN6S564C53v59Ev();
extern void _ZN6S564C53v60Ev();
extern void _ZN6S564C53v61Ev();
extern void _ZN6S564C53v62Ev();
extern void _ZN6S564C53v63Ev();
extern void _ZN6S564C53v64Ev();
extern void _ZN6S564C53v65Ev();
extern void _ZN6S564C53v66Ev();
extern void _ZN6S564C53v67Ev();
extern void _ZN6S564C43v68Ev();
extern void _ZN6S564C43v69Ev();
extern void _ZN6S564C43v70Ev();
extern void _ZN6S564C43v71Ev();
extern void _ZN6S564C43v72Ev();
extern void _ZN6S564C43v73Ev();
extern void _ZN6S564C43v74Ev();
extern void _ZN6S564C43v75Ev();
extern void _ZN6S564C43v76Ev();
extern void _ZN6S564C43v77Ev();
extern void _ZN6S564C43v78Ev();
extern void _ZN6S564C43v79Ev();
extern void _ZN6S564C43v80Ev();
extern void _ZN6S564C43v81Ev();
extern void _ZN6S564C43v82Ev();
extern void _ZN6S564C43v83Ev();
extern void _ZN6S564C43v84Ev();
extern void _ZN6S564C43v85Ev();
extern void _ZN6S564C43v86Ev();
extern void _ZN6S564C43v87Ev();
extern void _ZN6S564C43v88Ev();
extern void _ZN6S564C43v89Ev();
extern void _ZN6S564C43v90Ev();
extern void _ZN6S564C43v91Ev();
extern void _ZN6S564C43v92Ev();
extern void _ZN6S564C43v93Ev();
extern void _ZN6S564C43v94Ev();
extern void _ZN6S564C33v95Ev();
extern void _ZN6S564C33v96Ev();
extern void _ZN6S564C33v97Ev();
extern void _ZN6S564C33v98Ev();
extern void _ZN6S564C33v99Ev();
extern void _ZN6S564C34v100Ev();
extern void _ZN6S564C34v101Ev();
extern void _ZN6S564C34v102Ev();
extern void _ZN6S564C34v103Ev();
extern void _ZN6S564C34v104Ev();
extern void _ZN6S564C34v105Ev();
extern void _ZN6S564C34v106Ev();
extern void _ZN6S564C34v107Ev();
extern void _ZN6S564C34v108Ev();
extern void _ZN6S564C34v109Ev();
extern void _ZN6S564C34v110Ev();
extern void _ZN6S564C34v111Ev();
extern void _ZN6S564C34v112Ev();
static  VTBL_ENTRY vtc_S564C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S564C3[0]),
  (VTBL_ENTRY)&_ZN6S564C3D1Ev,
  (VTBL_ENTRY)&_ZN6S564C3D0Ev,
  (VTBL_ENTRY)&_ZN6S564C52v4Ev,
  (VTBL_ENTRY)&_ZN6S564C52v5Ev,
  (VTBL_ENTRY)&_ZN6S564C52v6Ev,
  (VTBL_ENTRY)&_ZN6S564C52v7Ev,
  (VTBL_ENTRY)&_ZN6S564C52v8Ev,
  (VTBL_ENTRY)&_ZN6S564C52v9Ev,
  (VTBL_ENTRY)&_ZN6S564C53v10Ev,
  (VTBL_ENTRY)&_ZN6S564C53v11Ev,
  (VTBL_ENTRY)&_ZN6S564C53v12Ev,
  (VTBL_ENTRY)&_ZN6S564C53v13Ev,
  (VTBL_ENTRY)&_ZN6S564C53v14Ev,
  (VTBL_ENTRY)&_ZN6S564C53v15Ev,
  (VTBL_ENTRY)&_ZN6S564C53v16Ev,
  (VTBL_ENTRY)&_ZN6S564C53v17Ev,
  (VTBL_ENTRY)&_ZN6S564C53v18Ev,
  (VTBL_ENTRY)&_ZN6S564C53v19Ev,
  (VTBL_ENTRY)&_ZN6S564C53v20Ev,
  (VTBL_ENTRY)&_ZN6S564C53v21Ev,
  (VTBL_ENTRY)&_ZN6S564C53v22Ev,
  (VTBL_ENTRY)&_ZN6S564C53v23Ev,
  (VTBL_ENTRY)&_ZN6S564C53v24Ev,
  (VTBL_ENTRY)&_ZN6S564C53v25Ev,
  (VTBL_ENTRY)&_ZN6S564C53v26Ev,
  (VTBL_ENTRY)&_ZN6S564C53v27Ev,
  (VTBL_ENTRY)&_ZN6S564C53v28Ev,
  (VTBL_ENTRY)&_ZN6S564C53v29Ev,
  (VTBL_ENTRY)&_ZN6S564C53v30Ev,
  (VTBL_ENTRY)&_ZN6S564C53v31Ev,
  (VTBL_ENTRY)&_ZN6S564C53v32Ev,
  (VTBL_ENTRY)&_ZN6S564C53v33Ev,
  (VTBL_ENTRY)&_ZN6S564C53v34Ev,
  (VTBL_ENTRY)&_ZN6S564C53v35Ev,
  (VTBL_ENTRY)&_ZN6S564C53v36Ev,
  (VTBL_ENTRY)&_ZN6S564C53v37Ev,
  (VTBL_ENTRY)&_ZN6S564C53v38Ev,
  (VTBL_ENTRY)&_ZN6S564C53v39Ev,
  (VTBL_ENTRY)&_ZN6S564C53v40Ev,
  (VTBL_ENTRY)&_ZN6S564C53v41Ev,
  (VTBL_ENTRY)&_ZN6S564C53v42Ev,
  (VTBL_ENTRY)&_ZN6S564C53v43Ev,
  (VTBL_ENTRY)&_ZN6S564C53v44Ev,
  (VTBL_ENTRY)&_ZN6S564C53v45Ev,
  (VTBL_ENTRY)&_ZN6S564C53v46Ev,
  (VTBL_ENTRY)&_ZN6S564C53v47Ev,
  (VTBL_ENTRY)&_ZN6S564C53v48Ev,
  (VTBL_ENTRY)&_ZN6S564C53v49Ev,
  (VTBL_ENTRY)&_ZN6S564C53v50Ev,
  (VTBL_ENTRY)&_ZN6S564C53v51Ev,
  (VTBL_ENTRY)&_ZN6S564C53v52Ev,
  (VTBL_ENTRY)&_ZN6S564C53v53Ev,
  (VTBL_ENTRY)&_ZN6S564C53v54Ev,
  (VTBL_ENTRY)&_ZN6S564C53v55Ev,
  (VTBL_ENTRY)&_ZN6S564C53v56Ev,
  (VTBL_ENTRY)&_ZN6S564C53v57Ev,
  (VTBL_ENTRY)&_ZN6S564C53v58Ev,
  (VTBL_ENTRY)&_ZN6S564C53v59Ev,
  (VTBL_ENTRY)&_ZN6S564C53v60Ev,
  (VTBL_ENTRY)&_ZN6S564C53v61Ev,
  (VTBL_ENTRY)&_ZN6S564C53v62Ev,
  (VTBL_ENTRY)&_ZN6S564C53v63Ev,
  (VTBL_ENTRY)&_ZN6S564C53v64Ev,
  (VTBL_ENTRY)&_ZN6S564C53v65Ev,
  (VTBL_ENTRY)&_ZN6S564C53v66Ev,
  (VTBL_ENTRY)&_ZN6S564C53v67Ev,
  (VTBL_ENTRY)&_ZN6S564C43v68Ev,
  (VTBL_ENTRY)&_ZN6S564C43v69Ev,
  (VTBL_ENTRY)&_ZN6S564C43v70Ev,
  (VTBL_ENTRY)&_ZN6S564C43v71Ev,
  (VTBL_ENTRY)&_ZN6S564C43v72Ev,
  (VTBL_ENTRY)&_ZN6S564C43v73Ev,
  (VTBL_ENTRY)&_ZN6S564C43v74Ev,
  (VTBL_ENTRY)&_ZN6S564C43v75Ev,
  (VTBL_ENTRY)&_ZN6S564C43v76Ev,
  (VTBL_ENTRY)&_ZN6S564C43v77Ev,
  (VTBL_ENTRY)&_ZN6S564C43v78Ev,
  (VTBL_ENTRY)&_ZN6S564C43v79Ev,
  (VTBL_ENTRY)&_ZN6S564C43v80Ev,
  (VTBL_ENTRY)&_ZN6S564C43v81Ev,
  (VTBL_ENTRY)&_ZN6S564C43v82Ev,
  (VTBL_ENTRY)&_ZN6S564C43v83Ev,
  (VTBL_ENTRY)&_ZN6S564C43v84Ev,
  (VTBL_ENTRY)&_ZN6S564C43v85Ev,
  (VTBL_ENTRY)&_ZN6S564C43v86Ev,
  (VTBL_ENTRY)&_ZN6S564C43v87Ev,
  (VTBL_ENTRY)&_ZN6S564C43v88Ev,
  (VTBL_ENTRY)&_ZN6S564C43v89Ev,
  (VTBL_ENTRY)&_ZN6S564C43v90Ev,
  (VTBL_ENTRY)&_ZN6S564C43v91Ev,
  (VTBL_ENTRY)&_ZN6S564C43v92Ev,
  (VTBL_ENTRY)&_ZN6S564C43v93Ev,
  (VTBL_ENTRY)&_ZN6S564C43v94Ev,
  (VTBL_ENTRY)&_ZN6S564C33v95Ev,
  (VTBL_ENTRY)&_ZN6S564C33v96Ev,
  (VTBL_ENTRY)&_ZN6S564C33v97Ev,
  (VTBL_ENTRY)&_ZN6S564C33v98Ev,
  (VTBL_ENTRY)&_ZN6S564C33v99Ev,
  (VTBL_ENTRY)&_ZN6S564C34v100Ev,
  (VTBL_ENTRY)&_ZN6S564C34v101Ev,
  (VTBL_ENTRY)&_ZN6S564C34v102Ev,
  (VTBL_ENTRY)&_ZN6S564C34v103Ev,
  (VTBL_ENTRY)&_ZN6S564C34v104Ev,
  (VTBL_ENTRY)&_ZN6S564C34v105Ev,
  (VTBL_ENTRY)&_ZN6S564C34v106Ev,
  (VTBL_ENTRY)&_ZN6S564C34v107Ev,
  (VTBL_ENTRY)&_ZN6S564C34v108Ev,
  (VTBL_ENTRY)&_ZN6S564C34v109Ev,
  (VTBL_ENTRY)&_ZN6S564C34v110Ev,
  (VTBL_ENTRY)&_ZN6S564C34v111Ev,
  (VTBL_ENTRY)&_ZN6S564C34v112Ev,
};
extern VTBL_ENTRY _ZTI6S564C3[];
extern  VTBL_ENTRY _ZTV6S564C3[];
Class_Descriptor cd_S564C3 = {  "S564C3", // class name
  bases_S564C3, 2,
  &(vtc_S564C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S564C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S564C3),113, //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  S564C2  : S564C3 {
  ::S165C27 s564c2f0;
  int s564c2f1[2];
  unsigned int s564c2f2:1;
  virtual  ~S564C2(); // _ZN6S564C2D1Ev
  virtual void  v113(); // _ZN6S564C24v113Ev
  virtual void  v114(); // _ZN6S564C24v114Ev
  virtual void  v115(); // _ZN6S564C24v115Ev
  virtual void  v116(); // _ZN6S564C24v116Ev
  virtual void  v117(); // _ZN6S564C24v117Ev
  virtual void  v118(); // _ZN6S564C24v118Ev
  virtual void  v119(); // _ZN6S564C24v119Ev
  S564C2(); // tgen
};
//SIG(-1 S564C2) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 FC16{ BC17{ BC8}} Fi[2] Fi:1}


 S564C2 ::~S564C2(){ note_dtor("S564C2", this);}
void  S564C2 ::v113(){vfunc_called(this, "_ZN6S564C24v113Ev");}
void  S564C2 ::v114(){vfunc_called(this, "_ZN6S564C24v114Ev");}
void  S564C2 ::v115(){vfunc_called(this, "_ZN6S564C24v115Ev");}
void  S564C2 ::v116(){vfunc_called(this, "_ZN6S564C24v116Ev");}
void  S564C2 ::v117(){vfunc_called(this, "_ZN6S564C24v117Ev");}
void  S564C2 ::v118(){vfunc_called(this, "_ZN6S564C24v118Ev");}
void  S564C2 ::v119(){vfunc_called(this, "_ZN6S564C24v119Ev");}
S564C2 ::S564C2(){ note_ctor("S564C2", this);} // tgen

static void Test_S564C2()
{
  extern Class_Descriptor cd_S564C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,56)];
    init_test(&cd_S564C2, buf);
    S564C2 *dp, &lv = *(dp=new (buf) S564C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,220), "sizeof(S564C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S564C2)");
    check_base_class_offset(lv, (S564C5*)(S564C4*)(S564C3*), 0, "S564C2");
    check_base_class_offset(lv, (S564C4*)(S564C3*), 0, "S564C2");
    check_base_class_offset(lv, (S564C3*), 0, "S564C2");
    check_field_offset(lv, s564c2f0, ABISELECT(256,196), "S564C2.s564c2f0");
    check_field_offset(lv, s564c2f1, ABISELECT(272,208), "S564C2.s564c2f1");
    set_bf_and_test(lv, s564c2f2, ABISELECT(280,216), 0, 1, 1, "S564C2");
    test_class_info(&lv, &cd_S564C2);
    dp->~S564C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS564C2(Test_S564C2, "S564C2", ABISELECT(288,220));

#else // __cplusplus

extern void _ZN6S564C2C1Ev();
extern void _ZN6S564C2D1Ev();
Name_Map name_map_S564C2[] = {
  NSPAIR(_ZN6S564C2C1Ev),
  NSPAIR(_ZN6S564C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S564C5;
extern VTBL_ENTRY _ZTI6S564C5[];
extern  VTBL_ENTRY _ZTV6S564C5[];
extern Class_Descriptor cd_S564C4;
extern VTBL_ENTRY _ZTI6S564C4[];
extern  VTBL_ENTRY _ZTV6S564C4[];
extern Class_Descriptor cd_S564C3;
extern VTBL_ENTRY _ZTI6S564C3[];
extern  VTBL_ENTRY _ZTV6S564C3[];
static Base_Class bases_S564C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S564C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S564C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S564C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S564C2[];
extern void _ZN6S564C2D1Ev();
extern void _ZN6S564C2D0Ev();
extern void _ZN6S564C52v4Ev();
extern void _ZN6S564C52v5Ev();
extern void _ZN6S564C52v6Ev();
extern void _ZN6S564C52v7Ev();
extern void _ZN6S564C52v8Ev();
extern void _ZN6S564C52v9Ev();
extern void _ZN6S564C53v10Ev();
extern void _ZN6S564C53v11Ev();
extern void _ZN6S564C53v12Ev();
extern void _ZN6S564C53v13Ev();
extern void _ZN6S564C53v14Ev();
extern void _ZN6S564C53v15Ev();
extern void _ZN6S564C53v16Ev();
extern void _ZN6S564C53v17Ev();
extern void _ZN6S564C53v18Ev();
extern void _ZN6S564C53v19Ev();
extern void _ZN6S564C53v20Ev();
extern void _ZN6S564C53v21Ev();
extern void _ZN6S564C53v22Ev();
extern void _ZN6S564C53v23Ev();
extern void _ZN6S564C53v24Ev();
extern void _ZN6S564C53v25Ev();
extern void _ZN6S564C53v26Ev();
extern void _ZN6S564C53v27Ev();
extern void _ZN6S564C53v28Ev();
extern void _ZN6S564C53v29Ev();
extern void _ZN6S564C53v30Ev();
extern void _ZN6S564C53v31Ev();
extern void _ZN6S564C53v32Ev();
extern void _ZN6S564C53v33Ev();
extern void _ZN6S564C53v34Ev();
extern void _ZN6S564C53v35Ev();
extern void _ZN6S564C53v36Ev();
extern void _ZN6S564C53v37Ev();
extern void _ZN6S564C53v38Ev();
extern void _ZN6S564C53v39Ev();
extern void _ZN6S564C53v40Ev();
extern void _ZN6S564C53v41Ev();
extern void _ZN6S564C53v42Ev();
extern void _ZN6S564C53v43Ev();
extern void _ZN6S564C53v44Ev();
extern void _ZN6S564C53v45Ev();
extern void _ZN6S564C53v46Ev();
extern void _ZN6S564C53v47Ev();
extern void _ZN6S564C53v48Ev();
extern void _ZN6S564C53v49Ev();
extern void _ZN6S564C53v50Ev();
extern void _ZN6S564C53v51Ev();
extern void _ZN6S564C53v52Ev();
extern void _ZN6S564C53v53Ev();
extern void _ZN6S564C53v54Ev();
extern void _ZN6S564C53v55Ev();
extern void _ZN6S564C53v56Ev();
extern void _ZN6S564C53v57Ev();
extern void _ZN6S564C53v58Ev();
extern void _ZN6S564C53v59Ev();
extern void _ZN6S564C53v60Ev();
extern void _ZN6S564C53v61Ev();
extern void _ZN6S564C53v62Ev();
extern void _ZN6S564C53v63Ev();
extern void _ZN6S564C53v64Ev();
extern void _ZN6S564C53v65Ev();
extern void _ZN6S564C53v66Ev();
extern void _ZN6S564C53v67Ev();
extern void _ZN6S564C43v68Ev();
extern void _ZN6S564C43v69Ev();
extern void _ZN6S564C43v70Ev();
extern void _ZN6S564C43v71Ev();
extern void _ZN6S564C43v72Ev();
extern void _ZN6S564C43v73Ev();
extern void _ZN6S564C43v74Ev();
extern void _ZN6S564C43v75Ev();
extern void _ZN6S564C43v76Ev();
extern void _ZN6S564C43v77Ev();
extern void _ZN6S564C43v78Ev();
extern void _ZN6S564C43v79Ev();
extern void _ZN6S564C43v80Ev();
extern void _ZN6S564C43v81Ev();
extern void _ZN6S564C43v82Ev();
extern void _ZN6S564C43v83Ev();
extern void _ZN6S564C43v84Ev();
extern void _ZN6S564C43v85Ev();
extern void _ZN6S564C43v86Ev();
extern void _ZN6S564C43v87Ev();
extern void _ZN6S564C43v88Ev();
extern void _ZN6S564C43v89Ev();
extern void _ZN6S564C43v90Ev();
extern void _ZN6S564C43v91Ev();
extern void _ZN6S564C43v92Ev();
extern void _ZN6S564C43v93Ev();
extern void _ZN6S564C43v94Ev();
extern void _ZN6S564C33v95Ev();
extern void _ZN6S564C33v96Ev();
extern void _ZN6S564C33v97Ev();
extern void _ZN6S564C33v98Ev();
extern void _ZN6S564C33v99Ev();
extern void _ZN6S564C34v100Ev();
extern void _ZN6S564C34v101Ev();
extern void _ZN6S564C34v102Ev();
extern void _ZN6S564C34v103Ev();
extern void _ZN6S564C34v104Ev();
extern void _ZN6S564C34v105Ev();
extern void _ZN6S564C34v106Ev();
extern void _ZN6S564C34v107Ev();
extern void _ZN6S564C34v108Ev();
extern void _ZN6S564C34v109Ev();
extern void _ZN6S564C34v110Ev();
extern void _ZN6S564C34v111Ev();
extern void _ZN6S564C34v112Ev();
extern void _ZN6S564C24v113Ev();
extern void _ZN6S564C24v114Ev();
extern void _ZN6S564C24v115Ev();
extern void _ZN6S564C24v116Ev();
extern void _ZN6S564C24v117Ev();
extern void _ZN6S564C24v118Ev();
extern void _ZN6S564C24v119Ev();
static  VTBL_ENTRY vtc_S564C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S564C2[0]),
  (VTBL_ENTRY)&_ZN6S564C2D1Ev,
  (VTBL_ENTRY)&_ZN6S564C2D0Ev,
  (VTBL_ENTRY)&_ZN6S564C52v4Ev,
  (VTBL_ENTRY)&_ZN6S564C52v5Ev,
  (VTBL_ENTRY)&_ZN6S564C52v6Ev,
  (VTBL_ENTRY)&_ZN6S564C52v7Ev,
  (VTBL_ENTRY)&_ZN6S564C52v8Ev,
  (VTBL_ENTRY)&_ZN6S564C52v9Ev,
  (VTBL_ENTRY)&_ZN6S564C53v10Ev,
  (VTBL_ENTRY)&_ZN6S564C53v11Ev,
  (VTBL_ENTRY)&_ZN6S564C53v12Ev,
  (VTBL_ENTRY)&_ZN6S564C53v13Ev,
  (VTBL_ENTRY)&_ZN6S564C53v14Ev,
  (VTBL_ENTRY)&_ZN6S564C53v15Ev,
  (VTBL_ENTRY)&_ZN6S564C53v16Ev,
  (VTBL_ENTRY)&_ZN6S564C53v17Ev,
  (VTBL_ENTRY)&_ZN6S564C53v18Ev,
  (VTBL_ENTRY)&_ZN6S564C53v19Ev,
  (VTBL_ENTRY)&_ZN6S564C53v20Ev,
  (VTBL_ENTRY)&_ZN6S564C53v21Ev,
  (VTBL_ENTRY)&_ZN6S564C53v22Ev,
  (VTBL_ENTRY)&_ZN6S564C53v23Ev,
  (VTBL_ENTRY)&_ZN6S564C53v24Ev,
  (VTBL_ENTRY)&_ZN6S564C53v25Ev,
  (VTBL_ENTRY)&_ZN6S564C53v26Ev,
  (VTBL_ENTRY)&_ZN6S564C53v27Ev,
  (VTBL_ENTRY)&_ZN6S564C53v28Ev,
  (VTBL_ENTRY)&_ZN6S564C53v29Ev,
  (VTBL_ENTRY)&_ZN6S564C53v30Ev,
  (VTBL_ENTRY)&_ZN6S564C53v31Ev,
  (VTBL_ENTRY)&_ZN6S564C53v32Ev,
  (VTBL_ENTRY)&_ZN6S564C53v33Ev,
  (VTBL_ENTRY)&_ZN6S564C53v34Ev,
  (VTBL_ENTRY)&_ZN6S564C53v35Ev,
  (VTBL_ENTRY)&_ZN6S564C53v36Ev,
  (VTBL_ENTRY)&_ZN6S564C53v37Ev,
  (VTBL_ENTRY)&_ZN6S564C53v38Ev,
  (VTBL_ENTRY)&_ZN6S564C53v39Ev,
  (VTBL_ENTRY)&_ZN6S564C53v40Ev,
  (VTBL_ENTRY)&_ZN6S564C53v41Ev,
  (VTBL_ENTRY)&_ZN6S564C53v42Ev,
  (VTBL_ENTRY)&_ZN6S564C53v43Ev,
  (VTBL_ENTRY)&_ZN6S564C53v44Ev,
  (VTBL_ENTRY)&_ZN6S564C53v45Ev,
  (VTBL_ENTRY)&_ZN6S564C53v46Ev,
  (VTBL_ENTRY)&_ZN6S564C53v47Ev,
  (VTBL_ENTRY)&_ZN6S564C53v48Ev,
  (VTBL_ENTRY)&_ZN6S564C53v49Ev,
  (VTBL_ENTRY)&_ZN6S564C53v50Ev,
  (VTBL_ENTRY)&_ZN6S564C53v51Ev,
  (VTBL_ENTRY)&_ZN6S564C53v52Ev,
  (VTBL_ENTRY)&_ZN6S564C53v53Ev,
  (VTBL_ENTRY)&_ZN6S564C53v54Ev,
  (VTBL_ENTRY)&_ZN6S564C53v55Ev,
  (VTBL_ENTRY)&_ZN6S564C53v56Ev,
  (VTBL_ENTRY)&_ZN6S564C53v57Ev,
  (VTBL_ENTRY)&_ZN6S564C53v58Ev,
  (VTBL_ENTRY)&_ZN6S564C53v59Ev,
  (VTBL_ENTRY)&_ZN6S564C53v60Ev,
  (VTBL_ENTRY)&_ZN6S564C53v61Ev,
  (VTBL_ENTRY)&_ZN6S564C53v62Ev,
  (VTBL_ENTRY)&_ZN6S564C53v63Ev,
  (VTBL_ENTRY)&_ZN6S564C53v64Ev,
  (VTBL_ENTRY)&_ZN6S564C53v65Ev,
  (VTBL_ENTRY)&_ZN6S564C53v66Ev,
  (VTBL_ENTRY)&_ZN6S564C53v67Ev,
  (VTBL_ENTRY)&_ZN6S564C43v68Ev,
  (VTBL_ENTRY)&_ZN6S564C43v69Ev,
  (VTBL_ENTRY)&_ZN6S564C43v70Ev,
  (VTBL_ENTRY)&_ZN6S564C43v71Ev,
  (VTBL_ENTRY)&_ZN6S564C43v72Ev,
  (VTBL_ENTRY)&_ZN6S564C43v73Ev,
  (VTBL_ENTRY)&_ZN6S564C43v74Ev,
  (VTBL_ENTRY)&_ZN6S564C43v75Ev,
  (VTBL_ENTRY)&_ZN6S564C43v76Ev,
  (VTBL_ENTRY)&_ZN6S564C43v77Ev,
  (VTBL_ENTRY)&_ZN6S564C43v78Ev,
  (VTBL_ENTRY)&_ZN6S564C43v79Ev,
  (VTBL_ENTRY)&_ZN6S564C43v80Ev,
  (VTBL_ENTRY)&_ZN6S564C43v81Ev,
  (VTBL_ENTRY)&_ZN6S564C43v82Ev,
  (VTBL_ENTRY)&_ZN6S564C43v83Ev,
  (VTBL_ENTRY)&_ZN6S564C43v84Ev,
  (VTBL_ENTRY)&_ZN6S564C43v85Ev,
  (VTBL_ENTRY)&_ZN6S564C43v86Ev,
  (VTBL_ENTRY)&_ZN6S564C43v87Ev,
  (VTBL_ENTRY)&_ZN6S564C43v88Ev,
  (VTBL_ENTRY)&_ZN6S564C43v89Ev,
  (VTBL_ENTRY)&_ZN6S564C43v90Ev,
  (VTBL_ENTRY)&_ZN6S564C43v91Ev,
  (VTBL_ENTRY)&_ZN6S564C43v92Ev,
  (VTBL_ENTRY)&_ZN6S564C43v93Ev,
  (VTBL_ENTRY)&_ZN6S564C43v94Ev,
  (VTBL_ENTRY)&_ZN6S564C33v95Ev,
  (VTBL_ENTRY)&_ZN6S564C33v96Ev,
  (VTBL_ENTRY)&_ZN6S564C33v97Ev,
  (VTBL_ENTRY)&_ZN6S564C33v98Ev,
  (VTBL_ENTRY)&_ZN6S564C33v99Ev,
  (VTBL_ENTRY)&_ZN6S564C34v100Ev,
  (VTBL_ENTRY)&_ZN6S564C34v101Ev,
  (VTBL_ENTRY)&_ZN6S564C34v102Ev,
  (VTBL_ENTRY)&_ZN6S564C34v103Ev,
  (VTBL_ENTRY)&_ZN6S564C34v104Ev,
  (VTBL_ENTRY)&_ZN6S564C34v105Ev,
  (VTBL_ENTRY)&_ZN6S564C34v106Ev,
  (VTBL_ENTRY)&_ZN6S564C34v107Ev,
  (VTBL_ENTRY)&_ZN6S564C34v108Ev,
  (VTBL_ENTRY)&_ZN6S564C34v109Ev,
  (VTBL_ENTRY)&_ZN6S564C34v110Ev,
  (VTBL_ENTRY)&_ZN6S564C34v111Ev,
  (VTBL_ENTRY)&_ZN6S564C34v112Ev,
  (VTBL_ENTRY)&_ZN6S564C24v113Ev,
  (VTBL_ENTRY)&_ZN6S564C24v114Ev,
  (VTBL_ENTRY)&_ZN6S564C24v115Ev,
  (VTBL_ENTRY)&_ZN6S564C24v116Ev,
  (VTBL_ENTRY)&_ZN6S564C24v117Ev,
  (VTBL_ENTRY)&_ZN6S564C24v118Ev,
  (VTBL_ENTRY)&_ZN6S564C24v119Ev,
};
extern VTBL_ENTRY _ZTI6S564C2[];
extern  VTBL_ENTRY _ZTV6S564C2[];
Class_Descriptor cd_S564C2 = {  "S564C2", // class name
  bases_S564C2, 3,
  &(vtc_S564C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,220), // object size
  NSPAIRA(_ZTI6S564C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S564C2),120, //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  S564C1  : S564C2 {
  char s564c1f0;
  ::S615C17_nt s564c1f1;
  void *s564c1f2;
  virtual  ~S564C1(); // _ZN6S564C1D1Ev
  virtual void  v1(); // _ZN6S564C12v1Ev
  virtual void  v2(); // _ZN6S564C12v2Ev
  virtual void  v3(); // _ZN6S564C12v3Ev
  S564C1(); // tgen
};
//SIG(1 S564C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v90 v91 v92 v93 v94 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 FC15{ BC16{ BC9}} Fi:1} vd v113 v114 v115 v116 v117 v118 v119 FC17{ BC18{ BC9}} Fi[2] Fi:1} vd v1 v2 v3 Fc FC6 Fp}


 S564C1 ::~S564C1(){ note_dtor("S564C1", this);}
void  S564C1 ::v1(){vfunc_called(this, "_ZN6S564C12v1Ev");}
void  S564C1 ::v2(){vfunc_called(this, "_ZN6S564C12v2Ev");}
void  S564C1 ::v3(){vfunc_called(this, "_ZN6S564C12v3Ev");}
S564C1 ::S564C1(){ note_ctor("S564C1", this);} // tgen

static void Test_S564C1()
{
  extern Class_Descriptor cd_S564C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,59)];
    init_test(&cd_S564C1, buf);
    S564C1 *dp, &lv = *(dp=new (buf) S564C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,232), "sizeof(S564C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S564C1)");
    check_base_class_offset(lv, (S564C5*)(S564C4*)(S564C3*)(S564C2*), 0, "S564C1");
    check_base_class_offset(lv, (S564C4*)(S564C3*)(S564C2*), 0, "S564C1");
    check_base_class_offset(lv, (S564C3*)(S564C2*), 0, "S564C1");
    check_base_class_offset(lv, (S564C2*), 0, "S564C1");
    check_field_offset(lv, s564c1f0, ABISELECT(281,217), "S564C1.s564c1f0");
    check_field_offset(lv, s564c1f1, ABISELECT(284,220), "S564C1.s564c1f1");
    check_field_offset(lv, s564c1f2, ABISELECT(296,228), "S564C1.s564c1f2");
    test_class_info(&lv, &cd_S564C1);
    dp->~S564C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS564C1(Test_S564C1, "S564C1", ABISELECT(304,232));

#else // __cplusplus

extern void _ZN6S564C1C1Ev();
extern void _ZN6S564C1D1Ev();
Name_Map name_map_S564C1[] = {
  NSPAIR(_ZN6S564C1C1Ev),
  NSPAIR(_ZN6S564C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S564C5;
extern VTBL_ENTRY _ZTI6S564C5[];
extern  VTBL_ENTRY _ZTV6S564C5[];
extern Class_Descriptor cd_S564C4;
extern VTBL_ENTRY _ZTI6S564C4[];
extern  VTBL_ENTRY _ZTV6S564C4[];
extern Class_Descriptor cd_S564C3;
extern VTBL_ENTRY _ZTI6S564C3[];
extern  VTBL_ENTRY _ZTV6S564C3[];
extern Class_Descriptor cd_S564C2;
extern VTBL_ENTRY _ZTI6S564C2[];
extern  VTBL_ENTRY _ZTV6S564C2[];
static Base_Class bases_S564C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S564C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S564C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S564C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S564C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S564C1[];
extern void _ZN6S564C1D1Ev();
extern void _ZN6S564C1D0Ev();
extern void _ZN6S564C52v4Ev();
extern void _ZN6S564C52v5Ev();
extern void _ZN6S564C52v6Ev();
extern void _ZN6S564C52v7Ev();
extern void _ZN6S564C52v8Ev();
extern void _ZN6S564C52v9Ev();
extern void _ZN6S564C53v10Ev();
extern void _ZN6S564C53v11Ev();
extern void _ZN6S564C53v12Ev();
extern void _ZN6S564C53v13Ev();
extern void _ZN6S564C53v14Ev();
extern void _ZN6S564C53v15Ev();
extern void _ZN6S564C53v16Ev();
extern void _ZN6S564C53v17Ev();
extern void _ZN6S564C53v18Ev();
extern void _ZN6S564C53v19Ev();
extern void _ZN6S564C53v20Ev();
extern void _ZN6S564C53v21Ev();
extern void _ZN6S564C53v22Ev();
extern void _ZN6S564C53v23Ev();
extern void _ZN6S564C53v24Ev();
extern void _ZN6S564C53v25Ev();
extern void _ZN6S564C53v26Ev();
extern void _ZN6S564C53v27Ev();
extern void _ZN6S564C53v28Ev();
extern void _ZN6S564C53v29Ev();
extern void _ZN6S564C53v30Ev();
extern void _ZN6S564C53v31Ev();
extern void _ZN6S564C53v32Ev();
extern void _ZN6S564C53v33Ev();
extern void _ZN6S564C53v34Ev();
extern void _ZN6S564C53v35Ev();
extern void _ZN6S564C53v36Ev();
extern void _ZN6S564C53v37Ev();
extern void _ZN6S564C53v38Ev();
extern void _ZN6S564C53v39Ev();
extern void _ZN6S564C53v40Ev();
extern void _ZN6S564C53v41Ev();
extern void _ZN6S564C53v42Ev();
extern void _ZN6S564C53v43Ev();
extern void _ZN6S564C53v44Ev();
extern void _ZN6S564C53v45Ev();
extern void _ZN6S564C53v46Ev();
extern void _ZN6S564C53v47Ev();
extern void _ZN6S564C53v48Ev();
extern void _ZN6S564C53v49Ev();
extern void _ZN6S564C53v50Ev();
extern void _ZN6S564C53v51Ev();
extern void _ZN6S564C53v52Ev();
extern void _ZN6S564C53v53Ev();
extern void _ZN6S564C53v54Ev();
extern void _ZN6S564C53v55Ev();
extern void _ZN6S564C53v56Ev();
extern void _ZN6S564C53v57Ev();
extern void _ZN6S564C53v58Ev();
extern void _ZN6S564C53v59Ev();
extern void _ZN6S564C53v60Ev();
extern void _ZN6S564C53v61Ev();
extern void _ZN6S564C53v62Ev();
extern void _ZN6S564C53v63Ev();
extern void _ZN6S564C53v64Ev();
extern void _ZN6S564C53v65Ev();
extern void _ZN6S564C53v66Ev();
extern void _ZN6S564C53v67Ev();
extern void _ZN6S564C43v68Ev();
extern void _ZN6S564C43v69Ev();
extern void _ZN6S564C43v70Ev();
extern void _ZN6S564C43v71Ev();
extern void _ZN6S564C43v72Ev();
extern void _ZN6S564C43v73Ev();
extern void _ZN6S564C43v74Ev();
extern void _ZN6S564C43v75Ev();
extern void _ZN6S564C43v76Ev();
extern void _ZN6S564C43v77Ev();
extern void _ZN6S564C43v78Ev();
extern void _ZN6S564C43v79Ev();
extern void _ZN6S564C43v80Ev();
extern void _ZN6S564C43v81Ev();
extern void _ZN6S564C43v82Ev();
extern void _ZN6S564C43v83Ev();
extern void _ZN6S564C43v84Ev();
extern void _ZN6S564C43v85Ev();
extern void _ZN6S564C43v86Ev();
extern void _ZN6S564C43v87Ev();
extern void _ZN6S564C43v88Ev();
extern void _ZN6S564C43v89Ev();
extern void _ZN6S564C43v90Ev();
extern void _ZN6S564C43v91Ev();
extern void _ZN6S564C43v92Ev();
extern void _ZN6S564C43v93Ev();
extern void _ZN6S564C43v94Ev();
extern void _ZN6S564C33v95Ev();
extern void _ZN6S564C33v96Ev();
extern void _ZN6S564C33v97Ev();
extern void _ZN6S564C33v98Ev();
extern void _ZN6S564C33v99Ev();
extern void _ZN6S564C34v100Ev();
extern void _ZN6S564C34v101Ev();
extern void _ZN6S564C34v102Ev();
extern void _ZN6S564C34v103Ev();
extern void _ZN6S564C34v104Ev();
extern void _ZN6S564C34v105Ev();
extern void _ZN6S564C34v106Ev();
extern void _ZN6S564C34v107Ev();
extern void _ZN6S564C34v108Ev();
extern void _ZN6S564C34v109Ev();
extern void _ZN6S564C34v110Ev();
extern void _ZN6S564C34v111Ev();
extern void _ZN6S564C34v112Ev();
extern void _ZN6S564C24v113Ev();
extern void _ZN6S564C24v114Ev();
extern void _ZN6S564C24v115Ev();
extern void _ZN6S564C24v116Ev();
extern void _ZN6S564C24v117Ev();
extern void _ZN6S564C24v118Ev();
extern void _ZN6S564C24v119Ev();
extern void _ZN6S564C12v1Ev();
extern void _ZN6S564C12v2Ev();
extern void _ZN6S564C12v3Ev();
static  VTBL_ENTRY vtc_S564C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S564C1[0]),
  (VTBL_ENTRY)&_ZN6S564C1D1Ev,
  (VTBL_ENTRY)&_ZN6S564C1D0Ev,
  (VTBL_ENTRY)&_ZN6S564C52v4Ev,
  (VTBL_ENTRY)&_ZN6S564C52v5Ev,
  (VTBL_ENTRY)&_ZN6S564C52v6Ev,
  (VTBL_ENTRY)&_ZN6S564C52v7Ev,
  (VTBL_ENTRY)&_ZN6S564C52v8Ev,
  (VTBL_ENTRY)&_ZN6S564C52v9Ev,
  (VTBL_ENTRY)&_ZN6S564C53v10Ev,
  (VTBL_ENTRY)&_ZN6S564C53v11Ev,
  (VTBL_ENTRY)&_ZN6S564C53v12Ev,
  (VTBL_ENTRY)&_ZN6S564C53v13Ev,
  (VTBL_ENTRY)&_ZN6S564C53v14Ev,
  (VTBL_ENTRY)&_ZN6S564C53v15Ev,
  (VTBL_ENTRY)&_ZN6S564C53v16Ev,
  (VTBL_ENTRY)&_ZN6S564C53v17Ev,
  (VTBL_ENTRY)&_ZN6S564C53v18Ev,
  (VTBL_ENTRY)&_ZN6S564C53v19Ev,
  (VTBL_ENTRY)&_ZN6S564C53v20Ev,
  (VTBL_ENTRY)&_ZN6S564C53v21Ev,
  (VTBL_ENTRY)&_ZN6S564C53v22Ev,
  (VTBL_ENTRY)&_ZN6S564C53v23Ev,
  (VTBL_ENTRY)&_ZN6S564C53v24Ev,
  (VTBL_ENTRY)&_ZN6S564C53v25Ev,
  (VTBL_ENTRY)&_ZN6S564C53v26Ev,
  (VTBL_ENTRY)&_ZN6S564C53v27Ev,
  (VTBL_ENTRY)&_ZN6S564C53v28Ev,
  (VTBL_ENTRY)&_ZN6S564C53v29Ev,
  (VTBL_ENTRY)&_ZN6S564C53v30Ev,
  (VTBL_ENTRY)&_ZN6S564C53v31Ev,
  (VTBL_ENTRY)&_ZN6S564C53v32Ev,
  (VTBL_ENTRY)&_ZN6S564C53v33Ev,
  (VTBL_ENTRY)&_ZN6S564C53v34Ev,
  (VTBL_ENTRY)&_ZN6S564C53v35Ev,
  (VTBL_ENTRY)&_ZN6S564C53v36Ev,
  (VTBL_ENTRY)&_ZN6S564C53v37Ev,
  (VTBL_ENTRY)&_ZN6S564C53v38Ev,
  (VTBL_ENTRY)&_ZN6S564C53v39Ev,
  (VTBL_ENTRY)&_ZN6S564C53v40Ev,
  (VTBL_ENTRY)&_ZN6S564C53v41Ev,
  (VTBL_ENTRY)&_ZN6S564C53v42Ev,
  (VTBL_ENTRY)&_ZN6S564C53v43Ev,
  (VTBL_ENTRY)&_ZN6S564C53v44Ev,
  (VTBL_ENTRY)&_ZN6S564C53v45Ev,
  (VTBL_ENTRY)&_ZN6S564C53v46Ev,
  (VTBL_ENTRY)&_ZN6S564C53v47Ev,
  (VTBL_ENTRY)&_ZN6S564C53v48Ev,
  (VTBL_ENTRY)&_ZN6S564C53v49Ev,
  (VTBL_ENTRY)&_ZN6S564C53v50Ev,
  (VTBL_ENTRY)&_ZN6S564C53v51Ev,
  (VTBL_ENTRY)&_ZN6S564C53v52Ev,
  (VTBL_ENTRY)&_ZN6S564C53v53Ev,
  (VTBL_ENTRY)&_ZN6S564C53v54Ev,
  (VTBL_ENTRY)&_ZN6S564C53v55Ev,
  (VTBL_ENTRY)&_ZN6S564C53v56Ev,
  (VTBL_ENTRY)&_ZN6S564C53v57Ev,
  (VTBL_ENTRY)&_ZN6S564C53v58Ev,
  (VTBL_ENTRY)&_ZN6S564C53v59Ev,
  (VTBL_ENTRY)&_ZN6S564C53v60Ev,
  (VTBL_ENTRY)&_ZN6S564C53v61Ev,
  (VTBL_ENTRY)&_ZN6S564C53v62Ev,
  (VTBL_ENTRY)&_ZN6S564C53v63Ev,
  (VTBL_ENTRY)&_ZN6S564C53v64Ev,
  (VTBL_ENTRY)&_ZN6S564C53v65Ev,
  (VTBL_ENTRY)&_ZN6S564C53v66Ev,
  (VTBL_ENTRY)&_ZN6S564C53v67Ev,
  (VTBL_ENTRY)&_ZN6S564C43v68Ev,
  (VTBL_ENTRY)&_ZN6S564C43v69Ev,
  (VTBL_ENTRY)&_ZN6S564C43v70Ev,
  (VTBL_ENTRY)&_ZN6S564C43v71Ev,
  (VTBL_ENTRY)&_ZN6S564C43v72Ev,
  (VTBL_ENTRY)&_ZN6S564C43v73Ev,
  (VTBL_ENTRY)&_ZN6S564C43v74Ev,
  (VTBL_ENTRY)&_ZN6S564C43v75Ev,
  (VTBL_ENTRY)&_ZN6S564C43v76Ev,
  (VTBL_ENTRY)&_ZN6S564C43v77Ev,
  (VTBL_ENTRY)&_ZN6S564C43v78Ev,
  (VTBL_ENTRY)&_ZN6S564C43v79Ev,
  (VTBL_ENTRY)&_ZN6S564C43v80Ev,
  (VTBL_ENTRY)&_ZN6S564C43v81Ev,
  (VTBL_ENTRY)&_ZN6S564C43v82Ev,
  (VTBL_ENTRY)&_ZN6S564C43v83Ev,
  (VTBL_ENTRY)&_ZN6S564C43v84Ev,
  (VTBL_ENTRY)&_ZN6S564C43v85Ev,
  (VTBL_ENTRY)&_ZN6S564C43v86Ev,
  (VTBL_ENTRY)&_ZN6S564C43v87Ev,
  (VTBL_ENTRY)&_ZN6S564C43v88Ev,
  (VTBL_ENTRY)&_ZN6S564C43v89Ev,
  (VTBL_ENTRY)&_ZN6S564C43v90Ev,
  (VTBL_ENTRY)&_ZN6S564C43v91Ev,
  (VTBL_ENTRY)&_ZN6S564C43v92Ev,
  (VTBL_ENTRY)&_ZN6S564C43v93Ev,
  (VTBL_ENTRY)&_ZN6S564C43v94Ev,
  (VTBL_ENTRY)&_ZN6S564C33v95Ev,
  (VTBL_ENTRY)&_ZN6S564C33v96Ev,
  (VTBL_ENTRY)&_ZN6S564C33v97Ev,
  (VTBL_ENTRY)&_ZN6S564C33v98Ev,
  (VTBL_ENTRY)&_ZN6S564C33v99Ev,
  (VTBL_ENTRY)&_ZN6S564C34v100Ev,
  (VTBL_ENTRY)&_ZN6S564C34v101Ev,
  (VTBL_ENTRY)&_ZN6S564C34v102Ev,
  (VTBL_ENTRY)&_ZN6S564C34v103Ev,
  (VTBL_ENTRY)&_ZN6S564C34v104Ev,
  (VTBL_ENTRY)&_ZN6S564C34v105Ev,
  (VTBL_ENTRY)&_ZN6S564C34v106Ev,
  (VTBL_ENTRY)&_ZN6S564C34v107Ev,
  (VTBL_ENTRY)&_ZN6S564C34v108Ev,
  (VTBL_ENTRY)&_ZN6S564C34v109Ev,
  (VTBL_ENTRY)&_ZN6S564C34v110Ev,
  (VTBL_ENTRY)&_ZN6S564C34v111Ev,
  (VTBL_ENTRY)&_ZN6S564C34v112Ev,
  (VTBL_ENTRY)&_ZN6S564C24v113Ev,
  (VTBL_ENTRY)&_ZN6S564C24v114Ev,
  (VTBL_ENTRY)&_ZN6S564C24v115Ev,
  (VTBL_ENTRY)&_ZN6S564C24v116Ev,
  (VTBL_ENTRY)&_ZN6S564C24v117Ev,
  (VTBL_ENTRY)&_ZN6S564C24v118Ev,
  (VTBL_ENTRY)&_ZN6S564C24v119Ev,
  (VTBL_ENTRY)&_ZN6S564C12v1Ev,
  (VTBL_ENTRY)&_ZN6S564C12v2Ev,
  (VTBL_ENTRY)&_ZN6S564C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S564C1[];
extern  VTBL_ENTRY _ZTV6S564C1[];
Class_Descriptor cd_S564C1 = {  "S564C1", // class name
  bases_S564C1, 4,
  &(vtc_S564C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,232), // object size
  NSPAIRA(_ZTI6S564C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S564C1),123, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S565C5  {
  int s565c5f0;
  __tsi64 s565c5f1;
  void *s565c5f2[4];
  int s565c5f3[2];
  void *s565c5f4;
  ::S615C17_nt s565c5f5;
  void *s565c5f6[2];
  virtual  ~S565C5(); // _ZN6S565C5D1Ev
  virtual void  v4(); // _ZN6S565C52v4Ev
  virtual void  v5(); // _ZN6S565C52v5Ev
  virtual void  v6(); // _ZN6S565C52v6Ev
  virtual void  v7(); // _ZN6S565C52v7Ev
  virtual void  v8(); // _ZN6S565C52v8Ev
  virtual void  v9(); // _ZN6S565C52v9Ev
  virtual void  v10(); // _ZN6S565C53v10Ev
  virtual void  v11(); // _ZN6S565C53v11Ev
  virtual void  v12(); // _ZN6S565C53v12Ev
  virtual void  v13(); // _ZN6S565C53v13Ev
  virtual void  v14(); // _ZN6S565C53v14Ev
  virtual void  v15(); // _ZN6S565C53v15Ev
  virtual void  v16(); // _ZN6S565C53v16Ev
  virtual void  v17(); // _ZN6S565C53v17Ev
  virtual void  v18(); // _ZN6S565C53v18Ev
  virtual void  v19(); // _ZN6S565C53v19Ev
  virtual void  v20(); // _ZN6S565C53v20Ev
  virtual void  v21(); // _ZN6S565C53v21Ev
  virtual void  v22(); // _ZN6S565C53v22Ev
  virtual void  v23(); // _ZN6S565C53v23Ev
  virtual void  v24(); // _ZN6S565C53v24Ev
  virtual void  v25(); // _ZN6S565C53v25Ev
  virtual void  v26(); // _ZN6S565C53v26Ev
  virtual void  v27(); // _ZN6S565C53v27Ev
  virtual void  v28(); // _ZN6S565C53v28Ev
  virtual void  v29(); // _ZN6S565C53v29Ev
  virtual void  v30(); // _ZN6S565C53v30Ev
  virtual void  v31(); // _ZN6S565C53v31Ev
  virtual void  v32(); // _ZN6S565C53v32Ev
  virtual void  v33(); // _ZN6S565C53v33Ev
  virtual void  v34(); // _ZN6S565C53v34Ev
  virtual void  v35(); // _ZN6S565C53v35Ev
  virtual void  v36(); // _ZN6S565C53v36Ev
  virtual void  v37(); // _ZN6S565C53v37Ev
  virtual void  v38(); // _ZN6S565C53v38Ev
  virtual void  v39(); // _ZN6S565C53v39Ev
  virtual void  v40(); // _ZN6S565C53v40Ev
  virtual void  v41(); // _ZN6S565C53v41Ev
  virtual void  v42(); // _ZN6S565C53v42Ev
  virtual void  v43(); // _ZN6S565C53v43Ev
  virtual void  v44(); // _ZN6S565C53v44Ev
  virtual void  v45(); // _ZN6S565C53v45Ev
  virtual void  v46(); // _ZN6S565C53v46Ev
  virtual void  v47(); // _ZN6S565C53v47Ev
  virtual void  v48(); // _ZN6S565C53v48Ev
  virtual void  v49(); // _ZN6S565C53v49Ev
  virtual void  v50(); // _ZN6S565C53v50Ev
  virtual void  v51(); // _ZN6S565C53v51Ev
  virtual void  v52(); // _ZN6S565C53v52Ev
  virtual void  v53(); // _ZN6S565C53v53Ev
  virtual void  v54(); // _ZN6S565C53v54Ev
  virtual void  v55(); // _ZN6S565C53v55Ev
  virtual void  v56(); // _ZN6S565C53v56Ev
  virtual void  v57(); // _ZN6S565C53v57Ev
  virtual void  v58(); // _ZN6S565C53v58Ev
  virtual void  v59(); // _ZN6S565C53v59Ev
  virtual void  v60(); // _ZN6S565C53v60Ev
  virtual void  v61(); // _ZN6S565C53v61Ev
  virtual void  v62(); // _ZN6S565C53v62Ev
  virtual void  v63(); // _ZN6S565C53v63Ev
  virtual void  v64(); // _ZN6S565C53v64Ev
  virtual void  v65(); // _ZN6S565C53v65Ev
  virtual void  v66(); // _ZN6S565C53v66Ev
  virtual void  v67(); // _ZN6S565C53v67Ev
  S565C5(); // tgen
};
//SIG(-1 S565C5) 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]}


 S565C5 ::~S565C5(){ note_dtor("S565C5", this);}
void  S565C5 ::v4(){vfunc_called(this, "_ZN6S565C52v4Ev");}
void  S565C5 ::v5(){vfunc_called(this, "_ZN6S565C52v5Ev");}
void  S565C5 ::v6(){vfunc_called(this, "_ZN6S565C52v6Ev");}
void  S565C5 ::v7(){vfunc_called(this, "_ZN6S565C52v7Ev");}
void  S565C5 ::v8(){vfunc_called(this, "_ZN6S565C52v8Ev");}
void  S565C5 ::v9(){vfunc_called(this, "_ZN6S565C52v9Ev");}
void  S565C5 ::v10(){vfunc_called(this, "_ZN6S565C53v10Ev");}
void  S565C5 ::v11(){vfunc_called(this, "_ZN6S565C53v11Ev");}
void  S565C5 ::v12(){vfunc_called(this, "_ZN6S565C53v12Ev");}
void  S565C5 ::v13(){vfunc_called(this, "_ZN6S565C53v13Ev");}
void  S565C5 ::v14(){vfunc_called(this, "_ZN6S565C53v14Ev");}
void  S565C5 ::v15(){vfunc_called(this, "_ZN6S565C53v15Ev");}
void  S565C5 ::v16(){vfunc_called(this, "_ZN6S565C53v16Ev");}
void  S565C5 ::v17(){vfunc_called(this, "_ZN6S565C53v17Ev");}
void  S565C5 ::v18(){vfunc_called(this, "_ZN6S565C53v18Ev");}
void  S565C5 ::v19(){vfunc_called(this, "_ZN6S565C53v19Ev");}
void  S565C5 ::v20(){vfunc_called(this, "_ZN6S565C53v20Ev");}
void  S565C5 ::v21(){vfunc_called(this, "_ZN6S565C53v21Ev");}
void  S565C5 ::v22(){vfunc_called(this, "_ZN6S565C53v22Ev");}
void  S565C5 ::v23(){vfunc_called(this, "_ZN6S565C53v23Ev");}
void  S565C5 ::v24(){vfunc_called(this, "_ZN6S565C53v24Ev");}
void  S565C5 ::v25(){vfunc_called(this, "_ZN6S565C53v25Ev");}
void  S565C5 ::v26(){vfunc_called(this, "_ZN6S565C53v26Ev");}
void  S565C5 ::v27(){vfunc_called(this, "_ZN6S565C53v27Ev");}
void  S565C5 ::v28(){vfunc_called(this, "_ZN6S565C53v28Ev");}
void  S565C5 ::v29(){vfunc_called(this, "_ZN6S565C53v29Ev");}
void  S565C5 ::v30(){vfunc_called(this, "_ZN6S565C53v30Ev");}
void  S565C5 ::v31(){vfunc_called(this, "_ZN6S565C53v31Ev");}
void  S565C5 ::v32(){vfunc_called(this, "_ZN6S565C53v32Ev");}
void  S565C5 ::v33(){vfunc_called(this, "_ZN6S565C53v33Ev");}
void  S565C5 ::v34(){vfunc_called(this, "_ZN6S565C53v34Ev");}
void  S565C5 ::v35(){vfunc_called(this, "_ZN6S565C53v35Ev");}
void  S565C5 ::v36(){vfunc_called(this, "_ZN6S565C53v36Ev");}
void  S565C5 ::v37(){vfunc_called(this, "_ZN6S565C53v37Ev");}
void  S565C5 ::v38(){vfunc_called(this, "_ZN6S565C53v38Ev");}
void  S565C5 ::v39(){vfunc_called(this, "_ZN6S565C53v39Ev");}
void  S565C5 ::v40(){vfunc_called(this, "_ZN6S565C53v40Ev");}
void  S565C5 ::v41(){vfunc_called(this, "_ZN6S565C53v41Ev");}
void  S565C5 ::v42(){vfunc_called(this, "_ZN6S565C53v42Ev");}
void  S565C5 ::v43(){vfunc_called(this, "_ZN6S565C53v43Ev");}
void  S565C5 ::v44(){vfunc_called(this, "_ZN6S565C53v44Ev");}
void  S565C5 ::v45(){vfunc_called(this, "_ZN6S565C53v45Ev");}
void  S565C5 ::v46(){vfunc_called(this, "_ZN6S565C53v46Ev");}
void  S565C5 ::v47(){vfunc_called(this, "_ZN6S565C53v47Ev");}
void  S565C5 ::v48(){vfunc_called(this, "_ZN6S565C53v48Ev");}
void  S565C5 ::v49(){vfunc_called(this, "_ZN6S565C53v49Ev");}
void  S565C5 ::v50(){vfunc_called(this, "_ZN6S565C53v50Ev");}
void  S565C5 ::v51(){vfunc_called(this, "_ZN6S565C53v51Ev");}
void  S565C5 ::v52(){vfunc_called(this, "_ZN6S565C53v52Ev");}
void  S565C5 ::v53(){vfunc_called(this, "_ZN6S565C53v53Ev");}
void  S565C5 ::v54(){vfunc_called(this, "_ZN6S565C53v54Ev");}
void  S565C5 ::v55(){vfunc_called(this, "_ZN6S565C53v55Ev");}
void  S565C5 ::v56(){vfunc_called(this, "_ZN6S565C53v56Ev");}
void  S565C5 ::v57(){vfunc_called(this, "_ZN6S565C53v57Ev");}
void  S565C5 ::v58(){vfunc_called(this, "_ZN6S565C53v58Ev");}
void  S565C5 ::v59(){vfunc_called(this, "_ZN6S565C53v59Ev");}
void  S565C5 ::v60(){vfunc_called(this, "_ZN6S565C53v60Ev");}
void  S565C5 ::v61(){vfunc_called(this, "_ZN6S565C53v61Ev");}
void  S565C5 ::v62(){vfunc_called(this, "_ZN6S565C53v62Ev");}
void  S565C5 ::v63(){vfunc_called(this, "_ZN6S565C53v63Ev");}
void  S565C5 ::v64(){vfunc_called(this, "_ZN6S565C53v64Ev");}
void  S565C5 ::v65(){vfunc_called(this, "_ZN6S565C53v65Ev");}
void  S565C5 ::v66(){vfunc_called(this, "_ZN6S565C53v66Ev");}
void  S565C5 ::v67(){vfunc_called(this, "_ZN6S565C53v67Ev");}
S565C5 ::S565C5(){ note_ctor("S565C5", this);} // tgen

static void Test_S565C5()
{
  extern Class_Descriptor cd_S565C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S565C5, buf);
    S565C5 *dp, &lv = *(dp=new (buf) S565C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S565C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S565C5)");
    check_field_offset(lv, s565c5f0, ABISELECT(8,4), "S565C5.s565c5f0");
    check_field_offset(lv, s565c5f1, ABISELECT(16,8), "S565C5.s565c5f1");
    check_field_offset(lv, s565c5f2, ABISELECT(24,16), "S565C5.s565c5f2");
    check_field_offset(lv, s565c5f3, ABISELECT(56,32), "S565C5.s565c5f3");
    check_field_offset(lv, s565c5f4, ABISELECT(64,40), "S565C5.s565c5f4");
    check_field_offset(lv, s565c5f5, ABISELECT(72,44), "S565C5.s565c5f5");
    check_field_offset(lv, s565c5f6, ABISELECT(80,52), "S565C5.s565c5f6");
    test_class_info(&lv, &cd_S565C5);
    dp->~S565C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS565C5(Test_S565C5, "S565C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S565C5C1Ev();
extern void _ZN6S565C5D1Ev();
Name_Map name_map_S565C5[] = {
  NSPAIR(_ZN6S565C5C1Ev),
  NSPAIR(_ZN6S565C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S565C5[];
extern void _ZN6S565C5D1Ev();
extern void _ZN6S565C5D0Ev();
extern void _ZN6S565C52v4Ev();
extern void _ZN6S565C52v5Ev();
extern void _ZN6S565C52v6Ev();
extern void _ZN6S565C52v7Ev();
extern void _ZN6S565C52v8Ev();
extern void _ZN6S565C52v9Ev();
extern void _ZN6S565C53v10Ev();
extern void _ZN6S565C53v11Ev();
extern void _ZN6S565C53v12Ev();
extern void _ZN6S565C53v13Ev();
extern void _ZN6S565C53v14Ev();
extern void _ZN6S565C53v15Ev();
extern void _ZN6S565C53v16Ev();
extern void _ZN6S565C53v17Ev();
extern void _ZN6S565C53v18Ev();
extern void _ZN6S565C53v19Ev();
extern void _ZN6S565C53v20Ev();
extern void _ZN6S565C53v21Ev();
extern void _ZN6S565C53v22Ev();
extern void _ZN6S565C53v23Ev();
extern void _ZN6S565C53v24Ev();
extern void _ZN6S565C53v25Ev();
extern void _ZN6S565C53v26Ev();
extern void _ZN6S565C53v27Ev();
extern void _ZN6S565C53v28Ev();
extern void _ZN6S565C53v29Ev();
extern void _ZN6S565C53v30Ev();
extern void _ZN6S565C53v31Ev();
extern void _ZN6S565C53v32Ev();
extern void _ZN6S565C53v33Ev();
extern void _ZN6S565C53v34Ev();
extern void _ZN6S565C53v35Ev();
extern void _ZN6S565C53v36Ev();
extern void _ZN6S565C53v37Ev();
extern void _ZN6S565C53v38Ev();
extern void _ZN6S565C53v39Ev();
extern void _ZN6S565C53v40Ev();
extern void _ZN6S565C53v41Ev();
extern void _ZN6S565C53v42Ev();
extern void _ZN6S565C53v43Ev();
extern void _ZN6S565C53v44Ev();
extern void _ZN6S565C53v45Ev();
extern void _ZN6S565C53v46Ev();
extern void _ZN6S565C53v47Ev();
extern void _ZN6S565C53v48Ev();
extern void _ZN6S565C53v49Ev();
extern void _ZN6S565C53v50Ev();
extern void _ZN6S565C53v51Ev();
extern void _ZN6S565C53v52Ev();
extern void _ZN6S565C53v53Ev();
extern void _ZN6S565C53v54Ev();
extern void _ZN6S565C53v55Ev();
extern void _ZN6S565C53v56Ev();
extern void _ZN6S565C53v57Ev();
extern void _ZN6S565C53v58Ev();
extern void _ZN6S565C53v59Ev();
extern void _ZN6S565C53v60Ev();
extern void _ZN6S565C53v61Ev();
extern void _ZN6S565C53v62Ev();
extern void _ZN6S565C53v63Ev();
extern void _ZN6S565C53v64Ev();
extern void _ZN6S565C53v65Ev();
extern void _ZN6S565C53v66Ev();
extern void _ZN6S565C53v67Ev();
static  VTBL_ENTRY vtc_S565C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S565C5[0]),
  (VTBL_ENTRY)&_ZN6S565C5D1Ev,
  (VTBL_ENTRY)&_ZN6S565C5D0Ev,
  (VTBL_ENTRY)&_ZN6S565C52v4Ev,
  (VTBL_ENTRY)&_ZN6S565C52v5Ev,
  (VTBL_ENTRY)&_ZN6S565C52v6Ev,
  (VTBL_ENTRY)&_ZN6S565C52v7Ev,
  (VTBL_ENTRY)&_ZN6S565C52v8Ev,
  (VTBL_ENTRY)&_ZN6S565C52v9Ev,
  (VTBL_ENTRY)&_ZN6S565C53v10Ev,
  (VTBL_ENTRY)&_ZN6S565C53v11Ev,
  (VTBL_ENTRY)&_ZN6S565C53v12Ev,
  (VTBL_ENTRY)&_ZN6S565C53v13Ev,
  (VTBL_ENTRY)&_ZN6S565C53v14Ev,
  (VTBL_ENTRY)&_ZN6S565C53v15Ev,
  (VTBL_ENTRY)&_ZN6S565C53v16Ev,
  (VTBL_ENTRY)&_ZN6S565C53v17Ev,
  (VTBL_ENTRY)&_ZN6S565C53v18Ev,
  (VTBL_ENTRY)&_ZN6S565C53v19Ev,
  (VTBL_ENTRY)&_ZN6S565C53v20Ev,
  (VTBL_ENTRY)&_ZN6S565C53v21Ev,
  (VTBL_ENTRY)&_ZN6S565C53v22Ev,
  (VTBL_ENTRY)&_ZN6S565C53v23Ev,
  (VTBL_ENTRY)&_ZN6S565C53v24Ev,
  (VTBL_ENTRY)&_ZN6S565C53v25Ev,
  (VTBL_ENTRY)&_ZN6S565C53v26Ev,
  (VTBL_ENTRY)&_ZN6S565C53v27Ev,
  (VTBL_ENTRY)&_ZN6S565C53v28Ev,
  (VTBL_ENTRY)&_ZN6S565C53v29Ev,
  (VTBL_ENTRY)&_ZN6S565C53v30Ev,
  (VTBL_ENTRY)&_ZN6S565C53v31Ev,
  (VTBL_ENTRY)&_ZN6S565C53v32Ev,
  (VTBL_ENTRY)&_ZN6S565C53v33Ev,
  (VTBL_ENTRY)&_ZN6S565C53v34Ev,
  (VTBL_ENTRY)&_ZN6S565C53v35Ev,
  (VTBL_ENTRY)&_ZN6S565C53v36Ev,
  (VTBL_ENTRY)&_ZN6S565C53v37Ev,
  (VTBL_ENTRY)&_ZN6S565C53v38Ev,
  (VTBL_ENTRY)&_ZN6S565C53v39Ev,
  (VTBL_ENTRY)&_ZN6S565C53v40Ev,
  (VTBL_ENTRY)&_ZN6S565C53v41Ev,
  (VTBL_ENTRY)&_ZN6S565C53v42Ev,
  (VTBL_ENTRY)&_ZN6S565C53v43Ev,
  (VTBL_ENTRY)&_ZN6S565C53v44Ev,
  (VTBL_ENTRY)&_ZN6S565C53v45Ev,
  (VTBL_ENTRY)&_ZN6S565C53v46Ev,
  (VTBL_ENTRY)&_ZN6S565C53v47Ev,
  (VTBL_ENTRY)&_ZN6S565C53v48Ev,
  (VTBL_ENTRY)&_ZN6S565C53v49Ev,
  (VTBL_ENTRY)&_ZN6S565C53v50Ev,
  (VTBL_ENTRY)&_ZN6S565C53v51Ev,
  (VTBL_ENTRY)&_ZN6S565C53v52Ev,
  (VTBL_ENTRY)&_ZN6S565C53v53Ev,
  (VTBL_ENTRY)&_ZN6S565C53v54Ev,
  (VTBL_ENTRY)&_ZN6S565C53v55Ev,
  (VTBL_ENTRY)&_ZN6S565C53v56Ev,
  (VTBL_ENTRY)&_ZN6S565C53v57Ev,
  (VTBL_ENTRY)&_ZN6S565C53v58Ev,
  (VTBL_ENTRY)&_ZN6S565C53v59Ev,
  (VTBL_ENTRY)&_ZN6S565C53v60Ev,
  (VTBL_ENTRY)&_ZN6S565C53v61Ev,
  (VTBL_ENTRY)&_ZN6S565C53v62Ev,
  (VTBL_ENTRY)&_ZN6S565C53v63Ev,
  (VTBL_ENTRY)&_ZN6S565C53v64Ev,
  (VTBL_ENTRY)&_ZN6S565C53v65Ev,
  (VTBL_ENTRY)&_ZN6S565C53v66Ev,
  (VTBL_ENTRY)&_ZN6S565C53v67Ev,
};
extern VTBL_ENTRY _ZTI6S565C5[];
extern  VTBL_ENTRY _ZTV6S565C5[];
Class_Descriptor cd_S565C5 = {  "S565C5", // class name
  0,0,//no base classes
  &(vtc_S565C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S565C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S565C5),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  S565C4  : S565C5 {
  void *s565c4f0;
  ::S1542C26 s565c4f1;
  ::S615C17_nt s565c4f2;
  ::S1542C22_nt s565c4f3;
  ::S615C12_nt s565c4f4;
  int s565c4f5;
  unsigned int s565c4f6:1;
  unsigned int s565c4f7:1;
  unsigned int s565c4f8:1;
  unsigned int s565c4f9:1;
  int s565c4f10[11];
  virtual  ~S565C4(); // _ZN6S565C4D1Ev
  virtual void  v68(); // _ZN6S565C43v68Ev
  virtual void  v69(); // _ZN6S565C43v69Ev
  virtual void  v70(); // _ZN6S565C43v70Ev
  virtual void  v71(); // _ZN6S565C43v71Ev
  virtual void  v72(); // _ZN6S565C43v72Ev
  virtual void  v73(); // _ZN6S565C43v73Ev
  virtual void  v74(); // _ZN6S565C43v74Ev
  virtual void  v75(); // _ZN6S565C43v75Ev
  virtual void  v76(); // _ZN6S565C43v76Ev
  virtual void  v77(); // _ZN6S565C43v77Ev
  virtual void  v78(); // _ZN6S565C43v78Ev
  virtual void  v79(); // _ZN6S565C43v79Ev
  virtual void  v80(); // _ZN6S565C43v80Ev
  virtual void  v81(); // _ZN6S565C43v81Ev
  virtual void  v82(); // _ZN6S565C43v82Ev
  virtual void  v83(); // _ZN6S565C43v83Ev
  virtual void  v84(); // _ZN6S565C43v84Ev
  virtual void  v85(); // _ZN6S565C43v85Ev
  virtual void  v86(); // _ZN6S565C43v86Ev
  virtual void  v87(); // _ZN6S565C43v87Ev
  virtual void  v88(); // _ZN6S565C43v88Ev
  virtual void  v89(); // _ZN6S565C43v89Ev
  virtual void  v90(); // _ZN6S565C43v90Ev
  virtual void  v91(); // _ZN6S565C43v91Ev
  virtual void  v92(); // _ZN6S565C43v92Ev
  virtual void  v93(); // _ZN6S565C43v93Ev
  virtual void  v94(); // _ZN6S565C43v94Ev
  S565C4(); // tgen
};
//SIG(-1 S565C4) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S565C4 ::~S565C4(){ note_dtor("S565C4", this);}
void  S565C4 ::v68(){vfunc_called(this, "_ZN6S565C43v68Ev");}
void  S565C4 ::v69(){vfunc_called(this, "_ZN6S565C43v69Ev");}
void  S565C4 ::v70(){vfunc_called(this, "_ZN6S565C43v70Ev");}
void  S565C4 ::v71(){vfunc_called(this, "_ZN6S565C43v71Ev");}
void  S565C4 ::v72(){vfunc_called(this, "_ZN6S565C43v72Ev");}
void  S565C4 ::v73(){vfunc_called(this, "_ZN6S565C43v73Ev");}
void  S565C4 ::v74(){vfunc_called(this, "_ZN6S565C43v74Ev");}
void  S565C4 ::v75(){vfunc_called(this, "_ZN6S565C43v75Ev");}
void  S565C4 ::v76(){vfunc_called(this, "_ZN6S565C43v76Ev");}
void  S565C4 ::v77(){vfunc_called(this, "_ZN6S565C43v77Ev");}
void  S565C4 ::v78(){vfunc_called(this, "_ZN6S565C43v78Ev");}
void  S565C4 ::v79(){vfunc_called(this, "_ZN6S565C43v79Ev");}
void  S565C4 ::v80(){vfunc_called(this, "_ZN6S565C43v80Ev");}
void  S565C4 ::v81(){vfunc_called(this, "_ZN6S565C43v81Ev");}
void  S565C4 ::v82(){vfunc_called(this, "_ZN6S565C43v82Ev");}
void  S565C4 ::v83(){vfunc_called(this, "_ZN6S565C43v83Ev");}
void  S565C4 ::v84(){vfunc_called(this, "_ZN6S565C43v84Ev");}
void  S565C4 ::v85(){vfunc_called(this, "_ZN6S565C43v85Ev");}
void  S565C4 ::v86(){vfunc_called(this, "_ZN6S565C43v86Ev");}
void  S565C4 ::v87(){vfunc_called(this, "_ZN6S565C43v87Ev");}
void  S565C4 ::v88(){vfunc_called(this, "_ZN6S565C43v88Ev");}
void  S565C4 ::v89(){vfunc_called(this, "_ZN6S565C43v89Ev");}
void  S565C4 ::v90(){vfunc_called(this, "_ZN6S565C43v90Ev");}
void  S565C4 ::v91(){vfunc_called(this, "_ZN6S565C43v91Ev");}
void  S565C4 ::v92(){vfunc_called(this, "_ZN6S565C43v92Ev");}
void  S565C4 ::v93(){vfunc_called(this, "_ZN6S565C43v93Ev");}
void  S565C4 ::v94(){vfunc_called(this, "_ZN6S565C43v94Ev");}
S565C4 ::S565C4(){ note_ctor("S565C4", this);} // tgen

static void Test_S565C4()
{
  extern Class_Descriptor cd_S565C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S565C4, buf);
    S565C4 *dp, &lv = *(dp=new (buf) S565C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S565C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S565C4)");
    check_base_class_offset(lv, (S565C5*), 0, "S565C4");
    check_field_offset(lv, s565c4f0, ABISELECT(96,60), "S565C4.s565c4f0");
    check_field_offset(lv, s565c4f1, ABISELECT(104,64), "S565C4.s565c4f1");
    check_field_offset(lv, s565c4f2, ABISELECT(120,76), "S565C4.s565c4f2");
    check_field_offset(lv, s565c4f3, ABISELECT(128,84), "S565C4.s565c4f3");
    check_field_offset(lv, s565c4f4, ABISELECT(144,96), "S565C4.s565c4f4");
    check_field_offset(lv, s565c4f5, ABISELECT(176,128), "S565C4.s565c4f5");
    set_bf_and_test(lv, s565c4f6, ABISELECT(180,132), 0, 1, 1, "S565C4");
    set_bf_and_test(lv, s565c4f7, ABISELECT(180,132), 1, 1, 1, "S565C4");
    set_bf_and_test(lv, s565c4f8, ABISELECT(180,132), 2, 1, 1, "S565C4");
    set_bf_and_test(lv, s565c4f9, ABISELECT(180,132), 3, 1, 1, "S565C4");
    check_field_offset(lv, s565c4f10, ABISELECT(184,136), "S565C4.s565c4f10");
    test_class_info(&lv, &cd_S565C4);
    dp->~S565C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS565C4(Test_S565C4, "S565C4", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN6S565C4C1Ev();
extern void _ZN6S565C4D1Ev();
Name_Map name_map_S565C4[] = {
  NSPAIR(_ZN6S565C4C1Ev),
  NSPAIR(_ZN6S565C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S565C5;
extern VTBL_ENTRY _ZTI6S565C5[];
extern  VTBL_ENTRY _ZTV6S565C5[];
static Base_Class bases_S565C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S565C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S565C4[];
extern void _ZN6S565C4D1Ev();
extern void _ZN6S565C4D0Ev();
extern void _ZN6S565C52v4Ev();
extern void _ZN6S565C52v5Ev();
extern void _ZN6S565C52v6Ev();
extern void _ZN6S565C52v7Ev();
extern void _ZN6S565C52v8Ev();
extern void _ZN6S565C52v9Ev();
extern void _ZN6S565C53v10Ev();
extern void _ZN6S565C53v11Ev();
extern void _ZN6S565C53v12Ev();
extern void _ZN6S565C53v13Ev();
extern void _ZN6S565C53v14Ev();
extern void _ZN6S565C53v15Ev();
extern void _ZN6S565C53v16Ev();
extern void _ZN6S565C53v17Ev();
extern void _ZN6S565C53v18Ev();
extern void _ZN6S565C53v19Ev();
extern void _ZN6S565C53v20Ev();
extern void _ZN6S565C53v21Ev();
extern void _ZN6S565C53v22Ev();
extern void _ZN6S565C53v23Ev();
extern void _ZN6S565C53v24Ev();
extern void _ZN6S565C53v25Ev();
extern void _ZN6S565C53v26Ev();
extern void _ZN6S565C53v27Ev();
extern void _ZN6S565C53v28Ev();
extern void _ZN6S565C53v29Ev();
extern void _ZN6S565C53v30Ev();
extern void _ZN6S565C53v31Ev();
extern void _ZN6S565C53v32Ev();
extern void _ZN6S565C53v33Ev();
extern void _ZN6S565C53v34Ev();
extern void _ZN6S565C53v35Ev();
extern void _ZN6S565C53v36Ev();
extern void _ZN6S565C53v37Ev();
extern void _ZN6S565C53v38Ev();
extern void _ZN6S565C53v39Ev();
extern void _ZN6S565C53v40Ev();
extern void _ZN6S565C53v41Ev();
extern void _ZN6S565C53v42Ev();
extern void _ZN6S565C53v43Ev();
extern void _ZN6S565C53v44Ev();
extern void _ZN6S565C53v45Ev();
extern void _ZN6S565C53v46Ev();
extern void _ZN6S565C53v47Ev();
extern void _ZN6S565C53v48Ev();
extern void _ZN6S565C53v49Ev();
extern void _ZN6S565C53v50Ev();
extern void _ZN6S565C53v51Ev();
extern void _ZN6S565C53v52Ev();
extern void _ZN6S565C53v53Ev();
extern void _ZN6S565C53v54Ev();
extern void _ZN6S565C53v55Ev();
extern void _ZN6S565C53v56Ev();
extern void _ZN6S565C53v57Ev();
extern void _ZN6S565C53v58Ev();
extern void _ZN6S565C53v59Ev();
extern void _ZN6S565C53v60Ev();
extern void _ZN6S565C53v61Ev();
extern void _ZN6S565C53v62Ev();
extern void _ZN6S565C53v63Ev();
extern void _ZN6S565C53v64Ev();
extern void _ZN6S565C53v65Ev();
extern void _ZN6S565C53v66Ev();
extern void _ZN6S565C53v67Ev();
extern void _ZN6S565C43v68Ev();
extern void _ZN6S565C43v69Ev();
extern void _ZN6S565C43v70Ev();
extern void _ZN6S565C43v71Ev();
extern void _ZN6S565C43v72Ev();
extern void _ZN6S565C43v73Ev();
extern void _ZN6S565C43v74Ev();
extern void _ZN6S565C43v75Ev();
extern void _ZN6S565C43v76Ev();
extern void _ZN6S565C43v77Ev();
extern void _ZN6S565C43v78Ev();
extern void _ZN6S565C43v79Ev();
extern void _ZN6S565C43v80Ev();
extern void _ZN6S565C43v81Ev();
extern void _ZN6S565C43v82Ev();
extern void _ZN6S565C43v83Ev();
extern void _ZN6S565C43v84Ev();
extern void _ZN6S565C43v85Ev();
extern void _ZN6S565C43v86Ev();
extern void _ZN6S565C43v87Ev();
extern void _ZN6S565C43v88Ev();
extern void _ZN6S565C43v89Ev();
extern void _ZN6S565C43v90Ev();
extern void _ZN6S565C43v91Ev();
extern void _ZN6S565C43v92Ev();
extern void _ZN6S565C43v93Ev();
extern void _ZN6S565C43v94Ev();
static  VTBL_ENTRY vtc_S565C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S565C4[0]),
  (VTBL_ENTRY)&_ZN6S565C4D1Ev,
  (VTBL_ENTRY)&_ZN6S565C4D0Ev,
  (VTBL_ENTRY)&_ZN6S565C52v4Ev,
  (VTBL_ENTRY)&_ZN6S565C52v5Ev,
  (VTBL_ENTRY)&_ZN6S565C52v6Ev,
  (VTBL_ENTRY)&_ZN6S565C52v7Ev,
  (VTBL_ENTRY)&_ZN6S565C52v8Ev,
  (VTBL_ENTRY)&_ZN6S565C52v9Ev,
  (VTBL_ENTRY)&_ZN6S565C53v10Ev,
  (VTBL_ENTRY)&_ZN6S565C53v11Ev,
  (VTBL_ENTRY)&_ZN6S565C53v12Ev,
  (VTBL_ENTRY)&_ZN6S565C53v13Ev,
  (VTBL_ENTRY)&_ZN6S565C53v14Ev,
  (VTBL_ENTRY)&_ZN6S565C53v15Ev,
  (VTBL_ENTRY)&_ZN6S565C53v16Ev,
  (VTBL_ENTRY)&_ZN6S565C53v17Ev,
  (VTBL_ENTRY)&_ZN6S565C53v18Ev,
  (VTBL_ENTRY)&_ZN6S565C53v19Ev,
  (VTBL_ENTRY)&_ZN6S565C53v20Ev,
  (VTBL_ENTRY)&_ZN6S565C53v21Ev,
  (VTBL_ENTRY)&_ZN6S565C53v22Ev,
  (VTBL_ENTRY)&_ZN6S565C53v23Ev,
  (VTBL_ENTRY)&_ZN6S565C53v24Ev,
  (VTBL_ENTRY)&_ZN6S565C53v25Ev,
  (VTBL_ENTRY)&_ZN6S565C53v26Ev,
  (VTBL_ENTRY)&_ZN6S565C53v27Ev,
  (VTBL_ENTRY)&_ZN6S565C53v28Ev,
  (VTBL_ENTRY)&_ZN6S565C53v29Ev,
  (VTBL_ENTRY)&_ZN6S565C53v30Ev,
  (VTBL_ENTRY)&_ZN6S565C53v31Ev,
  (VTBL_ENTRY)&_ZN6S565C53v32Ev,
  (VTBL_ENTRY)&_ZN6S565C53v33Ev,
  (VTBL_ENTRY)&_ZN6S565C53v34Ev,
  (VTBL_ENTRY)&_ZN6S565C53v35Ev,
  (VTBL_ENTRY)&_ZN6S565C53v36Ev,
  (VTBL_ENTRY)&_ZN6S565C53v37Ev,
  (VTBL_ENTRY)&_ZN6S565C53v38Ev,
  (VTBL_ENTRY)&_ZN6S565C53v39Ev,
  (VTBL_ENTRY)&_ZN6S565C53v40Ev,
  (VTBL_ENTRY)&_ZN6S565C53v41Ev,
  (VTBL_ENTRY)&_ZN6S565C53v42Ev,
  (VTBL_ENTRY)&_ZN6S565C53v43Ev,
  (VTBL_ENTRY)&_ZN6S565C53v44Ev,
  (VTBL_ENTRY)&_ZN6S565C53v45Ev,
  (VTBL_ENTRY)&_ZN6S565C53v46Ev,
  (VTBL_ENTRY)&_ZN6S565C53v47Ev,
  (VTBL_ENTRY)&_ZN6S565C53v48Ev,
  (VTBL_ENTRY)&_ZN6S565C53v49Ev,
  (VTBL_ENTRY)&_ZN6S565C53v50Ev,
  (VTBL_ENTRY)&_ZN6S565C53v51Ev,
  (VTBL_ENTRY)&_ZN6S565C53v52Ev,
  (VTBL_ENTRY)&_ZN6S565C53v53Ev,
  (VTBL_ENTRY)&_ZN6S565C53v54Ev,
  (VTBL_ENTRY)&_ZN6S565C53v55Ev,
  (VTBL_ENTRY)&_ZN6S565C53v56Ev,
  (VTBL_ENTRY)&_ZN6S565C53v57Ev,
  (VTBL_ENTRY)&_ZN6S565C53v58Ev,
  (VTBL_ENTRY)&_ZN6S565C53v59Ev,
  (VTBL_ENTRY)&_ZN6S565C53v60Ev,
  (VTBL_ENTRY)&_ZN6S565C53v61Ev,
  (VTBL_ENTRY)&_ZN6S565C53v62Ev,
  (VTBL_ENTRY)&_ZN6S565C53v63Ev,
  (VTBL_ENTRY)&_ZN6S565C53v64Ev,
  (VTBL_ENTRY)&_ZN6S565C53v65Ev,
  (VTBL_ENTRY)&_ZN6S565C53v66Ev,
  (VTBL_ENTRY)&_ZN6S565C53v67Ev,
  (VTBL_ENTRY)&_ZN6S565C43v68Ev,
  (VTBL_ENTRY)&_ZN6S565C43v69Ev,
  (VTBL_ENTRY)&_ZN6S565C43v70Ev,
  (VTBL_ENTRY)&_ZN6S565C43v71Ev,
  (VTBL_ENTRY)&_ZN6S565C43v72Ev,
  (VTBL_ENTRY)&_ZN6S565C43v73Ev,
  (VTBL_ENTRY)&_ZN6S565C43v74Ev,
  (VTBL_ENTRY)&_ZN6S565C43v75Ev,
  (VTBL_ENTRY)&_ZN6S565C43v76Ev,
  (VTBL_ENTRY)&_ZN6S565C43v77Ev,
  (VTBL_ENTRY)&_ZN6S565C43v78Ev,
  (VTBL_ENTRY)&_ZN6S565C43v79Ev,
  (VTBL_ENTRY)&_ZN6S565C43v80Ev,
  (VTBL_ENTRY)&_ZN6S565C43v81Ev,
  (VTBL_ENTRY)&_ZN6S565C43v82Ev,
  (VTBL_ENTRY)&_ZN6S565C43v83Ev,
  (VTBL_ENTRY)&_ZN6S565C43v84Ev,
  (VTBL_ENTRY)&_ZN6S565C43v85Ev,
  (VTBL_ENTRY)&_ZN6S565C43v86Ev,
  (VTBL_ENTRY)&_ZN6S565C43v87Ev,
  (VTBL_ENTRY)&_ZN6S565C43v88Ev,
  (VTBL_ENTRY)&_ZN6S565C43v89Ev,
  (VTBL_ENTRY)&_ZN6S565C43v90Ev,
  (VTBL_ENTRY)&_ZN6S565C43v91Ev,
  (VTBL_ENTRY)&_ZN6S565C43v92Ev,
  (VTBL_ENTRY)&_ZN6S565C43v93Ev,
  (VTBL_ENTRY)&_ZN6S565C43v94Ev,
};
extern VTBL_ENTRY _ZTI6S565C4[];
extern  VTBL_ENTRY _ZTV6S565C4[];
Class_Descriptor cd_S565C4 = {  "S565C4", // class name
  bases_S565C4, 1,
  &(vtc_S565C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI6S565C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S565C4),95, //virtual function table var
  2, // 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  S565C3  : S565C4 {
  ::S615C22_nt s565c3f0;
  unsigned int s565c3f1:1;
  virtual  ~S565C3(); // _ZN6S565C3D1Ev
  virtual void  v95(); // _ZN6S565C33v95Ev
  virtual void  v96(); // _ZN6S565C33v96Ev
  virtual void  v97(); // _ZN6S565C33v97Ev
  virtual void  v98(); // _ZN6S565C33v98Ev
  virtual void  v99(); // _ZN6S565C33v99Ev
  virtual void  v100(); // _ZN6S565C34v100Ev
  virtual void  v101(); // _ZN6S565C34v101Ev
  virtual void  v102(); // _ZN6S565C34v102Ev
  virtual void  v103(); // _ZN6S565C34v103Ev
  virtual void  v104(); // _ZN6S565C34v104Ev
  virtual void  v105(); // _ZN6S565C34v105Ev
  virtual void  v106(); // _ZN6S565C34v106Ev
  virtual void  v107(); // _ZN6S565C34v107Ev
  virtual void  v108(); // _ZN6S565C34v108Ev
  virtual void  v109(); // _ZN6S565C34v109Ev
  virtual void  v110(); // _ZN6S565C34v110Ev
  virtual void  v111(); // _ZN6S565C34v111Ev
  virtual void  v112(); // _ZN6S565C34v112Ev
  S565C3(); // tgen
};
//SIG(-1 S565C3) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S565C3 ::~S565C3(){ note_dtor("S565C3", this);}
void  S565C3 ::v95(){vfunc_called(this, "_ZN6S565C33v95Ev");}
void  S565C3 ::v96(){vfunc_called(this, "_ZN6S565C33v96Ev");}
void  S565C3 ::v97(){vfunc_called(this, "_ZN6S565C33v97Ev");}
void  S565C3 ::v98(){vfunc_called(this, "_ZN6S565C33v98Ev");}
void  S565C3 ::v99(){vfunc_called(this, "_ZN6S565C33v99Ev");}
void  S565C3 ::v100(){vfunc_called(this, "_ZN6S565C34v100Ev");}
void  S565C3 ::v101(){vfunc_called(this, "_ZN6S565C34v101Ev");}
void  S565C3 ::v102(){vfunc_called(this, "_ZN6S565C34v102Ev");}
void  S565C3 ::v103(){vfunc_called(this, "_ZN6S565C34v103Ev");}
void  S565C3 ::v104(){vfunc_called(this, "_ZN6S565C34v104Ev");}
void  S565C3 ::v105(){vfunc_called(this, "_ZN6S565C34v105Ev");}
void  S565C3 ::v106(){vfunc_called(this, "_ZN6S565C34v106Ev");}
void  S565C3 ::v107(){vfunc_called(this, "_ZN6S565C34v107Ev");}
void  S565C3 ::v108(){vfunc_called(this, "_ZN6S565C34v108Ev");}
void  S565C3 ::v109(){vfunc_called(this, "_ZN6S565C34v109Ev");}
void  S565C3 ::v110(){vfunc_called(this, "_ZN6S565C34v110Ev");}
void  S565C3 ::v111(){vfunc_called(this, "_ZN6S565C34v111Ev");}
void  S565C3 ::v112(){vfunc_called(this, "_ZN6S565C34v112Ev");}
S565C3 ::S565C3(){ note_ctor("S565C3", this);} // tgen

static void Test_S565C3()
{
  extern Class_Descriptor cd_S565C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S565C3, buf);
    S565C3 *dp, &lv = *(dp=new (buf) S565C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S565C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S565C3)");
    check_base_class_offset(lv, (S565C5*)(S565C4*), 0, "S565C3");
    check_base_class_offset(lv, (S565C4*), 0, "S565C3");
    check_field_offset(lv, s565c3f0, ABISELECT(232,180), "S565C3.s565c3f0");
    set_bf_and_test(lv, s565c3f1, ABISELECT(248,192), 0, 1, 1, "S565C3");
    test_class_info(&lv, &cd_S565C3);
    dp->~S565C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS565C3(Test_S565C3, "S565C3", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S565C3C1Ev();
extern void _ZN6S565C3D1Ev();
Name_Map name_map_S565C3[] = {
  NSPAIR(_ZN6S565C3C1Ev),
  NSPAIR(_ZN6S565C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S565C5;
extern VTBL_ENTRY _ZTI6S565C5[];
extern  VTBL_ENTRY _ZTV6S565C5[];
extern Class_Descriptor cd_S565C4;
extern VTBL_ENTRY _ZTI6S565C4[];
extern  VTBL_ENTRY _ZTV6S565C4[];
static Base_Class bases_S565C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S565C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S565C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S565C3[];
extern void _ZN6S565C3D1Ev();
extern void _ZN6S565C3D0Ev();
extern void _ZN6S565C52v4Ev();
extern void _ZN6S565C52v5Ev();
extern void _ZN6S565C52v6Ev();
extern void _ZN6S565C52v7Ev();
extern void _ZN6S565C52v8Ev();
extern void _ZN6S565C52v9Ev();
extern void _ZN6S565C53v10Ev();
extern void _ZN6S565C53v11Ev();
extern void _ZN6S565C53v12Ev();
extern void _ZN6S565C53v13Ev();
extern void _ZN6S565C53v14Ev();
extern void _ZN6S565C53v15Ev();
extern void _ZN6S565C53v16Ev();
extern void _ZN6S565C53v17Ev();
extern void _ZN6S565C53v18Ev();
extern void _ZN6S565C53v19Ev();
extern void _ZN6S565C53v20Ev();
extern void _ZN6S565C53v21Ev();
extern void _ZN6S565C53v22Ev();
extern void _ZN6S565C53v23Ev();
extern void _ZN6S565C53v24Ev();
extern void _ZN6S565C53v25Ev();
extern void _ZN6S565C53v26Ev();
extern void _ZN6S565C53v27Ev();
extern void _ZN6S565C53v28Ev();
extern void _ZN6S565C53v29Ev();
extern void _ZN6S565C53v30Ev();
extern void _ZN6S565C53v31Ev();
extern void _ZN6S565C53v32Ev();
extern void _ZN6S565C53v33Ev();
extern void _ZN6S565C53v34Ev();
extern void _ZN6S565C53v35Ev();
extern void _ZN6S565C53v36Ev();
extern void _ZN6S565C53v37Ev();
extern void _ZN6S565C53v38Ev();
extern void _ZN6S565C53v39Ev();
extern void _ZN6S565C53v40Ev();
extern void _ZN6S565C53v41Ev();
extern void _ZN6S565C53v42Ev();
extern void _ZN6S565C53v43Ev();
extern void _ZN6S565C53v44Ev();
extern void _ZN6S565C53v45Ev();
extern void _ZN6S565C53v46Ev();
extern void _ZN6S565C53v47Ev();
extern void _ZN6S565C53v48Ev();
extern void _ZN6S565C53v49Ev();
extern void _ZN6S565C53v50Ev();
extern void _ZN6S565C53v51Ev();
extern void _ZN6S565C53v52Ev();
extern void _ZN6S565C53v53Ev();
extern void _ZN6S565C53v54Ev();
extern void _ZN6S565C53v55Ev();
extern void _ZN6S565C53v56Ev();
extern void _ZN6S565C53v57Ev();
extern void _ZN6S565C53v58Ev();
extern void _ZN6S565C53v59Ev();
extern void _ZN6S565C53v60Ev();
extern void _ZN6S565C53v61Ev();
extern void _ZN6S565C53v62Ev();
extern void _ZN6S565C53v63Ev();
extern void _ZN6S565C53v64Ev();
extern void _ZN6S565C53v65Ev();
extern void _ZN6S565C53v66Ev();
extern void _ZN6S565C53v67Ev();
extern void _ZN6S565C43v68Ev();
extern void _ZN6S565C43v69Ev();
extern void _ZN6S565C43v70Ev();
extern void _ZN6S565C43v71Ev();
extern void _ZN6S565C43v72Ev();
extern void _ZN6S565C43v73Ev();
extern void _ZN6S565C43v74Ev();
extern void _ZN6S565C43v75Ev();
extern void _ZN6S565C43v76Ev();
extern void _ZN6S565C43v77Ev();
extern void _ZN6S565C43v78Ev();
extern void _ZN6S565C43v79Ev();
extern void _ZN6S565C43v80Ev();
extern void _ZN6S565C43v81Ev();
extern void _ZN6S565C43v82Ev();
extern void _ZN6S565C43v83Ev();
extern void _ZN6S565C43v84Ev();
extern void _ZN6S565C43v85Ev();
extern void _ZN6S565C43v86Ev();
extern void _ZN6S565C43v87Ev();
extern void _ZN6S565C43v88Ev();
extern void _ZN6S565C43v89Ev();
extern void _ZN6S565C43v90Ev();
extern void _ZN6S565C43v91Ev();
extern void _ZN6S565C43v92Ev();
extern void _ZN6S565C43v93Ev();
extern void _ZN6S565C43v94Ev();
extern void _ZN6S565C33v95Ev();
extern void _ZN6S565C33v96Ev();
extern void _ZN6S565C33v97Ev();
extern void _ZN6S565C33v98Ev();
extern void _ZN6S565C33v99Ev();
extern void _ZN6S565C34v100Ev();
extern void _ZN6S565C34v101Ev();
extern void _ZN6S565C34v102Ev();
extern void _ZN6S565C34v103Ev();
extern void _ZN6S565C34v104Ev();
extern void _ZN6S565C34v105Ev();
extern void _ZN6S565C34v106Ev();
extern void _ZN6S565C34v107Ev();
extern void _ZN6S565C34v108Ev();
extern void _ZN6S565C34v109Ev();
extern void _ZN6S565C34v110Ev();
extern void _ZN6S565C34v111Ev();
extern void _ZN6S565C34v112Ev();
static  VTBL_ENTRY vtc_S565C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S565C3[0]),
  (VTBL_ENTRY)&_ZN6S565C3D1Ev,
  (VTBL_ENTRY)&_ZN6S565C3D0Ev,
  (VTBL_ENTRY)&_ZN6S565C52v4Ev,
  (VTBL_ENTRY)&_ZN6S565C52v5Ev,
  (VTBL_ENTRY)&_ZN6S565C52v6Ev,
  (VTBL_ENTRY)&_ZN6S565C52v7Ev,
  (VTBL_ENTRY)&_ZN6S565C52v8Ev,
  (VTBL_ENTRY)&_ZN6S565C52v9Ev,
  (VTBL_ENTRY)&_ZN6S565C53v10Ev,
  (VTBL_ENTRY)&_ZN6S565C53v11Ev,
  (VTBL_ENTRY)&_ZN6S565C53v12Ev,
  (VTBL_ENTRY)&_ZN6S565C53v13Ev,
  (VTBL_ENTRY)&_ZN6S565C53v14Ev,
  (VTBL_ENTRY)&_ZN6S565C53v15Ev,
  (VTBL_ENTRY)&_ZN6S565C53v16Ev,
  (VTBL_ENTRY)&_ZN6S565C53v17Ev,
  (VTBL_ENTRY)&_ZN6S565C53v18Ev,
  (VTBL_ENTRY)&_ZN6S565C53v19Ev,
  (VTBL_ENTRY)&_ZN6S565C53v20Ev,
  (VTBL_ENTRY)&_ZN6S565C53v21Ev,
  (VTBL_ENTRY)&_ZN6S565C53v22Ev,
  (VTBL_ENTRY)&_ZN6S565C53v23Ev,
  (VTBL_ENTRY)&_ZN6S565C53v24Ev,
  (VTBL_ENTRY)&_ZN6S565C53v25Ev,
  (VTBL_ENTRY)&_ZN6S565C53v26Ev,
  (VTBL_ENTRY)&_ZN6S565C53v27Ev,
  (VTBL_ENTRY)&_ZN6S565C53v28Ev,
  (VTBL_ENTRY)&_ZN6S565C53v29Ev,
  (VTBL_ENTRY)&_ZN6S565C53v30Ev,
  (VTBL_ENTRY)&_ZN6S565C53v31Ev,
  (VTBL_ENTRY)&_ZN6S565C53v32Ev,
  (VTBL_ENTRY)&_ZN6S565C53v33Ev,
  (VTBL_ENTRY)&_ZN6S565C53v34Ev,
  (VTBL_ENTRY)&_ZN6S565C53v35Ev,
  (VTBL_ENTRY)&_ZN6S565C53v36Ev,
  (VTBL_ENTRY)&_ZN6S565C53v37Ev,
  (VTBL_ENTRY)&_ZN6S565C53v38Ev,
  (VTBL_ENTRY)&_ZN6S565C53v39Ev,
  (VTBL_ENTRY)&_ZN6S565C53v40Ev,
  (VTBL_ENTRY)&_ZN6S565C53v41Ev,
  (VTBL_ENTRY)&_ZN6S565C53v42Ev,
  (VTBL_ENTRY)&_ZN6S565C53v43Ev,
  (VTBL_ENTRY)&_ZN6S565C53v44Ev,
  (VTBL_ENTRY)&_ZN6S565C53v45Ev,
  (VTBL_ENTRY)&_ZN6S565C53v46Ev,
  (VTBL_ENTRY)&_ZN6S565C53v47Ev,
  (VTBL_ENTRY)&_ZN6S565C53v48Ev,
  (VTBL_ENTRY)&_ZN6S565C53v49Ev,
  (VTBL_ENTRY)&_ZN6S565C53v50Ev,
  (VTBL_ENTRY)&_ZN6S565C53v51Ev,
  (VTBL_ENTRY)&_ZN6S565C53v52Ev,
  (VTBL_ENTRY)&_ZN6S565C53v53Ev,
  (VTBL_ENTRY)&_ZN6S565C53v54Ev,
  (VTBL_ENTRY)&_ZN6S565C53v55Ev,
  (VTBL_ENTRY)&_ZN6S565C53v56Ev,
  (VTBL_ENTRY)&_ZN6S565C53v57Ev,
  (VTBL_ENTRY)&_ZN6S565C53v58Ev,
  (VTBL_ENTRY)&_ZN6S565C53v59Ev,
  (VTBL_ENTRY)&_ZN6S565C53v60Ev,
  (VTBL_ENTRY)&_ZN6S565C53v61Ev,
  (VTBL_ENTRY)&_ZN6S565C53v62Ev,
  (VTBL_ENTRY)&_ZN6S565C53v63Ev,
  (VTBL_ENTRY)&_ZN6S565C53v64Ev,
  (VTBL_ENTRY)&_ZN6S565C53v65Ev,
  (VTBL_ENTRY)&_ZN6S565C53v66Ev,
  (VTBL_ENTRY)&_ZN6S565C53v67Ev,
  (VTBL_ENTRY)&_ZN6S565C43v68Ev,
  (VTBL_ENTRY)&_ZN6S565C43v69Ev,
  (VTBL_ENTRY)&_ZN6S565C43v70Ev,
  (VTBL_ENTRY)&_ZN6S565C43v71Ev,
  (VTBL_ENTRY)&_ZN6S565C43v72Ev,
  (VTBL_ENTRY)&_ZN6S565C43v73Ev,
  (VTBL_ENTRY)&_ZN6S565C43v74Ev,
  (VTBL_ENTRY)&_ZN6S565C43v75Ev,
  (VTBL_ENTRY)&_ZN6S565C43v76Ev,
  (VTBL_ENTRY)&_ZN6S565C43v77Ev,
  (VTBL_ENTRY)&_ZN6S565C43v78Ev,
  (VTBL_ENTRY)&_ZN6S565C43v79Ev,
  (VTBL_ENTRY)&_ZN6S565C43v80Ev,
  (VTBL_ENTRY)&_ZN6S565C43v81Ev,
  (VTBL_ENTRY)&_ZN6S565C43v82Ev,
  (VTBL_ENTRY)&_ZN6S565C43v83Ev,
  (VTBL_ENTRY)&_ZN6S565C43v84Ev,
  (VTBL_ENTRY)&_ZN6S565C43v85Ev,
  (VTBL_ENTRY)&_ZN6S565C43v86Ev,
  (VTBL_ENTRY)&_ZN6S565C43v87Ev,
  (VTBL_ENTRY)&_ZN6S565C43v88Ev,
  (VTBL_ENTRY)&_ZN6S565C43v89Ev,
  (VTBL_ENTRY)&_ZN6S565C43v90Ev,
  (VTBL_ENTRY)&_ZN6S565C43v91Ev,
  (VTBL_ENTRY)&_ZN6S565C43v92Ev,
  (VTBL_ENTRY)&_ZN6S565C43v93Ev,
  (VTBL_ENTRY)&_ZN6S565C43v94Ev,
  (VTBL_ENTRY)&_ZN6S565C33v95Ev,
  (VTBL_ENTRY)&_ZN6S565C33v96Ev,
  (VTBL_ENTRY)&_ZN6S565C33v97Ev,
  (VTBL_ENTRY)&_ZN6S565C33v98Ev,
  (VTBL_ENTRY)&_ZN6S565C33v99Ev,
  (VTBL_ENTRY)&_ZN6S565C34v100Ev,
  (VTBL_ENTRY)&_ZN6S565C34v101Ev,
  (VTBL_ENTRY)&_ZN6S565C34v102Ev,
  (VTBL_ENTRY)&_ZN6S565C34v103Ev,
  (VTBL_ENTRY)&_ZN6S565C34v104Ev,
  (VTBL_ENTRY)&_ZN6S565C34v105Ev,
  (VTBL_ENTRY)&_ZN6S565C34v106Ev,
  (VTBL_ENTRY)&_ZN6S565C34v107Ev,
  (VTBL_ENTRY)&_ZN6S565C34v108Ev,
  (VTBL_ENTRY)&_ZN6S565C34v109Ev,
  (VTBL_ENTRY)&_ZN6S565C34v110Ev,
  (VTBL_ENTRY)&_ZN6S565C34v111Ev,
  (VTBL_ENTRY)&_ZN6S565C34v112Ev,
};
extern VTBL_ENTRY _ZTI6S565C3[];
extern  VTBL_ENTRY _ZTV6S565C3[];
Class_Descriptor cd_S565C3 = {  "S565C3", // class name
  bases_S565C3, 2,
  &(vtc_S565C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S565C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S565C3),113, //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  S565C2  : S565C3 {
  ::S165C27 s565c2f0;
  int s565c2f1[2];
  unsigned int s565c2f2:1;
  virtual  ~S565C2(); // _ZN6S565C2D1Ev
  virtual void  v113(); // _ZN6S565C24v113Ev
  virtual void  v114(); // _ZN6S565C24v114Ev
  virtual void  v115(); // _ZN6S565C24v115Ev
  virtual void  v116(); // _ZN6S565C24v116Ev
  virtual void  v117(); // _ZN6S565C24v117Ev
  virtual void  v118(); // _ZN6S565C24v118Ev
  virtual void  v119(); // _ZN6S565C24v119Ev
  S565C2(); // tgen
};
//SIG(-1 S565C2) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 FC16{ BC17{ BC8}} Fi[2] Fi:1}


 S565C2 ::~S565C2(){ note_dtor("S565C2", this);}
void  S565C2 ::v113(){vfunc_called(this, "_ZN6S565C24v113Ev");}
void  S565C2 ::v114(){vfunc_called(this, "_ZN6S565C24v114Ev");}
void  S565C2 ::v115(){vfunc_called(this, "_ZN6S565C24v115Ev");}
void  S565C2 ::v116(){vfunc_called(this, "_ZN6S565C24v116Ev");}
void  S565C2 ::v117(){vfunc_called(this, "_ZN6S565C24v117Ev");}
void  S565C2 ::v118(){vfunc_called(this, "_ZN6S565C24v118Ev");}
void  S565C2 ::v119(){vfunc_called(this, "_ZN6S565C24v119Ev");}
S565C2 ::S565C2(){ note_ctor("S565C2", this);} // tgen

static void Test_S565C2()
{
  extern Class_Descriptor cd_S565C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,56)];
    init_test(&cd_S565C2, buf);
    S565C2 *dp, &lv = *(dp=new (buf) S565C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,220), "sizeof(S565C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S565C2)");
    check_base_class_offset(lv, (S565C5*)(S565C4*)(S565C3*), 0, "S565C2");
    check_base_class_offset(lv, (S565C4*)(S565C3*), 0, "S565C2");
    check_base_class_offset(lv, (S565C3*), 0, "S565C2");
    check_field_offset(lv, s565c2f0, ABISELECT(256,196), "S565C2.s565c2f0");
    check_field_offset(lv, s565c2f1, ABISELECT(272,208), "S565C2.s565c2f1");
    set_bf_and_test(lv, s565c2f2, ABISELECT(280,216), 0, 1, 1, "S565C2");
    test_class_info(&lv, &cd_S565C2);
    dp->~S565C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS565C2(Test_S565C2, "S565C2", ABISELECT(288,220));

#else // __cplusplus

extern void _ZN6S565C2C1Ev();
extern void _ZN6S565C2D1Ev();
Name_Map name_map_S565C2[] = {
  NSPAIR(_ZN6S565C2C1Ev),
  NSPAIR(_ZN6S565C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S565C5;
extern VTBL_ENTRY _ZTI6S565C5[];
extern  VTBL_ENTRY _ZTV6S565C5[];
extern Class_Descriptor cd_S565C4;
extern VTBL_ENTRY _ZTI6S565C4[];
extern  VTBL_ENTRY _ZTV6S565C4[];
extern Class_Descriptor cd_S565C3;
extern VTBL_ENTRY _ZTI6S565C3[];
extern  VTBL_ENTRY _ZTV6S565C3[];
static Base_Class bases_S565C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S565C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S565C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S565C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S565C2[];
extern void _ZN6S565C2D1Ev();
extern void _ZN6S565C2D0Ev();
extern void _ZN6S565C52v4Ev();
extern void _ZN6S565C52v5Ev();
extern void _ZN6S565C52v6Ev();
extern void _ZN6S565C52v7Ev();
extern void _ZN6S565C52v8Ev();
extern void _ZN6S565C52v9Ev();
extern void _ZN6S565C53v10Ev();
extern void _ZN6S565C53v11Ev();
extern void _ZN6S565C53v12Ev();
extern void _ZN6S565C53v13Ev();
extern void _ZN6S565C53v14Ev();
extern void _ZN6S565C53v15Ev();
extern void _ZN6S565C53v16Ev();
extern void _ZN6S565C53v17Ev();
extern void _ZN6S565C53v18Ev();
extern void _ZN6S565C53v19Ev();
extern void _ZN6S565C53v20Ev();
extern void _ZN6S565C53v21Ev();
extern void _ZN6S565C53v22Ev();
extern void _ZN6S565C53v23Ev();
extern void _ZN6S565C53v24Ev();
extern void _ZN6S565C53v25Ev();
extern void _ZN6S565C53v26Ev();
extern void _ZN6S565C53v27Ev();
extern void _ZN6S565C53v28Ev();
extern void _ZN6S565C53v29Ev();
extern void _ZN6S565C53v30Ev();
extern void _ZN6S565C53v31Ev();
extern void _ZN6S565C53v32Ev();
extern void _ZN6S565C53v33Ev();
extern void _ZN6S565C53v34Ev();
extern void _ZN6S565C53v35Ev();
extern void _ZN6S565C53v36Ev();
extern void _ZN6S565C53v37Ev();
extern void _ZN6S565C53v38Ev();
extern void _ZN6S565C53v39Ev();
extern void _ZN6S565C53v40Ev();
extern void _ZN6S565C53v41Ev();
extern void _ZN6S565C53v42Ev();
extern void _ZN6S565C53v43Ev();
extern void _ZN6S565C53v44Ev();
extern void _ZN6S565C53v45Ev();
extern void _ZN6S565C53v46Ev();
extern void _ZN6S565C53v47Ev();
extern void _ZN6S565C53v48Ev();
extern void _ZN6S565C53v49Ev();
extern void _ZN6S565C53v50Ev();
extern void _ZN6S565C53v51Ev();
extern void _ZN6S565C53v52Ev();
extern void _ZN6S565C53v53Ev();
extern void _ZN6S565C53v54Ev();
extern void _ZN6S565C53v55Ev();
extern void _ZN6S565C53v56Ev();
extern void _ZN6S565C53v57Ev();
extern void _ZN6S565C53v58Ev();
extern void _ZN6S565C53v59Ev();
extern void _ZN6S565C53v60Ev();
extern void _ZN6S565C53v61Ev();
extern void _ZN6S565C53v62Ev();
extern void _ZN6S565C53v63Ev();
extern void _ZN6S565C53v64Ev();
extern void _ZN6S565C53v65Ev();
extern void _ZN6S565C53v66Ev();
extern void _ZN6S565C53v67Ev();
extern void _ZN6S565C43v68Ev();
extern void _ZN6S565C43v69Ev();
extern void _ZN6S565C43v70Ev();
extern void _ZN6S565C43v71Ev();
extern void _ZN6S565C43v72Ev();
extern void _ZN6S565C43v73Ev();
extern void _ZN6S565C43v74Ev();
extern void _ZN6S565C43v75Ev();
extern void _ZN6S565C43v76Ev();
extern void _ZN6S565C43v77Ev();
extern void _ZN6S565C43v78Ev();
extern void _ZN6S565C43v79Ev();
extern void _ZN6S565C43v80Ev();
extern void _ZN6S565C43v81Ev();
extern void _ZN6S565C43v82Ev();
extern void _ZN6S565C43v83Ev();
extern void _ZN6S565C43v84Ev();
extern void _ZN6S565C43v85Ev();
extern void _ZN6S565C43v86Ev();
extern void _ZN6S565C43v87Ev();
extern void _ZN6S565C43v88Ev();
extern void _ZN6S565C43v89Ev();
extern void _ZN6S565C43v90Ev();
extern void _ZN6S565C43v91Ev();
extern void _ZN6S565C43v92Ev();
extern void _ZN6S565C43v93Ev();
extern void _ZN6S565C43v94Ev();
extern void _ZN6S565C33v95Ev();
extern void _ZN6S565C33v96Ev();
extern void _ZN6S565C33v97Ev();
extern void _ZN6S565C33v98Ev();
extern void _ZN6S565C33v99Ev();
extern void _ZN6S565C34v100Ev();
extern void _ZN6S565C34v101Ev();
extern void _ZN6S565C34v102Ev();
extern void _ZN6S565C34v103Ev();
extern void _ZN6S565C34v104Ev();
extern void _ZN6S565C34v105Ev();
extern void _ZN6S565C34v106Ev();
extern void _ZN6S565C34v107Ev();
extern void _ZN6S565C34v108Ev();
extern void _ZN6S565C34v109Ev();
extern void _ZN6S565C34v110Ev();
extern void _ZN6S565C34v111Ev();
extern void _ZN6S565C34v112Ev();
extern void _ZN6S565C24v113Ev();
extern void _ZN6S565C24v114Ev();
extern void _ZN6S565C24v115Ev();
extern void _ZN6S565C24v116Ev();
extern void _ZN6S565C24v117Ev();
extern void _ZN6S565C24v118Ev();
extern void _ZN6S565C24v119Ev();
static  VTBL_ENTRY vtc_S565C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S565C2[0]),
  (VTBL_ENTRY)&_ZN6S565C2D1Ev,
  (VTBL_ENTRY)&_ZN6S565C2D0Ev,
  (VTBL_ENTRY)&_ZN6S565C52v4Ev,
  (VTBL_ENTRY)&_ZN6S565C52v5Ev,
  (VTBL_ENTRY)&_ZN6S565C52v6Ev,
  (VTBL_ENTRY)&_ZN6S565C52v7Ev,
  (VTBL_ENTRY)&_ZN6S565C52v8Ev,
  (VTBL_ENTRY)&_ZN6S565C52v9Ev,
  (VTBL_ENTRY)&_ZN6S565C53v10Ev,
  (VTBL_ENTRY)&_ZN6S565C53v11Ev,
  (VTBL_ENTRY)&_ZN6S565C53v12Ev,
  (VTBL_ENTRY)&_ZN6S565C53v13Ev,
  (VTBL_ENTRY)&_ZN6S565C53v14Ev,
  (VTBL_ENTRY)&_ZN6S565C53v15Ev,
  (VTBL_ENTRY)&_ZN6S565C53v16Ev,
  (VTBL_ENTRY)&_ZN6S565C53v17Ev,
  (VTBL_ENTRY)&_ZN6S565C53v18Ev,
  (VTBL_ENTRY)&_ZN6S565C53v19Ev,
  (VTBL_ENTRY)&_ZN6S565C53v20Ev,
  (VTBL_ENTRY)&_ZN6S565C53v21Ev,
  (VTBL_ENTRY)&_ZN6S565C53v22Ev,
  (VTBL_ENTRY)&_ZN6S565C53v23Ev,
  (VTBL_ENTRY)&_ZN6S565C53v24Ev,
  (VTBL_ENTRY)&_ZN6S565C53v25Ev,
  (VTBL_ENTRY)&_ZN6S565C53v26Ev,
  (VTBL_ENTRY)&_ZN6S565C53v27Ev,
  (VTBL_ENTRY)&_ZN6S565C53v28Ev,
  (VTBL_ENTRY)&_ZN6S565C53v29Ev,
  (VTBL_ENTRY)&_ZN6S565C53v30Ev,
  (VTBL_ENTRY)&_ZN6S565C53v31Ev,
  (VTBL_ENTRY)&_ZN6S565C53v32Ev,
  (VTBL_ENTRY)&_ZN6S565C53v33Ev,
  (VTBL_ENTRY)&_ZN6S565C53v34Ev,
  (VTBL_ENTRY)&_ZN6S565C53v35Ev,
  (VTBL_ENTRY)&_ZN6S565C53v36Ev,
  (VTBL_ENTRY)&_ZN6S565C53v37Ev,
  (VTBL_ENTRY)&_ZN6S565C53v38Ev,
  (VTBL_ENTRY)&_ZN6S565C53v39Ev,
  (VTBL_ENTRY)&_ZN6S565C53v40Ev,
  (VTBL_ENTRY)&_ZN6S565C53v41Ev,
  (VTBL_ENTRY)&_ZN6S565C53v42Ev,
  (VTBL_ENTRY)&_ZN6S565C53v43Ev,
  (VTBL_ENTRY)&_ZN6S565C53v44Ev,
  (VTBL_ENTRY)&_ZN6S565C53v45Ev,
  (VTBL_ENTRY)&_ZN6S565C53v46Ev,
  (VTBL_ENTRY)&_ZN6S565C53v47Ev,
  (VTBL_ENTRY)&_ZN6S565C53v48Ev,
  (VTBL_ENTRY)&_ZN6S565C53v49Ev,
  (VTBL_ENTRY)&_ZN6S565C53v50Ev,
  (VTBL_ENTRY)&_ZN6S565C53v51Ev,
  (VTBL_ENTRY)&_ZN6S565C53v52Ev,
  (VTBL_ENTRY)&_ZN6S565C53v53Ev,
  (VTBL_ENTRY)&_ZN6S565C53v54Ev,
  (VTBL_ENTRY)&_ZN6S565C53v55Ev,
  (VTBL_ENTRY)&_ZN6S565C53v56Ev,
  (VTBL_ENTRY)&_ZN6S565C53v57Ev,
  (VTBL_ENTRY)&_ZN6S565C53v58Ev,
  (VTBL_ENTRY)&_ZN6S565C53v59Ev,
  (VTBL_ENTRY)&_ZN6S565C53v60Ev,
  (VTBL_ENTRY)&_ZN6S565C53v61Ev,
  (VTBL_ENTRY)&_ZN6S565C53v62Ev,
  (VTBL_ENTRY)&_ZN6S565C53v63Ev,
  (VTBL_ENTRY)&_ZN6S565C53v64Ev,
  (VTBL_ENTRY)&_ZN6S565C53v65Ev,
  (VTBL_ENTRY)&_ZN6S565C53v66Ev,
  (VTBL_ENTRY)&_ZN6S565C53v67Ev,
  (VTBL_ENTRY)&_ZN6S565C43v68Ev,
  (VTBL_ENTRY)&_ZN6S565C43v69Ev,
  (VTBL_ENTRY)&_ZN6S565C43v70Ev,
  (VTBL_ENTRY)&_ZN6S565C43v71Ev,
  (VTBL_ENTRY)&_ZN6S565C43v72Ev,
  (VTBL_ENTRY)&_ZN6S565C43v73Ev,
  (VTBL_ENTRY)&_ZN6S565C43v74Ev,
  (VTBL_ENTRY)&_ZN6S565C43v75Ev,
  (VTBL_ENTRY)&_ZN6S565C43v76Ev,
  (VTBL_ENTRY)&_ZN6S565C43v77Ev,
  (VTBL_ENTRY)&_ZN6S565C43v78Ev,
  (VTBL_ENTRY)&_ZN6S565C43v79Ev,
  (VTBL_ENTRY)&_ZN6S565C43v80Ev,
  (VTBL_ENTRY)&_ZN6S565C43v81Ev,
  (VTBL_ENTRY)&_ZN6S565C43v82Ev,
  (VTBL_ENTRY)&_ZN6S565C43v83Ev,
  (VTBL_ENTRY)&_ZN6S565C43v84Ev,
  (VTBL_ENTRY)&_ZN6S565C43v85Ev,
  (VTBL_ENTRY)&_ZN6S565C43v86Ev,
  (VTBL_ENTRY)&_ZN6S565C43v87Ev,
  (VTBL_ENTRY)&_ZN6S565C43v88Ev,
  (VTBL_ENTRY)&_ZN6S565C43v89Ev,
  (VTBL_ENTRY)&_ZN6S565C43v90Ev,
  (VTBL_ENTRY)&_ZN6S565C43v91Ev,
  (VTBL_ENTRY)&_ZN6S565C43v92Ev,
  (VTBL_ENTRY)&_ZN6S565C43v93Ev,
  (VTBL_ENTRY)&_ZN6S565C43v94Ev,
  (VTBL_ENTRY)&_ZN6S565C33v95Ev,
  (VTBL_ENTRY)&_ZN6S565C33v96Ev,
  (VTBL_ENTRY)&_ZN6S565C33v97Ev,
  (VTBL_ENTRY)&_ZN6S565C33v98Ev,
  (VTBL_ENTRY)&_ZN6S565C33v99Ev,
  (VTBL_ENTRY)&_ZN6S565C34v100Ev,
  (VTBL_ENTRY)&_ZN6S565C34v101Ev,
  (VTBL_ENTRY)&_ZN6S565C34v102Ev,
  (VTBL_ENTRY)&_ZN6S565C34v103Ev,
  (VTBL_ENTRY)&_ZN6S565C34v104Ev,
  (VTBL_ENTRY)&_ZN6S565C34v105Ev,
  (VTBL_ENTRY)&_ZN6S565C34v106Ev,
  (VTBL_ENTRY)&_ZN6S565C34v107Ev,
  (VTBL_ENTRY)&_ZN6S565C34v108Ev,
  (VTBL_ENTRY)&_ZN6S565C34v109Ev,
  (VTBL_ENTRY)&_ZN6S565C34v110Ev,
  (VTBL_ENTRY)&_ZN6S565C34v111Ev,
  (VTBL_ENTRY)&_ZN6S565C34v112Ev,
  (VTBL_ENTRY)&_ZN6S565C24v113Ev,
  (VTBL_ENTRY)&_ZN6S565C24v114Ev,
  (VTBL_ENTRY)&_ZN6S565C24v115Ev,
  (VTBL_ENTRY)&_ZN6S565C24v116Ev,
  (VTBL_ENTRY)&_ZN6S565C24v117Ev,
  (VTBL_ENTRY)&_ZN6S565C24v118Ev,
  (VTBL_ENTRY)&_ZN6S565C24v119Ev,
};
extern VTBL_ENTRY _ZTI6S565C2[];
extern  VTBL_ENTRY _ZTV6S565C2[];
Class_Descriptor cd_S565C2 = {  "S565C2", // class name
  bases_S565C2, 3,
  &(vtc_S565C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,220), // object size
  NSPAIRA(_ZTI6S565C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S565C2),120, //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  S565C1  : S565C2 {
  virtual  ~S565C1(); // _ZN6S565C1D1Ev
  virtual void  v1(); // _ZN6S565C12v1Ev
  virtual void  v2(); // _ZN6S565C12v2Ev
  virtual void  v3(); // _ZN6S565C12v3Ev
  S565C1(); // tgen
};
//SIG(1 S565C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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 v90 v91 v92 v93 v94 Fp FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC6 FC10{ BC11{ BC9}} FC12{ m FC13{ m Fi[4]} FC14{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 FC15{ BC16{ BC9}} Fi:1} vd v113 v114 v115 v116 v117 v118 v119 FC17{ BC18{ BC9}} Fi[2] Fi:1} vd v1 v2 v3}


 S565C1 ::~S565C1(){ note_dtor("S565C1", this);}
void  S565C1 ::v1(){vfunc_called(this, "_ZN6S565C12v1Ev");}
void  S565C1 ::v2(){vfunc_called(this, "_ZN6S565C12v2Ev");}
void  S565C1 ::v3(){vfunc_called(this, "_ZN6S565C12v3Ev");}
S565C1 ::S565C1(){ note_ctor("S565C1", this);} // tgen

static void Test_S565C1()
{
  extern Class_Descriptor cd_S565C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,56)];
    init_test(&cd_S565C1, buf);
    S565C1 *dp, &lv = *(dp=new (buf) S565C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,220), "sizeof(S565C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S565C1)");
    check_base_class_offset(lv, (S565C5*)(S565C4*)(S565C3*)(S565C2*), 0, "S565C1");
    check_base_class_offset(lv, (S565C4*)(S565C3*)(S565C2*), 0, "S565C1");
    check_base_class_offset(lv, (S565C3*)(S565C2*), 0, "S565C1");
    check_base_class_offset(lv, (S565C2*), 0, "S565C1");
    test_class_info(&lv, &cd_S565C1);
    dp->~S565C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS565C1(Test_S565C1, "S565C1", ABISELECT(288,220));

#else // __cplusplus

extern void _ZN6S565C1C1Ev();
extern void _ZN6S565C1D1Ev();
Name_Map name_map_S565C1[] = {
  NSPAIR(_ZN6S565C1C1Ev),
  NSPAIR(_ZN6S565C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S565C5;
extern VTBL_ENTRY _ZTI6S565C5[];
extern  VTBL_ENTRY _ZTV6S565C5[];
extern Class_Descriptor cd_S565C4;
extern VTBL_ENTRY _ZTI6S565C4[];
extern  VTBL_ENTRY _ZTV6S565C4[];
extern Class_Descriptor cd_S565C3;
extern VTBL_ENTRY _ZTI6S565C3[];
extern  VTBL_ENTRY _ZTV6S565C3[];
extern Class_Descriptor cd_S565C2;
extern VTBL_ENTRY _ZTI6S565C2[];
extern  VTBL_ENTRY _ZTV6S565C2[];
static Base_Class bases_S565C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S565C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S565C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S565C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S565C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S565C1[];
extern void _ZN6S565C1D1Ev();
extern void _ZN6S565C1D0Ev();
extern void _ZN6S565C52v4Ev();
extern void _ZN6S565C52v5Ev();
extern void _ZN6S565C52v6Ev();
extern void _ZN6S565C52v7Ev();
extern void _ZN6S565C52v8Ev();
extern void _ZN6S565C52v9Ev();
extern void _ZN6S565C53v10Ev();
extern void _ZN6S565C53v11Ev();
extern void _ZN6S565C53v12Ev();
extern void _ZN6S565C53v13Ev();
extern void _ZN6S565C53v14Ev();
extern void _ZN6S565C53v15Ev();
extern void _ZN6S565C53v16Ev();
extern void _ZN6S565C53v17Ev();
extern void _ZN6S565C53v18Ev();
extern void _ZN6S565C53v19Ev();
extern void _ZN6S565C53v20Ev();
extern void _ZN6S565C53v21Ev();
extern void _ZN6S565C53v22Ev();
extern void _ZN6S565C53v23Ev();
extern void _ZN6S565C53v24Ev();
extern void _ZN6S565C53v25Ev();
extern void _ZN6S565C53v26Ev();
extern void _ZN6S565C53v27Ev();
extern void _ZN6S565C53v28Ev();
extern void _ZN6S565C53v29Ev();
extern void _ZN6S565C53v30Ev();
extern void _ZN6S565C53v31Ev();
extern void _ZN6S565C53v32Ev();
extern void _ZN6S565C53v33Ev();
extern void _ZN6S565C53v34Ev();
extern void _ZN6S565C53v35Ev();
extern void _ZN6S565C53v36Ev();
extern void _ZN6S565C53v37Ev();
extern void _ZN6S565C53v38Ev();
extern void _ZN6S565C53v39Ev();
extern void _ZN6S565C53v40Ev();
extern void _ZN6S565C53v41Ev();
extern void _ZN6S565C53v42Ev();
extern void _ZN6S565C53v43Ev();
extern void _ZN6S565C53v44Ev();
extern void _ZN6S565C53v45Ev();
extern void _ZN6S565C53v46Ev();
extern void _ZN6S565C53v47Ev();
extern void _ZN6S565C53v48Ev();
extern void _ZN6S565C53v49Ev();
extern void _ZN6S565C53v50Ev();
extern void _ZN6S565C53v51Ev();
extern void _ZN6S565C53v52Ev();
extern void _ZN6S565C53v53Ev();
extern void _ZN6S565C53v54Ev();
extern void _ZN6S565C53v55Ev();
extern void _ZN6S565C53v56Ev();
extern void _ZN6S565C53v57Ev();
extern void _ZN6S565C53v58Ev();
extern void _ZN6S565C53v59Ev();
extern void _ZN6S565C53v60Ev();
extern void _ZN6S565C53v61Ev();
extern void _ZN6S565C53v62Ev();
extern void _ZN6S565C53v63Ev();
extern void _ZN6S565C53v64Ev();
extern void _ZN6S565C53v65Ev();
extern void _ZN6S565C53v66Ev();
extern void _ZN6S565C53v67Ev();
extern void _ZN6S565C43v68Ev();
extern void _ZN6S565C43v69Ev();
extern void _ZN6S565C43v70Ev();
extern void _ZN6S565C43v71Ev();
extern void _ZN6S565C43v72Ev();
extern void _ZN6S565C43v73Ev();
extern void _ZN6S565C43v74Ev();
extern void _ZN6S565C43v75Ev();
extern void _ZN6S565C43v76Ev();
extern void _ZN6S565C43v77Ev();
extern void _ZN6S565C43v78Ev();
extern void _ZN6S565C43v79Ev();
extern void _ZN6S565C43v80Ev();
extern void _ZN6S565C43v81Ev();
extern void _ZN6S565C43v82Ev();
extern void _ZN6S565C43v83Ev();
extern void _ZN6S565C43v84Ev();
extern void _ZN6S565C43v85Ev();
extern void _ZN6S565C43v86Ev();
extern void _ZN6S565C43v87Ev();
extern void _ZN6S565C43v88Ev();
extern void _ZN6S565C43v89Ev();
extern void _ZN6S565C43v90Ev();
extern void _ZN6S565C43v91Ev();
extern void _ZN6S565C43v92Ev();
extern void _ZN6S565C43v93Ev();
extern void _ZN6S565C43v94Ev();
extern void _ZN6S565C33v95Ev();
extern void _ZN6S565C33v96Ev();
extern void _ZN6S565C33v97Ev();
extern void _ZN6S565C33v98Ev();
extern void _ZN6S565C33v99Ev();
extern void _ZN6S565C34v100Ev();
extern void _ZN6S565C34v101Ev();
extern void _ZN6S565C34v102Ev();
extern void _ZN6S565C34v103Ev();
extern void _ZN6S565C34v104Ev();
extern void _ZN6S565C34v105Ev();
extern void _ZN6S565C34v106Ev();
extern void _ZN6S565C34v107Ev();
extern void _ZN6S565C34v108Ev();
extern void _ZN6S565C34v109Ev();
extern void _ZN6S565C34v110Ev();
extern void _ZN6S565C34v111Ev();
extern void _ZN6S565C34v112Ev();
extern void _ZN6S565C24v113Ev();
extern void _ZN6S565C24v114Ev();
extern void _ZN6S565C24v115Ev();
extern void _ZN6S565C24v116Ev();
extern void _ZN6S565C24v117Ev();
extern void _ZN6S565C24v118Ev();
extern void _ZN6S565C24v119Ev();
extern void _ZN6S565C12v1Ev();
extern void _ZN6S565C12v2Ev();
extern void _ZN6S565C12v3Ev();
static  VTBL_ENTRY vtc_S565C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S565C1[0]),
  (VTBL_ENTRY)&_ZN6S565C1D1Ev,
  (VTBL_ENTRY)&_ZN6S565C1D0Ev,
  (VTBL_ENTRY)&_ZN6S565C52v4Ev,
  (VTBL_ENTRY)&_ZN6S565C52v5Ev,
  (VTBL_ENTRY)&_ZN6S565C52v6Ev,
  (VTBL_ENTRY)&_ZN6S565C52v7Ev,
  (VTBL_ENTRY)&_ZN6S565C52v8Ev,
  (VTBL_ENTRY)&_ZN6S565C52v9Ev,
  (VTBL_ENTRY)&_ZN6S565C53v10Ev,
  (VTBL_ENTRY)&_ZN6S565C53v11Ev,
  (VTBL_ENTRY)&_ZN6S565C53v12Ev,
  (VTBL_ENTRY)&_ZN6S565C53v13Ev,
  (VTBL_ENTRY)&_ZN6S565C53v14Ev,
  (VTBL_ENTRY)&_ZN6S565C53v15Ev,
  (VTBL_ENTRY)&_ZN6S565C53v16Ev,
  (VTBL_ENTRY)&_ZN6S565C53v17Ev,
  (VTBL_ENTRY)&_ZN6S565C53v18Ev,
  (VTBL_ENTRY)&_ZN6S565C53v19Ev,
  (VTBL_ENTRY)&_ZN6S565C53v20Ev,
  (VTBL_ENTRY)&_ZN6S565C53v21Ev,
  (VTBL_ENTRY)&_ZN6S565C53v22Ev,
  (VTBL_ENTRY)&_ZN6S565C53v23Ev,
  (VTBL_ENTRY)&_ZN6S565C53v24Ev,
  (VTBL_ENTRY)&_ZN6S565C53v25Ev,
  (VTBL_ENTRY)&_ZN6S565C53v26Ev,
  (VTBL_ENTRY)&_ZN6S565C53v27Ev,
  (VTBL_ENTRY)&_ZN6S565C53v28Ev,
  (VTBL_ENTRY)&_ZN6S565C53v29Ev,
  (VTBL_ENTRY)&_ZN6S565C53v30Ev,
  (VTBL_ENTRY)&_ZN6S565C53v31Ev,
  (VTBL_ENTRY)&_ZN6S565C53v32Ev,
  (VTBL_ENTRY)&_ZN6S565C53v33Ev,
  (VTBL_ENTRY)&_ZN6S565C53v34Ev,
  (VTBL_ENTRY)&_ZN6S565C53v35Ev,
  (VTBL_ENTRY)&_ZN6S565C53v36Ev,
  (VTBL_ENTRY)&_ZN6S565C53v37Ev,
  (VTBL_ENTRY)&_ZN6S565C53v38Ev,
  (VTBL_ENTRY)&_ZN6S565C53v39Ev,
  (VTBL_ENTRY)&_ZN6S565C53v40Ev,
  (VTBL_ENTRY)&_ZN6S565C53v41Ev,
  (VTBL_ENTRY)&_ZN6S565C53v42Ev,
  (VTBL_ENTRY)&_ZN6S565C53v43Ev,
  (VTBL_ENTRY)&_ZN6S565C53v44Ev,
  (VTBL_ENTRY)&_ZN6S565C53v45Ev,
  (VTBL_ENTRY)&_ZN6S565C53v46Ev,
  (VTBL_ENTRY)&_ZN6S565C53v47Ev,
  (VTBL_ENTRY)&_ZN6S565C53v48Ev,
  (VTBL_ENTRY)&_ZN6S565C53v49Ev,
  (VTBL_ENTRY)&_ZN6S565C53v50Ev,
  (VTBL_ENTRY)&_ZN6S565C53v51Ev,
  (VTBL_ENTRY)&_ZN6S565C53v52Ev,
  (VTBL_ENTRY)&_ZN6S565C53v53Ev,
  (VTBL_ENTRY)&_ZN6S565C53v54Ev,
  (VTBL_ENTRY)&_ZN6S565C53v55Ev,
  (VTBL_ENTRY)&_ZN6S565C53v56Ev,
  (VTBL_ENTRY)&_ZN6S565C53v57Ev,
  (VTBL_ENTRY)&_ZN6S565C53v58Ev,
  (VTBL_ENTRY)&_ZN6S565C53v59Ev,
  (VTBL_ENTRY)&_ZN6S565C53v60Ev,
  (VTBL_ENTRY)&_ZN6S565C53v61Ev,
  (VTBL_ENTRY)&_ZN6S565C53v62Ev,
  (VTBL_ENTRY)&_ZN6S565C53v63Ev,
  (VTBL_ENTRY)&_ZN6S565C53v64Ev,
  (VTBL_ENTRY)&_ZN6S565C53v65Ev,
  (VTBL_ENTRY)&_ZN6S565C53v66Ev,
  (VTBL_ENTRY)&_ZN6S565C53v67Ev,
  (VTBL_ENTRY)&_ZN6S565C43v68Ev,
  (VTBL_ENTRY)&_ZN6S565C43v69Ev,
  (VTBL_ENTRY)&_ZN6S565C43v70Ev,
  (VTBL_ENTRY)&_ZN6S565C43v71Ev,
  (VTBL_ENTRY)&_ZN6S565C43v72Ev,
  (VTBL_ENTRY)&_ZN6S565C43v73Ev,
  (VTBL_ENTRY)&_ZN6S565C43v74Ev,
  (VTBL_ENTRY)&_ZN6S565C43v75Ev,
  (VTBL_ENTRY)&_ZN6S565C43v76Ev,
  (VTBL_ENTRY)&_ZN6S565C43v77Ev,
  (VTBL_ENTRY)&_ZN6S565C43v78Ev,
  (VTBL_ENTRY)&_ZN6S565C43v79Ev,
  (VTBL_ENTRY)&_ZN6S565C43v80Ev,
  (VTBL_ENTRY)&_ZN6S565C43v81Ev,
  (VTBL_ENTRY)&_ZN6S565C43v82Ev,
  (VTBL_ENTRY)&_ZN6S565C43v83Ev,
  (VTBL_ENTRY)&_ZN6S565C43v84Ev,
  (VTBL_ENTRY)&_ZN6S565C43v85Ev,
  (VTBL_ENTRY)&_ZN6S565C43v86Ev,
  (VTBL_ENTRY)&_ZN6S565C43v87Ev,
  (VTBL_ENTRY)&_ZN6S565C43v88Ev,
  (VTBL_ENTRY)&_ZN6S565C43v89Ev,
  (VTBL_ENTRY)&_ZN6S565C43v90Ev,
  (VTBL_ENTRY)&_ZN6S565C43v91Ev,
  (VTBL_ENTRY)&_ZN6S565C43v92Ev,
  (VTBL_ENTRY)&_ZN6S565C43v93Ev,
  (VTBL_ENTRY)&_ZN6S565C43v94Ev,
  (VTBL_ENTRY)&_ZN6S565C33v95Ev,
  (VTBL_ENTRY)&_ZN6S565C33v96Ev,
  (VTBL_ENTRY)&_ZN6S565C33v97Ev,
  (VTBL_ENTRY)&_ZN6S565C33v98Ev,
  (VTBL_ENTRY)&_ZN6S565C33v99Ev,
  (VTBL_ENTRY)&_ZN6S565C34v100Ev,
  (VTBL_ENTRY)&_ZN6S565C34v101Ev,
  (VTBL_ENTRY)&_ZN6S565C34v102Ev,
  (VTBL_ENTRY)&_ZN6S565C34v103Ev,
  (VTBL_ENTRY)&_ZN6S565C34v104Ev,
  (VTBL_ENTRY)&_ZN6S565C34v105Ev,
  (VTBL_ENTRY)&_ZN6S565C34v106Ev,
  (VTBL_ENTRY)&_ZN6S565C34v107Ev,
  (VTBL_ENTRY)&_ZN6S565C34v108Ev,
  (VTBL_ENTRY)&_ZN6S565C34v109Ev,
  (VTBL_ENTRY)&_ZN6S565C34v110Ev,
  (VTBL_ENTRY)&_ZN6S565C34v111Ev,
  (VTBL_ENTRY)&_ZN6S565C34v112Ev,
  (VTBL_ENTRY)&_ZN6S565C24v113Ev,
  (VTBL_ENTRY)&_ZN6S565C24v114Ev,
  (VTBL_ENTRY)&_ZN6S565C24v115Ev,
  (VTBL_ENTRY)&_ZN6S565C24v116Ev,
  (VTBL_ENTRY)&_ZN6S565C24v117Ev,
  (VTBL_ENTRY)&_ZN6S565C24v118Ev,
  (VTBL_ENTRY)&_ZN6S565C24v119Ev,
  (VTBL_ENTRY)&_ZN6S565C12v1Ev,
  (VTBL_ENTRY)&_ZN6S565C12v2Ev,
  (VTBL_ENTRY)&_ZN6S565C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S565C1[];
extern  VTBL_ENTRY _ZTV6S565C1[];
Class_Descriptor cd_S565C1 = {  "S565C1", // class name
  bases_S565C1, 4,
  &(vtc_S565C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,220), // object size
  NSPAIRA(_ZTI6S565C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S565C1),123, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19863C2_nt  {
  void  mf19863c2(); // _ZN11S19863C2_nt9mf19863c2Ev
};
//SIG(-1 S19863C2_nt) C1{ m}


void  S19863C2_nt ::mf19863c2(){}

//skip512 S19863C2_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S19863C2_nt[];
VTBL_ENTRY *P__ZTI11S19863C2_nt = _ZTI11S19863C2_nt; 
Class_Descriptor cd_S19863C2_nt = {  "S19863C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S19863C2_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  S19863C8  {
  void  mf19863c8(); // _ZN8S19863C89mf19863c8Ev
};
//SIG(-1 S19863C8) C1{ m}


void  S19863C8 ::mf19863c8(){}

static void Test_S19863C8()
{
  {
    init_simple_test("S19863C8");
    S19863C8 lv;
    check2(sizeof(lv), 1, "sizeof(S19863C8)");
    check2(__alignof__(lv), 1, "__alignof__(S19863C8)");
  }
}
static Arrange_To_Call_Me vS19863C8(Test_S19863C8, "S19863C8", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19863C8[];
VTBL_ENTRY *P__ZTI8S19863C8 = _ZTI8S19863C8; 
Class_Descriptor cd_S19863C8 = {  "S19863C8", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S19863C8),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  S19863C9_nt  {
  int s19863c9f0;
  void  mf19863c9(); // _ZN11S19863C9_nt9mf19863c9Ev
};
//SIG(-1 S19863C9_nt) C1{ m Fi}


void  S19863C9_nt ::mf19863c9(){}

//skip512 S19863C9_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S19863C9_nt[];
VTBL_ENTRY *P__ZTI11S19863C9_nt = _ZTI11S19863C9_nt; 
Class_Descriptor cd_S19863C9_nt = {  "S19863C9_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI11S19863C9_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  S19863C7  : virtual S19863C8 , virtual S19863C9_nt {
  long double s19863c7f0[10];
  virtual  ~S19863C7(); // _ZN8S19863C7D2Ev
  S19863C7(); // tgen
};
//SIG(-1 S19863C7) C1{ VBC2{ m} VBC3{ m Fi} vd FD[10]}


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

static void Test_S19863C7()
{
  extern Class_Descriptor cd_S19863C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S19863C7, buf);
    S19863C7 *dp, &lv = *(dp=new (buf) S19863C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S19863C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19863C7)");
    check_base_class_offset(lv, (S19863C8*), 0, "S19863C7");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(176,124), "S19863C7");
    check_field_offset(lv, s19863c7f0, ABISELECT(16,4), "S19863C7.s19863c7f0");
    test_class_info(&lv, &cd_S19863C7);
    dp->~S19863C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19863C7(Test_S19863C7, "S19863C7", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN8S19863C7C1Ev();
extern void _ZN8S19863C7D2Ev();
Name_Map name_map_S19863C7[] = {
  NSPAIR(_ZN8S19863C7C1Ev),
  NSPAIR(_ZN8S19863C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S19863C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C9_nt,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19863C7[];
extern void _ZN8S19863C7D1Ev();
extern void _ZN8S19863C7D0Ev();
static  VTBL_ENTRY vtc_S19863C7[] = {
  ABISELECT(176,124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C7[0]),
  (VTBL_ENTRY)&_ZN8S19863C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19863C7[];
static  VTT_ENTRY vtt_S19863C7[] = {
  {&(_ZTV8S19863C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19863C7[];
extern  VTBL_ENTRY _ZTV8S19863C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C7[];
Class_Descriptor cd_S19863C7 = {  "S19863C7", // class name
  bases_S19863C7, 2,
  &(vtc_S19863C7[0]), // expected_vtbl_contents
  &(vtt_S19863C7[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI8S19863C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19863C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19863C7),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  S19863C6  {
  ::S19863C7 s19863c6f0;
  void  mf19863c6(); // _ZN8S19863C69mf19863c6Ev
  virtual  ~S19863C6(); // _ZN8S19863C6D1Ev
  S19863C6(); // tgen
};
//SIG(-1 S19863C6) C1{ vd m FC2{ VBC3{ m} VBC4{ m Fi} vd FD[10]}}


void  S19863C6 ::mf19863c6(){}
 S19863C6 ::~S19863C6(){ note_dtor("S19863C6", this);}
S19863C6 ::S19863C6(){ note_ctor("S19863C6", this);} // tgen

static void Test_S19863C6()
{
  extern Class_Descriptor cd_S19863C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,34)];
    init_test(&cd_S19863C6, buf);
    S19863C6 *dp, &lv = *(dp=new (buf) S19863C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,132), "sizeof(S19863C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19863C6)");
    check_field_offset(lv, s19863c6f0, ABISELECT(16,4), "S19863C6.s19863c6f0");
    test_class_info(&lv, &cd_S19863C6);
    dp->~S19863C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19863C6(Test_S19863C6, "S19863C6", ABISELECT(208,132));

#else // __cplusplus

extern void _ZN8S19863C6C1Ev();
extern void _ZN8S19863C6D1Ev();
Name_Map name_map_S19863C6[] = {
  NSPAIR(_ZN8S19863C6C1Ev),
  NSPAIR(_ZN8S19863C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19863C6[];
extern void _ZN8S19863C6D1Ev();
extern void _ZN8S19863C6D0Ev();
static  VTBL_ENTRY vtc_S19863C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C6[0]),
  (VTBL_ENTRY)&_ZN8S19863C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C6D0Ev,
};
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
Class_Descriptor cd_S19863C6 = {  "S19863C6", // class name
  0,0,//no base classes
  &(vtc_S19863C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,132), // object size
  NSPAIRA(_ZTI8S19863C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19863C6),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  S19863C10  {
  void  mf19863c10(); // _ZN9S19863C1010mf19863c10Ev
};
//SIG(-1 S19863C10) C1{ m}


void  S19863C10 ::mf19863c10(){}

static void Test_S19863C10()
{
  {
    init_simple_test("S19863C10");
    S19863C10 lv;
    check2(sizeof(lv), 1, "sizeof(S19863C10)");
    check2(__alignof__(lv), 1, "__alignof__(S19863C10)");
  }
}
static Arrange_To_Call_Me vS19863C10(Test_S19863C10, "S19863C10", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S19863C10[];
VTBL_ENTRY *P__ZTI9S19863C10 = _ZTI9S19863C10; 
Class_Descriptor cd_S19863C10 = {  "S19863C10", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S19863C10),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  S19863C5  : virtual S19863C6 , virtual S19863C10 , virtual S19863C8 {
  void *s19863c5f0;
  ~S19863C5(); // tgen
  S19863C5(); // tgen
};
//SIG(-1 S19863C5) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} VBC6{ m} VBC4 Fp}


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

static void Test_S19863C5()
{
  extern Class_Descriptor cd_S19863C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,36)];
    init_test(&cd_S19863C5, buf);
    S19863C5 *dp, &lv = *(dp=new (buf) S19863C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S19863C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19863C5)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,8), "S19863C5");
    check_base_class_offset(lv, (S19863C10*), 0, "S19863C5");
    check_base_class_offset(lv, (S19863C8*), 0, "S19863C5");
    check_field_offset(lv, s19863c5f0, ABISELECT(8,4), "S19863C5.s19863c5f0");
    test_class_info(&lv, &cd_S19863C5);
    dp->~S19863C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19863C5(Test_S19863C5, "S19863C5", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN8S19863C5C1Ev();
extern void _ZN8S19863C5D1Ev();
Name_Map name_map_S19863C5[] = {
  NSPAIR(_ZN8S19863C5C1Ev),
  NSPAIR(_ZN8S19863C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
static Base_Class bases_S19863C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,8), //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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19863C5[];
extern void _ZN8S19863C5D1Ev();
extern void _ZN8S19863C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S19863C5D1Ev,_ZThn8_N8S19863C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S19863C5D0Ev,_ZThn8_N8S19863C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19863C5[] = {
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C5[0]),
  (VTBL_ENTRY)&_ZN8S19863C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C5D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19863C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S19863C5[];
static  VTT_ENTRY vtt_S19863C5[] = {
  {&(_ZTV8S19863C5[5]),  5,12},
  {&(_ZTV8S19863C5[10]),  10,12},
};
extern VTBL_ENTRY _ZTI8S19863C5[];
extern  VTBL_ENTRY _ZTV8S19863C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C5[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19863C5D0Ev,_ZThn8_N8S19863C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19863C5D1Ev,_ZThn8_N8S19863C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19863C5 = {  "S19863C5", // class name
  bases_S19863C5, 3,
  &(vtc_S19863C5[0]), // expected_vtbl_contents
  &(vtt_S19863C5[0]), // expected_vtt_contents
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI8S19863C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19863C5),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19863C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19863C12_nt  {
  short s19863c12f0;
  void  mf19863c12(); // _ZN12S19863C12_nt10mf19863c12Ev
};
//SIG(-1 S19863C12_nt) C1{ m Fs}


void  S19863C12_nt ::mf19863c12(){}

//skip512 S19863C12_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI12S19863C12_nt[];
VTBL_ENTRY *P__ZTI12S19863C12_nt = _ZTI12S19863C12_nt; 
Class_Descriptor cd_S19863C12_nt = {  "S19863C12_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  2, // object size
  NSPAIRA(_ZTI12S19863C12_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  S19863C11  : S19863C12_nt {
  virtual void  v1(); // _ZN9S19863C112v1Ev
  ~S19863C11(); // tgen
  S19863C11(); // tgen
};
//SIG(-1 S19863C11) C1{ BC2{ m Fs} v1}


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

static void Test_S19863C11()
{
  extern Class_Descriptor cd_S19863C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19863C11, buf);
    S19863C11 *dp, &lv = *(dp=new (buf) S19863C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19863C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19863C11)");
    check_base_class_offset(lv, (S19863C12_nt*), ABISELECT(8,4), "S19863C11");
    test_class_info(&lv, &cd_S19863C11);
    dp->~S19863C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19863C11(Test_S19863C11, "S19863C11", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19863C11C1Ev();
extern void _ZN9S19863C11D1Ev();
Name_Map name_map_S19863C11[] = {
  NSPAIR(_ZN9S19863C11C1Ev),
  NSPAIR(_ZN9S19863C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
static Base_Class bases_S19863C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C12_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 _ZTI9S19863C11[];
extern void _ZN9S19863C112v1Ev();
static  VTBL_ENTRY vtc_S19863C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C11[0]),
  (VTBL_ENTRY)&_ZN9S19863C112v1Ev,
};
extern VTBL_ENTRY _ZTI9S19863C11[];
extern  VTBL_ENTRY _ZTV9S19863C11[];
Class_Descriptor cd_S19863C11 = {  "S19863C11", // class name
  bases_S19863C11, 1,
  &(vtc_S19863C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19863C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19863C11),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  S19863C15_nt  : S19863C8 {
};
//SIG(-1 S19863C15_nt) C1{ BC2{ m}}



//skip512 S19863C15_nt

#else // __cplusplus

extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
static Base_Class bases_S19863C15_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S19863C15_nt[];
VTBL_ENTRY *P__ZTI12S19863C15_nt = _ZTI12S19863C15_nt; 
Class_Descriptor cd_S19863C15_nt = {  "S19863C15_nt", // class name
  bases_S19863C15_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI12S19863C15_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  S19863C14  : virtual S19863C7 , S19863C15_nt {
  char s19863c14f0;
  virtual  ~S19863C14(); // _ZN9S19863C14D2Ev
  S19863C14(); // tgen
};
//SIG(-1 S19863C14) C1{ VBC2{ VBC3{ m} VBC4{ m Fi} vd FD[10]} BC5{ BC3} vd Fc}


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

static void Test_S19863C14()
{
  extern Class_Descriptor cd_S19863C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S19863C14, buf);
    S19863C14 *dp, &lv = *(dp=new (buf) S19863C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S19863C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19863C14)");
    check_base_class_offset(lv, (S19863C8*)(S19863C7*), ABISELECT(192,132), "S19863C14");
    check_base_class_offset(lv, (S19863C9_nt*)(S19863C7*), ABISELECT(192,132), "S19863C14");
    check_base_class_offset(lv, (S19863C7*), ABISELECT(16,8), "S19863C14");
    check_base_class_offset(lv, (S19863C8*)(S19863C15_nt*), 0, "S19863C14");
    check_base_class_offset(lv, (S19863C15_nt*), 0, "S19863C14");
    check_field_offset(lv, s19863c14f0, ABISELECT(8,4), "S19863C14.s19863c14f0");
    test_class_info(&lv, &cd_S19863C14);
    dp->~S19863C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19863C14(Test_S19863C14, "S19863C14", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN9S19863C14C1Ev();
extern void _ZN9S19863C14D2Ev();
Name_Map name_map_S19863C14[] = {
  NSPAIR(_ZN9S19863C14C1Ev),
  NSPAIR(_ZN9S19863C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19863C7;
extern VTBL_ENTRY _ZTI8S19863C7[];
extern  VTBL_ENTRY _ZTV8S19863C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C7[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C15_nt;
extern VTBL_ENTRY _ZTI12S19863C15_nt[];
static Base_Class bases_S19863C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C8,    ABISELECT(192,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(192,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C7,    ABISELECT(16,8), //bcp->offset
    7, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C15_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 _ZTI9S19863C14[];
extern void _ZN9S19863C14D1Ev();
extern void _ZN9S19863C14D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19863C14D1Ev,_ZTv0_n20_N9S19863C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S19863C14D1Ev,_ZThn8_N9S19863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19863C14D0Ev,_ZTv0_n20_N9S19863C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S19863C14D0Ev,_ZThn8_N9S19863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19863C14[] = {
  ABISELECT(192,132),
  ABISELECT(192,132),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C14[0]),
  (VTBL_ENTRY)&_ZN9S19863C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C14D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19863C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C14D1Ev,_ZTv0_n20_N9S19863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C14D0Ev,_ZTv0_n20_N9S19863C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19863C14[];
extern void _ZN8S19863C7D1Ev();
extern void _ZN8S19863C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19863C7__9S19863C14[] = {
  ABISELECT(176,124),
  ABISELECT(176,124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C7[0]),
  (VTBL_ENTRY)&_ZN8S19863C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C7D0Ev,
};
static  VTT_ENTRY vtt_S19863C14[] = {
  {&(_ZTV9S19863C14[5]),  5,14},
  {&(_ZTV9S19863C14[12]),  12,14},
  {&(_tg__ZTV8S19863C7__9S19863C14[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19863C14[];
extern  VTBL_ENTRY _ZTV9S19863C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C14[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C14D0Ev,_ZTv0_n20_N9S19863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19863C14D0Ev,_ZThn8_N9S19863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C14D1Ev,_ZTv0_n20_N9S19863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19863C14D1Ev,_ZThn8_N9S19863C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19863C14 = {  "S19863C14", // class name
  bases_S19863C14, 5,
  &(vtc_S19863C14[0]), // expected_vtbl_contents
  &(vtt_S19863C14[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI9S19863C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19863C14),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19863C14),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19863C16  : virtual S19863C6 , S19863C10 {
  virtual  ~S19863C16(); // _ZN9S19863C16D2Ev
  S19863C16(); // tgen
};
//SIG(-1 S19863C16) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} BC6{ m} vd}


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

static void Test_S19863C16()
{
  extern Class_Descriptor cd_S19863C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,35)];
    init_test(&cd_S19863C16, buf);
    S19863C16 *dp, &lv = *(dp=new (buf) S19863C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,136), "sizeof(S19863C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19863C16)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,4), "S19863C16");
    check_base_class_offset(lv, (S19863C10*), 0, "S19863C16");
    test_class_info(&lv, &cd_S19863C16);
    dp->~S19863C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19863C16(Test_S19863C16, "S19863C16", ABISELECT(224,136));

#else // __cplusplus

extern void _ZN9S19863C16C1Ev();
extern void _ZN9S19863C16D2Ev();
Name_Map name_map_S19863C16[] = {
  NSPAIR(_ZN9S19863C16C1Ev),
  NSPAIR(_ZN9S19863C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S19863C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,4), //bcp->offset
    5, //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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19863C16[];
extern void _ZN9S19863C16D1Ev();
extern void _ZN9S19863C16D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19863C16D1Ev,_ZTv0_n12_N9S19863C16D1Ev)();
extern void ABISELECT(_ZThn16_N9S19863C16D1Ev,_ZThn4_N9S19863C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19863C16D0Ev,_ZTv0_n12_N9S19863C16D0Ev)();
extern void ABISELECT(_ZThn16_N9S19863C16D0Ev,_ZThn4_N9S19863C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19863C16[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C16[0]),
  (VTBL_ENTRY)&_ZN9S19863C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C16D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S19863C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C16D1Ev,_ZTv0_n12_N9S19863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C16D0Ev,_ZTv0_n12_N9S19863C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19863C16[];
static  VTT_ENTRY vtt_S19863C16[] = {
  {&(_ZTV9S19863C16[3]),  3,10},
  {&(_ZTV9S19863C16[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19863C16[];
extern  VTBL_ENTRY _ZTV9S19863C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C16[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19863C16D0Ev,_ZTv0_n12_N9S19863C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19863C16D0Ev,_ZThn4_N9S19863C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19863C16D1Ev,_ZTv0_n12_N9S19863C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19863C16D1Ev,_ZThn4_N9S19863C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19863C16 = {  "S19863C16", // class name
  bases_S19863C16, 2,
  &(vtc_S19863C16[0]), // expected_vtbl_contents
  &(vtt_S19863C16[0]), // expected_vtt_contents
  ABISELECT(224,136), // object size
  NSPAIRA(_ZTI9S19863C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19863C16),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19863C16),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19863C13  : virtual S19863C14 {
  ::S19863C16 s19863c13f0;
  int s19863c13f1;
  virtual  ~S19863C13(); // _ZN9S19863C13D2Ev
  S19863C13(); // tgen
};
//SIG(-1 S19863C13) C1{ VBC2{ VBC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]} BC6{ BC4} vd Fc} vd FC7{ VBC8{ vd m FC3} BC9{ m} vd} Fi}


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

static void Test_S19863C13()
{
  extern Class_Descriptor cd_S19863C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,71)];
    init_test(&cd_S19863C13, buf);
    S19863C13 *dp, &lv = *(dp=new (buf) S19863C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,280), "sizeof(S19863C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19863C13)");
    check_base_class_offset(lv, (S19863C8*)(S19863C7*), 0, "S19863C13");
    check_base_class_offset(lv, (S19863C9_nt*)(S19863C7*), ABISELECT(448,276), "S19863C13");
    check_base_class_offset(lv, (S19863C7*)(S19863C14*), ABISELECT(272,152), "S19863C13");
    check_base_class_offset(lv, (S19863C8*)(S19863C15_nt*)(S19863C14*), ABISELECT(248,144), "S19863C13");
    check_base_class_offset(lv, (S19863C15_nt*)(S19863C14*), ABISELECT(248,144), "S19863C13");
    check_base_class_offset(lv, (S19863C14*), ABISELECT(248,144), "S19863C13");
    check_field_offset(lv, s19863c13f0, ABISELECT(16,4), "S19863C13.s19863c13f0");
    check_field_offset(lv, s19863c13f1, ABISELECT(240,140), "S19863C13.s19863c13f1");
    test_class_info(&lv, &cd_S19863C13);
    dp->~S19863C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19863C13(Test_S19863C13, "S19863C13", ABISELECT(464,280));

#else // __cplusplus

extern void _ZN9S19863C13C1Ev();
extern void _ZN9S19863C13D2Ev();
Name_Map name_map_S19863C13[] = {
  NSPAIR(_ZN9S19863C13C1Ev),
  NSPAIR(_ZN9S19863C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19863C7;
extern VTBL_ENTRY _ZTI8S19863C7[];
extern  VTBL_ENTRY _ZTV8S19863C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C7[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C15_nt;
extern VTBL_ENTRY _ZTI12S19863C15_nt[];
extern Class_Descriptor cd_S19863C14;
extern VTBL_ENTRY _ZTI9S19863C14[];
extern  VTBL_ENTRY _ZTV9S19863C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C14[];
static Base_Class bases_S19863C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(448,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C7,    ABISELECT(272,152), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19863C8,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19863C15_nt,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19863C14,    ABISELECT(248,144), //bcp->offset
    8, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19863C13[];
extern void _ZN9S19863C13D1Ev();
extern void _ZN9S19863C13D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19863C13D1Ev,_ZTv0_n24_N9S19863C13D1Ev)();
extern void ABISELECT(_ZThn248_N9S19863C13D1Ev,_ZThn144_N9S19863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19863C13D0Ev,_ZTv0_n24_N9S19863C13D0Ev)();
extern void ABISELECT(_ZThn248_N9S19863C13D0Ev,_ZThn144_N9S19863C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19863C13D1Ev,_ZTv0_n20_N9S19863C13D1Ev)();
extern void ABISELECT(_ZThn272_N9S19863C13D1Ev,_ZThn152_N9S19863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19863C13D0Ev,_ZTv0_n20_N9S19863C13D0Ev)();
extern void ABISELECT(_ZThn272_N9S19863C13D0Ev,_ZThn152_N9S19863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19863C13[] = {
  ABISELECT(448,276),
  0,
  ABISELECT(272,152),
  ABISELECT(248,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C13[0]),
  (VTBL_ENTRY)&_ZN9S19863C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C13D0Ev,
  ABISELECT(-248,-144),
  ABISELECT(200,132),
  ABISELECT(-248,-144),
  ABISELECT(24,8),
  ABISELECT(-248,-144),
  (VTBL_ENTRY)&(_ZTI9S19863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19863C13D1Ev,_ZTv0_n24_N9S19863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19863C13D0Ev,_ZTv0_n24_N9S19863C13D0Ev),
  ABISELECT(-272,-152),
  ABISELECT(176,124),
  ABISELECT(-272,-152),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI9S19863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C13D1Ev,_ZTv0_n20_N9S19863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C13D0Ev,_ZTv0_n20_N9S19863C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19863C13[];
extern void _ZN9S19863C14D1Ev();
extern void _ZN9S19863C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19863C14__9S19863C13[] = {
  ABISELECT(200,132),
  ABISELECT(-248,-144),
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C14[0]),
  (VTBL_ENTRY)&_ZN9S19863C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C14D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19863C14D1Ev,_ZTv0_n20_N9S19863C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19863C14D1Ev,_ZThn8_N9S19863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19863C14D0Ev,_ZTv0_n20_N9S19863C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19863C14D0Ev,_ZThn8_N9S19863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C7__9S19863C14__9S19863C13[] = {
  ABISELECT(-24,-8),
  ABISELECT(176,124),
  ABISELECT(-272,-152),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI9S19863C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C14D1Ev,_ZTv0_n20_N9S19863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C14D0Ev,_ZTv0_n20_N9S19863C14D0Ev),
};
extern void _ZN8S19863C7D1Ev();
extern void _ZN8S19863C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19863C7__9S19863C13[] = {
  ABISELECT(176,124),
  ABISELECT(-272,-152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C7[0]),
  (VTBL_ENTRY)&_ZN8S19863C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C7D0Ev,
};
static  VTT_ENTRY vtt_S19863C13[] = {
  {&(_ZTV9S19863C13[6]),  6,23},
  {&(_ZTV9S19863C13[14]),  14,23},
  {&(_ZTV9S19863C13[21]),  21,23},
  {&(_tg__ZTV9S19863C14__9S19863C13[5]),  5,7},
  {&(_tg__ZTV8S19863C7__9S19863C14__9S19863C13[5]),  5,7},
  {&(_tg__ZTV8S19863C7__9S19863C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19863C13[];
extern  VTBL_ENTRY _ZTV9S19863C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C13[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C14D0Ev,_ZTv0_n20_N9S19863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19863C14D0Ev,_ZThn8_N9S19863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C14D1Ev,_ZTv0_n20_N9S19863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19863C14D1Ev,_ZThn8_N9S19863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C13D0Ev,_ZTv0_n20_N9S19863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19863C13D0Ev,_ZThn152_N9S19863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C13D1Ev,_ZTv0_n20_N9S19863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19863C13D1Ev,_ZThn152_N9S19863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19863C13D0Ev,_ZTv0_n24_N9S19863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19863C13D0Ev,_ZThn144_N9S19863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19863C13D1Ev,_ZTv0_n24_N9S19863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19863C13D1Ev,_ZThn144_N9S19863C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19863C13 = {  "S19863C13", // class name
  bases_S19863C13, 6,
  &(vtc_S19863C13[0]), // expected_vtbl_contents
  &(vtt_S19863C13[0]), // expected_vtt_contents
  ABISELECT(464,280), // object size
  NSPAIRA(_ZTI9S19863C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19863C13),23, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19863C13),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19863C18  : S19863C10 , S19863C8 , virtual S19863C15_nt , virtual S19863C9_nt {
  ~S19863C18(); // tgen
  S19863C18(); // tgen
};
//SIG(-1 S19863C18) C1{ BC2{ m} BC3{ m} VBC4{ BC3} VBC5{ m Fi}}


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

static void Test_S19863C18()
{
  extern Class_Descriptor cd_S19863C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19863C18, buf);
    S19863C18 *dp, &lv = *(dp=new (buf) S19863C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19863C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19863C18)");
    check_base_class_offset(lv, (S19863C10*), 0, "S19863C18");
    /*is_ambiguous_... S19863C18::S19863C8 */ AMB_check_base_class_offset(lv, (S19863C8*), 0, "S19863C18");
    check_base_class_offset(lv, (S19863C8*)(S19863C15_nt*), ABISELECT(8,4), "S19863C18");
    check_base_class_offset(lv, (S19863C15_nt*), ABISELECT(8,4), "S19863C18");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(8,4), "S19863C18");
    test_class_info(&lv, &cd_S19863C18);
    dp->~S19863C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19863C18(Test_S19863C18, "S19863C18", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19863C18C1Ev();
extern void _ZN9S19863C18D1Ev();
Name_Map name_map_S19863C18[] = {
  NSPAIR(_ZN9S19863C18C1Ev),
  NSPAIR(_ZN9S19863C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C15_nt;
extern VTBL_ENTRY _ZTI12S19863C15_nt[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S19863C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C8,    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_S19863C15_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, 1},
  {&cd_S19863C9_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19863C18[];
static  VTBL_ENTRY vtc_S19863C18[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C18[0]),
};
extern VTBL_ENTRY _ZTV9S19863C18[];
static  VTT_ENTRY vtt_S19863C18[] = {
  {&(_ZTV9S19863C18[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19863C18[];
extern  VTBL_ENTRY _ZTV9S19863C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C18[];
Class_Descriptor cd_S19863C18 = {  "S19863C18", // class name
  bases_S19863C18, 5,
  &(vtc_S19863C18[0]), // expected_vtbl_contents
  &(vtt_S19863C18[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19863C18),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19863C18),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19863C18),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  S19863C17  : virtual S19863C12_nt , virtual S19863C9_nt , virtual S19863C6 , virtual S19863C16 , S19863C18 {
  int s19863c17f0;
  virtual  ~S19863C17(); // _ZN9S19863C17D2Ev
  S19863C17(); // tgen
};
//SIG(-1 S19863C17) C1{ VBC2{ m Fs} VBC3{ m Fi} VBC4{ vd m FC5{ VBC6{ m} VBC3 vd FD[10]}} VBC7{ VBC4 BC8{ m} vd} BC9{ BC8 BC6 VBC10{ BC6} VBC3} vd Fi}


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

static void Test_S19863C17()
{
  extern Class_Descriptor cd_S19863C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,40)];
    init_test(&cd_S19863C17, buf);
    S19863C17 *dp, &lv = *(dp=new (buf) S19863C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,156), "sizeof(S19863C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19863C17)");
    check_base_class_offset(lv, (S19863C12_nt*), ABISELECT(12,8), "S19863C17");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(16,12), "S19863C17");
    check_base_class_offset(lv, (S19863C9_nt*)(S19863C18*), ABISELECT(16,12), "S19863C17");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(32,16), "S19863C17");
    check_base_class_offset(lv, (S19863C6*)(S19863C16*), ABISELECT(32,16), "S19863C17");
    check_base_class_offset(lv, (S19863C10*)(S19863C16*), ABISELECT(240,148), "S19863C17");
    check_base_class_offset(lv, (S19863C16*), ABISELECT(240,148), "S19863C17");
    check_base_class_offset(lv, (S19863C10*)(S19863C18*), 0, "S19863C17");
    /*is_ambiguous_... S19863C18::S19863C8 */ AMB_check_base_class_offset(lv, (S19863C8*)(S19863C18*), 0, "S19863C17");
    check_base_class_offset(lv, (S19863C8*)(S19863C15_nt*), ABISELECT(248,152), "S19863C17");
    check_base_class_offset(lv, (S19863C15_nt*)(S19863C18*), ABISELECT(248,152), "S19863C17");
    check_base_class_offset(lv, (S19863C18*), 0, "S19863C17");
    check_field_offset(lv, s19863c17f0, ABISELECT(8,4), "S19863C17.s19863c17f0");
    test_class_info(&lv, &cd_S19863C17);
    dp->~S19863C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19863C17(Test_S19863C17, "S19863C17", ABISELECT(256,156));

#else // __cplusplus

extern void _ZN9S19863C17C1Ev();
extern void _ZN9S19863C17D2Ev();
Name_Map name_map_S19863C17[] = {
  NSPAIR(_ZN9S19863C17C1Ev),
  NSPAIR(_ZN9S19863C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C16;
extern VTBL_ENTRY _ZTI9S19863C16[];
extern  VTBL_ENTRY _ZTV9S19863C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C16[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C15_nt;
extern VTBL_ENTRY _ZTI12S19863C15_nt[];
extern Class_Descriptor cd_S19863C18;
extern VTBL_ENTRY _ZTI9S19863C18[];
extern  VTBL_ENTRY _ZTV9S19863C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C18[];
static Base_Class bases_S19863C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C12_nt,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C9_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C6,    ABISELECT(32,16), //bcp->offset
    9, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C10,    ABISELECT(240,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19863C16,    ABISELECT(240,148), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    ABISELECT(248,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
    8, //immediately_derived
  0, 0},
  {&cd_S19863C15_nt,    ABISELECT(248,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
    9, //immediately_derived
  0, 1},
  {&cd_S19863C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19863C17[];
extern void _ZN9S19863C17D1Ev();
extern void _ZN9S19863C17D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19863C17D1Ev,_ZTv0_n12_N9S19863C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19863C17D1Ev,_ZThn16_N9S19863C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19863C17D0Ev,_ZTv0_n12_N9S19863C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19863C17D0Ev,_ZThn16_N9S19863C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19863C17D1Ev,_ZTv0_n16_N9S19863C17D1Ev)();
extern void ABISELECT(_ZThn240_N9S19863C17D1Ev,_ZThn148_N9S19863C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19863C17D0Ev,_ZTv0_n16_N9S19863C17D0Ev)();
extern void ABISELECT(_ZThn240_N9S19863C17D0Ev,_ZThn148_N9S19863C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19863C17[] = {
  ABISELECT(240,148),
  ABISELECT(32,16),
  ABISELECT(12,8),
  ABISELECT(16,12),
  ABISELECT(248,152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C17[0]),
  (VTBL_ENTRY)&_ZN9S19863C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C17D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19863C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C17D1Ev,_ZTv0_n12_N9S19863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C17D0Ev,_ZTv0_n12_N9S19863C17D0Ev),
  ABISELECT(-240,-148),
  ABISELECT(-208,-132),
  ABISELECT(-240,-148),
  (VTBL_ENTRY)&(_ZTI9S19863C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19863C17D1Ev,_ZTv0_n16_N9S19863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19863C17D0Ev,_ZTv0_n16_N9S19863C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19863C17[];
static  VTBL_ENTRY _tg__ZTV9S19863C18__9S19863C17[] = {
  ABISELECT(16,12),
  ABISELECT(248,152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C18[0]),
};
extern void _ZN9S19863C16D1Ev();
extern void _ZN9S19863C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19863C16__9S19863C17[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C16[0]),
  (VTBL_ENTRY)&_ZN9S19863C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19863C16D1Ev,_ZTv0_n12_N9S19863C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19863C16D0Ev,_ZTv0_n12_N9S19863C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19863C16__9S19863C17[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S19863C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C16D1Ev,_ZTv0_n12_N9S19863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C16D0Ev,_ZTv0_n12_N9S19863C16D0Ev),
};
static  VTT_ENTRY vtt_S19863C17[] = {
  {&(_ZTV9S19863C17[7]),  7,20},
  {&(_tg__ZTV9S19863C18__9S19863C17[4]),  4,4},
  {&(_ZTV9S19863C17[12]),  12,20},
  {&(_ZTV9S19863C17[18]),  18,20},
  {&(_tg__ZTV9S19863C16__9S19863C17[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19863C16__9S19863C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19863C17[];
extern  VTBL_ENTRY _ZTV9S19863C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C17[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19863C17D0Ev,_ZTv0_n16_N9S19863C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19863C17D0Ev,_ZThn148_N9S19863C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19863C17D1Ev,_ZTv0_n16_N9S19863C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19863C17D1Ev,_ZThn148_N9S19863C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19863C17D0Ev,_ZTv0_n12_N9S19863C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19863C17D0Ev,_ZThn16_N9S19863C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19863C17D1Ev,_ZTv0_n12_N9S19863C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19863C17D1Ev,_ZThn16_N9S19863C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19863C17 = {  "S19863C17", // class name
  bases_S19863C17, 10,
  &(vtc_S19863C17[0]), // expected_vtbl_contents
  &(vtt_S19863C17[0]), // expected_vtt_contents
  ABISELECT(256,156), // object size
  NSPAIRA(_ZTI9S19863C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19863C17),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19863C17),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19863C3  : S165C11_nt , S19863C5 , virtual S19863C11 , virtual S19863C13 , virtual S19863C17 {
  ~S19863C3(); // tgen
  S19863C3(); // tgen
};
//SIG(-1 S19863C3) C1{ BC2{ m Fi} BC3{ VBC4{ vd m FC5{ VBC6{ m} VBC7{ m Fi} vd FD[10]}} VBC8{ m} VBC6 Fp} VBC9{ BC10{ m Fs} v1} VBC11{ VBC12{ VBC5 BC13{ BC6} vd Fc} vd FC14{ VBC4 BC8 vd} Fi} VBC15{ VBC10 VBC7 VBC4 VBC14 BC16{ BC8 BC6 VBC13 VBC7} vd Fi}}


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

static void Test_S19863C3()
{
  extern Class_Descriptor cd_S19863C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(48,114)];
    init_test(&cd_S19863C3, buf);
    S19863C3 *dp, &lv = *(dp=new (buf) S19863C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(752,452), "sizeof(S19863C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19863C3)");
    check_base_class_offset(lv, (S165C11_nt*), ABISELECT(16,8), "S19863C3");
    check_base_class_offset(lv, (S19863C6*)(S19863C5*), ABISELECT(32,12), "S19863C3");
    check_base_class_offset(lv, (S19863C6*)(S19863C17*), ABISELECT(32,12), "S19863C3");
    check_base_class_offset(lv, (S19863C6*)(S19863C16*), ABISELECT(32,12), "S19863C3");
    check_base_class_offset(lv, (S19863C10*)(S19863C5*), 0, "S19863C3");
    check_base_class_offset(lv, (S19863C8*)(S19863C5*), 0, "S19863C3");
    check_base_class_offset(lv, (S19863C8*)(S19863C7*), 0, "S19863C3");
    check_base_class_offset(lv, (S19863C5*), 0, "S19863C3");
    check_base_class_offset(lv, (S19863C12_nt*)(S19863C11*), ABISELECT(248,148), "S19863C3");
    check_base_class_offset(lv, (S19863C11*), ABISELECT(240,144), "S19863C3");
    check_base_class_offset(lv, (S19863C9_nt*)(S19863C7*), ABISELECT(704,428), "S19863C3");
    check_base_class_offset(lv, (S19863C9_nt*)(S19863C17*), ABISELECT(704,428), "S19863C3");
    check_base_class_offset(lv, (S19863C9_nt*)(S19863C18*)(S19863C17*), ABISELECT(704,428), "S19863C3");
    check_base_class_offset(lv, (S19863C7*)(S19863C14*), ABISELECT(528,304), "S19863C3");
    check_base_class_offset(lv, (S19863C8*)(S19863C15_nt*)(S19863C14*), ABISELECT(504,296), "S19863C3");
    check_base_class_offset(lv, (S19863C15_nt*)(S19863C14*), ABISELECT(504,296), "S19863C3");
    check_base_class_offset(lv, (S19863C14*)(S19863C13*), ABISELECT(504,296), "S19863C3");
    check_base_class_offset(lv, (S19863C13*), ABISELECT(256,152), "S19863C3");
    check_base_class_offset(lv, (S19863C12_nt*)(S19863C17*), ABISELECT(724,440), "S19863C3");
    check_base_class_offset(lv, (S19863C10*)(S19863C16*), ABISELECT(728,444), "S19863C3");
    check_base_class_offset(lv, (S19863C16*)(S19863C17*), ABISELECT(728,444), "S19863C3");
    check_base_class_offset(lv, (S19863C10*)(S19863C18*)(S19863C17*), ABISELECT(712,432), "S19863C3");
    /*is_ambiguous_... S19863C18::S19863C8 */ AMB_check_base_class_offset(lv, (S19863C8*)(S19863C18*)(S19863C17*), ABISELECT(712,432), "S19863C3");
    /*is_ambiguous_... S19863C3::S19863C15_nt */ AMB_check_base_class_offset(lv, (S19863C8*)(S19863C15_nt*), ABISELECT(736,448), "S19863C3");
    check_base_class_offset(lv, (S19863C15_nt*)(S19863C18*)(S19863C17*), ABISELECT(736,448), "S19863C3");
    check_base_class_offset(lv, (S19863C18*)(S19863C17*), ABISELECT(712,432), "S19863C3");
    check_base_class_offset(lv, (S19863C17*), ABISELECT(712,432), "S19863C3");
    test_class_info(&lv, &cd_S19863C3);
    dp->~S19863C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19863C3(Test_S19863C3, "S19863C3", ABISELECT(752,452));

#else // __cplusplus

extern void _ZN8S19863C3C1Ev();
extern void _ZN8S19863C3D1Ev();
Name_Map name_map_S19863C3[] = {
  NSPAIR(_ZN8S19863C3C1Ev),
  NSPAIR(_ZN8S19863C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S165C11_nt;
extern VTBL_ENTRY _ZTI10S165C11_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C5;
extern VTBL_ENTRY _ZTI8S19863C5[];
extern  VTBL_ENTRY _ZTV8S19863C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C5[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C11;
extern VTBL_ENTRY _ZTI9S19863C11[];
extern  VTBL_ENTRY _ZTV9S19863C11[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19863C7;
extern VTBL_ENTRY _ZTI8S19863C7[];
extern  VTBL_ENTRY _ZTV8S19863C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C7[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C15_nt;
extern VTBL_ENTRY _ZTI12S19863C15_nt[];
extern Class_Descriptor cd_S19863C14;
extern VTBL_ENTRY _ZTI9S19863C14[];
extern  VTBL_ENTRY _ZTV9S19863C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C14[];
extern Class_Descriptor cd_S19863C13;
extern VTBL_ENTRY _ZTI9S19863C13[];
extern  VTBL_ENTRY _ZTV9S19863C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C13[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C16;
extern VTBL_ENTRY _ZTI9S19863C16[];
extern  VTBL_ENTRY _ZTV9S19863C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C16[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C15_nt;
extern VTBL_ENTRY _ZTI12S19863C15_nt[];
extern Class_Descriptor cd_S19863C18;
extern VTBL_ENTRY _ZTI9S19863C18[];
extern  VTBL_ENTRY _ZTV9S19863C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C18[];
extern Class_Descriptor cd_S19863C17;
extern VTBL_ENTRY _ZTI9S19863C17[];
extern  VTBL_ENTRY _ZTV9S19863C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C17[];
static Base_Class bases_S19863C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S165C11_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C6,    ABISELECT(32,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C12_nt,    ABISELECT(248,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19863C11,    ABISELECT(240,144), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C9_nt,    ABISELECT(704,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19863C7,    ABISELECT(528,304), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19863C8,    ABISELECT(504,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
    10, //immediately_derived
  0, 0},
  {&cd_S19863C15_nt,    ABISELECT(504,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
    11, //immediately_derived
  0, 0},
  {&cd_S19863C14,    ABISELECT(504,296), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19863C13,    ABISELECT(256,152), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C12_nt,    ABISELECT(724,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19863C10,    ABISELECT(728,444), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19863C16,    ABISELECT(728,444), //bcp->offset
    59, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19863C10,    ABISELECT(712,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    ABISELECT(712,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    ABISELECT(736,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19863C15_nt,    ABISELECT(736,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19863C18,    ABISELECT(712,432), //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
    7, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19863C17,    ABISELECT(712,432), //bcp->offset
    49, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19863C3[];
extern void _ZN8S19863C3D1Ev();
extern void _ZN8S19863C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19863C3D1Ev,_ZTv0_n12_N8S19863C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S19863C3D1Ev,_ZThn12_N8S19863C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19863C3D0Ev,_ZTv0_n12_N8S19863C3D0Ev)();
extern void ABISELECT(_ZThn32_N8S19863C3D0Ev,_ZThn12_N8S19863C3D0Ev)() __attribute__((weak));
extern void _ZN9S19863C112v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S19863C3D1Ev,_ZTv0_n28_N8S19863C3D1Ev)();
extern void ABISELECT(_ZThn256_N8S19863C3D1Ev,_ZThn152_N8S19863C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19863C3D0Ev,_ZTv0_n28_N8S19863C3D0Ev)();
extern void ABISELECT(_ZThn256_N8S19863C3D0Ev,_ZThn152_N8S19863C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19863C3D1Ev,_ZTv0_n24_N8S19863C3D1Ev)();
extern void ABISELECT(_ZThn504_N8S19863C3D1Ev,_ZThn296_N8S19863C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19863C3D0Ev,_ZTv0_n24_N8S19863C3D0Ev)();
extern void ABISELECT(_ZThn504_N8S19863C3D0Ev,_ZThn296_N8S19863C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19863C3D1Ev,_ZTv0_n20_N8S19863C3D1Ev)();
extern void ABISELECT(_ZThn528_N8S19863C3D1Ev,_ZThn304_N8S19863C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19863C3D0Ev,_ZTv0_n20_N8S19863C3D0Ev)();
extern void ABISELECT(_ZThn528_N8S19863C3D0Ev,_ZThn304_N8S19863C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19863C3D1Ev,_ZTv0_n32_N8S19863C3D1Ev)();
extern void ABISELECT(_ZThn712_N8S19863C3D1Ev,_ZThn432_N8S19863C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19863C3D0Ev,_ZTv0_n32_N8S19863C3D0Ev)();
extern void ABISELECT(_ZThn712_N8S19863C3D0Ev,_ZThn432_N8S19863C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19863C3D1Ev,_ZTv0_n16_N8S19863C3D1Ev)();
extern void ABISELECT(_ZThn728_N8S19863C3D1Ev,_ZThn444_N8S19863C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19863C3D0Ev,_ZTv0_n16_N8S19863C3D0Ev)();
extern void ABISELECT(_ZThn728_N8S19863C3D0Ev,_ZThn444_N8S19863C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19863C3[] = {
  ABISELECT(736,448),
  ABISELECT(728,444),
  ABISELECT(724,440),
  ABISELECT(712,432),
  ABISELECT(704,428),
  ABISELECT(528,304),
  ABISELECT(504,296),
  ABISELECT(256,152),
  ABISELECT(240,144),
  0,
  0,
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&_ZN8S19863C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C3D0Ev,
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C3D1Ev,_ZTv0_n12_N8S19863C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C3D0Ev,_ZTv0_n12_N8S19863C3D0Ev),
  0,
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&_ZN9S19863C112v1Ev,
  ABISELECT(-256,-152),
  ABISELECT(448,276),
  ABISELECT(-256,-152),
  ABISELECT(272,152),
  ABISELECT(248,144),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19863C3D1Ev,_ZTv0_n28_N8S19863C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19863C3D0Ev,_ZTv0_n28_N8S19863C3D0Ev),
  ABISELECT(-504,-296),
  ABISELECT(200,132),
  ABISELECT(-504,-296),
  ABISELECT(24,8),
  ABISELECT(-504,-296),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19863C3D1Ev,_ZTv0_n24_N8S19863C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19863C3D0Ev,_ZTv0_n24_N8S19863C3D0Ev),
  ABISELECT(-528,-304),
  ABISELECT(176,124),
  ABISELECT(-528,-304),
  ABISELECT(-528,-304),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19863C3D1Ev,_ZTv0_n20_N8S19863C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19863C3D0Ev,_ZTv0_n20_N8S19863C3D0Ev),
  ABISELECT(-712,-432),
  ABISELECT(16,12),
  ABISELECT(-680,-420),
  ABISELECT(12,8),
  ABISELECT(-8,-4),
  ABISELECT(24,16),
  ABISELECT(-712,-432),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19863C3D1Ev,_ZTv0_n32_N8S19863C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19863C3D0Ev,_ZTv0_n32_N8S19863C3D0Ev),
  ABISELECT(-728,-444),
  ABISELECT(-696,-432),
  ABISELECT(-728,-444),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19863C3D1Ev,_ZTv0_n16_N8S19863C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19863C3D0Ev,_ZTv0_n16_N8S19863C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S19863C3[];
extern void _ZN8S19863C5D1Ev();
extern void _ZN8S19863C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19863C5__8S19863C3[] = {
  0,
  0,
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C5[0]),
  (VTBL_ENTRY)&_ZN8S19863C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev)();
extern void ABISELECT(_ZThn32_N8S19863C5D1Ev,_ZThn12_N8S19863C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev)();
extern void ABISELECT(_ZThn32_N8S19863C5D0Ev,_ZThn12_N8S19863C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S19863C5__8S19863C3[] = {
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S19863C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev),
};
extern void _ZN9S19863C13D1Ev();
extern void _ZN9S19863C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19863C13__8S19863C3[] = {
  ABISELECT(448,276),
  ABISELECT(-256,-152),
  ABISELECT(272,152),
  ABISELECT(248,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C13[0]),
  (VTBL_ENTRY)&_ZN9S19863C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19863C13D1Ev,_ZTv0_n24_N9S19863C13D1Ev)();
extern void ABISELECT(_ZThn248_N9S19863C13D1Ev,_ZThn144_N9S19863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19863C13D0Ev,_ZTv0_n24_N9S19863C13D0Ev)();
extern void ABISELECT(_ZThn248_N9S19863C13D0Ev,_ZThn144_N9S19863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19863C14__9S19863C13__8S19863C3[] = {
  ABISELECT(-248,-144),
  ABISELECT(200,132),
  ABISELECT(-504,-296),
  ABISELECT(24,8),
  ABISELECT(-248,-144),
  (VTBL_ENTRY)&(_ZTI9S19863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19863C13D1Ev,_ZTv0_n24_N9S19863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19863C13D0Ev,_ZTv0_n24_N9S19863C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19863C13D1Ev,_ZTv0_n20_N9S19863C13D1Ev)();
extern void ABISELECT(_ZThn272_N9S19863C13D1Ev,_ZThn152_N9S19863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19863C13D0Ev,_ZTv0_n20_N9S19863C13D0Ev)();
extern void ABISELECT(_ZThn272_N9S19863C13D0Ev,_ZThn152_N9S19863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C7__9S19863C13__8S19863C3[] = {
  ABISELECT(-272,-152),
  ABISELECT(176,124),
  ABISELECT(-528,-304),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI9S19863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C13D1Ev,_ZTv0_n20_N9S19863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C13D0Ev,_ZTv0_n20_N9S19863C13D0Ev),
};
extern void _ZN9S19863C14D1Ev();
extern void _ZN9S19863C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19863C14__8S19863C3[] = {
  ABISELECT(200,132),
  ABISELECT(-504,-296),
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C14[0]),
  (VTBL_ENTRY)&_ZN9S19863C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C14D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19863C14D1Ev,_ZTv0_n20_N9S19863C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19863C14D1Ev,_ZThn8_N9S19863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19863C14D0Ev,_ZTv0_n20_N9S19863C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19863C14D0Ev,_ZThn8_N9S19863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C7__9S19863C14__8S19863C3[] = {
  ABISELECT(-24,-8),
  ABISELECT(176,124),
  ABISELECT(-528,-304),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI9S19863C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C14D1Ev,_ZTv0_n20_N9S19863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C14D0Ev,_ZTv0_n20_N9S19863C14D0Ev),
};
extern void _ZN8S19863C7D1Ev();
extern void _ZN8S19863C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19863C7__8S19863C3[] = {
  ABISELECT(176,124),
  ABISELECT(-528,-304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C7[0]),
  (VTBL_ENTRY)&_ZN8S19863C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C7D0Ev,
};
extern void _ZN9S19863C17D1Ev();
extern void _ZN9S19863C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19863C17__8S19863C3[] = {
  ABISELECT(16,12),
  ABISELECT(-680,-420),
  ABISELECT(12,8),
  ABISELECT(-8,-4),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C17[0]),
  (VTBL_ENTRY)&_ZN9S19863C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19863C189S19863C17__8S19863C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C18[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19863C17D1Ev,_ZTv0_n12_N9S19863C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19863C17D0Ev,_ZTv0_n12_N9S19863C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19863C17__8S19863C3[] = {
  ABISELECT(680,420),
  ABISELECT(680,420),
  (VTBL_ENTRY)&(_ZTI9S19863C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C17D1Ev,_ZTv0_n12_N9S19863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C17D0Ev,_ZTv0_n12_N9S19863C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19863C17D1Ev,_ZTv0_n16_N9S19863C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19863C17D1Ev,_ZThn12_N9S19863C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19863C17D0Ev,_ZTv0_n16_N9S19863C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S19863C17D0Ev,_ZThn12_N9S19863C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19863C16__9S19863C17__8S19863C3[] = {
  ABISELECT(-16,-12),
  ABISELECT(-696,-432),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19863C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19863C17D1Ev,_ZTv0_n16_N9S19863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19863C17D0Ev,_ZTv0_n16_N9S19863C17D0Ev),
};
extern void _ZN9S19863C16D1Ev();
extern void _ZN9S19863C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19863C16__8S19863C3[] = {
  ABISELECT(-696,-432),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C16[0]),
  (VTBL_ENTRY)&_ZN9S19863C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19863C16D1Ev,_ZTv0_n12_N9S19863C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19863C16D0Ev,_ZTv0_n12_N9S19863C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19863C16__8S19863C3[] = {
  ABISELECT(696,432),
  ABISELECT(696,432),
  (VTBL_ENTRY)&(_ZTI9S19863C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C16D1Ev,_ZTv0_n12_N9S19863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C16D0Ev,_ZTv0_n12_N9S19863C16D0Ev),
};
static  VTT_ENTRY vtt_S19863C3[] = {
  {&(_ZTV8S19863C3[14]),  14,65},
  {&(_tg__ZTV8S19863C5__8S19863C3[5]),  5,7},
  {&(_tg__ZTV8S19863C6__8S19863C5__8S19863C3[3]),  3,5},
  {&(_ZTV8S19863C3[19]),  19,65},
  {&(_ZTV8S19863C3[24]),  24,65},
  {&(_ZTV8S19863C3[32]),  32,65},
  {&(_ZTV8S19863C3[40]),  40,65},
  {&(_ZTV8S19863C3[47]),  47,65},
  {&(_ZTV8S19863C3[57]),  57,65},
  {&(_ZTV8S19863C3[63]),  63,65},
  {&(_tg__ZTV9S19863C13__8S19863C3[6]),  6,8},
  {&(_tg__ZTV9S19863C14__9S19863C13__8S19863C3[6]),  6,8},
  {&(_tg__ZTV8S19863C7__9S19863C13__8S19863C3[5]),  5,7},
  {&(_tg__ZTV9S19863C14__8S19863C3[5]),  5,7},
  {&(_tg__ZTV8S19863C7__9S19863C14__8S19863C3[5]),  5,7},
  {&(_tg__ZTV8S19863C7__8S19863C3[4]),  4,6},
  {&(_tg__ZTV9S19863C17__8S19863C3[7]),  7,9},
  {&(_tg__ZTV9S19863C189S19863C17__8S19863C3[4]),  4,4},
  {&(_tg__ZTV8S19863C6__9S19863C17__8S19863C3[3]),  3,5},
  {&(_tg__ZTV9S19863C16__9S19863C17__8S19863C3[4]),  4,6},
  {&(_tg__ZTV9S19863C16__8S19863C3[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19863C16__8S19863C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19863C3[];
extern  VTBL_ENTRY _ZTV8S19863C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C3[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19863C17D0Ev,_ZTv0_n16_N9S19863C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19863C17D0Ev,_ZThn12_N9S19863C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19863C17D1Ev,_ZTv0_n16_N9S19863C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19863C17D1Ev,_ZThn12_N9S19863C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C14D0Ev,_ZTv0_n20_N9S19863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19863C14D0Ev,_ZThn8_N9S19863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C14D1Ev,_ZTv0_n20_N9S19863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19863C14D1Ev,_ZThn8_N9S19863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C13D0Ev,_ZTv0_n20_N9S19863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19863C13D0Ev,_ZThn152_N9S19863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C13D1Ev,_ZTv0_n20_N9S19863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19863C13D1Ev,_ZThn152_N9S19863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19863C13D0Ev,_ZTv0_n24_N9S19863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19863C13D0Ev,_ZThn144_N9S19863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19863C13D1Ev,_ZTv0_n24_N9S19863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19863C13D1Ev,_ZThn144_N9S19863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19863C5D0Ev,_ZThn12_N8S19863C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19863C5D1Ev,_ZThn12_N8S19863C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19863C3D0Ev,_ZTv0_n16_N8S19863C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn728_N8S19863C3D0Ev,_ZThn444_N8S19863C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19863C3D1Ev,_ZTv0_n16_N8S19863C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn728_N8S19863C3D1Ev,_ZThn444_N8S19863C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19863C3D0Ev,_ZTv0_n32_N8S19863C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn712_N8S19863C3D0Ev,_ZThn432_N8S19863C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19863C3D1Ev,_ZTv0_n32_N8S19863C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn712_N8S19863C3D1Ev,_ZThn432_N8S19863C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19863C3D0Ev,_ZTv0_n20_N8S19863C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19863C3D0Ev,_ZThn304_N8S19863C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19863C3D1Ev,_ZTv0_n20_N8S19863C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19863C3D1Ev,_ZThn304_N8S19863C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19863C3D0Ev,_ZTv0_n24_N8S19863C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S19863C3D0Ev,_ZThn296_N8S19863C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19863C3D1Ev,_ZTv0_n24_N8S19863C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S19863C3D1Ev,_ZThn296_N8S19863C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19863C3D0Ev,_ZTv0_n28_N8S19863C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19863C3D0Ev,_ZThn152_N8S19863C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19863C3D1Ev,_ZTv0_n28_N8S19863C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19863C3D1Ev,_ZThn152_N8S19863C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C3D0Ev,_ZTv0_n12_N8S19863C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19863C3D0Ev,_ZThn12_N8S19863C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C3D1Ev,_ZTv0_n12_N8S19863C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19863C3D1Ev,_ZThn12_N8S19863C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19863C3 = {  "S19863C3", // class name
  bases_S19863C3, 22,
  &(vtc_S19863C3[0]), // expected_vtbl_contents
  &(vtt_S19863C3[0]), // expected_vtt_contents
  ABISELECT(752,452), // object size
  NSPAIRA(_ZTI8S19863C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19863C3),65, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19863C3),22, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19863C20  {
  ::S19863C7 s19863c20f0[3];
  void *s19863c20f1;
  void  mf19863c20(); // _ZN9S19863C2010mf19863c20Ev
};
//SIG(-1 S19863C20) C1{ m FC2{ VBC3{ m} VBC4{ m Fi} vd FD[10]}[3] Fp}


void  S19863C20 ::mf19863c20(){}

static void Test_S19863C20()
{
  {
    init_simple_test("S19863C20");
    S19863C20 lv;
    check2(sizeof(lv), ABISELECT(592,388), "sizeof(S19863C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19863C20)");
    check_field_offset(lv, s19863c20f0, 0, "S19863C20.s19863c20f0");
    check_field_offset(lv, s19863c20f1, ABISELECT(576,384), "S19863C20.s19863c20f1");
  }
}
static Arrange_To_Call_Me vS19863C20(Test_S19863C20, "S19863C20", ABISELECT(592,388));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S19863C19  : S19863C2_nt , S19863C20 , virtual S19863C10 , virtual S19863C5 {
  ::S19863C9_nt s19863c19f0;
  ~S19863C19(); // tgen
  S19863C19(); // tgen
};
//SIG(-1 S19863C19) C1{ BC2{ m} BC3{ m FC4{ VBC5{ m} VBC6{ m Fi} vd FD[10]}[3] Fp} VBC7{ m} VBC8{ VBC9{ vd m FC4} VBC7 VBC5 Fp} FC6}


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

static void Test_S19863C19()
{
  extern Class_Descriptor cd_S19863C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,135)];
    init_test(&cd_S19863C19, buf);
    S19863C19 *dp, &lv = *(dp=new (buf) S19863C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,536), "sizeof(S19863C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19863C19)");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S19863C19");
    check_base_class_offset(lv, (S19863C20*), ABISELECT(16,4), "S19863C19");
    check_base_class_offset(lv, (S19863C10*), 0, "S19863C19");
    check_base_class_offset(lv, (S19863C10*)(S19863C5*), 0, "S19863C19");
    check_base_class_offset(lv, (S19863C6*)(S19863C5*), ABISELECT(624,404), "S19863C19");
    check_base_class_offset(lv, (S19863C8*)(S19863C5*), 0, "S19863C19");
    check_base_class_offset(lv, (S19863C5*), ABISELECT(608,396), "S19863C19");
    check_field_offset(lv, s19863c19f0, ABISELECT(600,392), "S19863C19.s19863c19f0");
    test_class_info(&lv, &cd_S19863C19);
    dp->~S19863C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19863C19(Test_S19863C19, "S19863C19", ABISELECT(832,536));

#else // __cplusplus

extern void _ZN9S19863C19C1Ev();
extern void _ZN9S19863C19D1Ev();
Name_Map name_map_S19863C19[] = {
  NSPAIR(_ZN9S19863C19C1Ev),
  NSPAIR(_ZN9S19863C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C5;
extern VTBL_ENTRY _ZTI8S19863C5[];
extern  VTBL_ENTRY _ZTV8S19863C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C5[];
static Base_Class bases_S19863C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C2_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_S19863C20,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C6,    ABISELECT(624,404), //bcp->offset
    16, //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
    5, //immediately_derived
  0, 1},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C5,    ABISELECT(608,396), //bcp->offset
    8, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19863C19[];
extern void _ZN9S19863C19D1Ev();
extern void _ZN9S19863C19D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19863C19D1Ev,_ZTv0_n24_N9S19863C19D1Ev)();
extern void ABISELECT(_ZThn608_N9S19863C19D1Ev,_ZThn396_N9S19863C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19863C19D0Ev,_ZTv0_n24_N9S19863C19D0Ev)();
extern void ABISELECT(_ZThn608_N9S19863C19D0Ev,_ZThn396_N9S19863C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19863C19D1Ev,_ZTv0_n12_N9S19863C19D1Ev)();
extern void ABISELECT(_ZThn624_N9S19863C19D1Ev,_ZThn404_N9S19863C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19863C19D0Ev,_ZTv0_n12_N9S19863C19D0Ev)();
extern void ABISELECT(_ZThn624_N9S19863C19D0Ev,_ZThn404_N9S19863C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19863C19[] = {
  0,
  ABISELECT(624,404),
  ABISELECT(608,396),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C19[0]),
  (VTBL_ENTRY)&_ZN9S19863C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C19D0Ev,
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(16,8),
  ABISELECT(-608,-396),
  (VTBL_ENTRY)&(_ZTI9S19863C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19863C19D1Ev,_ZTv0_n24_N9S19863C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19863C19D0Ev,_ZTv0_n24_N9S19863C19D0Ev),
  ABISELECT(-624,-404),
  ABISELECT(-624,-404),
  (VTBL_ENTRY)&(_ZTI9S19863C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C19D1Ev,_ZTv0_n12_N9S19863C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C19D0Ev,_ZTv0_n12_N9S19863C19D0Ev),
};
extern VTBL_ENTRY _ZTV9S19863C19[];
extern void _ZN8S19863C5D1Ev();
extern void _ZN8S19863C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19863C5__9S19863C19[] = {
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C5[0]),
  (VTBL_ENTRY)&_ZN8S19863C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S19863C5D1Ev,_ZThn8_N8S19863C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S19863C5D0Ev,_ZThn8_N8S19863C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S19863C5__9S19863C19[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19863C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev),
};
static  VTT_ENTRY vtt_S19863C19[] = {
  {&(_ZTV9S19863C19[6]),  6,21},
  {&(_ZTV9S19863C19[14]),  14,21},
  {&(_ZTV9S19863C19[19]),  19,21},
  {&(_tg__ZTV8S19863C5__9S19863C19[5]),  5,7},
  {&(_tg__ZTV8S19863C6__8S19863C5__9S19863C19[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19863C19[];
extern  VTBL_ENTRY _ZTV9S19863C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C19[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19863C5D0Ev,_ZThn8_N8S19863C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19863C5D1Ev,_ZThn8_N8S19863C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19863C19D0Ev,_ZTv0_n12_N9S19863C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S19863C19D0Ev,_ZThn404_N9S19863C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19863C19D1Ev,_ZTv0_n12_N9S19863C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S19863C19D1Ev,_ZThn404_N9S19863C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19863C19D0Ev,_ZTv0_n24_N9S19863C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N9S19863C19D0Ev,_ZThn396_N9S19863C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19863C19D1Ev,_ZTv0_n24_N9S19863C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N9S19863C19D1Ev,_ZThn396_N9S19863C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19863C19 = {  "S19863C19", // class name
  bases_S19863C19, 6,
  &(vtc_S19863C19[0]), // expected_vtbl_contents
  &(vtt_S19863C19[0]), // expected_vtt_contents
  ABISELECT(832,536), // object size
  NSPAIRA(_ZTI9S19863C19),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19863C19),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19863C19),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19863C1  : virtual S19863C2_nt , virtual S19863C3 , S19863C19 {
  virtual  ~S19863C1(); // _ZN8S19863C1D2Ev
  S19863C1(); // tgen
};
//SIG(1 S19863C1) C1{ VBC2{ m} VBC3{ BC4{ m Fi} BC5{ VBC6{ vd m FC7{ VBC8{ m} VBC9{ m Fi} vd FD[10]}} VBC10{ m} VBC8 Fp} VBC11{ BC12{ m Fs} v1} VBC13{ VBC14{ VBC7 BC15{ BC8} vd Fc} vd FC16{ VBC6 BC10 vd} Fi} VBC17{ VBC12 VBC9 VBC6 VBC16 BC18{ BC10 BC8 VBC15 VBC9} vd Fi}} BC19{ BC2 BC20{ m FC7[3] Fp} VBC10 VBC5 FC9} vd}


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

static void Test_S19863C1()
{
  extern Class_Descriptor cd_S19863C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(86,214)];
    init_test(&cd_S19863C1, buf);
    S19863C1 *dp, &lv = *(dp=new (buf) S19863C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1360,852), "sizeof(S19863C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19863C1)");
    /*is_ambiguous_... S19863C1::S19863C2_nt */ AMB_check_base_class_offset(lv, (S19863C2_nt*), ABISELECT(604,396), "S19863C1");
    check_base_class_offset(lv, (S165C11_nt*)(S19863C3*), ABISELECT(624,404), "S19863C1");
    check_base_class_offset(lv, (S19863C6*)(S19863C5*)(S19863C3*), ABISELECT(640,408), "S19863C1");
    check_base_class_offset(lv, (S19863C6*)(S19863C17*), ABISELECT(640,408), "S19863C1");
    check_base_class_offset(lv, (S19863C6*)(S19863C16*), ABISELECT(640,408), "S19863C1");
    /*is_ambiguous_... S19863C1::S19863C5 */ AMB_check_base_class_offset(lv, (S19863C6*)(S19863C5*), ABISELECT(640,408), "S19863C1");
    check_base_class_offset(lv, (S19863C10*)(S19863C5*)(S19863C3*), 0, "S19863C1");
    check_base_class_offset(lv, (S19863C10*)(S19863C19*), 0, "S19863C1");
    /*is_ambiguous_... S19863C1::S19863C5 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19863C5*), 0, "S19863C1");
    check_base_class_offset(lv, (S19863C8*)(S19863C5*)(S19863C3*), 0, "S19863C1");
    check_base_class_offset(lv, (S19863C8*)(S19863C7*), 0, "S19863C1");
    /*is_ambiguous_... S19863C1::S19863C5 */ AMB_check_base_class_offset(lv, (S19863C8*)(S19863C5*), 0, "S19863C1");
    check_base_class_offset(lv, (S19863C5*)(S19863C3*), ABISELECT(608,396), "S19863C1");
    check_base_class_offset(lv, (S19863C12_nt*)(S19863C11*), ABISELECT(856,544), "S19863C1");
    check_base_class_offset(lv, (S19863C11*)(S19863C3*), ABISELECT(848,540), "S19863C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S19863C7*), ABISELECT(1312,824), "S19863C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S19863C17*), ABISELECT(1312,824), "S19863C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S19863C18*)(S19863C17*), ABISELECT(1312,824), "S19863C1");
    check_base_class_offset(lv, (S19863C7*)(S19863C14*), ABISELECT(1136,700), "S19863C1");
    check_base_class_offset(lv, (S19863C8*)(S19863C15_nt*)(S19863C14*), ABISELECT(1112,692), "S19863C1");
    check_base_class_offset(lv, (S19863C15_nt*)(S19863C14*), ABISELECT(1112,692), "S19863C1");
    check_base_class_offset(lv, (S19863C14*)(S19863C13*), ABISELECT(1112,692), "S19863C1");
    check_base_class_offset(lv, (S19863C13*)(S19863C3*), ABISELECT(864,548), "S19863C1");
    check_base_class_offset(lv, (S19863C12_nt*)(S19863C17*), ABISELECT(1332,836), "S19863C1");
    check_base_class_offset(lv, (S19863C10*)(S19863C16*), ABISELECT(1336,840), "S19863C1");
    check_base_class_offset(lv, (S19863C16*)(S19863C17*), ABISELECT(1336,840), "S19863C1");
    check_base_class_offset(lv, (S19863C10*)(S19863C18*)(S19863C17*), ABISELECT(1320,828), "S19863C1");
    /*is_ambiguous_... S19863C18::S19863C8 */ AMB_check_base_class_offset(lv, (S19863C8*)(S19863C18*)(S19863C17*), ABISELECT(1320,828), "S19863C1");
    /*is_ambiguous_... S19863C1::S19863C15_nt */ AMB_check_base_class_offset(lv, (S19863C8*)(S19863C15_nt*), ABISELECT(1344,844), "S19863C1");
    check_base_class_offset(lv, (S19863C15_nt*)(S19863C18*)(S19863C17*), ABISELECT(1344,844), "S19863C1");
    check_base_class_offset(lv, (S19863C18*)(S19863C17*), ABISELECT(1320,828), "S19863C1");
    check_base_class_offset(lv, (S19863C17*)(S19863C3*), ABISELECT(1320,828), "S19863C1");
    check_base_class_offset(lv, (S19863C3*), ABISELECT(608,396), "S19863C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S19863C19*), 0, "S19863C1");
    check_base_class_offset(lv, (S19863C20*)(S19863C19*), ABISELECT(16,4), "S19863C1");
    check_base_class_offset(lv, (S19863C5*)(S19863C19*), ABISELECT(1344,844), "S19863C1");
    check_base_class_offset(lv, (S19863C19*), 0, "S19863C1");
    test_class_info(&lv, &cd_S19863C1);
    dp->~S19863C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19863C1(Test_S19863C1, "S19863C1", ABISELECT(1360,852));

#else // __cplusplus

extern void _ZN8S19863C1C1Ev();
extern void _ZN8S19863C1D2Ev();
Name_Map name_map_S19863C1[] = {
  NSPAIR(_ZN8S19863C1C1Ev),
  NSPAIR(_ZN8S19863C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S165C11_nt;
extern VTBL_ENTRY _ZTI10S165C11_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C5;
extern VTBL_ENTRY _ZTI8S19863C5[];
extern  VTBL_ENTRY _ZTV8S19863C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C5[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C11;
extern VTBL_ENTRY _ZTI9S19863C11[];
extern  VTBL_ENTRY _ZTV9S19863C11[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19863C7;
extern VTBL_ENTRY _ZTI8S19863C7[];
extern  VTBL_ENTRY _ZTV8S19863C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C7[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C15_nt;
extern VTBL_ENTRY _ZTI12S19863C15_nt[];
extern Class_Descriptor cd_S19863C14;
extern VTBL_ENTRY _ZTI9S19863C14[];
extern  VTBL_ENTRY _ZTV9S19863C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C14[];
extern Class_Descriptor cd_S19863C13;
extern VTBL_ENTRY _ZTI9S19863C13[];
extern  VTBL_ENTRY _ZTV9S19863C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C13[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C16;
extern VTBL_ENTRY _ZTI9S19863C16[];
extern  VTBL_ENTRY _ZTV9S19863C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C16[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C15_nt;
extern VTBL_ENTRY _ZTI12S19863C15_nt[];
extern Class_Descriptor cd_S19863C18;
extern VTBL_ENTRY _ZTI9S19863C18[];
extern  VTBL_ENTRY _ZTV9S19863C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C18[];
extern Class_Descriptor cd_S19863C17;
extern VTBL_ENTRY _ZTI9S19863C17[];
extern  VTBL_ENTRY _ZTV9S19863C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C17[];
extern Class_Descriptor cd_S19863C3;
extern VTBL_ENTRY _ZTI8S19863C3[];
extern  VTBL_ENTRY _ZTV8S19863C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C3[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
extern Class_Descriptor cd_S19863C5;
extern VTBL_ENTRY _ZTI8S19863C5[];
extern  VTBL_ENTRY _ZTV8S19863C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C5[];
extern Class_Descriptor cd_S19863C19;
extern VTBL_ENTRY _ZTI9S19863C19[];
extern  VTBL_ENTRY _ZTV9S19863C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19863C19[];
static Base_Class bases_S19863C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C2_nt,    ABISELECT(604,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S165C11_nt,    ABISELECT(624,404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C6,    ABISELECT(640,408), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C5,    ABISELECT(608,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19863C12_nt,    ABISELECT(856,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C11,    ABISELECT(848,540), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(1312,824), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C7,    ABISELECT(1136,700), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19863C8,    ABISELECT(1112,692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19863C15_nt,    ABISELECT(1112,692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19863C14,    ABISELECT(1112,692), //bcp->offset
    54, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19863C13,    ABISELECT(864,548), //bcp->offset
    45, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19863C12_nt,    ABISELECT(1332,836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C10,    ABISELECT(1336,840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C16,    ABISELECT(1336,840), //bcp->offset
    79, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19863C10,    ABISELECT(1320,828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    ABISELECT(1320,828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    ABISELECT(1344,844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C15_nt,    ABISELECT(1344,844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19863C18,    ABISELECT(1320,828), //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
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19863C17,    ABISELECT(1320,828), //bcp->offset
    69, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19863C3,    ABISELECT(608,396), //bcp->offset
    19, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C2_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
    27, //immediately_derived
  0, 0},
  {&cd_S19863C20,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19863C5,    ABISELECT(1344,844), //bcp->offset
    85, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S19863C19,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19863C1[];
extern void _ZN8S19863C1D1Ev();
extern void _ZN8S19863C1D0Ev();
extern void ABISELECT(_ZTv0_n120_N8S19863C1D1Ev,_ZTv0_n60_N8S19863C1D1Ev)();
extern void ABISELECT(_ZThn608_N8S19863C1D1Ev,_ZThn396_N8S19863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19863C1D0Ev,_ZTv0_n60_N8S19863C1D0Ev)();
extern void ABISELECT(_ZThn608_N8S19863C1D0Ev,_ZThn396_N8S19863C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19863C1D1Ev,_ZTv0_n12_N8S19863C1D1Ev)();
extern void ABISELECT(_ZThn640_N8S19863C1D1Ev,_ZThn408_N8S19863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19863C1D0Ev,_ZTv0_n12_N8S19863C1D0Ev)();
extern void ABISELECT(_ZThn640_N8S19863C1D0Ev,_ZThn408_N8S19863C1D0Ev)() __attribute__((weak));
extern void _ZN9S19863C112v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S19863C1D1Ev,_ZTv0_n28_N8S19863C1D1Ev)();
extern void ABISELECT(_ZThn864_N8S19863C1D1Ev,_ZThn548_N8S19863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19863C1D0Ev,_ZTv0_n28_N8S19863C1D0Ev)();
extern void ABISELECT(_ZThn864_N8S19863C1D0Ev,_ZThn548_N8S19863C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19863C1D1Ev,_ZTv0_n24_N8S19863C1D1Ev)();
extern void ABISELECT(_ZThn1112_N8S19863C1D1Ev,_ZThn692_N8S19863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19863C1D0Ev,_ZTv0_n24_N8S19863C1D0Ev)();
extern void ABISELECT(_ZThn1112_N8S19863C1D0Ev,_ZThn692_N8S19863C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19863C1D1Ev,_ZTv0_n20_N8S19863C1D1Ev)();
extern void ABISELECT(_ZThn1136_N8S19863C1D1Ev,_ZThn700_N8S19863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19863C1D0Ev,_ZTv0_n20_N8S19863C1D0Ev)();
extern void ABISELECT(_ZThn1136_N8S19863C1D0Ev,_ZThn700_N8S19863C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19863C1D1Ev,_ZTv0_n32_N8S19863C1D1Ev)();
extern void ABISELECT(_ZThn1320_N8S19863C1D1Ev,_ZThn828_N8S19863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19863C1D0Ev,_ZTv0_n32_N8S19863C1D0Ev)();
extern void ABISELECT(_ZThn1320_N8S19863C1D0Ev,_ZThn828_N8S19863C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19863C1D1Ev,_ZTv0_n16_N8S19863C1D1Ev)();
extern void ABISELECT(_ZThn1336_N8S19863C1D1Ev,_ZThn840_N8S19863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19863C1D0Ev,_ZTv0_n16_N8S19863C1D0Ev)();
extern void ABISELECT(_ZThn1336_N8S19863C1D0Ev,_ZThn840_N8S19863C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19863C1D1Ev,_ZTv0_n24_N8S19863C1D1Ev)();
extern void ABISELECT(_ZThn1344_N8S19863C1D1Ev,_ZThn844_N8S19863C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19863C1D0Ev,_ZTv0_n24_N8S19863C1D0Ev)();
extern void ABISELECT(_ZThn1344_N8S19863C1D0Ev,_ZThn844_N8S19863C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19863C1[] = {
  ABISELECT(1344,844),
  ABISELECT(1336,840),
  ABISELECT(1332,836),
  ABISELECT(1320,828),
  ABISELECT(1312,824),
  ABISELECT(1136,700),
  ABISELECT(1112,692),
  ABISELECT(864,548),
  ABISELECT(848,540),
  ABISELECT(608,396),
  ABISELECT(604,396),
  0,
  ABISELECT(640,408),
  ABISELECT(1344,844),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C1[0]),
  (VTBL_ENTRY)&_ZN8S19863C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C1D0Ev,
  ABISELECT(-608,-396),
  ABISELECT(736,448),
  ABISELECT(728,444),
  ABISELECT(724,440),
  ABISELECT(712,432),
  ABISELECT(704,428),
  ABISELECT(528,304),
  ABISELECT(504,296),
  ABISELECT(256,152),
  ABISELECT(240,144),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(32,12),
  ABISELECT(-608,-396),
  (VTBL_ENTRY)&(_ZTI8S19863C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19863C1D1Ev,_ZTv0_n60_N8S19863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19863C1D0Ev,_ZTv0_n60_N8S19863C1D0Ev),
  ABISELECT(-640,-408),
  ABISELECT(-640,-408),
  (VTBL_ENTRY)&(_ZTI8S19863C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C1D1Ev,_ZTv0_n12_N8S19863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C1D0Ev,_ZTv0_n12_N8S19863C1D0Ev),
  0,
  ABISELECT(-848,-540),
  (VTBL_ENTRY)&(_ZTI8S19863C1[0]),
  (VTBL_ENTRY)&_ZN9S19863C112v1Ev,
  ABISELECT(-864,-548),
  ABISELECT(448,276),
  ABISELECT(-864,-548),
  ABISELECT(272,152),
  ABISELECT(248,144),
  ABISELECT(-864,-548),
  (VTBL_ENTRY)&(_ZTI8S19863C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19863C1D1Ev,_ZTv0_n28_N8S19863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19863C1D0Ev,_ZTv0_n28_N8S19863C1D0Ev),
  ABISELECT(-1112,-692),
  ABISELECT(200,132),
  ABISELECT(-1112,-692),
  ABISELECT(24,8),
  ABISELECT(-1112,-692),
  (VTBL_ENTRY)&(_ZTI8S19863C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19863C1D1Ev,_ZTv0_n24_N8S19863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19863C1D0Ev,_ZTv0_n24_N8S19863C1D0Ev),
  ABISELECT(-1136,-700),
  ABISELECT(176,124),
  ABISELECT(-1136,-700),
  ABISELECT(-1136,-700),
  (VTBL_ENTRY)&(_ZTI8S19863C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19863C1D1Ev,_ZTv0_n20_N8S19863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19863C1D0Ev,_ZTv0_n20_N8S19863C1D0Ev),
  ABISELECT(-1320,-828),
  ABISELECT(16,12),
  ABISELECT(-680,-420),
  ABISELECT(12,8),
  ABISELECT(-8,-4),
  ABISELECT(24,16),
  ABISELECT(-1320,-828),
  (VTBL_ENTRY)&(_ZTI8S19863C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19863C1D1Ev,_ZTv0_n32_N8S19863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19863C1D0Ev,_ZTv0_n32_N8S19863C1D0Ev),
  ABISELECT(-1336,-840),
  ABISELECT(-696,-432),
  ABISELECT(-1336,-840),
  (VTBL_ENTRY)&(_ZTI8S19863C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19863C1D1Ev,_ZTv0_n16_N8S19863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19863C1D0Ev,_ZTv0_n16_N8S19863C1D0Ev),
  ABISELECT(-1344,-844),
  ABISELECT(-1344,-844),
  ABISELECT(-1344,-844),
  ABISELECT(-704,-436),
  ABISELECT(-1344,-844),
  (VTBL_ENTRY)&(_ZTI8S19863C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19863C1D1Ev,_ZTv0_n24_N8S19863C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19863C1D0Ev,_ZTv0_n24_N8S19863C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19863C1[];
extern void _ZN9S19863C19D1Ev();
extern void _ZN9S19863C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19863C19__8S19863C1[] = {
  0,
  ABISELECT(640,408),
  ABISELECT(1344,844),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C19[0]),
  (VTBL_ENTRY)&_ZN9S19863C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C19D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19863C19D1Ev,_ZTv0_n24_N9S19863C19D1Ev)();
extern void ABISELECT(_ZThn1344_N9S19863C19D1Ev,_ZThn844_N9S19863C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19863C19D0Ev,_ZTv0_n24_N9S19863C19D0Ev)();
extern void ABISELECT(_ZThn1344_N9S19863C19D0Ev,_ZThn844_N9S19863C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C5__9S19863C19__8S19863C1[] = {
  ABISELECT(-1344,-844),
  ABISELECT(-1344,-844),
  ABISELECT(-1344,-844),
  ABISELECT(-704,-436),
  ABISELECT(-1344,-844),
  (VTBL_ENTRY)&(_ZTI9S19863C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19863C19D1Ev,_ZTv0_n24_N9S19863C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19863C19D0Ev,_ZTv0_n24_N9S19863C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19863C19D1Ev,_ZTv0_n12_N9S19863C19D1Ev)();
extern void ABISELECT(_ZThn640_N9S19863C19D1Ev,_ZThn408_N9S19863C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19863C19D0Ev,_ZTv0_n12_N9S19863C19D0Ev)();
extern void ABISELECT(_ZThn640_N9S19863C19D0Ev,_ZThn408_N9S19863C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19863C19__8S19863C1[] = {
  ABISELECT(-640,-408),
  ABISELECT(-640,-408),
  (VTBL_ENTRY)&(_ZTI9S19863C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C19D1Ev,_ZTv0_n12_N9S19863C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C19D0Ev,_ZTv0_n12_N9S19863C19D0Ev),
};
extern void _ZN8S19863C3D1Ev();
extern void _ZN8S19863C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19863C3__8S19863C1[] = {
  ABISELECT(736,448),
  ABISELECT(728,444),
  ABISELECT(724,440),
  ABISELECT(712,432),
  ABISELECT(704,428),
  ABISELECT(528,304),
  ABISELECT(504,296),
  ABISELECT(256,152),
  ABISELECT(240,144),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&_ZN8S19863C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C3D0Ev,
};
extern void _ZN8S19863C5D1Ev();
extern void _ZN8S19863C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19863C58S19863C3__8S19863C1[] = {
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C5[0]),
  (VTBL_ENTRY)&_ZN8S19863C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev)();
extern void ABISELECT(_ZThn32_N8S19863C5D1Ev,_ZThn12_N8S19863C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev)();
extern void ABISELECT(_ZThn32_N8S19863C5D0Ev,_ZThn12_N8S19863C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S19863C58S19863C3__8S19863C1[] = {
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S19863C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19863C3D1Ev,_ZTv0_n12_N8S19863C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S19863C3D1Ev,_ZThn12_N8S19863C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19863C3D0Ev,_ZTv0_n12_N8S19863C3D0Ev)();
extern void ABISELECT(_ZThn32_N8S19863C3D0Ev,_ZThn12_N8S19863C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S19863C3__8S19863C1[] = {
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C3D1Ev,_ZTv0_n12_N8S19863C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C3D0Ev,_ZTv0_n12_N8S19863C3D0Ev),
};
extern void _ZN9S19863C112v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19863C11__8S19863C3__8S19863C1[] = {
  0,
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&_ZN9S19863C112v1Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S19863C3D1Ev,_ZTv0_n28_N8S19863C3D1Ev)();
extern void ABISELECT(_ZThn256_N8S19863C3D1Ev,_ZThn152_N8S19863C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19863C3D0Ev,_ZTv0_n28_N8S19863C3D0Ev)();
extern void ABISELECT(_ZThn256_N8S19863C3D0Ev,_ZThn152_N8S19863C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19863C13__8S19863C3__8S19863C1[] = {
  ABISELECT(-256,-152),
  ABISELECT(448,276),
  ABISELECT(-864,-548),
  ABISELECT(272,152),
  ABISELECT(248,144),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19863C3D1Ev,_ZTv0_n28_N8S19863C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19863C3D0Ev,_ZTv0_n28_N8S19863C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19863C3D1Ev,_ZTv0_n24_N8S19863C3D1Ev)();
extern void ABISELECT(_ZThn504_N8S19863C3D1Ev,_ZThn296_N8S19863C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19863C3D0Ev,_ZTv0_n24_N8S19863C3D0Ev)();
extern void ABISELECT(_ZThn504_N8S19863C3D0Ev,_ZThn296_N8S19863C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19863C14__8S19863C3__8S19863C1[] = {
  ABISELECT(-504,-296),
  ABISELECT(200,132),
  ABISELECT(-1112,-692),
  ABISELECT(24,8),
  ABISELECT(-504,-296),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19863C3D1Ev,_ZTv0_n24_N8S19863C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19863C3D0Ev,_ZTv0_n24_N8S19863C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19863C3D1Ev,_ZTv0_n20_N8S19863C3D1Ev)();
extern void ABISELECT(_ZThn528_N8S19863C3D1Ev,_ZThn304_N8S19863C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19863C3D0Ev,_ZTv0_n20_N8S19863C3D0Ev)();
extern void ABISELECT(_ZThn528_N8S19863C3D0Ev,_ZThn304_N8S19863C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C7__8S19863C3__8S19863C1[] = {
  ABISELECT(-528,-304),
  ABISELECT(176,124),
  ABISELECT(-1136,-700),
  ABISELECT(-528,-304),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19863C3D1Ev,_ZTv0_n20_N8S19863C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19863C3D0Ev,_ZTv0_n20_N8S19863C3D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19863C3D1Ev,_ZTv0_n32_N8S19863C3D1Ev)();
extern void ABISELECT(_ZThn712_N8S19863C3D1Ev,_ZThn432_N8S19863C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19863C3D0Ev,_ZTv0_n32_N8S19863C3D0Ev)();
extern void ABISELECT(_ZThn712_N8S19863C3D0Ev,_ZThn432_N8S19863C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19863C17__8S19863C3__8S19863C1[] = {
  ABISELECT(-712,-432),
  ABISELECT(16,12),
  ABISELECT(-680,-420),
  ABISELECT(12,8),
  ABISELECT(-8,-4),
  ABISELECT(24,16),
  ABISELECT(-712,-432),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19863C3D1Ev,_ZTv0_n32_N8S19863C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19863C3D0Ev,_ZTv0_n32_N8S19863C3D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19863C3D1Ev,_ZTv0_n16_N8S19863C3D1Ev)();
extern void ABISELECT(_ZThn728_N8S19863C3D1Ev,_ZThn444_N8S19863C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19863C3D0Ev,_ZTv0_n16_N8S19863C3D0Ev)();
extern void ABISELECT(_ZThn728_N8S19863C3D0Ev,_ZThn444_N8S19863C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19863C16__8S19863C3__8S19863C1[] = {
  ABISELECT(-728,-444),
  ABISELECT(-696,-432),
  ABISELECT(-728,-444),
  (VTBL_ENTRY)&(_ZTI8S19863C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19863C3D1Ev,_ZTv0_n16_N8S19863C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19863C3D0Ev,_ZTv0_n16_N8S19863C3D0Ev),
};
extern void _ZN9S19863C13D1Ev();
extern void _ZN9S19863C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19863C13__8S19863C1[] = {
  ABISELECT(448,276),
  ABISELECT(-864,-548),
  ABISELECT(272,152),
  ABISELECT(248,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C13[0]),
  (VTBL_ENTRY)&_ZN9S19863C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19863C13D1Ev,_ZTv0_n24_N9S19863C13D1Ev)();
extern void ABISELECT(_ZThn248_N9S19863C13D1Ev,_ZThn144_N9S19863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19863C13D0Ev,_ZTv0_n24_N9S19863C13D0Ev)();
extern void ABISELECT(_ZThn248_N9S19863C13D0Ev,_ZThn144_N9S19863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19863C14__9S19863C13__8S19863C1[] = {
  ABISELECT(-248,-144),
  ABISELECT(200,132),
  ABISELECT(-1112,-692),
  ABISELECT(24,8),
  ABISELECT(-248,-144),
  (VTBL_ENTRY)&(_ZTI9S19863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19863C13D1Ev,_ZTv0_n24_N9S19863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19863C13D0Ev,_ZTv0_n24_N9S19863C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19863C13D1Ev,_ZTv0_n20_N9S19863C13D1Ev)();
extern void ABISELECT(_ZThn272_N9S19863C13D1Ev,_ZThn152_N9S19863C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19863C13D0Ev,_ZTv0_n20_N9S19863C13D0Ev)();
extern void ABISELECT(_ZThn272_N9S19863C13D0Ev,_ZThn152_N9S19863C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C7__9S19863C13__8S19863C1[] = {
  ABISELECT(-272,-152),
  ABISELECT(176,124),
  ABISELECT(-1136,-700),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI9S19863C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C13D1Ev,_ZTv0_n20_N9S19863C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C13D0Ev,_ZTv0_n20_N9S19863C13D0Ev),
};
extern void _ZN9S19863C14D1Ev();
extern void _ZN9S19863C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19863C14__8S19863C1[] = {
  ABISELECT(200,132),
  ABISELECT(-1112,-692),
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C14[0]),
  (VTBL_ENTRY)&_ZN9S19863C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C14D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19863C14D1Ev,_ZTv0_n20_N9S19863C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19863C14D1Ev,_ZThn8_N9S19863C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19863C14D0Ev,_ZTv0_n20_N9S19863C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19863C14D0Ev,_ZThn8_N9S19863C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C7__9S19863C14__8S19863C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(176,124),
  ABISELECT(-1136,-700),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI9S19863C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C14D1Ev,_ZTv0_n20_N9S19863C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19863C14D0Ev,_ZTv0_n20_N9S19863C14D0Ev),
};
extern void _ZN8S19863C7D1Ev();
extern void _ZN8S19863C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19863C7__8S19863C1[] = {
  ABISELECT(176,124),
  ABISELECT(-1136,-700),
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C7[0]),
  (VTBL_ENTRY)&_ZN8S19863C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C7D0Ev,
};
extern void _ZN9S19863C17D1Ev();
extern void _ZN9S19863C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19863C17__8S19863C1[] = {
  ABISELECT(16,12),
  ABISELECT(-680,-420),
  ABISELECT(12,8),
  ABISELECT(-8,-4),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C17[0]),
  (VTBL_ENTRY)&_ZN9S19863C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19863C189S19863C17__8S19863C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C18[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19863C17D1Ev,_ZTv0_n12_N9S19863C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19863C17D0Ev,_ZTv0_n12_N9S19863C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19863C17__8S19863C1[] = {
  ABISELECT(680,420),
  ABISELECT(680,420),
  (VTBL_ENTRY)&(_ZTI9S19863C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C17D1Ev,_ZTv0_n12_N9S19863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C17D0Ev,_ZTv0_n12_N9S19863C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19863C17D1Ev,_ZTv0_n16_N9S19863C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19863C17D1Ev,_ZThn12_N9S19863C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19863C17D0Ev,_ZTv0_n16_N9S19863C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S19863C17D0Ev,_ZThn12_N9S19863C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19863C16__9S19863C17__8S19863C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-696,-432),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19863C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19863C17D1Ev,_ZTv0_n16_N9S19863C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19863C17D0Ev,_ZTv0_n16_N9S19863C17D0Ev),
};
extern void _ZN9S19863C16D1Ev();
extern void _ZN9S19863C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19863C16__8S19863C1[] = {
  ABISELECT(-696,-432),
  0,
  (VTBL_ENTRY)&(_ZTI9S19863C16[0]),
  (VTBL_ENTRY)&_ZN9S19863C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19863C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19863C16D1Ev,_ZTv0_n12_N9S19863C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19863C16D0Ev,_ZTv0_n12_N9S19863C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19863C16__8S19863C1[] = {
  ABISELECT(696,432),
  ABISELECT(696,432),
  (VTBL_ENTRY)&(_ZTI9S19863C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C16D1Ev,_ZTv0_n12_N9S19863C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19863C16D0Ev,_ZTv0_n12_N9S19863C16D0Ev),
};
extern void _ZN8S19863C5D1Ev();
extern void _ZN8S19863C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19863C5__A1__8S19863C1[] = {
  ABISELECT(-1344,-844),
  ABISELECT(-1344,-844),
  ABISELECT(-704,-436),
  0,
  (VTBL_ENTRY)&(_ZTI8S19863C5[0]),
  (VTBL_ENTRY)&_ZN8S19863C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19863C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S19863C5__A1__8S19863C1[] = {
  ABISELECT(704,436),
  ABISELECT(704,436),
  (VTBL_ENTRY)&(_ZTI8S19863C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev),
};
static  VTT_ENTRY vtt_S19863C1[] = {
  {&(_ZTV8S19863C1[17]),  17,93},
  {&(_tg__ZTV9S19863C19__8S19863C1[6]),  6,8},
  {&(_tg__ZTV8S19863C5__9S19863C19__8S19863C1[6]),  6,8},
  {&(_tg__ZTV8S19863C6__9S19863C19__8S19863C1[3]),  3,5},
  {&(_ZTV8S19863C1[34]),  34,93},
  {&(_ZTV8S19863C1[39]),  39,93},
  {&(_ZTV8S19863C1[44]),  44,93},
  {&(_ZTV8S19863C1[52]),  52,93},
  {&(_ZTV8S19863C1[60]),  60,93},
  {&(_ZTV8S19863C1[67]),  67,93},
  {&(_ZTV8S19863C1[77]),  77,93},
  {&(_ZTV8S19863C1[83]),  83,93},
  {&(_ZTV8S19863C1[91]),  91,93},
  {&(_tg__ZTV8S19863C3__8S19863C1[14]),  14,16},
  {&(_tg__ZTV8S19863C58S19863C3__8S19863C1[5]),  5,7},
  {&(_tg__ZTV8S19863C6__8S19863C58S19863C3__8S19863C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__8S19863C3__8S19863C1[3]),  3,5},
  {&(_tg__ZTV9S19863C11__8S19863C3__8S19863C1[3]),  3,4},
  {&(_tg__ZTV9S19863C13__8S19863C3__8S19863C1[7]),  7,9},
  {&(_tg__ZTV9S19863C14__8S19863C3__8S19863C1[6]),  6,8},
  {&(_tg__ZTV8S19863C7__8S19863C3__8S19863C1[5]),  5,7},
  {&(_tg__ZTV9S19863C17__8S19863C3__8S19863C1[8]),  8,10},
  {&(_tg__ZTV9S19863C16__8S19863C3__8S19863C1[4]),  4,6},
  {&(_tg__ZTV9S19863C13__8S19863C1[6]),  6,8},
  {&(_tg__ZTV9S19863C14__9S19863C13__8S19863C1[6]),  6,8},
  {&(_tg__ZTV8S19863C7__9S19863C13__8S19863C1[5]),  5,7},
  {&(_tg__ZTV9S19863C14__8S19863C1[5]),  5,7},
  {&(_tg__ZTV8S19863C7__9S19863C14__8S19863C1[5]),  5,7},
  {&(_tg__ZTV8S19863C7__8S19863C1[4]),  4,6},
  {&(_tg__ZTV9S19863C17__8S19863C1[7]),  7,9},
  {&(_tg__ZTV9S19863C189S19863C17__8S19863C1[4]),  4,4},
  {&(_tg__ZTV8S19863C6__9S19863C17__8S19863C1[3]),  3,5},
  {&(_tg__ZTV9S19863C16__9S19863C17__8S19863C1[4]),  4,6},
  {&(_tg__ZTV9S19863C16__8S19863C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19863C16__8S19863C1[3]),  3,5},
  {&(_tg__ZTV8S19863C5__A1__8S19863C1[5]),  5,7},
  {&(_tg__ZTV8S19863C6__8S19863C5__A1__8S19863C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19863C1[];
extern  VTBL_ENTRY _ZTV8S19863C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19863C1[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19863C17D0Ev,_ZTv0_n16_N9S19863C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19863C17D0Ev,_ZThn12_N9S19863C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19863C17D1Ev,_ZTv0_n16_N9S19863C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19863C17D1Ev,_ZThn12_N9S19863C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C14D0Ev,_ZTv0_n20_N9S19863C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19863C14D0Ev,_ZThn8_N9S19863C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C14D1Ev,_ZTv0_n20_N9S19863C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19863C14D1Ev,_ZThn8_N9S19863C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C13D0Ev,_ZTv0_n20_N9S19863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19863C13D0Ev,_ZThn152_N9S19863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19863C13D1Ev,_ZTv0_n20_N9S19863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19863C13D1Ev,_ZThn152_N9S19863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19863C13D0Ev,_ZTv0_n24_N9S19863C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19863C13D0Ev,_ZThn144_N9S19863C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19863C13D1Ev,_ZTv0_n24_N9S19863C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19863C13D1Ev,_ZThn144_N9S19863C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19863C3D0Ev,_ZTv0_n16_N8S19863C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn728_N8S19863C3D0Ev,_ZThn444_N8S19863C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19863C3D1Ev,_ZTv0_n16_N8S19863C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn728_N8S19863C3D1Ev,_ZThn444_N8S19863C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19863C3D0Ev,_ZTv0_n32_N8S19863C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn712_N8S19863C3D0Ev,_ZThn432_N8S19863C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19863C3D1Ev,_ZTv0_n32_N8S19863C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn712_N8S19863C3D1Ev,_ZThn432_N8S19863C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19863C3D0Ev,_ZTv0_n20_N8S19863C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19863C3D0Ev,_ZThn304_N8S19863C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19863C3D1Ev,_ZTv0_n20_N8S19863C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19863C3D1Ev,_ZThn304_N8S19863C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19863C3D0Ev,_ZTv0_n24_N8S19863C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S19863C3D0Ev,_ZThn296_N8S19863C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19863C3D1Ev,_ZTv0_n24_N8S19863C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S19863C3D1Ev,_ZThn296_N8S19863C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19863C3D0Ev,_ZTv0_n28_N8S19863C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19863C3D0Ev,_ZThn152_N8S19863C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19863C3D1Ev,_ZTv0_n28_N8S19863C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19863C3D1Ev,_ZThn152_N8S19863C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C3D0Ev,_ZTv0_n12_N8S19863C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19863C3D0Ev,_ZThn12_N8S19863C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C3D1Ev,_ZTv0_n12_N8S19863C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19863C3D1Ev,_ZThn12_N8S19863C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C5D0Ev,_ZTv0_n12_N8S19863C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19863C5D0Ev,_ZThn12_N8S19863C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C5D1Ev,_ZTv0_n12_N8S19863C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19863C5D1Ev,_ZThn12_N8S19863C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19863C19D0Ev,_ZTv0_n12_N9S19863C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N9S19863C19D0Ev,_ZThn408_N9S19863C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19863C19D1Ev,_ZTv0_n12_N9S19863C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N9S19863C19D1Ev,_ZThn408_N9S19863C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19863C19D0Ev,_ZTv0_n24_N9S19863C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N9S19863C19D0Ev,_ZThn844_N9S19863C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19863C19D1Ev,_ZTv0_n24_N9S19863C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N9S19863C19D1Ev,_ZThn844_N9S19863C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19863C1D0Ev,_ZTv0_n16_N8S19863C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1336_N8S19863C1D0Ev,_ZThn840_N8S19863C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19863C1D1Ev,_ZTv0_n16_N8S19863C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1336_N8S19863C1D1Ev,_ZThn840_N8S19863C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19863C1D0Ev,_ZTv0_n32_N8S19863C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1320_N8S19863C1D0Ev,_ZThn828_N8S19863C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19863C1D1Ev,_ZTv0_n32_N8S19863C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1320_N8S19863C1D1Ev,_ZThn828_N8S19863C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19863C1D0Ev,_ZTv0_n20_N8S19863C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N8S19863C1D0Ev,_ZThn700_N8S19863C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19863C1D1Ev,_ZTv0_n20_N8S19863C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N8S19863C1D1Ev,_ZThn700_N8S19863C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19863C1D0Ev,_ZTv0_n24_N8S19863C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S19863C1D0Ev,_ZThn844_N8S19863C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1112_N8S19863C1D0Ev,_ZThn692_N8S19863C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19863C1D1Ev,_ZTv0_n24_N8S19863C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S19863C1D1Ev,_ZThn844_N8S19863C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1112_N8S19863C1D1Ev,_ZThn692_N8S19863C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19863C1D0Ev,_ZTv0_n28_N8S19863C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N8S19863C1D0Ev,_ZThn548_N8S19863C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19863C1D1Ev,_ZTv0_n28_N8S19863C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N8S19863C1D1Ev,_ZThn548_N8S19863C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C1D0Ev,_ZTv0_n12_N8S19863C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19863C1D0Ev,_ZThn408_N8S19863C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19863C1D1Ev,_ZTv0_n12_N8S19863C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19863C1D1Ev,_ZThn408_N8S19863C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19863C1D0Ev,_ZTv0_n60_N8S19863C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19863C1D0Ev,_ZThn396_N8S19863C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19863C1D1Ev,_ZTv0_n60_N8S19863C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19863C1D1Ev,_ZThn396_N8S19863C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19863C1 = {  "S19863C1", // class name
  bases_S19863C1, 28,
  &(vtc_S19863C1[0]), // expected_vtbl_contents
  &(vtt_S19863C1[0]), // expected_vtt_contents
  ABISELECT(1360,852), // object size
  NSPAIRA(_ZTI8S19863C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19863C1),93, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19863C1),37, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1766C4_nt  {
  __tsi64 s1766c4f0;
  void  mf1766c4(); // _ZN10S1766C4_nt8mf1766c4Ev
  virtual  ~S1766C4_nt(); // _ZN10S1766C4_ntD1Ev
  S1766C4_nt(); // tgen
};
//SIG(-1 S1766C4_nt) C1{ vd m FL}


void  S1766C4_nt ::mf1766c4(){}
 S1766C4_nt ::~S1766C4_nt(){ note_dtor("S1766C4_nt", this);}
S1766C4_nt ::S1766C4_nt(){ note_ctor("S1766C4_nt", this);} // tgen

//skip512 S1766C4_nt

#else // __cplusplus

extern void _ZN10S1766C4_ntC1Ev();
extern void _ZN10S1766C4_ntD1Ev();
Name_Map name_map_S1766C4_nt[] = {
  NSPAIR(_ZN10S1766C4_ntC1Ev),
  NSPAIR(_ZN10S1766C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern void _ZN10S1766C4_ntD1Ev();
extern void _ZN10S1766C4_ntD0Ev();
static  VTBL_ENTRY vtc_S1766C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1766C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1766C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1766C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
VTBL_ENTRY *P__ZTI10S1766C4_nt = _ZTI10S1766C4_nt; 
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
Class_Descriptor cd_S1766C4_nt = {  "S1766C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1766C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S1766C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1766C4_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  S1766C3_nt  : S1766C4_nt {
  int s1766c3f0;
  void *s1766c3f1[2];
  int s1766c3f2;
  virtual  ~S1766C3_nt(); // _ZN10S1766C3_ntD1Ev
  virtual void  v10(); // _ZN10S1766C3_nt3v10Ev
  virtual void  v11(); // _ZN10S1766C3_nt3v11Ev
  virtual void  v12(); // _ZN10S1766C3_nt3v12Ev
  virtual void  v13(); // _ZN10S1766C3_nt3v13Ev
  virtual void  v14(); // _ZN10S1766C3_nt3v14Ev
  virtual void  v15(); // _ZN10S1766C3_nt3v15Ev
  virtual void  v16(); // _ZN10S1766C3_nt3v16Ev
  virtual void  v17(); // _ZN10S1766C3_nt3v17Ev
  virtual void  v18(); // _ZN10S1766C3_nt3v18Ev
  virtual void  v19(); // _ZN10S1766C3_nt3v19Ev
  virtual void  v20(); // _ZN10S1766C3_nt3v20Ev
  S1766C3_nt(); // tgen
};
//SIG(-1 S1766C3_nt) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S1766C3_nt ::~S1766C3_nt(){ note_dtor("S1766C3_nt", this);}
void  S1766C3_nt ::v10(){vfunc_called(this, "_ZN10S1766C3_nt3v10Ev");}
void  S1766C3_nt ::v11(){vfunc_called(this, "_ZN10S1766C3_nt3v11Ev");}
void  S1766C3_nt ::v12(){vfunc_called(this, "_ZN10S1766C3_nt3v12Ev");}
void  S1766C3_nt ::v13(){vfunc_called(this, "_ZN10S1766C3_nt3v13Ev");}
void  S1766C3_nt ::v14(){vfunc_called(this, "_ZN10S1766C3_nt3v14Ev");}
void  S1766C3_nt ::v15(){vfunc_called(this, "_ZN10S1766C3_nt3v15Ev");}
void  S1766C3_nt ::v16(){vfunc_called(this, "_ZN10S1766C3_nt3v16Ev");}
void  S1766C3_nt ::v17(){vfunc_called(this, "_ZN10S1766C3_nt3v17Ev");}
void  S1766C3_nt ::v18(){vfunc_called(this, "_ZN10S1766C3_nt3v18Ev");}
void  S1766C3_nt ::v19(){vfunc_called(this, "_ZN10S1766C3_nt3v19Ev");}
void  S1766C3_nt ::v20(){vfunc_called(this, "_ZN10S1766C3_nt3v20Ev");}
S1766C3_nt ::S1766C3_nt(){ note_ctor("S1766C3_nt", this);} // tgen

//skip512 S1766C3_nt

#else // __cplusplus

extern void _ZN10S1766C3_ntC1Ev();
extern void _ZN10S1766C3_ntD1Ev();
Name_Map name_map_S1766C3_nt[] = {
  NSPAIR(_ZN10S1766C3_ntC1Ev),
  NSPAIR(_ZN10S1766C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S1766C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI10S1766C3_nt[];
extern void _ZN10S1766C3_ntD1Ev();
extern void _ZN10S1766C3_ntD0Ev();
extern void _ZN10S1766C3_nt3v10Ev();
extern void _ZN10S1766C3_nt3v11Ev();
extern void _ZN10S1766C3_nt3v12Ev();
extern void _ZN10S1766C3_nt3v13Ev();
extern void _ZN10S1766C3_nt3v14Ev();
extern void _ZN10S1766C3_nt3v15Ev();
extern void _ZN10S1766C3_nt3v16Ev();
extern void _ZN10S1766C3_nt3v17Ev();
extern void _ZN10S1766C3_nt3v18Ev();
extern void _ZN10S1766C3_nt3v19Ev();
extern void _ZN10S1766C3_nt3v20Ev();
static  VTBL_ENTRY vtc_S1766C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1766C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1766C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI10S1766C3_nt[];
VTBL_ENTRY *P__ZTI10S1766C3_nt = _ZTI10S1766C3_nt; 
extern  VTBL_ENTRY _ZTV10S1766C3_nt[];
Class_Descriptor cd_S1766C3_nt = {  "S1766C3_nt", // class name
  bases_S1766C3_nt, 1,
  &(vtc_S1766C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI10S1766C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1766C3_nt),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1766C2  : S1766C3_nt {
  virtual  ~S1766C2(); // _ZN7S1766C2D1Ev
  S1766C2(); // tgen
};
//SIG(-1 S1766C2) C1{ BC2{ BC3{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi} vd}


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

static void Test_S1766C2()
{
  extern Class_Descriptor cd_S1766C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1766C2, buf);
    S1766C2 *dp, &lv = *(dp=new (buf) S1766C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1766C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1766C2)");
    check_base_class_offset(lv, (S1766C4_nt*)(S1766C3_nt*), 0, "S1766C2");
    check_base_class_offset(lv, (S1766C3_nt*), 0, "S1766C2");
    test_class_info(&lv, &cd_S1766C2);
    dp->~S1766C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1766C2(Test_S1766C2, "S1766C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1766C2C1Ev();
extern void _ZN7S1766C2D1Ev();
Name_Map name_map_S1766C2[] = {
  NSPAIR(_ZN7S1766C2C1Ev),
  NSPAIR(_ZN7S1766C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S1766C3_nt;
extern VTBL_ENTRY _ZTI10S1766C3_nt[];
extern  VTBL_ENTRY _ZTV10S1766C3_nt[];
static Base_Class bases_S1766C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S1766C3_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 _ZTI7S1766C2[];
extern void _ZN7S1766C2D1Ev();
extern void _ZN7S1766C2D0Ev();
extern void _ZN10S1766C3_nt3v10Ev();
extern void _ZN10S1766C3_nt3v11Ev();
extern void _ZN10S1766C3_nt3v12Ev();
extern void _ZN10S1766C3_nt3v13Ev();
extern void _ZN10S1766C3_nt3v14Ev();
extern void _ZN10S1766C3_nt3v15Ev();
extern void _ZN10S1766C3_nt3v16Ev();
extern void _ZN10S1766C3_nt3v17Ev();
extern void _ZN10S1766C3_nt3v18Ev();
extern void _ZN10S1766C3_nt3v19Ev();
extern void _ZN10S1766C3_nt3v20Ev();
static  VTBL_ENTRY vtc_S1766C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1766C2[0]),
  (VTBL_ENTRY)&_ZN7S1766C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1766C2D0Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI7S1766C2[];
extern  VTBL_ENTRY _ZTV7S1766C2[];
Class_Descriptor cd_S1766C2 = {  "S1766C2", // class name
  bases_S1766C2, 2,
  &(vtc_S1766C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1766C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1766C2),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  S1766C5_nt  {
  int s1766c5f0[2];
  void *s1766c5f1;
  int s1766c5f2[2];
  void *s1766c5f3;
  int s1766c5f4[3];
  void *s1766c5f5;
};
//SIG(-1 S1766C5_nt) C1{ Fi[2] Fp Fi[2] Fp Fi[3] Fp}



//skip512 S1766C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1766C7_nt  {
  int s1766c7f0;
  char s1766c7f1[4];
  int s1766c7f2;
  int s1766c7f3;
  int s1766c7f4;
  int s1766c7f5;
  int s1766c7f6;
};
//SIG(1 S1766C7_nt) C1{ Fi Fc[4] Fi[5]}



//skip512 S1766C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1766C8_nt  {
  int s1766c8f0;
  int s1766c8f1;
  int s1766c8f2;
};
//SIG(1 S1766C8_nt) C1{ Fi[3]}



//skip512 S1766C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1766C9_nt  {
  int s1766c9f0;
  int s1766c9f1;
  int s1766c9f2;
  int s1766c9f3;
  int s1766c9f4;
};
//SIG(1 S1766C9_nt) C1{ Fi[5]}



//skip512 S1766C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S1766C6_nt  {
  int s1766c6f0;
  ::S1766C7_nt s1766c6f1;
  ::S1766C8_nt s1766c6f2;
  ::S1766C9_nt s1766c6f3;
  ::S1766C9_nt s1766c6f4;
};
//SIG(1 S1766C6_nt) U1{ Fi FC2{ Fi Fc[4] Fi Fi Fi Fi Fi} FC3{ Fi Fi Fi} FC4{ Fi Fi Fi Fi Fi} FC4}

#endif // __cplusplus
#ifdef __cplusplus

struct  S1766C1  : S1766C2 {
  void *s1766c1f0[2];
  int s1766c1f1[2];
  void *s1766c1f2;
  ::S1766C5_nt s1766c1f3;
  ::S1766C6_nt s1766c1f4;
  int s1766c1f5;
  int s1766c1f6;
  int s1766c1f7;
  virtual  ~S1766C1(); // _ZN7S1766C1D1Ev
  virtual void  v1(); // _ZN7S1766C12v1Ev
  virtual void  v2(); // _ZN7S1766C12v2Ev
  virtual void  v3(); // _ZN7S1766C12v3Ev
  virtual void  v4(); // _ZN7S1766C12v4Ev
  virtual void  v5(); // _ZN7S1766C12v5Ev
  virtual void  v6(); // _ZN7S1766C12v6Ev
  virtual void  v7(); // _ZN7S1766C12v7Ev
  virtual void  v8(); // _ZN7S1766C12v8Ev
  virtual void  v9(); // _ZN7S1766C12v9Ev
  S1766C1(); // tgen
};
//SIG(1 S1766C1) C1{ BC2{ BC3{ BC4{ vd m FL} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi Fp[2] Fi} vd} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[2] Fi[2] Fp FC5{ Fi[2] Fp Fi[2] Fp Fi[3] Fp} FU6{ Fi FC7{ Fi Fc[4] Fi Fi Fi Fi Fi} FC8{ Fi Fi Fi} FC9{ Fi Fi Fi Fi Fi} FC9} Fi Fi Fi}


 S1766C1 ::~S1766C1(){ note_dtor("S1766C1", this);}
void  S1766C1 ::v1(){vfunc_called(this, "_ZN7S1766C12v1Ev");}
void  S1766C1 ::v2(){vfunc_called(this, "_ZN7S1766C12v2Ev");}
void  S1766C1 ::v3(){vfunc_called(this, "_ZN7S1766C12v3Ev");}
void  S1766C1 ::v4(){vfunc_called(this, "_ZN7S1766C12v4Ev");}
void  S1766C1 ::v5(){vfunc_called(this, "_ZN7S1766C12v5Ev");}
void  S1766C1 ::v6(){vfunc_called(this, "_ZN7S1766C12v6Ev");}
void  S1766C1 ::v7(){vfunc_called(this, "_ZN7S1766C12v7Ev");}
void  S1766C1 ::v8(){vfunc_called(this, "_ZN7S1766C12v8Ev");}
void  S1766C1 ::v9(){vfunc_called(this, "_ZN7S1766C12v9Ev");}
S1766C1 ::S1766C1(){ note_ctor("S1766C1", this);} // tgen

static void Test_S1766C1()
{
  extern Class_Descriptor cd_S1766C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,33)];
    init_test(&cd_S1766C1, buf);
    S1766C1 *dp, &lv = *(dp=new (buf) S1766C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,128), "sizeof(S1766C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1766C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S1766C3_nt*)(S1766C2*), 0, "S1766C1");
    check_base_class_offset(lv, (S1766C3_nt*)(S1766C2*), 0, "S1766C1");
    check_base_class_offset(lv, (S1766C2*), 0, "S1766C1");
    check_field_offset(lv, s1766c1f0, ABISELECT(48,28), "S1766C1.s1766c1f0");
    check_field_offset(lv, s1766c1f1, ABISELECT(64,36), "S1766C1.s1766c1f1");
    check_field_offset(lv, s1766c1f2, ABISELECT(72,44), "S1766C1.s1766c1f2");
    check_field_offset(lv, s1766c1f3, ABISELECT(80,48), "S1766C1.s1766c1f3");
    check_field_offset(lv, s1766c1f4, ABISELECT(136,88), "S1766C1.s1766c1f4");
    check_field_offset(lv, s1766c1f5, ABISELECT(164,116), "S1766C1.s1766c1f5");
    check_field_offset(lv, s1766c1f6, ABISELECT(168,120), "S1766C1.s1766c1f6");
    check_field_offset(lv, s1766c1f7, ABISELECT(172,124), "S1766C1.s1766c1f7");
    test_class_info(&lv, &cd_S1766C1);
    dp->~S1766C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1766C1(Test_S1766C1, "S1766C1", ABISELECT(176,128));

#else // __cplusplus

extern void _ZN7S1766C1C1Ev();
extern void _ZN7S1766C1D1Ev();
Name_Map name_map_S1766C1[] = {
  NSPAIR(_ZN7S1766C1C1Ev),
  NSPAIR(_ZN7S1766C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S1766C3_nt;
extern VTBL_ENTRY _ZTI10S1766C3_nt[];
extern  VTBL_ENTRY _ZTV10S1766C3_nt[];
extern Class_Descriptor cd_S1766C2;
extern VTBL_ENTRY _ZTI7S1766C2[];
extern  VTBL_ENTRY _ZTV7S1766C2[];
static Base_Class bases_S1766C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S1766C3_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_S1766C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1766C1[];
extern void _ZN7S1766C1D1Ev();
extern void _ZN7S1766C1D0Ev();
extern void _ZN10S1766C3_nt3v10Ev();
extern void _ZN10S1766C3_nt3v11Ev();
extern void _ZN10S1766C3_nt3v12Ev();
extern void _ZN10S1766C3_nt3v13Ev();
extern void _ZN10S1766C3_nt3v14Ev();
extern void _ZN10S1766C3_nt3v15Ev();
extern void _ZN10S1766C3_nt3v16Ev();
extern void _ZN10S1766C3_nt3v17Ev();
extern void _ZN10S1766C3_nt3v18Ev();
extern void _ZN10S1766C3_nt3v19Ev();
extern void _ZN10S1766C3_nt3v20Ev();
extern void _ZN7S1766C12v1Ev();
extern void _ZN7S1766C12v2Ev();
extern void _ZN7S1766C12v3Ev();
extern void _ZN7S1766C12v4Ev();
extern void _ZN7S1766C12v5Ev();
extern void _ZN7S1766C12v6Ev();
extern void _ZN7S1766C12v7Ev();
extern void _ZN7S1766C12v8Ev();
extern void _ZN7S1766C12v9Ev();
static  VTBL_ENTRY vtc_S1766C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1766C1[0]),
  (VTBL_ENTRY)&_ZN7S1766C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1766C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1766C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN7S1766C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1766C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1766C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1766C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1766C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1766C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1766C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1766C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1766C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S1766C1[];
extern  VTBL_ENTRY _ZTV7S1766C1[];
Class_Descriptor cd_S1766C1 = {  "S1766C1", // class name
  bases_S1766C1, 3,
  &(vtc_S1766C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,128), // object size
  NSPAIRA(_ZTI7S1766C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1766C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8659C2_nt  {
  virtual  ~S8659C2_nt(); // _ZN10S8659C2_ntD1Ev
  virtual void  v17(); // _ZN10S8659C2_nt3v17Ev
  virtual void  v18(); // _ZN10S8659C2_nt3v18Ev
  virtual void  v19(); // _ZN10S8659C2_nt3v19Ev
  virtual void  v20(); // _ZN10S8659C2_nt3v20Ev
  virtual void  v21(); // _ZN10S8659C2_nt3v21Ev
  virtual void  v22(); // _ZN10S8659C2_nt3v22Ev
  virtual void  v23(); // _ZN10S8659C2_nt3v23Ev
  S8659C2_nt(); // tgen
};
//SIG(-1 S8659C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S8659C2_nt ::~S8659C2_nt(){ note_dtor("S8659C2_nt", this);}
void  S8659C2_nt ::v17(){vfunc_called(this, "_ZN10S8659C2_nt3v17Ev");}
void  S8659C2_nt ::v18(){vfunc_called(this, "_ZN10S8659C2_nt3v18Ev");}
void  S8659C2_nt ::v19(){vfunc_called(this, "_ZN10S8659C2_nt3v19Ev");}
void  S8659C2_nt ::v20(){vfunc_called(this, "_ZN10S8659C2_nt3v20Ev");}
void  S8659C2_nt ::v21(){vfunc_called(this, "_ZN10S8659C2_nt3v21Ev");}
void  S8659C2_nt ::v22(){vfunc_called(this, "_ZN10S8659C2_nt3v22Ev");}
void  S8659C2_nt ::v23(){vfunc_called(this, "_ZN10S8659C2_nt3v23Ev");}
S8659C2_nt ::S8659C2_nt(){ note_ctor("S8659C2_nt", this);} // tgen

//skip512 S8659C2_nt

#else // __cplusplus

extern void _ZN10S8659C2_ntC1Ev();
extern void _ZN10S8659C2_ntD1Ev();
Name_Map name_map_S8659C2_nt[] = {
  NSPAIR(_ZN10S8659C2_ntC1Ev),
  NSPAIR(_ZN10S8659C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8659C2_nt[];
extern void _ZN10S8659C2_ntD1Ev();
extern void _ZN10S8659C2_ntD0Ev();
extern void _ZN10S8659C2_nt3v17Ev();
extern void _ZN10S8659C2_nt3v18Ev();
extern void _ZN10S8659C2_nt3v19Ev();
extern void _ZN10S8659C2_nt3v20Ev();
extern void _ZN10S8659C2_nt3v21Ev();
extern void _ZN10S8659C2_nt3v22Ev();
extern void _ZN10S8659C2_nt3v23Ev();
static  VTBL_ENTRY vtc_S8659C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8659C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8659C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v23Ev,
};
extern VTBL_ENTRY _ZTI10S8659C2_nt[];
VTBL_ENTRY *P__ZTI10S8659C2_nt = _ZTI10S8659C2_nt; 
extern  VTBL_ENTRY _ZTV10S8659C2_nt[];
Class_Descriptor cd_S8659C2_nt = {  "S8659C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8659C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8659C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8659C2_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  S8659C3_nt  {
  virtual  ~S8659C3_nt(); // _ZN10S8659C3_ntD1Ev
  virtual void  v24(); // _ZN10S8659C3_nt3v24Ev
  virtual void  v25(); // _ZN10S8659C3_nt3v25Ev
  virtual void  v26(); // _ZN10S8659C3_nt3v26Ev
  virtual void  v27(); // _ZN10S8659C3_nt3v27Ev
  virtual void  v28(); // _ZN10S8659C3_nt3v28Ev
  virtual void  v29(); // _ZN10S8659C3_nt3v29Ev
  S8659C3_nt(); // tgen
};
//SIG(-1 S8659C3_nt) C1{ vd v1 v2 v3 v4 v5 v6}


 S8659C3_nt ::~S8659C3_nt(){ note_dtor("S8659C3_nt", this);}
void  S8659C3_nt ::v24(){vfunc_called(this, "_ZN10S8659C3_nt3v24Ev");}
void  S8659C3_nt ::v25(){vfunc_called(this, "_ZN10S8659C3_nt3v25Ev");}
void  S8659C3_nt ::v26(){vfunc_called(this, "_ZN10S8659C3_nt3v26Ev");}
void  S8659C3_nt ::v27(){vfunc_called(this, "_ZN10S8659C3_nt3v27Ev");}
void  S8659C3_nt ::v28(){vfunc_called(this, "_ZN10S8659C3_nt3v28Ev");}
void  S8659C3_nt ::v29(){vfunc_called(this, "_ZN10S8659C3_nt3v29Ev");}
S8659C3_nt ::S8659C3_nt(){ note_ctor("S8659C3_nt", this);} // tgen

//skip512 S8659C3_nt

#else // __cplusplus

extern void _ZN10S8659C3_ntC1Ev();
extern void _ZN10S8659C3_ntD1Ev();
Name_Map name_map_S8659C3_nt[] = {
  NSPAIR(_ZN10S8659C3_ntC1Ev),
  NSPAIR(_ZN10S8659C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8659C3_nt[];
extern void _ZN10S8659C3_ntD1Ev();
extern void _ZN10S8659C3_ntD0Ev();
extern void _ZN10S8659C3_nt3v24Ev();
extern void _ZN10S8659C3_nt3v25Ev();
extern void _ZN10S8659C3_nt3v26Ev();
extern void _ZN10S8659C3_nt3v27Ev();
extern void _ZN10S8659C3_nt3v28Ev();
extern void _ZN10S8659C3_nt3v29Ev();
static  VTBL_ENTRY vtc_S8659C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8659C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S8659C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8659C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8659C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S8659C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S8659C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S8659C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S8659C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S8659C3_nt3v29Ev,
};
extern VTBL_ENTRY _ZTI10S8659C3_nt[];
VTBL_ENTRY *P__ZTI10S8659C3_nt = _ZTI10S8659C3_nt; 
extern  VTBL_ENTRY _ZTV10S8659C3_nt[];
Class_Descriptor cd_S8659C3_nt = {  "S8659C3_nt", // class name
  0,0,//no base classes
  &(vtc_S8659C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8659C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8659C3_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8659C4  {
  virtual  ~S8659C4(); // _ZN7S8659C4D1Ev
  virtual void  v30(); // _ZN7S8659C43v30Ev
  virtual void  v31(); // _ZN7S8659C43v31Ev
  virtual void  v32(); // _ZN7S8659C43v32Ev
  virtual void  v33(); // _ZN7S8659C43v33Ev
  virtual void  v34(); // _ZN7S8659C43v34Ev
  virtual void  v35(); // _ZN7S8659C43v35Ev
  virtual void  v36(); // _ZN7S8659C43v36Ev
  S8659C4(); // tgen
};
//SIG(-1 S8659C4) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S8659C4 ::~S8659C4(){ note_dtor("S8659C4", this);}
void  S8659C4 ::v30(){vfunc_called(this, "_ZN7S8659C43v30Ev");}
void  S8659C4 ::v31(){vfunc_called(this, "_ZN7S8659C43v31Ev");}
void  S8659C4 ::v32(){vfunc_called(this, "_ZN7S8659C43v32Ev");}
void  S8659C4 ::v33(){vfunc_called(this, "_ZN7S8659C43v33Ev");}
void  S8659C4 ::v34(){vfunc_called(this, "_ZN7S8659C43v34Ev");}
void  S8659C4 ::v35(){vfunc_called(this, "_ZN7S8659C43v35Ev");}
void  S8659C4 ::v36(){vfunc_called(this, "_ZN7S8659C43v36Ev");}
S8659C4 ::S8659C4(){ note_ctor("S8659C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S8659C4C1Ev();
extern void _ZN7S8659C4D1Ev();
Name_Map name_map_S8659C4[] = {
  NSPAIR(_ZN7S8659C4C1Ev),
  NSPAIR(_ZN7S8659C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8659C4[];
extern void _ZN7S8659C4D1Ev();
extern void _ZN7S8659C4D0Ev();
extern void _ZN7S8659C43v30Ev();
extern void _ZN7S8659C43v31Ev();
extern void _ZN7S8659C43v32Ev();
extern void _ZN7S8659C43v33Ev();
extern void _ZN7S8659C43v34Ev();
extern void _ZN7S8659C43v35Ev();
extern void _ZN7S8659C43v36Ev();
static  VTBL_ENTRY vtc_S8659C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8659C4[0]),
  (VTBL_ENTRY)&_ZN7S8659C4D1Ev,
  (VTBL_ENTRY)&_ZN7S8659C4D0Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v30Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v31Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v32Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v33Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v34Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v35Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v36Ev,
};
extern VTBL_ENTRY _ZTI7S8659C4[];
extern  VTBL_ENTRY _ZTV7S8659C4[];
Class_Descriptor cd_S8659C4 = {  "S8659C4", // class name
  0,0,//no base classes
  &(vtc_S8659C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8659C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8659C4),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  S8659C1  : S8659C2_nt , S8659C3_nt , S8659C4 {
  int s8659c1f0[4];
  void *s8659c1f1[2];
  char s8659c1f2[256];
  __tsi64 s8659c1f3;
  int s8659c1f4[3];
  char s8659c1f5[129];
  int s8659c1f6;
  void *s8659c1f7[6];
  char s8659c1f8[2];
  int s8659c1f9;
  __tsi64 s8659c1f10[4];
  char s8659c1f11;
  int s8659c1f12;
  char s8659c1f13;
  void *s8659c1f14;
  __tsi64 s8659c1f15;
  char s8659c1f16;
  int s8659c1f17[3];
  void *s8659c1f18[12];
  virtual  ~S8659C1(); // _ZN7S8659C1D1Ev
  virtual void  v1(); // _ZN7S8659C12v1Ev
  virtual void  v2(); // _ZN7S8659C12v2Ev
  virtual void  v3(); // _ZN7S8659C12v3Ev
  virtual void  v4(); // _ZN7S8659C12v4Ev
  virtual void  v5(); // _ZN7S8659C12v5Ev
  virtual void  v6(); // _ZN7S8659C12v6Ev
  virtual void  v7(); // _ZN7S8659C12v7Ev
  virtual void  v8(); // _ZN7S8659C12v8Ev
  virtual void  v9(); // _ZN7S8659C12v9Ev
  virtual void  v10(); // _ZN7S8659C13v10Ev
  virtual void  v11(); // _ZN7S8659C13v11Ev
  virtual void  v12(); // _ZN7S8659C13v12Ev
  virtual void  v13(); // _ZN7S8659C13v13Ev
  virtual void  v14(); // _ZN7S8659C13v14Ev
  virtual void  v15(); // _ZN7S8659C13v15Ev
  virtual void  v16(); // _ZN7S8659C13v16Ev
  S8659C1(); // tgen
};
//SIG(1 S8659C1) C1{ BC2{ vd v17 v18 v19 v20 v21 v22 v23} BC3{ vd v24 v25 v26 v27 v28 v29} BC4{ vd v30 v31 v32 v33 v34 v35 v36} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fi[4] Fp[2] Fc[256] FL Fi[3] Fc[129] Fi Fp[6] Fc[2] Fi FL[4] Fc Fi Fc Fp FL Fc Fi[3] Fp[12]}


 S8659C1 ::~S8659C1(){ note_dtor("S8659C1", this);}
void  S8659C1 ::v1(){vfunc_called(this, "_ZN7S8659C12v1Ev");}
void  S8659C1 ::v2(){vfunc_called(this, "_ZN7S8659C12v2Ev");}
void  S8659C1 ::v3(){vfunc_called(this, "_ZN7S8659C12v3Ev");}
void  S8659C1 ::v4(){vfunc_called(this, "_ZN7S8659C12v4Ev");}
void  S8659C1 ::v5(){vfunc_called(this, "_ZN7S8659C12v5Ev");}
void  S8659C1 ::v6(){vfunc_called(this, "_ZN7S8659C12v6Ev");}
void  S8659C1 ::v7(){vfunc_called(this, "_ZN7S8659C12v7Ev");}
void  S8659C1 ::v8(){vfunc_called(this, "_ZN7S8659C12v8Ev");}
void  S8659C1 ::v9(){vfunc_called(this, "_ZN7S8659C12v9Ev");}
void  S8659C1 ::v10(){vfunc_called(this, "_ZN7S8659C13v10Ev");}
void  S8659C1 ::v11(){vfunc_called(this, "_ZN7S8659C13v11Ev");}
void  S8659C1 ::v12(){vfunc_called(this, "_ZN7S8659C13v12Ev");}
void  S8659C1 ::v13(){vfunc_called(this, "_ZN7S8659C13v13Ev");}
void  S8659C1 ::v14(){vfunc_called(this, "_ZN7S8659C13v14Ev");}
void  S8659C1 ::v15(){vfunc_called(this, "_ZN7S8659C13v15Ev");}
void  S8659C1 ::v16(){vfunc_called(this, "_ZN7S8659C13v16Ev");}
S8659C1 ::S8659C1(){ note_ctor("S8659C1", this);} // tgen

static void Test_S8659C1()
{
  extern Class_Descriptor cd_S8659C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(89,151)];
    init_test(&cd_S8659C1, buf);
    S8659C1 *dp, &lv = *(dp=new (buf) S8659C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(704,600), "sizeof(S8659C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8659C1)");
    check_base_class_offset(lv, (S8659C2_nt*), 0, "S8659C1");
    check_base_class_offset(lv, (S8659C3_nt*), ABISELECT(8,4), "S8659C1");
    check_base_class_offset(lv, (S8659C4*), ABISELECT(16,8), "S8659C1");
    check_field_offset(lv, s8659c1f0, ABISELECT(24,12), "S8659C1.s8659c1f0");
    check_field_offset(lv, s8659c1f1, ABISELECT(40,28), "S8659C1.s8659c1f1");
    check_field_offset(lv, s8659c1f2, ABISELECT(56,36), "S8659C1.s8659c1f2");
    check_field_offset(lv, s8659c1f3, ABISELECT(312,292), "S8659C1.s8659c1f3");
    check_field_offset(lv, s8659c1f4, ABISELECT(320,300), "S8659C1.s8659c1f4");
    check_field_offset(lv, s8659c1f5, ABISELECT(332,312), "S8659C1.s8659c1f5");
    check_field_offset(lv, s8659c1f6, ABISELECT(464,444), "S8659C1.s8659c1f6");
    check_field_offset(lv, s8659c1f7, ABISELECT(472,448), "S8659C1.s8659c1f7");
    check_field_offset(lv, s8659c1f8, ABISELECT(520,472), "S8659C1.s8659c1f8");
    check_field_offset(lv, s8659c1f9, ABISELECT(524,476), "S8659C1.s8659c1f9");
    check_field_offset(lv, s8659c1f10, ABISELECT(528,480), "S8659C1.s8659c1f10");
    check_field_offset(lv, s8659c1f11, ABISELECT(560,512), "S8659C1.s8659c1f11");
    check_field_offset(lv, s8659c1f12, ABISELECT(564,516), "S8659C1.s8659c1f12");
    check_field_offset(lv, s8659c1f13, ABISELECT(568,520), "S8659C1.s8659c1f13");
    check_field_offset(lv, s8659c1f14, ABISELECT(576,524), "S8659C1.s8659c1f14");
    check_field_offset(lv, s8659c1f15, ABISELECT(584,528), "S8659C1.s8659c1f15");
    check_field_offset(lv, s8659c1f16, ABISELECT(592,536), "S8659C1.s8659c1f16");
    check_field_offset(lv, s8659c1f17, ABISELECT(596,540), "S8659C1.s8659c1f17");
    check_field_offset(lv, s8659c1f18, ABISELECT(608,552), "S8659C1.s8659c1f18");
    test_class_info(&lv, &cd_S8659C1);
    dp->~S8659C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8659C1(Test_S8659C1, "S8659C1", ABISELECT(704,600));

#else // __cplusplus

extern void _ZN7S8659C1C1Ev();
extern void _ZN7S8659C1D1Ev();
Name_Map name_map_S8659C1[] = {
  NSPAIR(_ZN7S8659C1C1Ev),
  NSPAIR(_ZN7S8659C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8659C2_nt;
extern VTBL_ENTRY _ZTI10S8659C2_nt[];
extern  VTBL_ENTRY _ZTV10S8659C2_nt[];
extern Class_Descriptor cd_S8659C3_nt;
extern VTBL_ENTRY _ZTI10S8659C3_nt[];
extern  VTBL_ENTRY _ZTV10S8659C3_nt[];
extern Class_Descriptor cd_S8659C4;
extern VTBL_ENTRY _ZTI7S8659C4[];
extern  VTBL_ENTRY _ZTV7S8659C4[];
static Base_Class bases_S8659C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8659C2_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_S8659C3_nt,    ABISELECT(8,4), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S8659C4,    ABISELECT(16,8), //bcp->offset
    37, //bcp->virtual_function_table_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 _ZTI7S8659C1[];
extern void _ZN7S8659C1D1Ev();
extern void _ZN7S8659C1D0Ev();
extern void _ZN10S8659C2_nt3v17Ev();
extern void _ZN10S8659C2_nt3v18Ev();
extern void _ZN10S8659C2_nt3v19Ev();
extern void _ZN10S8659C2_nt3v20Ev();
extern void _ZN10S8659C2_nt3v21Ev();
extern void _ZN10S8659C2_nt3v22Ev();
extern void _ZN10S8659C2_nt3v23Ev();
extern void _ZN7S8659C12v1Ev();
extern void _ZN7S8659C12v2Ev();
extern void _ZN7S8659C12v3Ev();
extern void _ZN7S8659C12v4Ev();
extern void _ZN7S8659C12v5Ev();
extern void _ZN7S8659C12v6Ev();
extern void _ZN7S8659C12v7Ev();
extern void _ZN7S8659C12v8Ev();
extern void _ZN7S8659C12v9Ev();
extern void _ZN7S8659C13v10Ev();
extern void _ZN7S8659C13v11Ev();
extern void _ZN7S8659C13v12Ev();
extern void _ZN7S8659C13v13Ev();
extern void _ZN7S8659C13v14Ev();
extern void _ZN7S8659C13v15Ev();
extern void _ZN7S8659C13v16Ev();
extern void ABISELECT(_ZThn8_N7S8659C1D1Ev,_ZThn4_N7S8659C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S8659C1D0Ev,_ZThn4_N7S8659C1D0Ev)();
extern void _ZN10S8659C3_nt3v24Ev();
extern void _ZN10S8659C3_nt3v25Ev();
extern void _ZN10S8659C3_nt3v26Ev();
extern void _ZN10S8659C3_nt3v27Ev();
extern void _ZN10S8659C3_nt3v28Ev();
extern void _ZN10S8659C3_nt3v29Ev();
extern void ABISELECT(_ZThn16_N7S8659C1D1Ev,_ZThn8_N7S8659C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S8659C1D0Ev,_ZThn8_N7S8659C1D0Ev)();
extern void _ZN7S8659C43v30Ev();
extern void _ZN7S8659C43v31Ev();
extern void _ZN7S8659C43v32Ev();
extern void _ZN7S8659C43v33Ev();
extern void _ZN7S8659C43v34Ev();
extern void _ZN7S8659C43v35Ev();
extern void _ZN7S8659C43v36Ev();
static  VTBL_ENTRY vtc_S8659C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8659C1[0]),
  (VTBL_ENTRY)&_ZN7S8659C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8659C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S8659C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN7S8659C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8659C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8659C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8659C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8659C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8659C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8659C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8659C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8659C12v9Ev,
  (VTBL_ENTRY)&_ZN7S8659C13v10Ev,
  (VTBL_ENTRY)&_ZN7S8659C13v11Ev,
  (VTBL_ENTRY)&_ZN7S8659C13v12Ev,
  (VTBL_ENTRY)&_ZN7S8659C13v13Ev,
  (VTBL_ENTRY)&_ZN7S8659C13v14Ev,
  (VTBL_ENTRY)&_ZN7S8659C13v15Ev,
  (VTBL_ENTRY)&_ZN7S8659C13v16Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8659C1D1Ev,_ZThn4_N7S8659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8659C1D0Ev,_ZThn4_N7S8659C1D0Ev),
  (VTBL_ENTRY)&_ZN10S8659C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S8659C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S8659C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S8659C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S8659C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S8659C3_nt3v29Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S8659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S8659C1D1Ev,_ZThn8_N7S8659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S8659C1D0Ev,_ZThn8_N7S8659C1D0Ev),
  (VTBL_ENTRY)&_ZN7S8659C43v30Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v31Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v32Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v33Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v34Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v35Ev,
  (VTBL_ENTRY)&_ZN7S8659C43v36Ev,
};
extern VTBL_ENTRY _ZTI7S8659C1[];
extern  VTBL_ENTRY _ZTV7S8659C1[];
Class_Descriptor cd_S8659C1 = {  "S8659C1", // class name
  bases_S8659C1, 3,
  &(vtc_S8659C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(704,600), // object size
  NSPAIRA(_ZTI7S8659C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8659C1),48, //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  S12560C3_nt  {
  __tsi64 s12560c3f0[2];
  void  mf12560c3(); // _ZN11S12560C3_nt9mf12560c3Ev
};
//SIG(-1 S12560C3_nt) C1{ m FL[2]}


void  S12560C3_nt ::mf12560c3(){}

//skip512 S12560C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C2_nt  {
  ::S12560C3_nt s12560c2f0;
  void  mf12560c2(); // _ZN11S12560C2_nt9mf12560c2Ev
};
//SIG(-1 S12560C2_nt) C1{ m FC2{ m FL[2]}}


void  S12560C2_nt ::mf12560c2(){}

//skip512 S12560C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C5_nt  {
  __tsi64 s12560c5f0;
  void *s12560c5f1;
  int s12560c5f2;
  virtual  ~S12560C5_nt(); // _ZN11S12560C5_ntD1Ev
  virtual void  v3(); // _ZN11S12560C5_nt2v3Ev
  virtual void  v4(); // _ZN11S12560C5_nt2v4Ev
  virtual void  v5(); // _ZN11S12560C5_nt2v5Ev
  S12560C5_nt(); // tgen
};
//SIG(-1 S12560C5_nt) C1{ vd v1 v2 v3 FL Fp Fi}


 S12560C5_nt ::~S12560C5_nt(){ note_dtor("S12560C5_nt", this);}
void  S12560C5_nt ::v3(){vfunc_called(this, "_ZN11S12560C5_nt2v3Ev");}
void  S12560C5_nt ::v4(){vfunc_called(this, "_ZN11S12560C5_nt2v4Ev");}
void  S12560C5_nt ::v5(){vfunc_called(this, "_ZN11S12560C5_nt2v5Ev");}
S12560C5_nt ::S12560C5_nt(){ note_ctor("S12560C5_nt", this);} // tgen

//skip512 S12560C5_nt

#else // __cplusplus

extern void _ZN11S12560C5_ntC1Ev();
extern void _ZN11S12560C5_ntD1Ev();
Name_Map name_map_S12560C5_nt[] = {
  NSPAIR(_ZN11S12560C5_ntC1Ev),
  NSPAIR(_ZN11S12560C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S12560C5_nt[];
extern void _ZN11S12560C5_ntD1Ev();
extern void _ZN11S12560C5_ntD0Ev();
extern void _ZN11S12560C5_nt2v3Ev();
extern void _ZN11S12560C5_nt2v4Ev();
extern void _ZN11S12560C5_nt2v5Ev();
static  VTBL_ENTRY vtc_S12560C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S12560C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S12560C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S12560C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S12560C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S12560C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S12560C5_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI11S12560C5_nt[];
VTBL_ENTRY *P__ZTI11S12560C5_nt = _ZTI11S12560C5_nt; 
extern  VTBL_ENTRY _ZTV11S12560C5_nt[];
Class_Descriptor cd_S12560C5_nt = {  "S12560C5_nt", // class name
  0,0,//no base classes
  &(vtc_S12560C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI11S12560C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S12560C5_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  S12560C4_nt  : S12560C5_nt {
  int s12560c4f0;
  char s12560c4f1;
  virtual  ~S12560C4_nt(); // _ZN11S12560C4_ntD1Ev
  virtual void  v1(); // _ZN11S12560C4_nt2v1Ev
  virtual void  v2(); // _ZN11S12560C4_nt2v2Ev
  S12560C4_nt(); // tgen
};
//SIG(-1 S12560C4_nt) C1{ BC2{ vd v3 v4 v5 FL Fp Fi} vd v1 v2 Fi Fc}


 S12560C4_nt ::~S12560C4_nt(){ note_dtor("S12560C4_nt", this);}
void  S12560C4_nt ::v1(){vfunc_called(this, "_ZN11S12560C4_nt2v1Ev");}
void  S12560C4_nt ::v2(){vfunc_called(this, "_ZN11S12560C4_nt2v2Ev");}
S12560C4_nt ::S12560C4_nt(){ note_ctor("S12560C4_nt", this);} // tgen

//skip512 S12560C4_nt

#else // __cplusplus

extern void _ZN11S12560C4_ntC1Ev();
extern void _ZN11S12560C4_ntD1Ev();
Name_Map name_map_S12560C4_nt[] = {
  NSPAIR(_ZN11S12560C4_ntC1Ev),
  NSPAIR(_ZN11S12560C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S12560C5_nt;
extern VTBL_ENTRY _ZTI11S12560C5_nt[];
extern  VTBL_ENTRY _ZTV11S12560C5_nt[];
static Base_Class bases_S12560C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S12560C5_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 _ZTI11S12560C4_nt[];
extern void _ZN11S12560C4_ntD1Ev();
extern void _ZN11S12560C4_ntD0Ev();
extern void _ZN11S12560C5_nt2v3Ev();
extern void _ZN11S12560C5_nt2v4Ev();
extern void _ZN11S12560C5_nt2v5Ev();
extern void _ZN11S12560C4_nt2v1Ev();
extern void _ZN11S12560C4_nt2v2Ev();
static  VTBL_ENTRY vtc_S12560C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S12560C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S12560C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S12560C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S12560C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S12560C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S12560C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S12560C4_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S12560C4_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI11S12560C4_nt[];
VTBL_ENTRY *P__ZTI11S12560C4_nt = _ZTI11S12560C4_nt; 
extern  VTBL_ENTRY _ZTV11S12560C4_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C8_nt  {
  char s12560c8f0[20];
};
//SIG(-1 S12560C8_nt) C1{ Fc[20]}



//skip512 S12560C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C7_nt  {
  ::S12560C8_nt s12560c7f0;
  char s12560c7f1[16];
};
//SIG(-1 S12560C7_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S12560C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C6_nt  {
  char s12560c6f0[65];
  ::S12560C7_nt s12560c6f1;
  int s12560c6f2[2];
  __tsi64 s12560c6f3;
  int s12560c6f4;
};
//SIG(-1 S12560C6_nt) C1{ Fc[65] FC2{ FC3{ Fc[20]} Fc[16]} Fi[2] FL Fi}



//skip512 S12560C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C10_nt  {
  void *s12560c10f0[2];
  int s12560c10f1[2];
  __tsi64 s12560c10f2;
  char s12560c10f3[193];
};
//SIG(-1 S12560C10_nt) C1{ Fp[2] Fi[2] FL Fc[193]}



//skip512 S12560C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C11_nt  {
  int s12560c11f0;
  char s12560c11f1[815];
  int s12560c11f2[5];
};
//SIG(-1 S12560C11_nt) C1{ Fi Fc[815] Fi[5]}



//skip512 S12560C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C14_nt  {
  void *s12560c14f0;
  int s12560c14f1;
  ::S19863C10 s12560c14f2;
  void  mf12560c14(); // _ZN12S12560C14_nt10mf12560c14Ev
};
//SIG(-1 S12560C14_nt) C1{ m Fp Fi FC2{ m}}


void  S12560C14_nt ::mf12560c14(){}

//skip512 S12560C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C13_nt  {
  char s12560c13f0[33];
  int s12560c13f1;
  char s12560c13f2;
  ::S12560C14_nt s12560c13f3;
  int s12560c13f4;
  char s12560c13f5;
};
//SIG(1 S12560C13_nt) C1{ Fc[33] Fi Fc FC2{ m Fp Fi FC3{ m}} Fi Fc}



//skip512 S12560C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C12_nt  {
  int s12560c12f0;
  ::S12560C13_nt s12560c12f1[5];
};
//SIG(-1 S12560C12_nt) C1{ Fi FC2{ Fc[33] Fi Fc FC3{ m Fp Fi FC4{ m}} Fi Fc}[5]}



//skip512 S12560C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C16_nt  {
  void *s12560c16f0[2];
  void  mf12560c16(); // _ZN12S12560C16_nt10mf12560c16Ev
};
//SIG(-1 S12560C16_nt) C1{ m Fp[2]}


void  S12560C16_nt ::mf12560c16(){}

//skip512 S12560C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C9  {
  ::S12560C10_nt s12560c9f0;
  char s12560c9f1;
  ::S12560C11_nt s12560c9f2;
  ::S12560C12_nt s12560c9f3;
  ::S12560C16_nt s12560c9f4;
  void  mf12560c9(); // _ZN8S12560C99mf12560c9Ev
};
//SIG(-1 S12560C9) C1{ m FC2{ Fp[2] Fi[2] FL Fc[193]} Fc FC3{ Fi Fc[815] Fi[5]} FC4{ Fi FC5{ Fc[33] Fi Fc FC6{ m Fp Fi FC7{ m}} Fi Fc}[5]} FC8{ m Fp[2]}}


void  S12560C9 ::mf12560c9(){}

static void Test_S12560C9()
{
  {
    init_simple_test("S12560C9");
    S12560C9 lv;
    check2(sizeof(lv), ABISELECT(1464,1396), "sizeof(S12560C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12560C9)");
    check_field_offset(lv, s12560c9f0, 0, "S12560C9.s12560c9f0");
    check_field_offset(lv, s12560c9f1, ABISELECT(232,220), "S12560C9.s12560c9f1");
    check_field_offset(lv, s12560c9f2, ABISELECT(236,224), "S12560C9.s12560c9f2");
    check_field_offset(lv, s12560c9f3, ABISELECT(1080,1064), "S12560C9.s12560c9f3");
    check_field_offset(lv, s12560c9f4, ABISELECT(1448,1388), "S12560C9.s12560c9f4");
  }
}
static Arrange_To_Call_Me vS12560C9(Test_S12560C9, "S12560C9", ABISELECT(1464,1396));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12560C1  {
  int s12560c1f0;
  ::S12560C2_nt s12560c1f1;
  int s12560c1f2;
  ::S12560C4_nt s12560c1f3;
  ::S12560C6_nt s12560c1f4;
  ::S12560C9 s12560c1f5;
};
//SIG(1 S12560C1) C1{ Fi FC2{ m FC3{ m FL[2]}} Fi FC4{ BC5{ vd v3 v4 v5 FL Fp Fi} vd v1 v2 Fi Fc} FC6{ Fc[65] FC7{ FC8{ Fc[20]} Fc[16]} Fi[2] FL Fi} FC9{ m FC10{ Fp[2] Fi[2] FL Fc[193]} Fc FC11{ Fi Fc[815] Fi[5]} FC12{ Fi FC13{ Fc[33] Fi Fc FC14{ m Fp Fi FC15{ m}} Fi Fc}[5]} FC16{ m Fp[2]}}}



static void Test_S12560C1()
{
  {
    init_simple_test("S12560C1");
    S12560C1 lv;
    check2(sizeof(lv), ABISELECT(1664,1572), "sizeof(S12560C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12560C1)");
    check_field_offset(lv, s12560c1f0, 0, "S12560C1.s12560c1f0");
    check_field_offset(lv, s12560c1f1, ABISELECT(8,4), "S12560C1.s12560c1f1");
    check_field_offset(lv, s12560c1f2, ABISELECT(24,20), "S12560C1.s12560c1f2");
    check_field_offset(lv, s12560c1f3, ABISELECT(32,24), "S12560C1.s12560c1f3");
    check_field_offset(lv, s12560c1f4, ABISELECT(72,52), "S12560C1.s12560c1f4");
    check_field_offset(lv, s12560c1f5, ABISELECT(200,176), "S12560C1.s12560c1f5");
  }
}
static Arrange_To_Call_Me vS12560C1(Test_S12560C1, "S12560C1", ABISELECT(1664,1572));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14865C3_nt  {
  int s14865c3f0;
  void *s14865c3f1;
};
//SIG(1 S14865C3_nt) C1{ Fi Fp}



//skip512 S14865C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14865C5  {
  int s14865c5f0;
  void *s14865c5f1;
};
//SIG(1 S14865C5) C1{ Fi Fp}



static void Test_S14865C5()
{
  {
    init_simple_test("S14865C5");
    S14865C5 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S14865C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14865C5)");
    check_field_offset(lv, s14865c5f0, 0, "S14865C5.s14865c5f0");
    check_field_offset(lv, s14865c5f1, ABISELECT(8,4), "S14865C5.s14865c5f1");
  }
}
static Arrange_To_Call_Me vS14865C5(Test_S14865C5, "S14865C5", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S14865C2  {
  char s14865c2f0;
  char s14865c2f1;
  short s14865c2f2;
  short s14865c2f3;
  int s14865c2f4;
  int s14865c2f5;
  __tsi64 s14865c2f6;
  __tsi64 s14865c2f7;
  ::S14865C3_nt s14865c2f8;
  ::S14865C3_nt s14865c2f9;
  ::S14865C5 s14865c2f10;
  ::S14865C5 s14865c2f11;
  void *s14865c2f12;
  char s14865c2f13[16];
  int s14865c2f14[4];
};
//SIG(1 S14865C2) U1{ Fc Fc Fs Fs Fi Fi FL FL FC2{ Fi Fp} FC2 FC3{ Fi Fp} FC3 Fp Fc[16] Fi[4]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S14865C9_nt  {
  char s14865c9f0;
  char s14865c9f1;
  char s14865c9f2;
};
//SIG(1 S14865C9_nt) C1{ Fc[3]}



//skip512 S14865C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14865C10_nt  {
  short s14865c10f0;
  short s14865c10f1;
  short s14865c10f2;
};
//SIG(1 S14865C10_nt) C1{ Fs[3]}



//skip512 S14865C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14865C12  {
  void *s14865c12f0;
  void *s14865c12f1;
  void *s14865c12f2;
};
//SIG(1 S14865C12) C1{ Fp[3]}



static void Test_S14865C12()
{
  {
    init_simple_test("S14865C12");
    S14865C12 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S14865C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14865C12)");
    check_field_offset(lv, s14865c12f0, 0, "S14865C12.s14865c12f0");
    check_field_offset(lv, s14865c12f1, ABISELECT(8,4), "S14865C12.s14865c12f1");
    check_field_offset(lv, s14865c12f2, ABISELECT(16,8), "S14865C12.s14865c12f2");
  }
}
static Arrange_To_Call_Me vS14865C12(Test_S14865C12, "S14865C12", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S14865C8  {
  ::S14865C9_nt s14865c8f0;
  ::S14865C10_nt s14865c8f1;
  ::S1766C8_nt s14865c8f2;
  ::S14865C12 s14865c8f3;
};
//SIG(1 S14865C8) U1{ FC2{ Fc Fc Fc} FC3{ Fs Fs Fs} FC4{ Fi Fi Fi} FC5{ Fp Fp Fp}}

#endif // __cplusplus
#ifdef __cplusplus

union  S14865C14  {
  void *s14865c14f0;
  void *s14865c14f1;
  void *s14865c14f2;
  void *s14865c14f3;
  void *s14865c14f4;
  void *s14865c14f5;
  void *s14865c14f6;
  void *s14865c14f7;
  void *s14865c14f8;
  void *s14865c14f9;
  void *s14865c14f10;
  void *s14865c14f11;
  void *s14865c14f12;
};
//SIG(1 S14865C14) U1{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S14865C13  {
  short s14865c13f0;
  short s14865c13f1;
  ::S14865C14 s14865c13f2;
};
//SIG(1 S14865C13) C1{ Fs[2] FU2{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp}}



static void Test_S14865C13()
{
  {
    init_simple_test("S14865C13");
    S14865C13 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S14865C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14865C13)");
    check_field_offset(lv, s14865c13f0, 0, "S14865C13.s14865c13f0");
    check_field_offset(lv, s14865c13f1, 2, "S14865C13.s14865c13f1");
    check_field_offset(lv, s14865c13f2, ABISELECT(8,4), "S14865C13.s14865c13f2");
  }
}
static Arrange_To_Call_Me vS14865C13(Test_S14865C13, "S14865C13", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S14865C7  {
  ::S14865C8 s14865c7f0;
  ::S14865C13 s14865c7f1;
  void *s14865c7f2;
  void *s14865c7f3;
  int s14865c7f4;
};
//SIG(1 S14865C7) U1{ FU2{ FC3{ Fc Fc Fc} FC4{ Fs Fs Fs} FC5{ Fi Fi Fi} FC6{ Fp Fp Fp}} FC7{ Fs Fs FU8{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp}} Fp Fp Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S14865C1  {
  short s14865c1f0[2];
  char s14865c1f1[4];
  ::S14865C2 s14865c1f2;
  int s14865c1f3;
  char s14865c1f4;
  char s14865c1f5[3];
  ::S14865C7 s14865c1f6;
  int s14865c1f7[3];
};
//SIG(1 S14865C1) C1{ Fs[2] Fc[4] FU2{ Fc Fc Fs Fs Fi Fi FL FL FC3{ Fi Fp} FC3 FC4{ Fi Fp} FC4 Fp Fc[16] Fi[4]} Fi Fc Fc[3] FU5{ FU6{ FC7{ Fc Fc Fc} FC8{ Fs Fs Fs} FC9{ Fi Fi Fi} FC10{ Fp Fp Fp}} FC11{ Fs Fs FU12{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp}} Fp Fp Fi} Fi[3]}



static void Test_S14865C1()
{
  {
    init_simple_test("S14865C1");
    S14865C1 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S14865C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14865C1)");
    check_field_offset(lv, s14865c1f0, 0, "S14865C1.s14865c1f0");
    check_field_offset(lv, s14865c1f1, 4, "S14865C1.s14865c1f1");
    check_field_offset(lv, s14865c1f2, 8, "S14865C1.s14865c1f2");
    check_field_offset(lv, s14865c1f3, 24, "S14865C1.s14865c1f3");
    check_field_offset(lv, s14865c1f4, 28, "S14865C1.s14865c1f4");
    check_field_offset(lv, s14865c1f5, 29, "S14865C1.s14865c1f5");
    check_field_offset(lv, s14865c1f6, 32, "S14865C1.s14865c1f6");
    check_field_offset(lv, s14865c1f7, ABISELECT(56,44), "S14865C1.s14865c1f7");
  }
}
static Arrange_To_Call_Me vS14865C1(Test_S14865C1, "S14865C1", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14864C5  {
  int s14864c5f0;
  void *s14864c5f1;
};
//SIG(1 S14864C5) C1{ Fi Fp}



static void Test_S14864C5()
{
  {
    init_simple_test("S14864C5");
    S14864C5 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S14864C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14864C5)");
    check_field_offset(lv, s14864c5f0, 0, "S14864C5.s14864c5f0");
    check_field_offset(lv, s14864c5f1, ABISELECT(8,4), "S14864C5.s14864c5f1");
  }
}
static Arrange_To_Call_Me vS14864C5(Test_S14864C5, "S14864C5", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S14864C2  {
  char s14864c2f0;
  char s14864c2f1;
  short s14864c2f2;
  short s14864c2f3;
  int s14864c2f4;
  int s14864c2f5;
  long s14864c2f6;
  long s14864c2f7;
  ::S14865C5 s14864c2f8;
  ::S14865C3_nt s14864c2f9;
  ::S14864C5 s14864c2f10;
  ::S14864C5 s14864c2f11;
  void *s14864c2f12;
  char s14864c2f13[16];
  int s14864c2f14[4];
};
//SIG(1 S14864C2) U1{ Fc Fc Fs Fs Fi Fi Fl Fl FC2{ Fi Fp} FC3{ Fi Fp} FC4{ Fi Fp} FC4 Fp Fc[16] Fi[4]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S14864C1  {
  short s14864c1f0[2];
  char s14864c1f1[4];
  ::S14864C2 s14864c1f2;
  int s14864c1f3;
  char s14864c1f4;
  char s14864c1f5[3];
  ::S14865C7 s14864c1f6;
  int s14864c1f7[3];
};
//SIG(1 S14864C1) C1{ Fs[2] Fc[4] FU2{ Fc Fc Fs Fs Fi Fi Fl Fl FC3{ Fi Fp} FC4{ Fi Fp} FC5{ Fi Fp} FC5 Fp Fc[16] Fi[4]} Fi Fc Fc[3] FU6{ FU7{ FC8{ Fc Fc Fc} FC9{ Fs Fs Fs} FC10{ Fi Fi Fi} FC11{ Fp Fp Fp}} FC12{ Fs Fs FU13{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp}} Fp Fp Fi} Fi[3]}



static void Test_S14864C1()
{
  {
    init_simple_test("S14864C1");
    S14864C1 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S14864C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14864C1)");
    check_field_offset(lv, s14864c1f0, 0, "S14864C1.s14864c1f0");
    check_field_offset(lv, s14864c1f1, 4, "S14864C1.s14864c1f1");
    check_field_offset(lv, s14864c1f2, 8, "S14864C1.s14864c1f2");
    check_field_offset(lv, s14864c1f3, 24, "S14864C1.s14864c1f3");
    check_field_offset(lv, s14864c1f4, 28, "S14864C1.s14864c1f4");
    check_field_offset(lv, s14864c1f5, 29, "S14864C1.s14864c1f5");
    check_field_offset(lv, s14864c1f6, 32, "S14864C1.s14864c1f6");
    check_field_offset(lv, s14864c1f7, ABISELECT(56,44), "S14864C1.s14864c1f7");
  }
}
static Arrange_To_Call_Me vS14864C1(Test_S14864C1, "S14864C1", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20499C6  : S19863C8 {
};
//SIG(-1 S20499C6) C1{ BC2{ m}}



static void Test_S20499C6()
{
  extern Class_Descriptor cd_S20499C6;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S20499C6, buf);
    S20499C6 &lv = *(new (buf) S20499C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S20499C6)");
    check2(__alignof__(lv), 1, "__alignof__(S20499C6)");
    check_base_class_offset(lv, (S19863C8*), 0, "S20499C6");
    test_class_info(&lv, &cd_S20499C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20499C6(Test_S20499C6, "S20499C6", 1);

#else // __cplusplus

extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
static Base_Class bases_S20499C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20499C6[];
Class_Descriptor cd_S20499C6 = {  "S20499C6", // class name
  bases_S20499C6, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S20499C6),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  S20499C3  : S19863C10 , S19863C8 , virtual S20499C6 , virtual S19863C9_nt {
  ~S20499C3(); // tgen
  S20499C3(); // tgen
};
//SIG(-1 S20499C3) C1{ BC2{ m} BC3{ m} VBC4{ BC3} VBC5{ m Fi}}


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

static void Test_S20499C3()
{
  extern Class_Descriptor cd_S20499C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20499C3, buf);
    S20499C3 *dp, &lv = *(dp=new (buf) S20499C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20499C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20499C3)");
    check_base_class_offset(lv, (S19863C10*), 0, "S20499C3");
    /*is_ambiguous_... S20499C3::S19863C8 */ AMB_check_base_class_offset(lv, (S19863C8*), 0, "S20499C3");
    check_base_class_offset(lv, (S19863C8*)(S20499C6*), ABISELECT(8,4), "S20499C3");
    check_base_class_offset(lv, (S20499C6*), ABISELECT(8,4), "S20499C3");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(8,4), "S20499C3");
    test_class_info(&lv, &cd_S20499C3);
    dp->~S20499C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20499C3(Test_S20499C3, "S20499C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20499C3C1Ev();
extern void _ZN8S20499C3D1Ev();
Name_Map name_map_S20499C3[] = {
  NSPAIR(_ZN8S20499C3C1Ev),
  NSPAIR(_ZN8S20499C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S20499C6;
extern VTBL_ENTRY _ZTI8S20499C6[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S20499C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C8,    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_S20499C6,    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},
  {&cd_S19863C9_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20499C3[];
static  VTBL_ENTRY vtc_S20499C3[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20499C3[0]),
};
extern VTBL_ENTRY _ZTV8S20499C3[];
static  VTT_ENTRY vtt_S20499C3[] = {
  {&(_ZTV8S20499C3[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20499C3[];
extern  VTBL_ENTRY _ZTV8S20499C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20499C3[];
Class_Descriptor cd_S20499C3 = {  "S20499C3", // class name
  bases_S20499C3, 5,
  &(vtc_S20499C3[0]), // expected_vtbl_contents
  &(vtt_S20499C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20499C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20499C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20499C3),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  S20499C12  : virtual S19863C6 , S19863C10 {
  virtual  ~S20499C12(); // _ZN9S20499C12D2Ev
  S20499C12(); // tgen
};
//SIG(-1 S20499C12) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} BC6{ m} vd}


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

static void Test_S20499C12()
{
  extern Class_Descriptor cd_S20499C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,35)];
    init_test(&cd_S20499C12, buf);
    S20499C12 *dp, &lv = *(dp=new (buf) S20499C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,136), "sizeof(S20499C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20499C12)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,4), "S20499C12");
    check_base_class_offset(lv, (S19863C10*), 0, "S20499C12");
    test_class_info(&lv, &cd_S20499C12);
    dp->~S20499C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20499C12(Test_S20499C12, "S20499C12", ABISELECT(224,136));

#else // __cplusplus

extern void _ZN9S20499C12C1Ev();
extern void _ZN9S20499C12D2Ev();
Name_Map name_map_S20499C12[] = {
  NSPAIR(_ZN9S20499C12C1Ev),
  NSPAIR(_ZN9S20499C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S20499C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,4), //bcp->offset
    5, //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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20499C12[];
extern void _ZN9S20499C12D1Ev();
extern void _ZN9S20499C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20499C12D1Ev,_ZTv0_n12_N9S20499C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S20499C12D1Ev,_ZThn4_N9S20499C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20499C12D0Ev,_ZTv0_n12_N9S20499C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S20499C12D0Ev,_ZThn4_N9S20499C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20499C12[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C12[0]),
  (VTBL_ENTRY)&_ZN9S20499C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C12D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20499C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C12D1Ev,_ZTv0_n12_N9S20499C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C12D0Ev,_ZTv0_n12_N9S20499C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S20499C12[];
static  VTT_ENTRY vtt_S20499C12[] = {
  {&(_ZTV9S20499C12[3]),  3,10},
  {&(_ZTV9S20499C12[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S20499C12[];
extern  VTBL_ENTRY _ZTV9S20499C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C12[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C12D0Ev,_ZTv0_n12_N9S20499C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20499C12D0Ev,_ZThn4_N9S20499C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C12D1Ev,_ZTv0_n12_N9S20499C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20499C12D1Ev,_ZThn4_N9S20499C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20499C12 = {  "S20499C12", // class name
  bases_S20499C12, 2,
  &(vtc_S20499C12[0]), // expected_vtbl_contents
  &(vtt_S20499C12[0]), // expected_vtt_contents
  ABISELECT(224,136), // object size
  NSPAIRA(_ZTI9S20499C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20499C12),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20499C12),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20499C10  : virtual S19863C12_nt , virtual S19863C9_nt , virtual S19863C6 , virtual S20499C12 , S20499C3 {
  int s20499c10f0;
  virtual  ~S20499C10(); // _ZN9S20499C10D2Ev
  S20499C10(); // tgen
};
//SIG(-1 S20499C10) C1{ VBC2{ m Fs} VBC3{ m Fi} VBC4{ vd m FC5{ VBC6{ m} VBC3 vd FD[10]}} VBC7{ VBC4 BC8{ m} vd} BC9{ BC8 BC6 VBC10{ BC6} VBC3} vd Fi}


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

static void Test_S20499C10()
{
  extern Class_Descriptor cd_S20499C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,40)];
    init_test(&cd_S20499C10, buf);
    S20499C10 *dp, &lv = *(dp=new (buf) S20499C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,156), "sizeof(S20499C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20499C10)");
    check_base_class_offset(lv, (S19863C12_nt*), ABISELECT(12,8), "S20499C10");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(16,12), "S20499C10");
    check_base_class_offset(lv, (S19863C9_nt*)(S20499C3*), ABISELECT(16,12), "S20499C10");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(32,16), "S20499C10");
    check_base_class_offset(lv, (S19863C6*)(S20499C12*), ABISELECT(32,16), "S20499C10");
    check_base_class_offset(lv, (S19863C10*)(S20499C12*), ABISELECT(240,148), "S20499C10");
    check_base_class_offset(lv, (S20499C12*), ABISELECT(240,148), "S20499C10");
    check_base_class_offset(lv, (S19863C10*)(S20499C3*), 0, "S20499C10");
    /*is_ambiguous_... S20499C3::S19863C8 */ AMB_check_base_class_offset(lv, (S19863C8*)(S20499C3*), 0, "S20499C10");
    check_base_class_offset(lv, (S19863C8*)(S20499C6*), ABISELECT(248,152), "S20499C10");
    check_base_class_offset(lv, (S20499C6*)(S20499C3*), ABISELECT(248,152), "S20499C10");
    check_base_class_offset(lv, (S20499C3*), 0, "S20499C10");
    check_field_offset(lv, s20499c10f0, ABISELECT(8,4), "S20499C10.s20499c10f0");
    test_class_info(&lv, &cd_S20499C10);
    dp->~S20499C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20499C10(Test_S20499C10, "S20499C10", ABISELECT(256,156));

#else // __cplusplus

extern void _ZN9S20499C10C1Ev();
extern void _ZN9S20499C10D2Ev();
Name_Map name_map_S20499C10[] = {
  NSPAIR(_ZN9S20499C10C1Ev),
  NSPAIR(_ZN9S20499C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S20499C12;
extern VTBL_ENTRY _ZTI9S20499C12[];
extern  VTBL_ENTRY _ZTV9S20499C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C12[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S20499C6;
extern VTBL_ENTRY _ZTI8S20499C6[];
extern Class_Descriptor cd_S20499C3;
extern VTBL_ENTRY _ZTI8S20499C3[];
extern  VTBL_ENTRY _ZTV8S20499C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20499C3[];
static Base_Class bases_S20499C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C12_nt,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C9_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C6,    ABISELECT(32,16), //bcp->offset
    9, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C10,    ABISELECT(240,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20499C12,    ABISELECT(240,148), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    ABISELECT(248,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
    8, //immediately_derived
  0, 0},
  {&cd_S20499C6,    ABISELECT(248,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
    9, //immediately_derived
  0, 1},
  {&cd_S20499C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20499C10[];
extern void _ZN9S20499C10D1Ev();
extern void _ZN9S20499C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20499C10D1Ev,_ZTv0_n12_N9S20499C10D1Ev)();
extern void ABISELECT(_ZThn32_N9S20499C10D1Ev,_ZThn16_N9S20499C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20499C10D0Ev,_ZTv0_n12_N9S20499C10D0Ev)();
extern void ABISELECT(_ZThn32_N9S20499C10D0Ev,_ZThn16_N9S20499C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20499C10D1Ev,_ZTv0_n16_N9S20499C10D1Ev)();
extern void ABISELECT(_ZThn240_N9S20499C10D1Ev,_ZThn148_N9S20499C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20499C10D0Ev,_ZTv0_n16_N9S20499C10D0Ev)();
extern void ABISELECT(_ZThn240_N9S20499C10D0Ev,_ZThn148_N9S20499C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20499C10[] = {
  ABISELECT(240,148),
  ABISELECT(32,16),
  ABISELECT(12,8),
  ABISELECT(16,12),
  ABISELECT(248,152),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C10[0]),
  (VTBL_ENTRY)&_ZN9S20499C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C10D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20499C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C10D1Ev,_ZTv0_n12_N9S20499C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C10D0Ev,_ZTv0_n12_N9S20499C10D0Ev),
  ABISELECT(-240,-148),
  ABISELECT(-208,-132),
  ABISELECT(-240,-148),
  (VTBL_ENTRY)&(_ZTI9S20499C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20499C10D1Ev,_ZTv0_n16_N9S20499C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20499C10D0Ev,_ZTv0_n16_N9S20499C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S20499C10[];
static  VTBL_ENTRY _tg__ZTV8S20499C3__9S20499C10[] = {
  ABISELECT(16,12),
  ABISELECT(248,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S20499C3[0]),
};
extern void _ZN9S20499C12D1Ev();
extern void _ZN9S20499C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20499C12__9S20499C10[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C12[0]),
  (VTBL_ENTRY)&_ZN9S20499C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20499C12D1Ev,_ZTv0_n12_N9S20499C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20499C12D0Ev,_ZTv0_n12_N9S20499C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S20499C12__9S20499C10[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S20499C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C12D1Ev,_ZTv0_n12_N9S20499C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C12D0Ev,_ZTv0_n12_N9S20499C12D0Ev),
};
static  VTT_ENTRY vtt_S20499C10[] = {
  {&(_ZTV9S20499C10[7]),  7,20},
  {&(_tg__ZTV8S20499C3__9S20499C10[4]),  4,4},
  {&(_ZTV9S20499C10[12]),  12,20},
  {&(_ZTV9S20499C10[18]),  18,20},
  {&(_tg__ZTV9S20499C12__9S20499C10[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S20499C12__9S20499C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20499C10[];
extern  VTBL_ENTRY _ZTV9S20499C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C10[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20499C10D0Ev,_ZTv0_n16_N9S20499C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20499C10D0Ev,_ZThn148_N9S20499C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20499C10D1Ev,_ZTv0_n16_N9S20499C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20499C10D1Ev,_ZThn148_N9S20499C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C10D0Ev,_ZTv0_n12_N9S20499C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20499C10D0Ev,_ZThn16_N9S20499C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C10D1Ev,_ZTv0_n12_N9S20499C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20499C10D1Ev,_ZThn16_N9S20499C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20499C10 = {  "S20499C10", // class name
  bases_S20499C10, 10,
  &(vtc_S20499C10[0]), // expected_vtbl_contents
  &(vtt_S20499C10[0]), // expected_vtt_contents
  ABISELECT(256,156), // object size
  NSPAIRA(_ZTI9S20499C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20499C10),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20499C10),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20499C14  : virtual S19863C6 , virtual S19863C10 , virtual S19863C8 {
  void *s20499c14f0;
  ~S20499C14(); // tgen
  S20499C14(); // tgen
};
//SIG(-1 S20499C14) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} VBC6{ m} VBC4 Fp}


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

static void Test_S20499C14()
{
  extern Class_Descriptor cd_S20499C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,36)];
    init_test(&cd_S20499C14, buf);
    S20499C14 *dp, &lv = *(dp=new (buf) S20499C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S20499C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20499C14)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,8), "S20499C14");
    check_base_class_offset(lv, (S19863C10*), 0, "S20499C14");
    check_base_class_offset(lv, (S19863C8*), 0, "S20499C14");
    check_field_offset(lv, s20499c14f0, ABISELECT(8,4), "S20499C14.s20499c14f0");
    test_class_info(&lv, &cd_S20499C14);
    dp->~S20499C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20499C14(Test_S20499C14, "S20499C14", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN9S20499C14C1Ev();
extern void _ZN9S20499C14D1Ev();
Name_Map name_map_S20499C14[] = {
  NSPAIR(_ZN9S20499C14C1Ev),
  NSPAIR(_ZN9S20499C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
static Base_Class bases_S20499C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,8), //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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20499C14[];
extern void _ZN9S20499C14D1Ev();
extern void _ZN9S20499C14D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S20499C14D1Ev,_ZThn8_N9S20499C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S20499C14D0Ev,_ZThn8_N9S20499C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20499C14[] = {
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C14[0]),
  (VTBL_ENTRY)&_ZN9S20499C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C14D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20499C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S20499C14[];
static  VTT_ENTRY vtt_S20499C14[] = {
  {&(_ZTV9S20499C14[5]),  5,12},
  {&(_ZTV9S20499C14[10]),  10,12},
};
extern VTBL_ENTRY _ZTI9S20499C14[];
extern  VTBL_ENTRY _ZTV9S20499C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C14[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20499C14D0Ev,_ZThn8_N9S20499C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20499C14D1Ev,_ZThn8_N9S20499C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20499C14 = {  "S20499C14", // class name
  bases_S20499C14, 3,
  &(vtc_S20499C14[0]), // expected_vtbl_contents
  &(vtt_S20499C14[0]), // expected_vtt_contents
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI9S20499C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20499C14),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20499C14),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20499C2  : virtual S20499C3 , S19863C6 , S20499C10 , virtual S19863C2_nt , virtual S20499C14 {
  ~S20499C2(); // tgen
  S20499C2(); // tgen
};
//SIG(-1 S20499C2) C1{ VBC2{ BC3{ m} BC4{ m} VBC5{ BC4} VBC6{ m Fi}} BC7{ vd m FC8{ VBC4 VBC6 vd FD[10]}} BC9{ VBC10{ m Fs} VBC6 VBC7 VBC11{ VBC7 BC3 vd} BC2 vd Fi} VBC12{ m} VBC13{ VBC7 VBC3 VBC4 Fp}}


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

static void Test_S20499C2()
{
  extern Class_Descriptor cd_S20499C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,76)];
    init_test(&cd_S20499C2, buf);
    S20499C2 *dp, &lv = *(dp=new (buf) S20499C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,300), "sizeof(S20499C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20499C2)");
    /*is_ambiguous_... S20499C2::S20499C3 */ AMB_check_base_class_offset(lv, (S19863C10*)(S20499C3*), ABISELECT(224,140), "S20499C2");
    /*is_ambiguous_... S20499C2::S20499C3 */ AMB_check_base_class_offset(lv, (S19863C8*)(S20499C3*), ABISELECT(224,140), "S20499C2");
    check_base_class_offset(lv, (S19863C8*)(S20499C6*), 0, "S20499C2");
    /*is_ambiguous_... S20499C2::S20499C3 */ AMB_check_base_class_offset(lv, (S20499C6*)(S20499C3*), 0, "S20499C2");
    check_base_class_offset(lv, (S20499C6*)(S20499C3*)(S20499C10*), 0, "S20499C2");
    /*is_ambiguous_... S20499C2::S20499C3 */ AMB_check_base_class_offset(lv, (S19863C9_nt*)(S20499C3*), ABISELECT(232,144), "S20499C2");
    check_base_class_offset(lv, (S19863C9_nt*)(S20499C10*), ABISELECT(232,144), "S20499C2");
    check_base_class_offset(lv, (S19863C9_nt*)(S20499C3*)(S20499C10*), ABISELECT(232,144), "S20499C2");
    /*is_ambiguous_... S20499C2::S20499C3 */ AMB_check_base_class_offset(lv, (S20499C3*), ABISELECT(224,140), "S20499C2");
    /*is_ambiguous_... S20499C2::S19863C6 */ AMB_check_base_class_offset(lv, (S19863C6*), 0, "S20499C2");
    check_base_class_offset(lv, (S19863C12_nt*)(S20499C10*), ABISELECT(236,148), "S20499C2");
    check_base_class_offset(lv, (S19863C6*)(S20499C10*), ABISELECT(240,152), "S20499C2");
    check_base_class_offset(lv, (S19863C6*)(S20499C12*), ABISELECT(240,152), "S20499C2");
    check_base_class_offset(lv, (S19863C6*)(S20499C14*), ABISELECT(240,152), "S20499C2");
    check_base_class_offset(lv, (S19863C10*)(S20499C12*), ABISELECT(448,284), "S20499C2");
    check_base_class_offset(lv, (S20499C12*)(S20499C10*), ABISELECT(448,284), "S20499C2");
    check_base_class_offset(lv, (S19863C10*)(S20499C3*)(S20499C10*), ABISELECT(208,132), "S20499C2");
    /*is_ambiguous_... S20499C3::S19863C8 */ AMB_check_base_class_offset(lv, (S19863C8*)(S20499C3*)(S20499C10*), ABISELECT(208,132), "S20499C2");
    check_base_class_offset(lv, (S20499C3*)(S20499C10*), ABISELECT(208,132), "S20499C2");
    check_base_class_offset(lv, (S20499C10*), ABISELECT(208,132), "S20499C2");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S20499C2");
    check_base_class_offset(lv, (S19863C10*)(S20499C14*), 0, "S20499C2");
    check_base_class_offset(lv, (S19863C8*)(S20499C14*), ABISELECT(472,296), "S20499C2");
    check_base_class_offset(lv, (S20499C14*), ABISELECT(456,288), "S20499C2");
    test_class_info(&lv, &cd_S20499C2);
    dp->~S20499C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20499C2(Test_S20499C2, "S20499C2", ABISELECT(480,300));

#else // __cplusplus

extern void _ZN8S20499C2C1Ev();
extern void _ZN8S20499C2D1Ev();
Name_Map name_map_S20499C2[] = {
  NSPAIR(_ZN8S20499C2C1Ev),
  NSPAIR(_ZN8S20499C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S20499C6;
extern VTBL_ENTRY _ZTI8S20499C6[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S20499C3;
extern VTBL_ENTRY _ZTI8S20499C3[];
extern  VTBL_ENTRY _ZTV8S20499C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20499C3[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S20499C12;
extern VTBL_ENTRY _ZTI9S20499C12[];
extern  VTBL_ENTRY _ZTV9S20499C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C12[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S20499C3;
extern VTBL_ENTRY _ZTI8S20499C3[];
extern  VTBL_ENTRY _ZTV8S20499C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20499C3[];
extern Class_Descriptor cd_S20499C10;
extern VTBL_ENTRY _ZTI9S20499C10[];
extern  VTBL_ENTRY _ZTV9S20499C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C10[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S20499C14;
extern VTBL_ENTRY _ZTI9S20499C14[];
extern  VTBL_ENTRY _ZTV9S20499C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C14[];
static Base_Class bases_S20499C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19863C8,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20499C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C9_nt,    ABISELECT(232,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20499C3,    ABISELECT(224,140), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19863C12_nt,    ABISELECT(236,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19863C6,    ABISELECT(240,152), //bcp->offset
    27, //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19863C10,    ABISELECT(448,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20499C12,    ABISELECT(448,284), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19863C10,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19863C8,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20499C3,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20499C10,    ABISELECT(208,132), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C2_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, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19863C8,    ABISELECT(472,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
    18, //immediately_derived
  0, 1},
  {&cd_S20499C14,    ABISELECT(456,288), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20499C2[];
extern void _ZN8S20499C2D1Ev();
extern void _ZN8S20499C2D0Ev();
extern void ABISELECT(_ZThn208_N8S20499C2D1Ev,_ZThn132_N8S20499C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S20499C2D0Ev,_ZThn132_N8S20499C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20499C2D1Ev,_ZTv0_n12_N8S20499C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S20499C2D1Ev,_ZThn152_N8S20499C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20499C2D0Ev,_ZTv0_n12_N8S20499C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S20499C2D0Ev,_ZThn152_N8S20499C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20499C2D1Ev,_ZTv0_n16_N8S20499C2D1Ev)();
extern void ABISELECT(_ZThn448_N8S20499C2D1Ev,_ZThn284_N8S20499C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20499C2D0Ev,_ZTv0_n16_N8S20499C2D0Ev)();
extern void ABISELECT(_ZThn448_N8S20499C2D0Ev,_ZThn284_N8S20499C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20499C2D1Ev,_ZTv0_n24_N8S20499C2D1Ev)();
extern void ABISELECT(_ZThn456_N8S20499C2D1Ev,_ZThn288_N8S20499C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20499C2D0Ev,_ZTv0_n24_N8S20499C2D0Ev)();
extern void ABISELECT(_ZThn456_N8S20499C2D0Ev,_ZThn288_N8S20499C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20499C2[] = {
  ABISELECT(472,296),
  0,
  ABISELECT(456,288),
  0,
  ABISELECT(448,284),
  ABISELECT(240,152),
  ABISELECT(236,148),
  ABISELECT(232,144),
  0,
  ABISELECT(224,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20499C2[0]),
  (VTBL_ENTRY)&_ZN8S20499C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20499C2D0Ev,
  ABISELECT(240,152),
  ABISELECT(32,20),
  ABISELECT(28,16),
  ABISELECT(24,12),
  ABISELECT(-208,-132),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S20499C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S20499C2D1Ev,_ZThn132_N8S20499C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S20499C2D0Ev,_ZThn132_N8S20499C2D0Ev),
  ABISELECT(8,4),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S20499C2[0]),
  ABISELECT(-240,-152),
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI8S20499C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20499C2D1Ev,_ZTv0_n12_N8S20499C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20499C2D0Ev,_ZTv0_n12_N8S20499C2D0Ev),
  ABISELECT(-448,-284),
  ABISELECT(-208,-132),
  ABISELECT(-448,-284),
  (VTBL_ENTRY)&(_ZTI8S20499C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20499C2D1Ev,_ZTv0_n16_N8S20499C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20499C2D0Ev,_ZTv0_n16_N8S20499C2D0Ev),
  ABISELECT(-456,-288),
  ABISELECT(16,8),
  ABISELECT(-456,-288),
  ABISELECT(-216,-136),
  ABISELECT(-456,-288),
  (VTBL_ENTRY)&(_ZTI8S20499C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20499C2D1Ev,_ZTv0_n24_N8S20499C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20499C2D0Ev,_ZTv0_n24_N8S20499C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20499C2[];
extern void _ZN9S20499C10D1Ev();
extern void _ZN9S20499C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20499C10__8S20499C2[] = {
  ABISELECT(240,152),
  ABISELECT(32,20),
  ABISELECT(28,16),
  ABISELECT(24,12),
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C10[0]),
  (VTBL_ENTRY)&_ZN9S20499C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20499C39S20499C10__A1__8S20499C2[] = {
  ABISELECT(24,12),
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S20499C3[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20499C10D1Ev,_ZTv0_n12_N9S20499C10D1Ev)();
extern void ABISELECT(_ZThn32_N9S20499C10D1Ev,_ZThn20_N9S20499C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20499C10D0Ev,_ZTv0_n12_N9S20499C10D0Ev)();
extern void ABISELECT(_ZThn32_N9S20499C10D0Ev,_ZThn20_N9S20499C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S20499C10__8S20499C2[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S20499C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C10D1Ev,_ZTv0_n12_N9S20499C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C10D0Ev,_ZTv0_n12_N9S20499C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20499C10D1Ev,_ZTv0_n16_N9S20499C10D1Ev)();
extern void ABISELECT(_ZThn240_N9S20499C10D1Ev,_ZThn152_N9S20499C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20499C10D0Ev,_ZTv0_n16_N9S20499C10D0Ev)();
extern void ABISELECT(_ZThn240_N9S20499C10D0Ev,_ZThn152_N9S20499C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20499C12__9S20499C10__8S20499C2[] = {
  ABISELECT(-240,-152),
  ABISELECT(-208,-132),
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI9S20499C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20499C10D1Ev,_ZTv0_n16_N9S20499C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20499C10D0Ev,_ZTv0_n16_N9S20499C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20499C3__8S20499C2[] = {
  ABISELECT(8,4),
  ABISELECT(-224,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20499C3[0]),
};
extern void _ZN9S20499C12D1Ev();
extern void _ZN9S20499C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20499C12__8S20499C2[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C12[0]),
  (VTBL_ENTRY)&_ZN9S20499C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20499C12D1Ev,_ZTv0_n12_N9S20499C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20499C12D0Ev,_ZTv0_n12_N9S20499C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S20499C12__8S20499C2[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S20499C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C12D1Ev,_ZTv0_n12_N9S20499C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C12D0Ev,_ZTv0_n12_N9S20499C12D0Ev),
};
extern void _ZN9S20499C14D1Ev();
extern void _ZN9S20499C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20499C14__8S20499C2[] = {
  ABISELECT(16,8),
  ABISELECT(-456,-288),
  ABISELECT(-216,-136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C14[0]),
  (VTBL_ENTRY)&_ZN9S20499C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S20499C14__8S20499C2[] = {
  ABISELECT(216,136),
  ABISELECT(216,136),
  (VTBL_ENTRY)&(_ZTI9S20499C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev),
};
static  VTT_ENTRY vtt_S20499C2[] = {
  {&(_ZTV8S20499C2[12]),  12,46},
  {&(_tg__ZTV9S20499C10__8S20499C2[7]),  7,9},
  {&(_tg__ZTV8S20499C39S20499C10__A1__8S20499C2[4]),  4,4},
  {&(_tg__ZTV8S19863C6__9S20499C10__8S20499C2[3]),  3,5},
  {&(_tg__ZTV9S20499C12__9S20499C10__8S20499C2[4]),  4,6},
  {&(_ZTV8S20499C2[27]),  27,46},
  {&(_ZTV8S20499C2[21]),  21,46},
  {&(_ZTV8S20499C2[30]),  30,46},
  {&(_ZTV8S20499C2[36]),  36,46},
  {&(_ZTV8S20499C2[44]),  44,46},
  {&(_tg__ZTV8S20499C3__8S20499C2[4]),  4,4},
  {&(_tg__ZTV9S20499C12__8S20499C2[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S20499C12__8S20499C2[3]),  3,5},
  {&(_tg__ZTV9S20499C14__8S20499C2[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S20499C14__8S20499C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20499C2[];
extern  VTBL_ENTRY _ZTV8S20499C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20499C2[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20499C10D0Ev,_ZTv0_n16_N9S20499C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20499C10D0Ev,_ZThn152_N9S20499C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20499C10D1Ev,_ZTv0_n16_N9S20499C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20499C10D1Ev,_ZThn152_N9S20499C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C10D0Ev,_ZTv0_n12_N9S20499C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20499C10D0Ev,_ZThn20_N9S20499C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C10D1Ev,_ZTv0_n12_N9S20499C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20499C10D1Ev,_ZThn20_N9S20499C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20499C2D0Ev,_ZTv0_n24_N8S20499C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S20499C2D0Ev,_ZThn288_N8S20499C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20499C2D1Ev,_ZTv0_n24_N8S20499C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S20499C2D1Ev,_ZThn288_N8S20499C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20499C2D0Ev,_ZTv0_n16_N8S20499C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20499C2D0Ev,_ZThn284_N8S20499C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20499C2D1Ev,_ZTv0_n16_N8S20499C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20499C2D1Ev,_ZThn284_N8S20499C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20499C2D0Ev,_ZTv0_n12_N8S20499C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20499C2D0Ev,_ZThn152_N8S20499C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20499C2D1Ev,_ZTv0_n12_N8S20499C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20499C2D1Ev,_ZThn152_N8S20499C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20499C2 = {  "S20499C2", // class name
  bases_S20499C2, 19,
  &(vtc_S20499C2[0]), // expected_vtbl_contents
  &(vtt_S20499C2[0]), // expected_vtt_contents
  ABISELECT(480,300), // object size
  NSPAIRA(_ZTI8S20499C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20499C2),46, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20499C2),15, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20499C15  : S20499C14 , virtual S19863C20 {
  ::S19863C9_nt s20499c15f0;
  ~S20499C15(); // tgen
  S20499C15(); // tgen
};
//SIG(-1 S20499C15) C1{ BC2{ VBC3{ vd m FC4{ VBC5{ m} VBC6{ m Fi} vd FD[10]}} VBC7{ m} VBC5 Fp} VBC8{ m FC4[3] Fp} FC6}


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

static void Test_S20499C15()
{
  extern Class_Descriptor cd_S20499C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,134)];
    init_test(&cd_S20499C15, buf);
    S20499C15 *dp, &lv = *(dp=new (buf) S20499C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,532), "sizeof(S20499C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20499C15)");
    check_base_class_offset(lv, (S19863C6*)(S20499C14*), ABISELECT(32,12), "S20499C15");
    check_base_class_offset(lv, (S19863C10*)(S20499C14*), 0, "S20499C15");
    check_base_class_offset(lv, (S19863C8*)(S20499C14*), 0, "S20499C15");
    check_base_class_offset(lv, (S20499C14*), 0, "S20499C15");
    check_base_class_offset(lv, (S19863C20*), ABISELECT(240,144), "S20499C15");
    check_field_offset(lv, s20499c15f0, ABISELECT(16,8), "S20499C15.s20499c15f0");
    test_class_info(&lv, &cd_S20499C15);
    dp->~S20499C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20499C15(Test_S20499C15, "S20499C15", ABISELECT(832,532));

#else // __cplusplus

extern void _ZN9S20499C15C1Ev();
extern void _ZN9S20499C15D1Ev();
Name_Map name_map_S20499C15[] = {
  NSPAIR(_ZN9S20499C15C1Ev),
  NSPAIR(_ZN9S20499C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S20499C14;
extern VTBL_ENTRY _ZTI9S20499C14[];
extern  VTBL_ENTRY _ZTV9S20499C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C14[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
static Base_Class bases_S20499C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(32,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20499C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C20,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20499C15[];
extern void _ZN9S20499C15D1Ev();
extern void _ZN9S20499C15D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20499C15D1Ev,_ZTv0_n12_N9S20499C15D1Ev)();
extern void ABISELECT(_ZThn32_N9S20499C15D1Ev,_ZThn12_N9S20499C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20499C15D0Ev,_ZTv0_n12_N9S20499C15D0Ev)();
extern void ABISELECT(_ZThn32_N9S20499C15D0Ev,_ZThn12_N9S20499C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20499C15[] = {
  ABISELECT(240,144),
  0,
  0,
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C15[0]),
  (VTBL_ENTRY)&_ZN9S20499C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C15D0Ev,
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S20499C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C15D1Ev,_ZTv0_n12_N9S20499C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C15D0Ev,_ZTv0_n12_N9S20499C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20499C15[];
extern void _ZN9S20499C14D1Ev();
extern void _ZN9S20499C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20499C14__9S20499C15[] = {
  0,
  0,
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C14[0]),
  (VTBL_ENTRY)&_ZN9S20499C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S20499C14D1Ev,_ZThn12_N9S20499C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S20499C14D0Ev,_ZThn12_N9S20499C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S20499C14__9S20499C15[] = {
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S20499C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev),
};
static  VTT_ENTRY vtt_S20499C15[] = {
  {&(_ZTV9S20499C15[6]),  6,13},
  {&(_tg__ZTV9S20499C14__9S20499C15[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S20499C14__9S20499C15[3]),  3,5},
  {&(_ZTV9S20499C15[11]),  11,13},
};
extern VTBL_ENTRY _ZTI9S20499C15[];
extern  VTBL_ENTRY _ZTV9S20499C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C15[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20499C14D0Ev,_ZThn12_N9S20499C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20499C14D1Ev,_ZThn12_N9S20499C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C15D0Ev,_ZTv0_n12_N9S20499C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20499C15D0Ev,_ZThn12_N9S20499C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C15D1Ev,_ZTv0_n12_N9S20499C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20499C15D1Ev,_ZThn12_N9S20499C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20499C15 = {  "S20499C15", // class name
  bases_S20499C15, 5,
  &(vtc_S20499C15[0]), // expected_vtbl_contents
  &(vtt_S20499C15[0]), // expected_vtt_contents
  ABISELECT(832,532), // object size
  NSPAIRA(_ZTI9S20499C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20499C15),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20499C15),4, //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  S20499C17  : S19863C2_nt , S19863C20 , virtual S19863C10 , virtual S20499C14 {
  ::S19863C9_nt s20499c17f0;
  ~S20499C17(); // tgen
  S20499C17(); // tgen
};
//SIG(-1 S20499C17) C1{ BC2{ m} BC3{ m FC4{ VBC5{ m} VBC6{ m Fi} vd FD[10]}[3] Fp} VBC7{ m} VBC8{ VBC9{ vd m FC4} VBC7 VBC5 Fp} FC6}


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

static void Test_S20499C17()
{
  extern Class_Descriptor cd_S20499C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,135)];
    init_test(&cd_S20499C17, buf);
    S20499C17 *dp, &lv = *(dp=new (buf) S20499C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,536), "sizeof(S20499C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20499C17)");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S20499C17");
    check_base_class_offset(lv, (S19863C20*), ABISELECT(16,4), "S20499C17");
    check_base_class_offset(lv, (S19863C10*), 0, "S20499C17");
    check_base_class_offset(lv, (S19863C10*)(S20499C14*), 0, "S20499C17");
    check_base_class_offset(lv, (S19863C6*)(S20499C14*), ABISELECT(624,404), "S20499C17");
    check_base_class_offset(lv, (S19863C8*)(S20499C14*), 0, "S20499C17");
    check_base_class_offset(lv, (S20499C14*), ABISELECT(608,396), "S20499C17");
    check_field_offset(lv, s20499c17f0, ABISELECT(600,392), "S20499C17.s20499c17f0");
    test_class_info(&lv, &cd_S20499C17);
    dp->~S20499C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20499C17(Test_S20499C17, "S20499C17", ABISELECT(832,536));

#else // __cplusplus

extern void _ZN9S20499C17C1Ev();
extern void _ZN9S20499C17D1Ev();
Name_Map name_map_S20499C17[] = {
  NSPAIR(_ZN9S20499C17C1Ev),
  NSPAIR(_ZN9S20499C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S20499C14;
extern VTBL_ENTRY _ZTI9S20499C14[];
extern  VTBL_ENTRY _ZTV9S20499C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C14[];
static Base_Class bases_S20499C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C2_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_S19863C20,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C6,    ABISELECT(624,404), //bcp->offset
    16, //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
    5, //immediately_derived
  0, 1},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20499C14,    ABISELECT(608,396), //bcp->offset
    8, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20499C17[];
extern void _ZN9S20499C17D1Ev();
extern void _ZN9S20499C17D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20499C17D1Ev,_ZTv0_n24_N9S20499C17D1Ev)();
extern void ABISELECT(_ZThn608_N9S20499C17D1Ev,_ZThn396_N9S20499C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20499C17D0Ev,_ZTv0_n24_N9S20499C17D0Ev)();
extern void ABISELECT(_ZThn608_N9S20499C17D0Ev,_ZThn396_N9S20499C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20499C17D1Ev,_ZTv0_n12_N9S20499C17D1Ev)();
extern void ABISELECT(_ZThn624_N9S20499C17D1Ev,_ZThn404_N9S20499C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20499C17D0Ev,_ZTv0_n12_N9S20499C17D0Ev)();
extern void ABISELECT(_ZThn624_N9S20499C17D0Ev,_ZThn404_N9S20499C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20499C17[] = {
  0,
  ABISELECT(624,404),
  ABISELECT(608,396),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C17[0]),
  (VTBL_ENTRY)&_ZN9S20499C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C17D0Ev,
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(16,8),
  ABISELECT(-608,-396),
  (VTBL_ENTRY)&(_ZTI9S20499C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20499C17D1Ev,_ZTv0_n24_N9S20499C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20499C17D0Ev,_ZTv0_n24_N9S20499C17D0Ev),
  ABISELECT(-624,-404),
  ABISELECT(-624,-404),
  (VTBL_ENTRY)&(_ZTI9S20499C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C17D1Ev,_ZTv0_n12_N9S20499C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C17D0Ev,_ZTv0_n12_N9S20499C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S20499C17[];
extern void _ZN9S20499C14D1Ev();
extern void _ZN9S20499C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20499C14__9S20499C17[] = {
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C14[0]),
  (VTBL_ENTRY)&_ZN9S20499C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S20499C14D1Ev,_ZThn8_N9S20499C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S20499C14D0Ev,_ZThn8_N9S20499C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S20499C14__9S20499C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20499C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev),
};
static  VTT_ENTRY vtt_S20499C17[] = {
  {&(_ZTV9S20499C17[6]),  6,21},
  {&(_ZTV9S20499C17[14]),  14,21},
  {&(_ZTV9S20499C17[19]),  19,21},
  {&(_tg__ZTV9S20499C14__9S20499C17[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S20499C14__9S20499C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20499C17[];
extern  VTBL_ENTRY _ZTV9S20499C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C17[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20499C14D0Ev,_ZThn8_N9S20499C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20499C14D1Ev,_ZThn8_N9S20499C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C17D0Ev,_ZTv0_n12_N9S20499C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S20499C17D0Ev,_ZThn404_N9S20499C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C17D1Ev,_ZTv0_n12_N9S20499C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S20499C17D1Ev,_ZThn404_N9S20499C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20499C17D0Ev,_ZTv0_n24_N9S20499C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N9S20499C17D0Ev,_ZThn396_N9S20499C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20499C17D1Ev,_ZTv0_n24_N9S20499C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N9S20499C17D1Ev,_ZThn396_N9S20499C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20499C17 = {  "S20499C17", // class name
  bases_S20499C17, 6,
  &(vtc_S20499C17[0]), // expected_vtbl_contents
  &(vtt_S20499C17[0]), // expected_vtt_contents
  ABISELECT(832,536), // object size
  NSPAIRA(_ZTI9S20499C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20499C17),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20499C17),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20499C1  : virtual S20499C2 , S20499C3 , S20499C15 , virtual S20499C17 {
  int s20499c1f0;
  virtual  ~S20499C1(); // _ZN8S20499C1D2Ev
  S20499C1(); // tgen
};
//SIG(1 S20499C1) C1{ VBC2{ VBC3{ BC4{ m} BC5{ m} VBC6{ BC5} VBC7{ m Fi}} BC8{ vd m FC9{ VBC5 VBC7 vd FD[10]}} BC10{ VBC11{ m Fs} VBC7 VBC8 VBC12{ VBC8 BC4 vd} BC3 vd Fi} VBC13{ m} VBC14{ VBC8 VBC4 VBC5 Fp}} BC3 BC15{ BC14 VBC16{ m FC9[3] Fp} FC7} VBC17{ BC13 BC16 VBC4 VBC14 FC7} vd Fi}


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

static void Test_S20499C1()
{
  extern Class_Descriptor cd_S20499C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(108,277)];
    init_test(&cd_S20499C1, buf);
    S20499C1 *dp, &lv = *(dp=new (buf) S20499C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1712,1104), "sizeof(S20499C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20499C1)");
    /*is_ambiguous_... S20499C1::S20499C3 */ AMB_check_base_class_offset(lv, (S19863C10*)(S20499C3*), ABISELECT(256,160), "S20499C1");
    /*is_ambiguous_... S20499C1::S20499C3 */ AMB_check_base_class_offset(lv, (S19863C8*)(S20499C3*), ABISELECT(256,160), "S20499C1");
    check_base_class_offset(lv, (S19863C8*)(S20499C6*), ABISELECT(264,164), "S20499C1");
    /*is_ambiguous_... S20499C1::S20499C3 */ AMB_check_base_class_offset(lv, (S20499C6*)(S20499C3*), ABISELECT(264,164), "S20499C1");
    check_base_class_offset(lv, (S20499C6*)(S20499C3*)(S20499C10*)(S20499C2*), ABISELECT(264,164), "S20499C1");
    /*is_ambiguous_... S20499C1::S20499C3 */ AMB_check_base_class_offset(lv, (S20499C6*)(S20499C3*), ABISELECT(264,164), "S20499C1");
    /*is_ambiguous_... S20499C1::S20499C3 */ AMB_check_base_class_offset(lv, (S19863C9_nt*)(S20499C3*), ABISELECT(264,164), "S20499C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S20499C10*)(S20499C2*), ABISELECT(264,164), "S20499C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S20499C3*)(S20499C10*)(S20499C2*), ABISELECT(264,164), "S20499C1");
    /*is_ambiguous_... S20499C1::S20499C3 */ AMB_check_base_class_offset(lv, (S19863C9_nt*)(S20499C3*), ABISELECT(264,164), "S20499C1");
    /*is_ambiguous_... S20499C2::S20499C3 */ AMB_check_base_class_offset(lv, (S20499C3*)(S20499C2*), ABISELECT(256,160), "S20499C1");
    /*is_ambiguous_... S20499C2::S19863C6 */ AMB_check_base_class_offset(lv, (S19863C6*)(S20499C2*), ABISELECT(32,20), "S20499C1");
    check_base_class_offset(lv, (S19863C12_nt*)(S20499C10*)(S20499C2*), ABISELECT(268,168), "S20499C1");
    check_base_class_offset(lv, (S19863C6*)(S20499C10*)(S20499C2*), ABISELECT(272,172), "S20499C1");
    check_base_class_offset(lv, (S19863C6*)(S20499C12*), ABISELECT(272,172), "S20499C1");
    /*is_ambiguous_... S20499C1::S20499C14 */ AMB_check_base_class_offset(lv, (S19863C6*)(S20499C14*), ABISELECT(272,172), "S20499C1");
    check_base_class_offset(lv, (S19863C6*)(S20499C14*)(S20499C15*), ABISELECT(272,172), "S20499C1");
    check_base_class_offset(lv, (S19863C10*)(S20499C12*), ABISELECT(480,304), "S20499C1");
    check_base_class_offset(lv, (S20499C12*)(S20499C10*)(S20499C2*), ABISELECT(480,304), "S20499C1");
    check_base_class_offset(lv, (S19863C10*)(S20499C3*)(S20499C10*)(S20499C2*), ABISELECT(240,152), "S20499C1");
    /*is_ambiguous_... S20499C3::S19863C8 */ AMB_check_base_class_offset(lv, (S19863C8*)(S20499C3*)(S20499C10*)(S20499C2*), ABISELECT(240,152), "S20499C1");
    check_base_class_offset(lv, (S20499C3*)(S20499C10*)(S20499C2*), ABISELECT(240,152), "S20499C1");
    check_base_class_offset(lv, (S20499C10*)(S20499C2*), ABISELECT(240,152), "S20499C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S20499C2*), 0, "S20499C1");
    /*is_ambiguous_... S20499C1::S20499C14 */ AMB_check_base_class_offset(lv, (S19863C10*)(S20499C14*), ABISELECT(504,316), "S20499C1");
    check_base_class_offset(lv, (S19863C10*)(S20499C14*)(S20499C15*), ABISELECT(504,316), "S20499C1");
    check_base_class_offset(lv, (S19863C10*)(S20499C17*), ABISELECT(504,316), "S20499C1");
    /*is_ambiguous_... S20499C1::S20499C14 */ AMB_check_base_class_offset(lv, (S19863C8*)(S20499C14*), ABISELECT(504,316), "S20499C1");
    check_base_class_offset(lv, (S19863C8*)(S20499C14*)(S20499C15*), ABISELECT(504,316), "S20499C1");
    check_base_class_offset(lv, (S20499C14*)(S20499C2*), ABISELECT(488,308), "S20499C1");
    check_base_class_offset(lv, (S20499C14*)(S20499C17*), ABISELECT(488,308), "S20499C1");
    check_base_class_offset(lv, (S20499C2*), ABISELECT(32,20), "S20499C1");
    /*is_ambiguous_... S20499C1::S20499C3 */ AMB_check_base_class_offset(lv, (S19863C10*)(S20499C3*), 0, "S20499C1");
    /*is_ambiguous_... S20499C1::S20499C3 */ AMB_check_base_class_offset(lv, (S19863C8*)(S20499C3*), 0, "S20499C1");
    /*is_ambiguous_... S20499C1::S20499C3 */ AMB_check_base_class_offset(lv, (S20499C3*), 0, "S20499C1");
    check_base_class_offset(lv, (S20499C14*)(S20499C15*), ABISELECT(8,4), "S20499C1");
    check_base_class_offset(lv, (S19863C20*)(S20499C15*), ABISELECT(512,320), "S20499C1");
    check_base_class_offset(lv, (S20499C15*), ABISELECT(8,4), "S20499C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S20499C17*), ABISELECT(1104,708), "S20499C1");
    check_base_class_offset(lv, (S19863C20*)(S20499C17*), ABISELECT(1120,712), "S20499C1");
    check_base_class_offset(lv, (S20499C17*), ABISELECT(1104,708), "S20499C1");
    check_field_offset(lv, s20499c1f0, ABISELECT(28,16), "S20499C1.s20499c1f0");
    test_class_info(&lv, &cd_S20499C1);
    dp->~S20499C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20499C1(Test_S20499C1, "S20499C1", ABISELECT(1712,1104));

#else // __cplusplus

extern void _ZN8S20499C1C1Ev();
extern void _ZN8S20499C1D2Ev();
Name_Map name_map_S20499C1[] = {
  NSPAIR(_ZN8S20499C1C1Ev),
  NSPAIR(_ZN8S20499C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S20499C6;
extern VTBL_ENTRY _ZTI8S20499C6[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S20499C3;
extern VTBL_ENTRY _ZTI8S20499C3[];
extern  VTBL_ENTRY _ZTV8S20499C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20499C3[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S20499C12;
extern VTBL_ENTRY _ZTI9S20499C12[];
extern  VTBL_ENTRY _ZTV9S20499C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C12[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S20499C3;
extern VTBL_ENTRY _ZTI8S20499C3[];
extern  VTBL_ENTRY _ZTV8S20499C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20499C3[];
extern Class_Descriptor cd_S20499C10;
extern VTBL_ENTRY _ZTI9S20499C10[];
extern  VTBL_ENTRY _ZTV9S20499C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C10[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S20499C14;
extern VTBL_ENTRY _ZTI9S20499C14[];
extern  VTBL_ENTRY _ZTV9S20499C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C14[];
extern Class_Descriptor cd_S20499C2;
extern VTBL_ENTRY _ZTI8S20499C2[];
extern  VTBL_ENTRY _ZTV8S20499C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20499C2[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S20499C3;
extern VTBL_ENTRY _ZTI8S20499C3[];
extern  VTBL_ENTRY _ZTV8S20499C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20499C3[];
extern Class_Descriptor cd_S20499C14;
extern VTBL_ENTRY _ZTI9S20499C14[];
extern  VTBL_ENTRY _ZTV9S20499C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C14[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
extern Class_Descriptor cd_S20499C15;
extern VTBL_ENTRY _ZTI9S20499C15[];
extern  VTBL_ENTRY _ZTV9S20499C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C15[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
extern Class_Descriptor cd_S20499C17;
extern VTBL_ENTRY _ZTI9S20499C17[];
extern  VTBL_ENTRY _ZTV9S20499C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20499C17[];
static Base_Class bases_S20499C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    ABISELECT(256,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19863C8,    ABISELECT(256,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19863C8,    ABISELECT(264,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
    3, //immediately_derived
  0, 0},
  {&cd_S20499C6,    ABISELECT(264,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
    5, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(264,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
    5, //immediately_derived
  0, 1},
  {&cd_S20499C3,    ABISELECT(256,160), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19863C6,    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
    5, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19863C12_nt,    ABISELECT(268,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19863C6,    ABISELECT(272,172), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19863C10,    ABISELECT(480,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20499C12,    ABISELECT(480,304), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19863C10,    ABISELECT(240,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
    13, //immediately_derived
  0, 0},
  {&cd_S19863C8,    ABISELECT(240,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
    13, //immediately_derived
  0, 0},
  {&cd_S20499C3,    ABISELECT(240,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20499C10,    ABISELECT(240,152), //bcp->offset
    40, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19863C2_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
    19, //immediately_derived
  0, 1},
  {&cd_S19863C10,    ABISELECT(504,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
    18, //immediately_derived
  0, 1},
  {&cd_S19863C8,    ABISELECT(504,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
    18, //immediately_derived
  0, 1},
  {&cd_S20499C14,    ABISELECT(488,308), //bcp->offset
    64, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20499C2,    ABISELECT(32,20), //bcp->offset
    25, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20499C3,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20499C14,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19863C20,    ABISELECT(512,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20499C15,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C2_nt,    ABISELECT(1104,708), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C20,    ABISELECT(1120,712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20499C17,    ABISELECT(1104,708), //bcp->offset
    72, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20499C1[];
extern void _ZN8S20499C1D1Ev();
extern void _ZN8S20499C1D0Ev();
extern void ABISELECT(_ZThn8_N8S20499C1D1Ev,_ZThn4_N8S20499C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20499C1D0Ev,_ZThn4_N8S20499C1D0Ev)();
extern void ABISELECT(_ZTv0_n104_N8S20499C1D1Ev,_ZTv0_n52_N8S20499C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20499C1D1Ev,_ZThn20_N8S20499C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S20499C1D0Ev,_ZTv0_n52_N8S20499C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S20499C1D0Ev,_ZThn20_N8S20499C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn208_n104_N8S20499C1D1Ev,_ZTvn132_n52_N8S20499C1D1Ev)();
extern void ABISELECT(_ZTvn208_n104_N8S20499C1D0Ev,_ZTvn132_n52_N8S20499C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20499C1D1Ev,_ZTv0_n12_N8S20499C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S20499C1D1Ev,_ZThn172_N8S20499C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20499C1D0Ev,_ZTv0_n12_N8S20499C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S20499C1D0Ev,_ZThn172_N8S20499C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20499C1D1Ev,_ZTv0_n16_N8S20499C1D1Ev)();
extern void ABISELECT(_ZThn480_N8S20499C1D1Ev,_ZThn304_N8S20499C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20499C1D0Ev,_ZTv0_n16_N8S20499C1D0Ev)();
extern void ABISELECT(_ZThn480_N8S20499C1D0Ev,_ZThn304_N8S20499C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20499C1D1Ev,_ZTv0_n24_N8S20499C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S20499C1D1Ev,_ZThn308_N8S20499C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20499C1D0Ev,_ZTv0_n24_N8S20499C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S20499C1D0Ev,_ZThn308_N8S20499C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20499C1D1Ev,_ZTv0_n28_N8S20499C1D1Ev)();
extern void ABISELECT(_ZThn1104_N8S20499C1D1Ev,_ZThn708_N8S20499C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20499C1D0Ev,_ZTv0_n28_N8S20499C1D0Ev)();
extern void ABISELECT(_ZThn1104_N8S20499C1D0Ev,_ZThn708_N8S20499C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20499C1[] = {
  ABISELECT(1104,708),
  ABISELECT(512,320),
  ABISELECT(504,316),
  ABISELECT(504,316),
  ABISELECT(488,308),
  0,
  ABISELECT(480,304),
  ABISELECT(272,172),
  ABISELECT(268,168),
  ABISELECT(256,160),
  ABISELECT(32,20),
  ABISELECT(264,164),
  ABISELECT(264,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20499C1[0]),
  (VTBL_ENTRY)&_ZN8S20499C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20499C1D0Ev,
  ABISELECT(504,316),
  ABISELECT(496,312),
  ABISELECT(496,312),
  ABISELECT(264,168),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20499C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20499C1D1Ev,_ZThn4_N8S20499C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20499C1D0Ev,_ZThn4_N8S20499C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(472,296),
  ABISELECT(472,296),
  ABISELECT(456,288),
  ABISELECT(-32,-20),
  ABISELECT(448,284),
  ABISELECT(240,152),
  ABISELECT(236,148),
  ABISELECT(232,144),
  ABISELECT(232,144),
  ABISELECT(224,140),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20499C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20499C1D1Ev,_ZTv0_n52_N8S20499C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20499C1D0Ev,_ZTv0_n52_N8S20499C1D0Ev),
  ABISELECT(240,152),
  ABISELECT(32,20),
  ABISELECT(28,16),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI8S20499C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n104_N8S20499C1D1Ev,_ZTvn132_n52_N8S20499C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n104_N8S20499C1D0Ev,_ZTvn132_n52_N8S20499C1D0Ev),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-256,-160),
  (VTBL_ENTRY)&(_ZTI8S20499C1[0]),
  ABISELECT(-272,-172),
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S20499C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20499C1D1Ev,_ZTv0_n12_N8S20499C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20499C1D0Ev,_ZTv0_n12_N8S20499C1D0Ev),
  ABISELECT(-480,-304),
  ABISELECT(-208,-132),
  ABISELECT(-480,-304),
  (VTBL_ENTRY)&(_ZTI8S20499C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20499C1D1Ev,_ZTv0_n16_N8S20499C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20499C1D0Ev,_ZTv0_n16_N8S20499C1D0Ev),
  ABISELECT(-488,-308),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-216,-136),
  ABISELECT(-488,-308),
  (VTBL_ENTRY)&(_ZTI8S20499C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20499C1D1Ev,_ZTv0_n24_N8S20499C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20499C1D0Ev,_ZTv0_n24_N8S20499C1D0Ev),
  ABISELECT(-1104,-708),
  ABISELECT(-600,-392),
  ABISELECT(-832,-536),
  ABISELECT(-616,-400),
  ABISELECT(-600,-392),
  ABISELECT(-1104,-708),
  (VTBL_ENTRY)&(_ZTI8S20499C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20499C1D1Ev,_ZTv0_n28_N8S20499C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20499C1D0Ev,_ZTv0_n28_N8S20499C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20499C1[];
static  VTBL_ENTRY _tg__ZTV8S20499C3__A__8S20499C1[] = {
  ABISELECT(264,164),
  ABISELECT(264,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20499C3[0]),
};
extern void _ZN9S20499C15D1Ev();
extern void _ZN9S20499C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20499C15__8S20499C1[] = {
  ABISELECT(504,316),
  ABISELECT(496,312),
  ABISELECT(496,312),
  ABISELECT(264,168),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C15[0]),
  (VTBL_ENTRY)&_ZN9S20499C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C15D0Ev,
};
extern void _ZN9S20499C14D1Ev();
extern void _ZN9S20499C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20499C149S20499C15__A1__8S20499C1[] = {
  ABISELECT(496,312),
  ABISELECT(496,312),
  ABISELECT(264,168),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C14[0]),
  (VTBL_ENTRY)&_ZN9S20499C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev)();
extern void ABISELECT(_ZThn264_N9S20499C14D1Ev,_ZThn168_N9S20499C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev)();
extern void ABISELECT(_ZThn264_N9S20499C14D0Ev,_ZThn168_N9S20499C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S20499C149S20499C15__A1__8S20499C1[] = {
  ABISELECT(-264,-168),
  ABISELECT(-264,-168),
  (VTBL_ENTRY)&(_ZTI9S20499C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20499C15D1Ev,_ZTv0_n12_N9S20499C15D1Ev)();
extern void ABISELECT(_ZThn264_N9S20499C15D1Ev,_ZThn168_N9S20499C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20499C15D0Ev,_ZTv0_n12_N9S20499C15D0Ev)();
extern void ABISELECT(_ZThn264_N9S20499C15D0Ev,_ZThn168_N9S20499C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S20499C15__8S20499C1[] = {
  ABISELECT(-264,-168),
  ABISELECT(-264,-168),
  (VTBL_ENTRY)&(_ZTI9S20499C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C15D1Ev,_ZTv0_n12_N9S20499C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C15D0Ev,_ZTv0_n12_N9S20499C15D0Ev),
};
extern void _ZN8S20499C2D1Ev();
extern void _ZN8S20499C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20499C2__8S20499C1[] = {
  ABISELECT(472,296),
  ABISELECT(472,296),
  ABISELECT(456,288),
  ABISELECT(-32,-20),
  ABISELECT(448,284),
  ABISELECT(240,152),
  ABISELECT(236,148),
  ABISELECT(232,144),
  ABISELECT(232,144),
  ABISELECT(224,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20499C2[0]),
  (VTBL_ENTRY)&_ZN8S20499C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20499C2D0Ev,
};
extern void _ZN9S20499C10D1Ev();
extern void _ZN9S20499C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20499C108S20499C2__8S20499C1[] = {
  ABISELECT(240,152),
  ABISELECT(32,20),
  ABISELECT(28,16),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C10[0]),
  (VTBL_ENTRY)&_ZN9S20499C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20499C39S20499C108S20499C2__A1__8S20499C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20499C3[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20499C10D1Ev,_ZTv0_n12_N9S20499C10D1Ev)();
extern void ABISELECT(_ZThn32_N9S20499C10D1Ev,_ZThn20_N9S20499C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20499C10D0Ev,_ZTv0_n12_N9S20499C10D0Ev)();
extern void ABISELECT(_ZThn32_N9S20499C10D0Ev,_ZThn20_N9S20499C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S20499C108S20499C2__8S20499C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S20499C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C10D1Ev,_ZTv0_n12_N9S20499C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C10D0Ev,_ZTv0_n12_N9S20499C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20499C10D1Ev,_ZTv0_n16_N9S20499C10D1Ev)();
extern void ABISELECT(_ZThn240_N9S20499C10D1Ev,_ZThn152_N9S20499C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20499C10D0Ev,_ZTv0_n16_N9S20499C10D0Ev)();
extern void ABISELECT(_ZThn240_N9S20499C10D0Ev,_ZThn152_N9S20499C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20499C12__9S20499C108S20499C2__8S20499C1[] = {
  ABISELECT(-240,-152),
  ABISELECT(-208,-132),
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI9S20499C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20499C10D1Ev,_ZTv0_n16_N9S20499C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20499C10D0Ev,_ZTv0_n16_N9S20499C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20499C3__8S20499C2__8S20499C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S20499C2[0]),
};
extern void ABISELECT(_ZThn208_N8S20499C2D1Ev,_ZThn132_N8S20499C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S20499C2D0Ev,_ZThn132_N8S20499C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20499C10__8S20499C2__8S20499C1[] = {
  ABISELECT(240,152),
  ABISELECT(32,20),
  ABISELECT(28,16),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S20499C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S20499C2D1Ev,_ZThn132_N8S20499C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S20499C2D0Ev,_ZThn132_N8S20499C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20499C2D1Ev,_ZTv0_n12_N8S20499C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S20499C2D1Ev,_ZThn152_N8S20499C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20499C2D0Ev,_ZTv0_n12_N8S20499C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S20499C2D0Ev,_ZThn152_N8S20499C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__A1__8S20499C2__8S20499C1[] = {
  ABISELECT(-240,-152),
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI8S20499C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20499C2D1Ev,_ZTv0_n12_N8S20499C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20499C2D0Ev,_ZTv0_n12_N8S20499C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20499C2D1Ev,_ZTv0_n16_N8S20499C2D1Ev)();
extern void ABISELECT(_ZThn448_N8S20499C2D1Ev,_ZThn284_N8S20499C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20499C2D0Ev,_ZTv0_n16_N8S20499C2D0Ev)();
extern void ABISELECT(_ZThn448_N8S20499C2D0Ev,_ZThn284_N8S20499C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20499C12__8S20499C2__8S20499C1[] = {
  ABISELECT(-448,-284),
  ABISELECT(-208,-132),
  ABISELECT(-448,-284),
  (VTBL_ENTRY)&(_ZTI8S20499C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20499C2D1Ev,_ZTv0_n16_N8S20499C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20499C2D0Ev,_ZTv0_n16_N8S20499C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20499C2D1Ev,_ZTv0_n24_N8S20499C2D1Ev)();
extern void ABISELECT(_ZThn456_N8S20499C2D1Ev,_ZThn288_N8S20499C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20499C2D0Ev,_ZTv0_n24_N8S20499C2D0Ev)();
extern void ABISELECT(_ZThn456_N8S20499C2D0Ev,_ZThn288_N8S20499C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20499C14__8S20499C2__8S20499C1[] = {
  ABISELECT(-456,-288),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-216,-136),
  ABISELECT(-456,-288),
  (VTBL_ENTRY)&(_ZTI8S20499C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20499C2D1Ev,_ZTv0_n24_N8S20499C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20499C2D0Ev,_ZTv0_n24_N8S20499C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20499C3__8S20499C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20499C3[0]),
};
extern void _ZN9S20499C12D1Ev();
extern void _ZN9S20499C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20499C12__8S20499C1[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C12[0]),
  (VTBL_ENTRY)&_ZN9S20499C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20499C12D1Ev,_ZTv0_n12_N9S20499C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20499C12D0Ev,_ZTv0_n12_N9S20499C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S20499C12__8S20499C1[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S20499C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C12D1Ev,_ZTv0_n12_N9S20499C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C12D0Ev,_ZTv0_n12_N9S20499C12D0Ev),
};
extern void _ZN9S20499C14D1Ev();
extern void _ZN9S20499C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20499C14__8S20499C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-216,-136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C14[0]),
  (VTBL_ENTRY)&_ZN9S20499C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S20499C14__8S20499C1[] = {
  ABISELECT(216,136),
  ABISELECT(216,136),
  (VTBL_ENTRY)&(_ZTI9S20499C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev),
};
extern void _ZN9S20499C17D1Ev();
extern void _ZN9S20499C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20499C17__8S20499C1[] = {
  ABISELECT(-600,-392),
  ABISELECT(-832,-536),
  ABISELECT(-616,-400),
  ABISELECT(-600,-392),
  0,
  (VTBL_ENTRY)&(_ZTI9S20499C17[0]),
  (VTBL_ENTRY)&_ZN9S20499C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20499C17D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20499C17D1Ev,_ZTv0_n24_N9S20499C17D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20499C17D0Ev,_ZTv0_n24_N9S20499C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20499C14__9S20499C17__8S20499C1[] = {
  ABISELECT(616,400),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-216,-136),
  ABISELECT(616,400),
  (VTBL_ENTRY)&(_ZTI9S20499C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20499C17D1Ev,_ZTv0_n24_N9S20499C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20499C17D0Ev,_ZTv0_n24_N9S20499C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20499C17D1Ev,_ZTv0_n12_N9S20499C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20499C17D0Ev,_ZTv0_n12_N9S20499C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S20499C17__8S20499C1[] = {
  ABISELECT(832,536),
  ABISELECT(832,536),
  (VTBL_ENTRY)&(_ZTI9S20499C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C17D1Ev,_ZTv0_n12_N9S20499C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20499C17D0Ev,_ZTv0_n12_N9S20499C17D0Ev),
};
static  VTT_ENTRY vtt_S20499C1[] = {
  {&(_ZTV8S20499C1[15]),  15,81},
  {&(_tg__ZTV8S20499C3__A__8S20499C1[4]),  4,4},
  {&(_tg__ZTV9S20499C15__8S20499C1[6]),  6,8},
  {&(_tg__ZTV9S20499C149S20499C15__A1__8S20499C1[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S20499C149S20499C15__A1__8S20499C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S20499C15__8S20499C1[3]),  3,5},
  {&(_ZTV8S20499C1[38]),  38,81},
  {&(_ZTV8S20499C1[53]),  53,81},
  {&(_ZTV8S20499C1[47]),  47,81},
  {&(_ZTV8S20499C1[56]),  56,81},
  {&(_ZTV8S20499C1[62]),  62,81},
  {&(_ZTV8S20499C1[70]),  70,81},
  {&(_ZTV8S20499C1[23]),  23,81},
  {&(_ZTV8S20499C1[79]),  79,81},
  {&(_tg__ZTV8S20499C2__8S20499C1[12]),  12,14},
  {&(_tg__ZTV9S20499C108S20499C2__8S20499C1[7]),  7,9},
  {&(_tg__ZTV8S20499C39S20499C108S20499C2__A1__8S20499C1[4]),  4,4},
  {&(_tg__ZTV8S19863C6__9S20499C108S20499C2__8S20499C1[3]),  3,5},
  {&(_tg__ZTV9S20499C12__9S20499C108S20499C2__8S20499C1[4]),  4,6},
  {&(_tg__ZTV8S20499C3__8S20499C2__8S20499C1[4]),  4,4},
  {&(_tg__ZTV9S20499C10__8S20499C2__8S20499C1[7]),  7,9},
  {&(_tg__ZTV8S19863C6__A1__8S20499C2__8S20499C1[3]),  3,5},
  {&(_tg__ZTV9S20499C12__8S20499C2__8S20499C1[4]),  4,6},
  {&(_tg__ZTV9S20499C14__8S20499C2__8S20499C1[6]),  6,8},
  {&(_tg__ZTV8S20499C3__8S20499C1[4]),  4,4},
  {&(_tg__ZTV9S20499C12__8S20499C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S20499C12__8S20499C1[3]),  3,5},
  {&(_tg__ZTV9S20499C14__8S20499C1[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S20499C14__8S20499C1[3]),  3,5},
  {&(_tg__ZTV9S20499C17__8S20499C1[6]),  6,8},
  {&(_tg__ZTV9S20499C14__9S20499C17__8S20499C1[6]),  6,8},
  {&(_tg__ZTV8S19863C6__9S20499C17__8S20499C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20499C1[];
extern  VTBL_ENTRY _ZTV8S20499C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20499C1[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20499C2D0Ev,_ZTv0_n24_N8S20499C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S20499C2D0Ev,_ZThn288_N8S20499C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20499C2D1Ev,_ZTv0_n24_N8S20499C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S20499C2D1Ev,_ZThn288_N8S20499C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20499C2D0Ev,_ZTv0_n16_N8S20499C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20499C2D0Ev,_ZThn284_N8S20499C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20499C2D1Ev,_ZTv0_n16_N8S20499C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20499C2D1Ev,_ZThn284_N8S20499C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20499C2D0Ev,_ZTv0_n12_N8S20499C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20499C2D0Ev,_ZThn152_N8S20499C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20499C2D1Ev,_ZTv0_n12_N8S20499C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20499C2D1Ev,_ZThn152_N8S20499C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20499C10D0Ev,_ZTv0_n16_N9S20499C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20499C10D0Ev,_ZThn152_N9S20499C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20499C10D1Ev,_ZTv0_n16_N9S20499C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20499C10D1Ev,_ZThn152_N9S20499C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C10D0Ev,_ZTv0_n12_N9S20499C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20499C10D0Ev,_ZThn20_N9S20499C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C10D1Ev,_ZTv0_n12_N9S20499C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20499C10D1Ev,_ZThn20_N9S20499C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C15D0Ev,_ZTv0_n12_N9S20499C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20499C15D0Ev,_ZThn168_N9S20499C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C15D1Ev,_ZTv0_n12_N9S20499C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20499C15D1Ev,_ZThn168_N9S20499C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C14D0Ev,_ZTv0_n12_N9S20499C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20499C14D0Ev,_ZThn168_N9S20499C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20499C14D1Ev,_ZTv0_n12_N9S20499C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20499C14D1Ev,_ZThn168_N9S20499C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20499C1D0Ev,_ZTv0_n28_N8S20499C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1104_N8S20499C1D0Ev,_ZThn708_N8S20499C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20499C1D1Ev,_ZTv0_n28_N8S20499C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1104_N8S20499C1D1Ev,_ZThn708_N8S20499C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20499C1D0Ev,_ZTv0_n24_N8S20499C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20499C1D0Ev,_ZThn308_N8S20499C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20499C1D1Ev,_ZTv0_n24_N8S20499C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20499C1D1Ev,_ZThn308_N8S20499C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20499C1D0Ev,_ZTv0_n16_N8S20499C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S20499C1D0Ev,_ZThn304_N8S20499C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20499C1D1Ev,_ZTv0_n16_N8S20499C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S20499C1D1Ev,_ZThn304_N8S20499C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20499C1D0Ev,_ZTv0_n12_N8S20499C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20499C1D0Ev,_ZThn172_N8S20499C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20499C1D1Ev,_ZTv0_n12_N8S20499C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20499C1D1Ev,_ZThn172_N8S20499C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20499C1D0Ev,_ZTv0_n52_N8S20499C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20499C1D0Ev,_ZThn20_N8S20499C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20499C1D1Ev,_ZTv0_n52_N8S20499C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20499C1D1Ev,_ZThn20_N8S20499C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20499C1 = {  "S20499C1", // class name
  bases_S20499C1, 29,
  &(vtc_S20499C1[0]), // expected_vtbl_contents
  &(vtt_S20499C1[0]), // expected_vtt_contents
  ABISELECT(1712,1104), // object size
  NSPAIRA(_ZTI8S20499C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20499C1),81, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20499C1),32, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3961C2  : S1766C4_nt {
  int s3961c2f0;
  void *s3961c2f1[2];
  int s3961c2f2;
  virtual  ~S3961C2(); // _ZN7S3961C2D1Ev
  virtual void  v16(); // _ZN7S3961C23v16Ev
  virtual void  v17(); // _ZN7S3961C23v17Ev
  virtual void  v18(); // _ZN7S3961C23v18Ev
  virtual void  v19(); // _ZN7S3961C23v19Ev
  virtual void  v20(); // _ZN7S3961C23v20Ev
  virtual void  v21(); // _ZN7S3961C23v21Ev
  virtual void  v22(); // _ZN7S3961C23v22Ev
  virtual void  v23(); // _ZN7S3961C23v23Ev
  virtual void  v24(); // _ZN7S3961C23v24Ev
  virtual void  v25(); // _ZN7S3961C23v25Ev
  virtual void  v26(); // _ZN7S3961C23v26Ev
  S3961C2(); // tgen
};
//SIG(-1 S3961C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S3961C2 ::~S3961C2(){ note_dtor("S3961C2", this);}
void  S3961C2 ::v16(){vfunc_called(this, "_ZN7S3961C23v16Ev");}
void  S3961C2 ::v17(){vfunc_called(this, "_ZN7S3961C23v17Ev");}
void  S3961C2 ::v18(){vfunc_called(this, "_ZN7S3961C23v18Ev");}
void  S3961C2 ::v19(){vfunc_called(this, "_ZN7S3961C23v19Ev");}
void  S3961C2 ::v20(){vfunc_called(this, "_ZN7S3961C23v20Ev");}
void  S3961C2 ::v21(){vfunc_called(this, "_ZN7S3961C23v21Ev");}
void  S3961C2 ::v22(){vfunc_called(this, "_ZN7S3961C23v22Ev");}
void  S3961C2 ::v23(){vfunc_called(this, "_ZN7S3961C23v23Ev");}
void  S3961C2 ::v24(){vfunc_called(this, "_ZN7S3961C23v24Ev");}
void  S3961C2 ::v25(){vfunc_called(this, "_ZN7S3961C23v25Ev");}
void  S3961C2 ::v26(){vfunc_called(this, "_ZN7S3961C23v26Ev");}
S3961C2 ::S3961C2(){ note_ctor("S3961C2", this);} // tgen

static void Test_S3961C2()
{
  extern Class_Descriptor cd_S3961C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3961C2, buf);
    S3961C2 *dp, &lv = *(dp=new (buf) S3961C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3961C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3961C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3961C2");
    check_field_offset(lv, s3961c2f0, ABISELECT(16,12), "S3961C2.s3961c2f0");
    check_field_offset(lv, s3961c2f1, ABISELECT(24,16), "S3961C2.s3961c2f1");
    check_field_offset(lv, s3961c2f2, ABISELECT(40,24), "S3961C2.s3961c2f2");
    test_class_info(&lv, &cd_S3961C2);
    dp->~S3961C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3961C2(Test_S3961C2, "S3961C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3961C2C1Ev();
extern void _ZN7S3961C2D1Ev();
Name_Map name_map_S3961C2[] = {
  NSPAIR(_ZN7S3961C2C1Ev),
  NSPAIR(_ZN7S3961C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3961C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3961C2[];
extern void _ZN7S3961C2D1Ev();
extern void _ZN7S3961C2D0Ev();
extern void _ZN7S3961C23v16Ev();
extern void _ZN7S3961C23v17Ev();
extern void _ZN7S3961C23v18Ev();
extern void _ZN7S3961C23v19Ev();
extern void _ZN7S3961C23v20Ev();
extern void _ZN7S3961C23v21Ev();
extern void _ZN7S3961C23v22Ev();
extern void _ZN7S3961C23v23Ev();
extern void _ZN7S3961C23v24Ev();
extern void _ZN7S3961C23v25Ev();
extern void _ZN7S3961C23v26Ev();
static  VTBL_ENTRY vtc_S3961C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3961C2[0]),
  (VTBL_ENTRY)&_ZN7S3961C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3961C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S3961C2[];
extern  VTBL_ENTRY _ZTV7S3961C2[];
Class_Descriptor cd_S3961C2 = {  "S3961C2", // class name
  bases_S3961C2, 1,
  &(vtc_S3961C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3961C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3961C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3961C5_nt  {
  virtual  ~S3961C5_nt(); // _ZN10S3961C5_ntD1Ev
  virtual void  v27(); // _ZN10S3961C5_nt3v27Ev
  virtual void  v28(); // _ZN10S3961C5_nt3v28Ev
  S3961C5_nt(); // tgen
};
//SIG(-1 S3961C5_nt) C1{ vd v1 v2}


 S3961C5_nt ::~S3961C5_nt(){ note_dtor("S3961C5_nt", this);}
void  S3961C5_nt ::v27(){vfunc_called(this, "_ZN10S3961C5_nt3v27Ev");}
void  S3961C5_nt ::v28(){vfunc_called(this, "_ZN10S3961C5_nt3v28Ev");}
S3961C5_nt ::S3961C5_nt(){ note_ctor("S3961C5_nt", this);} // tgen

//skip512 S3961C5_nt

#else // __cplusplus

extern void _ZN10S3961C5_ntC1Ev();
extern void _ZN10S3961C5_ntD1Ev();
Name_Map name_map_S3961C5_nt[] = {
  NSPAIR(_ZN10S3961C5_ntC1Ev),
  NSPAIR(_ZN10S3961C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3961C5_nt[];
extern void _ZN10S3961C5_ntD1Ev();
extern void _ZN10S3961C5_ntD0Ev();
extern void _ZN10S3961C5_nt3v27Ev();
extern void _ZN10S3961C5_nt3v28Ev();
static  VTBL_ENTRY vtc_S3961C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3961C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S3961C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3961C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3961C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3961C5_nt3v28Ev,
};
extern VTBL_ENTRY _ZTI10S3961C5_nt[];
VTBL_ENTRY *P__ZTI10S3961C5_nt = _ZTI10S3961C5_nt; 
extern  VTBL_ENTRY _ZTV10S3961C5_nt[];
Class_Descriptor cd_S3961C5_nt = {  "S3961C5_nt", // class name
  0,0,//no base classes
  &(vtc_S3961C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S3961C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3961C5_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  S3961C4  : S3961C5_nt {
  virtual  ~S3961C4(); // _ZN7S3961C4D1Ev
  virtual void  v29(); // _ZN7S3961C43v29Ev
  S3961C4(); // tgen
};
//SIG(-1 S3961C4) C1{ BC2{ vd v2 v3} vd v1}


 S3961C4 ::~S3961C4(){ note_dtor("S3961C4", this);}
void  S3961C4 ::v29(){vfunc_called(this, "_ZN7S3961C43v29Ev");}
S3961C4 ::S3961C4(){ note_ctor("S3961C4", this);} // tgen

static void Test_S3961C4()
{
  extern Class_Descriptor cd_S3961C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3961C4, buf);
    S3961C4 *dp, &lv = *(dp=new (buf) S3961C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3961C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3961C4)");
    check_base_class_offset(lv, (S3961C5_nt*), 0, "S3961C4");
    test_class_info(&lv, &cd_S3961C4);
    dp->~S3961C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3961C4(Test_S3961C4, "S3961C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3961C4C1Ev();
extern void _ZN7S3961C4D1Ev();
Name_Map name_map_S3961C4[] = {
  NSPAIR(_ZN7S3961C4C1Ev),
  NSPAIR(_ZN7S3961C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3961C5_nt;
extern VTBL_ENTRY _ZTI10S3961C5_nt[];
extern  VTBL_ENTRY _ZTV10S3961C5_nt[];
static Base_Class bases_S3961C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3961C5_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 _ZTI7S3961C4[];
extern void _ZN7S3961C4D1Ev();
extern void _ZN7S3961C4D0Ev();
extern void _ZN10S3961C5_nt3v27Ev();
extern void _ZN10S3961C5_nt3v28Ev();
extern void _ZN7S3961C43v29Ev();
static  VTBL_ENTRY vtc_S3961C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3961C4[0]),
  (VTBL_ENTRY)&_ZN7S3961C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3961C4D0Ev,
  (VTBL_ENTRY)&_ZN10S3961C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3961C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN7S3961C43v29Ev,
};
extern VTBL_ENTRY _ZTI7S3961C4[];
extern  VTBL_ENTRY _ZTV7S3961C4[];
Class_Descriptor cd_S3961C4 = {  "S3961C4", // class name
  bases_S3961C4, 1,
  &(vtc_S3961C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3961C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3961C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3961C6  {
  virtual  ~S3961C6(); // _ZN7S3961C6D1Ev
  virtual void  v30(); // _ZN7S3961C63v30Ev
  virtual void  v31(); // _ZN7S3961C63v31Ev
  S3961C6(); // tgen
};
//SIG(-1 S3961C6) C1{ vd v1 v2}


 S3961C6 ::~S3961C6(){ note_dtor("S3961C6", this);}
void  S3961C6 ::v30(){vfunc_called(this, "_ZN7S3961C63v30Ev");}
void  S3961C6 ::v31(){vfunc_called(this, "_ZN7S3961C63v31Ev");}
S3961C6 ::S3961C6(){ note_ctor("S3961C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3961C6C1Ev();
extern void _ZN7S3961C6D1Ev();
Name_Map name_map_S3961C6[] = {
  NSPAIR(_ZN7S3961C6C1Ev),
  NSPAIR(_ZN7S3961C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3961C6[];
extern void _ZN7S3961C6D1Ev();
extern void _ZN7S3961C6D0Ev();
extern void _ZN7S3961C63v30Ev();
extern void _ZN7S3961C63v31Ev();
static  VTBL_ENTRY vtc_S3961C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3961C6[0]),
  (VTBL_ENTRY)&_ZN7S3961C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3961C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3961C63v30Ev,
  (VTBL_ENTRY)&_ZN7S3961C63v31Ev,
};
extern VTBL_ENTRY _ZTI7S3961C6[];
extern  VTBL_ENTRY _ZTV7S3961C6[];
Class_Descriptor cd_S3961C6 = {  "S3961C6", // class name
  0,0,//no base classes
  &(vtc_S3961C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3961C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3961C6),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  S3961C7_nt  : S1766C4_nt {
  void *s3961c7f0;
  int s3961c7f1[4];
  void *s3961c7f2;
  virtual  ~S3961C7_nt(); // _ZN10S3961C7_ntD1Ev
  S3961C7_nt(); // tgen
};
//SIG(-1 S3961C7_nt) C1{ BC2{ vd m FL} vd Fp Fi[4] Fp}


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

//skip512 S3961C7_nt

#else // __cplusplus

extern void _ZN10S3961C7_ntC1Ev();
extern void _ZN10S3961C7_ntD1Ev();
Name_Map name_map_S3961C7_nt[] = {
  NSPAIR(_ZN10S3961C7_ntC1Ev),
  NSPAIR(_ZN10S3961C7_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3961C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI10S3961C7_nt[];
extern void _ZN10S3961C7_ntD1Ev();
extern void _ZN10S3961C7_ntD0Ev();
static  VTBL_ENTRY vtc_S3961C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3961C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S3961C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3961C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3961C7_nt[];
VTBL_ENTRY *P__ZTI10S3961C7_nt = _ZTI10S3961C7_nt; 
extern  VTBL_ENTRY _ZTV10S3961C7_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3961C1  : S3961C2 , S3961C4 , S3961C6 {
  void *s3961c1f0;
  ::S3961C7_nt s3961c1f1;
  int s3961c1f2[2];
  void *s3961c1f3[2];
  int s3961c1f4[3];
  char s3961c1f5;
  __tsi64 s3961c1f6;
  int s3961c1f7;
  char s3961c1f8;
  virtual  ~S3961C1(); // _ZN7S3961C1D1Ev
  virtual void  v1(); // _ZN7S3961C12v1Ev
  virtual void  v2(); // _ZN7S3961C12v2Ev
  virtual void  v3(); // _ZN7S3961C12v3Ev
  virtual void  v4(); // _ZN7S3961C12v4Ev
  virtual void  v5(); // _ZN7S3961C12v5Ev
  virtual void  v6(); // _ZN7S3961C12v6Ev
  virtual void  v7(); // _ZN7S3961C12v7Ev
  virtual void  v8(); // _ZN7S3961C12v8Ev
  virtual void  v9(); // _ZN7S3961C12v9Ev
  virtual void  v10(); // _ZN7S3961C13v10Ev
  virtual void  v11(); // _ZN7S3961C13v11Ev
  virtual void  v12(); // _ZN7S3961C13v12Ev
  virtual void  v13(); // _ZN7S3961C13v13Ev
  virtual void  v14(); // _ZN7S3961C13v14Ev
  virtual void  v15(); // _ZN7S3961C13v15Ev
  S3961C1(); // tgen
};
//SIG(1 S3961C1) C1{ BC2{ BC3{ vd m FL} vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fi Fp[2] Fi} BC4{ BC5{ vd v27 v28} vd v29} BC6{ vd v30 v31} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp FC7{ BC3 vd Fp Fi[4] Fp} Fi[2] Fp[2] Fi[3] Fc FL Fi Fc}


 S3961C1 ::~S3961C1(){ note_dtor("S3961C1", this);}
void  S3961C1 ::v1(){vfunc_called(this, "_ZN7S3961C12v1Ev");}
void  S3961C1 ::v2(){vfunc_called(this, "_ZN7S3961C12v2Ev");}
void  S3961C1 ::v3(){vfunc_called(this, "_ZN7S3961C12v3Ev");}
void  S3961C1 ::v4(){vfunc_called(this, "_ZN7S3961C12v4Ev");}
void  S3961C1 ::v5(){vfunc_called(this, "_ZN7S3961C12v5Ev");}
void  S3961C1 ::v6(){vfunc_called(this, "_ZN7S3961C12v6Ev");}
void  S3961C1 ::v7(){vfunc_called(this, "_ZN7S3961C12v7Ev");}
void  S3961C1 ::v8(){vfunc_called(this, "_ZN7S3961C12v8Ev");}
void  S3961C1 ::v9(){vfunc_called(this, "_ZN7S3961C12v9Ev");}
void  S3961C1 ::v10(){vfunc_called(this, "_ZN7S3961C13v10Ev");}
void  S3961C1 ::v11(){vfunc_called(this, "_ZN7S3961C13v11Ev");}
void  S3961C1 ::v12(){vfunc_called(this, "_ZN7S3961C13v12Ev");}
void  S3961C1 ::v13(){vfunc_called(this, "_ZN7S3961C13v13Ev");}
void  S3961C1 ::v14(){vfunc_called(this, "_ZN7S3961C13v14Ev");}
void  S3961C1 ::v15(){vfunc_called(this, "_ZN7S3961C13v15Ev");}
S3961C1 ::S3961C1(){ note_ctor("S3961C1", this);} // tgen

static void Test_S3961C1()
{
  extern Class_Descriptor cd_S3961C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,32)];
    init_test(&cd_S3961C1, buf);
    S3961C1 *dp, &lv = *(dp=new (buf) S3961C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S3961C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3961C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3961C2*), 0, "S3961C1");
    check_base_class_offset(lv, (S3961C2*), 0, "S3961C1");
    check_base_class_offset(lv, (S3961C5_nt*)(S3961C4*), ABISELECT(48,28), "S3961C1");
    check_base_class_offset(lv, (S3961C4*), ABISELECT(48,28), "S3961C1");
    check_base_class_offset(lv, (S3961C6*), ABISELECT(56,32), "S3961C1");
    check_field_offset(lv, s3961c1f0, ABISELECT(64,36), "S3961C1.s3961c1f0");
    check_field_offset(lv, s3961c1f1, ABISELECT(72,40), "S3961C1.s3961c1f1");
    check_field_offset(lv, s3961c1f2, ABISELECT(120,76), "S3961C1.s3961c1f2");
    check_field_offset(lv, s3961c1f3, ABISELECT(128,84), "S3961C1.s3961c1f3");
    check_field_offset(lv, s3961c1f4, ABISELECT(144,92), "S3961C1.s3961c1f4");
    check_field_offset(lv, s3961c1f5, ABISELECT(156,104), "S3961C1.s3961c1f5");
    check_field_offset(lv, s3961c1f6, ABISELECT(160,108), "S3961C1.s3961c1f6");
    check_field_offset(lv, s3961c1f7, ABISELECT(168,116), "S3961C1.s3961c1f7");
    check_field_offset(lv, s3961c1f8, ABISELECT(172,120), "S3961C1.s3961c1f8");
    test_class_info(&lv, &cd_S3961C1);
    dp->~S3961C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3961C1(Test_S3961C1, "S3961C1", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN7S3961C1C1Ev();
extern void _ZN7S3961C1D1Ev();
Name_Map name_map_S3961C1[] = {
  NSPAIR(_ZN7S3961C1C1Ev),
  NSPAIR(_ZN7S3961C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3961C2;
extern VTBL_ENTRY _ZTI7S3961C2[];
extern  VTBL_ENTRY _ZTV7S3961C2[];
extern Class_Descriptor cd_S3961C5_nt;
extern VTBL_ENTRY _ZTI10S3961C5_nt[];
extern  VTBL_ENTRY _ZTV10S3961C5_nt[];
extern Class_Descriptor cd_S3961C4;
extern VTBL_ENTRY _ZTI7S3961C4[];
extern  VTBL_ENTRY _ZTV7S3961C4[];
extern Class_Descriptor cd_S3961C6;
extern VTBL_ENTRY _ZTI7S3961C6[];
extern  VTBL_ENTRY _ZTV7S3961C6[];
static Base_Class bases_S3961C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3961C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3961C5_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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3961C4,    ABISELECT(48,28), //bcp->offset
    30, //bcp->virtual_function_table_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_S3961C6,    ABISELECT(56,32), //bcp->offset
    37, //bcp->virtual_function_table_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 _ZTI7S3961C1[];
extern void _ZN7S3961C1D1Ev();
extern void _ZN7S3961C1D0Ev();
extern void _ZN7S3961C23v16Ev();
extern void _ZN7S3961C23v17Ev();
extern void _ZN7S3961C23v18Ev();
extern void _ZN7S3961C23v19Ev();
extern void _ZN7S3961C23v20Ev();
extern void _ZN7S3961C23v21Ev();
extern void _ZN7S3961C23v22Ev();
extern void _ZN7S3961C23v23Ev();
extern void _ZN7S3961C23v24Ev();
extern void _ZN7S3961C23v25Ev();
extern void _ZN7S3961C23v26Ev();
extern void _ZN7S3961C12v1Ev();
extern void _ZN7S3961C12v2Ev();
extern void _ZN7S3961C12v3Ev();
extern void _ZN7S3961C12v4Ev();
extern void _ZN7S3961C12v5Ev();
extern void _ZN7S3961C12v6Ev();
extern void _ZN7S3961C12v7Ev();
extern void _ZN7S3961C12v8Ev();
extern void _ZN7S3961C12v9Ev();
extern void _ZN7S3961C13v10Ev();
extern void _ZN7S3961C13v11Ev();
extern void _ZN7S3961C13v12Ev();
extern void _ZN7S3961C13v13Ev();
extern void _ZN7S3961C13v14Ev();
extern void _ZN7S3961C13v15Ev();
extern void ABISELECT(_ZThn48_N7S3961C1D1Ev,_ZThn28_N7S3961C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3961C1D0Ev,_ZThn28_N7S3961C1D0Ev)();
extern void _ZN10S3961C5_nt3v27Ev();
extern void _ZN10S3961C5_nt3v28Ev();
extern void _ZN7S3961C43v29Ev();
extern void ABISELECT(_ZThn56_N7S3961C1D1Ev,_ZThn32_N7S3961C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3961C1D0Ev,_ZThn32_N7S3961C1D0Ev)();
extern void _ZN7S3961C63v30Ev();
extern void _ZN7S3961C63v31Ev();
static  VTBL_ENTRY vtc_S3961C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3961C1[0]),
  (VTBL_ENTRY)&_ZN7S3961C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3961C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3961C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3961C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3961C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3961C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3961C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3961C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3961C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3961C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3961C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3961C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3961C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3961C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3961C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3961C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3961C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3961C13v15Ev,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3961C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3961C1D1Ev,_ZThn28_N7S3961C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3961C1D0Ev,_ZThn28_N7S3961C1D0Ev),
  (VTBL_ENTRY)&_ZN10S3961C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3961C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN7S3961C43v29Ev,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S3961C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3961C1D1Ev,_ZThn32_N7S3961C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3961C1D0Ev,_ZThn32_N7S3961C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3961C63v30Ev,
  (VTBL_ENTRY)&_ZN7S3961C63v31Ev,
};
extern VTBL_ENTRY _ZTI7S3961C1[];
extern  VTBL_ENTRY _ZTV7S3961C1[];
Class_Descriptor cd_S3961C1 = {  "S3961C1", // class name
  bases_S3961C1, 5,
  &(vtc_S3961C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI7S3961C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3961C1),43, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7211C5_nt  {
  virtual void  v3(); // _ZN10S7211C5_nt2v3Ev
  virtual void  v4(); // _ZN10S7211C5_nt2v4Ev
  virtual void  v5(); // _ZN10S7211C5_nt2v5Ev
  ~S7211C5_nt(); // tgen
  S7211C5_nt(); // tgen
};
//SIG(-1 S7211C5_nt) C1{ v1 v2 v3}


void  S7211C5_nt ::v3(){vfunc_called(this, "_ZN10S7211C5_nt2v3Ev");}
void  S7211C5_nt ::v4(){vfunc_called(this, "_ZN10S7211C5_nt2v4Ev");}
void  S7211C5_nt ::v5(){vfunc_called(this, "_ZN10S7211C5_nt2v5Ev");}
S7211C5_nt ::~S7211C5_nt(){ note_dtor("S7211C5_nt", this);} // tgen
S7211C5_nt ::S7211C5_nt(){ note_ctor("S7211C5_nt", this);} // tgen

//skip512 S7211C5_nt

#else // __cplusplus

extern void _ZN10S7211C5_ntC1Ev();
extern void _ZN10S7211C5_ntD1Ev();
Name_Map name_map_S7211C5_nt[] = {
  NSPAIR(_ZN10S7211C5_ntC1Ev),
  NSPAIR(_ZN10S7211C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7211C5_nt[];
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
static  VTBL_ENTRY vtc_S7211C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7211C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S7211C5_nt[];
VTBL_ENTRY *P__ZTI10S7211C5_nt = _ZTI10S7211C5_nt; 
extern  VTBL_ENTRY _ZTV10S7211C5_nt[];
Class_Descriptor cd_S7211C5_nt = {  "S7211C5_nt", // class name
  0,0,//no base classes
  &(vtc_S7211C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7211C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7211C5_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7211C4  : S7211C5_nt {
  void *s7211c4f0;
  virtual  ~S7211C4(); // _ZN7S7211C4D1Ev
  virtual void  v6(); // _ZN7S7211C42v6Ev
  virtual void  v7(); // _ZN7S7211C42v7Ev
  virtual void  v8(); // _ZN7S7211C42v8Ev
  virtual void  v9(); // _ZN7S7211C42v9Ev
  virtual void  v10(); // _ZN7S7211C43v10Ev
  S7211C4(); // tgen
};
//SIG(-1 S7211C4) C1{ BC2{ v6 v7 v8} vd v1 v2 v3 v4 v5 Fp}


 S7211C4 ::~S7211C4(){ note_dtor("S7211C4", this);}
void  S7211C4 ::v6(){vfunc_called(this, "_ZN7S7211C42v6Ev");}
void  S7211C4 ::v7(){vfunc_called(this, "_ZN7S7211C42v7Ev");}
void  S7211C4 ::v8(){vfunc_called(this, "_ZN7S7211C42v8Ev");}
void  S7211C4 ::v9(){vfunc_called(this, "_ZN7S7211C42v9Ev");}
void  S7211C4 ::v10(){vfunc_called(this, "_ZN7S7211C43v10Ev");}
S7211C4 ::S7211C4(){ note_ctor("S7211C4", this);} // tgen

static void Test_S7211C4()
{
  extern Class_Descriptor cd_S7211C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7211C4, buf);
    S7211C4 *dp, &lv = *(dp=new (buf) S7211C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7211C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7211C4)");
    check_base_class_offset(lv, (S7211C5_nt*), 0, "S7211C4");
    check_field_offset(lv, s7211c4f0, ABISELECT(8,4), "S7211C4.s7211c4f0");
    test_class_info(&lv, &cd_S7211C4);
    dp->~S7211C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7211C4(Test_S7211C4, "S7211C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7211C4C1Ev();
extern void _ZN7S7211C4D1Ev();
Name_Map name_map_S7211C4[] = {
  NSPAIR(_ZN7S7211C4C1Ev),
  NSPAIR(_ZN7S7211C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7211C5_nt;
extern VTBL_ENTRY _ZTI10S7211C5_nt[];
extern  VTBL_ENTRY _ZTV10S7211C5_nt[];
static Base_Class bases_S7211C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7211C5_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 _ZTI7S7211C4[];
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void _ZN7S7211C4D1Ev();
extern void _ZN7S7211C4D0Ev();
extern void _ZN7S7211C42v6Ev();
extern void _ZN7S7211C42v7Ev();
extern void _ZN7S7211C42v8Ev();
extern void _ZN7S7211C42v9Ev();
extern void _ZN7S7211C43v10Ev();
static  VTBL_ENTRY vtc_S7211C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7211C4[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S7211C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7211C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7211C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S7211C4[];
extern  VTBL_ENTRY _ZTV7S7211C4[];
Class_Descriptor cd_S7211C4 = {  "S7211C4", // class name
  bases_S7211C4, 1,
  &(vtc_S7211C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7211C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7211C4),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  S7211C6  {
  ::S7211C5_nt s7211c6f0;
  __tsi64 s7211c6f1;
  long double s7211c6f2;
  virtual void  v11(); // _ZN7S7211C63v11Ev
  virtual void  v12(); // _ZN7S7211C63v12Ev
  virtual void  v13(); // _ZN7S7211C63v13Ev
  virtual void  v14(); // _ZN7S7211C63v14Ev
  virtual void  v15(); // _ZN7S7211C63v15Ev
  virtual void  v16(); // _ZN7S7211C63v16Ev
  ~S7211C6(); // tgen
  S7211C6(); // tgen
};
//SIG(-1 S7211C6) C1{ v1 v2 v3 v4 v5 v6 FC2{ v7 v8 v9} FL FD}


void  S7211C6 ::v11(){vfunc_called(this, "_ZN7S7211C63v11Ev");}
void  S7211C6 ::v12(){vfunc_called(this, "_ZN7S7211C63v12Ev");}
void  S7211C6 ::v13(){vfunc_called(this, "_ZN7S7211C63v13Ev");}
void  S7211C6 ::v14(){vfunc_called(this, "_ZN7S7211C63v14Ev");}
void  S7211C6 ::v15(){vfunc_called(this, "_ZN7S7211C63v15Ev");}
void  S7211C6 ::v16(){vfunc_called(this, "_ZN7S7211C63v16Ev");}
S7211C6 ::~S7211C6(){ note_dtor("S7211C6", this);} // tgen
S7211C6 ::S7211C6(){ note_ctor("S7211C6", this);} // tgen

static void Test_S7211C6()
{
  extern Class_Descriptor cd_S7211C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S7211C6, buf);
    S7211C6 *dp, &lv = *(dp=new (buf) S7211C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7211C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7211C6)");
    check_field_offset(lv, s7211c6f0, ABISELECT(8,4), "S7211C6.s7211c6f0");
    check_field_offset(lv, s7211c6f1, ABISELECT(16,8), "S7211C6.s7211c6f1");
    check_field_offset(lv, s7211c6f2, ABISELECT(32,16), "S7211C6.s7211c6f2");
    test_class_info(&lv, &cd_S7211C6);
    dp->~S7211C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7211C6(Test_S7211C6, "S7211C6", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S7211C6C1Ev();
extern void _ZN7S7211C6D1Ev();
Name_Map name_map_S7211C6[] = {
  NSPAIR(_ZN7S7211C6C1Ev),
  NSPAIR(_ZN7S7211C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7211C6[];
extern void _ZN7S7211C63v11Ev();
extern void _ZN7S7211C63v12Ev();
extern void _ZN7S7211C63v13Ev();
extern void _ZN7S7211C63v14Ev();
extern void _ZN7S7211C63v15Ev();
extern void _ZN7S7211C63v16Ev();
static  VTBL_ENTRY vtc_S7211C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7211C6[0]),
  (VTBL_ENTRY)&_ZN7S7211C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v16Ev,
};
extern VTBL_ENTRY _ZTI7S7211C6[];
extern  VTBL_ENTRY _ZTV7S7211C6[];
Class_Descriptor cd_S7211C6 = {  "S7211C6", // class name
  0,0,//no base classes
  &(vtc_S7211C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S7211C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7211C6),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7211C3  : S7211C4 , S7211C6 {
  void *s7211c3f0;
  virtual  ~S7211C3(); // _ZN7S7211C3D1Ev
  virtual void  v17(); // _ZN7S7211C33v17Ev
  virtual void  v18(); // _ZN7S7211C33v18Ev
  virtual void  v19(); // _ZN7S7211C33v19Ev
  virtual void  v20(); // _ZN7S7211C33v20Ev
  virtual void  v21(); // _ZN7S7211C33v21Ev
  S7211C3(); // tgen
};
//SIG(-1 S7211C3) C1{ BC2{ BC3{ v6 v7 v8} vd v9 v10 v11 v12 v13 Fp} BC4{ v14 v15 v16 v17 v18 v19 FC3 FL FD} vd v1 v2 v3 v4 v5 Fp}


 S7211C3 ::~S7211C3(){ note_dtor("S7211C3", this);}
void  S7211C3 ::v17(){vfunc_called(this, "_ZN7S7211C33v17Ev");}
void  S7211C3 ::v18(){vfunc_called(this, "_ZN7S7211C33v18Ev");}
void  S7211C3 ::v19(){vfunc_called(this, "_ZN7S7211C33v19Ev");}
void  S7211C3 ::v20(){vfunc_called(this, "_ZN7S7211C33v20Ev");}
void  S7211C3 ::v21(){vfunc_called(this, "_ZN7S7211C33v21Ev");}
S7211C3 ::S7211C3(){ note_ctor("S7211C3", this);} // tgen

static void Test_S7211C3()
{
  extern Class_Descriptor cd_S7211C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,11)];
    init_test(&cd_S7211C3, buf);
    S7211C3 *dp, &lv = *(dp=new (buf) S7211C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S7211C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7211C3)");
    check_base_class_offset(lv, (S7211C5_nt*)(S7211C4*), 0, "S7211C3");
    check_base_class_offset(lv, (S7211C4*), 0, "S7211C3");
    check_base_class_offset(lv, (S7211C6*), ABISELECT(16,8), "S7211C3");
    check_field_offset(lv, s7211c3f0, ABISELECT(64,36), "S7211C3.s7211c3f0");
    test_class_info(&lv, &cd_S7211C3);
    dp->~S7211C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7211C3(Test_S7211C3, "S7211C3", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN7S7211C3C1Ev();
extern void _ZN7S7211C3D1Ev();
Name_Map name_map_S7211C3[] = {
  NSPAIR(_ZN7S7211C3C1Ev),
  NSPAIR(_ZN7S7211C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7211C5_nt;
extern VTBL_ENTRY _ZTI10S7211C5_nt[];
extern  VTBL_ENTRY _ZTV10S7211C5_nt[];
extern Class_Descriptor cd_S7211C4;
extern VTBL_ENTRY _ZTI7S7211C4[];
extern  VTBL_ENTRY _ZTV7S7211C4[];
extern Class_Descriptor cd_S7211C6;
extern VTBL_ENTRY _ZTI7S7211C6[];
extern  VTBL_ENTRY _ZTV7S7211C6[];
static Base_Class bases_S7211C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7211C5_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_S7211C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7211C6,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_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 _ZTI7S7211C3[];
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void _ZN7S7211C3D1Ev();
extern void _ZN7S7211C3D0Ev();
extern void _ZN7S7211C42v6Ev();
extern void _ZN7S7211C42v7Ev();
extern void _ZN7S7211C42v8Ev();
extern void _ZN7S7211C42v9Ev();
extern void _ZN7S7211C43v10Ev();
extern void _ZN7S7211C33v17Ev();
extern void _ZN7S7211C33v18Ev();
extern void _ZN7S7211C33v19Ev();
extern void _ZN7S7211C33v20Ev();
extern void _ZN7S7211C33v21Ev();
extern void _ZN7S7211C63v11Ev();
extern void _ZN7S7211C63v12Ev();
extern void _ZN7S7211C63v13Ev();
extern void _ZN7S7211C63v14Ev();
extern void _ZN7S7211C63v15Ev();
extern void _ZN7S7211C63v16Ev();
static  VTBL_ENTRY vtc_S7211C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7211C3[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S7211C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7211C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7211C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v21Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7211C3[0]),
  (VTBL_ENTRY)&_ZN7S7211C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v16Ev,
};
extern VTBL_ENTRY _ZTI7S7211C3[];
extern  VTBL_ENTRY _ZTV7S7211C3[];
Class_Descriptor cd_S7211C3 = {  "S7211C3", // class name
  bases_S7211C3, 3,
  &(vtc_S7211C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI7S7211C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7211C3),25, //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  S7211C2  : virtual S7211C3 {
  int s7211c2f0;
  virtual  ~S7211C2(); // _ZN7S7211C2D2Ev
  virtual void  v22(); // _ZN7S7211C23v22Ev
  virtual void  v23(); // _ZN7S7211C23v23Ev
  virtual void  v24(); // _ZN7S7211C23v24Ev
  S7211C2(); // tgen
};
//SIG(-1 S7211C2) C1{ VBC2{ BC3{ BC4{ v4 v5 v6} vd v7 v8 v9 v10 v11 Fp} BC5{ v12 v13 v14 v15 v16 v17 FC4 FL FD} vd v18 v19 v20 v21 v22 Fp} vd v1 v2 v3 Fi}


 S7211C2 ::~S7211C2(){ note_dtor("S7211C2", this);}
void  S7211C2 ::v22(){vfunc_called(this, "_ZN7S7211C23v22Ev");}
void  S7211C2 ::v23(){vfunc_called(this, "_ZN7S7211C23v23Ev");}
void  S7211C2 ::v24(){vfunc_called(this, "_ZN7S7211C23v24Ev");}
S7211C2 ::S7211C2(){ note_ctor("S7211C2", this);} // tgen

static void Test_S7211C2()
{
  extern Class_Descriptor cd_S7211C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S7211C2, buf);
    S7211C2 *dp, &lv = *(dp=new (buf) S7211C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S7211C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7211C2)");
    check_base_class_offset(lv, (S7211C5_nt*)(S7211C4*)(S7211C3*), ABISELECT(16,8), "S7211C2");
    check_base_class_offset(lv, (S7211C4*)(S7211C3*), ABISELECT(16,8), "S7211C2");
    check_base_class_offset(lv, (S7211C6*)(S7211C3*), ABISELECT(32,16), "S7211C2");
    check_base_class_offset(lv, (S7211C3*), ABISELECT(16,8), "S7211C2");
    check_field_offset(lv, s7211c2f0, ABISELECT(8,4), "S7211C2.s7211c2f0");
    test_class_info(&lv, &cd_S7211C2);
    dp->~S7211C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7211C2(Test_S7211C2, "S7211C2", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S7211C2C1Ev();
extern void _ZN7S7211C2D2Ev();
Name_Map name_map_S7211C2[] = {
  NSPAIR(_ZN7S7211C2C1Ev),
  NSPAIR(_ZN7S7211C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7211C5_nt;
extern VTBL_ENTRY _ZTI10S7211C5_nt[];
extern  VTBL_ENTRY _ZTV10S7211C5_nt[];
extern Class_Descriptor cd_S7211C4;
extern VTBL_ENTRY _ZTI7S7211C4[];
extern  VTBL_ENTRY _ZTV7S7211C4[];
extern Class_Descriptor cd_S7211C6;
extern VTBL_ENTRY _ZTI7S7211C6[];
extern  VTBL_ENTRY _ZTV7S7211C6[];
extern Class_Descriptor cd_S7211C3;
extern VTBL_ENTRY _ZTI7S7211C3[];
extern  VTBL_ENTRY _ZTV7S7211C3[];
static Base_Class bases_S7211C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7211C5_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
  0, 0},
  {&cd_S7211C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7211C6,    ABISELECT(32,16), //bcp->offset
    45, //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
    3, //immediately_derived
  0, 0},
  {&cd_S7211C3,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7211C2[];
extern void _ZN7S7211C2D1Ev();
extern void _ZN7S7211C2D0Ev();
extern void _ZN7S7211C23v22Ev();
extern void _ZN7S7211C23v23Ev();
extern void _ZN7S7211C23v24Ev();
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7211C2D1Ev,_ZTv0_n24_N7S7211C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7211C2D1Ev,_ZThn8_N7S7211C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7211C2D0Ev,_ZTv0_n24_N7S7211C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7211C2D0Ev,_ZThn8_N7S7211C2D0Ev)() __attribute__((weak));
extern void _ZN7S7211C42v6Ev();
extern void _ZN7S7211C42v7Ev();
extern void _ZN7S7211C42v8Ev();
extern void _ZN7S7211C42v9Ev();
extern void _ZN7S7211C43v10Ev();
extern void _ZN7S7211C33v17Ev();
extern void _ZN7S7211C33v18Ev();
extern void _ZN7S7211C33v19Ev();
extern void _ZN7S7211C33v20Ev();
extern void _ZN7S7211C33v21Ev();
extern void _ZN7S7211C63v11Ev();
extern void _ZN7S7211C63v12Ev();
extern void _ZN7S7211C63v13Ev();
extern void _ZN7S7211C63v14Ev();
extern void _ZN7S7211C63v15Ev();
extern void _ZN7S7211C63v16Ev();
static  VTBL_ENTRY vtc_S7211C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7211C2[0]),
  (VTBL_ENTRY)&_ZN7S7211C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7211C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7211C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7211C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7211C23v24Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7211C2[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C2D1Ev,_ZTv0_n24_N7S7211C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C2D0Ev,_ZTv0_n24_N7S7211C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7211C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7211C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v21Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7211C2[0]),
  (VTBL_ENTRY)&_ZN7S7211C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v16Ev,
};
extern VTBL_ENTRY _ZTV7S7211C2[];
static  VTT_ENTRY vtt_S7211C2[] = {
  {&(_ZTV7S7211C2[3]),  3,53},
  {&(_ZTV7S7211C2[30]),  30,53},
  {&(_ZTV7S7211C2[47]),  47,53},
};
extern VTBL_ENTRY _ZTI7S7211C2[];
extern  VTBL_ENTRY _ZTV7S7211C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7211C2[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7211C2D0Ev,_ZTv0_n24_N7S7211C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7211C2D0Ev,_ZThn8_N7S7211C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7211C2D1Ev,_ZTv0_n24_N7S7211C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7211C2D1Ev,_ZThn8_N7S7211C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7211C2 = {  "S7211C2", // class name
  bases_S7211C2, 4,
  &(vtc_S7211C2[0]), // expected_vtbl_contents
  &(vtt_S7211C2[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S7211C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7211C2),53, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7211C2),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7211C8  : virtual S7211C3 {
  void *s7211c8f0;
  short s7211c8f1;
  virtual void  v25(); // _ZN7S7211C83v25Ev
  virtual void  v26(); // _ZN7S7211C83v26Ev
  virtual void  v27(); // _ZN7S7211C83v27Ev
  virtual void  v28(); // _ZN7S7211C83v28Ev
  virtual void  v29(); // _ZN7S7211C83v29Ev
  virtual void  v30(); // _ZN7S7211C83v30Ev
  virtual void  v31(); // _ZN7S7211C83v31Ev
  virtual void  v32(); // _ZN7S7211C83v32Ev
  ~S7211C8(); // tgen
  S7211C8(); // tgen
};
//SIG(-1 S7211C8) C1{ VBC2{ BC3{ BC4{ v9 v10 v11} vd v12 v13 v14 v15 v16 Fp} BC5{ v17 v18 v19 v20 v21 v22 FC4 FL FD} vd v23 v24 v25 v26 v27 Fp} v1 v2 v3 v4 v5 v6 v7 v8 Fp Fs}


void  S7211C8 ::v25(){vfunc_called(this, "_ZN7S7211C83v25Ev");}
void  S7211C8 ::v26(){vfunc_called(this, "_ZN7S7211C83v26Ev");}
void  S7211C8 ::v27(){vfunc_called(this, "_ZN7S7211C83v27Ev");}
void  S7211C8 ::v28(){vfunc_called(this, "_ZN7S7211C83v28Ev");}
void  S7211C8 ::v29(){vfunc_called(this, "_ZN7S7211C83v29Ev");}
void  S7211C8 ::v30(){vfunc_called(this, "_ZN7S7211C83v30Ev");}
void  S7211C8 ::v31(){vfunc_called(this, "_ZN7S7211C83v31Ev");}
void  S7211C8 ::v32(){vfunc_called(this, "_ZN7S7211C83v32Ev");}
S7211C8 ::~S7211C8(){ note_dtor("S7211C8", this);} // tgen
S7211C8 ::S7211C8(){ note_ctor("S7211C8", this);} // tgen

static void Test_S7211C8()
{
  extern Class_Descriptor cd_S7211C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,14)];
    init_test(&cd_S7211C8, buf);
    S7211C8 *dp, &lv = *(dp=new (buf) S7211C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,52), "sizeof(S7211C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7211C8)");
    check_base_class_offset(lv, (S7211C5_nt*)(S7211C4*)(S7211C3*), ABISELECT(32,12), "S7211C8");
    check_base_class_offset(lv, (S7211C4*)(S7211C3*), ABISELECT(32,12), "S7211C8");
    check_base_class_offset(lv, (S7211C6*)(S7211C3*), ABISELECT(48,20), "S7211C8");
    check_base_class_offset(lv, (S7211C3*), ABISELECT(32,12), "S7211C8");
    check_field_offset(lv, s7211c8f0, ABISELECT(8,4), "S7211C8.s7211c8f0");
    check_field_offset(lv, s7211c8f1, ABISELECT(16,8), "S7211C8.s7211c8f1");
    test_class_info(&lv, &cd_S7211C8);
    dp->~S7211C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7211C8(Test_S7211C8, "S7211C8", ABISELECT(112,52));

#else // __cplusplus

extern void _ZN7S7211C8C1Ev();
extern void _ZN7S7211C8D1Ev();
Name_Map name_map_S7211C8[] = {
  NSPAIR(_ZN7S7211C8C1Ev),
  NSPAIR(_ZN7S7211C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7211C5_nt;
extern VTBL_ENTRY _ZTI10S7211C5_nt[];
extern  VTBL_ENTRY _ZTV10S7211C5_nt[];
extern Class_Descriptor cd_S7211C4;
extern VTBL_ENTRY _ZTI7S7211C4[];
extern  VTBL_ENTRY _ZTV7S7211C4[];
extern Class_Descriptor cd_S7211C6;
extern VTBL_ENTRY _ZTI7S7211C6[];
extern  VTBL_ENTRY _ZTV7S7211C6[];
extern Class_Descriptor cd_S7211C3;
extern VTBL_ENTRY _ZTI7S7211C3[];
extern  VTBL_ENTRY _ZTV7S7211C3[];
static Base_Class bases_S7211C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7211C5_nt,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7211C4,    ABISELECT(32,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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7211C6,    ABISELECT(48,20), //bcp->offset
    50, //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
    3, //immediately_derived
  0, 0},
  {&cd_S7211C3,    ABISELECT(32,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7211C8[];
extern void _ZN7S7211C83v25Ev();
extern void _ZN7S7211C83v26Ev();
extern void _ZN7S7211C83v27Ev();
extern void _ZN7S7211C83v28Ev();
extern void _ZN7S7211C83v29Ev();
extern void _ZN7S7211C83v30Ev();
extern void _ZN7S7211C83v31Ev();
extern void _ZN7S7211C83v32Ev();
extern void _ZN7S7211C8D1Ev();
extern void _ZN7S7211C8D0Ev();
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7211C8D1Ev,_ZTv0_n24_N7S7211C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S7211C8D1Ev,_ZThn12_N7S7211C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7211C8D0Ev,_ZTv0_n24_N7S7211C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S7211C8D0Ev,_ZThn12_N7S7211C8D0Ev)() __attribute__((weak));
extern void _ZN7S7211C42v6Ev();
extern void _ZN7S7211C42v7Ev();
extern void _ZN7S7211C42v8Ev();
extern void _ZN7S7211C42v9Ev();
extern void _ZN7S7211C43v10Ev();
extern void _ZN7S7211C33v17Ev();
extern void _ZN7S7211C33v18Ev();
extern void _ZN7S7211C33v19Ev();
extern void _ZN7S7211C33v20Ev();
extern void _ZN7S7211C33v21Ev();
extern void _ZN7S7211C63v11Ev();
extern void _ZN7S7211C63v12Ev();
extern void _ZN7S7211C63v13Ev();
extern void _ZN7S7211C63v14Ev();
extern void _ZN7S7211C63v15Ev();
extern void _ZN7S7211C63v16Ev();
static  VTBL_ENTRY vtc_S7211C8[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7211C8[0]),
  (VTBL_ENTRY)&_ZN7S7211C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v32Ev,
  (VTBL_ENTRY)&_ZN7S7211C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7211C8D0Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7211C8[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C8D1Ev,_ZTv0_n24_N7S7211C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C8D0Ev,_ZTv0_n24_N7S7211C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7211C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7211C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v21Ev,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S7211C8[0]),
  (VTBL_ENTRY)&_ZN7S7211C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v16Ev,
};
extern VTBL_ENTRY _ZTV7S7211C8[];
static  VTT_ENTRY vtt_S7211C8[] = {
  {&(_ZTV7S7211C8[3]),  3,58},
  {&(_ZTV7S7211C8[35]),  35,58},
  {&(_ZTV7S7211C8[52]),  52,58},
};
extern VTBL_ENTRY _ZTI7S7211C8[];
extern  VTBL_ENTRY _ZTV7S7211C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7211C8[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7211C8D0Ev,_ZTv0_n24_N7S7211C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7211C8D0Ev,_ZThn12_N7S7211C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7211C8D1Ev,_ZTv0_n24_N7S7211C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7211C8D1Ev,_ZThn12_N7S7211C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7211C8 = {  "S7211C8", // class name
  bases_S7211C8, 4,
  &(vtc_S7211C8[0]), // expected_vtbl_contents
  &(vtt_S7211C8[0]), // expected_vtt_contents
  ABISELECT(112,52), // object size
  NSPAIRA(_ZTI7S7211C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7211C8),58, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7211C8),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7211C7  : S7211C5_nt , virtual S7211C8 {
  long s7211c7f0;
  __tsi64 s7211c7f1;
  virtual void  v33(); // _ZN7S7211C73v33Ev
  virtual void  v34(); // _ZN7S7211C73v34Ev
  ~S7211C7(); // tgen
  S7211C7(); // tgen
};
//SIG(-1 S7211C7) C1{ BC2{ v3 v4 v5} VBC3{ VBC4{ BC5{ BC2 vd v6 v7 v8 v9 v10 Fp} BC6{ v11 v12 v13 v14 v15 v16 FC2 FL FD} vd v17 v18 v19 v20 v21 Fp} v22 v23 v24 v25 v26 v27 v28 v29 Fp Fs} v1 v2 Fl FL}


void  S7211C7 ::v33(){vfunc_called(this, "_ZN7S7211C73v33Ev");}
void  S7211C7 ::v34(){vfunc_called(this, "_ZN7S7211C73v34Ev");}
S7211C7 ::~S7211C7(){ note_dtor("S7211C7", this);} // tgen
S7211C7 ::S7211C7(){ note_ctor("S7211C7", this);} // tgen

static void Test_S7211C7()
{
  extern Class_Descriptor cd_S7211C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,18)];
    init_test(&cd_S7211C7, buf);
    S7211C7 *dp, &lv = *(dp=new (buf) S7211C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S7211C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7211C7)");
    /*is_ambiguous_... S7211C7::S7211C5_nt */ AMB_check_base_class_offset(lv, (S7211C5_nt*), 0, "S7211C7");
    check_base_class_offset(lv, (S7211C5_nt*)(S7211C4*)(S7211C3*), ABISELECT(48,28), "S7211C7");
    check_base_class_offset(lv, (S7211C4*)(S7211C3*), ABISELECT(48,28), "S7211C7");
    check_base_class_offset(lv, (S7211C6*)(S7211C3*), ABISELECT(64,36), "S7211C7");
    check_base_class_offset(lv, (S7211C3*)(S7211C8*), ABISELECT(48,28), "S7211C7");
    check_base_class_offset(lv, (S7211C8*), ABISELECT(24,16), "S7211C7");
    check_field_offset(lv, s7211c7f0, ABISELECT(8,4), "S7211C7.s7211c7f0");
    check_field_offset(lv, s7211c7f1, ABISELECT(16,8), "S7211C7.s7211c7f1");
    test_class_info(&lv, &cd_S7211C7);
    dp->~S7211C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7211C7(Test_S7211C7, "S7211C7", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN7S7211C7C1Ev();
extern void _ZN7S7211C7D1Ev();
Name_Map name_map_S7211C7[] = {
  NSPAIR(_ZN7S7211C7C1Ev),
  NSPAIR(_ZN7S7211C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7211C5_nt;
extern VTBL_ENTRY _ZTI10S7211C5_nt[];
extern  VTBL_ENTRY _ZTV10S7211C5_nt[];
extern Class_Descriptor cd_S7211C5_nt;
extern VTBL_ENTRY _ZTI10S7211C5_nt[];
extern  VTBL_ENTRY _ZTV10S7211C5_nt[];
extern Class_Descriptor cd_S7211C4;
extern VTBL_ENTRY _ZTI7S7211C4[];
extern  VTBL_ENTRY _ZTV7S7211C4[];
extern Class_Descriptor cd_S7211C6;
extern VTBL_ENTRY _ZTI7S7211C6[];
extern  VTBL_ENTRY _ZTV7S7211C6[];
extern Class_Descriptor cd_S7211C3;
extern VTBL_ENTRY _ZTI7S7211C3[];
extern  VTBL_ENTRY _ZTV7S7211C3[];
extern Class_Descriptor cd_S7211C8;
extern VTBL_ENTRY _ZTI7S7211C8[];
extern  VTBL_ENTRY _ZTV7S7211C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7211C8[];
static Base_Class bases_S7211C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7211C5_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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7211C5_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_S7211C4,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7211C6,    ABISELECT(64,36), //bcp->offset
    70, //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
    4, //immediately_derived
  0, 0},
  {&cd_S7211C3,    ABISELECT(48,28), //bcp->offset
    33, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7211C8,    ABISELECT(24,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7211C7[];
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void _ZN7S7211C73v33Ev();
extern void _ZN7S7211C73v34Ev();
extern void _ZN7S7211C7D1Ev();
extern void _ZN7S7211C7D0Ev();
extern void _ZN7S7211C83v25Ev();
extern void _ZN7S7211C83v26Ev();
extern void _ZN7S7211C83v27Ev();
extern void _ZN7S7211C83v28Ev();
extern void _ZN7S7211C83v29Ev();
extern void _ZN7S7211C83v30Ev();
extern void _ZN7S7211C83v31Ev();
extern void _ZN7S7211C83v32Ev();
extern void ABISELECT(_ZTv0_n96_N7S7211C7D1Ev,_ZTv0_n48_N7S7211C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7211C7D1Ev,_ZThn16_N7S7211C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7211C7D0Ev,_ZTv0_n48_N7S7211C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7211C7D0Ev,_ZThn16_N7S7211C7D0Ev)() __attribute__((weak));
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7211C7D1Ev,_ZTv0_n24_N7S7211C7D1Ev)();
extern void ABISELECT(_ZThn48_N7S7211C7D1Ev,_ZThn28_N7S7211C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7211C7D0Ev,_ZTv0_n24_N7S7211C7D0Ev)();
extern void ABISELECT(_ZThn48_N7S7211C7D0Ev,_ZThn28_N7S7211C7D0Ev)() __attribute__((weak));
extern void _ZN7S7211C42v6Ev();
extern void _ZN7S7211C42v7Ev();
extern void _ZN7S7211C42v8Ev();
extern void _ZN7S7211C42v9Ev();
extern void _ZN7S7211C43v10Ev();
extern void _ZN7S7211C33v17Ev();
extern void _ZN7S7211C33v18Ev();
extern void _ZN7S7211C33v19Ev();
extern void _ZN7S7211C33v20Ev();
extern void _ZN7S7211C33v21Ev();
extern void _ZN7S7211C63v11Ev();
extern void _ZN7S7211C63v12Ev();
extern void _ZN7S7211C63v13Ev();
extern void _ZN7S7211C63v14Ev();
extern void _ZN7S7211C63v15Ev();
extern void _ZN7S7211C63v16Ev();
static  VTBL_ENTRY vtc_S7211C7[] = {
  ABISELECT(48,28),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7211C7[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S7211C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7211C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7211C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7211C7D0Ev,
  ABISELECT(-24,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7211C7[0]),
  (VTBL_ENTRY)&_ZN7S7211C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7211C7D1Ev,_ZTv0_n48_N7S7211C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7211C7D0Ev,_ZTv0_n48_N7S7211C7D0Ev),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7211C7[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C7D1Ev,_ZTv0_n24_N7S7211C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C7D0Ev,_ZTv0_n24_N7S7211C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7211C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7211C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v21Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7211C7[0]),
  (VTBL_ENTRY)&_ZN7S7211C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v16Ev,
};
extern VTBL_ENTRY _ZTV7S7211C7[];
extern void _ZN7S7211C83v25Ev();
extern void _ZN7S7211C83v26Ev();
extern void _ZN7S7211C83v27Ev();
extern void _ZN7S7211C83v28Ev();
extern void _ZN7S7211C83v29Ev();
extern void _ZN7S7211C83v30Ev();
extern void _ZN7S7211C83v31Ev();
extern void _ZN7S7211C83v32Ev();
extern void _ZN7S7211C8D1Ev();
extern void _ZN7S7211C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7211C8__7S7211C7[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7211C8[0]),
  (VTBL_ENTRY)&_ZN7S7211C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v32Ev,
  (VTBL_ENTRY)&_ZN7S7211C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7211C8D0Ev,
};
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7211C8D1Ev,_ZTv0_n24_N7S7211C8D1Ev)();
extern void ABISELECT(_ZThn24_N7S7211C8D1Ev,_ZThn12_N7S7211C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7211C8D0Ev,_ZTv0_n24_N7S7211C8D0Ev)();
extern void ABISELECT(_ZThn24_N7S7211C8D0Ev,_ZThn12_N7S7211C8D0Ev)() __attribute__((weak));
extern void _ZN7S7211C42v6Ev();
extern void _ZN7S7211C42v7Ev();
extern void _ZN7S7211C42v8Ev();
extern void _ZN7S7211C42v9Ev();
extern void _ZN7S7211C43v10Ev();
extern void _ZN7S7211C33v17Ev();
extern void _ZN7S7211C33v18Ev();
extern void _ZN7S7211C33v19Ev();
extern void _ZN7S7211C33v20Ev();
extern void _ZN7S7211C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7211C3__7S7211C8__7S7211C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7211C8[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C8D1Ev,_ZTv0_n24_N7S7211C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C8D0Ev,_ZTv0_n24_N7S7211C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7211C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7211C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v21Ev,
};
extern void _ZN7S7211C63v11Ev();
extern void _ZN7S7211C63v12Ev();
extern void _ZN7S7211C63v13Ev();
extern void _ZN7S7211C63v14Ev();
extern void _ZN7S7211C63v15Ev();
extern void _ZN7S7211C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7211C67S7211C3__7S7211C8__7S7211C7[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7211C8[0]),
  (VTBL_ENTRY)&_ZN7S7211C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v16Ev,
};
static  VTT_ENTRY vtt_S7211C7[] = {
  {&(_ZTV7S7211C7[4]),  4,78},
  {&(_ZTV7S7211C7[23]),  23,78},
  {&(_ZTV7S7211C7[55]),  55,78},
  {&(_ZTV7S7211C7[72]),  72,78},
  {&(_tg__ZTV7S7211C8__7S7211C7[3]),  3,13},
  {&(_tg__ZTV7S7211C3__7S7211C8__7S7211C7[22]),  22,37},
  {&(_tg__ZTV7S7211C67S7211C3__7S7211C8__7S7211C7[2]),  2,8},
};
extern VTBL_ENTRY _ZTI7S7211C7[];
extern  VTBL_ENTRY _ZTV7S7211C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7211C7[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7211C8D0Ev,_ZTv0_n24_N7S7211C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7211C8D0Ev,_ZThn12_N7S7211C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7211C8D1Ev,_ZTv0_n24_N7S7211C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7211C8D1Ev,_ZThn12_N7S7211C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7211C7D0Ev,_ZTv0_n24_N7S7211C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7211C7D0Ev,_ZThn28_N7S7211C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7211C7D1Ev,_ZTv0_n24_N7S7211C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7211C7D1Ev,_ZThn28_N7S7211C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7211C7D0Ev,_ZTv0_n48_N7S7211C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7211C7D0Ev,_ZThn16_N7S7211C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7211C7D1Ev,_ZTv0_n48_N7S7211C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7211C7D1Ev,_ZThn16_N7S7211C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7211C7 = {  "S7211C7", // class name
  bases_S7211C7, 6,
  &(vtc_S7211C7[0]), // expected_vtbl_contents
  &(vtt_S7211C7[0]), // expected_vtt_contents
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI7S7211C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7211C7),78, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7211C7),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7211C9_nt  {
  virtual void  v35(); // _ZN10S7211C9_nt3v35Ev
  ~S7211C9_nt(); // tgen
  S7211C9_nt(); // tgen
};
//SIG(-1 S7211C9_nt) C1{ v1}


void  S7211C9_nt ::v35(){vfunc_called(this, "_ZN10S7211C9_nt3v35Ev");}
S7211C9_nt ::~S7211C9_nt(){ note_dtor("S7211C9_nt", this);} // tgen
S7211C9_nt ::S7211C9_nt(){ note_ctor("S7211C9_nt", this);} // tgen

//skip512 S7211C9_nt

#else // __cplusplus

extern void _ZN10S7211C9_ntC1Ev();
extern void _ZN10S7211C9_ntD1Ev();
Name_Map name_map_S7211C9_nt[] = {
  NSPAIR(_ZN10S7211C9_ntC1Ev),
  NSPAIR(_ZN10S7211C9_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7211C9_nt[];
extern void _ZN10S7211C9_nt3v35Ev();
static  VTBL_ENTRY vtc_S7211C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7211C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S7211C9_nt3v35Ev,
};
extern VTBL_ENTRY _ZTI10S7211C9_nt[];
VTBL_ENTRY *P__ZTI10S7211C9_nt = _ZTI10S7211C9_nt; 
extern  VTBL_ENTRY _ZTV10S7211C9_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7211C1  : S7211C2 , virtual S7211C7 {
  ::S7211C9_nt s7211c1f0;
  void *s7211c1f1;
  virtual  ~S7211C1(); // _ZN7S7211C1D2Ev
  virtual void  v1(); // _ZN7S7211C12v1Ev
  virtual void  v2(); // _ZN7S7211C12v2Ev
  S7211C1(); // tgen
};
//SIG(1 S7211C1) C1{ BC2{ VBC3{ BC4{ BC5{ v3 v4 v5} vd v6 v7 v8 v9 v10 Fp} BC6{ v11 v12 v13 v14 v15 v16 FC5 FL FD} vd v17 v18 v19 v20 v21 Fp} vd v22 v23 v24 Fi} VBC7{ BC5 VBC8{ VBC3 v25 v26 v27 v28 v29 v30 v31 v32 Fp Fs} v33 v34 Fl FL} vd v1 v2 FC9{ v35} Fp}


 S7211C1 ::~S7211C1(){ note_dtor("S7211C1", this);}
void  S7211C1 ::v1(){vfunc_called(this, "_ZN7S7211C12v1Ev");}
void  S7211C1 ::v2(){vfunc_called(this, "_ZN7S7211C12v2Ev");}
S7211C1 ::S7211C1(){ note_ctor("S7211C1", this);} // tgen

static void Test_S7211C1()
{
  extern Class_Descriptor cd_S7211C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,22)];
    init_test(&cd_S7211C1, buf);
    S7211C1 *dp, &lv = *(dp=new (buf) S7211C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,84), "sizeof(S7211C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7211C1)");
    check_base_class_offset(lv, (S7211C5_nt*)(S7211C4*)(S7211C3*), ABISELECT(32,16), "S7211C1");
    check_base_class_offset(lv, (S7211C4*)(S7211C3*), ABISELECT(32,16), "S7211C1");
    check_base_class_offset(lv, (S7211C6*)(S7211C3*), ABISELECT(48,24), "S7211C1");
    check_base_class_offset(lv, (S7211C3*)(S7211C2*), ABISELECT(32,16), "S7211C1");
    check_base_class_offset(lv, (S7211C3*)(S7211C8*), ABISELECT(32,16), "S7211C1");
    check_base_class_offset(lv, (S7211C2*), 0, "S7211C1");
    /*is_ambiguous_... S7211C7::S7211C5_nt */ AMB_check_base_class_offset(lv, (S7211C5_nt*)(S7211C7*), ABISELECT(104,56), "S7211C1");
    check_base_class_offset(lv, (S7211C8*)(S7211C7*), ABISELECT(128,72), "S7211C1");
    check_base_class_offset(lv, (S7211C7*), ABISELECT(104,56), "S7211C1");
    check_field_offset(lv, s7211c1f0, ABISELECT(16,8), "S7211C1.s7211c1f0");
    check_field_offset(lv, s7211c1f1, ABISELECT(24,12), "S7211C1.s7211c1f1");
    test_class_info(&lv, &cd_S7211C1);
    dp->~S7211C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7211C1(Test_S7211C1, "S7211C1", ABISELECT(160,84));

#else // __cplusplus

extern void _ZN7S7211C1C1Ev();
extern void _ZN7S7211C1D2Ev();
Name_Map name_map_S7211C1[] = {
  NSPAIR(_ZN7S7211C1C1Ev),
  NSPAIR(_ZN7S7211C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7211C5_nt;
extern VTBL_ENTRY _ZTI10S7211C5_nt[];
extern  VTBL_ENTRY _ZTV10S7211C5_nt[];
extern Class_Descriptor cd_S7211C4;
extern VTBL_ENTRY _ZTI7S7211C4[];
extern  VTBL_ENTRY _ZTV7S7211C4[];
extern Class_Descriptor cd_S7211C6;
extern VTBL_ENTRY _ZTI7S7211C6[];
extern  VTBL_ENTRY _ZTV7S7211C6[];
extern Class_Descriptor cd_S7211C3;
extern VTBL_ENTRY _ZTI7S7211C3[];
extern  VTBL_ENTRY _ZTV7S7211C3[];
extern Class_Descriptor cd_S7211C2;
extern VTBL_ENTRY _ZTI7S7211C2[];
extern  VTBL_ENTRY _ZTV7S7211C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7211C2[];
extern Class_Descriptor cd_S7211C5_nt;
extern VTBL_ENTRY _ZTI10S7211C5_nt[];
extern  VTBL_ENTRY _ZTV10S7211C5_nt[];
extern Class_Descriptor cd_S7211C8;
extern VTBL_ENTRY _ZTI7S7211C8[];
extern  VTBL_ENTRY _ZTV7S7211C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7211C8[];
extern Class_Descriptor cd_S7211C7;
extern VTBL_ENTRY _ZTI7S7211C7[];
extern  VTBL_ENTRY _ZTV7S7211C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7211C7[];
static Base_Class bases_S7211C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7211C5_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7211C4,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7211C6,    ABISELECT(48,24), //bcp->offset
    49, //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
    3, //immediately_derived
  0, 0},
  {&cd_S7211C3,    ABISELECT(32,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    22, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7211C2,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7211C5_nt,    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
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7211C8,    ABISELECT(128,72), //bcp->offset
    74, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7211C7,    ABISELECT(104,56), //bcp->offset
    57, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7211C1[];
extern void _ZN7S7211C1D1Ev();
extern void _ZN7S7211C1D0Ev();
extern void _ZN7S7211C23v22Ev();
extern void _ZN7S7211C23v23Ev();
extern void _ZN7S7211C23v24Ev();
extern void _ZN7S7211C12v1Ev();
extern void _ZN7S7211C12v2Ev();
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7211C1D1Ev,_ZTv0_n24_N7S7211C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7211C1D1Ev,_ZThn16_N7S7211C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7211C1D0Ev,_ZTv0_n24_N7S7211C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7211C1D0Ev,_ZThn16_N7S7211C1D0Ev)() __attribute__((weak));
extern void _ZN7S7211C42v6Ev();
extern void _ZN7S7211C42v7Ev();
extern void _ZN7S7211C42v8Ev();
extern void _ZN7S7211C42v9Ev();
extern void _ZN7S7211C43v10Ev();
extern void _ZN7S7211C33v17Ev();
extern void _ZN7S7211C33v18Ev();
extern void _ZN7S7211C33v19Ev();
extern void _ZN7S7211C33v20Ev();
extern void _ZN7S7211C33v21Ev();
extern void _ZN7S7211C63v11Ev();
extern void _ZN7S7211C63v12Ev();
extern void _ZN7S7211C63v13Ev();
extern void _ZN7S7211C63v14Ev();
extern void _ZN7S7211C63v15Ev();
extern void _ZN7S7211C63v16Ev();
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void _ZN7S7211C73v33Ev();
extern void _ZN7S7211C73v34Ev();
extern void ABISELECT(_ZTv0_n80_N7S7211C1D1Ev,_ZTv0_n40_N7S7211C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S7211C1D1Ev,_ZThn56_N7S7211C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7211C1D0Ev,_ZTv0_n40_N7S7211C1D0Ev)();
extern void ABISELECT(_ZThn104_N7S7211C1D0Ev,_ZThn56_N7S7211C1D0Ev)() __attribute__((weak));
extern void _ZN7S7211C83v25Ev();
extern void _ZN7S7211C83v26Ev();
extern void _ZN7S7211C83v27Ev();
extern void _ZN7S7211C83v28Ev();
extern void _ZN7S7211C83v29Ev();
extern void _ZN7S7211C83v30Ev();
extern void _ZN7S7211C83v31Ev();
extern void _ZN7S7211C83v32Ev();
extern void ABISELECT(_ZTv0_n96_N7S7211C1D1Ev,_ZTv0_n48_N7S7211C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S7211C1D1Ev,_ZThn72_N7S7211C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7211C1D0Ev,_ZTv0_n48_N7S7211C1D0Ev)();
extern void ABISELECT(_ZThn128_N7S7211C1D0Ev,_ZThn72_N7S7211C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7211C1[] = {
  ABISELECT(128,72),
  ABISELECT(104,56),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7211C1[0]),
  (VTBL_ENTRY)&_ZN7S7211C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7211C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7211C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7211C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7211C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7211C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7211C12v2Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7211C1[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C1D1Ev,_ZTv0_n24_N7S7211C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C1D0Ev,_ZTv0_n24_N7S7211C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7211C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7211C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v21Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7211C1[0]),
  (VTBL_ENTRY)&_ZN7S7211C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v16Ev,
  ABISELECT(-104,-56),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-40),
  ABISELECT(24,16),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7211C1[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S7211C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7211C73v34Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7211C1D1Ev,_ZTv0_n40_N7S7211C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7211C1D0Ev,_ZTv0_n40_N7S7211C1D0Ev),
  ABISELECT(-128,-72),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-56),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S7211C1[0]),
  (VTBL_ENTRY)&_ZN7S7211C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7211C1D1Ev,_ZTv0_n48_N7S7211C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7211C1D0Ev,_ZTv0_n48_N7S7211C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7211C1[];
extern void _ZN7S7211C2D1Ev();
extern void _ZN7S7211C2D0Ev();
extern void _ZN7S7211C23v22Ev();
extern void _ZN7S7211C23v23Ev();
extern void _ZN7S7211C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7211C2__7S7211C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7211C2[0]),
  (VTBL_ENTRY)&_ZN7S7211C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7211C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7211C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7211C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7211C23v24Ev,
};
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7211C2D1Ev,_ZTv0_n24_N7S7211C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7211C2D1Ev,_ZThn16_N7S7211C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7211C2D0Ev,_ZTv0_n24_N7S7211C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7211C2D0Ev,_ZThn16_N7S7211C2D0Ev)() __attribute__((weak));
extern void _ZN7S7211C42v6Ev();
extern void _ZN7S7211C42v7Ev();
extern void _ZN7S7211C42v8Ev();
extern void _ZN7S7211C42v9Ev();
extern void _ZN7S7211C43v10Ev();
extern void _ZN7S7211C33v17Ev();
extern void _ZN7S7211C33v18Ev();
extern void _ZN7S7211C33v19Ev();
extern void _ZN7S7211C33v20Ev();
extern void _ZN7S7211C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7211C3__7S7211C2__7S7211C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7211C2[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C2D1Ev,_ZTv0_n24_N7S7211C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C2D0Ev,_ZTv0_n24_N7S7211C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7211C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7211C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v21Ev,
};
extern void _ZN7S7211C63v11Ev();
extern void _ZN7S7211C63v12Ev();
extern void _ZN7S7211C63v13Ev();
extern void _ZN7S7211C63v14Ev();
extern void _ZN7S7211C63v15Ev();
extern void _ZN7S7211C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7211C67S7211C3__7S7211C2__7S7211C1[] = {
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7211C2[0]),
  (VTBL_ENTRY)&_ZN7S7211C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v16Ev,
};
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void _ZN7S7211C73v33Ev();
extern void _ZN7S7211C73v34Ev();
extern void _ZN7S7211C7D1Ev();
extern void _ZN7S7211C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7211C7__7S7211C1[] = {
  ABISELECT(-72,-40),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7211C7[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S7211C73v33Ev,
  (VTBL_ENTRY)&_ZN7S7211C73v34Ev,
  (VTBL_ENTRY)&_ZN7S7211C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7211C7D0Ev,
};
extern void _ZN7S7211C83v25Ev();
extern void _ZN7S7211C83v26Ev();
extern void _ZN7S7211C83v27Ev();
extern void _ZN7S7211C83v28Ev();
extern void _ZN7S7211C83v29Ev();
extern void _ZN7S7211C83v30Ev();
extern void _ZN7S7211C83v31Ev();
extern void _ZN7S7211C83v32Ev();
extern void ABISELECT(_ZTv0_n96_N7S7211C7D1Ev,_ZTv0_n48_N7S7211C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7211C7D1Ev,_ZThn16_N7S7211C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7211C7D0Ev,_ZTv0_n48_N7S7211C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7211C7D0Ev,_ZThn16_N7S7211C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7211C8__7S7211C7__7S7211C1[] = {
  ABISELECT(-24,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-56),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7211C7[0]),
  (VTBL_ENTRY)&_ZN7S7211C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7211C7D1Ev,_ZTv0_n48_N7S7211C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7211C7D0Ev,_ZTv0_n48_N7S7211C7D0Ev),
};
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7211C7D1Ev,_ZTv0_n24_N7S7211C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7211C7D0Ev,_ZTv0_n24_N7S7211C7D0Ev)();
extern void _ZN7S7211C42v6Ev();
extern void _ZN7S7211C42v7Ev();
extern void _ZN7S7211C42v8Ev();
extern void _ZN7S7211C42v9Ev();
extern void _ZN7S7211C43v10Ev();
extern void _ZN7S7211C33v17Ev();
extern void _ZN7S7211C33v18Ev();
extern void _ZN7S7211C33v19Ev();
extern void _ZN7S7211C33v20Ev();
extern void _ZN7S7211C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7211C3__7S7211C7__7S7211C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,40),
  0,
  0,
  0,
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI7S7211C7[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C7D1Ev,_ZTv0_n24_N7S7211C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C7D0Ev,_ZTv0_n24_N7S7211C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7211C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7211C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v21Ev,
};
extern void _ZN7S7211C63v11Ev();
extern void _ZN7S7211C63v12Ev();
extern void _ZN7S7211C63v13Ev();
extern void _ZN7S7211C63v14Ev();
extern void _ZN7S7211C63v15Ev();
extern void _ZN7S7211C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7211C67S7211C3__7S7211C7__7S7211C1[] = {
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7211C7[0]),
  (VTBL_ENTRY)&_ZN7S7211C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v16Ev,
};
extern void _ZN7S7211C83v25Ev();
extern void _ZN7S7211C83v26Ev();
extern void _ZN7S7211C83v27Ev();
extern void _ZN7S7211C83v28Ev();
extern void _ZN7S7211C83v29Ev();
extern void _ZN7S7211C83v30Ev();
extern void _ZN7S7211C83v31Ev();
extern void _ZN7S7211C83v32Ev();
extern void _ZN7S7211C8D1Ev();
extern void _ZN7S7211C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7211C8__7S7211C1[] = {
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7211C8[0]),
  (VTBL_ENTRY)&_ZN7S7211C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v31Ev,
  (VTBL_ENTRY)&_ZN7S7211C83v32Ev,
  (VTBL_ENTRY)&_ZN7S7211C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7211C8D0Ev,
};
extern void _ZN10S7211C5_nt2v3Ev();
extern void _ZN10S7211C5_nt2v4Ev();
extern void _ZN10S7211C5_nt2v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7211C8D1Ev,_ZTv0_n24_N7S7211C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7211C8D0Ev,_ZTv0_n24_N7S7211C8D0Ev)();
extern void _ZN7S7211C42v6Ev();
extern void _ZN7S7211C42v7Ev();
extern void _ZN7S7211C42v8Ev();
extern void _ZN7S7211C42v9Ev();
extern void _ZN7S7211C43v10Ev();
extern void _ZN7S7211C33v17Ev();
extern void _ZN7S7211C33v18Ev();
extern void _ZN7S7211C33v19Ev();
extern void _ZN7S7211C33v20Ev();
extern void _ZN7S7211C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7211C3__7S7211C8__7S7211C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,56),
  0,
  0,
  0,
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI7S7211C8[0]),
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7211C5_nt2v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C8D1Ev,_ZTv0_n24_N7S7211C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7211C8D0Ev,_ZTv0_n24_N7S7211C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7211C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7211C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7211C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7211C33v21Ev,
};
extern void _ZN7S7211C63v11Ev();
extern void _ZN7S7211C63v12Ev();
extern void _ZN7S7211C63v13Ev();
extern void _ZN7S7211C63v14Ev();
extern void _ZN7S7211C63v15Ev();
extern void _ZN7S7211C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7211C67S7211C3__7S7211C8__7S7211C1[] = {
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7211C8[0]),
  (VTBL_ENTRY)&_ZN7S7211C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7211C63v16Ev,
};
static  VTT_ENTRY vtt_S7211C1[] = {
  {&(_ZTV7S7211C1[5]),  5,96},
  {&(_tg__ZTV7S7211C2__7S7211C1[3]),  3,8},
  {&(_tg__ZTV7S7211C3__7S7211C2__7S7211C1[22]),  22,37},
  {&(_tg__ZTV7S7211C67S7211C3__7S7211C2__7S7211C1[2]),  2,8},
  {&(_ZTV7S7211C1[34]),  34,96},
  {&(_ZTV7S7211C1[51]),  51,96},
  {&(_ZTV7S7211C1[67]),  67,96},
  {&(_ZTV7S7211C1[86]),  86,96},
  {&(_tg__ZTV7S7211C7__7S7211C1[4]),  4,11},
  {&(_tg__ZTV7S7211C8__7S7211C7__7S7211C1[12]),  12,22},
  {&(_tg__ZTV7S7211C3__7S7211C7__7S7211C1[22]),  22,37},
  {&(_tg__ZTV7S7211C67S7211C3__7S7211C7__7S7211C1[2]),  2,8},
  {&(_tg__ZTV7S7211C8__7S7211C1[3]),  3,13},
  {&(_tg__ZTV7S7211C3__7S7211C8__7S7211C1[22]),  22,37},
  {&(_tg__ZTV7S7211C67S7211C3__7S7211C8__7S7211C1[2]),  2,8},
};
extern VTBL_ENTRY _ZTI7S7211C1[];
extern  VTBL_ENTRY _ZTV7S7211C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7211C1[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7211C7D0Ev,_ZTv0_n48_N7S7211C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7211C7D0Ev,_ZThn16_N7S7211C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7211C7D1Ev,_ZTv0_n48_N7S7211C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7211C7D1Ev,_ZThn16_N7S7211C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7211C2D0Ev,_ZTv0_n24_N7S7211C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7211C2D0Ev,_ZThn16_N7S7211C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7211C2D1Ev,_ZTv0_n24_N7S7211C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7211C2D1Ev,_ZThn16_N7S7211C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7211C1D0Ev,_ZTv0_n48_N7S7211C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7211C1D0Ev,_ZThn72_N7S7211C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7211C1D1Ev,_ZTv0_n48_N7S7211C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7211C1D1Ev,_ZThn72_N7S7211C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7211C1D0Ev,_ZTv0_n40_N7S7211C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7211C1D0Ev,_ZThn56_N7S7211C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7211C1D1Ev,_ZTv0_n40_N7S7211C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7211C1D1Ev,_ZThn56_N7S7211C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7211C1D0Ev,_ZTv0_n24_N7S7211C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7211C1D0Ev,_ZThn16_N7S7211C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7211C1D1Ev,_ZTv0_n24_N7S7211C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7211C1D1Ev,_ZThn16_N7S7211C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7211C1 = {  "S7211C1", // class name
  bases_S7211C1, 8,
  &(vtc_S7211C1[0]), // expected_vtbl_contents
  &(vtt_S7211C1[0]), // expected_vtt_contents
  ABISELECT(160,84), // object size
  NSPAIRA(_ZTI7S7211C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7211C1),96, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7211C1),15, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1563C4  {
  virtual void  v8(); // _ZN7S1563C42v8Ev
  virtual void  v9(); // _ZN7S1563C42v9Ev
  virtual void  v10(); // _ZN7S1563C43v10Ev
  ~S1563C4(); // tgen
  S1563C4(); // tgen
};
//SIG(-1 S1563C4) C1{ v1 v2 v3}


void  S1563C4 ::v8(){vfunc_called(this, "_ZN7S1563C42v8Ev");}
void  S1563C4 ::v9(){vfunc_called(this, "_ZN7S1563C42v9Ev");}
void  S1563C4 ::v10(){vfunc_called(this, "_ZN7S1563C43v10Ev");}
S1563C4 ::~S1563C4(){ note_dtor("S1563C4", this);} // tgen
S1563C4 ::S1563C4(){ note_ctor("S1563C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1563C4C1Ev();
extern void _ZN7S1563C4D1Ev();
Name_Map name_map_S1563C4[] = {
  NSPAIR(_ZN7S1563C4C1Ev),
  NSPAIR(_ZN7S1563C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1563C4[];
extern void _ZN7S1563C42v8Ev();
extern void _ZN7S1563C42v9Ev();
extern void _ZN7S1563C43v10Ev();
static  VTBL_ENTRY vtc_S1563C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1563C4[0]),
  (VTBL_ENTRY)&_ZN7S1563C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1563C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S1563C4[];
extern  VTBL_ENTRY _ZTV7S1563C4[];
Class_Descriptor cd_S1563C4 = {  "S1563C4", // class name
  0,0,//no base classes
  &(vtc_S1563C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1563C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1563C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1563C3  : S1563C4 {
  void *s1563c3f0;
  virtual  ~S1563C3(); // _ZN7S1563C3D1Ev
  virtual void  v11(); // _ZN7S1563C33v11Ev
  virtual void  v12(); // _ZN7S1563C33v12Ev
  virtual void  v13(); // _ZN7S1563C33v13Ev
  virtual void  v14(); // _ZN7S1563C33v14Ev
  virtual void  v15(); // _ZN7S1563C33v15Ev
  S1563C3(); // tgen
};
//SIG(-1 S1563C3) C1{ BC2{ v6 v7 v8} vd v1 v2 v3 v4 v5 Fp}


 S1563C3 ::~S1563C3(){ note_dtor("S1563C3", this);}
void  S1563C3 ::v11(){vfunc_called(this, "_ZN7S1563C33v11Ev");}
void  S1563C3 ::v12(){vfunc_called(this, "_ZN7S1563C33v12Ev");}
void  S1563C3 ::v13(){vfunc_called(this, "_ZN7S1563C33v13Ev");}
void  S1563C3 ::v14(){vfunc_called(this, "_ZN7S1563C33v14Ev");}
void  S1563C3 ::v15(){vfunc_called(this, "_ZN7S1563C33v15Ev");}
S1563C3 ::S1563C3(){ note_ctor("S1563C3", this);} // tgen

static void Test_S1563C3()
{
  extern Class_Descriptor cd_S1563C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1563C3, buf);
    S1563C3 *dp, &lv = *(dp=new (buf) S1563C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1563C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1563C3)");
    check_base_class_offset(lv, (S1563C4*), 0, "S1563C3");
    check_field_offset(lv, s1563c3f0, ABISELECT(8,4), "S1563C3.s1563c3f0");
    test_class_info(&lv, &cd_S1563C3);
    dp->~S1563C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1563C3(Test_S1563C3, "S1563C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1563C3C1Ev();
extern void _ZN7S1563C3D1Ev();
Name_Map name_map_S1563C3[] = {
  NSPAIR(_ZN7S1563C3C1Ev),
  NSPAIR(_ZN7S1563C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1563C4;
extern VTBL_ENTRY _ZTI7S1563C4[];
extern  VTBL_ENTRY _ZTV7S1563C4[];
static Base_Class bases_S1563C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1563C3[];
extern void _ZN7S1563C42v8Ev();
extern void _ZN7S1563C42v9Ev();
extern void _ZN7S1563C43v10Ev();
extern void _ZN7S1563C3D1Ev();
extern void _ZN7S1563C3D0Ev();
extern void _ZN7S1563C33v11Ev();
extern void _ZN7S1563C33v12Ev();
extern void _ZN7S1563C33v13Ev();
extern void _ZN7S1563C33v14Ev();
extern void _ZN7S1563C33v15Ev();
static  VTBL_ENTRY vtc_S1563C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1563C3[0]),
  (VTBL_ENTRY)&_ZN7S1563C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1563C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1563C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v15Ev,
};
extern VTBL_ENTRY _ZTI7S1563C3[];
extern  VTBL_ENTRY _ZTV7S1563C3[];
Class_Descriptor cd_S1563C3 = {  "S1563C3", // class name
  bases_S1563C3, 1,
  &(vtc_S1563C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1563C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1563C3),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  S1563C5  {
  ::S1563C4 s1563c5f0;
  __tsi64 s1563c5f1;
  long double s1563c5f2;
  virtual void  v16(); // _ZN7S1563C53v16Ev
  virtual void  v17(); // _ZN7S1563C53v17Ev
  virtual void  v18(); // _ZN7S1563C53v18Ev
  virtual void  v19(); // _ZN7S1563C53v19Ev
  virtual void  v20(); // _ZN7S1563C53v20Ev
  virtual void  v21(); // _ZN7S1563C53v21Ev
  ~S1563C5(); // tgen
  S1563C5(); // tgen
};
//SIG(-1 S1563C5) C1{ v1 v2 v3 v4 v5 v6 FC2{ v7 v8 v9} FL FD}


void  S1563C5 ::v16(){vfunc_called(this, "_ZN7S1563C53v16Ev");}
void  S1563C5 ::v17(){vfunc_called(this, "_ZN7S1563C53v17Ev");}
void  S1563C5 ::v18(){vfunc_called(this, "_ZN7S1563C53v18Ev");}
void  S1563C5 ::v19(){vfunc_called(this, "_ZN7S1563C53v19Ev");}
void  S1563C5 ::v20(){vfunc_called(this, "_ZN7S1563C53v20Ev");}
void  S1563C5 ::v21(){vfunc_called(this, "_ZN7S1563C53v21Ev");}
S1563C5 ::~S1563C5(){ note_dtor("S1563C5", this);} // tgen
S1563C5 ::S1563C5(){ note_ctor("S1563C5", this);} // tgen

static void Test_S1563C5()
{
  extern Class_Descriptor cd_S1563C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S1563C5, buf);
    S1563C5 *dp, &lv = *(dp=new (buf) S1563C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1563C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1563C5)");
    check_field_offset(lv, s1563c5f0, ABISELECT(8,4), "S1563C5.s1563c5f0");
    check_field_offset(lv, s1563c5f1, ABISELECT(16,8), "S1563C5.s1563c5f1");
    check_field_offset(lv, s1563c5f2, ABISELECT(32,16), "S1563C5.s1563c5f2");
    test_class_info(&lv, &cd_S1563C5);
    dp->~S1563C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1563C5(Test_S1563C5, "S1563C5", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1563C5C1Ev();
extern void _ZN7S1563C5D1Ev();
Name_Map name_map_S1563C5[] = {
  NSPAIR(_ZN7S1563C5C1Ev),
  NSPAIR(_ZN7S1563C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1563C5[];
extern void _ZN7S1563C53v16Ev();
extern void _ZN7S1563C53v17Ev();
extern void _ZN7S1563C53v18Ev();
extern void _ZN7S1563C53v19Ev();
extern void _ZN7S1563C53v20Ev();
extern void _ZN7S1563C53v21Ev();
static  VTBL_ENTRY vtc_S1563C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1563C5[0]),
  (VTBL_ENTRY)&_ZN7S1563C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v21Ev,
};
extern VTBL_ENTRY _ZTI7S1563C5[];
extern  VTBL_ENTRY _ZTV7S1563C5[];
Class_Descriptor cd_S1563C5 = {  "S1563C5", // class name
  0,0,//no base classes
  &(vtc_S1563C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1563C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1563C5),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1563C2  : S1563C3 , S1563C5 {
  void *s1563c2f0;
  virtual  ~S1563C2(); // _ZN7S1563C2D1Ev
  virtual void  v22(); // _ZN7S1563C23v22Ev
  virtual void  v23(); // _ZN7S1563C23v23Ev
  virtual void  v24(); // _ZN7S1563C23v24Ev
  virtual void  v25(); // _ZN7S1563C23v25Ev
  virtual void  v26(); // _ZN7S1563C23v26Ev
  S1563C2(); // tgen
};
//SIG(-1 S1563C2) C1{ BC2{ BC3{ v6 v7 v8} vd v9 v10 v11 v12 v13 Fp} BC4{ v14 v15 v16 v17 v18 v19 FC3 FL FD} vd v1 v2 v3 v4 v5 Fp}


 S1563C2 ::~S1563C2(){ note_dtor("S1563C2", this);}
void  S1563C2 ::v22(){vfunc_called(this, "_ZN7S1563C23v22Ev");}
void  S1563C2 ::v23(){vfunc_called(this, "_ZN7S1563C23v23Ev");}
void  S1563C2 ::v24(){vfunc_called(this, "_ZN7S1563C23v24Ev");}
void  S1563C2 ::v25(){vfunc_called(this, "_ZN7S1563C23v25Ev");}
void  S1563C2 ::v26(){vfunc_called(this, "_ZN7S1563C23v26Ev");}
S1563C2 ::S1563C2(){ note_ctor("S1563C2", this);} // tgen

static void Test_S1563C2()
{
  extern Class_Descriptor cd_S1563C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,11)];
    init_test(&cd_S1563C2, buf);
    S1563C2 *dp, &lv = *(dp=new (buf) S1563C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S1563C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1563C2)");
    check_base_class_offset(lv, (S1563C4*)(S1563C3*), 0, "S1563C2");
    check_base_class_offset(lv, (S1563C3*), 0, "S1563C2");
    check_base_class_offset(lv, (S1563C5*), ABISELECT(16,8), "S1563C2");
    check_field_offset(lv, s1563c2f0, ABISELECT(64,36), "S1563C2.s1563c2f0");
    test_class_info(&lv, &cd_S1563C2);
    dp->~S1563C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1563C2(Test_S1563C2, "S1563C2", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN7S1563C2C1Ev();
extern void _ZN7S1563C2D1Ev();
Name_Map name_map_S1563C2[] = {
  NSPAIR(_ZN7S1563C2C1Ev),
  NSPAIR(_ZN7S1563C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1563C4;
extern VTBL_ENTRY _ZTI7S1563C4[];
extern  VTBL_ENTRY _ZTV7S1563C4[];
extern Class_Descriptor cd_S1563C3;
extern VTBL_ENTRY _ZTI7S1563C3[];
extern  VTBL_ENTRY _ZTV7S1563C3[];
extern Class_Descriptor cd_S1563C5;
extern VTBL_ENTRY _ZTI7S1563C5[];
extern  VTBL_ENTRY _ZTV7S1563C5[];
static Base_Class bases_S1563C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1563C5,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_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 _ZTI7S1563C2[];
extern void _ZN7S1563C42v8Ev();
extern void _ZN7S1563C42v9Ev();
extern void _ZN7S1563C43v10Ev();
extern void _ZN7S1563C2D1Ev();
extern void _ZN7S1563C2D0Ev();
extern void _ZN7S1563C33v11Ev();
extern void _ZN7S1563C33v12Ev();
extern void _ZN7S1563C33v13Ev();
extern void _ZN7S1563C33v14Ev();
extern void _ZN7S1563C33v15Ev();
extern void _ZN7S1563C23v22Ev();
extern void _ZN7S1563C23v23Ev();
extern void _ZN7S1563C23v24Ev();
extern void _ZN7S1563C23v25Ev();
extern void _ZN7S1563C23v26Ev();
extern void _ZN7S1563C53v16Ev();
extern void _ZN7S1563C53v17Ev();
extern void _ZN7S1563C53v18Ev();
extern void _ZN7S1563C53v19Ev();
extern void _ZN7S1563C53v20Ev();
extern void _ZN7S1563C53v21Ev();
static  VTBL_ENTRY vtc_S1563C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1563C2[0]),
  (VTBL_ENTRY)&_ZN7S1563C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1563C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1563C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1563C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1563C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1563C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1563C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1563C23v26Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1563C2[0]),
  (VTBL_ENTRY)&_ZN7S1563C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v21Ev,
};
extern VTBL_ENTRY _ZTI7S1563C2[];
extern  VTBL_ENTRY _ZTV7S1563C2[];
Class_Descriptor cd_S1563C2 = {  "S1563C2", // class name
  bases_S1563C2, 3,
  &(vtc_S1563C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI7S1563C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1563C2),25, //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  S1563C7  {
  void *s1563c7f0[10];
  ::S1563C4 s1563c7f1;
  virtual  ~S1563C7(); // _ZN7S1563C7D1Ev
  virtual void  v27(); // _ZN7S1563C73v27Ev
  virtual void  v28(); // _ZN7S1563C73v28Ev
  virtual void  v29(); // _ZN7S1563C73v29Ev
  S1563C7(); // tgen
};
//SIG(-1 S1563C7) C1{ vd v1 v2 v3 Fp[10] FC2{ v4 v5 v6}}


 S1563C7 ::~S1563C7(){ note_dtor("S1563C7", this);}
void  S1563C7 ::v27(){vfunc_called(this, "_ZN7S1563C73v27Ev");}
void  S1563C7 ::v28(){vfunc_called(this, "_ZN7S1563C73v28Ev");}
void  S1563C7 ::v29(){vfunc_called(this, "_ZN7S1563C73v29Ev");}
S1563C7 ::S1563C7(){ note_ctor("S1563C7", this);} // tgen

static void Test_S1563C7()
{
  extern Class_Descriptor cd_S1563C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S1563C7, buf);
    S1563C7 *dp, &lv = *(dp=new (buf) S1563C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S1563C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1563C7)");
    check_field_offset(lv, s1563c7f0, ABISELECT(8,4), "S1563C7.s1563c7f0");
    check_field_offset(lv, s1563c7f1, ABISELECT(88,44), "S1563C7.s1563c7f1");
    test_class_info(&lv, &cd_S1563C7);
    dp->~S1563C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1563C7(Test_S1563C7, "S1563C7", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S1563C7C1Ev();
extern void _ZN7S1563C7D1Ev();
Name_Map name_map_S1563C7[] = {
  NSPAIR(_ZN7S1563C7C1Ev),
  NSPAIR(_ZN7S1563C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1563C7[];
extern void _ZN7S1563C7D1Ev();
extern void _ZN7S1563C7D0Ev();
extern void _ZN7S1563C73v27Ev();
extern void _ZN7S1563C73v28Ev();
extern void _ZN7S1563C73v29Ev();
static  VTBL_ENTRY vtc_S1563C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1563C7[0]),
  (VTBL_ENTRY)&_ZN7S1563C7D1Ev,
  (VTBL_ENTRY)&_ZN7S1563C7D0Ev,
  (VTBL_ENTRY)&_ZN7S1563C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1563C73v28Ev,
  (VTBL_ENTRY)&_ZN7S1563C73v29Ev,
};
extern VTBL_ENTRY _ZTI7S1563C7[];
extern  VTBL_ENTRY _ZTV7S1563C7[];
Class_Descriptor cd_S1563C7 = {  "S1563C7", // class name
  0,0,//no base classes
  &(vtc_S1563C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S1563C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1563C7),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  S1563C6  : S1563C7 , virtual S1563C4 {
  virtual void  v30(); // _ZN7S1563C63v30Ev
  virtual void  v31(); // _ZN7S1563C63v31Ev
  virtual void  v32(); // _ZN7S1563C63v32Ev
  virtual void  v33(); // _ZN7S1563C63v33Ev
  virtual void  v34(); // _ZN7S1563C63v34Ev
  virtual void  v35(); // _ZN7S1563C63v35Ev
  virtual void  v36(); // _ZN7S1563C63v36Ev
  virtual void  v37(); // _ZN7S1563C63v37Ev
  virtual void  v38(); // _ZN7S1563C63v38Ev
  virtual void  v39(); // _ZN7S1563C63v39Ev
  ~S1563C6(); // tgen
  S1563C6(); // tgen
};
//SIG(-1 S1563C6) C1{ BC2{ vd v11 v12 v13 Fp[10] FC3{ v14 v15 v16}} VBC3 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


void  S1563C6 ::v30(){vfunc_called(this, "_ZN7S1563C63v30Ev");}
void  S1563C6 ::v31(){vfunc_called(this, "_ZN7S1563C63v31Ev");}
void  S1563C6 ::v32(){vfunc_called(this, "_ZN7S1563C63v32Ev");}
void  S1563C6 ::v33(){vfunc_called(this, "_ZN7S1563C63v33Ev");}
void  S1563C6 ::v34(){vfunc_called(this, "_ZN7S1563C63v34Ev");}
void  S1563C6 ::v35(){vfunc_called(this, "_ZN7S1563C63v35Ev");}
void  S1563C6 ::v36(){vfunc_called(this, "_ZN7S1563C63v36Ev");}
void  S1563C6 ::v37(){vfunc_called(this, "_ZN7S1563C63v37Ev");}
void  S1563C6 ::v38(){vfunc_called(this, "_ZN7S1563C63v38Ev");}
void  S1563C6 ::v39(){vfunc_called(this, "_ZN7S1563C63v39Ev");}
S1563C6 ::~S1563C6(){ note_dtor("S1563C6", this);} // tgen
S1563C6 ::S1563C6(){ note_ctor("S1563C6", this);} // tgen

static void Test_S1563C6()
{
  extern Class_Descriptor cd_S1563C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[14];
    init_test(&cd_S1563C6, buf);
    S1563C6 *dp, &lv = *(dp=new (buf) S1563C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S1563C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1563C6)");
    check_base_class_offset(lv, (S1563C7*), 0, "S1563C6");
    check_base_class_offset(lv, (S1563C4*), ABISELECT(96,48), "S1563C6");
    test_class_info(&lv, &cd_S1563C6);
    dp->~S1563C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1563C6(Test_S1563C6, "S1563C6", ABISELECT(104,52));

#else // __cplusplus

extern void _ZN7S1563C6C1Ev();
extern void _ZN7S1563C6D1Ev();
Name_Map name_map_S1563C6[] = {
  NSPAIR(_ZN7S1563C6C1Ev),
  NSPAIR(_ZN7S1563C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1563C7;
extern VTBL_ENTRY _ZTI7S1563C7[];
extern  VTBL_ENTRY _ZTV7S1563C7[];
extern Class_Descriptor cd_S1563C4;
extern VTBL_ENTRY _ZTI7S1563C4[];
extern  VTBL_ENTRY _ZTV7S1563C4[];
static Base_Class bases_S1563C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1563C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1563C4,    ABISELECT(96,48), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1563C6[];
extern void _ZN7S1563C6D1Ev();
extern void _ZN7S1563C6D0Ev();
extern void _ZN7S1563C73v27Ev();
extern void _ZN7S1563C73v28Ev();
extern void _ZN7S1563C73v29Ev();
extern void _ZN7S1563C63v30Ev();
extern void _ZN7S1563C63v31Ev();
extern void _ZN7S1563C63v32Ev();
extern void _ZN7S1563C63v33Ev();
extern void _ZN7S1563C63v34Ev();
extern void _ZN7S1563C63v35Ev();
extern void _ZN7S1563C63v36Ev();
extern void _ZN7S1563C63v37Ev();
extern void _ZN7S1563C63v38Ev();
extern void _ZN7S1563C63v39Ev();
extern void _ZN7S1563C42v8Ev();
extern void _ZN7S1563C42v9Ev();
extern void _ZN7S1563C43v10Ev();
static  VTBL_ENTRY vtc_S1563C6[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S1563C6[0]),
  (VTBL_ENTRY)&_ZN7S1563C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1563C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1563C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1563C73v28Ev,
  (VTBL_ENTRY)&_ZN7S1563C73v29Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v30Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v31Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v32Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v33Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v34Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v35Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v36Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v37Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v38Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v39Ev,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S1563C6[0]),
  (VTBL_ENTRY)&_ZN7S1563C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1563C43v10Ev,
};
extern VTBL_ENTRY _ZTV7S1563C6[];
static  VTT_ENTRY vtt_S1563C6[] = {
  {&(_ZTV7S1563C6[3]),  3,26},
  {&(_ZTV7S1563C6[23]),  23,26},
};
extern VTBL_ENTRY _ZTI7S1563C6[];
extern  VTBL_ENTRY _ZTV7S1563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1563C6[];
Class_Descriptor cd_S1563C6 = {  "S1563C6", // class name
  bases_S1563C6, 2,
  &(vtc_S1563C6[0]), // expected_vtbl_contents
  &(vtt_S1563C6[0]), // expected_vtt_contents
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI7S1563C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1563C6),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1563C6),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1563C1  : S1563C2 , S1563C6 {
  long double s1563c1f0[8];
  virtual void  v1(); // _ZN7S1563C12v1Ev
  virtual void  v2(); // _ZN7S1563C12v2Ev
  virtual void  v3(); // _ZN7S1563C12v3Ev
  virtual void  v4(); // _ZN7S1563C12v4Ev
  virtual void  v5(); // _ZN7S1563C12v5Ev
  virtual void  v6(); // _ZN7S1563C12v6Ev
  virtual void  v7(); // _ZN7S1563C12v7Ev
  ~S1563C1(); // tgen
  S1563C1(); // tgen
};
//SIG(1 S1563C1) C1{ BC2{ BC3{ BC4{ v8 v9 v10} vd v11 v12 v13 v14 v15 Fp} BC5{ v16 v17 v18 v19 v20 v21 FC4 FL FD} vd v22 v23 v24 v25 v26 Fp} BC6{ BC7{ vd v27 v28 v29 Fp[10] FC4} VBC4 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39} v1 v2 v3 v4 v5 v6 v7 FD[8]}


void  S1563C1 ::v1(){vfunc_called(this, "_ZN7S1563C12v1Ev");}
void  S1563C1 ::v2(){vfunc_called(this, "_ZN7S1563C12v2Ev");}
void  S1563C1 ::v3(){vfunc_called(this, "_ZN7S1563C12v3Ev");}
void  S1563C1 ::v4(){vfunc_called(this, "_ZN7S1563C12v4Ev");}
void  S1563C1 ::v5(){vfunc_called(this, "_ZN7S1563C12v5Ev");}
void  S1563C1 ::v6(){vfunc_called(this, "_ZN7S1563C12v6Ev");}
void  S1563C1 ::v7(){vfunc_called(this, "_ZN7S1563C12v7Ev");}
S1563C1 ::~S1563C1(){ note_dtor("S1563C1", this);} // tgen
S1563C1 ::S1563C1(){ note_ctor("S1563C1", this);} // tgen

static void Test_S1563C1()
{
  extern Class_Descriptor cd_S1563C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,48)];
    init_test(&cd_S1563C1, buf);
    S1563C1 *dp, &lv = *(dp=new (buf) S1563C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,188), "sizeof(S1563C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1563C1)");
    check_base_class_offset(lv, (S1563C4*)(S1563C3*)(S1563C2*), 0, "S1563C1");
    check_base_class_offset(lv, (S1563C3*)(S1563C2*), 0, "S1563C1");
    check_base_class_offset(lv, (S1563C5*)(S1563C2*), ABISELECT(16,8), "S1563C1");
    check_base_class_offset(lv, (S1563C2*), 0, "S1563C1");
    check_base_class_offset(lv, (S1563C7*)(S1563C6*), ABISELECT(72,40), "S1563C1");
    check_base_class_offset(lv, (S1563C4*)(S1563C6*), ABISELECT(304,184), "S1563C1");
    check_base_class_offset(lv, (S1563C6*), ABISELECT(72,40), "S1563C1");
    check_field_offset(lv, s1563c1f0, ABISELECT(176,88), "S1563C1.s1563c1f0");
    test_class_info(&lv, &cd_S1563C1);
    dp->~S1563C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1563C1(Test_S1563C1, "S1563C1", ABISELECT(320,188));

#else // __cplusplus

extern void _ZN7S1563C1C1Ev();
extern void _ZN7S1563C1D1Ev();
Name_Map name_map_S1563C1[] = {
  NSPAIR(_ZN7S1563C1C1Ev),
  NSPAIR(_ZN7S1563C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1563C4;
extern VTBL_ENTRY _ZTI7S1563C4[];
extern  VTBL_ENTRY _ZTV7S1563C4[];
extern Class_Descriptor cd_S1563C3;
extern VTBL_ENTRY _ZTI7S1563C3[];
extern  VTBL_ENTRY _ZTV7S1563C3[];
extern Class_Descriptor cd_S1563C5;
extern VTBL_ENTRY _ZTI7S1563C5[];
extern  VTBL_ENTRY _ZTV7S1563C5[];
extern Class_Descriptor cd_S1563C2;
extern VTBL_ENTRY _ZTI7S1563C2[];
extern  VTBL_ENTRY _ZTV7S1563C2[];
extern Class_Descriptor cd_S1563C7;
extern VTBL_ENTRY _ZTI7S1563C7[];
extern  VTBL_ENTRY _ZTV7S1563C7[];
extern Class_Descriptor cd_S1563C4;
extern VTBL_ENTRY _ZTI7S1563C4[];
extern  VTBL_ENTRY _ZTV7S1563C4[];
extern Class_Descriptor cd_S1563C6;
extern VTBL_ENTRY _ZTI7S1563C6[];
extern  VTBL_ENTRY _ZTV7S1563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1563C6[];
static Base_Class bases_S1563C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1563C5,    ABISELECT(16,8), //bcp->offset
    25, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S1563C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1563C7,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1563C4,    ABISELECT(304,184), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1563C6,    ABISELECT(72,40), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1563C1[];
extern void _ZN7S1563C42v8Ev();
extern void _ZN7S1563C42v9Ev();
extern void _ZN7S1563C43v10Ev();
extern void _ZN7S1563C1D1Ev();
extern void _ZN7S1563C1D0Ev();
extern void _ZN7S1563C33v11Ev();
extern void _ZN7S1563C33v12Ev();
extern void _ZN7S1563C33v13Ev();
extern void _ZN7S1563C33v14Ev();
extern void _ZN7S1563C33v15Ev();
extern void _ZN7S1563C23v22Ev();
extern void _ZN7S1563C23v23Ev();
extern void _ZN7S1563C23v24Ev();
extern void _ZN7S1563C23v25Ev();
extern void _ZN7S1563C23v26Ev();
extern void _ZN7S1563C12v1Ev();
extern void _ZN7S1563C12v2Ev();
extern void _ZN7S1563C12v3Ev();
extern void _ZN7S1563C12v4Ev();
extern void _ZN7S1563C12v5Ev();
extern void _ZN7S1563C12v6Ev();
extern void _ZN7S1563C12v7Ev();
extern void _ZN7S1563C53v16Ev();
extern void _ZN7S1563C53v17Ev();
extern void _ZN7S1563C53v18Ev();
extern void _ZN7S1563C53v19Ev();
extern void _ZN7S1563C53v20Ev();
extern void _ZN7S1563C53v21Ev();
extern void ABISELECT(_ZThn72_N7S1563C1D1Ev,_ZThn40_N7S1563C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S1563C1D0Ev,_ZThn40_N7S1563C1D0Ev)();
extern void _ZN7S1563C73v27Ev();
extern void _ZN7S1563C73v28Ev();
extern void _ZN7S1563C73v29Ev();
extern void _ZN7S1563C63v30Ev();
extern void _ZN7S1563C63v31Ev();
extern void _ZN7S1563C63v32Ev();
extern void _ZN7S1563C63v33Ev();
extern void _ZN7S1563C63v34Ev();
extern void _ZN7S1563C63v35Ev();
extern void _ZN7S1563C63v36Ev();
extern void _ZN7S1563C63v37Ev();
extern void _ZN7S1563C63v38Ev();
extern void _ZN7S1563C63v39Ev();
extern void _ZN7S1563C42v8Ev();
extern void _ZN7S1563C42v9Ev();
extern void _ZN7S1563C43v10Ev();
static  VTBL_ENTRY vtc_S1563C1[] = {
  ABISELECT(304,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S1563C1[0]),
  (VTBL_ENTRY)&_ZN7S1563C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1563C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1563C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1563C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1563C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1563C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1563C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1563C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1563C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1563C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1563C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1563C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1563C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1563C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1563C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1563C12v7Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1563C1[0]),
  (VTBL_ENTRY)&_ZN7S1563C53v16Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1563C53v21Ev,
  ABISELECT(232,144),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S1563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S1563C1D1Ev,_ZThn40_N7S1563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S1563C1D0Ev,_ZThn40_N7S1563C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1563C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1563C73v28Ev,
  (VTBL_ENTRY)&_ZN7S1563C73v29Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v30Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v31Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v32Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v33Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v34Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v35Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v36Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v37Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v38Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v39Ev,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  (VTBL_ENTRY)&(_ZTI7S1563C1[0]),
  (VTBL_ENTRY)&_ZN7S1563C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1563C43v10Ev,
};
extern VTBL_ENTRY _ZTV7S1563C1[];
extern void _ZN7S1563C6D1Ev();
extern void _ZN7S1563C6D0Ev();
extern void _ZN7S1563C73v27Ev();
extern void _ZN7S1563C73v28Ev();
extern void _ZN7S1563C73v29Ev();
extern void _ZN7S1563C63v30Ev();
extern void _ZN7S1563C63v31Ev();
extern void _ZN7S1563C63v32Ev();
extern void _ZN7S1563C63v33Ev();
extern void _ZN7S1563C63v34Ev();
extern void _ZN7S1563C63v35Ev();
extern void _ZN7S1563C63v36Ev();
extern void _ZN7S1563C63v37Ev();
extern void _ZN7S1563C63v38Ev();
extern void _ZN7S1563C63v39Ev();
static  VTBL_ENTRY _tg__ZTV7S1563C6__7S1563C1[] = {
  ABISELECT(232,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S1563C6[0]),
  (VTBL_ENTRY)&_ZN7S1563C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1563C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1563C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1563C73v28Ev,
  (VTBL_ENTRY)&_ZN7S1563C73v29Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v30Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v31Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v32Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v33Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v34Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v35Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v36Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v37Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v38Ev,
  (VTBL_ENTRY)&_ZN7S1563C63v39Ev,
};
extern void _ZN7S1563C42v8Ev();
extern void _ZN7S1563C42v9Ev();
extern void _ZN7S1563C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S1563C4__7S1563C6__7S1563C1[] = {
  0,
  0,
  0,
  ABISELECT(-232,-144),
  (VTBL_ENTRY)&(_ZTI7S1563C6[0]),
  (VTBL_ENTRY)&_ZN7S1563C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1563C43v10Ev,
};
static  VTT_ENTRY vtt_S1563C1[] = {
  {&(_ZTV7S1563C1[3]),  3,59},
  {&(_tg__ZTV7S1563C6__7S1563C1[3]),  3,18},
  {&(_tg__ZTV7S1563C4__7S1563C6__7S1563C1[5]),  5,8},
  {&(_ZTV7S1563C1[36]),  36,59},
  {&(_ZTV7S1563C1[56]),  56,59},
};
extern VTBL_ENTRY _ZTI7S1563C1[];
extern  VTBL_ENTRY _ZTV7S1563C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1563C1[];
Class_Descriptor cd_S1563C1 = {  "S1563C1", // class name
  bases_S1563C1, 7,
  &(vtc_S1563C1[0]), // expected_vtbl_contents
  &(vtt_S1563C1[0]), // expected_vtt_contents
  ABISELECT(320,188), // object size
  NSPAIRA(_ZTI7S1563C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1563C1),59, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1563C1),5, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1765C3  : S1766C4_nt {
  int s1765c3f0;
  void *s1765c3f1[2];
  int s1765c3f2;
  virtual  ~S1765C3(); // _ZN7S1765C3D1Ev
  virtual void  v10(); // _ZN7S1765C33v10Ev
  virtual void  v11(); // _ZN7S1765C33v11Ev
  virtual void  v12(); // _ZN7S1765C33v12Ev
  virtual void  v13(); // _ZN7S1765C33v13Ev
  virtual void  v14(); // _ZN7S1765C33v14Ev
  virtual void  v15(); // _ZN7S1765C33v15Ev
  virtual void  v16(); // _ZN7S1765C33v16Ev
  virtual void  v17(); // _ZN7S1765C33v17Ev
  virtual void  v18(); // _ZN7S1765C33v18Ev
  virtual void  v19(); // _ZN7S1765C33v19Ev
  virtual void  v20(); // _ZN7S1765C33v20Ev
  S1765C3(); // tgen
};
//SIG(-1 S1765C3) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S1765C3 ::~S1765C3(){ note_dtor("S1765C3", this);}
void  S1765C3 ::v10(){vfunc_called(this, "_ZN7S1765C33v10Ev");}
void  S1765C3 ::v11(){vfunc_called(this, "_ZN7S1765C33v11Ev");}
void  S1765C3 ::v12(){vfunc_called(this, "_ZN7S1765C33v12Ev");}
void  S1765C3 ::v13(){vfunc_called(this, "_ZN7S1765C33v13Ev");}
void  S1765C3 ::v14(){vfunc_called(this, "_ZN7S1765C33v14Ev");}
void  S1765C3 ::v15(){vfunc_called(this, "_ZN7S1765C33v15Ev");}
void  S1765C3 ::v16(){vfunc_called(this, "_ZN7S1765C33v16Ev");}
void  S1765C3 ::v17(){vfunc_called(this, "_ZN7S1765C33v17Ev");}
void  S1765C3 ::v18(){vfunc_called(this, "_ZN7S1765C33v18Ev");}
void  S1765C3 ::v19(){vfunc_called(this, "_ZN7S1765C33v19Ev");}
void  S1765C3 ::v20(){vfunc_called(this, "_ZN7S1765C33v20Ev");}
S1765C3 ::S1765C3(){ note_ctor("S1765C3", this);} // tgen

static void Test_S1765C3()
{
  extern Class_Descriptor cd_S1765C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1765C3, buf);
    S1765C3 *dp, &lv = *(dp=new (buf) S1765C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1765C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1765C3)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S1765C3");
    check_field_offset(lv, s1765c3f0, ABISELECT(16,12), "S1765C3.s1765c3f0");
    check_field_offset(lv, s1765c3f1, ABISELECT(24,16), "S1765C3.s1765c3f1");
    check_field_offset(lv, s1765c3f2, ABISELECT(40,24), "S1765C3.s1765c3f2");
    test_class_info(&lv, &cd_S1765C3);
    dp->~S1765C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1765C3(Test_S1765C3, "S1765C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1765C3C1Ev();
extern void _ZN7S1765C3D1Ev();
Name_Map name_map_S1765C3[] = {
  NSPAIR(_ZN7S1765C3C1Ev),
  NSPAIR(_ZN7S1765C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S1765C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S1765C3[];
extern void _ZN7S1765C3D1Ev();
extern void _ZN7S1765C3D0Ev();
extern void _ZN7S1765C33v10Ev();
extern void _ZN7S1765C33v11Ev();
extern void _ZN7S1765C33v12Ev();
extern void _ZN7S1765C33v13Ev();
extern void _ZN7S1765C33v14Ev();
extern void _ZN7S1765C33v15Ev();
extern void _ZN7S1765C33v16Ev();
extern void _ZN7S1765C33v17Ev();
extern void _ZN7S1765C33v18Ev();
extern void _ZN7S1765C33v19Ev();
extern void _ZN7S1765C33v20Ev();
static  VTBL_ENTRY vtc_S1765C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1765C3[0]),
  (VTBL_ENTRY)&_ZN7S1765C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1765C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v20Ev,
};
extern VTBL_ENTRY _ZTI7S1765C3[];
extern  VTBL_ENTRY _ZTV7S1765C3[];
Class_Descriptor cd_S1765C3 = {  "S1765C3", // class name
  bases_S1765C3, 1,
  &(vtc_S1765C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1765C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1765C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1765C2  : S1765C3 {
  virtual  ~S1765C2(); // _ZN7S1765C2D1Ev
  S1765C2(); // tgen
};
//SIG(-1 S1765C2) C1{ BC2{ BC3{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi} vd}


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

static void Test_S1765C2()
{
  extern Class_Descriptor cd_S1765C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1765C2, buf);
    S1765C2 *dp, &lv = *(dp=new (buf) S1765C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1765C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1765C2)");
    check_base_class_offset(lv, (S1766C4_nt*)(S1765C3*), 0, "S1765C2");
    check_base_class_offset(lv, (S1765C3*), 0, "S1765C2");
    test_class_info(&lv, &cd_S1765C2);
    dp->~S1765C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1765C2(Test_S1765C2, "S1765C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1765C2C1Ev();
extern void _ZN7S1765C2D1Ev();
Name_Map name_map_S1765C2[] = {
  NSPAIR(_ZN7S1765C2C1Ev),
  NSPAIR(_ZN7S1765C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S1765C3;
extern VTBL_ENTRY _ZTI7S1765C3[];
extern  VTBL_ENTRY _ZTV7S1765C3[];
static Base_Class bases_S1765C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S1765C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1765C2[];
extern void _ZN7S1765C2D1Ev();
extern void _ZN7S1765C2D0Ev();
extern void _ZN7S1765C33v10Ev();
extern void _ZN7S1765C33v11Ev();
extern void _ZN7S1765C33v12Ev();
extern void _ZN7S1765C33v13Ev();
extern void _ZN7S1765C33v14Ev();
extern void _ZN7S1765C33v15Ev();
extern void _ZN7S1765C33v16Ev();
extern void _ZN7S1765C33v17Ev();
extern void _ZN7S1765C33v18Ev();
extern void _ZN7S1765C33v19Ev();
extern void _ZN7S1765C33v20Ev();
static  VTBL_ENTRY vtc_S1765C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1765C2[0]),
  (VTBL_ENTRY)&_ZN7S1765C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1765C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v20Ev,
};
extern VTBL_ENTRY _ZTI7S1765C2[];
extern  VTBL_ENTRY _ZTV7S1765C2[];
Class_Descriptor cd_S1765C2 = {  "S1765C2", // class name
  bases_S1765C2, 2,
  &(vtc_S1765C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1765C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1765C2),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  S1765C7_nt  {
  void *s1765c7f0;
  int s1765c7f1;
};
//SIG(-1 S1765C7_nt) C1{ Fp Fi}



//skip512 S1765C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1765C6_nt  {
  int s1765c6f0;
  ::S1765C7_nt s1765c6f1;
};
//SIG(-1 S1765C6_nt) C1{ Fi FC2{ Fp Fi}}



//skip512 S1765C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S1765C8  {
  char s1765c8f0[32];
  ::S1766C9_nt s1765c8f1;
};
//SIG(1 S1765C8) U1{ Fc[32] FC2{ Fi Fi Fi Fi Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S1765C1  : S1765C2 {
  void *s1765c1f0[2];
  int s1765c1f1[2];
  void *s1765c1f2;
  char s1765c1f3;
  ::S3961C7_nt s1765c1f4;
  ::S1765C6_nt s1765c1f5;
  ::S1765C8 s1765c1f6;
  int s1765c1f7;
  int s1765c1f8;
  int s1765c1f9;
  int s1765c1f10;
  int s1765c1f11;
  virtual  ~S1765C1(); // _ZN7S1765C1D1Ev
  virtual void  v1(); // _ZN7S1765C12v1Ev
  virtual void  v2(); // _ZN7S1765C12v2Ev
  virtual void  v3(); // _ZN7S1765C12v3Ev
  virtual void  v4(); // _ZN7S1765C12v4Ev
  virtual void  v5(); // _ZN7S1765C12v5Ev
  virtual void  v6(); // _ZN7S1765C12v6Ev
  virtual void  v7(); // _ZN7S1765C12v7Ev
  virtual void  v8(); // _ZN7S1765C12v8Ev
  virtual void  v9(); // _ZN7S1765C12v9Ev
  S1765C1(); // tgen
};
//SIG(1 S1765C1) C1{ BC2{ BC3{ BC4{ vd m FL} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi Fp[2] Fi} vd} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[2] Fi[2] Fp Fc FC5{ BC4 vd Fp Fi[4] Fp} FC6{ Fi FC7{ Fp Fi}} FU8{ Fc[32] FC9{ Fi Fi Fi Fi Fi}} Fi Fi Fi Fi Fi}


 S1765C1 ::~S1765C1(){ note_dtor("S1765C1", this);}
void  S1765C1 ::v1(){vfunc_called(this, "_ZN7S1765C12v1Ev");}
void  S1765C1 ::v2(){vfunc_called(this, "_ZN7S1765C12v2Ev");}
void  S1765C1 ::v3(){vfunc_called(this, "_ZN7S1765C12v3Ev");}
void  S1765C1 ::v4(){vfunc_called(this, "_ZN7S1765C12v4Ev");}
void  S1765C1 ::v5(){vfunc_called(this, "_ZN7S1765C12v5Ev");}
void  S1765C1 ::v6(){vfunc_called(this, "_ZN7S1765C12v6Ev");}
void  S1765C1 ::v7(){vfunc_called(this, "_ZN7S1765C12v7Ev");}
void  S1765C1 ::v8(){vfunc_called(this, "_ZN7S1765C12v8Ev");}
void  S1765C1 ::v9(){vfunc_called(this, "_ZN7S1765C12v9Ev");}
S1765C1 ::S1765C1(){ note_ctor("S1765C1", this);} // tgen

static void Test_S1765C1()
{
  extern Class_Descriptor cd_S1765C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,39)];
    init_test(&cd_S1765C1, buf);
    S1765C1 *dp, &lv = *(dp=new (buf) S1765C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,152), "sizeof(S1765C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1765C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S1765C3*)(S1765C2*), 0, "S1765C1");
    check_base_class_offset(lv, (S1765C3*)(S1765C2*), 0, "S1765C1");
    check_base_class_offset(lv, (S1765C2*), 0, "S1765C1");
    check_field_offset(lv, s1765c1f0, ABISELECT(48,28), "S1765C1.s1765c1f0");
    check_field_offset(lv, s1765c1f1, ABISELECT(64,36), "S1765C1.s1765c1f1");
    check_field_offset(lv, s1765c1f2, ABISELECT(72,44), "S1765C1.s1765c1f2");
    check_field_offset(lv, s1765c1f3, ABISELECT(80,48), "S1765C1.s1765c1f3");
    check_field_offset(lv, s1765c1f4, ABISELECT(88,52), "S1765C1.s1765c1f4");
    check_field_offset(lv, s1765c1f5, ABISELECT(136,88), "S1765C1.s1765c1f5");
    check_field_offset(lv, s1765c1f6, ABISELECT(160,100), "S1765C1.s1765c1f6");
    check_field_offset(lv, s1765c1f7, ABISELECT(192,132), "S1765C1.s1765c1f7");
    check_field_offset(lv, s1765c1f8, ABISELECT(196,136), "S1765C1.s1765c1f8");
    check_field_offset(lv, s1765c1f9, ABISELECT(200,140), "S1765C1.s1765c1f9");
    check_field_offset(lv, s1765c1f10, ABISELECT(204,144), "S1765C1.s1765c1f10");
    check_field_offset(lv, s1765c1f11, ABISELECT(208,148), "S1765C1.s1765c1f11");
    test_class_info(&lv, &cd_S1765C1);
    dp->~S1765C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1765C1(Test_S1765C1, "S1765C1", ABISELECT(216,152));

#else // __cplusplus

extern void _ZN7S1765C1C1Ev();
extern void _ZN7S1765C1D1Ev();
Name_Map name_map_S1765C1[] = {
  NSPAIR(_ZN7S1765C1C1Ev),
  NSPAIR(_ZN7S1765C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S1765C3;
extern VTBL_ENTRY _ZTI7S1765C3[];
extern  VTBL_ENTRY _ZTV7S1765C3[];
extern Class_Descriptor cd_S1765C2;
extern VTBL_ENTRY _ZTI7S1765C2[];
extern  VTBL_ENTRY _ZTV7S1765C2[];
static Base_Class bases_S1765C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S1765C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1765C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1765C1[];
extern void _ZN7S1765C1D1Ev();
extern void _ZN7S1765C1D0Ev();
extern void _ZN7S1765C33v10Ev();
extern void _ZN7S1765C33v11Ev();
extern void _ZN7S1765C33v12Ev();
extern void _ZN7S1765C33v13Ev();
extern void _ZN7S1765C33v14Ev();
extern void _ZN7S1765C33v15Ev();
extern void _ZN7S1765C33v16Ev();
extern void _ZN7S1765C33v17Ev();
extern void _ZN7S1765C33v18Ev();
extern void _ZN7S1765C33v19Ev();
extern void _ZN7S1765C33v20Ev();
extern void _ZN7S1765C12v1Ev();
extern void _ZN7S1765C12v2Ev();
extern void _ZN7S1765C12v3Ev();
extern void _ZN7S1765C12v4Ev();
extern void _ZN7S1765C12v5Ev();
extern void _ZN7S1765C12v6Ev();
extern void _ZN7S1765C12v7Ev();
extern void _ZN7S1765C12v8Ev();
extern void _ZN7S1765C12v9Ev();
static  VTBL_ENTRY vtc_S1765C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1765C1[0]),
  (VTBL_ENTRY)&_ZN7S1765C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1765C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1765C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1765C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1765C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1765C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1765C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1765C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1765C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1765C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1765C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1765C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S1765C1[];
extern  VTBL_ENTRY _ZTV7S1765C1[];
Class_Descriptor cd_S1765C1 = {  "S1765C1", // class name
  bases_S1765C1, 3,
  &(vtc_S1765C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,152), // object size
  NSPAIRA(_ZTI7S1765C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1765C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19493C3  : virtual S19863C10 , virtual S19863C9_nt {
  long double s19493c3f0[10];
  virtual  ~S19493C3(); // _ZN8S19493C3D2Ev
  S19493C3(); // tgen
};
//SIG(-1 S19493C3) C1{ VBC2{ m} VBC3{ m Fi} vd FD[10]}


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

static void Test_S19493C3()
{
  extern Class_Descriptor cd_S19493C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S19493C3, buf);
    S19493C3 *dp, &lv = *(dp=new (buf) S19493C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S19493C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19493C3)");
    check_base_class_offset(lv, (S19863C10*), 0, "S19493C3");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(176,124), "S19493C3");
    check_field_offset(lv, s19493c3f0, ABISELECT(16,4), "S19493C3.s19493c3f0");
    test_class_info(&lv, &cd_S19493C3);
    dp->~S19493C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19493C3(Test_S19493C3, "S19493C3", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN8S19493C3C1Ev();
extern void _ZN8S19493C3D2Ev();
Name_Map name_map_S19493C3[] = {
  NSPAIR(_ZN8S19493C3C1Ev),
  NSPAIR(_ZN8S19493C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S19493C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C9_nt,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19493C3[];
extern void _ZN8S19493C3D1Ev();
extern void _ZN8S19493C3D0Ev();
static  VTBL_ENTRY vtc_S19493C3[] = {
  ABISELECT(176,124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C3[0]),
  (VTBL_ENTRY)&_ZN8S19493C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19493C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S19493C3[];
static  VTT_ENTRY vtt_S19493C3[] = {
  {&(_ZTV8S19493C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19493C3[];
extern  VTBL_ENTRY _ZTV8S19493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C3[];
Class_Descriptor cd_S19493C3 = {  "S19493C3", // class name
  bases_S19493C3, 2,
  &(vtc_S19493C3[0]), // expected_vtbl_contents
  &(vtt_S19493C3[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI8S19493C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19493C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19493C3),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  S19493C2  : S19493C3 {
  __tsi64 s19493c2f0;
  ~S19493C2(); // tgen
  S19493C2(); // tgen
};
//SIG(-1 S19493C2) C1{ BC2{ VBC3{ m} VBC4{ m Fi} vd FD[10]} FL}


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

static void Test_S19493C2()
{
  extern Class_Descriptor cd_S19493C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,35)];
    init_test(&cd_S19493C2, buf);
    S19493C2 *dp, &lv = *(dp=new (buf) S19493C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,136), "sizeof(S19493C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19493C2)");
    check_base_class_offset(lv, (S19863C10*)(S19493C3*), 0, "S19493C2");
    check_base_class_offset(lv, (S19863C9_nt*)(S19493C3*), ABISELECT(184,132), "S19493C2");
    check_base_class_offset(lv, (S19493C3*), 0, "S19493C2");
    check_field_offset(lv, s19493c2f0, ABISELECT(176,124), "S19493C2.s19493c2f0");
    test_class_info(&lv, &cd_S19493C2);
    dp->~S19493C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19493C2(Test_S19493C2, "S19493C2", ABISELECT(192,136));

#else // __cplusplus

extern void _ZN8S19493C2C1Ev();
extern void _ZN8S19493C2D1Ev();
Name_Map name_map_S19493C2[] = {
  NSPAIR(_ZN8S19493C2C1Ev),
  NSPAIR(_ZN8S19493C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19493C3;
extern VTBL_ENTRY _ZTI8S19493C3[];
extern  VTBL_ENTRY _ZTV8S19493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C3[];
static Base_Class bases_S19493C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19493C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19493C2[];
extern void _ZN8S19493C2D1Ev();
extern void _ZN8S19493C2D0Ev();
static  VTBL_ENTRY vtc_S19493C2[] = {
  ABISELECT(184,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C2[0]),
  (VTBL_ENTRY)&_ZN8S19493C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19493C2D0Ev,
};
extern VTBL_ENTRY _ZTV8S19493C2[];
extern void _ZN8S19493C3D1Ev();
extern void _ZN8S19493C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19493C3__8S19493C2[] = {
  ABISELECT(184,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C3[0]),
  (VTBL_ENTRY)&_ZN8S19493C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19493C3D0Ev,
};
static  VTT_ENTRY vtt_S19493C2[] = {
  {&(_ZTV8S19493C2[4]),  4,6},
  {&(_tg__ZTV8S19493C3__8S19493C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19493C2[];
extern  VTBL_ENTRY _ZTV8S19493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C2[];
Class_Descriptor cd_S19493C2 = {  "S19493C2", // class name
  bases_S19493C2, 3,
  &(vtc_S19493C2[0]), // expected_vtbl_contents
  &(vtt_S19493C2[0]), // expected_vtt_contents
  ABISELECT(192,136), // object size
  NSPAIRA(_ZTI8S19493C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19493C2),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19493C2),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  S19493C10  : S19863C10 {
};
//SIG(-1 S19493C10) C1{ BC2{ m}}



static void Test_S19493C10()
{
  extern Class_Descriptor cd_S19493C10;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S19493C10, buf);
    S19493C10 &lv = *(new (buf) S19493C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S19493C10)");
    check2(__alignof__(lv), 1, "__alignof__(S19493C10)");
    check_base_class_offset(lv, (S19863C10*), 0, "S19493C10");
    test_class_info(&lv, &cd_S19493C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19493C10(Test_S19493C10, "S19493C10", 1);

#else // __cplusplus

extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S19493C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19493C10[];
Class_Descriptor cd_S19493C10 = {  "S19493C10", // class name
  bases_S19493C10, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S19493C10),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  S19493C8  : S19863C2_nt , S19863C10 , virtual S19493C10 , virtual S19863C9_nt {
  ~S19493C8(); // tgen
  S19493C8(); // tgen
};
//SIG(-1 S19493C8) C1{ BC2{ m} BC3{ m} VBC4{ BC3} VBC5{ m Fi}}


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

static void Test_S19493C8()
{
  extern Class_Descriptor cd_S19493C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19493C8, buf);
    S19493C8 *dp, &lv = *(dp=new (buf) S19493C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19493C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19493C8)");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S19493C8");
    /*is_ambiguous_... S19493C8::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*), 0, "S19493C8");
    check_base_class_offset(lv, (S19863C10*)(S19493C10*), ABISELECT(8,4), "S19493C8");
    check_base_class_offset(lv, (S19493C10*), ABISELECT(8,4), "S19493C8");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(8,4), "S19493C8");
    test_class_info(&lv, &cd_S19493C8);
    dp->~S19493C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19493C8(Test_S19493C8, "S19493C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19493C8C1Ev();
extern void _ZN8S19493C8D1Ev();
Name_Map name_map_S19493C8[] = {
  NSPAIR(_ZN8S19493C8C1Ev),
  NSPAIR(_ZN8S19493C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19493C10;
extern VTBL_ENTRY _ZTI9S19493C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S19493C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C2_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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C10,    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_S19493C10,    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},
  {&cd_S19863C9_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19493C8[];
static  VTBL_ENTRY vtc_S19493C8[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C8[0]),
};
extern VTBL_ENTRY _ZTV8S19493C8[];
static  VTT_ENTRY vtt_S19493C8[] = {
  {&(_ZTV8S19493C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19493C8[];
extern  VTBL_ENTRY _ZTV8S19493C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C8[];
Class_Descriptor cd_S19493C8 = {  "S19493C8", // class name
  bases_S19493C8, 5,
  &(vtc_S19493C8[0]), // expected_vtbl_contents
  &(vtt_S19493C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19493C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19493C8),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19493C8),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  S19493C14  : virtual S19863C6 , S19863C2_nt {
  virtual  ~S19493C14(); // _ZN9S19493C14D2Ev
  S19493C14(); // tgen
};
//SIG(-1 S19493C14) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} BC6{ m} vd}


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

static void Test_S19493C14()
{
  extern Class_Descriptor cd_S19493C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,35)];
    init_test(&cd_S19493C14, buf);
    S19493C14 *dp, &lv = *(dp=new (buf) S19493C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,136), "sizeof(S19493C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19493C14)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,4), "S19493C14");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S19493C14");
    test_class_info(&lv, &cd_S19493C14);
    dp->~S19493C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19493C14(Test_S19493C14, "S19493C14", ABISELECT(224,136));

#else // __cplusplus

extern void _ZN9S19493C14C1Ev();
extern void _ZN9S19493C14D2Ev();
Name_Map name_map_S19493C14[] = {
  NSPAIR(_ZN9S19493C14C1Ev),
  NSPAIR(_ZN9S19493C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
static Base_Class bases_S19493C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,4), //bcp->offset
    5, //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_S19863C2_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 _ZTI9S19493C14[];
extern void _ZN9S19493C14D1Ev();
extern void _ZN9S19493C14D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19493C14D1Ev,_ZTv0_n12_N9S19493C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S19493C14D1Ev,_ZThn4_N9S19493C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19493C14D0Ev,_ZTv0_n12_N9S19493C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S19493C14D0Ev,_ZThn4_N9S19493C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19493C14[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C14[0]),
  (VTBL_ENTRY)&_ZN9S19493C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C14D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S19493C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C14D1Ev,_ZTv0_n12_N9S19493C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C14D0Ev,_ZTv0_n12_N9S19493C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19493C14[];
static  VTT_ENTRY vtt_S19493C14[] = {
  {&(_ZTV9S19493C14[3]),  3,10},
  {&(_ZTV9S19493C14[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19493C14[];
extern  VTBL_ENTRY _ZTV9S19493C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C14[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C14D0Ev,_ZTv0_n12_N9S19493C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19493C14D0Ev,_ZThn4_N9S19493C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C14D1Ev,_ZTv0_n12_N9S19493C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19493C14D1Ev,_ZThn4_N9S19493C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19493C14 = {  "S19493C14", // class name
  bases_S19493C14, 2,
  &(vtc_S19493C14[0]), // expected_vtbl_contents
  &(vtt_S19493C14[0]), // expected_vtt_contents
  ABISELECT(224,136), // object size
  NSPAIRA(_ZTI9S19493C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19493C14),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19493C14),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19493C12  : virtual S19863C12_nt , virtual S19863C9_nt , virtual S19863C6 , virtual S19493C14 , S19493C8 {
  int s19493c12f0;
  virtual  ~S19493C12(); // _ZN9S19493C12D2Ev
  S19493C12(); // tgen
};
//SIG(-1 S19493C12) C1{ VBC2{ m Fs} VBC3{ m Fi} VBC4{ vd m FC5{ VBC6{ m} VBC3 vd FD[10]}} VBC7{ VBC4 BC8{ m} vd} BC9{ BC8 BC10{ m} VBC11{ BC10} VBC3} vd Fi}


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

static void Test_S19493C12()
{
  extern Class_Descriptor cd_S19493C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,40)];
    init_test(&cd_S19493C12, buf);
    S19493C12 *dp, &lv = *(dp=new (buf) S19493C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,156), "sizeof(S19493C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19493C12)");
    check_base_class_offset(lv, (S19863C12_nt*), ABISELECT(12,8), "S19493C12");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(16,12), "S19493C12");
    check_base_class_offset(lv, (S19863C9_nt*)(S19493C8*), ABISELECT(16,12), "S19493C12");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(32,16), "S19493C12");
    check_base_class_offset(lv, (S19863C6*)(S19493C14*), ABISELECT(32,16), "S19493C12");
    check_base_class_offset(lv, (S19863C2_nt*)(S19493C14*), ABISELECT(240,148), "S19493C12");
    check_base_class_offset(lv, (S19493C14*), ABISELECT(240,148), "S19493C12");
    check_base_class_offset(lv, (S19863C2_nt*)(S19493C8*), 0, "S19493C12");
    /*is_ambiguous_... S19493C8::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19493C8*), 0, "S19493C12");
    check_base_class_offset(lv, (S19863C10*)(S19493C10*), ABISELECT(248,152), "S19493C12");
    check_base_class_offset(lv, (S19493C10*)(S19493C8*), ABISELECT(248,152), "S19493C12");
    check_base_class_offset(lv, (S19493C8*), 0, "S19493C12");
    check_field_offset(lv, s19493c12f0, ABISELECT(8,4), "S19493C12.s19493c12f0");
    test_class_info(&lv, &cd_S19493C12);
    dp->~S19493C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19493C12(Test_S19493C12, "S19493C12", ABISELECT(256,156));

#else // __cplusplus

extern void _ZN9S19493C12C1Ev();
extern void _ZN9S19493C12D2Ev();
Name_Map name_map_S19493C12[] = {
  NSPAIR(_ZN9S19493C12C1Ev),
  NSPAIR(_ZN9S19493C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19493C14;
extern VTBL_ENTRY _ZTI9S19493C14[];
extern  VTBL_ENTRY _ZTV9S19493C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C14[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19493C10;
extern VTBL_ENTRY _ZTI9S19493C10[];
extern Class_Descriptor cd_S19493C8;
extern VTBL_ENTRY _ZTI8S19493C8[];
extern  VTBL_ENTRY _ZTV8S19493C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C8[];
static Base_Class bases_S19493C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C12_nt,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C9_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C6,    ABISELECT(32,16), //bcp->offset
    9, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C2_nt,    ABISELECT(240,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19493C14,    ABISELECT(240,148), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C2_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
    9, //immediately_derived
  0, 0},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C10,    ABISELECT(248,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
    8, //immediately_derived
  0, 0},
  {&cd_S19493C10,    ABISELECT(248,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
    9, //immediately_derived
  0, 1},
  {&cd_S19493C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19493C12[];
extern void _ZN9S19493C12D1Ev();
extern void _ZN9S19493C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19493C12D1Ev,_ZTv0_n12_N9S19493C12D1Ev)();
extern void ABISELECT(_ZThn32_N9S19493C12D1Ev,_ZThn16_N9S19493C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19493C12D0Ev,_ZTv0_n12_N9S19493C12D0Ev)();
extern void ABISELECT(_ZThn32_N9S19493C12D0Ev,_ZThn16_N9S19493C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19493C12D1Ev,_ZTv0_n16_N9S19493C12D1Ev)();
extern void ABISELECT(_ZThn240_N9S19493C12D1Ev,_ZThn148_N9S19493C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19493C12D0Ev,_ZTv0_n16_N9S19493C12D0Ev)();
extern void ABISELECT(_ZThn240_N9S19493C12D0Ev,_ZThn148_N9S19493C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19493C12[] = {
  ABISELECT(240,148),
  ABISELECT(32,16),
  ABISELECT(12,8),
  ABISELECT(16,12),
  ABISELECT(248,152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C12[0]),
  (VTBL_ENTRY)&_ZN9S19493C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C12D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19493C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C12D1Ev,_ZTv0_n12_N9S19493C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C12D0Ev,_ZTv0_n12_N9S19493C12D0Ev),
  ABISELECT(-240,-148),
  ABISELECT(-208,-132),
  ABISELECT(-240,-148),
  (VTBL_ENTRY)&(_ZTI9S19493C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19493C12D1Ev,_ZTv0_n16_N9S19493C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19493C12D0Ev,_ZTv0_n16_N9S19493C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19493C12[];
static  VTBL_ENTRY _tg__ZTV8S19493C8__9S19493C12[] = {
  ABISELECT(16,12),
  ABISELECT(248,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C8[0]),
};
extern void _ZN9S19493C14D1Ev();
extern void _ZN9S19493C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19493C14__9S19493C12[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C14[0]),
  (VTBL_ENTRY)&_ZN9S19493C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19493C14D1Ev,_ZTv0_n12_N9S19493C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19493C14D0Ev,_ZTv0_n12_N9S19493C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19493C14__9S19493C12[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S19493C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C14D1Ev,_ZTv0_n12_N9S19493C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C14D0Ev,_ZTv0_n12_N9S19493C14D0Ev),
};
static  VTT_ENTRY vtt_S19493C12[] = {
  {&(_ZTV9S19493C12[7]),  7,20},
  {&(_tg__ZTV8S19493C8__9S19493C12[4]),  4,4},
  {&(_ZTV9S19493C12[12]),  12,20},
  {&(_ZTV9S19493C12[18]),  18,20},
  {&(_tg__ZTV9S19493C14__9S19493C12[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19493C14__9S19493C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19493C12[];
extern  VTBL_ENTRY _ZTV9S19493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C12[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19493C12D0Ev,_ZTv0_n16_N9S19493C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19493C12D0Ev,_ZThn148_N9S19493C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19493C12D1Ev,_ZTv0_n16_N9S19493C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19493C12D1Ev,_ZThn148_N9S19493C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C12D0Ev,_ZTv0_n12_N9S19493C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19493C12D0Ev,_ZThn16_N9S19493C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C12D1Ev,_ZTv0_n12_N9S19493C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19493C12D1Ev,_ZThn16_N9S19493C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19493C12 = {  "S19493C12", // class name
  bases_S19493C12, 10,
  &(vtc_S19493C12[0]), // expected_vtbl_contents
  &(vtt_S19493C12[0]), // expected_vtt_contents
  ABISELECT(256,156), // object size
  NSPAIRA(_ZTI9S19493C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19493C12),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19493C12),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19493C15  : virtual S19863C6 , virtual S19863C2_nt , virtual S19863C10 {
  void *s19493c15f0;
  ~S19493C15(); // tgen
  S19493C15(); // tgen
};
//SIG(-1 S19493C15) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} VBC6{ m} VBC7{ m} Fp}


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

static void Test_S19493C15()
{
  extern Class_Descriptor cd_S19493C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,36)];
    init_test(&cd_S19493C15, buf);
    S19493C15 *dp, &lv = *(dp=new (buf) S19493C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S19493C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19493C15)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,8), "S19493C15");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S19493C15");
    check_base_class_offset(lv, (S19863C10*), 0, "S19493C15");
    check_field_offset(lv, s19493c15f0, ABISELECT(8,4), "S19493C15.s19493c15f0");
    test_class_info(&lv, &cd_S19493C15);
    dp->~S19493C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19493C15(Test_S19493C15, "S19493C15", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN9S19493C15C1Ev();
extern void _ZN9S19493C15D1Ev();
Name_Map name_map_S19493C15[] = {
  NSPAIR(_ZN9S19493C15C1Ev),
  NSPAIR(_ZN9S19493C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S19493C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,8), //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_S19863C2_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, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19493C15[];
extern void _ZN9S19493C15D1Ev();
extern void _ZN9S19493C15D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19493C15D1Ev,_ZTv0_n12_N9S19493C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S19493C15D1Ev,_ZThn8_N9S19493C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19493C15D0Ev,_ZTv0_n12_N9S19493C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S19493C15D0Ev,_ZThn8_N9S19493C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19493C15[] = {
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C15[0]),
  (VTBL_ENTRY)&_ZN9S19493C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C15D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19493C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C15D1Ev,_ZTv0_n12_N9S19493C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C15D0Ev,_ZTv0_n12_N9S19493C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19493C15[];
static  VTT_ENTRY vtt_S19493C15[] = {
  {&(_ZTV9S19493C15[5]),  5,12},
  {&(_ZTV9S19493C15[10]),  10,12},
};
extern VTBL_ENTRY _ZTI9S19493C15[];
extern  VTBL_ENTRY _ZTV9S19493C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C15[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C15D0Ev,_ZTv0_n12_N9S19493C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19493C15D0Ev,_ZThn8_N9S19493C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C15D1Ev,_ZTv0_n12_N9S19493C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19493C15D1Ev,_ZThn8_N9S19493C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19493C15 = {  "S19493C15", // class name
  bases_S19493C15, 3,
  &(vtc_S19493C15[0]), // expected_vtbl_contents
  &(vtt_S19493C15[0]), // expected_vtt_contents
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI9S19493C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19493C15),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19493C15),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19493C7  : virtual S19493C8 , S19863C6 , S19493C12 , virtual S19863C8 , virtual S19493C15 {
  ~S19493C7(); // tgen
  S19493C7(); // tgen
};
//SIG(-1 S19493C7) C1{ VBC2{ BC3{ m} BC4{ m} VBC5{ BC4} VBC6{ m Fi}} BC7{ vd m FC8{ VBC9{ m} VBC6 vd FD[10]}} BC10{ VBC11{ m Fs} VBC6 VBC7 VBC12{ VBC7 BC3 vd} BC2 vd Fi} VBC9 VBC13{ VBC7 VBC3 VBC4 Fp}}


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

static void Test_S19493C7()
{
  extern Class_Descriptor cd_S19493C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,76)];
    init_test(&cd_S19493C7, buf);
    S19493C7 *dp, &lv = *(dp=new (buf) S19493C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,300), "sizeof(S19493C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19493C7)");
    /*is_ambiguous_... S19493C7::S19493C8 */ AMB_check_base_class_offset(lv, (S19863C2_nt*)(S19493C8*), ABISELECT(224,140), "S19493C7");
    /*is_ambiguous_... S19493C7::S19493C8 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19493C8*), ABISELECT(224,140), "S19493C7");
    check_base_class_offset(lv, (S19863C10*)(S19493C10*), 0, "S19493C7");
    /*is_ambiguous_... S19493C7::S19493C8 */ AMB_check_base_class_offset(lv, (S19493C10*)(S19493C8*), 0, "S19493C7");
    check_base_class_offset(lv, (S19493C10*)(S19493C8*)(S19493C12*), 0, "S19493C7");
    /*is_ambiguous_... S19493C7::S19493C8 */ AMB_check_base_class_offset(lv, (S19863C9_nt*)(S19493C8*), ABISELECT(232,144), "S19493C7");
    check_base_class_offset(lv, (S19863C9_nt*)(S19493C12*), ABISELECT(232,144), "S19493C7");
    check_base_class_offset(lv, (S19863C9_nt*)(S19493C8*)(S19493C12*), ABISELECT(232,144), "S19493C7");
    /*is_ambiguous_... S19493C7::S19493C8 */ AMB_check_base_class_offset(lv, (S19493C8*), ABISELECT(224,140), "S19493C7");
    /*is_ambiguous_... S19493C7::S19863C6 */ AMB_check_base_class_offset(lv, (S19863C6*), 0, "S19493C7");
    check_base_class_offset(lv, (S19863C12_nt*)(S19493C12*), ABISELECT(236,148), "S19493C7");
    check_base_class_offset(lv, (S19863C6*)(S19493C12*), ABISELECT(240,152), "S19493C7");
    check_base_class_offset(lv, (S19863C6*)(S19493C14*), ABISELECT(240,152), "S19493C7");
    check_base_class_offset(lv, (S19863C6*)(S19493C15*), ABISELECT(240,152), "S19493C7");
    check_base_class_offset(lv, (S19863C2_nt*)(S19493C14*), ABISELECT(448,284), "S19493C7");
    check_base_class_offset(lv, (S19493C14*)(S19493C12*), ABISELECT(448,284), "S19493C7");
    check_base_class_offset(lv, (S19863C2_nt*)(S19493C8*)(S19493C12*), ABISELECT(208,132), "S19493C7");
    /*is_ambiguous_... S19493C8::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19493C8*)(S19493C12*), ABISELECT(208,132), "S19493C7");
    check_base_class_offset(lv, (S19493C8*)(S19493C12*), ABISELECT(208,132), "S19493C7");
    check_base_class_offset(lv, (S19493C12*), ABISELECT(208,132), "S19493C7");
    check_base_class_offset(lv, (S19863C8*), 0, "S19493C7");
    check_base_class_offset(lv, (S19863C2_nt*)(S19493C15*), 0, "S19493C7");
    check_base_class_offset(lv, (S19863C10*)(S19493C15*), ABISELECT(472,296), "S19493C7");
    check_base_class_offset(lv, (S19493C15*), ABISELECT(456,288), "S19493C7");
    test_class_info(&lv, &cd_S19493C7);
    dp->~S19493C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19493C7(Test_S19493C7, "S19493C7", ABISELECT(480,300));

#else // __cplusplus

extern void _ZN8S19493C7C1Ev();
extern void _ZN8S19493C7D1Ev();
Name_Map name_map_S19493C7[] = {
  NSPAIR(_ZN8S19493C7C1Ev),
  NSPAIR(_ZN8S19493C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19493C10;
extern VTBL_ENTRY _ZTI9S19493C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19493C8;
extern VTBL_ENTRY _ZTI8S19493C8[];
extern  VTBL_ENTRY _ZTV8S19493C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C8[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19493C14;
extern VTBL_ENTRY _ZTI9S19493C14[];
extern  VTBL_ENTRY _ZTV9S19493C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C14[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19493C8;
extern VTBL_ENTRY _ZTI8S19493C8[];
extern  VTBL_ENTRY _ZTV8S19493C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C8[];
extern Class_Descriptor cd_S19493C12;
extern VTBL_ENTRY _ZTI9S19493C12[];
extern  VTBL_ENTRY _ZTV9S19493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C12[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19493C15;
extern VTBL_ENTRY _ZTI9S19493C15[];
extern  VTBL_ENTRY _ZTV9S19493C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C15[];
static Base_Class bases_S19493C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C2_nt,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19863C10,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19493C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C9_nt,    ABISELECT(232,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19493C8,    ABISELECT(224,140), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19863C12_nt,    ABISELECT(236,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19863C6,    ABISELECT(240,152), //bcp->offset
    27, //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19863C2_nt,    ABISELECT(448,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19493C14,    ABISELECT(448,284), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19863C2_nt,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19863C10,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19493C8,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19493C12,    ABISELECT(208,132), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C2_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
    18, //immediately_derived
  0, 1},
  {&cd_S19863C10,    ABISELECT(472,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
    18, //immediately_derived
  0, 1},
  {&cd_S19493C15,    ABISELECT(456,288), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19493C7[];
extern void _ZN8S19493C7D1Ev();
extern void _ZN8S19493C7D0Ev();
extern void ABISELECT(_ZThn208_N8S19493C7D1Ev,_ZThn132_N8S19493C7D1Ev)();
extern void ABISELECT(_ZThn208_N8S19493C7D0Ev,_ZThn132_N8S19493C7D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19493C7D1Ev,_ZTv0_n12_N8S19493C7D1Ev)();
extern void ABISELECT(_ZThn240_N8S19493C7D1Ev,_ZThn152_N8S19493C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19493C7D0Ev,_ZTv0_n12_N8S19493C7D0Ev)();
extern void ABISELECT(_ZThn240_N8S19493C7D0Ev,_ZThn152_N8S19493C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19493C7D1Ev,_ZTv0_n16_N8S19493C7D1Ev)();
extern void ABISELECT(_ZThn448_N8S19493C7D1Ev,_ZThn284_N8S19493C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19493C7D0Ev,_ZTv0_n16_N8S19493C7D0Ev)();
extern void ABISELECT(_ZThn448_N8S19493C7D0Ev,_ZThn284_N8S19493C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19493C7D1Ev,_ZTv0_n24_N8S19493C7D1Ev)();
extern void ABISELECT(_ZThn456_N8S19493C7D1Ev,_ZThn288_N8S19493C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19493C7D0Ev,_ZTv0_n24_N8S19493C7D0Ev)();
extern void ABISELECT(_ZThn456_N8S19493C7D0Ev,_ZThn288_N8S19493C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19493C7[] = {
  ABISELECT(472,296),
  0,
  ABISELECT(456,288),
  0,
  ABISELECT(448,284),
  ABISELECT(240,152),
  ABISELECT(236,148),
  ABISELECT(232,144),
  0,
  ABISELECT(224,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C7[0]),
  (VTBL_ENTRY)&_ZN8S19493C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19493C7D0Ev,
  ABISELECT(240,152),
  ABISELECT(32,20),
  ABISELECT(28,16),
  ABISELECT(24,12),
  ABISELECT(-208,-132),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S19493C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S19493C7D1Ev,_ZThn132_N8S19493C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S19493C7D0Ev,_ZThn132_N8S19493C7D0Ev),
  ABISELECT(8,4),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S19493C7[0]),
  ABISELECT(-240,-152),
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI8S19493C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19493C7D1Ev,_ZTv0_n12_N8S19493C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19493C7D0Ev,_ZTv0_n12_N8S19493C7D0Ev),
  ABISELECT(-448,-284),
  ABISELECT(-208,-132),
  ABISELECT(-448,-284),
  (VTBL_ENTRY)&(_ZTI8S19493C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19493C7D1Ev,_ZTv0_n16_N8S19493C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19493C7D0Ev,_ZTv0_n16_N8S19493C7D0Ev),
  ABISELECT(-456,-288),
  ABISELECT(16,8),
  ABISELECT(-456,-288),
  ABISELECT(-216,-136),
  ABISELECT(-456,-288),
  (VTBL_ENTRY)&(_ZTI8S19493C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19493C7D1Ev,_ZTv0_n24_N8S19493C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19493C7D0Ev,_ZTv0_n24_N8S19493C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19493C7[];
extern void _ZN9S19493C12D1Ev();
extern void _ZN9S19493C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19493C12__8S19493C7[] = {
  ABISELECT(240,152),
  ABISELECT(32,20),
  ABISELECT(28,16),
  ABISELECT(24,12),
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C12[0]),
  (VTBL_ENTRY)&_ZN9S19493C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19493C89S19493C12__A1__8S19493C7[] = {
  ABISELECT(24,12),
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19493C12D1Ev,_ZTv0_n12_N9S19493C12D1Ev)();
extern void ABISELECT(_ZThn32_N9S19493C12D1Ev,_ZThn20_N9S19493C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19493C12D0Ev,_ZTv0_n12_N9S19493C12D0Ev)();
extern void ABISELECT(_ZThn32_N9S19493C12D0Ev,_ZThn20_N9S19493C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19493C12__8S19493C7[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19493C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C12D1Ev,_ZTv0_n12_N9S19493C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C12D0Ev,_ZTv0_n12_N9S19493C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19493C12D1Ev,_ZTv0_n16_N9S19493C12D1Ev)();
extern void ABISELECT(_ZThn240_N9S19493C12D1Ev,_ZThn152_N9S19493C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19493C12D0Ev,_ZTv0_n16_N9S19493C12D0Ev)();
extern void ABISELECT(_ZThn240_N9S19493C12D0Ev,_ZThn152_N9S19493C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19493C14__9S19493C12__8S19493C7[] = {
  ABISELECT(-240,-152),
  ABISELECT(-208,-132),
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI9S19493C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19493C12D1Ev,_ZTv0_n16_N9S19493C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19493C12D0Ev,_ZTv0_n16_N9S19493C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19493C8__8S19493C7[] = {
  ABISELECT(8,4),
  ABISELECT(-224,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C8[0]),
};
extern void _ZN9S19493C14D1Ev();
extern void _ZN9S19493C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19493C14__8S19493C7[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C14[0]),
  (VTBL_ENTRY)&_ZN9S19493C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19493C14D1Ev,_ZTv0_n12_N9S19493C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19493C14D0Ev,_ZTv0_n12_N9S19493C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19493C14__8S19493C7[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S19493C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C14D1Ev,_ZTv0_n12_N9S19493C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C14D0Ev,_ZTv0_n12_N9S19493C14D0Ev),
};
extern void _ZN9S19493C15D1Ev();
extern void _ZN9S19493C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19493C15__8S19493C7[] = {
  ABISELECT(16,8),
  ABISELECT(-456,-288),
  ABISELECT(-216,-136),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C15[0]),
  (VTBL_ENTRY)&_ZN9S19493C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19493C15D1Ev,_ZTv0_n12_N9S19493C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19493C15D0Ev,_ZTv0_n12_N9S19493C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19493C15__8S19493C7[] = {
  ABISELECT(216,136),
  ABISELECT(216,136),
  (VTBL_ENTRY)&(_ZTI9S19493C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C15D1Ev,_ZTv0_n12_N9S19493C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C15D0Ev,_ZTv0_n12_N9S19493C15D0Ev),
};
static  VTT_ENTRY vtt_S19493C7[] = {
  {&(_ZTV8S19493C7[12]),  12,46},
  {&(_tg__ZTV9S19493C12__8S19493C7[7]),  7,9},
  {&(_tg__ZTV8S19493C89S19493C12__A1__8S19493C7[4]),  4,4},
  {&(_tg__ZTV8S19863C6__9S19493C12__8S19493C7[3]),  3,5},
  {&(_tg__ZTV9S19493C14__9S19493C12__8S19493C7[4]),  4,6},
  {&(_ZTV8S19493C7[27]),  27,46},
  {&(_ZTV8S19493C7[21]),  21,46},
  {&(_ZTV8S19493C7[30]),  30,46},
  {&(_ZTV8S19493C7[36]),  36,46},
  {&(_ZTV8S19493C7[44]),  44,46},
  {&(_tg__ZTV8S19493C8__8S19493C7[4]),  4,4},
  {&(_tg__ZTV9S19493C14__8S19493C7[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19493C14__8S19493C7[3]),  3,5},
  {&(_tg__ZTV9S19493C15__8S19493C7[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S19493C15__8S19493C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19493C7[];
extern  VTBL_ENTRY _ZTV8S19493C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C7[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19493C12D0Ev,_ZTv0_n16_N9S19493C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19493C12D0Ev,_ZThn152_N9S19493C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19493C12D1Ev,_ZTv0_n16_N9S19493C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19493C12D1Ev,_ZThn152_N9S19493C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C12D0Ev,_ZTv0_n12_N9S19493C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19493C12D0Ev,_ZThn20_N9S19493C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C12D1Ev,_ZTv0_n12_N9S19493C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19493C12D1Ev,_ZThn20_N9S19493C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19493C7D0Ev,_ZTv0_n24_N8S19493C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S19493C7D0Ev,_ZThn288_N8S19493C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19493C7D1Ev,_ZTv0_n24_N8S19493C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S19493C7D1Ev,_ZThn288_N8S19493C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19493C7D0Ev,_ZTv0_n16_N8S19493C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S19493C7D0Ev,_ZThn284_N8S19493C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19493C7D1Ev,_ZTv0_n16_N8S19493C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S19493C7D1Ev,_ZThn284_N8S19493C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19493C7D0Ev,_ZTv0_n12_N8S19493C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19493C7D0Ev,_ZThn152_N8S19493C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19493C7D1Ev,_ZTv0_n12_N8S19493C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19493C7D1Ev,_ZThn152_N8S19493C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19493C7 = {  "S19493C7", // class name
  bases_S19493C7, 19,
  &(vtc_S19493C7[0]), // expected_vtbl_contents
  &(vtt_S19493C7[0]), // expected_vtt_contents
  ABISELECT(480,300), // object size
  NSPAIRA(_ZTI8S19493C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19493C7),46, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19493C7),15, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19493C16  : S19493C15 , virtual S19863C20 {
  ::S19863C9_nt s19493c16f0;
  ~S19493C16(); // tgen
  S19493C16(); // tgen
};
//SIG(-1 S19493C16) C1{ BC2{ VBC3{ vd m FC4{ VBC5{ m} VBC6{ m Fi} vd FD[10]}} VBC7{ m} VBC8{ m} Fp} VBC9{ m FC4[3] Fp} FC6}


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

static void Test_S19493C16()
{
  extern Class_Descriptor cd_S19493C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,134)];
    init_test(&cd_S19493C16, buf);
    S19493C16 *dp, &lv = *(dp=new (buf) S19493C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,532), "sizeof(S19493C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19493C16)");
    check_base_class_offset(lv, (S19863C6*)(S19493C15*), ABISELECT(32,12), "S19493C16");
    check_base_class_offset(lv, (S19863C2_nt*)(S19493C15*), 0, "S19493C16");
    check_base_class_offset(lv, (S19863C10*)(S19493C15*), 0, "S19493C16");
    check_base_class_offset(lv, (S19493C15*), 0, "S19493C16");
    check_base_class_offset(lv, (S19863C20*), ABISELECT(240,144), "S19493C16");
    check_field_offset(lv, s19493c16f0, ABISELECT(16,8), "S19493C16.s19493c16f0");
    test_class_info(&lv, &cd_S19493C16);
    dp->~S19493C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19493C16(Test_S19493C16, "S19493C16", ABISELECT(832,532));

#else // __cplusplus

extern void _ZN9S19493C16C1Ev();
extern void _ZN9S19493C16D1Ev();
Name_Map name_map_S19493C16[] = {
  NSPAIR(_ZN9S19493C16C1Ev),
  NSPAIR(_ZN9S19493C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19493C15;
extern VTBL_ENTRY _ZTI9S19493C15[];
extern  VTBL_ENTRY _ZTV9S19493C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C15[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
static Base_Class bases_S19493C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(32,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19863C2_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, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19493C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C20,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19493C16[];
extern void _ZN9S19493C16D1Ev();
extern void _ZN9S19493C16D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19493C16D1Ev,_ZTv0_n12_N9S19493C16D1Ev)();
extern void ABISELECT(_ZThn32_N9S19493C16D1Ev,_ZThn12_N9S19493C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19493C16D0Ev,_ZTv0_n12_N9S19493C16D0Ev)();
extern void ABISELECT(_ZThn32_N9S19493C16D0Ev,_ZThn12_N9S19493C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19493C16[] = {
  ABISELECT(240,144),
  0,
  0,
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C16[0]),
  (VTBL_ENTRY)&_ZN9S19493C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C16D0Ev,
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19493C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C16D1Ev,_ZTv0_n12_N9S19493C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C16D0Ev,_ZTv0_n12_N9S19493C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19493C16[];
extern void _ZN9S19493C15D1Ev();
extern void _ZN9S19493C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19493C15__9S19493C16[] = {
  0,
  0,
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C15[0]),
  (VTBL_ENTRY)&_ZN9S19493C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19493C15D1Ev,_ZTv0_n12_N9S19493C15D1Ev)();
extern void ABISELECT(_ZThn32_N9S19493C15D1Ev,_ZThn12_N9S19493C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19493C15D0Ev,_ZTv0_n12_N9S19493C15D0Ev)();
extern void ABISELECT(_ZThn32_N9S19493C15D0Ev,_ZThn12_N9S19493C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19493C15__9S19493C16[] = {
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19493C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C15D1Ev,_ZTv0_n12_N9S19493C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C15D0Ev,_ZTv0_n12_N9S19493C15D0Ev),
};
static  VTT_ENTRY vtt_S19493C16[] = {
  {&(_ZTV9S19493C16[6]),  6,13},
  {&(_tg__ZTV9S19493C15__9S19493C16[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S19493C15__9S19493C16[3]),  3,5},
  {&(_ZTV9S19493C16[11]),  11,13},
};
extern VTBL_ENTRY _ZTI9S19493C16[];
extern  VTBL_ENTRY _ZTV9S19493C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C16[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C15D0Ev,_ZTv0_n12_N9S19493C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19493C15D0Ev,_ZThn12_N9S19493C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C15D1Ev,_ZTv0_n12_N9S19493C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19493C15D1Ev,_ZThn12_N9S19493C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C16D0Ev,_ZTv0_n12_N9S19493C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19493C16D0Ev,_ZThn12_N9S19493C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C16D1Ev,_ZTv0_n12_N9S19493C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19493C16D1Ev,_ZThn12_N9S19493C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19493C16 = {  "S19493C16", // class name
  bases_S19493C16, 5,
  &(vtc_S19493C16[0]), // expected_vtbl_contents
  &(vtt_S19493C16[0]), // expected_vtt_contents
  ABISELECT(832,532), // object size
  NSPAIRA(_ZTI9S19493C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19493C16),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19493C16),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19493C1  : virtual S19493C2 , S19863C8 , S19493C7 , virtual S19493C16 {
  virtual  ~S19493C1(); // _ZN8S19493C1D2Ev
  S19493C1(); // tgen
};
//SIG(1 S19493C1) C1{ VBC2{ BC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]} FL} BC6{ m} BC7{ VBC8{ BC9{ m} BC4 VBC10{ BC4} VBC5} BC11{ vd m FC12{ VBC6 VBC5 vd FD[10]}} BC13{ VBC14{ m Fs} VBC5 VBC11 VBC15{ VBC11 BC9 vd} BC8 vd Fi} VBC6 VBC16{ VBC11 VBC9 VBC4 Fp}} VBC17{ BC16 VBC18{ m FC12[3] Fp} FC5} vd}


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

static void Test_S19493C1()
{
  extern Class_Descriptor cd_S19493C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(81,208)];
    init_test(&cd_S19493C1, buf);
    S19493C1 *dp, &lv = *(dp=new (buf) S19493C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1280,828), "sizeof(S19493C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19493C1)");
    check_base_class_offset(lv, (S19863C10*)(S19493C3*)(S19493C2*), 0, "S19493C1");
    /*is_ambiguous_... S19493C1::S19493C15 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19493C15*), 0, "S19493C1");
    check_base_class_offset(lv, (S19863C10*)(S19493C15*)(S19493C16*), 0, "S19493C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S19493C3*)(S19493C2*), ABISELECT(408,272), "S19493C1");
    /*is_ambiguous_... S19493C1::S19493C8 */ AMB_check_base_class_offset(lv, (S19863C9_nt*)(S19493C8*), ABISELECT(408,272), "S19493C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S19493C12*)(S19493C7*), ABISELECT(408,272), "S19493C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S19493C8*)(S19493C12*)(S19493C7*), ABISELECT(408,272), "S19493C1");
    check_base_class_offset(lv, (S19493C3*)(S19493C2*), ABISELECT(224,140), "S19493C1");
    check_base_class_offset(lv, (S19493C2*), ABISELECT(224,140), "S19493C1");
    /*is_ambiguous_... S19493C1::S19863C8 */ AMB_check_base_class_offset(lv, (S19863C8*), 0, "S19493C1");
    /*is_ambiguous_... S19493C1::S19493C8 */ AMB_check_base_class_offset(lv, (S19863C2_nt*)(S19493C8*), ABISELECT(416,276), "S19493C1");
    /*is_ambiguous_... S19493C1::S19493C8 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19493C8*), ABISELECT(416,276), "S19493C1");
    check_base_class_offset(lv, (S19863C10*)(S19493C10*), ABISELECT(424,280), "S19493C1");
    /*is_ambiguous_... S19493C1::S19493C8 */ AMB_check_base_class_offset(lv, (S19493C10*)(S19493C8*), ABISELECT(424,280), "S19493C1");
    check_base_class_offset(lv, (S19493C10*)(S19493C8*)(S19493C12*)(S19493C7*), ABISELECT(424,280), "S19493C1");
    /*is_ambiguous_... S19493C7::S19493C8 */ AMB_check_base_class_offset(lv, (S19493C8*)(S19493C7*), ABISELECT(416,276), "S19493C1");
    /*is_ambiguous_... S19493C7::S19863C6 */ AMB_check_base_class_offset(lv, (S19863C6*)(S19493C7*), 0, "S19493C1");
    check_base_class_offset(lv, (S19863C12_nt*)(S19493C12*)(S19493C7*), ABISELECT(424,280), "S19493C1");
    check_base_class_offset(lv, (S19863C6*)(S19493C12*)(S19493C7*), ABISELECT(432,284), "S19493C1");
    check_base_class_offset(lv, (S19863C6*)(S19493C14*), ABISELECT(432,284), "S19493C1");
    /*is_ambiguous_... S19493C1::S19493C15 */ AMB_check_base_class_offset(lv, (S19863C6*)(S19493C15*), ABISELECT(432,284), "S19493C1");
    check_base_class_offset(lv, (S19863C6*)(S19493C15*)(S19493C16*), ABISELECT(432,284), "S19493C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S19493C14*), ABISELECT(640,416), "S19493C1");
    check_base_class_offset(lv, (S19493C14*)(S19493C12*)(S19493C7*), ABISELECT(640,416), "S19493C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S19493C8*)(S19493C12*)(S19493C7*), ABISELECT(208,132), "S19493C1");
    /*is_ambiguous_... S19493C8::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19493C8*)(S19493C12*)(S19493C7*), ABISELECT(208,132), "S19493C1");
    check_base_class_offset(lv, (S19493C8*)(S19493C12*)(S19493C7*), ABISELECT(208,132), "S19493C1");
    check_base_class_offset(lv, (S19493C12*)(S19493C7*), ABISELECT(208,132), "S19493C1");
    check_base_class_offset(lv, (S19863C8*)(S19493C7*), ABISELECT(648,420), "S19493C1");
    /*is_ambiguous_... S19493C1::S19493C15 */ AMB_check_base_class_offset(lv, (S19863C2_nt*)(S19493C15*), 0, "S19493C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S19493C15*)(S19493C16*), 0, "S19493C1");
    check_base_class_offset(lv, (S19493C15*)(S19493C7*), ABISELECT(648,420), "S19493C1");
    check_base_class_offset(lv, (S19493C7*), 0, "S19493C1");
    check_base_class_offset(lv, (S19493C15*)(S19493C16*), ABISELECT(664,428), "S19493C1");
    check_base_class_offset(lv, (S19863C20*)(S19493C16*), ABISELECT(688,440), "S19493C1");
    check_base_class_offset(lv, (S19493C16*), ABISELECT(664,428), "S19493C1");
    test_class_info(&lv, &cd_S19493C1);
    dp->~S19493C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19493C1(Test_S19493C1, "S19493C1", ABISELECT(1280,828));

#else // __cplusplus

extern void _ZN8S19493C1C1Ev();
extern void _ZN8S19493C1D2Ev();
Name_Map name_map_S19493C1[] = {
  NSPAIR(_ZN8S19493C1C1Ev),
  NSPAIR(_ZN8S19493C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19493C3;
extern VTBL_ENTRY _ZTI8S19493C3[];
extern  VTBL_ENTRY _ZTV8S19493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C3[];
extern Class_Descriptor cd_S19493C2;
extern VTBL_ENTRY _ZTI8S19493C2[];
extern  VTBL_ENTRY _ZTV8S19493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C2[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19493C10;
extern VTBL_ENTRY _ZTI9S19493C10[];
extern Class_Descriptor cd_S19493C8;
extern VTBL_ENTRY _ZTI8S19493C8[];
extern  VTBL_ENTRY _ZTV8S19493C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C8[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19493C14;
extern VTBL_ENTRY _ZTI9S19493C14[];
extern  VTBL_ENTRY _ZTV9S19493C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C14[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19493C8;
extern VTBL_ENTRY _ZTI8S19493C8[];
extern  VTBL_ENTRY _ZTV8S19493C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C8[];
extern Class_Descriptor cd_S19493C12;
extern VTBL_ENTRY _ZTI9S19493C12[];
extern  VTBL_ENTRY _ZTV9S19493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C12[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19493C15;
extern VTBL_ENTRY _ZTI9S19493C15[];
extern  VTBL_ENTRY _ZTV9S19493C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C15[];
extern Class_Descriptor cd_S19493C7;
extern VTBL_ENTRY _ZTI8S19493C7[];
extern  VTBL_ENTRY _ZTV8S19493C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C7[];
extern Class_Descriptor cd_S19493C15;
extern VTBL_ENTRY _ZTI9S19493C15[];
extern  VTBL_ENTRY _ZTV9S19493C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C15[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
extern Class_Descriptor cd_S19493C16;
extern VTBL_ENTRY _ZTI9S19493C16[];
extern  VTBL_ENTRY _ZTV9S19493C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19493C16[];
static Base_Class bases_S19493C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(408,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
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19493C3,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19493C2,    ABISELECT(224,140), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C2_nt,    ABISELECT(416,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C10,    ABISELECT(416,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C10,    ABISELECT(424,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19493C10,    ABISELECT(424,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19493C8,    ABISELECT(416,276), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19863C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19863C12_nt,    ABISELECT(424,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19863C6,    ABISELECT(432,284), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19863C2_nt,    ABISELECT(640,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19493C14,    ABISELECT(640,416), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19863C2_nt,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19863C10,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19493C8,    ABISELECT(208,132), //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
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19493C12,    ABISELECT(208,132), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19863C8,    ABISELECT(648,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C2_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
    21, //immediately_derived
  0, 1},
  {&cd_S19493C15,    ABISELECT(648,420), //bcp->offset
    48, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19493C7,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19493C15,    ABISELECT(664,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19863C20,    ABISELECT(688,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19493C16,    ABISELECT(664,428), //bcp->offset
    56, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19493C1[];
extern void _ZN8S19493C1D1Ev();
extern void _ZN8S19493C1D0Ev();
extern void ABISELECT(_ZThn208_N8S19493C1D1Ev,_ZThn132_N8S19493C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S19493C1D0Ev,_ZThn132_N8S19493C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19493C1D1Ev,_ZTv0_n20_N8S19493C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S19493C1D1Ev,_ZThn140_N8S19493C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19493C1D0Ev,_ZTv0_n20_N8S19493C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S19493C1D0Ev,_ZThn140_N8S19493C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19493C1D1Ev,_ZTv0_n12_N8S19493C1D1Ev)();
extern void ABISELECT(_ZThn432_N8S19493C1D1Ev,_ZThn284_N8S19493C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19493C1D0Ev,_ZTv0_n12_N8S19493C1D0Ev)();
extern void ABISELECT(_ZThn432_N8S19493C1D0Ev,_ZThn284_N8S19493C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19493C1D1Ev,_ZTv0_n16_N8S19493C1D1Ev)();
extern void ABISELECT(_ZThn640_N8S19493C1D1Ev,_ZThn416_N8S19493C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19493C1D0Ev,_ZTv0_n16_N8S19493C1D0Ev)();
extern void ABISELECT(_ZThn640_N8S19493C1D0Ev,_ZThn416_N8S19493C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19493C1D1Ev,_ZTv0_n24_N8S19493C1D1Ev)();
extern void ABISELECT(_ZThn648_N8S19493C1D1Ev,_ZThn420_N8S19493C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19493C1D0Ev,_ZTv0_n24_N8S19493C1D0Ev)();
extern void ABISELECT(_ZThn648_N8S19493C1D0Ev,_ZThn420_N8S19493C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19493C1D1Ev,_ZTv0_n28_N8S19493C1D1Ev)();
extern void ABISELECT(_ZThn664_N8S19493C1D1Ev,_ZThn428_N8S19493C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19493C1D0Ev,_ZTv0_n28_N8S19493C1D0Ev)();
extern void ABISELECT(_ZThn664_N8S19493C1D0Ev,_ZThn428_N8S19493C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19493C1[] = {
  ABISELECT(688,440),
  ABISELECT(664,428),
  ABISELECT(224,140),
  0,
  0,
  ABISELECT(648,420),
  ABISELECT(648,420),
  ABISELECT(640,416),
  ABISELECT(432,284),
  ABISELECT(424,280),
  ABISELECT(408,272),
  ABISELECT(424,280),
  ABISELECT(416,276),
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C1[0]),
  (VTBL_ENTRY)&_ZN8S19493C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19493C1D0Ev,
  ABISELECT(432,284),
  ABISELECT(224,152),
  ABISELECT(216,148),
  ABISELECT(200,140),
  ABISELECT(216,148),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S19493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S19493C1D1Ev,_ZThn132_N8S19493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S19493C1D0Ev,_ZThn132_N8S19493C1D0Ev),
  ABISELECT(-224,-140),
  ABISELECT(184,132),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S19493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19493C1D1Ev,_ZTv0_n20_N8S19493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19493C1D0Ev,_ZTv0_n20_N8S19493C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  ABISELECT(-416,-276),
  (VTBL_ENTRY)&(_ZTI8S19493C1[0]),
  ABISELECT(-432,-284),
  ABISELECT(-432,-284),
  (VTBL_ENTRY)&(_ZTI8S19493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19493C1D1Ev,_ZTv0_n12_N8S19493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19493C1D0Ev,_ZTv0_n12_N8S19493C1D0Ev),
  ABISELECT(-640,-416),
  ABISELECT(-208,-132),
  ABISELECT(-640,-416),
  (VTBL_ENTRY)&(_ZTI8S19493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19493C1D1Ev,_ZTv0_n16_N8S19493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19493C1D0Ev,_ZTv0_n16_N8S19493C1D0Ev),
  ABISELECT(-648,-420),
  ABISELECT(-648,-420),
  ABISELECT(-648,-420),
  ABISELECT(-216,-136),
  ABISELECT(-648,-420),
  (VTBL_ENTRY)&(_ZTI8S19493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19493C1D1Ev,_ZTv0_n24_N8S19493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19493C1D0Ev,_ZTv0_n24_N8S19493C1D0Ev),
  ABISELECT(-664,-428),
  ABISELECT(24,12),
  ABISELECT(-664,-428),
  ABISELECT(-664,-428),
  ABISELECT(-232,-144),
  ABISELECT(-664,-428),
  (VTBL_ENTRY)&(_ZTI8S19493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19493C1D1Ev,_ZTv0_n28_N8S19493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19493C1D0Ev,_ZTv0_n28_N8S19493C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19493C1[];
extern void _ZN8S19493C7D1Ev();
extern void _ZN8S19493C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19493C7__8S19493C1[] = {
  0,
  0,
  ABISELECT(648,420),
  ABISELECT(648,420),
  ABISELECT(640,416),
  ABISELECT(432,284),
  ABISELECT(424,280),
  ABISELECT(408,272),
  ABISELECT(424,280),
  ABISELECT(416,276),
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C7[0]),
  (VTBL_ENTRY)&_ZN8S19493C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19493C7D0Ev,
};
extern void _ZN9S19493C12D1Ev();
extern void _ZN9S19493C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19493C128S19493C7__8S19493C1[] = {
  ABISELECT(432,284),
  ABISELECT(224,152),
  ABISELECT(216,148),
  ABISELECT(200,140),
  ABISELECT(216,148),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C12[0]),
  (VTBL_ENTRY)&_ZN9S19493C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19493C89S19493C128S19493C7__A1__8S19493C1[] = {
  ABISELECT(200,140),
  ABISELECT(216,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19493C12D1Ev,_ZTv0_n12_N9S19493C12D1Ev)();
extern void ABISELECT(_ZThn224_N9S19493C12D1Ev,_ZThn152_N9S19493C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19493C12D0Ev,_ZTv0_n12_N9S19493C12D0Ev)();
extern void ABISELECT(_ZThn224_N9S19493C12D0Ev,_ZThn152_N9S19493C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19493C128S19493C7__8S19493C1[] = {
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  (VTBL_ENTRY)&(_ZTI9S19493C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C12D1Ev,_ZTv0_n12_N9S19493C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C12D0Ev,_ZTv0_n12_N9S19493C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19493C12D1Ev,_ZTv0_n16_N9S19493C12D1Ev)();
extern void ABISELECT(_ZThn432_N9S19493C12D1Ev,_ZThn284_N9S19493C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19493C12D0Ev,_ZTv0_n16_N9S19493C12D0Ev)();
extern void ABISELECT(_ZThn432_N9S19493C12D0Ev,_ZThn284_N9S19493C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19493C14__9S19493C128S19493C7__8S19493C1[] = {
  ABISELECT(-432,-284),
  ABISELECT(-208,-132),
  ABISELECT(-432,-284),
  (VTBL_ENTRY)&(_ZTI9S19493C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19493C12D1Ev,_ZTv0_n16_N9S19493C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19493C12D0Ev,_ZTv0_n16_N9S19493C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19493C8__8S19493C7__8S19493C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  ABISELECT(-416,-276),
  (VTBL_ENTRY)&(_ZTI8S19493C7[0]),
};
extern void ABISELECT(_ZThn208_N8S19493C7D1Ev,_ZThn132_N8S19493C7D1Ev)();
extern void ABISELECT(_ZThn208_N8S19493C7D0Ev,_ZThn132_N8S19493C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19493C12__8S19493C7__8S19493C1[] = {
  ABISELECT(432,284),
  ABISELECT(224,152),
  ABISELECT(216,148),
  ABISELECT(200,140),
  ABISELECT(216,148),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S19493C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S19493C7D1Ev,_ZThn132_N8S19493C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S19493C7D0Ev,_ZThn132_N8S19493C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19493C7D1Ev,_ZTv0_n12_N8S19493C7D1Ev)();
extern void ABISELECT(_ZThn432_N8S19493C7D1Ev,_ZThn284_N8S19493C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19493C7D0Ev,_ZTv0_n12_N8S19493C7D0Ev)();
extern void ABISELECT(_ZThn432_N8S19493C7D0Ev,_ZThn284_N8S19493C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__A1__8S19493C7__8S19493C1[] = {
  ABISELECT(-432,-284),
  ABISELECT(-432,-284),
  (VTBL_ENTRY)&(_ZTI8S19493C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19493C7D1Ev,_ZTv0_n12_N8S19493C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19493C7D0Ev,_ZTv0_n12_N8S19493C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19493C7D1Ev,_ZTv0_n16_N8S19493C7D1Ev)();
extern void ABISELECT(_ZThn640_N8S19493C7D1Ev,_ZThn416_N8S19493C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19493C7D0Ev,_ZTv0_n16_N8S19493C7D0Ev)();
extern void ABISELECT(_ZThn640_N8S19493C7D0Ev,_ZThn416_N8S19493C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19493C14__8S19493C7__8S19493C1[] = {
  ABISELECT(-640,-416),
  ABISELECT(-208,-132),
  ABISELECT(-640,-416),
  (VTBL_ENTRY)&(_ZTI8S19493C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19493C7D1Ev,_ZTv0_n16_N8S19493C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19493C7D0Ev,_ZTv0_n16_N8S19493C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19493C7D1Ev,_ZTv0_n24_N8S19493C7D1Ev)();
extern void ABISELECT(_ZThn648_N8S19493C7D1Ev,_ZThn420_N8S19493C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19493C7D0Ev,_ZTv0_n24_N8S19493C7D0Ev)();
extern void ABISELECT(_ZThn648_N8S19493C7D0Ev,_ZThn420_N8S19493C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19493C15__8S19493C7__8S19493C1[] = {
  ABISELECT(-648,-420),
  ABISELECT(-648,-420),
  ABISELECT(-648,-420),
  ABISELECT(-216,-136),
  ABISELECT(-648,-420),
  (VTBL_ENTRY)&(_ZTI8S19493C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19493C7D1Ev,_ZTv0_n24_N8S19493C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19493C7D0Ev,_ZTv0_n24_N8S19493C7D0Ev),
};
extern void _ZN8S19493C2D1Ev();
extern void _ZN8S19493C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19493C2__8S19493C1[] = {
  ABISELECT(184,132),
  ABISELECT(-224,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C2[0]),
  (VTBL_ENTRY)&_ZN8S19493C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19493C2D0Ev,
};
extern void _ZN8S19493C3D1Ev();
extern void _ZN8S19493C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19493C38S19493C2__8S19493C1[] = {
  ABISELECT(184,132),
  ABISELECT(-224,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C3[0]),
  (VTBL_ENTRY)&_ZN8S19493C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19493C3D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19493C8__8S19493C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19493C8[0]),
};
extern void _ZN9S19493C14D1Ev();
extern void _ZN9S19493C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19493C14__8S19493C1[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C14[0]),
  (VTBL_ENTRY)&_ZN9S19493C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19493C14D1Ev,_ZTv0_n12_N9S19493C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19493C14D0Ev,_ZTv0_n12_N9S19493C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19493C14__8S19493C1[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S19493C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C14D1Ev,_ZTv0_n12_N9S19493C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C14D0Ev,_ZTv0_n12_N9S19493C14D0Ev),
};
extern void _ZN9S19493C15D1Ev();
extern void _ZN9S19493C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19493C15__8S19493C1[] = {
  ABISELECT(-648,-420),
  ABISELECT(-648,-420),
  ABISELECT(-216,-136),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C15[0]),
  (VTBL_ENTRY)&_ZN9S19493C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19493C15D1Ev,_ZTv0_n12_N9S19493C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19493C15D0Ev,_ZTv0_n12_N9S19493C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19493C15__8S19493C1[] = {
  ABISELECT(216,136),
  ABISELECT(216,136),
  (VTBL_ENTRY)&(_ZTI9S19493C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C15D1Ev,_ZTv0_n12_N9S19493C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C15D0Ev,_ZTv0_n12_N9S19493C15D0Ev),
};
extern void _ZN9S19493C16D1Ev();
extern void _ZN9S19493C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19493C16__8S19493C1[] = {
  ABISELECT(24,12),
  ABISELECT(-664,-428),
  ABISELECT(-664,-428),
  ABISELECT(-232,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C16[0]),
  (VTBL_ENTRY)&_ZN9S19493C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C16D0Ev,
};
extern void _ZN9S19493C15D1Ev();
extern void _ZN9S19493C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19493C159S19493C16__A1__8S19493C1[] = {
  ABISELECT(-664,-428),
  ABISELECT(-664,-428),
  ABISELECT(-232,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19493C15[0]),
  (VTBL_ENTRY)&_ZN9S19493C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19493C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19493C15D1Ev,_ZTv0_n12_N9S19493C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19493C15D0Ev,_ZTv0_n12_N9S19493C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19493C159S19493C16__A1__8S19493C1[] = {
  ABISELECT(232,144),
  ABISELECT(232,144),
  (VTBL_ENTRY)&(_ZTI9S19493C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C15D1Ev,_ZTv0_n12_N9S19493C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C15D0Ev,_ZTv0_n12_N9S19493C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19493C16D1Ev,_ZTv0_n12_N9S19493C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19493C16D0Ev,_ZTv0_n12_N9S19493C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19493C16__8S19493C1[] = {
  ABISELECT(232,144),
  ABISELECT(232,144),
  (VTBL_ENTRY)&(_ZTI9S19493C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C16D1Ev,_ZTv0_n12_N9S19493C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19493C16D0Ev,_ZTv0_n12_N9S19493C16D0Ev),
};
static  VTT_ENTRY vtt_S19493C1[] = {
  {&(_ZTV8S19493C1[15]),  15,65},
  {&(_tg__ZTV8S19493C7__8S19493C1[12]),  12,14},
  {&(_tg__ZTV9S19493C128S19493C7__8S19493C1[7]),  7,9},
  {&(_tg__ZTV8S19493C89S19493C128S19493C7__A1__8S19493C1[4]),  4,4},
  {&(_tg__ZTV8S19863C6__9S19493C128S19493C7__8S19493C1[3]),  3,5},
  {&(_tg__ZTV9S19493C14__9S19493C128S19493C7__8S19493C1[4]),  4,6},
  {&(_tg__ZTV8S19493C8__8S19493C7__8S19493C1[4]),  4,4},
  {&(_tg__ZTV9S19493C12__8S19493C7__8S19493C1[7]),  7,9},
  {&(_tg__ZTV8S19863C6__A1__8S19493C7__8S19493C1[3]),  3,5},
  {&(_tg__ZTV9S19493C14__8S19493C7__8S19493C1[4]),  4,6},
  {&(_tg__ZTV9S19493C15__8S19493C7__8S19493C1[6]),  6,8},
  {&(_ZTV8S19493C1[31]),  31,65},
  {&(_ZTV8S19493C1[37]),  37,65},
  {&(_ZTV8S19493C1[24]),  24,65},
  {&(_ZTV8S19493C1[40]),  40,65},
  {&(_ZTV8S19493C1[46]),  46,65},
  {&(_ZTV8S19493C1[54]),  54,65},
  {&(_ZTV8S19493C1[63]),  63,65},
  {&(_tg__ZTV8S19493C2__8S19493C1[4]),  4,6},
  {&(_tg__ZTV8S19493C38S19493C2__8S19493C1[4]),  4,6},
  {&(_tg__ZTV8S19493C8__8S19493C1[4]),  4,4},
  {&(_tg__ZTV9S19493C14__8S19493C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19493C14__8S19493C1[3]),  3,5},
  {&(_tg__ZTV9S19493C15__8S19493C1[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S19493C15__8S19493C1[3]),  3,5},
  {&(_tg__ZTV9S19493C16__8S19493C1[6]),  6,8},
  {&(_tg__ZTV9S19493C159S19493C16__A1__8S19493C1[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S19493C159S19493C16__A1__8S19493C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19493C16__8S19493C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19493C1[];
extern  VTBL_ENTRY _ZTV8S19493C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19493C1[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19493C7D0Ev,_ZTv0_n24_N8S19493C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn648_N8S19493C7D0Ev,_ZThn420_N8S19493C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19493C7D1Ev,_ZTv0_n24_N8S19493C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn648_N8S19493C7D1Ev,_ZThn420_N8S19493C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19493C7D0Ev,_ZTv0_n16_N8S19493C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19493C7D0Ev,_ZThn416_N8S19493C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19493C7D1Ev,_ZTv0_n16_N8S19493C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19493C7D1Ev,_ZThn416_N8S19493C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19493C7D0Ev,_ZTv0_n12_N8S19493C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19493C7D0Ev,_ZThn284_N8S19493C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19493C7D1Ev,_ZTv0_n12_N8S19493C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19493C7D1Ev,_ZThn284_N8S19493C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19493C12D0Ev,_ZTv0_n16_N9S19493C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19493C12D0Ev,_ZThn284_N9S19493C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19493C12D1Ev,_ZTv0_n16_N9S19493C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19493C12D1Ev,_ZThn284_N9S19493C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C12D0Ev,_ZTv0_n12_N9S19493C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19493C12D0Ev,_ZThn152_N9S19493C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19493C12D1Ev,_ZTv0_n12_N9S19493C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19493C12D1Ev,_ZThn152_N9S19493C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19493C1D0Ev,_ZTv0_n28_N8S19493C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S19493C1D0Ev,_ZThn428_N8S19493C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19493C1D1Ev,_ZTv0_n28_N8S19493C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S19493C1D1Ev,_ZThn428_N8S19493C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19493C1D0Ev,_ZTv0_n24_N8S19493C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn648_N8S19493C1D0Ev,_ZThn420_N8S19493C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19493C1D1Ev,_ZTv0_n24_N8S19493C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn648_N8S19493C1D1Ev,_ZThn420_N8S19493C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19493C1D0Ev,_ZTv0_n16_N8S19493C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19493C1D0Ev,_ZThn416_N8S19493C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19493C1D1Ev,_ZTv0_n16_N8S19493C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19493C1D1Ev,_ZThn416_N8S19493C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19493C1D0Ev,_ZTv0_n12_N8S19493C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19493C1D0Ev,_ZThn284_N8S19493C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19493C1D1Ev,_ZTv0_n12_N8S19493C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19493C1D1Ev,_ZThn284_N8S19493C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19493C1D0Ev,_ZTv0_n20_N8S19493C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19493C1D0Ev,_ZThn140_N8S19493C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19493C1D1Ev,_ZTv0_n20_N8S19493C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19493C1D1Ev,_ZThn140_N8S19493C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19493C1 = {  "S19493C1", // class name
  bases_S19493C1, 26,
  &(vtc_S19493C1[0]), // expected_vtbl_contents
  &(vtt_S19493C1[0]), // expected_vtt_contents
  ABISELECT(1280,828), // object size
  NSPAIRA(_ZTI8S19493C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19493C1),65, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19493C1),29, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19492C3  : virtual S19863C10 , virtual S19863C9_nt {
  long double s19492c3f0[10];
  virtual  ~S19492C3(); // _ZN8S19492C3D2Ev
  S19492C3(); // tgen
};
//SIG(-1 S19492C3) C1{ VBC2{ m} VBC3{ m Fi} vd FD[10]}


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

static void Test_S19492C3()
{
  extern Class_Descriptor cd_S19492C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S19492C3, buf);
    S19492C3 *dp, &lv = *(dp=new (buf) S19492C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S19492C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19492C3)");
    check_base_class_offset(lv, (S19863C10*), 0, "S19492C3");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(176,124), "S19492C3");
    check_field_offset(lv, s19492c3f0, ABISELECT(16,4), "S19492C3.s19492c3f0");
    test_class_info(&lv, &cd_S19492C3);
    dp->~S19492C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19492C3(Test_S19492C3, "S19492C3", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN8S19492C3C1Ev();
extern void _ZN8S19492C3D2Ev();
Name_Map name_map_S19492C3[] = {
  NSPAIR(_ZN8S19492C3C1Ev),
  NSPAIR(_ZN8S19492C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S19492C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C9_nt,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19492C3[];
extern void _ZN8S19492C3D1Ev();
extern void _ZN8S19492C3D0Ev();
static  VTBL_ENTRY vtc_S19492C3[] = {
  ABISELECT(176,124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C3[0]),
  (VTBL_ENTRY)&_ZN8S19492C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19492C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S19492C3[];
static  VTT_ENTRY vtt_S19492C3[] = {
  {&(_ZTV8S19492C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19492C3[];
extern  VTBL_ENTRY _ZTV8S19492C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C3[];
Class_Descriptor cd_S19492C3 = {  "S19492C3", // class name
  bases_S19492C3, 2,
  &(vtc_S19492C3[0]), // expected_vtbl_contents
  &(vtt_S19492C3[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI8S19492C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19492C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19492C3),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  S19492C2  : S19492C3 {
  long s19492c2f0;
  ~S19492C2(); // tgen
  S19492C2(); // tgen
};
//SIG(-1 S19492C2) C1{ BC2{ VBC3{ m} VBC4{ m Fi} vd FD[10]} Fl}


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

static void Test_S19492C2()
{
  extern Class_Descriptor cd_S19492C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,34)];
    init_test(&cd_S19492C2, buf);
    S19492C2 *dp, &lv = *(dp=new (buf) S19492C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S19492C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19492C2)");
    check_base_class_offset(lv, (S19863C10*)(S19492C3*), 0, "S19492C2");
    check_base_class_offset(lv, (S19863C9_nt*)(S19492C3*), ABISELECT(184,128), "S19492C2");
    check_base_class_offset(lv, (S19492C3*), 0, "S19492C2");
    check_field_offset(lv, s19492c2f0, ABISELECT(176,124), "S19492C2.s19492c2f0");
    test_class_info(&lv, &cd_S19492C2);
    dp->~S19492C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19492C2(Test_S19492C2, "S19492C2", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN8S19492C2C1Ev();
extern void _ZN8S19492C2D1Ev();
Name_Map name_map_S19492C2[] = {
  NSPAIR(_ZN8S19492C2C1Ev),
  NSPAIR(_ZN8S19492C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19492C3;
extern VTBL_ENTRY _ZTI8S19492C3[];
extern  VTBL_ENTRY _ZTV8S19492C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C3[];
static Base_Class bases_S19492C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(184,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19492C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19492C2[];
extern void _ZN8S19492C2D1Ev();
extern void _ZN8S19492C2D0Ev();
static  VTBL_ENTRY vtc_S19492C2[] = {
  ABISELECT(184,128),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C2[0]),
  (VTBL_ENTRY)&_ZN8S19492C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19492C2D0Ev,
};
extern VTBL_ENTRY _ZTV8S19492C2[];
extern void _ZN8S19492C3D1Ev();
extern void _ZN8S19492C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19492C3__8S19492C2[] = {
  ABISELECT(184,128),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C3[0]),
  (VTBL_ENTRY)&_ZN8S19492C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19492C3D0Ev,
};
static  VTT_ENTRY vtt_S19492C2[] = {
  {&(_ZTV8S19492C2[4]),  4,6},
  {&(_tg__ZTV8S19492C3__8S19492C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19492C2[];
extern  VTBL_ENTRY _ZTV8S19492C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C2[];
Class_Descriptor cd_S19492C2 = {  "S19492C2", // class name
  bases_S19492C2, 3,
  &(vtc_S19492C2[0]), // expected_vtbl_contents
  &(vtt_S19492C2[0]), // expected_vtt_contents
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI8S19492C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19492C2),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19492C2),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  S19492C10  : S19863C10 {
};
//SIG(-1 S19492C10) C1{ BC2{ m}}



static void Test_S19492C10()
{
  extern Class_Descriptor cd_S19492C10;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S19492C10, buf);
    S19492C10 &lv = *(new (buf) S19492C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S19492C10)");
    check2(__alignof__(lv), 1, "__alignof__(S19492C10)");
    check_base_class_offset(lv, (S19863C10*), 0, "S19492C10");
    test_class_info(&lv, &cd_S19492C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19492C10(Test_S19492C10, "S19492C10", 1);

#else // __cplusplus

extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S19492C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19492C10[];
Class_Descriptor cd_S19492C10 = {  "S19492C10", // class name
  bases_S19492C10, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S19492C10),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  S19492C8  : S19863C2_nt , S19863C10 , virtual S19492C10 , virtual S19863C9_nt {
  ~S19492C8(); // tgen
  S19492C8(); // tgen
};
//SIG(-1 S19492C8) C1{ BC2{ m} BC3{ m} VBC4{ BC3} VBC5{ m Fi}}


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

static void Test_S19492C8()
{
  extern Class_Descriptor cd_S19492C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19492C8, buf);
    S19492C8 *dp, &lv = *(dp=new (buf) S19492C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19492C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19492C8)");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S19492C8");
    /*is_ambiguous_... S19492C8::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*), 0, "S19492C8");
    check_base_class_offset(lv, (S19863C10*)(S19492C10*), ABISELECT(8,4), "S19492C8");
    check_base_class_offset(lv, (S19492C10*), ABISELECT(8,4), "S19492C8");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(8,4), "S19492C8");
    test_class_info(&lv, &cd_S19492C8);
    dp->~S19492C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19492C8(Test_S19492C8, "S19492C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19492C8C1Ev();
extern void _ZN8S19492C8D1Ev();
Name_Map name_map_S19492C8[] = {
  NSPAIR(_ZN8S19492C8C1Ev),
  NSPAIR(_ZN8S19492C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19492C10;
extern VTBL_ENTRY _ZTI9S19492C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S19492C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C2_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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C10,    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_S19492C10,    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},
  {&cd_S19863C9_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19492C8[];
static  VTBL_ENTRY vtc_S19492C8[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C8[0]),
};
extern VTBL_ENTRY _ZTV8S19492C8[];
static  VTT_ENTRY vtt_S19492C8[] = {
  {&(_ZTV8S19492C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19492C8[];
extern  VTBL_ENTRY _ZTV8S19492C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C8[];
Class_Descriptor cd_S19492C8 = {  "S19492C8", // class name
  bases_S19492C8, 5,
  &(vtc_S19492C8[0]), // expected_vtbl_contents
  &(vtt_S19492C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19492C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19492C8),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19492C8),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  S19492C14  : virtual S19863C6 , S19863C2_nt {
  virtual  ~S19492C14(); // _ZN9S19492C14D2Ev
  S19492C14(); // tgen
};
//SIG(-1 S19492C14) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} BC6{ m} vd}


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

static void Test_S19492C14()
{
  extern Class_Descriptor cd_S19492C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,35)];
    init_test(&cd_S19492C14, buf);
    S19492C14 *dp, &lv = *(dp=new (buf) S19492C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,136), "sizeof(S19492C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19492C14)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,4), "S19492C14");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S19492C14");
    test_class_info(&lv, &cd_S19492C14);
    dp->~S19492C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19492C14(Test_S19492C14, "S19492C14", ABISELECT(224,136));

#else // __cplusplus

extern void _ZN9S19492C14C1Ev();
extern void _ZN9S19492C14D2Ev();
Name_Map name_map_S19492C14[] = {
  NSPAIR(_ZN9S19492C14C1Ev),
  NSPAIR(_ZN9S19492C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
static Base_Class bases_S19492C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,4), //bcp->offset
    5, //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_S19863C2_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 _ZTI9S19492C14[];
extern void _ZN9S19492C14D1Ev();
extern void _ZN9S19492C14D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19492C14D1Ev,_ZTv0_n12_N9S19492C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S19492C14D1Ev,_ZThn4_N9S19492C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19492C14D0Ev,_ZTv0_n12_N9S19492C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S19492C14D0Ev,_ZThn4_N9S19492C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19492C14[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C14[0]),
  (VTBL_ENTRY)&_ZN9S19492C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C14D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S19492C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C14D1Ev,_ZTv0_n12_N9S19492C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C14D0Ev,_ZTv0_n12_N9S19492C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19492C14[];
static  VTT_ENTRY vtt_S19492C14[] = {
  {&(_ZTV9S19492C14[3]),  3,10},
  {&(_ZTV9S19492C14[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19492C14[];
extern  VTBL_ENTRY _ZTV9S19492C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C14[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C14D0Ev,_ZTv0_n12_N9S19492C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19492C14D0Ev,_ZThn4_N9S19492C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C14D1Ev,_ZTv0_n12_N9S19492C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19492C14D1Ev,_ZThn4_N9S19492C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19492C14 = {  "S19492C14", // class name
  bases_S19492C14, 2,
  &(vtc_S19492C14[0]), // expected_vtbl_contents
  &(vtt_S19492C14[0]), // expected_vtt_contents
  ABISELECT(224,136), // object size
  NSPAIRA(_ZTI9S19492C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19492C14),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19492C14),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19492C12  : virtual S19863C12_nt , virtual S19863C9_nt , virtual S19863C6 , virtual S19492C14 , S19492C8 {
  int s19492c12f0;
  virtual  ~S19492C12(); // _ZN9S19492C12D2Ev
  S19492C12(); // tgen
};
//SIG(-1 S19492C12) C1{ VBC2{ m Fs} VBC3{ m Fi} VBC4{ vd m FC5{ VBC6{ m} VBC3 vd FD[10]}} VBC7{ VBC4 BC8{ m} vd} BC9{ BC8 BC10{ m} VBC11{ BC10} VBC3} vd Fi}


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

static void Test_S19492C12()
{
  extern Class_Descriptor cd_S19492C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,40)];
    init_test(&cd_S19492C12, buf);
    S19492C12 *dp, &lv = *(dp=new (buf) S19492C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,156), "sizeof(S19492C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19492C12)");
    check_base_class_offset(lv, (S19863C12_nt*), ABISELECT(12,8), "S19492C12");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(16,12), "S19492C12");
    check_base_class_offset(lv, (S19863C9_nt*)(S19492C8*), ABISELECT(16,12), "S19492C12");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(32,16), "S19492C12");
    check_base_class_offset(lv, (S19863C6*)(S19492C14*), ABISELECT(32,16), "S19492C12");
    check_base_class_offset(lv, (S19863C2_nt*)(S19492C14*), ABISELECT(240,148), "S19492C12");
    check_base_class_offset(lv, (S19492C14*), ABISELECT(240,148), "S19492C12");
    check_base_class_offset(lv, (S19863C2_nt*)(S19492C8*), 0, "S19492C12");
    /*is_ambiguous_... S19492C8::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19492C8*), 0, "S19492C12");
    check_base_class_offset(lv, (S19863C10*)(S19492C10*), ABISELECT(248,152), "S19492C12");
    check_base_class_offset(lv, (S19492C10*)(S19492C8*), ABISELECT(248,152), "S19492C12");
    check_base_class_offset(lv, (S19492C8*), 0, "S19492C12");
    check_field_offset(lv, s19492c12f0, ABISELECT(8,4), "S19492C12.s19492c12f0");
    test_class_info(&lv, &cd_S19492C12);
    dp->~S19492C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19492C12(Test_S19492C12, "S19492C12", ABISELECT(256,156));

#else // __cplusplus

extern void _ZN9S19492C12C1Ev();
extern void _ZN9S19492C12D2Ev();
Name_Map name_map_S19492C12[] = {
  NSPAIR(_ZN9S19492C12C1Ev),
  NSPAIR(_ZN9S19492C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19492C14;
extern VTBL_ENTRY _ZTI9S19492C14[];
extern  VTBL_ENTRY _ZTV9S19492C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C14[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19492C10;
extern VTBL_ENTRY _ZTI9S19492C10[];
extern Class_Descriptor cd_S19492C8;
extern VTBL_ENTRY _ZTI8S19492C8[];
extern  VTBL_ENTRY _ZTV8S19492C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C8[];
static Base_Class bases_S19492C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C12_nt,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C9_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C6,    ABISELECT(32,16), //bcp->offset
    9, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C2_nt,    ABISELECT(240,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19492C14,    ABISELECT(240,148), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C2_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
    9, //immediately_derived
  0, 0},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C10,    ABISELECT(248,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
    8, //immediately_derived
  0, 0},
  {&cd_S19492C10,    ABISELECT(248,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
    9, //immediately_derived
  0, 1},
  {&cd_S19492C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19492C12[];
extern void _ZN9S19492C12D1Ev();
extern void _ZN9S19492C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19492C12D1Ev,_ZTv0_n12_N9S19492C12D1Ev)();
extern void ABISELECT(_ZThn32_N9S19492C12D1Ev,_ZThn16_N9S19492C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19492C12D0Ev,_ZTv0_n12_N9S19492C12D0Ev)();
extern void ABISELECT(_ZThn32_N9S19492C12D0Ev,_ZThn16_N9S19492C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19492C12D1Ev,_ZTv0_n16_N9S19492C12D1Ev)();
extern void ABISELECT(_ZThn240_N9S19492C12D1Ev,_ZThn148_N9S19492C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19492C12D0Ev,_ZTv0_n16_N9S19492C12D0Ev)();
extern void ABISELECT(_ZThn240_N9S19492C12D0Ev,_ZThn148_N9S19492C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19492C12[] = {
  ABISELECT(240,148),
  ABISELECT(32,16),
  ABISELECT(12,8),
  ABISELECT(16,12),
  ABISELECT(248,152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C12[0]),
  (VTBL_ENTRY)&_ZN9S19492C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C12D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19492C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C12D1Ev,_ZTv0_n12_N9S19492C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C12D0Ev,_ZTv0_n12_N9S19492C12D0Ev),
  ABISELECT(-240,-148),
  ABISELECT(-208,-132),
  ABISELECT(-240,-148),
  (VTBL_ENTRY)&(_ZTI9S19492C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19492C12D1Ev,_ZTv0_n16_N9S19492C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19492C12D0Ev,_ZTv0_n16_N9S19492C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19492C12[];
static  VTBL_ENTRY _tg__ZTV8S19492C8__9S19492C12[] = {
  ABISELECT(16,12),
  ABISELECT(248,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C8[0]),
};
extern void _ZN9S19492C14D1Ev();
extern void _ZN9S19492C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19492C14__9S19492C12[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C14[0]),
  (VTBL_ENTRY)&_ZN9S19492C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19492C14D1Ev,_ZTv0_n12_N9S19492C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19492C14D0Ev,_ZTv0_n12_N9S19492C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19492C14__9S19492C12[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S19492C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C14D1Ev,_ZTv0_n12_N9S19492C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C14D0Ev,_ZTv0_n12_N9S19492C14D0Ev),
};
static  VTT_ENTRY vtt_S19492C12[] = {
  {&(_ZTV9S19492C12[7]),  7,20},
  {&(_tg__ZTV8S19492C8__9S19492C12[4]),  4,4},
  {&(_ZTV9S19492C12[12]),  12,20},
  {&(_ZTV9S19492C12[18]),  18,20},
  {&(_tg__ZTV9S19492C14__9S19492C12[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19492C14__9S19492C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19492C12[];
extern  VTBL_ENTRY _ZTV9S19492C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C12[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19492C12D0Ev,_ZTv0_n16_N9S19492C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19492C12D0Ev,_ZThn148_N9S19492C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19492C12D1Ev,_ZTv0_n16_N9S19492C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19492C12D1Ev,_ZThn148_N9S19492C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C12D0Ev,_ZTv0_n12_N9S19492C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19492C12D0Ev,_ZThn16_N9S19492C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C12D1Ev,_ZTv0_n12_N9S19492C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19492C12D1Ev,_ZThn16_N9S19492C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19492C12 = {  "S19492C12", // class name
  bases_S19492C12, 10,
  &(vtc_S19492C12[0]), // expected_vtbl_contents
  &(vtt_S19492C12[0]), // expected_vtt_contents
  ABISELECT(256,156), // object size
  NSPAIRA(_ZTI9S19492C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19492C12),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19492C12),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19492C15  : virtual S19863C6 , virtual S19863C2_nt , virtual S19863C10 {
  void *s19492c15f0;
  ~S19492C15(); // tgen
  S19492C15(); // tgen
};
//SIG(-1 S19492C15) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} VBC6{ m} VBC7{ m} Fp}


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

static void Test_S19492C15()
{
  extern Class_Descriptor cd_S19492C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,36)];
    init_test(&cd_S19492C15, buf);
    S19492C15 *dp, &lv = *(dp=new (buf) S19492C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S19492C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19492C15)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,8), "S19492C15");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S19492C15");
    check_base_class_offset(lv, (S19863C10*), 0, "S19492C15");
    check_field_offset(lv, s19492c15f0, ABISELECT(8,4), "S19492C15.s19492c15f0");
    test_class_info(&lv, &cd_S19492C15);
    dp->~S19492C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19492C15(Test_S19492C15, "S19492C15", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN9S19492C15C1Ev();
extern void _ZN9S19492C15D1Ev();
Name_Map name_map_S19492C15[] = {
  NSPAIR(_ZN9S19492C15C1Ev),
  NSPAIR(_ZN9S19492C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S19492C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,8), //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_S19863C2_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, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19492C15[];
extern void _ZN9S19492C15D1Ev();
extern void _ZN9S19492C15D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19492C15D1Ev,_ZTv0_n12_N9S19492C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S19492C15D1Ev,_ZThn8_N9S19492C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19492C15D0Ev,_ZTv0_n12_N9S19492C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S19492C15D0Ev,_ZThn8_N9S19492C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19492C15[] = {
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C15[0]),
  (VTBL_ENTRY)&_ZN9S19492C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C15D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19492C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C15D1Ev,_ZTv0_n12_N9S19492C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C15D0Ev,_ZTv0_n12_N9S19492C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19492C15[];
static  VTT_ENTRY vtt_S19492C15[] = {
  {&(_ZTV9S19492C15[5]),  5,12},
  {&(_ZTV9S19492C15[10]),  10,12},
};
extern VTBL_ENTRY _ZTI9S19492C15[];
extern  VTBL_ENTRY _ZTV9S19492C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C15[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C15D0Ev,_ZTv0_n12_N9S19492C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19492C15D0Ev,_ZThn8_N9S19492C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C15D1Ev,_ZTv0_n12_N9S19492C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19492C15D1Ev,_ZThn8_N9S19492C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19492C15 = {  "S19492C15", // class name
  bases_S19492C15, 3,
  &(vtc_S19492C15[0]), // expected_vtbl_contents
  &(vtt_S19492C15[0]), // expected_vtt_contents
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI9S19492C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19492C15),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19492C15),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19492C7  : virtual S19492C8 , S19863C6 , S19492C12 , virtual S19863C8 , virtual S19492C15 {
  ~S19492C7(); // tgen
  S19492C7(); // tgen
};
//SIG(-1 S19492C7) C1{ VBC2{ BC3{ m} BC4{ m} VBC5{ BC4} VBC6{ m Fi}} BC7{ vd m FC8{ VBC9{ m} VBC6 vd FD[10]}} BC10{ VBC11{ m Fs} VBC6 VBC7 VBC12{ VBC7 BC3 vd} BC2 vd Fi} VBC9 VBC13{ VBC7 VBC3 VBC4 Fp}}


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

static void Test_S19492C7()
{
  extern Class_Descriptor cd_S19492C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,76)];
    init_test(&cd_S19492C7, buf);
    S19492C7 *dp, &lv = *(dp=new (buf) S19492C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,300), "sizeof(S19492C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19492C7)");
    /*is_ambiguous_... S19492C7::S19492C8 */ AMB_check_base_class_offset(lv, (S19863C2_nt*)(S19492C8*), ABISELECT(224,140), "S19492C7");
    /*is_ambiguous_... S19492C7::S19492C8 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19492C8*), ABISELECT(224,140), "S19492C7");
    check_base_class_offset(lv, (S19863C10*)(S19492C10*), 0, "S19492C7");
    /*is_ambiguous_... S19492C7::S19492C8 */ AMB_check_base_class_offset(lv, (S19492C10*)(S19492C8*), 0, "S19492C7");
    check_base_class_offset(lv, (S19492C10*)(S19492C8*)(S19492C12*), 0, "S19492C7");
    /*is_ambiguous_... S19492C7::S19492C8 */ AMB_check_base_class_offset(lv, (S19863C9_nt*)(S19492C8*), ABISELECT(232,144), "S19492C7");
    check_base_class_offset(lv, (S19863C9_nt*)(S19492C12*), ABISELECT(232,144), "S19492C7");
    check_base_class_offset(lv, (S19863C9_nt*)(S19492C8*)(S19492C12*), ABISELECT(232,144), "S19492C7");
    /*is_ambiguous_... S19492C7::S19492C8 */ AMB_check_base_class_offset(lv, (S19492C8*), ABISELECT(224,140), "S19492C7");
    /*is_ambiguous_... S19492C7::S19863C6 */ AMB_check_base_class_offset(lv, (S19863C6*), 0, "S19492C7");
    check_base_class_offset(lv, (S19863C12_nt*)(S19492C12*), ABISELECT(236,148), "S19492C7");
    check_base_class_offset(lv, (S19863C6*)(S19492C12*), ABISELECT(240,152), "S19492C7");
    check_base_class_offset(lv, (S19863C6*)(S19492C14*), ABISELECT(240,152), "S19492C7");
    check_base_class_offset(lv, (S19863C6*)(S19492C15*), ABISELECT(240,152), "S19492C7");
    check_base_class_offset(lv, (S19863C2_nt*)(S19492C14*), ABISELECT(448,284), "S19492C7");
    check_base_class_offset(lv, (S19492C14*)(S19492C12*), ABISELECT(448,284), "S19492C7");
    check_base_class_offset(lv, (S19863C2_nt*)(S19492C8*)(S19492C12*), ABISELECT(208,132), "S19492C7");
    /*is_ambiguous_... S19492C8::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19492C8*)(S19492C12*), ABISELECT(208,132), "S19492C7");
    check_base_class_offset(lv, (S19492C8*)(S19492C12*), ABISELECT(208,132), "S19492C7");
    check_base_class_offset(lv, (S19492C12*), ABISELECT(208,132), "S19492C7");
    check_base_class_offset(lv, (S19863C8*), 0, "S19492C7");
    check_base_class_offset(lv, (S19863C2_nt*)(S19492C15*), 0, "S19492C7");
    check_base_class_offset(lv, (S19863C10*)(S19492C15*), ABISELECT(472,296), "S19492C7");
    check_base_class_offset(lv, (S19492C15*), ABISELECT(456,288), "S19492C7");
    test_class_info(&lv, &cd_S19492C7);
    dp->~S19492C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19492C7(Test_S19492C7, "S19492C7", ABISELECT(480,300));

#else // __cplusplus

extern void _ZN8S19492C7C1Ev();
extern void _ZN8S19492C7D1Ev();
Name_Map name_map_S19492C7[] = {
  NSPAIR(_ZN8S19492C7C1Ev),
  NSPAIR(_ZN8S19492C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19492C10;
extern VTBL_ENTRY _ZTI9S19492C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19492C8;
extern VTBL_ENTRY _ZTI8S19492C8[];
extern  VTBL_ENTRY _ZTV8S19492C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C8[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19492C14;
extern VTBL_ENTRY _ZTI9S19492C14[];
extern  VTBL_ENTRY _ZTV9S19492C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C14[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19492C8;
extern VTBL_ENTRY _ZTI8S19492C8[];
extern  VTBL_ENTRY _ZTV8S19492C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C8[];
extern Class_Descriptor cd_S19492C12;
extern VTBL_ENTRY _ZTI9S19492C12[];
extern  VTBL_ENTRY _ZTV9S19492C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C12[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19492C15;
extern VTBL_ENTRY _ZTI9S19492C15[];
extern  VTBL_ENTRY _ZTV9S19492C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C15[];
static Base_Class bases_S19492C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C2_nt,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19863C10,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19492C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C9_nt,    ABISELECT(232,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19492C8,    ABISELECT(224,140), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19863C12_nt,    ABISELECT(236,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19863C6,    ABISELECT(240,152), //bcp->offset
    27, //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19863C2_nt,    ABISELECT(448,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19492C14,    ABISELECT(448,284), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19863C2_nt,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19863C10,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19492C8,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19492C12,    ABISELECT(208,132), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C2_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
    18, //immediately_derived
  0, 1},
  {&cd_S19863C10,    ABISELECT(472,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
    18, //immediately_derived
  0, 1},
  {&cd_S19492C15,    ABISELECT(456,288), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19492C7[];
extern void _ZN8S19492C7D1Ev();
extern void _ZN8S19492C7D0Ev();
extern void ABISELECT(_ZThn208_N8S19492C7D1Ev,_ZThn132_N8S19492C7D1Ev)();
extern void ABISELECT(_ZThn208_N8S19492C7D0Ev,_ZThn132_N8S19492C7D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19492C7D1Ev,_ZTv0_n12_N8S19492C7D1Ev)();
extern void ABISELECT(_ZThn240_N8S19492C7D1Ev,_ZThn152_N8S19492C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19492C7D0Ev,_ZTv0_n12_N8S19492C7D0Ev)();
extern void ABISELECT(_ZThn240_N8S19492C7D0Ev,_ZThn152_N8S19492C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19492C7D1Ev,_ZTv0_n16_N8S19492C7D1Ev)();
extern void ABISELECT(_ZThn448_N8S19492C7D1Ev,_ZThn284_N8S19492C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19492C7D0Ev,_ZTv0_n16_N8S19492C7D0Ev)();
extern void ABISELECT(_ZThn448_N8S19492C7D0Ev,_ZThn284_N8S19492C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19492C7D1Ev,_ZTv0_n24_N8S19492C7D1Ev)();
extern void ABISELECT(_ZThn456_N8S19492C7D1Ev,_ZThn288_N8S19492C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19492C7D0Ev,_ZTv0_n24_N8S19492C7D0Ev)();
extern void ABISELECT(_ZThn456_N8S19492C7D0Ev,_ZThn288_N8S19492C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19492C7[] = {
  ABISELECT(472,296),
  0,
  ABISELECT(456,288),
  0,
  ABISELECT(448,284),
  ABISELECT(240,152),
  ABISELECT(236,148),
  ABISELECT(232,144),
  0,
  ABISELECT(224,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C7[0]),
  (VTBL_ENTRY)&_ZN8S19492C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19492C7D0Ev,
  ABISELECT(240,152),
  ABISELECT(32,20),
  ABISELECT(28,16),
  ABISELECT(24,12),
  ABISELECT(-208,-132),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S19492C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S19492C7D1Ev,_ZThn132_N8S19492C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S19492C7D0Ev,_ZThn132_N8S19492C7D0Ev),
  ABISELECT(8,4),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S19492C7[0]),
  ABISELECT(-240,-152),
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI8S19492C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19492C7D1Ev,_ZTv0_n12_N8S19492C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19492C7D0Ev,_ZTv0_n12_N8S19492C7D0Ev),
  ABISELECT(-448,-284),
  ABISELECT(-208,-132),
  ABISELECT(-448,-284),
  (VTBL_ENTRY)&(_ZTI8S19492C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19492C7D1Ev,_ZTv0_n16_N8S19492C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19492C7D0Ev,_ZTv0_n16_N8S19492C7D0Ev),
  ABISELECT(-456,-288),
  ABISELECT(16,8),
  ABISELECT(-456,-288),
  ABISELECT(-216,-136),
  ABISELECT(-456,-288),
  (VTBL_ENTRY)&(_ZTI8S19492C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19492C7D1Ev,_ZTv0_n24_N8S19492C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19492C7D0Ev,_ZTv0_n24_N8S19492C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19492C7[];
extern void _ZN9S19492C12D1Ev();
extern void _ZN9S19492C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19492C12__8S19492C7[] = {
  ABISELECT(240,152),
  ABISELECT(32,20),
  ABISELECT(28,16),
  ABISELECT(24,12),
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C12[0]),
  (VTBL_ENTRY)&_ZN9S19492C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19492C89S19492C12__A1__8S19492C7[] = {
  ABISELECT(24,12),
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19492C12D1Ev,_ZTv0_n12_N9S19492C12D1Ev)();
extern void ABISELECT(_ZThn32_N9S19492C12D1Ev,_ZThn20_N9S19492C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19492C12D0Ev,_ZTv0_n12_N9S19492C12D0Ev)();
extern void ABISELECT(_ZThn32_N9S19492C12D0Ev,_ZThn20_N9S19492C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19492C12__8S19492C7[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19492C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C12D1Ev,_ZTv0_n12_N9S19492C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C12D0Ev,_ZTv0_n12_N9S19492C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19492C12D1Ev,_ZTv0_n16_N9S19492C12D1Ev)();
extern void ABISELECT(_ZThn240_N9S19492C12D1Ev,_ZThn152_N9S19492C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19492C12D0Ev,_ZTv0_n16_N9S19492C12D0Ev)();
extern void ABISELECT(_ZThn240_N9S19492C12D0Ev,_ZThn152_N9S19492C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19492C14__9S19492C12__8S19492C7[] = {
  ABISELECT(-240,-152),
  ABISELECT(-208,-132),
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI9S19492C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19492C12D1Ev,_ZTv0_n16_N9S19492C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19492C12D0Ev,_ZTv0_n16_N9S19492C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19492C8__8S19492C7[] = {
  ABISELECT(8,4),
  ABISELECT(-224,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C8[0]),
};
extern void _ZN9S19492C14D1Ev();
extern void _ZN9S19492C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19492C14__8S19492C7[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C14[0]),
  (VTBL_ENTRY)&_ZN9S19492C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19492C14D1Ev,_ZTv0_n12_N9S19492C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19492C14D0Ev,_ZTv0_n12_N9S19492C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19492C14__8S19492C7[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S19492C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C14D1Ev,_ZTv0_n12_N9S19492C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C14D0Ev,_ZTv0_n12_N9S19492C14D0Ev),
};
extern void _ZN9S19492C15D1Ev();
extern void _ZN9S19492C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19492C15__8S19492C7[] = {
  ABISELECT(16,8),
  ABISELECT(-456,-288),
  ABISELECT(-216,-136),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C15[0]),
  (VTBL_ENTRY)&_ZN9S19492C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19492C15D1Ev,_ZTv0_n12_N9S19492C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19492C15D0Ev,_ZTv0_n12_N9S19492C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19492C15__8S19492C7[] = {
  ABISELECT(216,136),
  ABISELECT(216,136),
  (VTBL_ENTRY)&(_ZTI9S19492C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C15D1Ev,_ZTv0_n12_N9S19492C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C15D0Ev,_ZTv0_n12_N9S19492C15D0Ev),
};
static  VTT_ENTRY vtt_S19492C7[] = {
  {&(_ZTV8S19492C7[12]),  12,46},
  {&(_tg__ZTV9S19492C12__8S19492C7[7]),  7,9},
  {&(_tg__ZTV8S19492C89S19492C12__A1__8S19492C7[4]),  4,4},
  {&(_tg__ZTV8S19863C6__9S19492C12__8S19492C7[3]),  3,5},
  {&(_tg__ZTV9S19492C14__9S19492C12__8S19492C7[4]),  4,6},
  {&(_ZTV8S19492C7[27]),  27,46},
  {&(_ZTV8S19492C7[21]),  21,46},
  {&(_ZTV8S19492C7[30]),  30,46},
  {&(_ZTV8S19492C7[36]),  36,46},
  {&(_ZTV8S19492C7[44]),  44,46},
  {&(_tg__ZTV8S19492C8__8S19492C7[4]),  4,4},
  {&(_tg__ZTV9S19492C14__8S19492C7[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19492C14__8S19492C7[3]),  3,5},
  {&(_tg__ZTV9S19492C15__8S19492C7[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S19492C15__8S19492C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19492C7[];
extern  VTBL_ENTRY _ZTV8S19492C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C7[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19492C12D0Ev,_ZTv0_n16_N9S19492C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19492C12D0Ev,_ZThn152_N9S19492C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19492C12D1Ev,_ZTv0_n16_N9S19492C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19492C12D1Ev,_ZThn152_N9S19492C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C12D0Ev,_ZTv0_n12_N9S19492C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19492C12D0Ev,_ZThn20_N9S19492C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C12D1Ev,_ZTv0_n12_N9S19492C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19492C12D1Ev,_ZThn20_N9S19492C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19492C7D0Ev,_ZTv0_n24_N8S19492C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S19492C7D0Ev,_ZThn288_N8S19492C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19492C7D1Ev,_ZTv0_n24_N8S19492C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N8S19492C7D1Ev,_ZThn288_N8S19492C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19492C7D0Ev,_ZTv0_n16_N8S19492C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S19492C7D0Ev,_ZThn284_N8S19492C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19492C7D1Ev,_ZTv0_n16_N8S19492C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S19492C7D1Ev,_ZThn284_N8S19492C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19492C7D0Ev,_ZTv0_n12_N8S19492C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19492C7D0Ev,_ZThn152_N8S19492C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19492C7D1Ev,_ZTv0_n12_N8S19492C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19492C7D1Ev,_ZThn152_N8S19492C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19492C7 = {  "S19492C7", // class name
  bases_S19492C7, 19,
  &(vtc_S19492C7[0]), // expected_vtbl_contents
  &(vtt_S19492C7[0]), // expected_vtt_contents
  ABISELECT(480,300), // object size
  NSPAIRA(_ZTI8S19492C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19492C7),46, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19492C7),15, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19492C16  : S19492C15 , virtual S19863C20 {
  ::S19863C9_nt s19492c16f0;
  ~S19492C16(); // tgen
  S19492C16(); // tgen
};
//SIG(-1 S19492C16) C1{ BC2{ VBC3{ vd m FC4{ VBC5{ m} VBC6{ m Fi} vd FD[10]}} VBC7{ m} VBC8{ m} Fp} VBC9{ m FC4[3] Fp} FC6}


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

static void Test_S19492C16()
{
  extern Class_Descriptor cd_S19492C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,134)];
    init_test(&cd_S19492C16, buf);
    S19492C16 *dp, &lv = *(dp=new (buf) S19492C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,532), "sizeof(S19492C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19492C16)");
    check_base_class_offset(lv, (S19863C6*)(S19492C15*), ABISELECT(32,12), "S19492C16");
    check_base_class_offset(lv, (S19863C2_nt*)(S19492C15*), 0, "S19492C16");
    check_base_class_offset(lv, (S19863C10*)(S19492C15*), 0, "S19492C16");
    check_base_class_offset(lv, (S19492C15*), 0, "S19492C16");
    check_base_class_offset(lv, (S19863C20*), ABISELECT(240,144), "S19492C16");
    check_field_offset(lv, s19492c16f0, ABISELECT(16,8), "S19492C16.s19492c16f0");
    test_class_info(&lv, &cd_S19492C16);
    dp->~S19492C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19492C16(Test_S19492C16, "S19492C16", ABISELECT(832,532));

#else // __cplusplus

extern void _ZN9S19492C16C1Ev();
extern void _ZN9S19492C16D1Ev();
Name_Map name_map_S19492C16[] = {
  NSPAIR(_ZN9S19492C16C1Ev),
  NSPAIR(_ZN9S19492C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19492C15;
extern VTBL_ENTRY _ZTI9S19492C15[];
extern  VTBL_ENTRY _ZTV9S19492C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C15[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
static Base_Class bases_S19492C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(32,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19863C2_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, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19492C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C20,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19492C16[];
extern void _ZN9S19492C16D1Ev();
extern void _ZN9S19492C16D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19492C16D1Ev,_ZTv0_n12_N9S19492C16D1Ev)();
extern void ABISELECT(_ZThn32_N9S19492C16D1Ev,_ZThn12_N9S19492C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19492C16D0Ev,_ZTv0_n12_N9S19492C16D0Ev)();
extern void ABISELECT(_ZThn32_N9S19492C16D0Ev,_ZThn12_N9S19492C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19492C16[] = {
  ABISELECT(240,144),
  0,
  0,
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C16[0]),
  (VTBL_ENTRY)&_ZN9S19492C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C16D0Ev,
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19492C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C16D1Ev,_ZTv0_n12_N9S19492C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C16D0Ev,_ZTv0_n12_N9S19492C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19492C16[];
extern void _ZN9S19492C15D1Ev();
extern void _ZN9S19492C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19492C15__9S19492C16[] = {
  0,
  0,
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C15[0]),
  (VTBL_ENTRY)&_ZN9S19492C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19492C15D1Ev,_ZTv0_n12_N9S19492C15D1Ev)();
extern void ABISELECT(_ZThn32_N9S19492C15D1Ev,_ZThn12_N9S19492C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19492C15D0Ev,_ZTv0_n12_N9S19492C15D0Ev)();
extern void ABISELECT(_ZThn32_N9S19492C15D0Ev,_ZThn12_N9S19492C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19492C15__9S19492C16[] = {
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19492C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C15D1Ev,_ZTv0_n12_N9S19492C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C15D0Ev,_ZTv0_n12_N9S19492C15D0Ev),
};
static  VTT_ENTRY vtt_S19492C16[] = {
  {&(_ZTV9S19492C16[6]),  6,13},
  {&(_tg__ZTV9S19492C15__9S19492C16[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S19492C15__9S19492C16[3]),  3,5},
  {&(_ZTV9S19492C16[11]),  11,13},
};
extern VTBL_ENTRY _ZTI9S19492C16[];
extern  VTBL_ENTRY _ZTV9S19492C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C16[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C15D0Ev,_ZTv0_n12_N9S19492C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19492C15D0Ev,_ZThn12_N9S19492C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C15D1Ev,_ZTv0_n12_N9S19492C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19492C15D1Ev,_ZThn12_N9S19492C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C16D0Ev,_ZTv0_n12_N9S19492C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19492C16D0Ev,_ZThn12_N9S19492C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C16D1Ev,_ZTv0_n12_N9S19492C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19492C16D1Ev,_ZThn12_N9S19492C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19492C16 = {  "S19492C16", // class name
  bases_S19492C16, 5,
  &(vtc_S19492C16[0]), // expected_vtbl_contents
  &(vtt_S19492C16[0]), // expected_vtt_contents
  ABISELECT(832,532), // object size
  NSPAIRA(_ZTI9S19492C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19492C16),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19492C16),4, //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  S19492C1  : virtual S19492C2 , S19863C8 , S19492C7 , virtual S19492C16 {
  virtual  ~S19492C1(); // _ZN8S19492C1D2Ev
  S19492C1(); // tgen
};
//SIG(1 S19492C1) C1{ VBC2{ BC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]} Fl} BC6{ m} BC7{ VBC8{ BC9{ m} BC4 VBC10{ BC4} VBC5} BC11{ vd m FC12{ VBC6 VBC5 vd FD[10]}} BC13{ VBC14{ m Fs} VBC5 VBC11 VBC15{ VBC11 BC9 vd} BC8 vd Fi} VBC6 VBC16{ VBC11 VBC9 VBC4 Fp}} VBC17{ BC16 VBC18{ m FC12[3] Fp} FC5} vd}


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

static void Test_S19492C1()
{
  extern Class_Descriptor cd_S19492C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(81,207)];
    init_test(&cd_S19492C1, buf);
    S19492C1 *dp, &lv = *(dp=new (buf) S19492C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1280,824), "sizeof(S19492C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19492C1)");
    check_base_class_offset(lv, (S19863C10*)(S19492C3*)(S19492C2*), 0, "S19492C1");
    /*is_ambiguous_... S19492C1::S19492C15 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19492C15*), 0, "S19492C1");
    check_base_class_offset(lv, (S19863C10*)(S19492C15*)(S19492C16*), 0, "S19492C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S19492C3*)(S19492C2*), ABISELECT(408,268), "S19492C1");
    /*is_ambiguous_... S19492C1::S19492C8 */ AMB_check_base_class_offset(lv, (S19863C9_nt*)(S19492C8*), ABISELECT(408,268), "S19492C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S19492C12*)(S19492C7*), ABISELECT(408,268), "S19492C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S19492C8*)(S19492C12*)(S19492C7*), ABISELECT(408,268), "S19492C1");
    check_base_class_offset(lv, (S19492C3*)(S19492C2*), ABISELECT(224,140), "S19492C1");
    check_base_class_offset(lv, (S19492C2*), ABISELECT(224,140), "S19492C1");
    /*is_ambiguous_... S19492C1::S19863C8 */ AMB_check_base_class_offset(lv, (S19863C8*), 0, "S19492C1");
    /*is_ambiguous_... S19492C1::S19492C8 */ AMB_check_base_class_offset(lv, (S19863C2_nt*)(S19492C8*), ABISELECT(416,272), "S19492C1");
    /*is_ambiguous_... S19492C1::S19492C8 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19492C8*), ABISELECT(416,272), "S19492C1");
    check_base_class_offset(lv, (S19863C10*)(S19492C10*), ABISELECT(424,276), "S19492C1");
    /*is_ambiguous_... S19492C1::S19492C8 */ AMB_check_base_class_offset(lv, (S19492C10*)(S19492C8*), ABISELECT(424,276), "S19492C1");
    check_base_class_offset(lv, (S19492C10*)(S19492C8*)(S19492C12*)(S19492C7*), ABISELECT(424,276), "S19492C1");
    /*is_ambiguous_... S19492C7::S19492C8 */ AMB_check_base_class_offset(lv, (S19492C8*)(S19492C7*), ABISELECT(416,272), "S19492C1");
    /*is_ambiguous_... S19492C7::S19863C6 */ AMB_check_base_class_offset(lv, (S19863C6*)(S19492C7*), 0, "S19492C1");
    check_base_class_offset(lv, (S19863C12_nt*)(S19492C12*)(S19492C7*), ABISELECT(424,276), "S19492C1");
    check_base_class_offset(lv, (S19863C6*)(S19492C12*)(S19492C7*), ABISELECT(432,280), "S19492C1");
    check_base_class_offset(lv, (S19863C6*)(S19492C14*), ABISELECT(432,280), "S19492C1");
    /*is_ambiguous_... S19492C1::S19492C15 */ AMB_check_base_class_offset(lv, (S19863C6*)(S19492C15*), ABISELECT(432,280), "S19492C1");
    check_base_class_offset(lv, (S19863C6*)(S19492C15*)(S19492C16*), ABISELECT(432,280), "S19492C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S19492C14*), ABISELECT(640,412), "S19492C1");
    check_base_class_offset(lv, (S19492C14*)(S19492C12*)(S19492C7*), ABISELECT(640,412), "S19492C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S19492C8*)(S19492C12*)(S19492C7*), ABISELECT(208,132), "S19492C1");
    /*is_ambiguous_... S19492C8::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19492C8*)(S19492C12*)(S19492C7*), ABISELECT(208,132), "S19492C1");
    check_base_class_offset(lv, (S19492C8*)(S19492C12*)(S19492C7*), ABISELECT(208,132), "S19492C1");
    check_base_class_offset(lv, (S19492C12*)(S19492C7*), ABISELECT(208,132), "S19492C1");
    check_base_class_offset(lv, (S19863C8*)(S19492C7*), ABISELECT(648,416), "S19492C1");
    /*is_ambiguous_... S19492C1::S19492C15 */ AMB_check_base_class_offset(lv, (S19863C2_nt*)(S19492C15*), 0, "S19492C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S19492C15*)(S19492C16*), 0, "S19492C1");
    check_base_class_offset(lv, (S19492C15*)(S19492C7*), ABISELECT(648,416), "S19492C1");
    check_base_class_offset(lv, (S19492C7*), 0, "S19492C1");
    check_base_class_offset(lv, (S19492C15*)(S19492C16*), ABISELECT(664,424), "S19492C1");
    check_base_class_offset(lv, (S19863C20*)(S19492C16*), ABISELECT(688,436), "S19492C1");
    check_base_class_offset(lv, (S19492C16*), ABISELECT(664,424), "S19492C1");
    test_class_info(&lv, &cd_S19492C1);
    dp->~S19492C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19492C1(Test_S19492C1, "S19492C1", ABISELECT(1280,824));

#else // __cplusplus

extern void _ZN8S19492C1C1Ev();
extern void _ZN8S19492C1D2Ev();
Name_Map name_map_S19492C1[] = {
  NSPAIR(_ZN8S19492C1C1Ev),
  NSPAIR(_ZN8S19492C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19492C3;
extern VTBL_ENTRY _ZTI8S19492C3[];
extern  VTBL_ENTRY _ZTV8S19492C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C3[];
extern Class_Descriptor cd_S19492C2;
extern VTBL_ENTRY _ZTI8S19492C2[];
extern  VTBL_ENTRY _ZTV8S19492C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C2[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19492C10;
extern VTBL_ENTRY _ZTI9S19492C10[];
extern Class_Descriptor cd_S19492C8;
extern VTBL_ENTRY _ZTI8S19492C8[];
extern  VTBL_ENTRY _ZTV8S19492C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C8[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19492C14;
extern VTBL_ENTRY _ZTI9S19492C14[];
extern  VTBL_ENTRY _ZTV9S19492C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C14[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19492C8;
extern VTBL_ENTRY _ZTI8S19492C8[];
extern  VTBL_ENTRY _ZTV8S19492C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C8[];
extern Class_Descriptor cd_S19492C12;
extern VTBL_ENTRY _ZTI9S19492C12[];
extern  VTBL_ENTRY _ZTV9S19492C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C12[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19492C15;
extern VTBL_ENTRY _ZTI9S19492C15[];
extern  VTBL_ENTRY _ZTV9S19492C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C15[];
extern Class_Descriptor cd_S19492C7;
extern VTBL_ENTRY _ZTI8S19492C7[];
extern  VTBL_ENTRY _ZTV8S19492C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C7[];
extern Class_Descriptor cd_S19492C15;
extern VTBL_ENTRY _ZTI9S19492C15[];
extern  VTBL_ENTRY _ZTV9S19492C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C15[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
extern Class_Descriptor cd_S19492C16;
extern VTBL_ENTRY _ZTI9S19492C16[];
extern  VTBL_ENTRY _ZTV9S19492C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19492C16[];
static Base_Class bases_S19492C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(408,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
    2, //immediately_derived
  0, 1},
  {&cd_S19492C3,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19492C2,    ABISELECT(224,140), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C2_nt,    ABISELECT(416,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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19863C10,    ABISELECT(416,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
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19863C10,    ABISELECT(424,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19492C10,    ABISELECT(424,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19492C8,    ABISELECT(416,272), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19863C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19863C12_nt,    ABISELECT(424,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19863C6,    ABISELECT(432,280), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19863C2_nt,    ABISELECT(640,412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19492C14,    ABISELECT(640,412), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19863C2_nt,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19863C10,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19492C8,    ABISELECT(208,132), //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
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19492C12,    ABISELECT(208,132), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19863C8,    ABISELECT(648,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C2_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
    21, //immediately_derived
  0, 1},
  {&cd_S19492C15,    ABISELECT(648,416), //bcp->offset
    48, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19492C7,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19492C15,    ABISELECT(664,424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19863C20,    ABISELECT(688,436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19492C16,    ABISELECT(664,424), //bcp->offset
    56, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19492C1[];
extern void _ZN8S19492C1D1Ev();
extern void _ZN8S19492C1D0Ev();
extern void ABISELECT(_ZThn208_N8S19492C1D1Ev,_ZThn132_N8S19492C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S19492C1D0Ev,_ZThn132_N8S19492C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19492C1D1Ev,_ZTv0_n20_N8S19492C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S19492C1D1Ev,_ZThn140_N8S19492C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19492C1D0Ev,_ZTv0_n20_N8S19492C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S19492C1D0Ev,_ZThn140_N8S19492C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19492C1D1Ev,_ZTv0_n12_N8S19492C1D1Ev)();
extern void ABISELECT(_ZThn432_N8S19492C1D1Ev,_ZThn280_N8S19492C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19492C1D0Ev,_ZTv0_n12_N8S19492C1D0Ev)();
extern void ABISELECT(_ZThn432_N8S19492C1D0Ev,_ZThn280_N8S19492C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19492C1D1Ev,_ZTv0_n16_N8S19492C1D1Ev)();
extern void ABISELECT(_ZThn640_N8S19492C1D1Ev,_ZThn412_N8S19492C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19492C1D0Ev,_ZTv0_n16_N8S19492C1D0Ev)();
extern void ABISELECT(_ZThn640_N8S19492C1D0Ev,_ZThn412_N8S19492C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19492C1D1Ev,_ZTv0_n24_N8S19492C1D1Ev)();
extern void ABISELECT(_ZThn648_N8S19492C1D1Ev,_ZThn416_N8S19492C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19492C1D0Ev,_ZTv0_n24_N8S19492C1D0Ev)();
extern void ABISELECT(_ZThn648_N8S19492C1D0Ev,_ZThn416_N8S19492C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19492C1D1Ev,_ZTv0_n28_N8S19492C1D1Ev)();
extern void ABISELECT(_ZThn664_N8S19492C1D1Ev,_ZThn424_N8S19492C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19492C1D0Ev,_ZTv0_n28_N8S19492C1D0Ev)();
extern void ABISELECT(_ZThn664_N8S19492C1D0Ev,_ZThn424_N8S19492C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19492C1[] = {
  ABISELECT(688,436),
  ABISELECT(664,424),
  ABISELECT(224,140),
  0,
  0,
  ABISELECT(648,416),
  ABISELECT(648,416),
  ABISELECT(640,412),
  ABISELECT(432,280),
  ABISELECT(424,276),
  ABISELECT(408,268),
  ABISELECT(424,276),
  ABISELECT(416,272),
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C1[0]),
  (VTBL_ENTRY)&_ZN8S19492C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19492C1D0Ev,
  ABISELECT(432,280),
  ABISELECT(224,148),
  ABISELECT(216,144),
  ABISELECT(200,136),
  ABISELECT(216,144),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S19492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S19492C1D1Ev,_ZThn132_N8S19492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S19492C1D0Ev,_ZThn132_N8S19492C1D0Ev),
  ABISELECT(-224,-140),
  ABISELECT(184,128),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S19492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19492C1D1Ev,_ZTv0_n20_N8S19492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19492C1D0Ev,_ZTv0_n20_N8S19492C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  ABISELECT(-416,-272),
  (VTBL_ENTRY)&(_ZTI8S19492C1[0]),
  ABISELECT(-432,-280),
  ABISELECT(-432,-280),
  (VTBL_ENTRY)&(_ZTI8S19492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19492C1D1Ev,_ZTv0_n12_N8S19492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19492C1D0Ev,_ZTv0_n12_N8S19492C1D0Ev),
  ABISELECT(-640,-412),
  ABISELECT(-208,-132),
  ABISELECT(-640,-412),
  (VTBL_ENTRY)&(_ZTI8S19492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19492C1D1Ev,_ZTv0_n16_N8S19492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19492C1D0Ev,_ZTv0_n16_N8S19492C1D0Ev),
  ABISELECT(-648,-416),
  ABISELECT(-648,-416),
  ABISELECT(-648,-416),
  ABISELECT(-216,-136),
  ABISELECT(-648,-416),
  (VTBL_ENTRY)&(_ZTI8S19492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19492C1D1Ev,_ZTv0_n24_N8S19492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19492C1D0Ev,_ZTv0_n24_N8S19492C1D0Ev),
  ABISELECT(-664,-424),
  ABISELECT(24,12),
  ABISELECT(-664,-424),
  ABISELECT(-664,-424),
  ABISELECT(-232,-144),
  ABISELECT(-664,-424),
  (VTBL_ENTRY)&(_ZTI8S19492C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19492C1D1Ev,_ZTv0_n28_N8S19492C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19492C1D0Ev,_ZTv0_n28_N8S19492C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19492C1[];
extern void _ZN8S19492C7D1Ev();
extern void _ZN8S19492C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19492C7__8S19492C1[] = {
  0,
  0,
  ABISELECT(648,416),
  ABISELECT(648,416),
  ABISELECT(640,412),
  ABISELECT(432,280),
  ABISELECT(424,276),
  ABISELECT(408,268),
  ABISELECT(424,276),
  ABISELECT(416,272),
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C7[0]),
  (VTBL_ENTRY)&_ZN8S19492C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19492C7D0Ev,
};
extern void _ZN9S19492C12D1Ev();
extern void _ZN9S19492C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19492C128S19492C7__8S19492C1[] = {
  ABISELECT(432,280),
  ABISELECT(224,148),
  ABISELECT(216,144),
  ABISELECT(200,136),
  ABISELECT(216,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C12[0]),
  (VTBL_ENTRY)&_ZN9S19492C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19492C89S19492C128S19492C7__A1__8S19492C1[] = {
  ABISELECT(200,136),
  ABISELECT(216,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19492C12D1Ev,_ZTv0_n12_N9S19492C12D1Ev)();
extern void ABISELECT(_ZThn224_N9S19492C12D1Ev,_ZThn148_N9S19492C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19492C12D0Ev,_ZTv0_n12_N9S19492C12D0Ev)();
extern void ABISELECT(_ZThn224_N9S19492C12D0Ev,_ZThn148_N9S19492C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19492C128S19492C7__8S19492C1[] = {
  ABISELECT(-224,-148),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI9S19492C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C12D1Ev,_ZTv0_n12_N9S19492C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C12D0Ev,_ZTv0_n12_N9S19492C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19492C12D1Ev,_ZTv0_n16_N9S19492C12D1Ev)();
extern void ABISELECT(_ZThn432_N9S19492C12D1Ev,_ZThn280_N9S19492C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19492C12D0Ev,_ZTv0_n16_N9S19492C12D0Ev)();
extern void ABISELECT(_ZThn432_N9S19492C12D0Ev,_ZThn280_N9S19492C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19492C14__9S19492C128S19492C7__8S19492C1[] = {
  ABISELECT(-432,-280),
  ABISELECT(-208,-132),
  ABISELECT(-432,-280),
  (VTBL_ENTRY)&(_ZTI9S19492C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19492C12D1Ev,_ZTv0_n16_N9S19492C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19492C12D0Ev,_ZTv0_n16_N9S19492C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19492C8__8S19492C7__8S19492C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  ABISELECT(-416,-272),
  (VTBL_ENTRY)&(_ZTI8S19492C7[0]),
};
extern void ABISELECT(_ZThn208_N8S19492C7D1Ev,_ZThn132_N8S19492C7D1Ev)();
extern void ABISELECT(_ZThn208_N8S19492C7D0Ev,_ZThn132_N8S19492C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19492C12__8S19492C7__8S19492C1[] = {
  ABISELECT(432,280),
  ABISELECT(224,148),
  ABISELECT(216,144),
  ABISELECT(200,136),
  ABISELECT(216,144),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S19492C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S19492C7D1Ev,_ZThn132_N8S19492C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N8S19492C7D0Ev,_ZThn132_N8S19492C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19492C7D1Ev,_ZTv0_n12_N8S19492C7D1Ev)();
extern void ABISELECT(_ZThn432_N8S19492C7D1Ev,_ZThn280_N8S19492C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19492C7D0Ev,_ZTv0_n12_N8S19492C7D0Ev)();
extern void ABISELECT(_ZThn432_N8S19492C7D0Ev,_ZThn280_N8S19492C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__A1__8S19492C7__8S19492C1[] = {
  ABISELECT(-432,-280),
  ABISELECT(-432,-280),
  (VTBL_ENTRY)&(_ZTI8S19492C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19492C7D1Ev,_ZTv0_n12_N8S19492C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19492C7D0Ev,_ZTv0_n12_N8S19492C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19492C7D1Ev,_ZTv0_n16_N8S19492C7D1Ev)();
extern void ABISELECT(_ZThn640_N8S19492C7D1Ev,_ZThn412_N8S19492C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19492C7D0Ev,_ZTv0_n16_N8S19492C7D0Ev)();
extern void ABISELECT(_ZThn640_N8S19492C7D0Ev,_ZThn412_N8S19492C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19492C14__8S19492C7__8S19492C1[] = {
  ABISELECT(-640,-412),
  ABISELECT(-208,-132),
  ABISELECT(-640,-412),
  (VTBL_ENTRY)&(_ZTI8S19492C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19492C7D1Ev,_ZTv0_n16_N8S19492C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19492C7D0Ev,_ZTv0_n16_N8S19492C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19492C7D1Ev,_ZTv0_n24_N8S19492C7D1Ev)();
extern void ABISELECT(_ZThn648_N8S19492C7D1Ev,_ZThn416_N8S19492C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19492C7D0Ev,_ZTv0_n24_N8S19492C7D0Ev)();
extern void ABISELECT(_ZThn648_N8S19492C7D0Ev,_ZThn416_N8S19492C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19492C15__8S19492C7__8S19492C1[] = {
  ABISELECT(-648,-416),
  ABISELECT(-648,-416),
  ABISELECT(-648,-416),
  ABISELECT(-216,-136),
  ABISELECT(-648,-416),
  (VTBL_ENTRY)&(_ZTI8S19492C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19492C7D1Ev,_ZTv0_n24_N8S19492C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19492C7D0Ev,_ZTv0_n24_N8S19492C7D0Ev),
};
extern void _ZN8S19492C2D1Ev();
extern void _ZN8S19492C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19492C2__8S19492C1[] = {
  ABISELECT(184,128),
  ABISELECT(-224,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C2[0]),
  (VTBL_ENTRY)&_ZN8S19492C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19492C2D0Ev,
};
extern void _ZN8S19492C3D1Ev();
extern void _ZN8S19492C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19492C38S19492C2__8S19492C1[] = {
  ABISELECT(184,128),
  ABISELECT(-224,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C3[0]),
  (VTBL_ENTRY)&_ZN8S19492C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19492C3D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19492C8__8S19492C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19492C8[0]),
};
extern void _ZN9S19492C14D1Ev();
extern void _ZN9S19492C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19492C14__8S19492C1[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C14[0]),
  (VTBL_ENTRY)&_ZN9S19492C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19492C14D1Ev,_ZTv0_n12_N9S19492C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19492C14D0Ev,_ZTv0_n12_N9S19492C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19492C14__8S19492C1[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S19492C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C14D1Ev,_ZTv0_n12_N9S19492C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C14D0Ev,_ZTv0_n12_N9S19492C14D0Ev),
};
extern void _ZN9S19492C15D1Ev();
extern void _ZN9S19492C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19492C15__8S19492C1[] = {
  ABISELECT(-648,-416),
  ABISELECT(-648,-416),
  ABISELECT(-216,-136),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C15[0]),
  (VTBL_ENTRY)&_ZN9S19492C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19492C15D1Ev,_ZTv0_n12_N9S19492C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19492C15D0Ev,_ZTv0_n12_N9S19492C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19492C15__8S19492C1[] = {
  ABISELECT(216,136),
  ABISELECT(216,136),
  (VTBL_ENTRY)&(_ZTI9S19492C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C15D1Ev,_ZTv0_n12_N9S19492C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C15D0Ev,_ZTv0_n12_N9S19492C15D0Ev),
};
extern void _ZN9S19492C16D1Ev();
extern void _ZN9S19492C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19492C16__8S19492C1[] = {
  ABISELECT(24,12),
  ABISELECT(-664,-424),
  ABISELECT(-664,-424),
  ABISELECT(-232,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C16[0]),
  (VTBL_ENTRY)&_ZN9S19492C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C16D0Ev,
};
extern void _ZN9S19492C15D1Ev();
extern void _ZN9S19492C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19492C159S19492C16__A1__8S19492C1[] = {
  ABISELECT(-664,-424),
  ABISELECT(-664,-424),
  ABISELECT(-232,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19492C15[0]),
  (VTBL_ENTRY)&_ZN9S19492C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19492C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19492C15D1Ev,_ZTv0_n12_N9S19492C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19492C15D0Ev,_ZTv0_n12_N9S19492C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19492C159S19492C16__A1__8S19492C1[] = {
  ABISELECT(232,144),
  ABISELECT(232,144),
  (VTBL_ENTRY)&(_ZTI9S19492C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C15D1Ev,_ZTv0_n12_N9S19492C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C15D0Ev,_ZTv0_n12_N9S19492C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19492C16D1Ev,_ZTv0_n12_N9S19492C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19492C16D0Ev,_ZTv0_n12_N9S19492C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19492C16__8S19492C1[] = {
  ABISELECT(232,144),
  ABISELECT(232,144),
  (VTBL_ENTRY)&(_ZTI9S19492C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C16D1Ev,_ZTv0_n12_N9S19492C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19492C16D0Ev,_ZTv0_n12_N9S19492C16D0Ev),
};
static  VTT_ENTRY vtt_S19492C1[] = {
  {&(_ZTV8S19492C1[15]),  15,65},
  {&(_tg__ZTV8S19492C7__8S19492C1[12]),  12,14},
  {&(_tg__ZTV9S19492C128S19492C7__8S19492C1[7]),  7,9},
  {&(_tg__ZTV8S19492C89S19492C128S19492C7__A1__8S19492C1[4]),  4,4},
  {&(_tg__ZTV8S19863C6__9S19492C128S19492C7__8S19492C1[3]),  3,5},
  {&(_tg__ZTV9S19492C14__9S19492C128S19492C7__8S19492C1[4]),  4,6},
  {&(_tg__ZTV8S19492C8__8S19492C7__8S19492C1[4]),  4,4},
  {&(_tg__ZTV9S19492C12__8S19492C7__8S19492C1[7]),  7,9},
  {&(_tg__ZTV8S19863C6__A1__8S19492C7__8S19492C1[3]),  3,5},
  {&(_tg__ZTV9S19492C14__8S19492C7__8S19492C1[4]),  4,6},
  {&(_tg__ZTV9S19492C15__8S19492C7__8S19492C1[6]),  6,8},
  {&(_ZTV8S19492C1[31]),  31,65},
  {&(_ZTV8S19492C1[37]),  37,65},
  {&(_ZTV8S19492C1[24]),  24,65},
  {&(_ZTV8S19492C1[40]),  40,65},
  {&(_ZTV8S19492C1[46]),  46,65},
  {&(_ZTV8S19492C1[54]),  54,65},
  {&(_ZTV8S19492C1[63]),  63,65},
  {&(_tg__ZTV8S19492C2__8S19492C1[4]),  4,6},
  {&(_tg__ZTV8S19492C38S19492C2__8S19492C1[4]),  4,6},
  {&(_tg__ZTV8S19492C8__8S19492C1[4]),  4,4},
  {&(_tg__ZTV9S19492C14__8S19492C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19492C14__8S19492C1[3]),  3,5},
  {&(_tg__ZTV9S19492C15__8S19492C1[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S19492C15__8S19492C1[3]),  3,5},
  {&(_tg__ZTV9S19492C16__8S19492C1[6]),  6,8},
  {&(_tg__ZTV9S19492C159S19492C16__A1__8S19492C1[5]),  5,7},
  {&(_tg__ZTV8S19863C6__9S19492C159S19492C16__A1__8S19492C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19492C16__8S19492C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19492C1[];
extern  VTBL_ENTRY _ZTV8S19492C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19492C1[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19492C7D0Ev,_ZTv0_n24_N8S19492C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn648_N8S19492C7D0Ev,_ZThn416_N8S19492C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19492C7D1Ev,_ZTv0_n24_N8S19492C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn648_N8S19492C7D1Ev,_ZThn416_N8S19492C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19492C7D0Ev,_ZTv0_n16_N8S19492C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19492C7D0Ev,_ZThn412_N8S19492C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19492C7D1Ev,_ZTv0_n16_N8S19492C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19492C7D1Ev,_ZThn412_N8S19492C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19492C7D0Ev,_ZTv0_n12_N8S19492C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19492C7D0Ev,_ZThn280_N8S19492C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19492C7D1Ev,_ZTv0_n12_N8S19492C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19492C7D1Ev,_ZThn280_N8S19492C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19492C12D0Ev,_ZTv0_n16_N9S19492C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19492C12D0Ev,_ZThn280_N9S19492C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19492C12D1Ev,_ZTv0_n16_N9S19492C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19492C12D1Ev,_ZThn280_N9S19492C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C12D0Ev,_ZTv0_n12_N9S19492C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19492C12D0Ev,_ZThn148_N9S19492C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19492C12D1Ev,_ZTv0_n12_N9S19492C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19492C12D1Ev,_ZThn148_N9S19492C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19492C1D0Ev,_ZTv0_n28_N8S19492C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S19492C1D0Ev,_ZThn424_N8S19492C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19492C1D1Ev,_ZTv0_n28_N8S19492C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S19492C1D1Ev,_ZThn424_N8S19492C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19492C1D0Ev,_ZTv0_n24_N8S19492C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn648_N8S19492C1D0Ev,_ZThn416_N8S19492C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19492C1D1Ev,_ZTv0_n24_N8S19492C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn648_N8S19492C1D1Ev,_ZThn416_N8S19492C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19492C1D0Ev,_ZTv0_n16_N8S19492C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19492C1D0Ev,_ZThn412_N8S19492C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19492C1D1Ev,_ZTv0_n16_N8S19492C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19492C1D1Ev,_ZThn412_N8S19492C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19492C1D0Ev,_ZTv0_n12_N8S19492C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19492C1D0Ev,_ZThn280_N8S19492C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19492C1D1Ev,_ZTv0_n12_N8S19492C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19492C1D1Ev,_ZThn280_N8S19492C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19492C1D0Ev,_ZTv0_n20_N8S19492C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19492C1D0Ev,_ZThn140_N8S19492C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19492C1D1Ev,_ZTv0_n20_N8S19492C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19492C1D1Ev,_ZThn140_N8S19492C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19492C1 = {  "S19492C1", // class name
  bases_S19492C1, 26,
  &(vtc_S19492C1[0]), // expected_vtbl_contents
  &(vtt_S19492C1[0]), // expected_vtt_contents
  ABISELECT(1280,824), // object size
  NSPAIRA(_ZTI8S19492C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19492C1),65, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19492C1),29, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5066C3_nt  {
  ::S12560C14_nt s5066c3f0;
  int s5066c3f1[2];
  char s5066c3f2;
  virtual  ~S5066C3_nt(); // _ZN10S5066C3_ntD1Ev
  virtual void  v4(); // _ZN10S5066C3_nt2v4Ev
  virtual void  v5(); // _ZN10S5066C3_nt2v5Ev
  virtual void  v6(); // _ZN10S5066C3_nt2v6Ev
  S5066C3_nt(); // tgen
};
//SIG(-1 S5066C3_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5066C3_nt ::~S5066C3_nt(){ note_dtor("S5066C3_nt", this);}
void  S5066C3_nt ::v4(){vfunc_called(this, "_ZN10S5066C3_nt2v4Ev");}
void  S5066C3_nt ::v5(){vfunc_called(this, "_ZN10S5066C3_nt2v5Ev");}
void  S5066C3_nt ::v6(){vfunc_called(this, "_ZN10S5066C3_nt2v6Ev");}
S5066C3_nt ::S5066C3_nt(){ note_ctor("S5066C3_nt", this);} // tgen

//skip512 S5066C3_nt

#else // __cplusplus

extern void _ZN10S5066C3_ntC1Ev();
extern void _ZN10S5066C3_ntD1Ev();
Name_Map name_map_S5066C3_nt[] = {
  NSPAIR(_ZN10S5066C3_ntC1Ev),
  NSPAIR(_ZN10S5066C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5066C3_nt[];
extern void _ZN10S5066C3_ntD1Ev();
extern void _ZN10S5066C3_ntD0Ev();
extern void _ZN10S5066C3_nt2v4Ev();
extern void _ZN10S5066C3_nt2v5Ev();
extern void _ZN10S5066C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S5066C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5066C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5066C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5066C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5066C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5066C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5066C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S5066C3_nt[];
VTBL_ENTRY *P__ZTI10S5066C3_nt = _ZTI10S5066C3_nt; 
extern  VTBL_ENTRY _ZTV10S5066C3_nt[];
Class_Descriptor cd_S5066C3_nt = {  "S5066C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5066C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S5066C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5066C3_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  S5066C2_nt  : S5066C3_nt {
  void *s5066c2f0;
  virtual void  v7(); // _ZN10S5066C2_nt2v7Ev
  virtual void  v8(); // _ZN10S5066C2_nt2v8Ev
  ~S5066C2_nt(); // tgen
  S5066C2_nt(); // tgen
};
//SIG(-1 S5066C2_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5066C2_nt ::v7(){vfunc_called(this, "_ZN10S5066C2_nt2v7Ev");}
void  S5066C2_nt ::v8(){vfunc_called(this, "_ZN10S5066C2_nt2v8Ev");}
S5066C2_nt ::~S5066C2_nt(){ note_dtor("S5066C2_nt", this);} // tgen
S5066C2_nt ::S5066C2_nt(){ note_ctor("S5066C2_nt", this);} // tgen

//skip512 S5066C2_nt

#else // __cplusplus

extern void _ZN10S5066C2_ntC1Ev();
extern void _ZN10S5066C2_ntD1Ev();
Name_Map name_map_S5066C2_nt[] = {
  NSPAIR(_ZN10S5066C2_ntC1Ev),
  NSPAIR(_ZN10S5066C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5066C3_nt;
extern VTBL_ENTRY _ZTI10S5066C3_nt[];
extern  VTBL_ENTRY _ZTV10S5066C3_nt[];
static Base_Class bases_S5066C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5066C3_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 _ZTI10S5066C2_nt[];
extern void _ZN10S5066C2_ntD1Ev();
extern void _ZN10S5066C2_ntD0Ev();
extern void _ZN10S5066C3_nt2v4Ev();
extern void _ZN10S5066C3_nt2v5Ev();
extern void _ZN10S5066C3_nt2v6Ev();
extern void _ZN10S5066C2_nt2v7Ev();
extern void _ZN10S5066C2_nt2v8Ev();
static  VTBL_ENTRY vtc_S5066C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5066C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5066C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5066C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5066C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5066C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5066C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5066C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5066C2_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S5066C2_nt[];
VTBL_ENTRY *P__ZTI10S5066C2_nt = _ZTI10S5066C2_nt; 
extern  VTBL_ENTRY _ZTV10S5066C2_nt[];
Class_Descriptor cd_S5066C2_nt = {  "S5066C2_nt", // class name
  bases_S5066C2_nt, 1,
  &(vtc_S5066C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S5066C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5066C2_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5066C7_nt  {
  void *s5066c7f0;
  void  mf5066c7(); // _ZN10S5066C7_nt8mf5066c7Ev
};
//SIG(-1 S5066C7_nt) C1{ m Fp}


void  S5066C7_nt ::mf5066c7(){}

//skip512 S5066C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5066C6_nt  {
  __tsi64 s5066c6f0;
  ::S12560C14_nt s5066c6f1;
  ::S5066C7_nt s5066c6f2;
  void *s5066c6f3;
  void  mf5066c6(); // _ZN10S5066C6_nt8mf5066c6Ev
};
//SIG(-1 S5066C6_nt) C1{ m FL FC2{ m Fp Fi FC3{ m}} FC4{ m Fp} Fp}


void  S5066C6_nt ::mf5066c6(){}

//skip512 S5066C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5066C8_nt  {
  void *s5066c8f0[3];
  int s5066c8f1;
  void  mf5066c8(); // _ZN10S5066C8_nt8mf5066c8Ev
};
//SIG(-1 S5066C8_nt) C1{ m Fp[3] Fi}


void  S5066C8_nt ::mf5066c8(){}

//skip512 S5066C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S5066C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5066C10_nt  {
  ::S5066C11_nt s5066c10f0;
  void  mf5066c10(); // _ZN11S5066C10_nt9mf5066c10Ev
};
//SIG(-1 S5066C10_nt) C1{ m FC2{ Fl[4]}}


void  S5066C10_nt ::mf5066c10(){}

//skip512 S5066C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5066C13_nt  {
  void *s5066c13f0;
  int s5066c13f1[2];
  ::S19863C8 s5066c13f2;
  void  mf5066c13(); // _ZN11S5066C13_nt9mf5066c13Ev
};
//SIG(-1 S5066C13_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S5066C13_nt ::mf5066c13(){}

//skip512 S5066C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5066C1  : S5066C2_nt {
  ::S5066C6_nt s5066c1f0;
  void *s5066c1f1[2];
  ::S5066C8_nt s5066c1f2;
  int s5066c1f3;
  void *s5066c1f4[2];
  ::S5066C7_nt s5066c1f5;
  void *s5066c1f6[3];
  ::S5066C10_nt s5066c1f7;
  char s5066c1f8;
  ::S19863C10 s5066c1f9;
  int s5066c1f10[3];
  ::S5066C13_nt s5066c1f11;
  virtual void  v1(); // _ZN7S5066C12v1Ev
  virtual void  v2(); // _ZN7S5066C12v2Ev
  virtual void  v3(); // _ZN7S5066C12v3Ev
  ~S5066C1(); // tgen
  S5066C1(); // tgen
};
//SIG(1 S5066C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} v1 v2 v3 FC6{ m FL FC4 FC7{ m Fp} Fp} Fp[2] FC8{ m Fp[3] Fi} Fi Fp[2] FC7 Fp[3] FC9{ m FC10{ Fl[4]}} Fc FC5 Fi[3] FC11{ m Fp Fi[2] FC12{ m}}}


void  S5066C1 ::v1(){vfunc_called(this, "_ZN7S5066C12v1Ev");}
void  S5066C1 ::v2(){vfunc_called(this, "_ZN7S5066C12v2Ev");}
void  S5066C1 ::v3(){vfunc_called(this, "_ZN7S5066C12v3Ev");}
S5066C1 ::~S5066C1(){ note_dtor("S5066C1", this);} // tgen
S5066C1 ::S5066C1(){ note_ctor("S5066C1", this);} // tgen

static void Test_S5066C1()
{
  extern Class_Descriptor cd_S5066C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,41)];
    init_test(&cd_S5066C1, buf);
    S5066C1 *dp, &lv = *(dp=new (buf) S5066C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,160), "sizeof(S5066C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5066C1)");
    check_base_class_offset(lv, (S5066C3_nt*)(S5066C2_nt*), 0, "S5066C1");
    check_base_class_offset(lv, (S5066C2_nt*), 0, "S5066C1");
    check_field_offset(lv, s5066c1f0, ABISELECT(48,32), "S5066C1.s5066c1f0");
    check_field_offset(lv, s5066c1f1, ABISELECT(88,60), "S5066C1.s5066c1f1");
    check_field_offset(lv, s5066c1f2, ABISELECT(104,68), "S5066C1.s5066c1f2");
    check_field_offset(lv, s5066c1f3, ABISELECT(136,84), "S5066C1.s5066c1f3");
    check_field_offset(lv, s5066c1f4, ABISELECT(144,88), "S5066C1.s5066c1f4");
    check_field_offset(lv, s5066c1f5, ABISELECT(160,96), "S5066C1.s5066c1f5");
    check_field_offset(lv, s5066c1f6, ABISELECT(168,100), "S5066C1.s5066c1f6");
    check_field_offset(lv, s5066c1f7, ABISELECT(192,112), "S5066C1.s5066c1f7");
    check_field_offset(lv, s5066c1f8, ABISELECT(224,128), "S5066C1.s5066c1f8");
    check_field_offset(lv, s5066c1f9, ABISELECT(225,129), "S5066C1.s5066c1f9");
    check_field_offset(lv, s5066c1f10, ABISELECT(228,132), "S5066C1.s5066c1f10");
    check_field_offset(lv, s5066c1f11, ABISELECT(240,144), "S5066C1.s5066c1f11");
    test_class_info(&lv, &cd_S5066C1);
    dp->~S5066C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5066C1(Test_S5066C1, "S5066C1", ABISELECT(264,160));

#else // __cplusplus

extern void _ZN7S5066C1C1Ev();
extern void _ZN7S5066C1D1Ev();
Name_Map name_map_S5066C1[] = {
  NSPAIR(_ZN7S5066C1C1Ev),
  NSPAIR(_ZN7S5066C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5066C3_nt;
extern VTBL_ENTRY _ZTI10S5066C3_nt[];
extern  VTBL_ENTRY _ZTV10S5066C3_nt[];
extern Class_Descriptor cd_S5066C2_nt;
extern VTBL_ENTRY _ZTI10S5066C2_nt[];
extern  VTBL_ENTRY _ZTV10S5066C2_nt[];
static Base_Class bases_S5066C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5066C3_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_S5066C2_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 _ZTI7S5066C1[];
extern void _ZN7S5066C1D1Ev();
extern void _ZN7S5066C1D0Ev();
extern void _ZN10S5066C3_nt2v4Ev();
extern void _ZN10S5066C3_nt2v5Ev();
extern void _ZN10S5066C3_nt2v6Ev();
extern void _ZN10S5066C2_nt2v7Ev();
extern void _ZN10S5066C2_nt2v8Ev();
extern void _ZN7S5066C12v1Ev();
extern void _ZN7S5066C12v2Ev();
extern void _ZN7S5066C12v3Ev();
static  VTBL_ENTRY vtc_S5066C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5066C1[0]),
  (VTBL_ENTRY)&_ZN7S5066C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5066C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5066C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5066C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5066C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5066C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5066C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S5066C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5066C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5066C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5066C1[];
extern  VTBL_ENTRY _ZTV7S5066C1[];
Class_Descriptor cd_S5066C1 = {  "S5066C1", // class name
  bases_S5066C1, 2,
  &(vtc_S5066C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,160), // object size
  NSPAIRA(_ZTI7S5066C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5066C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3954C2  : S1766C4_nt {
  int s3954c2f0;
  void *s3954c2f1[2];
  int s3954c2f2;
  virtual  ~S3954C2(); // _ZN7S3954C2D1Ev
  virtual void  v11(); // _ZN7S3954C23v11Ev
  virtual void  v12(); // _ZN7S3954C23v12Ev
  virtual void  v13(); // _ZN7S3954C23v13Ev
  virtual void  v14(); // _ZN7S3954C23v14Ev
  virtual void  v15(); // _ZN7S3954C23v15Ev
  virtual void  v16(); // _ZN7S3954C23v16Ev
  virtual void  v17(); // _ZN7S3954C23v17Ev
  virtual void  v18(); // _ZN7S3954C23v18Ev
  virtual void  v19(); // _ZN7S3954C23v19Ev
  virtual void  v20(); // _ZN7S3954C23v20Ev
  virtual void  v21(); // _ZN7S3954C23v21Ev
  S3954C2(); // tgen
};
//SIG(-1 S3954C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S3954C2 ::~S3954C2(){ note_dtor("S3954C2", this);}
void  S3954C2 ::v11(){vfunc_called(this, "_ZN7S3954C23v11Ev");}
void  S3954C2 ::v12(){vfunc_called(this, "_ZN7S3954C23v12Ev");}
void  S3954C2 ::v13(){vfunc_called(this, "_ZN7S3954C23v13Ev");}
void  S3954C2 ::v14(){vfunc_called(this, "_ZN7S3954C23v14Ev");}
void  S3954C2 ::v15(){vfunc_called(this, "_ZN7S3954C23v15Ev");}
void  S3954C2 ::v16(){vfunc_called(this, "_ZN7S3954C23v16Ev");}
void  S3954C2 ::v17(){vfunc_called(this, "_ZN7S3954C23v17Ev");}
void  S3954C2 ::v18(){vfunc_called(this, "_ZN7S3954C23v18Ev");}
void  S3954C2 ::v19(){vfunc_called(this, "_ZN7S3954C23v19Ev");}
void  S3954C2 ::v20(){vfunc_called(this, "_ZN7S3954C23v20Ev");}
void  S3954C2 ::v21(){vfunc_called(this, "_ZN7S3954C23v21Ev");}
S3954C2 ::S3954C2(){ note_ctor("S3954C2", this);} // tgen

static void Test_S3954C2()
{
  extern Class_Descriptor cd_S3954C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3954C2, buf);
    S3954C2 *dp, &lv = *(dp=new (buf) S3954C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3954C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3954C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3954C2");
    check_field_offset(lv, s3954c2f0, ABISELECT(16,12), "S3954C2.s3954c2f0");
    check_field_offset(lv, s3954c2f1, ABISELECT(24,16), "S3954C2.s3954c2f1");
    check_field_offset(lv, s3954c2f2, ABISELECT(40,24), "S3954C2.s3954c2f2");
    test_class_info(&lv, &cd_S3954C2);
    dp->~S3954C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3954C2(Test_S3954C2, "S3954C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3954C2C1Ev();
extern void _ZN7S3954C2D1Ev();
Name_Map name_map_S3954C2[] = {
  NSPAIR(_ZN7S3954C2C1Ev),
  NSPAIR(_ZN7S3954C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3954C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3954C2[];
extern void _ZN7S3954C2D1Ev();
extern void _ZN7S3954C2D0Ev();
extern void _ZN7S3954C23v11Ev();
extern void _ZN7S3954C23v12Ev();
extern void _ZN7S3954C23v13Ev();
extern void _ZN7S3954C23v14Ev();
extern void _ZN7S3954C23v15Ev();
extern void _ZN7S3954C23v16Ev();
extern void _ZN7S3954C23v17Ev();
extern void _ZN7S3954C23v18Ev();
extern void _ZN7S3954C23v19Ev();
extern void _ZN7S3954C23v20Ev();
extern void _ZN7S3954C23v21Ev();
static  VTBL_ENTRY vtc_S3954C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3954C2[0]),
  (VTBL_ENTRY)&_ZN7S3954C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3954C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S3954C2[];
extern  VTBL_ENTRY _ZTV7S3954C2[];
Class_Descriptor cd_S3954C2 = {  "S3954C2", // class name
  bases_S3954C2, 1,
  &(vtc_S3954C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3954C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3954C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3954C7_nt  {
  int s3954c7f0;
  int s3954c7f1;
};
//SIG(1 S3954C7_nt) C1{ Fi[2]}



//skip512 S3954C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S3954C6_nt  {
  ::S3954C7_nt s3954c6f0;
  __tsi64 s3954c6f1;
};
//SIG(1 S3954C6_nt) U1{ FC2{ Fi Fi} FL}

#endif // __cplusplus
#ifdef __cplusplus

struct  S3954C5_nt  {
  ::S3954C6_nt s3954c5f0;
  ::S3954C6_nt s3954c5f1;
  ::S3954C6_nt s3954c5f2;
  int s3954c5f3;
  char s3954c5f4;
  short s3954c5f5;
};
//SIG(-1 S3954C5_nt) C1{ FU2{ FC3{ Fi Fi} FL} FU2 FU2 Fi Fc Fs}



//skip512 S3954C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3954C1  : S3954C2 {
  ::S3961C7_nt s3954c1f0;
  ::S3954C5_nt s3954c1f1;
  int s3954c1f2;
  int s3954c1f3;
  int s3954c1f4;
  void *s3954c1f5;
  char s3954c1f6;
  int s3954c1f7;
  void *s3954c1f8;
  char s3954c1f9;
  virtual  ~S3954C1(); // _ZN7S3954C1D1Ev
  virtual void  v1(); // _ZN7S3954C12v1Ev
  virtual void  v2(); // _ZN7S3954C12v2Ev
  virtual void  v3(); // _ZN7S3954C12v3Ev
  virtual void  v4(); // _ZN7S3954C12v4Ev
  virtual void  v5(); // _ZN7S3954C12v5Ev
  virtual void  v6(); // _ZN7S3954C12v6Ev
  virtual void  v7(); // _ZN7S3954C12v7Ev
  virtual void  v8(); // _ZN7S3954C12v8Ev
  virtual void  v9(); // _ZN7S3954C12v9Ev
  virtual void  v10(); // _ZN7S3954C13v10Ev
  S3954C1(); // tgen
};
//SIG(1 S3954C1) C1{ BC2{ BC3{ vd m FL} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fi Fp[2] Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC4{ BC3 vd Fp Fi[4] Fp} FC5{ FU6{ FC7{ Fi Fi} FL} FU6 FU6 Fi Fc Fs} Fi Fi Fi Fp Fc Fi Fp Fc}


 S3954C1 ::~S3954C1(){ note_dtor("S3954C1", this);}
void  S3954C1 ::v1(){vfunc_called(this, "_ZN7S3954C12v1Ev");}
void  S3954C1 ::v2(){vfunc_called(this, "_ZN7S3954C12v2Ev");}
void  S3954C1 ::v3(){vfunc_called(this, "_ZN7S3954C12v3Ev");}
void  S3954C1 ::v4(){vfunc_called(this, "_ZN7S3954C12v4Ev");}
void  S3954C1 ::v5(){vfunc_called(this, "_ZN7S3954C12v5Ev");}
void  S3954C1 ::v6(){vfunc_called(this, "_ZN7S3954C12v6Ev");}
void  S3954C1 ::v7(){vfunc_called(this, "_ZN7S3954C12v7Ev");}
void  S3954C1 ::v8(){vfunc_called(this, "_ZN7S3954C12v8Ev");}
void  S3954C1 ::v9(){vfunc_called(this, "_ZN7S3954C12v9Ev");}
void  S3954C1 ::v10(){vfunc_called(this, "_ZN7S3954C13v10Ev");}
S3954C1 ::S3954C1(){ note_ctor("S3954C1", this);} // tgen

static void Test_S3954C1()
{
  extern Class_Descriptor cd_S3954C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,33)];
    init_test(&cd_S3954C1, buf);
    S3954C1 *dp, &lv = *(dp=new (buf) S3954C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,128), "sizeof(S3954C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3954C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3954C2*), 0, "S3954C1");
    check_base_class_offset(lv, (S3954C2*), 0, "S3954C1");
    check_field_offset(lv, s3954c1f0, ABISELECT(48,28), "S3954C1.s3954c1f0");
    check_field_offset(lv, s3954c1f1, ABISELECT(96,64), "S3954C1.s3954c1f1");
    check_field_offset(lv, s3954c1f2, ABISELECT(128,96), "S3954C1.s3954c1f2");
    check_field_offset(lv, s3954c1f3, ABISELECT(132,100), "S3954C1.s3954c1f3");
    check_field_offset(lv, s3954c1f4, ABISELECT(136,104), "S3954C1.s3954c1f4");
    check_field_offset(lv, s3954c1f5, ABISELECT(144,108), "S3954C1.s3954c1f5");
    check_field_offset(lv, s3954c1f6, ABISELECT(152,112), "S3954C1.s3954c1f6");
    check_field_offset(lv, s3954c1f7, ABISELECT(156,116), "S3954C1.s3954c1f7");
    check_field_offset(lv, s3954c1f8, ABISELECT(160,120), "S3954C1.s3954c1f8");
    check_field_offset(lv, s3954c1f9, ABISELECT(168,124), "S3954C1.s3954c1f9");
    test_class_info(&lv, &cd_S3954C1);
    dp->~S3954C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3954C1(Test_S3954C1, "S3954C1", ABISELECT(176,128));

#else // __cplusplus

extern void _ZN7S3954C1C1Ev();
extern void _ZN7S3954C1D1Ev();
Name_Map name_map_S3954C1[] = {
  NSPAIR(_ZN7S3954C1C1Ev),
  NSPAIR(_ZN7S3954C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3954C2;
extern VTBL_ENTRY _ZTI7S3954C2[];
extern  VTBL_ENTRY _ZTV7S3954C2[];
static Base_Class bases_S3954C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3954C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3954C1[];
extern void _ZN7S3954C1D1Ev();
extern void _ZN7S3954C1D0Ev();
extern void _ZN7S3954C23v11Ev();
extern void _ZN7S3954C23v12Ev();
extern void _ZN7S3954C23v13Ev();
extern void _ZN7S3954C23v14Ev();
extern void _ZN7S3954C23v15Ev();
extern void _ZN7S3954C23v16Ev();
extern void _ZN7S3954C23v17Ev();
extern void _ZN7S3954C23v18Ev();
extern void _ZN7S3954C23v19Ev();
extern void _ZN7S3954C23v20Ev();
extern void _ZN7S3954C23v21Ev();
extern void _ZN7S3954C12v1Ev();
extern void _ZN7S3954C12v2Ev();
extern void _ZN7S3954C12v3Ev();
extern void _ZN7S3954C12v4Ev();
extern void _ZN7S3954C12v5Ev();
extern void _ZN7S3954C12v6Ev();
extern void _ZN7S3954C12v7Ev();
extern void _ZN7S3954C12v8Ev();
extern void _ZN7S3954C12v9Ev();
extern void _ZN7S3954C13v10Ev();
static  VTBL_ENTRY vtc_S3954C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3954C1[0]),
  (VTBL_ENTRY)&_ZN7S3954C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3954C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3954C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3954C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3954C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3954C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3954C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3954C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3954C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3954C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3954C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3954C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3954C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S3954C1[];
extern  VTBL_ENTRY _ZTV7S3954C1[];
Class_Descriptor cd_S3954C1 = {  "S3954C1", // class name
  bases_S3954C1, 2,
  &(vtc_S3954C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,128), // object size
  NSPAIRA(_ZTI7S3954C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3954C1),25, //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  S8455C3_nt  {
  ::S12560C14_nt s8455c3f0;
  int s8455c3f1;
  void  mf8455c3(); // _ZN10S8455C3_nt8mf8455c3Ev
};
//SIG(-1 S8455C3_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S8455C3_nt ::mf8455c3(){}

//skip512 S8455C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8455C2  {
  ::S8455C3_nt s8455c2f0;
  int s8455c2f1;
  void *s8455c2f2[3];
  virtual  ~S8455C2(); // _ZN7S8455C2D1Ev
  virtual void  v1(); // _ZN7S8455C22v1Ev
  virtual void  v2(); // _ZN7S8455C22v2Ev
  virtual void  v3(); // _ZN7S8455C22v3Ev
  S8455C2(); // tgen
};
//SIG(-1 S8455C2) C1{ vd v1 v2 v3 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi Fp[3]}


 S8455C2 ::~S8455C2(){ note_dtor("S8455C2", this);}
void  S8455C2 ::v1(){vfunc_called(this, "_ZN7S8455C22v1Ev");}
void  S8455C2 ::v2(){vfunc_called(this, "_ZN7S8455C22v2Ev");}
void  S8455C2 ::v3(){vfunc_called(this, "_ZN7S8455C22v3Ev");}
S8455C2 ::S8455C2(){ note_ctor("S8455C2", this);} // tgen

static void Test_S8455C2()
{
  extern Class_Descriptor cd_S8455C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S8455C2, buf);
    S8455C2 *dp, &lv = *(dp=new (buf) S8455C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S8455C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8455C2)");
    check_field_offset(lv, s8455c2f0, ABISELECT(8,4), "S8455C2.s8455c2f0");
    check_field_offset(lv, s8455c2f1, ABISELECT(32,20), "S8455C2.s8455c2f1");
    check_field_offset(lv, s8455c2f2, ABISELECT(40,24), "S8455C2.s8455c2f2");
    test_class_info(&lv, &cd_S8455C2);
    dp->~S8455C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8455C2(Test_S8455C2, "S8455C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S8455C2C1Ev();
extern void _ZN7S8455C2D1Ev();
Name_Map name_map_S8455C2[] = {
  NSPAIR(_ZN7S8455C2C1Ev),
  NSPAIR(_ZN7S8455C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8455C2[];
extern void _ZN7S8455C2D1Ev();
extern void _ZN7S8455C2D0Ev();
extern void _ZN7S8455C22v1Ev();
extern void _ZN7S8455C22v2Ev();
extern void _ZN7S8455C22v3Ev();
static  VTBL_ENTRY vtc_S8455C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8455C2[0]),
  (VTBL_ENTRY)&_ZN7S8455C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8455C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8455C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8455C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8455C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S8455C2[];
extern  VTBL_ENTRY _ZTV7S8455C2[];
Class_Descriptor cd_S8455C2 = {  "S8455C2", // class name
  0,0,//no base classes
  &(vtc_S8455C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S8455C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8455C2),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  S8455C6_nt  {
  void *s8455c6f0[3];
  void  mf8455c6(); // _ZN10S8455C6_nt8mf8455c6Ev
  virtual  ~S8455C6_nt(); // _ZN10S8455C6_ntD1Ev
  S8455C6_nt(); // tgen
};
//SIG(-1 S8455C6_nt) C1{ vd m Fp[3]}


void  S8455C6_nt ::mf8455c6(){}
 S8455C6_nt ::~S8455C6_nt(){ note_dtor("S8455C6_nt", this);}
S8455C6_nt ::S8455C6_nt(){ note_ctor("S8455C6_nt", this);} // tgen

//skip512 S8455C6_nt

#else // __cplusplus

extern void _ZN10S8455C6_ntC1Ev();
extern void _ZN10S8455C6_ntD1Ev();
Name_Map name_map_S8455C6_nt[] = {
  NSPAIR(_ZN10S8455C6_ntC1Ev),
  NSPAIR(_ZN10S8455C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8455C6_nt[];
extern void _ZN10S8455C6_ntD1Ev();
extern void _ZN10S8455C6_ntD0Ev();
static  VTBL_ENTRY vtc_S8455C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8455C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S8455C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8455C6_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8455C6_nt[];
VTBL_ENTRY *P__ZTI10S8455C6_nt = _ZTI10S8455C6_nt; 
extern  VTBL_ENTRY _ZTV10S8455C6_nt[];
Class_Descriptor cd_S8455C6_nt = {  "S8455C6_nt", // class name
  0,0,//no base classes
  &(vtc_S8455C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI10S8455C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8455C6_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  S8455C7_nt  {
  void *s8455c7f0;
  void  mf8455c7(); // _ZN10S8455C7_nt8mf8455c7Ev
  virtual  ~S8455C7_nt(); // _ZN10S8455C7_ntD1Ev
  S8455C7_nt(); // tgen
};
//SIG(-1 S8455C7_nt) C1{ vd m Fp}


void  S8455C7_nt ::mf8455c7(){}
 S8455C7_nt ::~S8455C7_nt(){ note_dtor("S8455C7_nt", this);}
S8455C7_nt ::S8455C7_nt(){ note_ctor("S8455C7_nt", this);} // tgen

//skip512 S8455C7_nt

#else // __cplusplus

extern void _ZN10S8455C7_ntC1Ev();
extern void _ZN10S8455C7_ntD1Ev();
Name_Map name_map_S8455C7_nt[] = {
  NSPAIR(_ZN10S8455C7_ntC1Ev),
  NSPAIR(_ZN10S8455C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8455C7_nt[];
extern void _ZN10S8455C7_ntD1Ev();
extern void _ZN10S8455C7_ntD0Ev();
static  VTBL_ENTRY vtc_S8455C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8455C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S8455C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8455C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8455C7_nt[];
VTBL_ENTRY *P__ZTI10S8455C7_nt = _ZTI10S8455C7_nt; 
extern  VTBL_ENTRY _ZTV10S8455C7_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8455C10_nt  {
  int s8455c10f0[3];
  virtual  ~S8455C10_nt(); // _ZN11S8455C10_ntD1Ev
  virtual void  v5(); // _ZN11S8455C10_nt2v5Ev
  virtual void  v6(); // _ZN11S8455C10_nt2v6Ev
  virtual void  v7(); // _ZN11S8455C10_nt2v7Ev
  virtual void  v8(); // _ZN11S8455C10_nt2v8Ev
  virtual void  v9(); // _ZN11S8455C10_nt2v9Ev
  virtual void  v10(); // _ZN11S8455C10_nt3v10Ev
  S8455C10_nt(); // tgen
};
//SIG(-1 S8455C10_nt) C1{ vd v1 v2 v3 v4 v5 v6 Fi[3]}


 S8455C10_nt ::~S8455C10_nt(){ note_dtor("S8455C10_nt", this);}
void  S8455C10_nt ::v5(){vfunc_called(this, "_ZN11S8455C10_nt2v5Ev");}
void  S8455C10_nt ::v6(){vfunc_called(this, "_ZN11S8455C10_nt2v6Ev");}
void  S8455C10_nt ::v7(){vfunc_called(this, "_ZN11S8455C10_nt2v7Ev");}
void  S8455C10_nt ::v8(){vfunc_called(this, "_ZN11S8455C10_nt2v8Ev");}
void  S8455C10_nt ::v9(){vfunc_called(this, "_ZN11S8455C10_nt2v9Ev");}
void  S8455C10_nt ::v10(){vfunc_called(this, "_ZN11S8455C10_nt3v10Ev");}
S8455C10_nt ::S8455C10_nt(){ note_ctor("S8455C10_nt", this);} // tgen

//skip512 S8455C10_nt

#else // __cplusplus

extern void _ZN11S8455C10_ntC1Ev();
extern void _ZN11S8455C10_ntD1Ev();
Name_Map name_map_S8455C10_nt[] = {
  NSPAIR(_ZN11S8455C10_ntC1Ev),
  NSPAIR(_ZN11S8455C10_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S8455C10_nt[];
extern void _ZN11S8455C10_ntD1Ev();
extern void _ZN11S8455C10_ntD0Ev();
extern void _ZN11S8455C10_nt2v5Ev();
extern void _ZN11S8455C10_nt2v6Ev();
extern void _ZN11S8455C10_nt2v7Ev();
extern void _ZN11S8455C10_nt2v8Ev();
extern void _ZN11S8455C10_nt2v9Ev();
extern void _ZN11S8455C10_nt3v10Ev();
static  VTBL_ENTRY vtc_S8455C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S8455C10_nt[0]),
  (VTBL_ENTRY)&_ZN11S8455C10_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI11S8455C10_nt[];
VTBL_ENTRY *P__ZTI11S8455C10_nt = _ZTI11S8455C10_nt; 
extern  VTBL_ENTRY _ZTV11S8455C10_nt[];
Class_Descriptor cd_S8455C10_nt = {  "S8455C10_nt", // class name
  0,0,//no base classes
  &(vtc_S8455C10_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI11S8455C10_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S8455C10_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8455C9_nt  : S8455C10_nt {
  virtual  ~S8455C9_nt(); // _ZN10S8455C9_ntD1Ev
  virtual void  v4(); // _ZN10S8455C9_nt2v4Ev
  S8455C9_nt(); // tgen
};
//SIG(-1 S8455C9_nt) C1{ BC2{ vd v2 v3 v4 v5 v6 v7 Fi[3]} vd v1}


 S8455C9_nt ::~S8455C9_nt(){ note_dtor("S8455C9_nt", this);}
void  S8455C9_nt ::v4(){vfunc_called(this, "_ZN10S8455C9_nt2v4Ev");}
S8455C9_nt ::S8455C9_nt(){ note_ctor("S8455C9_nt", this);} // tgen

//skip512 S8455C9_nt

#else // __cplusplus

extern void _ZN10S8455C9_ntC1Ev();
extern void _ZN10S8455C9_ntD1Ev();
Name_Map name_map_S8455C9_nt[] = {
  NSPAIR(_ZN10S8455C9_ntC1Ev),
  NSPAIR(_ZN10S8455C9_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8455C10_nt;
extern VTBL_ENTRY _ZTI11S8455C10_nt[];
extern  VTBL_ENTRY _ZTV11S8455C10_nt[];
static Base_Class bases_S8455C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8455C10_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 _ZTI10S8455C9_nt[];
extern void _ZN10S8455C9_ntD1Ev();
extern void _ZN10S8455C9_ntD0Ev();
extern void _ZN11S8455C10_nt2v5Ev();
extern void _ZN11S8455C10_nt2v6Ev();
extern void _ZN11S8455C10_nt2v7Ev();
extern void _ZN11S8455C10_nt2v8Ev();
extern void _ZN11S8455C10_nt2v9Ev();
extern void _ZN11S8455C10_nt3v10Ev();
extern void _ZN10S8455C9_nt2v4Ev();
static  VTBL_ENTRY vtc_S8455C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8455C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S8455C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8455C9_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S8455C9_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S8455C9_nt[];
VTBL_ENTRY *P__ZTI10S8455C9_nt = _ZTI10S8455C9_nt; 
extern  VTBL_ENTRY _ZTV10S8455C9_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8455C12  : S8455C10_nt {
  virtual  ~S8455C12(); // _ZN8S8455C12D1Ev
  virtual void  v12(); // _ZN8S8455C123v12Ev
  S8455C12(); // tgen
};
//SIG(-1 S8455C12) C1{ BC2{ vd v2 v3 v4 v5 v6 v7 Fi[3]} vd v1}


 S8455C12 ::~S8455C12(){ note_dtor("S8455C12", this);}
void  S8455C12 ::v12(){vfunc_called(this, "_ZN8S8455C123v12Ev");}
S8455C12 ::S8455C12(){ note_ctor("S8455C12", this);} // tgen

static void Test_S8455C12()
{
  extern Class_Descriptor cd_S8455C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S8455C12, buf);
    S8455C12 *dp, &lv = *(dp=new (buf) S8455C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S8455C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8455C12)");
    check_base_class_offset(lv, (S8455C10_nt*), 0, "S8455C12");
    test_class_info(&lv, &cd_S8455C12);
    dp->~S8455C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8455C12(Test_S8455C12, "S8455C12", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S8455C12C1Ev();
extern void _ZN8S8455C12D1Ev();
Name_Map name_map_S8455C12[] = {
  NSPAIR(_ZN8S8455C12C1Ev),
  NSPAIR(_ZN8S8455C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8455C10_nt;
extern VTBL_ENTRY _ZTI11S8455C10_nt[];
extern  VTBL_ENTRY _ZTV11S8455C10_nt[];
static Base_Class bases_S8455C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8455C10_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 _ZTI8S8455C12[];
extern void _ZN8S8455C12D1Ev();
extern void _ZN8S8455C12D0Ev();
extern void _ZN11S8455C10_nt2v5Ev();
extern void _ZN11S8455C10_nt2v6Ev();
extern void _ZN11S8455C10_nt2v7Ev();
extern void _ZN11S8455C10_nt2v8Ev();
extern void _ZN11S8455C10_nt2v9Ev();
extern void _ZN11S8455C10_nt3v10Ev();
extern void _ZN8S8455C123v12Ev();
static  VTBL_ENTRY vtc_S8455C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8455C12[0]),
  (VTBL_ENTRY)&_ZN8S8455C12D1Ev,
  (VTBL_ENTRY)&_ZN8S8455C12D0Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S8455C10_nt3v10Ev,
  (VTBL_ENTRY)&_ZN8S8455C123v12Ev,
};
extern VTBL_ENTRY _ZTI8S8455C12[];
extern  VTBL_ENTRY _ZTV8S8455C12[];
Class_Descriptor cd_S8455C12 = {  "S8455C12", // class name
  bases_S8455C12, 1,
  &(vtc_S8455C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S8455C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S8455C12),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  S8455C8  {
  int s8455c8f0;
  ::S8455C9_nt s8455c8f1;
  ::S8455C9_nt s8455c8f2;
  ::S8455C12 s8455c8f3;
  int s8455c8f4[2];
  void  mf8455c8(); // _ZN7S8455C88mf8455c8Ev
  virtual  ~S8455C8(); // _ZN7S8455C8D1Ev
  S8455C8(); // tgen
};
//SIG(-1 S8455C8) C1{ vd m Fi FC2{ BC3{ vd v2 v3 v4 v5 v6 v7 Fi[3]} vd v1} FC2 FC4{ BC3 vd v8} Fi[2]}


void  S8455C8 ::mf8455c8(){}
 S8455C8 ::~S8455C8(){ note_dtor("S8455C8", this);}
S8455C8 ::S8455C8(){ note_ctor("S8455C8", this);} // tgen

static void Test_S8455C8()
{
  extern Class_Descriptor cd_S8455C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S8455C8, buf);
    S8455C8 *dp, &lv = *(dp=new (buf) S8455C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S8455C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8455C8)");
    check_field_offset(lv, s8455c8f0, ABISELECT(8,4), "S8455C8.s8455c8f0");
    check_field_offset(lv, s8455c8f1, ABISELECT(16,8), "S8455C8.s8455c8f1");
    check_field_offset(lv, s8455c8f2, ABISELECT(40,24), "S8455C8.s8455c8f2");
    check_field_offset(lv, s8455c8f3, ABISELECT(64,40), "S8455C8.s8455c8f3");
    check_field_offset(lv, s8455c8f4, ABISELECT(88,56), "S8455C8.s8455c8f4");
    test_class_info(&lv, &cd_S8455C8);
    dp->~S8455C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8455C8(Test_S8455C8, "S8455C8", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S8455C8C1Ev();
extern void _ZN7S8455C8D1Ev();
Name_Map name_map_S8455C8[] = {
  NSPAIR(_ZN7S8455C8C1Ev),
  NSPAIR(_ZN7S8455C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8455C8[];
extern void _ZN7S8455C8D1Ev();
extern void _ZN7S8455C8D0Ev();
static  VTBL_ENTRY vtc_S8455C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8455C8[0]),
  (VTBL_ENTRY)&_ZN7S8455C8D1Ev,
  (VTBL_ENTRY)&_ZN7S8455C8D0Ev,
};
extern VTBL_ENTRY _ZTI7S8455C8[];
extern  VTBL_ENTRY _ZTV7S8455C8[];
Class_Descriptor cd_S8455C8 = {  "S8455C8", // class name
  0,0,//no base classes
  &(vtc_S8455C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S8455C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8455C8),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  S8455C1  : S8455C2 {
  ::S8455C6_nt s8455c1f0;
  ::S8455C6_nt s8455c1f1;
  ::S8455C6_nt s8455c1f2;
  ::S8455C7_nt s8455c1f3;
  ::S8455C8 s8455c1f4;
  void *s8455c1f5;
  virtual  ~S8455C1(); // _ZN7S8455C1D1Ev
  S8455C1(); // tgen
};
//SIG(1 S8455C1) C1{ BC2{ vd v1 v2 v3 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fi Fp[3]} vd FC6{ vd m Fp[3]} FC6 FC6 FC7{ vd m Fp} FC8{ vd m Fi FC9{ BC10{ vd v5 v6 v7 v8 v9 v10 Fi[3]} vd v4} FC9 FC11{ BC10 vd v11} Fi[2]} Fp}


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

static void Test_S8455C1()
{
  extern Class_Descriptor cd_S8455C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,41)];
    init_test(&cd_S8455C1, buf);
    S8455C1 *dp, &lv = *(dp=new (buf) S8455C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,160), "sizeof(S8455C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8455C1)");
    check_base_class_offset(lv, (S8455C2*), 0, "S8455C1");
    check_field_offset(lv, s8455c1f0, ABISELECT(64,36), "S8455C1.s8455c1f0");
    check_field_offset(lv, s8455c1f1, ABISELECT(96,52), "S8455C1.s8455c1f1");
    check_field_offset(lv, s8455c1f2, ABISELECT(128,68), "S8455C1.s8455c1f2");
    check_field_offset(lv, s8455c1f3, ABISELECT(160,84), "S8455C1.s8455c1f3");
    check_field_offset(lv, s8455c1f4, ABISELECT(176,92), "S8455C1.s8455c1f4");
    check_field_offset(lv, s8455c1f5, ABISELECT(272,156), "S8455C1.s8455c1f5");
    test_class_info(&lv, &cd_S8455C1);
    dp->~S8455C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8455C1(Test_S8455C1, "S8455C1", ABISELECT(280,160));

#else // __cplusplus

extern void _ZN7S8455C1C1Ev();
extern void _ZN7S8455C1D1Ev();
Name_Map name_map_S8455C1[] = {
  NSPAIR(_ZN7S8455C1C1Ev),
  NSPAIR(_ZN7S8455C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8455C2;
extern VTBL_ENTRY _ZTI7S8455C2[];
extern  VTBL_ENTRY _ZTV7S8455C2[];
static Base_Class bases_S8455C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8455C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8455C1[];
extern void _ZN7S8455C1D1Ev();
extern void _ZN7S8455C1D0Ev();
extern void _ZN7S8455C22v1Ev();
extern void _ZN7S8455C22v2Ev();
extern void _ZN7S8455C22v3Ev();
static  VTBL_ENTRY vtc_S8455C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8455C1[0]),
  (VTBL_ENTRY)&_ZN7S8455C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8455C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8455C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8455C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8455C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S8455C1[];
extern  VTBL_ENTRY _ZTV7S8455C1[];
Class_Descriptor cd_S8455C1 = {  "S8455C1", // class name
  bases_S8455C1, 1,
  &(vtc_S8455C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,160), // object size
  NSPAIRA(_ZTI7S8455C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8455C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19313C3  {
  virtual void  v2(); // _ZN8S19313C32v2Ev
  virtual void  v3(); // _ZN8S19313C32v3Ev
  virtual void  v4(); // _ZN8S19313C32v4Ev
  ~S19313C3(); // tgen
  S19313C3(); // tgen
};
//SIG(-1 S19313C3) C1{ v1 v2 v3}


void  S19313C3 ::v2(){vfunc_called(this, "_ZN8S19313C32v2Ev");}
void  S19313C3 ::v3(){vfunc_called(this, "_ZN8S19313C32v3Ev");}
void  S19313C3 ::v4(){vfunc_called(this, "_ZN8S19313C32v4Ev");}
S19313C3 ::~S19313C3(){ note_dtor("S19313C3", this);} // tgen
S19313C3 ::S19313C3(){ note_ctor("S19313C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19313C3C1Ev();
extern void _ZN8S19313C3D1Ev();
Name_Map name_map_S19313C3[] = {
  NSPAIR(_ZN8S19313C3C1Ev),
  NSPAIR(_ZN8S19313C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19313C3[];
extern void _ZN8S19313C32v2Ev();
extern void _ZN8S19313C32v3Ev();
extern void _ZN8S19313C32v4Ev();
static  VTBL_ENTRY vtc_S19313C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19313C3[0]),
  (VTBL_ENTRY)&_ZN8S19313C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v4Ev,
};
extern VTBL_ENTRY _ZTI8S19313C3[];
extern  VTBL_ENTRY _ZTV8S19313C3[];
Class_Descriptor cd_S19313C3 = {  "S19313C3", // class name
  0,0,//no base classes
  &(vtc_S19313C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19313C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19313C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19313C6  : S19313C3 {
  void *s19313c6f0;
  virtual  ~S19313C6(); // _ZN8S19313C6D1Ev
  virtual void  v5(); // _ZN8S19313C62v5Ev
  virtual void  v6(); // _ZN8S19313C62v6Ev
  virtual void  v7(); // _ZN8S19313C62v7Ev
  virtual void  v8(); // _ZN8S19313C62v8Ev
  virtual void  v9(); // _ZN8S19313C62v9Ev
  S19313C6(); // tgen
};
//SIG(-1 S19313C6) C1{ BC2{ v6 v7 v8} vd v1 v2 v3 v4 v5 Fp}


 S19313C6 ::~S19313C6(){ note_dtor("S19313C6", this);}
void  S19313C6 ::v5(){vfunc_called(this, "_ZN8S19313C62v5Ev");}
void  S19313C6 ::v6(){vfunc_called(this, "_ZN8S19313C62v6Ev");}
void  S19313C6 ::v7(){vfunc_called(this, "_ZN8S19313C62v7Ev");}
void  S19313C6 ::v8(){vfunc_called(this, "_ZN8S19313C62v8Ev");}
void  S19313C6 ::v9(){vfunc_called(this, "_ZN8S19313C62v9Ev");}
S19313C6 ::S19313C6(){ note_ctor("S19313C6", this);} // tgen

static void Test_S19313C6()
{
  extern Class_Descriptor cd_S19313C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19313C6, buf);
    S19313C6 *dp, &lv = *(dp=new (buf) S19313C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19313C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19313C6)");
    check_base_class_offset(lv, (S19313C3*), 0, "S19313C6");
    check_field_offset(lv, s19313c6f0, ABISELECT(8,4), "S19313C6.s19313c6f0");
    test_class_info(&lv, &cd_S19313C6);
    dp->~S19313C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19313C6(Test_S19313C6, "S19313C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19313C6C1Ev();
extern void _ZN8S19313C6D1Ev();
Name_Map name_map_S19313C6[] = {
  NSPAIR(_ZN8S19313C6C1Ev),
  NSPAIR(_ZN8S19313C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19313C3;
extern VTBL_ENTRY _ZTI8S19313C3[];
extern  VTBL_ENTRY _ZTV8S19313C3[];
static Base_Class bases_S19313C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19313C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19313C6[];
extern void _ZN8S19313C32v2Ev();
extern void _ZN8S19313C32v3Ev();
extern void _ZN8S19313C32v4Ev();
extern void _ZN8S19313C6D1Ev();
extern void _ZN8S19313C6D0Ev();
extern void _ZN8S19313C62v5Ev();
extern void _ZN8S19313C62v6Ev();
extern void _ZN8S19313C62v7Ev();
extern void _ZN8S19313C62v8Ev();
extern void _ZN8S19313C62v9Ev();
static  VTBL_ENTRY vtc_S19313C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19313C6[0]),
  (VTBL_ENTRY)&_ZN8S19313C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19313C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19313C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v9Ev,
};
extern VTBL_ENTRY _ZTI8S19313C6[];
extern  VTBL_ENTRY _ZTV8S19313C6[];
Class_Descriptor cd_S19313C6 = {  "S19313C6", // class name
  bases_S19313C6, 1,
  &(vtc_S19313C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19313C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19313C6),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  S19313C7  {
  ::S19313C3 s19313c7f0;
  __tsi64 s19313c7f1;
  long double s19313c7f2;
  virtual void  v10(); // _ZN8S19313C73v10Ev
  virtual void  v11(); // _ZN8S19313C73v11Ev
  virtual void  v12(); // _ZN8S19313C73v12Ev
  virtual void  v13(); // _ZN8S19313C73v13Ev
  virtual void  v14(); // _ZN8S19313C73v14Ev
  virtual void  v15(); // _ZN8S19313C73v15Ev
  ~S19313C7(); // tgen
  S19313C7(); // tgen
};
//SIG(-1 S19313C7) C1{ v1 v2 v3 v4 v5 v6 FC2{ v7 v8 v9} FL FD}


void  S19313C7 ::v10(){vfunc_called(this, "_ZN8S19313C73v10Ev");}
void  S19313C7 ::v11(){vfunc_called(this, "_ZN8S19313C73v11Ev");}
void  S19313C7 ::v12(){vfunc_called(this, "_ZN8S19313C73v12Ev");}
void  S19313C7 ::v13(){vfunc_called(this, "_ZN8S19313C73v13Ev");}
void  S19313C7 ::v14(){vfunc_called(this, "_ZN8S19313C73v14Ev");}
void  S19313C7 ::v15(){vfunc_called(this, "_ZN8S19313C73v15Ev");}
S19313C7 ::~S19313C7(){ note_dtor("S19313C7", this);} // tgen
S19313C7 ::S19313C7(){ note_ctor("S19313C7", this);} // tgen

static void Test_S19313C7()
{
  extern Class_Descriptor cd_S19313C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S19313C7, buf);
    S19313C7 *dp, &lv = *(dp=new (buf) S19313C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19313C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19313C7)");
    check_field_offset(lv, s19313c7f0, ABISELECT(8,4), "S19313C7.s19313c7f0");
    check_field_offset(lv, s19313c7f1, ABISELECT(16,8), "S19313C7.s19313c7f1");
    check_field_offset(lv, s19313c7f2, ABISELECT(32,16), "S19313C7.s19313c7f2");
    test_class_info(&lv, &cd_S19313C7);
    dp->~S19313C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19313C7(Test_S19313C7, "S19313C7", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S19313C7C1Ev();
extern void _ZN8S19313C7D1Ev();
Name_Map name_map_S19313C7[] = {
  NSPAIR(_ZN8S19313C7C1Ev),
  NSPAIR(_ZN8S19313C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19313C7[];
extern void _ZN8S19313C73v10Ev();
extern void _ZN8S19313C73v11Ev();
extern void _ZN8S19313C73v12Ev();
extern void _ZN8S19313C73v13Ev();
extern void _ZN8S19313C73v14Ev();
extern void _ZN8S19313C73v15Ev();
static  VTBL_ENTRY vtc_S19313C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19313C7[0]),
  (VTBL_ENTRY)&_ZN8S19313C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v15Ev,
};
extern VTBL_ENTRY _ZTI8S19313C7[];
extern  VTBL_ENTRY _ZTV8S19313C7[];
Class_Descriptor cd_S19313C7 = {  "S19313C7", // class name
  0,0,//no base classes
  &(vtc_S19313C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S19313C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19313C7),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19313C5  : S19313C6 , S19313C7 {
  void *s19313c5f0;
  virtual  ~S19313C5(); // _ZN8S19313C5D1Ev
  virtual void  v16(); // _ZN8S19313C53v16Ev
  virtual void  v17(); // _ZN8S19313C53v17Ev
  virtual void  v18(); // _ZN8S19313C53v18Ev
  virtual void  v19(); // _ZN8S19313C53v19Ev
  virtual void  v20(); // _ZN8S19313C53v20Ev
  S19313C5(); // tgen
};
//SIG(-1 S19313C5) C1{ BC2{ BC3{ v6 v7 v8} vd v9 v10 v11 v12 v13 Fp} BC4{ v14 v15 v16 v17 v18 v19 FC3 FL FD} vd v1 v2 v3 v4 v5 Fp}


 S19313C5 ::~S19313C5(){ note_dtor("S19313C5", this);}
void  S19313C5 ::v16(){vfunc_called(this, "_ZN8S19313C53v16Ev");}
void  S19313C5 ::v17(){vfunc_called(this, "_ZN8S19313C53v17Ev");}
void  S19313C5 ::v18(){vfunc_called(this, "_ZN8S19313C53v18Ev");}
void  S19313C5 ::v19(){vfunc_called(this, "_ZN8S19313C53v19Ev");}
void  S19313C5 ::v20(){vfunc_called(this, "_ZN8S19313C53v20Ev");}
S19313C5 ::S19313C5(){ note_ctor("S19313C5", this);} // tgen

static void Test_S19313C5()
{
  extern Class_Descriptor cd_S19313C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,11)];
    init_test(&cd_S19313C5, buf);
    S19313C5 *dp, &lv = *(dp=new (buf) S19313C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S19313C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19313C5)");
    check_base_class_offset(lv, (S19313C3*)(S19313C6*), 0, "S19313C5");
    check_base_class_offset(lv, (S19313C6*), 0, "S19313C5");
    check_base_class_offset(lv, (S19313C7*), ABISELECT(16,8), "S19313C5");
    check_field_offset(lv, s19313c5f0, ABISELECT(64,36), "S19313C5.s19313c5f0");
    test_class_info(&lv, &cd_S19313C5);
    dp->~S19313C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19313C5(Test_S19313C5, "S19313C5", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN8S19313C5C1Ev();
extern void _ZN8S19313C5D1Ev();
Name_Map name_map_S19313C5[] = {
  NSPAIR(_ZN8S19313C5C1Ev),
  NSPAIR(_ZN8S19313C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19313C3;
extern VTBL_ENTRY _ZTI8S19313C3[];
extern  VTBL_ENTRY _ZTV8S19313C3[];
extern Class_Descriptor cd_S19313C6;
extern VTBL_ENTRY _ZTI8S19313C6[];
extern  VTBL_ENTRY _ZTV8S19313C6[];
extern Class_Descriptor cd_S19313C7;
extern VTBL_ENTRY _ZTI8S19313C7[];
extern  VTBL_ENTRY _ZTV8S19313C7[];
static Base_Class bases_S19313C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19313C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19313C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19313C7,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_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 _ZTI8S19313C5[];
extern void _ZN8S19313C32v2Ev();
extern void _ZN8S19313C32v3Ev();
extern void _ZN8S19313C32v4Ev();
extern void _ZN8S19313C5D1Ev();
extern void _ZN8S19313C5D0Ev();
extern void _ZN8S19313C62v5Ev();
extern void _ZN8S19313C62v6Ev();
extern void _ZN8S19313C62v7Ev();
extern void _ZN8S19313C62v8Ev();
extern void _ZN8S19313C62v9Ev();
extern void _ZN8S19313C53v16Ev();
extern void _ZN8S19313C53v17Ev();
extern void _ZN8S19313C53v18Ev();
extern void _ZN8S19313C53v19Ev();
extern void _ZN8S19313C53v20Ev();
extern void _ZN8S19313C73v10Ev();
extern void _ZN8S19313C73v11Ev();
extern void _ZN8S19313C73v12Ev();
extern void _ZN8S19313C73v13Ev();
extern void _ZN8S19313C73v14Ev();
extern void _ZN8S19313C73v15Ev();
static  VTBL_ENTRY vtc_S19313C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19313C5[0]),
  (VTBL_ENTRY)&_ZN8S19313C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19313C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19313C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v20Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19313C5[0]),
  (VTBL_ENTRY)&_ZN8S19313C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v15Ev,
};
extern VTBL_ENTRY _ZTI8S19313C5[];
extern  VTBL_ENTRY _ZTV8S19313C5[];
Class_Descriptor cd_S19313C5 = {  "S19313C5", // class name
  bases_S19313C5, 3,
  &(vtc_S19313C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI8S19313C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19313C5),25, //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  S19313C4  : virtual S19313C5 {
  void *s19313c4f0;
  short s19313c4f1;
  virtual void  v21(); // _ZN8S19313C43v21Ev
  virtual void  v22(); // _ZN8S19313C43v22Ev
  virtual void  v23(); // _ZN8S19313C43v23Ev
  virtual void  v24(); // _ZN8S19313C43v24Ev
  virtual void  v25(); // _ZN8S19313C43v25Ev
  virtual void  v26(); // _ZN8S19313C43v26Ev
  virtual void  v27(); // _ZN8S19313C43v27Ev
  virtual void  v28(); // _ZN8S19313C43v28Ev
  ~S19313C4(); // tgen
  S19313C4(); // tgen
};
//SIG(-1 S19313C4) C1{ VBC2{ BC3{ BC4{ v9 v10 v11} vd v12 v13 v14 v15 v16 Fp} BC5{ v17 v18 v19 v20 v21 v22 FC4 FL FD} vd v23 v24 v25 v26 v27 Fp} v1 v2 v3 v4 v5 v6 v7 v8 Fp Fs}


void  S19313C4 ::v21(){vfunc_called(this, "_ZN8S19313C43v21Ev");}
void  S19313C4 ::v22(){vfunc_called(this, "_ZN8S19313C43v22Ev");}
void  S19313C4 ::v23(){vfunc_called(this, "_ZN8S19313C43v23Ev");}
void  S19313C4 ::v24(){vfunc_called(this, "_ZN8S19313C43v24Ev");}
void  S19313C4 ::v25(){vfunc_called(this, "_ZN8S19313C43v25Ev");}
void  S19313C4 ::v26(){vfunc_called(this, "_ZN8S19313C43v26Ev");}
void  S19313C4 ::v27(){vfunc_called(this, "_ZN8S19313C43v27Ev");}
void  S19313C4 ::v28(){vfunc_called(this, "_ZN8S19313C43v28Ev");}
S19313C4 ::~S19313C4(){ note_dtor("S19313C4", this);} // tgen
S19313C4 ::S19313C4(){ note_ctor("S19313C4", this);} // tgen

static void Test_S19313C4()
{
  extern Class_Descriptor cd_S19313C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,14)];
    init_test(&cd_S19313C4, buf);
    S19313C4 *dp, &lv = *(dp=new (buf) S19313C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,52), "sizeof(S19313C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19313C4)");
    check_base_class_offset(lv, (S19313C3*)(S19313C6*)(S19313C5*), ABISELECT(32,12), "S19313C4");
    check_base_class_offset(lv, (S19313C6*)(S19313C5*), ABISELECT(32,12), "S19313C4");
    check_base_class_offset(lv, (S19313C7*)(S19313C5*), ABISELECT(48,20), "S19313C4");
    check_base_class_offset(lv, (S19313C5*), ABISELECT(32,12), "S19313C4");
    check_field_offset(lv, s19313c4f0, ABISELECT(8,4), "S19313C4.s19313c4f0");
    check_field_offset(lv, s19313c4f1, ABISELECT(16,8), "S19313C4.s19313c4f1");
    test_class_info(&lv, &cd_S19313C4);
    dp->~S19313C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19313C4(Test_S19313C4, "S19313C4", ABISELECT(112,52));

#else // __cplusplus

extern void _ZN8S19313C4C1Ev();
extern void _ZN8S19313C4D1Ev();
Name_Map name_map_S19313C4[] = {
  NSPAIR(_ZN8S19313C4C1Ev),
  NSPAIR(_ZN8S19313C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19313C3;
extern VTBL_ENTRY _ZTI8S19313C3[];
extern  VTBL_ENTRY _ZTV8S19313C3[];
extern Class_Descriptor cd_S19313C6;
extern VTBL_ENTRY _ZTI8S19313C6[];
extern  VTBL_ENTRY _ZTV8S19313C6[];
extern Class_Descriptor cd_S19313C7;
extern VTBL_ENTRY _ZTI8S19313C7[];
extern  VTBL_ENTRY _ZTV8S19313C7[];
extern Class_Descriptor cd_S19313C5;
extern VTBL_ENTRY _ZTI8S19313C5[];
extern  VTBL_ENTRY _ZTV8S19313C5[];
static Base_Class bases_S19313C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19313C3,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19313C6,    ABISELECT(32,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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19313C7,    ABISELECT(48,20), //bcp->offset
    50, //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
    3, //immediately_derived
  0, 0},
  {&cd_S19313C5,    ABISELECT(32,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19313C4[];
extern void _ZN8S19313C43v21Ev();
extern void _ZN8S19313C43v22Ev();
extern void _ZN8S19313C43v23Ev();
extern void _ZN8S19313C43v24Ev();
extern void _ZN8S19313C43v25Ev();
extern void _ZN8S19313C43v26Ev();
extern void _ZN8S19313C43v27Ev();
extern void _ZN8S19313C43v28Ev();
extern void _ZN8S19313C4D1Ev();
extern void _ZN8S19313C4D0Ev();
extern void _ZN8S19313C32v2Ev();
extern void _ZN8S19313C32v3Ev();
extern void _ZN8S19313C32v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S19313C4D1Ev,_ZTv0_n24_N8S19313C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19313C4D1Ev,_ZThn12_N8S19313C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19313C4D0Ev,_ZTv0_n24_N8S19313C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S19313C4D0Ev,_ZThn12_N8S19313C4D0Ev)() __attribute__((weak));
extern void _ZN8S19313C62v5Ev();
extern void _ZN8S19313C62v6Ev();
extern void _ZN8S19313C62v7Ev();
extern void _ZN8S19313C62v8Ev();
extern void _ZN8S19313C62v9Ev();
extern void _ZN8S19313C53v16Ev();
extern void _ZN8S19313C53v17Ev();
extern void _ZN8S19313C53v18Ev();
extern void _ZN8S19313C53v19Ev();
extern void _ZN8S19313C53v20Ev();
extern void _ZN8S19313C73v10Ev();
extern void _ZN8S19313C73v11Ev();
extern void _ZN8S19313C73v12Ev();
extern void _ZN8S19313C73v13Ev();
extern void _ZN8S19313C73v14Ev();
extern void _ZN8S19313C73v15Ev();
static  VTBL_ENTRY vtc_S19313C4[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19313C4[0]),
  (VTBL_ENTRY)&_ZN8S19313C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v26Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v27Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v28Ev,
  (VTBL_ENTRY)&_ZN8S19313C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19313C4D0Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S19313C4[0]),
  (VTBL_ENTRY)&_ZN8S19313C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19313C4D1Ev,_ZTv0_n24_N8S19313C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19313C4D0Ev,_ZTv0_n24_N8S19313C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19313C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v20Ev,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S19313C4[0]),
  (VTBL_ENTRY)&_ZN8S19313C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v15Ev,
};
extern VTBL_ENTRY _ZTV8S19313C4[];
static  VTT_ENTRY vtt_S19313C4[] = {
  {&(_ZTV8S19313C4[3]),  3,58},
  {&(_ZTV8S19313C4[35]),  35,58},
  {&(_ZTV8S19313C4[52]),  52,58},
};
extern VTBL_ENTRY _ZTI8S19313C4[];
extern  VTBL_ENTRY _ZTV8S19313C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19313C4[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19313C4D0Ev,_ZTv0_n24_N8S19313C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19313C4D0Ev,_ZThn12_N8S19313C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19313C4D1Ev,_ZTv0_n24_N8S19313C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19313C4D1Ev,_ZThn12_N8S19313C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19313C4 = {  "S19313C4", // class name
  bases_S19313C4, 4,
  &(vtc_S19313C4[0]), // expected_vtbl_contents
  &(vtt_S19313C4[0]), // expected_vtt_contents
  ABISELECT(112,52), // object size
  NSPAIRA(_ZTI8S19313C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19313C4),58, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19313C4),3, //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  S19313C2  : S19313C3 , virtual S19313C4 {
  long s19313c2f0;
  __tsi64 s19313c2f1;
  virtual void  v29(); // _ZN8S19313C23v29Ev
  virtual void  v30(); // _ZN8S19313C23v30Ev
  ~S19313C2(); // tgen
  S19313C2(); // tgen
};
//SIG(-1 S19313C2) C1{ BC2{ v3 v4 v5} VBC3{ VBC4{ BC5{ BC2 vd v6 v7 v8 v9 v10 Fp} BC6{ v11 v12 v13 v14 v15 v16 FC2 FL FD} vd v17 v18 v19 v20 v21 Fp} v22 v23 v24 v25 v26 v27 v28 v29 Fp Fs} v1 v2 Fl FL}


void  S19313C2 ::v29(){vfunc_called(this, "_ZN8S19313C23v29Ev");}
void  S19313C2 ::v30(){vfunc_called(this, "_ZN8S19313C23v30Ev");}
S19313C2 ::~S19313C2(){ note_dtor("S19313C2", this);} // tgen
S19313C2 ::S19313C2(){ note_ctor("S19313C2", this);} // tgen

static void Test_S19313C2()
{
  extern Class_Descriptor cd_S19313C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,18)];
    init_test(&cd_S19313C2, buf);
    S19313C2 *dp, &lv = *(dp=new (buf) S19313C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S19313C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19313C2)");
    /*is_ambiguous_... S19313C2::S19313C3 */ AMB_check_base_class_offset(lv, (S19313C3*), 0, "S19313C2");
    check_base_class_offset(lv, (S19313C3*)(S19313C6*)(S19313C5*), ABISELECT(48,28), "S19313C2");
    check_base_class_offset(lv, (S19313C6*)(S19313C5*), ABISELECT(48,28), "S19313C2");
    check_base_class_offset(lv, (S19313C7*)(S19313C5*), ABISELECT(64,36), "S19313C2");
    check_base_class_offset(lv, (S19313C5*)(S19313C4*), ABISELECT(48,28), "S19313C2");
    check_base_class_offset(lv, (S19313C4*), ABISELECT(24,16), "S19313C2");
    check_field_offset(lv, s19313c2f0, ABISELECT(8,4), "S19313C2.s19313c2f0");
    check_field_offset(lv, s19313c2f1, ABISELECT(16,8), "S19313C2.s19313c2f1");
    test_class_info(&lv, &cd_S19313C2);
    dp->~S19313C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19313C2(Test_S19313C2, "S19313C2", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S19313C2C1Ev();
extern void _ZN8S19313C2D1Ev();
Name_Map name_map_S19313C2[] = {
  NSPAIR(_ZN8S19313C2C1Ev),
  NSPAIR(_ZN8S19313C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19313C3;
extern VTBL_ENTRY _ZTI8S19313C3[];
extern  VTBL_ENTRY _ZTV8S19313C3[];
extern Class_Descriptor cd_S19313C3;
extern VTBL_ENTRY _ZTI8S19313C3[];
extern  VTBL_ENTRY _ZTV8S19313C3[];
extern Class_Descriptor cd_S19313C6;
extern VTBL_ENTRY _ZTI8S19313C6[];
extern  VTBL_ENTRY _ZTV8S19313C6[];
extern Class_Descriptor cd_S19313C7;
extern VTBL_ENTRY _ZTI8S19313C7[];
extern  VTBL_ENTRY _ZTV8S19313C7[];
extern Class_Descriptor cd_S19313C5;
extern VTBL_ENTRY _ZTI8S19313C5[];
extern  VTBL_ENTRY _ZTV8S19313C5[];
extern Class_Descriptor cd_S19313C4;
extern VTBL_ENTRY _ZTI8S19313C4[];
extern  VTBL_ENTRY _ZTV8S19313C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19313C4[];
static Base_Class bases_S19313C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19313C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19313C3,    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_S19313C6,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19313C7,    ABISELECT(64,36), //bcp->offset
    70, //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
    4, //immediately_derived
  0, 0},
  {&cd_S19313C5,    ABISELECT(48,28), //bcp->offset
    33, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19313C4,    ABISELECT(24,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19313C2[];
extern void _ZN8S19313C32v2Ev();
extern void _ZN8S19313C32v3Ev();
extern void _ZN8S19313C32v4Ev();
extern void _ZN8S19313C23v29Ev();
extern void _ZN8S19313C23v30Ev();
extern void _ZN8S19313C2D1Ev();
extern void _ZN8S19313C2D0Ev();
extern void _ZN8S19313C43v21Ev();
extern void _ZN8S19313C43v22Ev();
extern void _ZN8S19313C43v23Ev();
extern void _ZN8S19313C43v24Ev();
extern void _ZN8S19313C43v25Ev();
extern void _ZN8S19313C43v26Ev();
extern void _ZN8S19313C43v27Ev();
extern void _ZN8S19313C43v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19313C2D1Ev,_ZTv0_n48_N8S19313C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19313C2D1Ev,_ZThn16_N8S19313C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19313C2D0Ev,_ZTv0_n48_N8S19313C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S19313C2D0Ev,_ZThn16_N8S19313C2D0Ev)() __attribute__((weak));
extern void _ZN8S19313C32v2Ev();
extern void _ZN8S19313C32v3Ev();
extern void _ZN8S19313C32v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S19313C2D1Ev,_ZTv0_n24_N8S19313C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S19313C2D1Ev,_ZThn28_N8S19313C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19313C2D0Ev,_ZTv0_n24_N8S19313C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S19313C2D0Ev,_ZThn28_N8S19313C2D0Ev)() __attribute__((weak));
extern void _ZN8S19313C62v5Ev();
extern void _ZN8S19313C62v6Ev();
extern void _ZN8S19313C62v7Ev();
extern void _ZN8S19313C62v8Ev();
extern void _ZN8S19313C62v9Ev();
extern void _ZN8S19313C53v16Ev();
extern void _ZN8S19313C53v17Ev();
extern void _ZN8S19313C53v18Ev();
extern void _ZN8S19313C53v19Ev();
extern void _ZN8S19313C53v20Ev();
extern void _ZN8S19313C73v10Ev();
extern void _ZN8S19313C73v11Ev();
extern void _ZN8S19313C73v12Ev();
extern void _ZN8S19313C73v13Ev();
extern void _ZN8S19313C73v14Ev();
extern void _ZN8S19313C73v15Ev();
static  VTBL_ENTRY vtc_S19313C2[] = {
  ABISELECT(48,28),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19313C2[0]),
  (VTBL_ENTRY)&_ZN8S19313C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19313C23v29Ev,
  (VTBL_ENTRY)&_ZN8S19313C23v30Ev,
  (VTBL_ENTRY)&_ZN8S19313C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19313C2D0Ev,
  ABISELECT(-24,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19313C2[0]),
  (VTBL_ENTRY)&_ZN8S19313C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v26Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v27Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19313C2D1Ev,_ZTv0_n48_N8S19313C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19313C2D0Ev,_ZTv0_n48_N8S19313C2D0Ev),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19313C2[0]),
  (VTBL_ENTRY)&_ZN8S19313C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19313C2D1Ev,_ZTv0_n24_N8S19313C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19313C2D0Ev,_ZTv0_n24_N8S19313C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19313C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v20Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19313C2[0]),
  (VTBL_ENTRY)&_ZN8S19313C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v15Ev,
};
extern VTBL_ENTRY _ZTV8S19313C2[];
extern void _ZN8S19313C43v21Ev();
extern void _ZN8S19313C43v22Ev();
extern void _ZN8S19313C43v23Ev();
extern void _ZN8S19313C43v24Ev();
extern void _ZN8S19313C43v25Ev();
extern void _ZN8S19313C43v26Ev();
extern void _ZN8S19313C43v27Ev();
extern void _ZN8S19313C43v28Ev();
extern void _ZN8S19313C4D1Ev();
extern void _ZN8S19313C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19313C4__8S19313C2[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19313C4[0]),
  (VTBL_ENTRY)&_ZN8S19313C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v26Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v27Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v28Ev,
  (VTBL_ENTRY)&_ZN8S19313C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19313C4D0Ev,
};
extern void _ZN8S19313C32v2Ev();
extern void _ZN8S19313C32v3Ev();
extern void _ZN8S19313C32v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S19313C4D1Ev,_ZTv0_n24_N8S19313C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19313C4D1Ev,_ZThn12_N8S19313C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19313C4D0Ev,_ZTv0_n24_N8S19313C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S19313C4D0Ev,_ZThn12_N8S19313C4D0Ev)() __attribute__((weak));
extern void _ZN8S19313C62v5Ev();
extern void _ZN8S19313C62v6Ev();
extern void _ZN8S19313C62v7Ev();
extern void _ZN8S19313C62v8Ev();
extern void _ZN8S19313C62v9Ev();
extern void _ZN8S19313C53v16Ev();
extern void _ZN8S19313C53v17Ev();
extern void _ZN8S19313C53v18Ev();
extern void _ZN8S19313C53v19Ev();
extern void _ZN8S19313C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S19313C5__8S19313C4__8S19313C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19313C4[0]),
  (VTBL_ENTRY)&_ZN8S19313C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19313C4D1Ev,_ZTv0_n24_N8S19313C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19313C4D0Ev,_ZTv0_n24_N8S19313C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19313C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v20Ev,
};
extern void _ZN8S19313C73v10Ev();
extern void _ZN8S19313C73v11Ev();
extern void _ZN8S19313C73v12Ev();
extern void _ZN8S19313C73v13Ev();
extern void _ZN8S19313C73v14Ev();
extern void _ZN8S19313C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19313C78S19313C5__8S19313C4__8S19313C2[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19313C4[0]),
  (VTBL_ENTRY)&_ZN8S19313C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v15Ev,
};
static  VTT_ENTRY vtt_S19313C2[] = {
  {&(_ZTV8S19313C2[4]),  4,78},
  {&(_ZTV8S19313C2[23]),  23,78},
  {&(_ZTV8S19313C2[55]),  55,78},
  {&(_ZTV8S19313C2[72]),  72,78},
  {&(_tg__ZTV8S19313C4__8S19313C2[3]),  3,13},
  {&(_tg__ZTV8S19313C5__8S19313C4__8S19313C2[22]),  22,37},
  {&(_tg__ZTV8S19313C78S19313C5__8S19313C4__8S19313C2[2]),  2,8},
};
extern VTBL_ENTRY _ZTI8S19313C2[];
extern  VTBL_ENTRY _ZTV8S19313C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19313C2[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19313C4D0Ev,_ZTv0_n24_N8S19313C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19313C4D0Ev,_ZThn12_N8S19313C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19313C4D1Ev,_ZTv0_n24_N8S19313C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19313C4D1Ev,_ZThn12_N8S19313C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19313C2D0Ev,_ZTv0_n24_N8S19313C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19313C2D0Ev,_ZThn28_N8S19313C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19313C2D1Ev,_ZTv0_n24_N8S19313C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19313C2D1Ev,_ZThn28_N8S19313C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19313C2D0Ev,_ZTv0_n48_N8S19313C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19313C2D0Ev,_ZThn16_N8S19313C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19313C2D1Ev,_ZTv0_n48_N8S19313C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19313C2D1Ev,_ZThn16_N8S19313C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19313C2 = {  "S19313C2", // class name
  bases_S19313C2, 6,
  &(vtc_S19313C2[0]), // expected_vtbl_contents
  &(vtt_S19313C2[0]), // expected_vtt_contents
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S19313C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19313C2),78, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19313C2),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19313C8  {
  virtual void  v31(); // _ZN8S19313C83v31Ev
  ~S19313C8(); // tgen
  S19313C8(); // tgen
};
//SIG(-1 S19313C8) C1{ v1}


void  S19313C8 ::v31(){vfunc_called(this, "_ZN8S19313C83v31Ev");}
S19313C8 ::~S19313C8(){ note_dtor("S19313C8", this);} // tgen
S19313C8 ::S19313C8(){ note_ctor("S19313C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19313C8C1Ev();
extern void _ZN8S19313C8D1Ev();
Name_Map name_map_S19313C8[] = {
  NSPAIR(_ZN8S19313C8C1Ev),
  NSPAIR(_ZN8S19313C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19313C8[];
extern void _ZN8S19313C83v31Ev();
static  VTBL_ENTRY vtc_S19313C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19313C8[0]),
  (VTBL_ENTRY)&_ZN8S19313C83v31Ev,
};
extern VTBL_ENTRY _ZTI8S19313C8[];
extern  VTBL_ENTRY _ZTV8S19313C8[];
Class_Descriptor cd_S19313C8 = {  "S19313C8", // class name
  0,0,//no base classes
  &(vtc_S19313C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19313C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19313C8),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  S19313C1  : virtual S19313C2 , S19313C8 {
  virtual void  v1(); // _ZN8S19313C12v1Ev
  ~S19313C1(); // tgen
  S19313C1(); // tgen
};
//SIG(1 S19313C1) C1{ VBC2{ BC3{ v2 v3 v4} VBC4{ VBC5{ BC6{ BC3 vd v5 v6 v7 v8 v9 Fp} BC7{ v10 v11 v12 v13 v14 v15 FC3 FL FD} vd v16 v17 v18 v19 v20 Fp} v21 v22 v23 v24 v25 v26 v27 v28 Fp Fs} v29 v30 Fl FL} BC8{ v31} v1}


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

static void Test_S19313C1()
{
  extern Class_Descriptor cd_S19313C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,19)];
    init_test(&cd_S19313C1, buf);
    S19313C1 *dp, &lv = *(dp=new (buf) S19313C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S19313C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19313C1)");
    /*is_ambiguous_... S19313C2::S19313C3 */ AMB_check_base_class_offset(lv, (S19313C3*)(S19313C2*), ABISELECT(8,4), "S19313C1");
    check_base_class_offset(lv, (S19313C3*)(S19313C6*)(S19313C5*), ABISELECT(64,32), "S19313C1");
    check_base_class_offset(lv, (S19313C6*)(S19313C5*), ABISELECT(64,32), "S19313C1");
    check_base_class_offset(lv, (S19313C7*)(S19313C5*), ABISELECT(80,40), "S19313C1");
    check_base_class_offset(lv, (S19313C5*)(S19313C4*), ABISELECT(64,32), "S19313C1");
    check_base_class_offset(lv, (S19313C4*)(S19313C2*), ABISELECT(32,20), "S19313C1");
    check_base_class_offset(lv, (S19313C2*), ABISELECT(8,4), "S19313C1");
    check_base_class_offset(lv, (S19313C8*), 0, "S19313C1");
    test_class_info(&lv, &cd_S19313C1);
    dp->~S19313C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19313C1(Test_S19313C1, "S19313C1", ABISELECT(144,72));

#else // __cplusplus

extern void _ZN8S19313C1C1Ev();
extern void _ZN8S19313C1D1Ev();
Name_Map name_map_S19313C1[] = {
  NSPAIR(_ZN8S19313C1C1Ev),
  NSPAIR(_ZN8S19313C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19313C3;
extern VTBL_ENTRY _ZTI8S19313C3[];
extern  VTBL_ENTRY _ZTV8S19313C3[];
extern Class_Descriptor cd_S19313C3;
extern VTBL_ENTRY _ZTI8S19313C3[];
extern  VTBL_ENTRY _ZTV8S19313C3[];
extern Class_Descriptor cd_S19313C6;
extern VTBL_ENTRY _ZTI8S19313C6[];
extern  VTBL_ENTRY _ZTV8S19313C6[];
extern Class_Descriptor cd_S19313C7;
extern VTBL_ENTRY _ZTI8S19313C7[];
extern  VTBL_ENTRY _ZTV8S19313C7[];
extern Class_Descriptor cd_S19313C5;
extern VTBL_ENTRY _ZTI8S19313C5[];
extern  VTBL_ENTRY _ZTV8S19313C5[];
extern Class_Descriptor cd_S19313C4;
extern VTBL_ENTRY _ZTI8S19313C4[];
extern  VTBL_ENTRY _ZTV8S19313C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19313C4[];
extern Class_Descriptor cd_S19313C2;
extern VTBL_ENTRY _ZTI8S19313C2[];
extern  VTBL_ENTRY _ZTV8S19313C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19313C2[];
extern Class_Descriptor cd_S19313C8;
extern VTBL_ENTRY _ZTI8S19313C8[];
extern  VTBL_ENTRY _ZTV8S19313C8[];
static Base_Class bases_S19313C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19313C3,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19313C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19313C6,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19313C7,    ABISELECT(80,40), //bcp->offset
    85, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19313C5,    ABISELECT(64,32), //bcp->offset
    48, //bcp->virtual_function_table_offset
    22, //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
    5, //immediately_derived
  0, 1},
  {&cd_S19313C4,    ABISELECT(32,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19313C2,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19313C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19313C1[];
extern void _ZN8S19313C83v31Ev();
extern void _ZN8S19313C12v1Ev();
extern void _ZN8S19313C1D1Ev();
extern void _ZN8S19313C1D0Ev();
extern void _ZN8S19313C32v2Ev();
extern void _ZN8S19313C32v3Ev();
extern void _ZN8S19313C32v4Ev();
extern void _ZN8S19313C23v29Ev();
extern void _ZN8S19313C23v30Ev();
extern void ABISELECT(_ZTv0_n80_N8S19313C1D1Ev,_ZTv0_n40_N8S19313C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19313C1D1Ev,_ZThn4_N8S19313C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19313C1D0Ev,_ZTv0_n40_N8S19313C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S19313C1D0Ev,_ZThn4_N8S19313C1D0Ev)() __attribute__((weak));
extern void _ZN8S19313C43v21Ev();
extern void _ZN8S19313C43v22Ev();
extern void _ZN8S19313C43v23Ev();
extern void _ZN8S19313C43v24Ev();
extern void _ZN8S19313C43v25Ev();
extern void _ZN8S19313C43v26Ev();
extern void _ZN8S19313C43v27Ev();
extern void _ZN8S19313C43v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19313C1D1Ev,_ZTv0_n48_N8S19313C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19313C1D1Ev,_ZThn20_N8S19313C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19313C1D0Ev,_ZTv0_n48_N8S19313C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19313C1D0Ev,_ZThn20_N8S19313C1D0Ev)() __attribute__((weak));
extern void _ZN8S19313C32v2Ev();
extern void _ZN8S19313C32v3Ev();
extern void _ZN8S19313C32v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S19313C1D1Ev,_ZTv0_n24_N8S19313C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S19313C1D1Ev,_ZThn32_N8S19313C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19313C1D0Ev,_ZTv0_n24_N8S19313C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S19313C1D0Ev,_ZThn32_N8S19313C1D0Ev)() __attribute__((weak));
extern void _ZN8S19313C62v5Ev();
extern void _ZN8S19313C62v6Ev();
extern void _ZN8S19313C62v7Ev();
extern void _ZN8S19313C62v8Ev();
extern void _ZN8S19313C62v9Ev();
extern void _ZN8S19313C53v16Ev();
extern void _ZN8S19313C53v17Ev();
extern void _ZN8S19313C53v18Ev();
extern void _ZN8S19313C53v19Ev();
extern void _ZN8S19313C53v20Ev();
extern void _ZN8S19313C73v10Ev();
extern void _ZN8S19313C73v11Ev();
extern void _ZN8S19313C73v12Ev();
extern void _ZN8S19313C73v13Ev();
extern void _ZN8S19313C73v14Ev();
extern void _ZN8S19313C73v15Ev();
static  VTBL_ENTRY vtc_S19313C1[] = {
  ABISELECT(64,32),
  ABISELECT(32,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19313C1[0]),
  (VTBL_ENTRY)&_ZN8S19313C83v31Ev,
  (VTBL_ENTRY)&_ZN8S19313C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19313C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19313C1D0Ev,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  ABISELECT(24,16),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19313C1[0]),
  (VTBL_ENTRY)&_ZN8S19313C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19313C23v29Ev,
  (VTBL_ENTRY)&_ZN8S19313C23v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19313C1D1Ev,_ZTv0_n40_N8S19313C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19313C1D0Ev,_ZTv0_n40_N8S19313C1D0Ev),
  ABISELECT(-32,-20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19313C1[0]),
  (VTBL_ENTRY)&_ZN8S19313C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v26Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v27Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19313C1D1Ev,_ZTv0_n48_N8S19313C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19313C1D0Ev,_ZTv0_n48_N8S19313C1D0Ev),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19313C1[0]),
  (VTBL_ENTRY)&_ZN8S19313C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19313C1D1Ev,_ZTv0_n24_N8S19313C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19313C1D0Ev,_ZTv0_n24_N8S19313C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19313C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v20Ev,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19313C1[0]),
  (VTBL_ENTRY)&_ZN8S19313C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v15Ev,
};
extern VTBL_ENTRY _ZTV8S19313C1[];
extern void _ZN8S19313C32v2Ev();
extern void _ZN8S19313C32v3Ev();
extern void _ZN8S19313C32v4Ev();
extern void _ZN8S19313C23v29Ev();
extern void _ZN8S19313C23v30Ev();
extern void _ZN8S19313C2D1Ev();
extern void _ZN8S19313C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19313C2__8S19313C1[] = {
  ABISELECT(56,28),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19313C2[0]),
  (VTBL_ENTRY)&_ZN8S19313C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19313C23v29Ev,
  (VTBL_ENTRY)&_ZN8S19313C23v30Ev,
  (VTBL_ENTRY)&_ZN8S19313C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19313C2D0Ev,
};
extern void _ZN8S19313C43v21Ev();
extern void _ZN8S19313C43v22Ev();
extern void _ZN8S19313C43v23Ev();
extern void _ZN8S19313C43v24Ev();
extern void _ZN8S19313C43v25Ev();
extern void _ZN8S19313C43v26Ev();
extern void _ZN8S19313C43v27Ev();
extern void _ZN8S19313C43v28Ev();
extern void ABISELECT(_ZTv0_n96_N8S19313C2D1Ev,_ZTv0_n48_N8S19313C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19313C2D1Ev,_ZThn16_N8S19313C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19313C2D0Ev,_ZTv0_n48_N8S19313C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S19313C2D0Ev,_ZThn16_N8S19313C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19313C4__8S19313C2__8S19313C1[] = {
  ABISELECT(-24,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19313C2[0]),
  (VTBL_ENTRY)&_ZN8S19313C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v26Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v27Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19313C2D1Ev,_ZTv0_n48_N8S19313C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19313C2D0Ev,_ZTv0_n48_N8S19313C2D0Ev),
};
extern void _ZN8S19313C32v2Ev();
extern void _ZN8S19313C32v3Ev();
extern void _ZN8S19313C32v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S19313C2D1Ev,_ZTv0_n24_N8S19313C2D1Ev)();
extern void ABISELECT(_ZThn56_N8S19313C2D1Ev,_ZThn28_N8S19313C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19313C2D0Ev,_ZTv0_n24_N8S19313C2D0Ev)();
extern void ABISELECT(_ZThn56_N8S19313C2D0Ev,_ZThn28_N8S19313C2D0Ev)() __attribute__((weak));
extern void _ZN8S19313C62v5Ev();
extern void _ZN8S19313C62v6Ev();
extern void _ZN8S19313C62v7Ev();
extern void _ZN8S19313C62v8Ev();
extern void _ZN8S19313C62v9Ev();
extern void _ZN8S19313C53v16Ev();
extern void _ZN8S19313C53v17Ev();
extern void _ZN8S19313C53v18Ev();
extern void _ZN8S19313C53v19Ev();
extern void _ZN8S19313C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S19313C5__8S19313C2__8S19313C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19313C2[0]),
  (VTBL_ENTRY)&_ZN8S19313C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19313C2D1Ev,_ZTv0_n24_N8S19313C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19313C2D0Ev,_ZTv0_n24_N8S19313C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19313C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v20Ev,
};
extern void _ZN8S19313C73v10Ev();
extern void _ZN8S19313C73v11Ev();
extern void _ZN8S19313C73v12Ev();
extern void _ZN8S19313C73v13Ev();
extern void _ZN8S19313C73v14Ev();
extern void _ZN8S19313C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19313C78S19313C5__8S19313C2__8S19313C1[] = {
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19313C2[0]),
  (VTBL_ENTRY)&_ZN8S19313C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v15Ev,
};
extern void _ZN8S19313C43v21Ev();
extern void _ZN8S19313C43v22Ev();
extern void _ZN8S19313C43v23Ev();
extern void _ZN8S19313C43v24Ev();
extern void _ZN8S19313C43v25Ev();
extern void _ZN8S19313C43v26Ev();
extern void _ZN8S19313C43v27Ev();
extern void _ZN8S19313C43v28Ev();
extern void _ZN8S19313C4D1Ev();
extern void _ZN8S19313C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19313C4__8S19313C1[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19313C4[0]),
  (VTBL_ENTRY)&_ZN8S19313C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v26Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v27Ev,
  (VTBL_ENTRY)&_ZN8S19313C43v28Ev,
  (VTBL_ENTRY)&_ZN8S19313C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19313C4D0Ev,
};
extern void _ZN8S19313C32v2Ev();
extern void _ZN8S19313C32v3Ev();
extern void _ZN8S19313C32v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S19313C4D1Ev,_ZTv0_n24_N8S19313C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19313C4D1Ev,_ZThn12_N8S19313C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19313C4D0Ev,_ZTv0_n24_N8S19313C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S19313C4D0Ev,_ZThn12_N8S19313C4D0Ev)() __attribute__((weak));
extern void _ZN8S19313C62v5Ev();
extern void _ZN8S19313C62v6Ev();
extern void _ZN8S19313C62v7Ev();
extern void _ZN8S19313C62v8Ev();
extern void _ZN8S19313C62v9Ev();
extern void _ZN8S19313C53v16Ev();
extern void _ZN8S19313C53v17Ev();
extern void _ZN8S19313C53v18Ev();
extern void _ZN8S19313C53v19Ev();
extern void _ZN8S19313C53v20Ev();
static  VTBL_ENTRY _tg__ZTV8S19313C5__8S19313C4__8S19313C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S19313C4[0]),
  (VTBL_ENTRY)&_ZN8S19313C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19313C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19313C4D1Ev,_ZTv0_n24_N8S19313C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19313C4D0Ev,_ZTv0_n24_N8S19313C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19313C62v5Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19313C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19313C53v20Ev,
};
extern void _ZN8S19313C73v10Ev();
extern void _ZN8S19313C73v11Ev();
extern void _ZN8S19313C73v12Ev();
extern void _ZN8S19313C73v13Ev();
extern void _ZN8S19313C73v14Ev();
extern void _ZN8S19313C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19313C78S19313C5__8S19313C4__8S19313C1[] = {
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S19313C4[0]),
  (VTBL_ENTRY)&_ZN8S19313C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19313C73v15Ev,
};
static  VTT_ENTRY vtt_S19313C1[] = {
  {&(_ZTV8S19313C1[5]),  5,93},
  {&(_ZTV8S19313C1[19]),  19,93},
  {&(_ZTV8S19313C1[38]),  38,93},
  {&(_ZTV8S19313C1[70]),  70,93},
  {&(_ZTV8S19313C1[87]),  87,93},
  {&(_tg__ZTV8S19313C2__8S19313C1[4]),  4,11},
  {&(_tg__ZTV8S19313C4__8S19313C2__8S19313C1[12]),  12,22},
  {&(_tg__ZTV8S19313C5__8S19313C2__8S19313C1[22]),  22,37},
  {&(_tg__ZTV8S19313C78S19313C5__8S19313C2__8S19313C1[2]),  2,8},
  {&(_tg__ZTV8S19313C4__8S19313C1[3]),  3,13},
  {&(_tg__ZTV8S19313C5__8S19313C4__8S19313C1[22]),  22,37},
  {&(_tg__ZTV8S19313C78S19313C5__8S19313C4__8S19313C1[2]),  2,8},
};
extern VTBL_ENTRY _ZTI8S19313C1[];
extern  VTBL_ENTRY _ZTV8S19313C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19313C1[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19313C4D0Ev,_ZTv0_n24_N8S19313C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19313C4D0Ev,_ZThn12_N8S19313C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19313C4D1Ev,_ZTv0_n24_N8S19313C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19313C4D1Ev,_ZThn12_N8S19313C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19313C2D0Ev,_ZTv0_n24_N8S19313C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19313C2D0Ev,_ZThn28_N8S19313C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19313C2D1Ev,_ZTv0_n24_N8S19313C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19313C2D1Ev,_ZThn28_N8S19313C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19313C2D0Ev,_ZTv0_n48_N8S19313C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19313C2D0Ev,_ZThn16_N8S19313C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19313C2D1Ev,_ZTv0_n48_N8S19313C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19313C2D1Ev,_ZThn16_N8S19313C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19313C1D0Ev,_ZTv0_n24_N8S19313C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19313C1D0Ev,_ZThn32_N8S19313C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19313C1D1Ev,_ZTv0_n24_N8S19313C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19313C1D1Ev,_ZThn32_N8S19313C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19313C1D0Ev,_ZTv0_n48_N8S19313C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19313C1D0Ev,_ZThn20_N8S19313C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19313C1D1Ev,_ZTv0_n48_N8S19313C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19313C1D1Ev,_ZThn20_N8S19313C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19313C1D0Ev,_ZTv0_n40_N8S19313C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19313C1D0Ev,_ZThn4_N8S19313C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19313C1D1Ev,_ZTv0_n40_N8S19313C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19313C1D1Ev,_ZThn4_N8S19313C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19313C1 = {  "S19313C1", // class name
  bases_S19313C1, 8,
  &(vtc_S19313C1[0]), // expected_vtbl_contents
  &(vtt_S19313C1[0]), // expected_vtt_contents
  ABISELECT(144,72), // object size
  NSPAIRA(_ZTI8S19313C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19313C1),93, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19313C1),12, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3959C2  : S1766C4_nt {
  int s3959c2f0;
  void *s3959c2f1[2];
  int s3959c2f2;
  virtual  ~S3959C2(); // _ZN7S3959C2D1Ev
  virtual void  v12(); // _ZN7S3959C23v12Ev
  virtual void  v13(); // _ZN7S3959C23v13Ev
  virtual void  v14(); // _ZN7S3959C23v14Ev
  virtual void  v15(); // _ZN7S3959C23v15Ev
  virtual void  v16(); // _ZN7S3959C23v16Ev
  virtual void  v17(); // _ZN7S3959C23v17Ev
  virtual void  v18(); // _ZN7S3959C23v18Ev
  virtual void  v19(); // _ZN7S3959C23v19Ev
  virtual void  v20(); // _ZN7S3959C23v20Ev
  virtual void  v21(); // _ZN7S3959C23v21Ev
  virtual void  v22(); // _ZN7S3959C23v22Ev
  S3959C2(); // tgen
};
//SIG(-1 S3959C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S3959C2 ::~S3959C2(){ note_dtor("S3959C2", this);}
void  S3959C2 ::v12(){vfunc_called(this, "_ZN7S3959C23v12Ev");}
void  S3959C2 ::v13(){vfunc_called(this, "_ZN7S3959C23v13Ev");}
void  S3959C2 ::v14(){vfunc_called(this, "_ZN7S3959C23v14Ev");}
void  S3959C2 ::v15(){vfunc_called(this, "_ZN7S3959C23v15Ev");}
void  S3959C2 ::v16(){vfunc_called(this, "_ZN7S3959C23v16Ev");}
void  S3959C2 ::v17(){vfunc_called(this, "_ZN7S3959C23v17Ev");}
void  S3959C2 ::v18(){vfunc_called(this, "_ZN7S3959C23v18Ev");}
void  S3959C2 ::v19(){vfunc_called(this, "_ZN7S3959C23v19Ev");}
void  S3959C2 ::v20(){vfunc_called(this, "_ZN7S3959C23v20Ev");}
void  S3959C2 ::v21(){vfunc_called(this, "_ZN7S3959C23v21Ev");}
void  S3959C2 ::v22(){vfunc_called(this, "_ZN7S3959C23v22Ev");}
S3959C2 ::S3959C2(){ note_ctor("S3959C2", this);} // tgen

static void Test_S3959C2()
{
  extern Class_Descriptor cd_S3959C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3959C2, buf);
    S3959C2 *dp, &lv = *(dp=new (buf) S3959C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3959C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3959C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3959C2");
    check_field_offset(lv, s3959c2f0, ABISELECT(16,12), "S3959C2.s3959c2f0");
    check_field_offset(lv, s3959c2f1, ABISELECT(24,16), "S3959C2.s3959c2f1");
    check_field_offset(lv, s3959c2f2, ABISELECT(40,24), "S3959C2.s3959c2f2");
    test_class_info(&lv, &cd_S3959C2);
    dp->~S3959C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3959C2(Test_S3959C2, "S3959C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3959C2C1Ev();
extern void _ZN7S3959C2D1Ev();
Name_Map name_map_S3959C2[] = {
  NSPAIR(_ZN7S3959C2C1Ev),
  NSPAIR(_ZN7S3959C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3959C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3959C2[];
extern void _ZN7S3959C2D1Ev();
extern void _ZN7S3959C2D0Ev();
extern void _ZN7S3959C23v12Ev();
extern void _ZN7S3959C23v13Ev();
extern void _ZN7S3959C23v14Ev();
extern void _ZN7S3959C23v15Ev();
extern void _ZN7S3959C23v16Ev();
extern void _ZN7S3959C23v17Ev();
extern void _ZN7S3959C23v18Ev();
extern void _ZN7S3959C23v19Ev();
extern void _ZN7S3959C23v20Ev();
extern void _ZN7S3959C23v21Ev();
extern void _ZN7S3959C23v22Ev();
static  VTBL_ENTRY vtc_S3959C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3959C2[0]),
  (VTBL_ENTRY)&_ZN7S3959C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3959C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v22Ev,
};
extern VTBL_ENTRY _ZTI7S3959C2[];
extern  VTBL_ENTRY _ZTV7S3959C2[];
Class_Descriptor cd_S3959C2 = {  "S3959C2", // class name
  bases_S3959C2, 1,
  &(vtc_S3959C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3959C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3959C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3959C4  {
  virtual  ~S3959C4(); // _ZN7S3959C4D1Ev
  virtual void  v23(); // _ZN7S3959C43v23Ev
  virtual void  v24(); // _ZN7S3959C43v24Ev
  S3959C4(); // tgen
};
//SIG(-1 S3959C4) C1{ vd v1 v2}


 S3959C4 ::~S3959C4(){ note_dtor("S3959C4", this);}
void  S3959C4 ::v23(){vfunc_called(this, "_ZN7S3959C43v23Ev");}
void  S3959C4 ::v24(){vfunc_called(this, "_ZN7S3959C43v24Ev");}
S3959C4 ::S3959C4(){ note_ctor("S3959C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3959C4C1Ev();
extern void _ZN7S3959C4D1Ev();
Name_Map name_map_S3959C4[] = {
  NSPAIR(_ZN7S3959C4C1Ev),
  NSPAIR(_ZN7S3959C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3959C4[];
extern void _ZN7S3959C4D1Ev();
extern void _ZN7S3959C4D0Ev();
extern void _ZN7S3959C43v23Ev();
extern void _ZN7S3959C43v24Ev();
static  VTBL_ENTRY vtc_S3959C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3959C4[0]),
  (VTBL_ENTRY)&_ZN7S3959C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3959C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3959C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3959C43v24Ev,
};
extern VTBL_ENTRY _ZTI7S3959C4[];
extern  VTBL_ENTRY _ZTV7S3959C4[];
Class_Descriptor cd_S3959C4 = {  "S3959C4", // class name
  0,0,//no base classes
  &(vtc_S3959C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3959C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3959C4),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  S3959C5_nt  : S1766C4_nt {
  void *s3959c5f0;
  int s3959c5f1[2];
  virtual  ~S3959C5_nt(); // _ZN10S3959C5_ntD1Ev
  S3959C5_nt(); // tgen
};
//SIG(-1 S3959C5_nt) C1{ BC2{ vd m FL} vd Fp Fi[2]}


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

//skip512 S3959C5_nt

#else // __cplusplus

extern void _ZN10S3959C5_ntC1Ev();
extern void _ZN10S3959C5_ntD1Ev();
Name_Map name_map_S3959C5_nt[] = {
  NSPAIR(_ZN10S3959C5_ntC1Ev),
  NSPAIR(_ZN10S3959C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3959C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI10S3959C5_nt[];
extern void _ZN10S3959C5_ntD1Ev();
extern void _ZN10S3959C5_ntD0Ev();
static  VTBL_ENTRY vtc_S3959C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3959C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S3959C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3959C5_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3959C5_nt[];
VTBL_ENTRY *P__ZTI10S3959C5_nt = _ZTI10S3959C5_nt; 
extern  VTBL_ENTRY _ZTV10S3959C5_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3959C1  : S3959C2 , S3959C4 {
  void *s3959c1f0[3];
  char s3959c1f1;
  void *s3959c1f2;
  int s3959c1f3[4];
  void *s3959c1f4[2];
  int s3959c1f5;
  ::S3959C5_nt s3959c1f6;
  void *s3959c1f7;
  int s3959c1f8[2];
  virtual  ~S3959C1(); // _ZN7S3959C1D1Ev
  virtual void  v1(); // _ZN7S3959C12v1Ev
  virtual void  v2(); // _ZN7S3959C12v2Ev
  virtual void  v3(); // _ZN7S3959C12v3Ev
  virtual void  v4(); // _ZN7S3959C12v4Ev
  virtual void  v5(); // _ZN7S3959C12v5Ev
  virtual void  v6(); // _ZN7S3959C12v6Ev
  virtual void  v7(); // _ZN7S3959C12v7Ev
  virtual void  v8(); // _ZN7S3959C12v8Ev
  virtual void  v9(); // _ZN7S3959C12v9Ev
  virtual void  v10(); // _ZN7S3959C13v10Ev
  virtual void  v11(); // _ZN7S3959C13v11Ev
  S3959C1(); // tgen
};
//SIG(1 S3959C1) C1{ BC2{ BC3{ vd m FL} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi Fp[2] Fi} BC4{ vd v23 v24} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] Fc Fp Fi[4] Fp[2] Fi FC5{ BC3 vd Fp Fi[2]} Fp Fi[2]}


 S3959C1 ::~S3959C1(){ note_dtor("S3959C1", this);}
void  S3959C1 ::v1(){vfunc_called(this, "_ZN7S3959C12v1Ev");}
void  S3959C1 ::v2(){vfunc_called(this, "_ZN7S3959C12v2Ev");}
void  S3959C1 ::v3(){vfunc_called(this, "_ZN7S3959C12v3Ev");}
void  S3959C1 ::v4(){vfunc_called(this, "_ZN7S3959C12v4Ev");}
void  S3959C1 ::v5(){vfunc_called(this, "_ZN7S3959C12v5Ev");}
void  S3959C1 ::v6(){vfunc_called(this, "_ZN7S3959C12v6Ev");}
void  S3959C1 ::v7(){vfunc_called(this, "_ZN7S3959C12v7Ev");}
void  S3959C1 ::v8(){vfunc_called(this, "_ZN7S3959C12v8Ev");}
void  S3959C1 ::v9(){vfunc_called(this, "_ZN7S3959C12v9Ev");}
void  S3959C1 ::v10(){vfunc_called(this, "_ZN7S3959C13v10Ev");}
void  S3959C1 ::v11(){vfunc_called(this, "_ZN7S3959C13v11Ev");}
S3959C1 ::S3959C1(){ note_ctor("S3959C1", this);} // tgen

static void Test_S3959C1()
{
  extern Class_Descriptor cd_S3959C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,30)];
    init_test(&cd_S3959C1, buf);
    S3959C1 *dp, &lv = *(dp=new (buf) S3959C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,116), "sizeof(S3959C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3959C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3959C2*), 0, "S3959C1");
    check_base_class_offset(lv, (S3959C2*), 0, "S3959C1");
    check_base_class_offset(lv, (S3959C4*), ABISELECT(48,28), "S3959C1");
    check_field_offset(lv, s3959c1f0, ABISELECT(56,32), "S3959C1.s3959c1f0");
    check_field_offset(lv, s3959c1f1, ABISELECT(80,44), "S3959C1.s3959c1f1");
    check_field_offset(lv, s3959c1f2, ABISELECT(88,48), "S3959C1.s3959c1f2");
    check_field_offset(lv, s3959c1f3, ABISELECT(96,52), "S3959C1.s3959c1f3");
    check_field_offset(lv, s3959c1f4, ABISELECT(112,68), "S3959C1.s3959c1f4");
    check_field_offset(lv, s3959c1f5, ABISELECT(128,76), "S3959C1.s3959c1f5");
    check_field_offset(lv, s3959c1f6, ABISELECT(136,80), "S3959C1.s3959c1f6");
    check_field_offset(lv, s3959c1f7, ABISELECT(168,104), "S3959C1.s3959c1f7");
    check_field_offset(lv, s3959c1f8, ABISELECT(176,108), "S3959C1.s3959c1f8");
    test_class_info(&lv, &cd_S3959C1);
    dp->~S3959C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3959C1(Test_S3959C1, "S3959C1", ABISELECT(184,116));

#else // __cplusplus

extern void _ZN7S3959C1C1Ev();
extern void _ZN7S3959C1D1Ev();
Name_Map name_map_S3959C1[] = {
  NSPAIR(_ZN7S3959C1C1Ev),
  NSPAIR(_ZN7S3959C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3959C2;
extern VTBL_ENTRY _ZTI7S3959C2[];
extern  VTBL_ENTRY _ZTV7S3959C2[];
extern Class_Descriptor cd_S3959C4;
extern VTBL_ENTRY _ZTI7S3959C4[];
extern  VTBL_ENTRY _ZTV7S3959C4[];
static Base_Class bases_S3959C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3959C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3959C4,    ABISELECT(48,28), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3959C1[];
extern void _ZN7S3959C1D1Ev();
extern void _ZN7S3959C1D0Ev();
extern void _ZN7S3959C23v12Ev();
extern void _ZN7S3959C23v13Ev();
extern void _ZN7S3959C23v14Ev();
extern void _ZN7S3959C23v15Ev();
extern void _ZN7S3959C23v16Ev();
extern void _ZN7S3959C23v17Ev();
extern void _ZN7S3959C23v18Ev();
extern void _ZN7S3959C23v19Ev();
extern void _ZN7S3959C23v20Ev();
extern void _ZN7S3959C23v21Ev();
extern void _ZN7S3959C23v22Ev();
extern void _ZN7S3959C12v1Ev();
extern void _ZN7S3959C12v2Ev();
extern void _ZN7S3959C12v3Ev();
extern void _ZN7S3959C12v4Ev();
extern void _ZN7S3959C12v5Ev();
extern void _ZN7S3959C12v6Ev();
extern void _ZN7S3959C12v7Ev();
extern void _ZN7S3959C12v8Ev();
extern void _ZN7S3959C12v9Ev();
extern void _ZN7S3959C13v10Ev();
extern void _ZN7S3959C13v11Ev();
extern void ABISELECT(_ZThn48_N7S3959C1D1Ev,_ZThn28_N7S3959C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3959C1D0Ev,_ZThn28_N7S3959C1D0Ev)();
extern void _ZN7S3959C43v23Ev();
extern void _ZN7S3959C43v24Ev();
static  VTBL_ENTRY vtc_S3959C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3959C1[0]),
  (VTBL_ENTRY)&_ZN7S3959C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3959C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3959C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3959C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3959C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3959C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3959C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3959C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3959C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3959C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3959C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3959C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3959C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3959C13v11Ev,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3959C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3959C1D1Ev,_ZThn28_N7S3959C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3959C1D0Ev,_ZThn28_N7S3959C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3959C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3959C43v24Ev,
};
extern VTBL_ENTRY _ZTI7S3959C1[];
extern  VTBL_ENTRY _ZTV7S3959C1[];
Class_Descriptor cd_S3959C1 = {  "S3959C1", // class name
  bases_S3959C1, 3,
  &(vtc_S3959C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,116), // object size
  NSPAIRA(_ZTI7S3959C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3959C1),32, //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  S1767C3  : S1766C4_nt {
  int s1767c3f0;
  void *s1767c3f1[2];
  int s1767c3f2;
  virtual  ~S1767C3(); // _ZN7S1767C3D1Ev
  virtual void  v11(); // _ZN7S1767C33v11Ev
  virtual void  v12(); // _ZN7S1767C33v12Ev
  virtual void  v13(); // _ZN7S1767C33v13Ev
  virtual void  v14(); // _ZN7S1767C33v14Ev
  virtual void  v15(); // _ZN7S1767C33v15Ev
  virtual void  v16(); // _ZN7S1767C33v16Ev
  virtual void  v17(); // _ZN7S1767C33v17Ev
  virtual void  v18(); // _ZN7S1767C33v18Ev
  virtual void  v19(); // _ZN7S1767C33v19Ev
  virtual void  v20(); // _ZN7S1767C33v20Ev
  virtual void  v21(); // _ZN7S1767C33v21Ev
  S1767C3(); // tgen
};
//SIG(-1 S1767C3) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S1767C3 ::~S1767C3(){ note_dtor("S1767C3", this);}
void  S1767C3 ::v11(){vfunc_called(this, "_ZN7S1767C33v11Ev");}
void  S1767C3 ::v12(){vfunc_called(this, "_ZN7S1767C33v12Ev");}
void  S1767C3 ::v13(){vfunc_called(this, "_ZN7S1767C33v13Ev");}
void  S1767C3 ::v14(){vfunc_called(this, "_ZN7S1767C33v14Ev");}
void  S1767C3 ::v15(){vfunc_called(this, "_ZN7S1767C33v15Ev");}
void  S1767C3 ::v16(){vfunc_called(this, "_ZN7S1767C33v16Ev");}
void  S1767C3 ::v17(){vfunc_called(this, "_ZN7S1767C33v17Ev");}
void  S1767C3 ::v18(){vfunc_called(this, "_ZN7S1767C33v18Ev");}
void  S1767C3 ::v19(){vfunc_called(this, "_ZN7S1767C33v19Ev");}
void  S1767C3 ::v20(){vfunc_called(this, "_ZN7S1767C33v20Ev");}
void  S1767C3 ::v21(){vfunc_called(this, "_ZN7S1767C33v21Ev");}
S1767C3 ::S1767C3(){ note_ctor("S1767C3", this);} // tgen

static void Test_S1767C3()
{
  extern Class_Descriptor cd_S1767C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1767C3, buf);
    S1767C3 *dp, &lv = *(dp=new (buf) S1767C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1767C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1767C3)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S1767C3");
    check_field_offset(lv, s1767c3f0, ABISELECT(16,12), "S1767C3.s1767c3f0");
    check_field_offset(lv, s1767c3f1, ABISELECT(24,16), "S1767C3.s1767c3f1");
    check_field_offset(lv, s1767c3f2, ABISELECT(40,24), "S1767C3.s1767c3f2");
    test_class_info(&lv, &cd_S1767C3);
    dp->~S1767C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1767C3(Test_S1767C3, "S1767C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1767C3C1Ev();
extern void _ZN7S1767C3D1Ev();
Name_Map name_map_S1767C3[] = {
  NSPAIR(_ZN7S1767C3C1Ev),
  NSPAIR(_ZN7S1767C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S1767C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S1767C3[];
extern void _ZN7S1767C3D1Ev();
extern void _ZN7S1767C3D0Ev();
extern void _ZN7S1767C33v11Ev();
extern void _ZN7S1767C33v12Ev();
extern void _ZN7S1767C33v13Ev();
extern void _ZN7S1767C33v14Ev();
extern void _ZN7S1767C33v15Ev();
extern void _ZN7S1767C33v16Ev();
extern void _ZN7S1767C33v17Ev();
extern void _ZN7S1767C33v18Ev();
extern void _ZN7S1767C33v19Ev();
extern void _ZN7S1767C33v20Ev();
extern void _ZN7S1767C33v21Ev();
static  VTBL_ENTRY vtc_S1767C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1767C3[0]),
  (VTBL_ENTRY)&_ZN7S1767C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1767C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v21Ev,
};
extern VTBL_ENTRY _ZTI7S1767C3[];
extern  VTBL_ENTRY _ZTV7S1767C3[];
Class_Descriptor cd_S1767C3 = {  "S1767C3", // class name
  bases_S1767C3, 1,
  &(vtc_S1767C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1767C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1767C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1767C2  : S1767C3 {
  virtual  ~S1767C2(); // _ZN7S1767C2D1Ev
  S1767C2(); // tgen
};
//SIG(-1 S1767C2) C1{ BC2{ BC3{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi} vd}


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

static void Test_S1767C2()
{
  extern Class_Descriptor cd_S1767C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1767C2, buf);
    S1767C2 *dp, &lv = *(dp=new (buf) S1767C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1767C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1767C2)");
    check_base_class_offset(lv, (S1766C4_nt*)(S1767C3*), 0, "S1767C2");
    check_base_class_offset(lv, (S1767C3*), 0, "S1767C2");
    test_class_info(&lv, &cd_S1767C2);
    dp->~S1767C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1767C2(Test_S1767C2, "S1767C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1767C2C1Ev();
extern void _ZN7S1767C2D1Ev();
Name_Map name_map_S1767C2[] = {
  NSPAIR(_ZN7S1767C2C1Ev),
  NSPAIR(_ZN7S1767C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S1767C3;
extern VTBL_ENTRY _ZTI7S1767C3[];
extern  VTBL_ENTRY _ZTV7S1767C3[];
static Base_Class bases_S1767C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S1767C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1767C2[];
extern void _ZN7S1767C2D1Ev();
extern void _ZN7S1767C2D0Ev();
extern void _ZN7S1767C33v11Ev();
extern void _ZN7S1767C33v12Ev();
extern void _ZN7S1767C33v13Ev();
extern void _ZN7S1767C33v14Ev();
extern void _ZN7S1767C33v15Ev();
extern void _ZN7S1767C33v16Ev();
extern void _ZN7S1767C33v17Ev();
extern void _ZN7S1767C33v18Ev();
extern void _ZN7S1767C33v19Ev();
extern void _ZN7S1767C33v20Ev();
extern void _ZN7S1767C33v21Ev();
static  VTBL_ENTRY vtc_S1767C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1767C2[0]),
  (VTBL_ENTRY)&_ZN7S1767C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1767C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v21Ev,
};
extern VTBL_ENTRY _ZTI7S1767C2[];
extern  VTBL_ENTRY _ZTV7S1767C2[];
Class_Descriptor cd_S1767C2 = {  "S1767C2", // class name
  bases_S1767C2, 2,
  &(vtc_S1767C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1767C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1767C2),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  S1767C1  : S1767C2 {
  void *s1767c1f0;
  ::S3961C7_nt s1767c1f1;
  int s1767c1f2[2];
  void *s1767c1f3[5];
  __tsi64 s1767c1f4;
  int s1767c1f5;
  __tsi64 s1767c1f6;
  int s1767c1f7[4];
  void *s1767c1f8;
  int s1767c1f9[2];
  __tsi64 s1767c1f10;
  virtual  ~S1767C1(); // _ZN7S1767C1D1Ev
  virtual void  v1(); // _ZN7S1767C12v1Ev
  virtual void  v2(); // _ZN7S1767C12v2Ev
  virtual void  v3(); // _ZN7S1767C12v3Ev
  virtual void  v4(); // _ZN7S1767C12v4Ev
  virtual void  v5(); // _ZN7S1767C12v5Ev
  virtual void  v6(); // _ZN7S1767C12v6Ev
  virtual void  v7(); // _ZN7S1767C12v7Ev
  virtual void  v8(); // _ZN7S1767C12v8Ev
  virtual void  v9(); // _ZN7S1767C12v9Ev
  virtual void  v10(); // _ZN7S1767C13v10Ev
  S1767C1(); // tgen
};
//SIG(1 S1767C1) C1{ BC2{ BC3{ BC4{ vd m FL} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fi Fp[2] Fi} vd} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp FC5{ BC4 vd Fp Fi[4] Fp} Fi[2] Fp[5] FL Fi FL Fi[4] Fp Fi[2] FL}


 S1767C1 ::~S1767C1(){ note_dtor("S1767C1", this);}
void  S1767C1 ::v1(){vfunc_called(this, "_ZN7S1767C12v1Ev");}
void  S1767C1 ::v2(){vfunc_called(this, "_ZN7S1767C12v2Ev");}
void  S1767C1 ::v3(){vfunc_called(this, "_ZN7S1767C12v3Ev");}
void  S1767C1 ::v4(){vfunc_called(this, "_ZN7S1767C12v4Ev");}
void  S1767C1 ::v5(){vfunc_called(this, "_ZN7S1767C12v5Ev");}
void  S1767C1 ::v6(){vfunc_called(this, "_ZN7S1767C12v6Ev");}
void  S1767C1 ::v7(){vfunc_called(this, "_ZN7S1767C12v7Ev");}
void  S1767C1 ::v8(){vfunc_called(this, "_ZN7S1767C12v8Ev");}
void  S1767C1 ::v9(){vfunc_called(this, "_ZN7S1767C12v9Ev");}
void  S1767C1 ::v10(){vfunc_called(this, "_ZN7S1767C13v10Ev");}
S1767C1 ::S1767C1(){ note_ctor("S1767C1", this);} // tgen

static void Test_S1767C1()
{
  extern Class_Descriptor cd_S1767C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,39)];
    init_test(&cd_S1767C1, buf);
    S1767C1 *dp, &lv = *(dp=new (buf) S1767C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,152), "sizeof(S1767C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1767C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S1767C3*)(S1767C2*), 0, "S1767C1");
    check_base_class_offset(lv, (S1767C3*)(S1767C2*), 0, "S1767C1");
    check_base_class_offset(lv, (S1767C2*), 0, "S1767C1");
    check_field_offset(lv, s1767c1f0, ABISELECT(48,28), "S1767C1.s1767c1f0");
    check_field_offset(lv, s1767c1f1, ABISELECT(56,32), "S1767C1.s1767c1f1");
    check_field_offset(lv, s1767c1f2, ABISELECT(104,68), "S1767C1.s1767c1f2");
    check_field_offset(lv, s1767c1f3, ABISELECT(112,76), "S1767C1.s1767c1f3");
    check_field_offset(lv, s1767c1f4, ABISELECT(152,96), "S1767C1.s1767c1f4");
    check_field_offset(lv, s1767c1f5, ABISELECT(160,104), "S1767C1.s1767c1f5");
    check_field_offset(lv, s1767c1f6, ABISELECT(168,108), "S1767C1.s1767c1f6");
    check_field_offset(lv, s1767c1f7, ABISELECT(176,116), "S1767C1.s1767c1f7");
    check_field_offset(lv, s1767c1f8, ABISELECT(192,132), "S1767C1.s1767c1f8");
    check_field_offset(lv, s1767c1f9, ABISELECT(200,136), "S1767C1.s1767c1f9");
    check_field_offset(lv, s1767c1f10, ABISELECT(208,144), "S1767C1.s1767c1f10");
    test_class_info(&lv, &cd_S1767C1);
    dp->~S1767C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1767C1(Test_S1767C1, "S1767C1", ABISELECT(216,152));

#else // __cplusplus

extern void _ZN7S1767C1C1Ev();
extern void _ZN7S1767C1D1Ev();
Name_Map name_map_S1767C1[] = {
  NSPAIR(_ZN7S1767C1C1Ev),
  NSPAIR(_ZN7S1767C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S1767C3;
extern VTBL_ENTRY _ZTI7S1767C3[];
extern  VTBL_ENTRY _ZTV7S1767C3[];
extern Class_Descriptor cd_S1767C2;
extern VTBL_ENTRY _ZTI7S1767C2[];
extern  VTBL_ENTRY _ZTV7S1767C2[];
static Base_Class bases_S1767C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S1767C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1767C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1767C1[];
extern void _ZN7S1767C1D1Ev();
extern void _ZN7S1767C1D0Ev();
extern void _ZN7S1767C33v11Ev();
extern void _ZN7S1767C33v12Ev();
extern void _ZN7S1767C33v13Ev();
extern void _ZN7S1767C33v14Ev();
extern void _ZN7S1767C33v15Ev();
extern void _ZN7S1767C33v16Ev();
extern void _ZN7S1767C33v17Ev();
extern void _ZN7S1767C33v18Ev();
extern void _ZN7S1767C33v19Ev();
extern void _ZN7S1767C33v20Ev();
extern void _ZN7S1767C33v21Ev();
extern void _ZN7S1767C12v1Ev();
extern void _ZN7S1767C12v2Ev();
extern void _ZN7S1767C12v3Ev();
extern void _ZN7S1767C12v4Ev();
extern void _ZN7S1767C12v5Ev();
extern void _ZN7S1767C12v6Ev();
extern void _ZN7S1767C12v7Ev();
extern void _ZN7S1767C12v8Ev();
extern void _ZN7S1767C12v9Ev();
extern void _ZN7S1767C13v10Ev();
static  VTBL_ENTRY vtc_S1767C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1767C1[0]),
  (VTBL_ENTRY)&_ZN7S1767C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1767C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1767C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1767C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1767C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1767C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1767C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1767C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1767C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1767C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1767C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1767C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1767C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S1767C1[];
extern  VTBL_ENTRY _ZTV7S1767C1[];
Class_Descriptor cd_S1767C1 = {  "S1767C1", // class name
  bases_S1767C1, 3,
  &(vtc_S1767C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,152), // object size
  NSPAIRA(_ZTI7S1767C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1767C1),25, //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  S17132C3_nt  {
  void *s17132c3f0;
  int s17132c3f1;
};
//SIG(-1 S17132C3_nt) C1{ Fp Fi}



//skip512 S17132C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17132C6_nt  {
  __tsi64 s17132c6f0;
};
//SIG(-1 S17132C6_nt) C1{ FL}



//skip512 S17132C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17132C5  {
  ::S17132C6_nt s17132c5f0;
  ::S17132C6_nt s17132c5f1;
  ::S17132C6_nt s17132c5f2;
  char s17132c5f3[8];
  ::S17132C6_nt s17132c5f4;
  ::S17132C6_nt s17132c5f5;
  int s17132c5f6;
  char s17132c5f7[12];
};
//SIG(1 S17132C5) C1{ FC2{ FL} FC2 FC2 Fc[8] FC2 FC2 Fi Fc[12]}



static void Test_S17132C5()
{
  {
    init_simple_test("S17132C5");
    S17132C5 lv;
    check2(sizeof(lv), 64, "sizeof(S17132C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17132C5)");
    check_field_offset(lv, s17132c5f0, 0, "S17132C5.s17132c5f0");
    check_field_offset(lv, s17132c5f1, 8, "S17132C5.s17132c5f1");
    check_field_offset(lv, s17132c5f2, 16, "S17132C5.s17132c5f2");
    check_field_offset(lv, s17132c5f3, 24, "S17132C5.s17132c5f3");
    check_field_offset(lv, s17132c5f4, 32, "S17132C5.s17132c5f4");
    check_field_offset(lv, s17132c5f5, 40, "S17132C5.s17132c5f5");
    check_field_offset(lv, s17132c5f6, 48, "S17132C5.s17132c5f6");
    check_field_offset(lv, s17132c5f7, 52, "S17132C5.s17132c5f7");
  }
}
static Arrange_To_Call_Me vS17132C5(Test_S17132C5, "S17132C5", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17132C9_nt  {
  int s17132c9f0;
  int s17132c9f1;
  int s17132c9f2;
};
//SIG(1 S17132C9_nt) C1{ Fi[3]}



//skip512 S17132C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S17132C4  {
  ::S17132C5 s17132c4f0;
  ::S1766C9_nt s17132c4f1;
  ::S1766C8_nt s17132c4f2;
  ::S17132C9_nt s17132c4f3;
};
//SIG(1 S17132C4) U1{ FC2{ FC3{ FL} FC3 FC3 Fc[8] FC3 FC3 Fi Fc[12]} FC4{ Fi Fi Fi Fi Fi} FC5{ Fi Fi Fi} FC6{ Fi Fi Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S17132C11  {
  void *s17132c11f0;
  int s17132c11f1;
};
//SIG(-1 S17132C11) C1{ Fp Fi}



static void Test_S17132C11()
{
  {
    init_simple_test("S17132C11");
    S17132C11 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S17132C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17132C11)");
    check_field_offset(lv, s17132c11f0, 0, "S17132C11.s17132c11f0");
    check_field_offset(lv, s17132c11f1, ABISELECT(8,4), "S17132C11.s17132c11f1");
  }
}
static Arrange_To_Call_Me vS17132C11(Test_S17132C11, "S17132C11", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S17132C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17132C12_nt  {
  ::S17132C13_nt s17132c12f0;
  void  mf17132c12(); // _ZN12S17132C12_nt10mf17132c12Ev
};
//SIG(-1 S17132C12_nt) C1{ m FC2{ FL[4]}}


void  S17132C12_nt ::mf17132c12(){}

//skip512 S17132C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17132C1  {
  int s17132c1f0[2];
  void *s17132c1f1;
  int s17132c1f2;
  ::S1765C7_nt s17132c1f3;
  ::S1765C7_nt s17132c1f4;
  ::S1765C7_nt s17132c1f5;
  ::S17132C3_nt s17132c1f6;
  ::S17132C4 s17132c1f7;
  ::S17132C3_nt s17132c1f8;
  ::S17132C11 s17132c1f9;
  char s17132c1f10;
  ::S17132C12_nt s17132c1f11;
  void  mf17132c1(); // _ZN8S17132C19mf17132c1Ev
};
//SIG(1 S17132C1) C1{ m Fi[2] Fp Fi FC2{ Fp Fi} FC2 FC2 FC3{ Fp Fi} FU4{ FC5{ FC6{ FL} FC6 FC6 Fc[8] FC6 FC6 Fi Fc[12]} FC7{ Fi Fi Fi Fi Fi} FC8{ Fi Fi Fi} FC9{ Fi Fi Fi}} FC3 FC10{ Fp Fi} Fc FC11{ m FC12{ FL[4]}}}


void  S17132C1 ::mf17132c1(){}

static void Test_S17132C1()
{
  {
    init_simple_test("S17132C1");
    S17132C1 lv;
    check2(sizeof(lv), ABISELECT(224,164), "sizeof(S17132C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17132C1)");
    check_field_offset(lv, s17132c1f0, 0, "S17132C1.s17132c1f0");
    check_field_offset(lv, s17132c1f1, 8, "S17132C1.s17132c1f1");
    check_field_offset(lv, s17132c1f2, ABISELECT(16,12), "S17132C1.s17132c1f2");
    check_field_offset(lv, s17132c1f3, ABISELECT(24,16), "S17132C1.s17132c1f3");
    check_field_offset(lv, s17132c1f4, ABISELECT(40,24), "S17132C1.s17132c1f4");
    check_field_offset(lv, s17132c1f5, ABISELECT(56,32), "S17132C1.s17132c1f5");
    check_field_offset(lv, s17132c1f6, ABISELECT(72,40), "S17132C1.s17132c1f6");
    check_field_offset(lv, s17132c1f7, ABISELECT(88,48), "S17132C1.s17132c1f7");
    check_field_offset(lv, s17132c1f8, ABISELECT(152,112), "S17132C1.s17132c1f8");
    check_field_offset(lv, s17132c1f9, ABISELECT(168,120), "S17132C1.s17132c1f9");
    check_field_offset(lv, s17132c1f10, ABISELECT(184,128), "S17132C1.s17132c1f10");
    check_field_offset(lv, s17132c1f11, ABISELECT(192,132), "S17132C1.s17132c1f11");
  }
}
static Arrange_To_Call_Me vS17132C1(Test_S17132C1, "S17132C1", ABISELECT(224,164));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1768C3  : S1766C4_nt {
  int s1768c3f0;
  void *s1768c3f1[2];
  int s1768c3f2;
  virtual  ~S1768C3(); // _ZN7S1768C3D1Ev
  virtual void  v11(); // _ZN7S1768C33v11Ev
  virtual void  v12(); // _ZN7S1768C33v12Ev
  virtual void  v13(); // _ZN7S1768C33v13Ev
  virtual void  v14(); // _ZN7S1768C33v14Ev
  virtual void  v15(); // _ZN7S1768C33v15Ev
  virtual void  v16(); // _ZN7S1768C33v16Ev
  virtual void  v17(); // _ZN7S1768C33v17Ev
  virtual void  v18(); // _ZN7S1768C33v18Ev
  virtual void  v19(); // _ZN7S1768C33v19Ev
  virtual void  v20(); // _ZN7S1768C33v20Ev
  virtual void  v21(); // _ZN7S1768C33v21Ev
  S1768C3(); // tgen
};
//SIG(-1 S1768C3) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S1768C3 ::~S1768C3(){ note_dtor("S1768C3", this);}
void  S1768C3 ::v11(){vfunc_called(this, "_ZN7S1768C33v11Ev");}
void  S1768C3 ::v12(){vfunc_called(this, "_ZN7S1768C33v12Ev");}
void  S1768C3 ::v13(){vfunc_called(this, "_ZN7S1768C33v13Ev");}
void  S1768C3 ::v14(){vfunc_called(this, "_ZN7S1768C33v14Ev");}
void  S1768C3 ::v15(){vfunc_called(this, "_ZN7S1768C33v15Ev");}
void  S1768C3 ::v16(){vfunc_called(this, "_ZN7S1768C33v16Ev");}
void  S1768C3 ::v17(){vfunc_called(this, "_ZN7S1768C33v17Ev");}
void  S1768C3 ::v18(){vfunc_called(this, "_ZN7S1768C33v18Ev");}
void  S1768C3 ::v19(){vfunc_called(this, "_ZN7S1768C33v19Ev");}
void  S1768C3 ::v20(){vfunc_called(this, "_ZN7S1768C33v20Ev");}
void  S1768C3 ::v21(){vfunc_called(this, "_ZN7S1768C33v21Ev");}
S1768C3 ::S1768C3(){ note_ctor("S1768C3", this);} // tgen

static void Test_S1768C3()
{
  extern Class_Descriptor cd_S1768C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1768C3, buf);
    S1768C3 *dp, &lv = *(dp=new (buf) S1768C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1768C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1768C3)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S1768C3");
    check_field_offset(lv, s1768c3f0, ABISELECT(16,12), "S1768C3.s1768c3f0");
    check_field_offset(lv, s1768c3f1, ABISELECT(24,16), "S1768C3.s1768c3f1");
    check_field_offset(lv, s1768c3f2, ABISELECT(40,24), "S1768C3.s1768c3f2");
    test_class_info(&lv, &cd_S1768C3);
    dp->~S1768C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1768C3(Test_S1768C3, "S1768C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1768C3C1Ev();
extern void _ZN7S1768C3D1Ev();
Name_Map name_map_S1768C3[] = {
  NSPAIR(_ZN7S1768C3C1Ev),
  NSPAIR(_ZN7S1768C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S1768C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S1768C3[];
extern void _ZN7S1768C3D1Ev();
extern void _ZN7S1768C3D0Ev();
extern void _ZN7S1768C33v11Ev();
extern void _ZN7S1768C33v12Ev();
extern void _ZN7S1768C33v13Ev();
extern void _ZN7S1768C33v14Ev();
extern void _ZN7S1768C33v15Ev();
extern void _ZN7S1768C33v16Ev();
extern void _ZN7S1768C33v17Ev();
extern void _ZN7S1768C33v18Ev();
extern void _ZN7S1768C33v19Ev();
extern void _ZN7S1768C33v20Ev();
extern void _ZN7S1768C33v21Ev();
static  VTBL_ENTRY vtc_S1768C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1768C3[0]),
  (VTBL_ENTRY)&_ZN7S1768C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1768C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v21Ev,
};
extern VTBL_ENTRY _ZTI7S1768C3[];
extern  VTBL_ENTRY _ZTV7S1768C3[];
Class_Descriptor cd_S1768C3 = {  "S1768C3", // class name
  bases_S1768C3, 1,
  &(vtc_S1768C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1768C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1768C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1768C2  : S1768C3 {
  virtual  ~S1768C2(); // _ZN7S1768C2D1Ev
  S1768C2(); // tgen
};
//SIG(-1 S1768C2) C1{ BC2{ BC3{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi} vd}


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

static void Test_S1768C2()
{
  extern Class_Descriptor cd_S1768C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1768C2, buf);
    S1768C2 *dp, &lv = *(dp=new (buf) S1768C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1768C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1768C2)");
    check_base_class_offset(lv, (S1766C4_nt*)(S1768C3*), 0, "S1768C2");
    check_base_class_offset(lv, (S1768C3*), 0, "S1768C2");
    test_class_info(&lv, &cd_S1768C2);
    dp->~S1768C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1768C2(Test_S1768C2, "S1768C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1768C2C1Ev();
extern void _ZN7S1768C2D1Ev();
Name_Map name_map_S1768C2[] = {
  NSPAIR(_ZN7S1768C2C1Ev),
  NSPAIR(_ZN7S1768C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S1768C3;
extern VTBL_ENTRY _ZTI7S1768C3[];
extern  VTBL_ENTRY _ZTV7S1768C3[];
static Base_Class bases_S1768C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S1768C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1768C2[];
extern void _ZN7S1768C2D1Ev();
extern void _ZN7S1768C2D0Ev();
extern void _ZN7S1768C33v11Ev();
extern void _ZN7S1768C33v12Ev();
extern void _ZN7S1768C33v13Ev();
extern void _ZN7S1768C33v14Ev();
extern void _ZN7S1768C33v15Ev();
extern void _ZN7S1768C33v16Ev();
extern void _ZN7S1768C33v17Ev();
extern void _ZN7S1768C33v18Ev();
extern void _ZN7S1768C33v19Ev();
extern void _ZN7S1768C33v20Ev();
extern void _ZN7S1768C33v21Ev();
static  VTBL_ENTRY vtc_S1768C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1768C2[0]),
  (VTBL_ENTRY)&_ZN7S1768C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1768C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v21Ev,
};
extern VTBL_ENTRY _ZTI7S1768C2[];
extern  VTBL_ENTRY _ZTV7S1768C2[];
Class_Descriptor cd_S1768C2 = {  "S1768C2", // class name
  bases_S1768C2, 2,
  &(vtc_S1768C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1768C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1768C2),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  S1768C6_nt  {
  int s1768c6f0;
};
//SIG(-1 S1768C6_nt) C1{ Fi}



//skip512 S1768C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1768C5_nt  {
  char s1768c5f0[2];
  short s1768c5f1;
  ::S1768C6_nt s1768c5f2;
  short s1768c5f3;
  char s1768c5f4[6];
};
//SIG(-1 S1768C5_nt) C1{ Fc[2] Fs FC2{ Fi} Fs Fc[6]}



//skip512 S1768C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1768C1  : S1768C2 {
  void *s1768c1f0[2];
  char s1768c1f1;
  int s1768c1f2;
  ::S1768C5_nt s1768c1f3;
  short s1768c1f4;
  int s1768c1f5[4];
  void *s1768c1f6;
  int s1768c1f7[3];
  virtual  ~S1768C1(); // _ZN7S1768C1D1Ev
  virtual void  v1(); // _ZN7S1768C12v1Ev
  virtual void  v2(); // _ZN7S1768C12v2Ev
  virtual void  v3(); // _ZN7S1768C12v3Ev
  virtual void  v4(); // _ZN7S1768C12v4Ev
  virtual void  v5(); // _ZN7S1768C12v5Ev
  virtual void  v6(); // _ZN7S1768C12v6Ev
  virtual void  v7(); // _ZN7S1768C12v7Ev
  virtual void  v8(); // _ZN7S1768C12v8Ev
  virtual void  v9(); // _ZN7S1768C12v9Ev
  virtual void  v10(); // _ZN7S1768C13v10Ev
  S1768C1(); // tgen
};
//SIG(1 S1768C1) C1{ BC2{ BC3{ BC4{ vd m FL} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fi Fp[2] Fi} vd} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp[2] Fc Fi FC5{ Fc[2] Fs FC6{ Fi} Fs Fc[6]} Fs Fi[4] Fp Fi[3]}


 S1768C1 ::~S1768C1(){ note_dtor("S1768C1", this);}
void  S1768C1 ::v1(){vfunc_called(this, "_ZN7S1768C12v1Ev");}
void  S1768C1 ::v2(){vfunc_called(this, "_ZN7S1768C12v2Ev");}
void  S1768C1 ::v3(){vfunc_called(this, "_ZN7S1768C12v3Ev");}
void  S1768C1 ::v4(){vfunc_called(this, "_ZN7S1768C12v4Ev");}
void  S1768C1 ::v5(){vfunc_called(this, "_ZN7S1768C12v5Ev");}
void  S1768C1 ::v6(){vfunc_called(this, "_ZN7S1768C12v6Ev");}
void  S1768C1 ::v7(){vfunc_called(this, "_ZN7S1768C12v7Ev");}
void  S1768C1 ::v8(){vfunc_called(this, "_ZN7S1768C12v8Ev");}
void  S1768C1 ::v9(){vfunc_called(this, "_ZN7S1768C12v9Ev");}
void  S1768C1 ::v10(){vfunc_called(this, "_ZN7S1768C13v10Ev");}
S1768C1 ::S1768C1(){ note_ctor("S1768C1", this);} // tgen

static void Test_S1768C1()
{
  extern Class_Descriptor cd_S1768C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S1768C1, buf);
    S1768C1 *dp, &lv = *(dp=new (buf) S1768C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S1768C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1768C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S1768C3*)(S1768C2*), 0, "S1768C1");
    check_base_class_offset(lv, (S1768C3*)(S1768C2*), 0, "S1768C1");
    check_base_class_offset(lv, (S1768C2*), 0, "S1768C1");
    check_field_offset(lv, s1768c1f0, ABISELECT(48,28), "S1768C1.s1768c1f0");
    check_field_offset(lv, s1768c1f1, ABISELECT(64,36), "S1768C1.s1768c1f1");
    check_field_offset(lv, s1768c1f2, ABISELECT(68,40), "S1768C1.s1768c1f2");
    check_field_offset(lv, s1768c1f3, ABISELECT(72,44), "S1768C1.s1768c1f3");
    check_field_offset(lv, s1768c1f4, ABISELECT(88,60), "S1768C1.s1768c1f4");
    check_field_offset(lv, s1768c1f5, ABISELECT(92,64), "S1768C1.s1768c1f5");
    check_field_offset(lv, s1768c1f6, ABISELECT(112,80), "S1768C1.s1768c1f6");
    check_field_offset(lv, s1768c1f7, ABISELECT(120,84), "S1768C1.s1768c1f7");
    test_class_info(&lv, &cd_S1768C1);
    dp->~S1768C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1768C1(Test_S1768C1, "S1768C1", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN7S1768C1C1Ev();
extern void _ZN7S1768C1D1Ev();
Name_Map name_map_S1768C1[] = {
  NSPAIR(_ZN7S1768C1C1Ev),
  NSPAIR(_ZN7S1768C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S1768C3;
extern VTBL_ENTRY _ZTI7S1768C3[];
extern  VTBL_ENTRY _ZTV7S1768C3[];
extern Class_Descriptor cd_S1768C2;
extern VTBL_ENTRY _ZTI7S1768C2[];
extern  VTBL_ENTRY _ZTV7S1768C2[];
static Base_Class bases_S1768C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S1768C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1768C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1768C1[];
extern void _ZN7S1768C1D1Ev();
extern void _ZN7S1768C1D0Ev();
extern void _ZN7S1768C33v11Ev();
extern void _ZN7S1768C33v12Ev();
extern void _ZN7S1768C33v13Ev();
extern void _ZN7S1768C33v14Ev();
extern void _ZN7S1768C33v15Ev();
extern void _ZN7S1768C33v16Ev();
extern void _ZN7S1768C33v17Ev();
extern void _ZN7S1768C33v18Ev();
extern void _ZN7S1768C33v19Ev();
extern void _ZN7S1768C33v20Ev();
extern void _ZN7S1768C33v21Ev();
extern void _ZN7S1768C12v1Ev();
extern void _ZN7S1768C12v2Ev();
extern void _ZN7S1768C12v3Ev();
extern void _ZN7S1768C12v4Ev();
extern void _ZN7S1768C12v5Ev();
extern void _ZN7S1768C12v6Ev();
extern void _ZN7S1768C12v7Ev();
extern void _ZN7S1768C12v8Ev();
extern void _ZN7S1768C12v9Ev();
extern void _ZN7S1768C13v10Ev();
static  VTBL_ENTRY vtc_S1768C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1768C1[0]),
  (VTBL_ENTRY)&_ZN7S1768C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1768C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1768C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1768C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1768C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1768C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1768C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1768C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1768C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1768C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1768C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1768C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1768C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S1768C1[];
extern  VTBL_ENTRY _ZTV7S1768C1[];
Class_Descriptor cd_S1768C1 = {  "S1768C1", // class name
  bases_S1768C1, 3,
  &(vtc_S1768C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI7S1768C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1768C1),25, //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  S17133C11_nt  {
  void *s17133c11f0;
  int s17133c11f1;
};
//SIG(-1 S17133C11_nt) C1{ Fp Fi}



//skip512 S17133C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17133C12_nt  {
  __tsi64 s17133c12f0[4];
  void  mf17133c12(); // _ZN12S17133C12_nt10mf17133c12Ev
};
//SIG(-1 S17133C12_nt) C1{ m FL[4]}


void  S17133C12_nt ::mf17133c12(){}

//skip512 S17133C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17133C1  {
  int s17133c1f0[2];
  void *s17133c1f1;
  int s17133c1f2;
  ::S17132C11 s17133c1f3;
  ::S17132C11 s17133c1f4;
  ::S17132C11 s17133c1f5;
  ::S17132C3_nt s17133c1f6;
  ::S17132C4 s17133c1f7;
  ::S1765C7_nt s17133c1f8;
  ::S17133C11_nt s17133c1f9;
  char s17133c1f10;
  ::S17133C12_nt s17133c1f11;
  void  mf17133c1(); // _ZN8S17133C19mf17133c1Ev
};
//SIG(1 S17133C1) C1{ m Fi[2] Fp Fi FC2{ Fp Fi} FC2 FC2 FC3{ Fp Fi} FU4{ FC5{ FC6{ FL} FC6 FC6 Fc[8] FC6 FC6 Fi Fc[12]} FC7{ Fi Fi Fi Fi Fi} FC8{ Fi Fi Fi} FC9{ Fi Fi Fi}} FC10{ Fp Fi} FC11{ Fp Fi} Fc FC12{ m FL[4]}}


void  S17133C1 ::mf17133c1(){}

static void Test_S17133C1()
{
  {
    init_simple_test("S17133C1");
    S17133C1 lv;
    check2(sizeof(lv), ABISELECT(224,164), "sizeof(S17133C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17133C1)");
    check_field_offset(lv, s17133c1f0, 0, "S17133C1.s17133c1f0");
    check_field_offset(lv, s17133c1f1, 8, "S17133C1.s17133c1f1");
    check_field_offset(lv, s17133c1f2, ABISELECT(16,12), "S17133C1.s17133c1f2");
    check_field_offset(lv, s17133c1f3, ABISELECT(24,16), "S17133C1.s17133c1f3");
    check_field_offset(lv, s17133c1f4, ABISELECT(40,24), "S17133C1.s17133c1f4");
    check_field_offset(lv, s17133c1f5, ABISELECT(56,32), "S17133C1.s17133c1f5");
    check_field_offset(lv, s17133c1f6, ABISELECT(72,40), "S17133C1.s17133c1f6");
    check_field_offset(lv, s17133c1f7, ABISELECT(88,48), "S17133C1.s17133c1f7");
    check_field_offset(lv, s17133c1f8, ABISELECT(152,112), "S17133C1.s17133c1f8");
    check_field_offset(lv, s17133c1f9, ABISELECT(168,120), "S17133C1.s17133c1f9");
    check_field_offset(lv, s17133c1f10, ABISELECT(184,128), "S17133C1.s17133c1f10");
    check_field_offset(lv, s17133c1f11, ABISELECT(192,132), "S17133C1.s17133c1f11");
  }
}
static Arrange_To_Call_Me vS17133C1(Test_S17133C1, "S17133C1", ABISELECT(224,164));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3958C2  : S1766C4_nt {
  int s3958c2f0;
  void *s3958c2f1[2];
  int s3958c2f2;
  virtual  ~S3958C2(); // _ZN7S3958C2D1Ev
  virtual void  v12(); // _ZN7S3958C23v12Ev
  virtual void  v13(); // _ZN7S3958C23v13Ev
  virtual void  v14(); // _ZN7S3958C23v14Ev
  virtual void  v15(); // _ZN7S3958C23v15Ev
  virtual void  v16(); // _ZN7S3958C23v16Ev
  virtual void  v17(); // _ZN7S3958C23v17Ev
  virtual void  v18(); // _ZN7S3958C23v18Ev
  virtual void  v19(); // _ZN7S3958C23v19Ev
  virtual void  v20(); // _ZN7S3958C23v20Ev
  virtual void  v21(); // _ZN7S3958C23v21Ev
  virtual void  v22(); // _ZN7S3958C23v22Ev
  S3958C2(); // tgen
};
//SIG(-1 S3958C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S3958C2 ::~S3958C2(){ note_dtor("S3958C2", this);}
void  S3958C2 ::v12(){vfunc_called(this, "_ZN7S3958C23v12Ev");}
void  S3958C2 ::v13(){vfunc_called(this, "_ZN7S3958C23v13Ev");}
void  S3958C2 ::v14(){vfunc_called(this, "_ZN7S3958C23v14Ev");}
void  S3958C2 ::v15(){vfunc_called(this, "_ZN7S3958C23v15Ev");}
void  S3958C2 ::v16(){vfunc_called(this, "_ZN7S3958C23v16Ev");}
void  S3958C2 ::v17(){vfunc_called(this, "_ZN7S3958C23v17Ev");}
void  S3958C2 ::v18(){vfunc_called(this, "_ZN7S3958C23v18Ev");}
void  S3958C2 ::v19(){vfunc_called(this, "_ZN7S3958C23v19Ev");}
void  S3958C2 ::v20(){vfunc_called(this, "_ZN7S3958C23v20Ev");}
void  S3958C2 ::v21(){vfunc_called(this, "_ZN7S3958C23v21Ev");}
void  S3958C2 ::v22(){vfunc_called(this, "_ZN7S3958C23v22Ev");}
S3958C2 ::S3958C2(){ note_ctor("S3958C2", this);} // tgen

static void Test_S3958C2()
{
  extern Class_Descriptor cd_S3958C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3958C2, buf);
    S3958C2 *dp, &lv = *(dp=new (buf) S3958C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3958C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3958C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3958C2");
    check_field_offset(lv, s3958c2f0, ABISELECT(16,12), "S3958C2.s3958c2f0");
    check_field_offset(lv, s3958c2f1, ABISELECT(24,16), "S3958C2.s3958c2f1");
    check_field_offset(lv, s3958c2f2, ABISELECT(40,24), "S3958C2.s3958c2f2");
    test_class_info(&lv, &cd_S3958C2);
    dp->~S3958C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3958C2(Test_S3958C2, "S3958C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3958C2C1Ev();
extern void _ZN7S3958C2D1Ev();
Name_Map name_map_S3958C2[] = {
  NSPAIR(_ZN7S3958C2C1Ev),
  NSPAIR(_ZN7S3958C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3958C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3958C2[];
extern void _ZN7S3958C2D1Ev();
extern void _ZN7S3958C2D0Ev();
extern void _ZN7S3958C23v12Ev();
extern void _ZN7S3958C23v13Ev();
extern void _ZN7S3958C23v14Ev();
extern void _ZN7S3958C23v15Ev();
extern void _ZN7S3958C23v16Ev();
extern void _ZN7S3958C23v17Ev();
extern void _ZN7S3958C23v18Ev();
extern void _ZN7S3958C23v19Ev();
extern void _ZN7S3958C23v20Ev();
extern void _ZN7S3958C23v21Ev();
extern void _ZN7S3958C23v22Ev();
static  VTBL_ENTRY vtc_S3958C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3958C2[0]),
  (VTBL_ENTRY)&_ZN7S3958C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3958C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v22Ev,
};
extern VTBL_ENTRY _ZTI7S3958C2[];
extern  VTBL_ENTRY _ZTV7S3958C2[];
Class_Descriptor cd_S3958C2 = {  "S3958C2", // class name
  bases_S3958C2, 1,
  &(vtc_S3958C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3958C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3958C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3958C4  {
  virtual  ~S3958C4(); // _ZN7S3958C4D1Ev
  virtual void  v23(); // _ZN7S3958C43v23Ev
  virtual void  v24(); // _ZN7S3958C43v24Ev
  S3958C4(); // tgen
};
//SIG(-1 S3958C4) C1{ vd v1 v2}


 S3958C4 ::~S3958C4(){ note_dtor("S3958C4", this);}
void  S3958C4 ::v23(){vfunc_called(this, "_ZN7S3958C43v23Ev");}
void  S3958C4 ::v24(){vfunc_called(this, "_ZN7S3958C43v24Ev");}
S3958C4 ::S3958C4(){ note_ctor("S3958C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3958C4C1Ev();
extern void _ZN7S3958C4D1Ev();
Name_Map name_map_S3958C4[] = {
  NSPAIR(_ZN7S3958C4C1Ev),
  NSPAIR(_ZN7S3958C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3958C4[];
extern void _ZN7S3958C4D1Ev();
extern void _ZN7S3958C4D0Ev();
extern void _ZN7S3958C43v23Ev();
extern void _ZN7S3958C43v24Ev();
static  VTBL_ENTRY vtc_S3958C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3958C4[0]),
  (VTBL_ENTRY)&_ZN7S3958C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3958C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3958C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3958C43v24Ev,
};
extern VTBL_ENTRY _ZTI7S3958C4[];
extern  VTBL_ENTRY _ZTV7S3958C4[];
Class_Descriptor cd_S3958C4 = {  "S3958C4", // class name
  0,0,//no base classes
  &(vtc_S3958C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3958C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3958C4),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  S3958C1  : S3958C2 , S3958C4 {
  void *s3958c1f0[3];
  char s3958c1f1;
  void *s3958c1f2;
  ::S3961C7_nt s3958c1f3;
  ::S3961C7_nt s3958c1f4;
  int s3958c1f5[4];
  virtual  ~S3958C1(); // _ZN7S3958C1D1Ev
  virtual void  v1(); // _ZN7S3958C12v1Ev
  virtual void  v2(); // _ZN7S3958C12v2Ev
  virtual void  v3(); // _ZN7S3958C12v3Ev
  virtual void  v4(); // _ZN7S3958C12v4Ev
  virtual void  v5(); // _ZN7S3958C12v5Ev
  virtual void  v6(); // _ZN7S3958C12v6Ev
  virtual void  v7(); // _ZN7S3958C12v7Ev
  virtual void  v8(); // _ZN7S3958C12v8Ev
  virtual void  v9(); // _ZN7S3958C12v9Ev
  virtual void  v10(); // _ZN7S3958C13v10Ev
  virtual void  v11(); // _ZN7S3958C13v11Ev
  S3958C1(); // tgen
};
//SIG(1 S3958C1) C1{ BC2{ BC3{ vd m FL} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi Fp[2] Fi} BC4{ vd v23 v24} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] Fc Fp FC5{ BC3 vd Fp Fi[4] Fp} FC5 Fi[4]}


 S3958C1 ::~S3958C1(){ note_dtor("S3958C1", this);}
void  S3958C1 ::v1(){vfunc_called(this, "_ZN7S3958C12v1Ev");}
void  S3958C1 ::v2(){vfunc_called(this, "_ZN7S3958C12v2Ev");}
void  S3958C1 ::v3(){vfunc_called(this, "_ZN7S3958C12v3Ev");}
void  S3958C1 ::v4(){vfunc_called(this, "_ZN7S3958C12v4Ev");}
void  S3958C1 ::v5(){vfunc_called(this, "_ZN7S3958C12v5Ev");}
void  S3958C1 ::v6(){vfunc_called(this, "_ZN7S3958C12v6Ev");}
void  S3958C1 ::v7(){vfunc_called(this, "_ZN7S3958C12v7Ev");}
void  S3958C1 ::v8(){vfunc_called(this, "_ZN7S3958C12v8Ev");}
void  S3958C1 ::v9(){vfunc_called(this, "_ZN7S3958C12v9Ev");}
void  S3958C1 ::v10(){vfunc_called(this, "_ZN7S3958C13v10Ev");}
void  S3958C1 ::v11(){vfunc_called(this, "_ZN7S3958C13v11Ev");}
S3958C1 ::S3958C1(){ note_ctor("S3958C1", this);} // tgen

static void Test_S3958C1()
{
  extern Class_Descriptor cd_S3958C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,36)];
    init_test(&cd_S3958C1, buf);
    S3958C1 *dp, &lv = *(dp=new (buf) S3958C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,140), "sizeof(S3958C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3958C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3958C2*), 0, "S3958C1");
    check_base_class_offset(lv, (S3958C2*), 0, "S3958C1");
    check_base_class_offset(lv, (S3958C4*), ABISELECT(48,28), "S3958C1");
    check_field_offset(lv, s3958c1f0, ABISELECT(56,32), "S3958C1.s3958c1f0");
    check_field_offset(lv, s3958c1f1, ABISELECT(80,44), "S3958C1.s3958c1f1");
    check_field_offset(lv, s3958c1f2, ABISELECT(88,48), "S3958C1.s3958c1f2");
    check_field_offset(lv, s3958c1f3, ABISELECT(96,52), "S3958C1.s3958c1f3");
    check_field_offset(lv, s3958c1f4, ABISELECT(144,88), "S3958C1.s3958c1f4");
    check_field_offset(lv, s3958c1f5, ABISELECT(192,124), "S3958C1.s3958c1f5");
    test_class_info(&lv, &cd_S3958C1);
    dp->~S3958C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3958C1(Test_S3958C1, "S3958C1", ABISELECT(208,140));

#else // __cplusplus

extern void _ZN7S3958C1C1Ev();
extern void _ZN7S3958C1D1Ev();
Name_Map name_map_S3958C1[] = {
  NSPAIR(_ZN7S3958C1C1Ev),
  NSPAIR(_ZN7S3958C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3958C2;
extern VTBL_ENTRY _ZTI7S3958C2[];
extern  VTBL_ENTRY _ZTV7S3958C2[];
extern Class_Descriptor cd_S3958C4;
extern VTBL_ENTRY _ZTI7S3958C4[];
extern  VTBL_ENTRY _ZTV7S3958C4[];
static Base_Class bases_S3958C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3958C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3958C4,    ABISELECT(48,28), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3958C1[];
extern void _ZN7S3958C1D1Ev();
extern void _ZN7S3958C1D0Ev();
extern void _ZN7S3958C23v12Ev();
extern void _ZN7S3958C23v13Ev();
extern void _ZN7S3958C23v14Ev();
extern void _ZN7S3958C23v15Ev();
extern void _ZN7S3958C23v16Ev();
extern void _ZN7S3958C23v17Ev();
extern void _ZN7S3958C23v18Ev();
extern void _ZN7S3958C23v19Ev();
extern void _ZN7S3958C23v20Ev();
extern void _ZN7S3958C23v21Ev();
extern void _ZN7S3958C23v22Ev();
extern void _ZN7S3958C12v1Ev();
extern void _ZN7S3958C12v2Ev();
extern void _ZN7S3958C12v3Ev();
extern void _ZN7S3958C12v4Ev();
extern void _ZN7S3958C12v5Ev();
extern void _ZN7S3958C12v6Ev();
extern void _ZN7S3958C12v7Ev();
extern void _ZN7S3958C12v8Ev();
extern void _ZN7S3958C12v9Ev();
extern void _ZN7S3958C13v10Ev();
extern void _ZN7S3958C13v11Ev();
extern void ABISELECT(_ZThn48_N7S3958C1D1Ev,_ZThn28_N7S3958C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3958C1D0Ev,_ZThn28_N7S3958C1D0Ev)();
extern void _ZN7S3958C43v23Ev();
extern void _ZN7S3958C43v24Ev();
static  VTBL_ENTRY vtc_S3958C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3958C1[0]),
  (VTBL_ENTRY)&_ZN7S3958C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3958C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3958C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3958C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3958C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3958C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3958C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3958C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3958C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3958C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3958C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3958C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3958C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3958C13v11Ev,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3958C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3958C1D1Ev,_ZThn28_N7S3958C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3958C1D0Ev,_ZThn28_N7S3958C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3958C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3958C43v24Ev,
};
extern VTBL_ENTRY _ZTI7S3958C1[];
extern  VTBL_ENTRY _ZTV7S3958C1[];
Class_Descriptor cd_S3958C1 = {  "S3958C1", // class name
  bases_S3958C1, 3,
  &(vtc_S3958C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,140), // object size
  NSPAIRA(_ZTI7S3958C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3958C1),32, //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  S20282C2  {
  virtual void  v5(); // _ZN8S20282C22v5Ev
  ~S20282C2(); // tgen
  S20282C2(); // tgen
};
//SIG(-1 S20282C2) C1{ v1}


void  S20282C2 ::v5(){vfunc_called(this, "_ZN8S20282C22v5Ev");}
S20282C2 ::~S20282C2(){ note_dtor("S20282C2", this);} // tgen
S20282C2 ::S20282C2(){ note_ctor("S20282C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20282C2C1Ev();
extern void _ZN8S20282C2D1Ev();
Name_Map name_map_S20282C2[] = {
  NSPAIR(_ZN8S20282C2C1Ev),
  NSPAIR(_ZN8S20282C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20282C2[];
extern void _ZN8S20282C22v5Ev();
static  VTBL_ENTRY vtc_S20282C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20282C2[0]),
  (VTBL_ENTRY)&_ZN8S20282C22v5Ev,
};
extern VTBL_ENTRY _ZTI8S20282C2[];
extern  VTBL_ENTRY _ZTV8S20282C2[];
Class_Descriptor cd_S20282C2 = {  "S20282C2", // class name
  0,0,//no base classes
  &(vtc_S20282C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20282C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20282C2),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  S20282C7  {
  virtual void  v6(); // _ZN8S20282C72v6Ev
  virtual void  v7(); // _ZN8S20282C72v7Ev
  virtual void  v8(); // _ZN8S20282C72v8Ev
  ~S20282C7(); // tgen
  S20282C7(); // tgen
};
//SIG(-1 S20282C7) C1{ v1 v2 v3}


void  S20282C7 ::v6(){vfunc_called(this, "_ZN8S20282C72v6Ev");}
void  S20282C7 ::v7(){vfunc_called(this, "_ZN8S20282C72v7Ev");}
void  S20282C7 ::v8(){vfunc_called(this, "_ZN8S20282C72v8Ev");}
S20282C7 ::~S20282C7(){ note_dtor("S20282C7", this);} // tgen
S20282C7 ::S20282C7(){ note_ctor("S20282C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20282C7C1Ev();
extern void _ZN8S20282C7D1Ev();
Name_Map name_map_S20282C7[] = {
  NSPAIR(_ZN8S20282C7C1Ev),
  NSPAIR(_ZN8S20282C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20282C7[];
extern void _ZN8S20282C72v6Ev();
extern void _ZN8S20282C72v7Ev();
extern void _ZN8S20282C72v8Ev();
static  VTBL_ENTRY vtc_S20282C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20282C7[0]),
  (VTBL_ENTRY)&_ZN8S20282C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v8Ev,
};
extern VTBL_ENTRY _ZTI8S20282C7[];
extern  VTBL_ENTRY _ZTV8S20282C7[];
Class_Descriptor cd_S20282C7 = {  "S20282C7", // class name
  0,0,//no base classes
  &(vtc_S20282C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20282C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20282C7),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20282C6  : S20282C7 {
  void *s20282c6f0;
  virtual  ~S20282C6(); // _ZN8S20282C6D1Ev
  virtual void  v9(); // _ZN8S20282C62v9Ev
  virtual void  v10(); // _ZN8S20282C63v10Ev
  virtual void  v11(); // _ZN8S20282C63v11Ev
  virtual void  v12(); // _ZN8S20282C63v12Ev
  virtual void  v13(); // _ZN8S20282C63v13Ev
  S20282C6(); // tgen
};
//SIG(-1 S20282C6) C1{ BC2{ v6 v7 v8} vd v1 v2 v3 v4 v5 Fp}


 S20282C6 ::~S20282C6(){ note_dtor("S20282C6", this);}
void  S20282C6 ::v9(){vfunc_called(this, "_ZN8S20282C62v9Ev");}
void  S20282C6 ::v10(){vfunc_called(this, "_ZN8S20282C63v10Ev");}
void  S20282C6 ::v11(){vfunc_called(this, "_ZN8S20282C63v11Ev");}
void  S20282C6 ::v12(){vfunc_called(this, "_ZN8S20282C63v12Ev");}
void  S20282C6 ::v13(){vfunc_called(this, "_ZN8S20282C63v13Ev");}
S20282C6 ::S20282C6(){ note_ctor("S20282C6", this);} // tgen

static void Test_S20282C6()
{
  extern Class_Descriptor cd_S20282C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20282C6, buf);
    S20282C6 *dp, &lv = *(dp=new (buf) S20282C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20282C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20282C6)");
    check_base_class_offset(lv, (S20282C7*), 0, "S20282C6");
    check_field_offset(lv, s20282c6f0, ABISELECT(8,4), "S20282C6.s20282c6f0");
    test_class_info(&lv, &cd_S20282C6);
    dp->~S20282C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20282C6(Test_S20282C6, "S20282C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20282C6C1Ev();
extern void _ZN8S20282C6D1Ev();
Name_Map name_map_S20282C6[] = {
  NSPAIR(_ZN8S20282C6C1Ev),
  NSPAIR(_ZN8S20282C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20282C7;
extern VTBL_ENTRY _ZTI8S20282C7[];
extern  VTBL_ENTRY _ZTV8S20282C7[];
static Base_Class bases_S20282C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20282C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20282C6[];
extern void _ZN8S20282C72v6Ev();
extern void _ZN8S20282C72v7Ev();
extern void _ZN8S20282C72v8Ev();
extern void _ZN8S20282C6D1Ev();
extern void _ZN8S20282C6D0Ev();
extern void _ZN8S20282C62v9Ev();
extern void _ZN8S20282C63v10Ev();
extern void _ZN8S20282C63v11Ev();
extern void _ZN8S20282C63v12Ev();
extern void _ZN8S20282C63v13Ev();
static  VTBL_ENTRY vtc_S20282C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20282C6[0]),
  (VTBL_ENTRY)&_ZN8S20282C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20282C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20282C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20282C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v13Ev,
};
extern VTBL_ENTRY _ZTI8S20282C6[];
extern  VTBL_ENTRY _ZTV8S20282C6[];
Class_Descriptor cd_S20282C6 = {  "S20282C6", // class name
  bases_S20282C6, 1,
  &(vtc_S20282C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20282C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20282C6),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  S20282C8  {
  ::S20282C7 s20282c8f0;
  __tsi64 s20282c8f1;
  long double s20282c8f2;
  virtual void  v14(); // _ZN8S20282C83v14Ev
  virtual void  v15(); // _ZN8S20282C83v15Ev
  virtual void  v16(); // _ZN8S20282C83v16Ev
  virtual void  v17(); // _ZN8S20282C83v17Ev
  virtual void  v18(); // _ZN8S20282C83v18Ev
  virtual void  v19(); // _ZN8S20282C83v19Ev
  ~S20282C8(); // tgen
  S20282C8(); // tgen
};
//SIG(-1 S20282C8) C1{ v1 v2 v3 v4 v5 v6 FC2{ v7 v8 v9} FL FD}


void  S20282C8 ::v14(){vfunc_called(this, "_ZN8S20282C83v14Ev");}
void  S20282C8 ::v15(){vfunc_called(this, "_ZN8S20282C83v15Ev");}
void  S20282C8 ::v16(){vfunc_called(this, "_ZN8S20282C83v16Ev");}
void  S20282C8 ::v17(){vfunc_called(this, "_ZN8S20282C83v17Ev");}
void  S20282C8 ::v18(){vfunc_called(this, "_ZN8S20282C83v18Ev");}
void  S20282C8 ::v19(){vfunc_called(this, "_ZN8S20282C83v19Ev");}
S20282C8 ::~S20282C8(){ note_dtor("S20282C8", this);} // tgen
S20282C8 ::S20282C8(){ note_ctor("S20282C8", this);} // tgen

static void Test_S20282C8()
{
  extern Class_Descriptor cd_S20282C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S20282C8, buf);
    S20282C8 *dp, &lv = *(dp=new (buf) S20282C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S20282C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20282C8)");
    check_field_offset(lv, s20282c8f0, ABISELECT(8,4), "S20282C8.s20282c8f0");
    check_field_offset(lv, s20282c8f1, ABISELECT(16,8), "S20282C8.s20282c8f1");
    check_field_offset(lv, s20282c8f2, ABISELECT(32,16), "S20282C8.s20282c8f2");
    test_class_info(&lv, &cd_S20282C8);
    dp->~S20282C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20282C8(Test_S20282C8, "S20282C8", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S20282C8C1Ev();
extern void _ZN8S20282C8D1Ev();
Name_Map name_map_S20282C8[] = {
  NSPAIR(_ZN8S20282C8C1Ev),
  NSPAIR(_ZN8S20282C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20282C8[];
extern void _ZN8S20282C83v14Ev();
extern void _ZN8S20282C83v15Ev();
extern void _ZN8S20282C83v16Ev();
extern void _ZN8S20282C83v17Ev();
extern void _ZN8S20282C83v18Ev();
extern void _ZN8S20282C83v19Ev();
static  VTBL_ENTRY vtc_S20282C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20282C8[0]),
  (VTBL_ENTRY)&_ZN8S20282C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v19Ev,
};
extern VTBL_ENTRY _ZTI8S20282C8[];
extern  VTBL_ENTRY _ZTV8S20282C8[];
Class_Descriptor cd_S20282C8 = {  "S20282C8", // class name
  0,0,//no base classes
  &(vtc_S20282C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S20282C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20282C8),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20282C5  : S20282C6 , S20282C8 {
  void *s20282c5f0;
  virtual  ~S20282C5(); // _ZN8S20282C5D1Ev
  virtual void  v20(); // _ZN8S20282C53v20Ev
  virtual void  v21(); // _ZN8S20282C53v21Ev
  virtual void  v22(); // _ZN8S20282C53v22Ev
  virtual void  v23(); // _ZN8S20282C53v23Ev
  virtual void  v24(); // _ZN8S20282C53v24Ev
  S20282C5(); // tgen
};
//SIG(-1 S20282C5) C1{ BC2{ BC3{ v6 v7 v8} vd v9 v10 v11 v12 v13 Fp} BC4{ v14 v15 v16 v17 v18 v19 FC3 FL FD} vd v1 v2 v3 v4 v5 Fp}


 S20282C5 ::~S20282C5(){ note_dtor("S20282C5", this);}
void  S20282C5 ::v20(){vfunc_called(this, "_ZN8S20282C53v20Ev");}
void  S20282C5 ::v21(){vfunc_called(this, "_ZN8S20282C53v21Ev");}
void  S20282C5 ::v22(){vfunc_called(this, "_ZN8S20282C53v22Ev");}
void  S20282C5 ::v23(){vfunc_called(this, "_ZN8S20282C53v23Ev");}
void  S20282C5 ::v24(){vfunc_called(this, "_ZN8S20282C53v24Ev");}
S20282C5 ::S20282C5(){ note_ctor("S20282C5", this);} // tgen

static void Test_S20282C5()
{
  extern Class_Descriptor cd_S20282C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,11)];
    init_test(&cd_S20282C5, buf);
    S20282C5 *dp, &lv = *(dp=new (buf) S20282C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S20282C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20282C5)");
    check_base_class_offset(lv, (S20282C7*)(S20282C6*), 0, "S20282C5");
    check_base_class_offset(lv, (S20282C6*), 0, "S20282C5");
    check_base_class_offset(lv, (S20282C8*), ABISELECT(16,8), "S20282C5");
    check_field_offset(lv, s20282c5f0, ABISELECT(64,36), "S20282C5.s20282c5f0");
    test_class_info(&lv, &cd_S20282C5);
    dp->~S20282C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20282C5(Test_S20282C5, "S20282C5", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN8S20282C5C1Ev();
extern void _ZN8S20282C5D1Ev();
Name_Map name_map_S20282C5[] = {
  NSPAIR(_ZN8S20282C5C1Ev),
  NSPAIR(_ZN8S20282C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20282C7;
extern VTBL_ENTRY _ZTI8S20282C7[];
extern  VTBL_ENTRY _ZTV8S20282C7[];
extern Class_Descriptor cd_S20282C6;
extern VTBL_ENTRY _ZTI8S20282C6[];
extern  VTBL_ENTRY _ZTV8S20282C6[];
extern Class_Descriptor cd_S20282C8;
extern VTBL_ENTRY _ZTI8S20282C8[];
extern  VTBL_ENTRY _ZTV8S20282C8[];
static Base_Class bases_S20282C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20282C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20282C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20282C8,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_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 _ZTI8S20282C5[];
extern void _ZN8S20282C72v6Ev();
extern void _ZN8S20282C72v7Ev();
extern void _ZN8S20282C72v8Ev();
extern void _ZN8S20282C5D1Ev();
extern void _ZN8S20282C5D0Ev();
extern void _ZN8S20282C62v9Ev();
extern void _ZN8S20282C63v10Ev();
extern void _ZN8S20282C63v11Ev();
extern void _ZN8S20282C63v12Ev();
extern void _ZN8S20282C63v13Ev();
extern void _ZN8S20282C53v20Ev();
extern void _ZN8S20282C53v21Ev();
extern void _ZN8S20282C53v22Ev();
extern void _ZN8S20282C53v23Ev();
extern void _ZN8S20282C53v24Ev();
extern void _ZN8S20282C83v14Ev();
extern void _ZN8S20282C83v15Ev();
extern void _ZN8S20282C83v16Ev();
extern void _ZN8S20282C83v17Ev();
extern void _ZN8S20282C83v18Ev();
extern void _ZN8S20282C83v19Ev();
static  VTBL_ENTRY vtc_S20282C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20282C5[0]),
  (VTBL_ENTRY)&_ZN8S20282C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v8Ev,
  (VTBL_ENTRY)&_ZN8S20282C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20282C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20282C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v24Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20282C5[0]),
  (VTBL_ENTRY)&_ZN8S20282C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v19Ev,
};
extern VTBL_ENTRY _ZTI8S20282C5[];
extern  VTBL_ENTRY _ZTV8S20282C5[];
Class_Descriptor cd_S20282C5 = {  "S20282C5", // class name
  bases_S20282C5, 3,
  &(vtc_S20282C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI8S20282C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20282C5),25, //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  S20282C4  : virtual S20282C5 {
  int s20282c4f0;
  virtual  ~S20282C4(); // _ZN8S20282C4D2Ev
  virtual void  v25(); // _ZN8S20282C43v25Ev
  virtual void  v26(); // _ZN8S20282C43v26Ev
  virtual void  v27(); // _ZN8S20282C43v27Ev
  S20282C4(); // tgen
};
//SIG(-1 S20282C4) C1{ VBC2{ BC3{ BC4{ v4 v5 v6} vd v7 v8 v9 v10 v11 Fp} BC5{ v12 v13 v14 v15 v16 v17 FC4 FL FD} vd v18 v19 v20 v21 v22 Fp} vd v1 v2 v3 Fi}


 S20282C4 ::~S20282C4(){ note_dtor("S20282C4", this);}
void  S20282C4 ::v25(){vfunc_called(this, "_ZN8S20282C43v25Ev");}
void  S20282C4 ::v26(){vfunc_called(this, "_ZN8S20282C43v26Ev");}
void  S20282C4 ::v27(){vfunc_called(this, "_ZN8S20282C43v27Ev");}
S20282C4 ::S20282C4(){ note_ctor("S20282C4", this);} // tgen

static void Test_S20282C4()
{
  extern Class_Descriptor cd_S20282C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S20282C4, buf);
    S20282C4 *dp, &lv = *(dp=new (buf) S20282C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20282C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20282C4)");
    check_base_class_offset(lv, (S20282C7*)(S20282C6*)(S20282C5*), ABISELECT(16,8), "S20282C4");
    check_base_class_offset(lv, (S20282C6*)(S20282C5*), ABISELECT(16,8), "S20282C4");
    check_base_class_offset(lv, (S20282C8*)(S20282C5*), ABISELECT(32,16), "S20282C4");
    check_base_class_offset(lv, (S20282C5*), ABISELECT(16,8), "S20282C4");
    check_field_offset(lv, s20282c4f0, ABISELECT(8,4), "S20282C4.s20282c4f0");
    test_class_info(&lv, &cd_S20282C4);
    dp->~S20282C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20282C4(Test_S20282C4, "S20282C4", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20282C4C1Ev();
extern void _ZN8S20282C4D2Ev();
Name_Map name_map_S20282C4[] = {
  NSPAIR(_ZN8S20282C4C1Ev),
  NSPAIR(_ZN8S20282C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20282C7;
extern VTBL_ENTRY _ZTI8S20282C7[];
extern  VTBL_ENTRY _ZTV8S20282C7[];
extern Class_Descriptor cd_S20282C6;
extern VTBL_ENTRY _ZTI8S20282C6[];
extern  VTBL_ENTRY _ZTV8S20282C6[];
extern Class_Descriptor cd_S20282C8;
extern VTBL_ENTRY _ZTI8S20282C8[];
extern  VTBL_ENTRY _ZTV8S20282C8[];
extern Class_Descriptor cd_S20282C5;
extern VTBL_ENTRY _ZTI8S20282C5[];
extern  VTBL_ENTRY _ZTV8S20282C5[];
static Base_Class bases_S20282C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20282C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20282C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20282C8,    ABISELECT(32,16), //bcp->offset
    45, //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
    3, //immediately_derived
  0, 0},
  {&cd_S20282C5,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S20282C4[];
extern void _ZN8S20282C4D1Ev();
extern void _ZN8S20282C4D0Ev();
extern void _ZN8S20282C43v25Ev();
extern void _ZN8S20282C43v26Ev();
extern void _ZN8S20282C43v27Ev();
extern void _ZN8S20282C72v6Ev();
extern void _ZN8S20282C72v7Ev();
extern void _ZN8S20282C72v8Ev();
extern void ABISELECT(_ZTv0_n48_N8S20282C4D1Ev,_ZTv0_n24_N8S20282C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20282C4D1Ev,_ZThn8_N8S20282C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20282C4D0Ev,_ZTv0_n24_N8S20282C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20282C4D0Ev,_ZThn8_N8S20282C4D0Ev)() __attribute__((weak));
extern void _ZN8S20282C62v9Ev();
extern void _ZN8S20282C63v10Ev();
extern void _ZN8S20282C63v11Ev();
extern void _ZN8S20282C63v12Ev();
extern void _ZN8S20282C63v13Ev();
extern void _ZN8S20282C53v20Ev();
extern void _ZN8S20282C53v21Ev();
extern void _ZN8S20282C53v22Ev();
extern void _ZN8S20282C53v23Ev();
extern void _ZN8S20282C53v24Ev();
extern void _ZN8S20282C83v14Ev();
extern void _ZN8S20282C83v15Ev();
extern void _ZN8S20282C83v16Ev();
extern void _ZN8S20282C83v17Ev();
extern void _ZN8S20282C83v18Ev();
extern void _ZN8S20282C83v19Ev();
static  VTBL_ENTRY vtc_S20282C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20282C4[0]),
  (VTBL_ENTRY)&_ZN8S20282C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20282C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v27Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20282C4[0]),
  (VTBL_ENTRY)&_ZN8S20282C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20282C4D1Ev,_ZTv0_n24_N8S20282C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20282C4D0Ev,_ZTv0_n24_N8S20282C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20282C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v24Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20282C4[0]),
  (VTBL_ENTRY)&_ZN8S20282C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v19Ev,
};
extern VTBL_ENTRY _ZTV8S20282C4[];
static  VTT_ENTRY vtt_S20282C4[] = {
  {&(_ZTV8S20282C4[3]),  3,53},
  {&(_ZTV8S20282C4[30]),  30,53},
  {&(_ZTV8S20282C4[47]),  47,53},
};
extern VTBL_ENTRY _ZTI8S20282C4[];
extern  VTBL_ENTRY _ZTV8S20282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20282C4[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20282C4D0Ev,_ZTv0_n24_N8S20282C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20282C4D0Ev,_ZThn8_N8S20282C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20282C4D1Ev,_ZTv0_n24_N8S20282C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20282C4D1Ev,_ZThn8_N8S20282C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20282C4 = {  "S20282C4", // class name
  bases_S20282C4, 4,
  &(vtc_S20282C4[0]), // expected_vtbl_contents
  &(vtt_S20282C4[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20282C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20282C4),53, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20282C4),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20282C3  : S20282C4 {
  virtual  ~S20282C3(); // _ZN8S20282C3D2Ev
  virtual void  v28(); // _ZN8S20282C33v28Ev
  virtual void  v29(); // _ZN8S20282C33v29Ev
  S20282C3(); // tgen
};
//SIG(-1 S20282C3) C1{ BC2{ VBC3{ BC4{ BC5{ v3 v4 v5} vd v6 v7 v8 v9 v10 Fp} BC6{ v11 v12 v13 v14 v15 v16 FC5 FL FD} vd v17 v18 v19 v20 v21 Fp} vd v22 v23 v24 Fi} vd v1 v2}


 S20282C3 ::~S20282C3(){ note_dtor("S20282C3", this);}
void  S20282C3 ::v28(){vfunc_called(this, "_ZN8S20282C33v28Ev");}
void  S20282C3 ::v29(){vfunc_called(this, "_ZN8S20282C33v29Ev");}
S20282C3 ::S20282C3(){ note_ctor("S20282C3", this);} // tgen

static void Test_S20282C3()
{
  extern Class_Descriptor cd_S20282C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S20282C3, buf);
    S20282C3 *dp, &lv = *(dp=new (buf) S20282C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20282C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20282C3)");
    check_base_class_offset(lv, (S20282C7*)(S20282C6*)(S20282C5*), ABISELECT(16,8), "S20282C3");
    check_base_class_offset(lv, (S20282C6*)(S20282C5*), ABISELECT(16,8), "S20282C3");
    check_base_class_offset(lv, (S20282C8*)(S20282C5*), ABISELECT(32,16), "S20282C3");
    check_base_class_offset(lv, (S20282C5*)(S20282C4*), ABISELECT(16,8), "S20282C3");
    check_base_class_offset(lv, (S20282C4*), 0, "S20282C3");
    test_class_info(&lv, &cd_S20282C3);
    dp->~S20282C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20282C3(Test_S20282C3, "S20282C3", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20282C3C1Ev();
extern void _ZN8S20282C3D2Ev();
Name_Map name_map_S20282C3[] = {
  NSPAIR(_ZN8S20282C3C1Ev),
  NSPAIR(_ZN8S20282C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20282C7;
extern VTBL_ENTRY _ZTI8S20282C7[];
extern  VTBL_ENTRY _ZTV8S20282C7[];
extern Class_Descriptor cd_S20282C6;
extern VTBL_ENTRY _ZTI8S20282C6[];
extern  VTBL_ENTRY _ZTV8S20282C6[];
extern Class_Descriptor cd_S20282C8;
extern VTBL_ENTRY _ZTI8S20282C8[];
extern  VTBL_ENTRY _ZTV8S20282C8[];
extern Class_Descriptor cd_S20282C5;
extern VTBL_ENTRY _ZTI8S20282C5[];
extern  VTBL_ENTRY _ZTV8S20282C5[];
extern Class_Descriptor cd_S20282C4;
extern VTBL_ENTRY _ZTI8S20282C4[];
extern  VTBL_ENTRY _ZTV8S20282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20282C4[];
static Base_Class bases_S20282C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20282C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20282C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20282C8,    ABISELECT(32,16), //bcp->offset
    47, //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
    3, //immediately_derived
  0, 0},
  {&cd_S20282C5,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    22, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20282C4,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S20282C3[];
extern void _ZN8S20282C3D1Ev();
extern void _ZN8S20282C3D0Ev();
extern void _ZN8S20282C43v25Ev();
extern void _ZN8S20282C43v26Ev();
extern void _ZN8S20282C43v27Ev();
extern void _ZN8S20282C33v28Ev();
extern void _ZN8S20282C33v29Ev();
extern void _ZN8S20282C72v6Ev();
extern void _ZN8S20282C72v7Ev();
extern void _ZN8S20282C72v8Ev();
extern void ABISELECT(_ZTv0_n48_N8S20282C3D1Ev,_ZTv0_n24_N8S20282C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20282C3D1Ev,_ZThn8_N8S20282C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20282C3D0Ev,_ZTv0_n24_N8S20282C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S20282C3D0Ev,_ZThn8_N8S20282C3D0Ev)() __attribute__((weak));
extern void _ZN8S20282C62v9Ev();
extern void _ZN8S20282C63v10Ev();
extern void _ZN8S20282C63v11Ev();
extern void _ZN8S20282C63v12Ev();
extern void _ZN8S20282C63v13Ev();
extern void _ZN8S20282C53v20Ev();
extern void _ZN8S20282C53v21Ev();
extern void _ZN8S20282C53v22Ev();
extern void _ZN8S20282C53v23Ev();
extern void _ZN8S20282C53v24Ev();
extern void _ZN8S20282C83v14Ev();
extern void _ZN8S20282C83v15Ev();
extern void _ZN8S20282C83v16Ev();
extern void _ZN8S20282C83v17Ev();
extern void _ZN8S20282C83v18Ev();
extern void _ZN8S20282C83v19Ev();
static  VTBL_ENTRY vtc_S20282C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20282C3[0]),
  (VTBL_ENTRY)&_ZN8S20282C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20282C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20282C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20282C33v29Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20282C3[0]),
  (VTBL_ENTRY)&_ZN8S20282C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20282C3D1Ev,_ZTv0_n24_N8S20282C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20282C3D0Ev,_ZTv0_n24_N8S20282C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20282C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v24Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20282C3[0]),
  (VTBL_ENTRY)&_ZN8S20282C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v19Ev,
};
extern VTBL_ENTRY _ZTV8S20282C3[];
extern void _ZN8S20282C4D1Ev();
extern void _ZN8S20282C4D0Ev();
extern void _ZN8S20282C43v25Ev();
extern void _ZN8S20282C43v26Ev();
extern void _ZN8S20282C43v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20282C4__8S20282C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20282C4[0]),
  (VTBL_ENTRY)&_ZN8S20282C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20282C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v27Ev,
};
extern void _ZN8S20282C72v6Ev();
extern void _ZN8S20282C72v7Ev();
extern void _ZN8S20282C72v8Ev();
extern void ABISELECT(_ZTv0_n48_N8S20282C4D1Ev,_ZTv0_n24_N8S20282C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20282C4D1Ev,_ZThn8_N8S20282C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20282C4D0Ev,_ZTv0_n24_N8S20282C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20282C4D0Ev,_ZThn8_N8S20282C4D0Ev)() __attribute__((weak));
extern void _ZN8S20282C62v9Ev();
extern void _ZN8S20282C63v10Ev();
extern void _ZN8S20282C63v11Ev();
extern void _ZN8S20282C63v12Ev();
extern void _ZN8S20282C63v13Ev();
extern void _ZN8S20282C53v20Ev();
extern void _ZN8S20282C53v21Ev();
extern void _ZN8S20282C53v22Ev();
extern void _ZN8S20282C53v23Ev();
extern void _ZN8S20282C53v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20282C5__8S20282C4__8S20282C3[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20282C4[0]),
  (VTBL_ENTRY)&_ZN8S20282C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20282C4D1Ev,_ZTv0_n24_N8S20282C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20282C4D0Ev,_ZTv0_n24_N8S20282C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20282C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v24Ev,
};
extern void _ZN8S20282C83v14Ev();
extern void _ZN8S20282C83v15Ev();
extern void _ZN8S20282C83v16Ev();
extern void _ZN8S20282C83v17Ev();
extern void _ZN8S20282C83v18Ev();
extern void _ZN8S20282C83v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20282C88S20282C5__8S20282C4__8S20282C3[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20282C4[0]),
  (VTBL_ENTRY)&_ZN8S20282C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v19Ev,
};
static  VTT_ENTRY vtt_S20282C3[] = {
  {&(_ZTV8S20282C3[3]),  3,55},
  {&(_tg__ZTV8S20282C4__8S20282C3[3]),  3,8},
  {&(_tg__ZTV8S20282C5__8S20282C4__8S20282C3[22]),  22,37},
  {&(_tg__ZTV8S20282C88S20282C5__8S20282C4__8S20282C3[2]),  2,8},
  {&(_ZTV8S20282C3[32]),  32,55},
  {&(_ZTV8S20282C3[49]),  49,55},
};
extern VTBL_ENTRY _ZTI8S20282C3[];
extern  VTBL_ENTRY _ZTV8S20282C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20282C3[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20282C4D0Ev,_ZTv0_n24_N8S20282C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20282C4D0Ev,_ZThn8_N8S20282C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20282C4D1Ev,_ZTv0_n24_N8S20282C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20282C4D1Ev,_ZThn8_N8S20282C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20282C3D0Ev,_ZTv0_n24_N8S20282C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20282C3D0Ev,_ZThn8_N8S20282C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20282C3D1Ev,_ZTv0_n24_N8S20282C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20282C3D1Ev,_ZThn8_N8S20282C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20282C3 = {  "S20282C3", // class name
  bases_S20282C3, 5,
  &(vtc_S20282C3[0]), // expected_vtbl_contents
  &(vtt_S20282C3[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20282C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20282C3),55, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20282C3),6, //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  S20282C1  : virtual S20282C2 , S20282C3 {
  ::S20282C6 s20282c1f0;
  virtual void  v1(); // _ZN8S20282C12v1Ev
  virtual void  v2(); // _ZN8S20282C12v2Ev
  virtual void  v3(); // _ZN8S20282C12v3Ev
  virtual void  v4(); // _ZN8S20282C12v4Ev
  ~S20282C1(); // tgen
  S20282C1(); // tgen
};
//SIG(1 S20282C1) C1{ VBC2{ v5} BC3{ BC4{ VBC5{ BC6{ BC7{ v6 v7 v8} vd v9 v10 v11 v12 v13 Fp} BC8{ v14 v15 v16 v17 v18 v19 FC7 FL FD} vd v20 v21 v22 v23 v24 Fp} vd v25 v26 v27 Fi} vd v28 v29} v1 v2 v3 v4 FC6}


void  S20282C1 ::v1(){vfunc_called(this, "_ZN8S20282C12v1Ev");}
void  S20282C1 ::v2(){vfunc_called(this, "_ZN8S20282C12v2Ev");}
void  S20282C1 ::v3(){vfunc_called(this, "_ZN8S20282C12v3Ev");}
void  S20282C1 ::v4(){vfunc_called(this, "_ZN8S20282C12v4Ev");}
S20282C1 ::~S20282C1(){ note_dtor("S20282C1", this);} // tgen
S20282C1 ::S20282C1(){ note_ctor("S20282C1", this);} // tgen

static void Test_S20282C1()
{
  extern Class_Descriptor cd_S20282C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,16)];
    init_test(&cd_S20282C1, buf);
    S20282C1 *dp, &lv = *(dp=new (buf) S20282C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,60), "sizeof(S20282C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20282C1)");
    check_base_class_offset(lv, (S20282C2*), ABISELECT(32,16), "S20282C1");
    check_base_class_offset(lv, (S20282C7*)(S20282C6*)(S20282C5*), ABISELECT(48,20), "S20282C1");
    check_base_class_offset(lv, (S20282C6*)(S20282C5*), ABISELECT(48,20), "S20282C1");
    check_base_class_offset(lv, (S20282C8*)(S20282C5*), ABISELECT(64,28), "S20282C1");
    check_base_class_offset(lv, (S20282C5*)(S20282C4*)(S20282C3*), ABISELECT(48,20), "S20282C1");
    check_base_class_offset(lv, (S20282C4*)(S20282C3*), 0, "S20282C1");
    check_base_class_offset(lv, (S20282C3*), 0, "S20282C1");
    check_field_offset(lv, s20282c1f0, ABISELECT(16,8), "S20282C1.s20282c1f0");
    test_class_info(&lv, &cd_S20282C1);
    dp->~S20282C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20282C1(Test_S20282C1, "S20282C1", ABISELECT(128,60));

#else // __cplusplus

extern void _ZN8S20282C1C1Ev();
extern void _ZN8S20282C1D1Ev();
Name_Map name_map_S20282C1[] = {
  NSPAIR(_ZN8S20282C1C1Ev),
  NSPAIR(_ZN8S20282C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20282C2;
extern VTBL_ENTRY _ZTI8S20282C2[];
extern  VTBL_ENTRY _ZTV8S20282C2[];
extern Class_Descriptor cd_S20282C7;
extern VTBL_ENTRY _ZTI8S20282C7[];
extern  VTBL_ENTRY _ZTV8S20282C7[];
extern Class_Descriptor cd_S20282C6;
extern VTBL_ENTRY _ZTI8S20282C6[];
extern  VTBL_ENTRY _ZTV8S20282C6[];
extern Class_Descriptor cd_S20282C8;
extern VTBL_ENTRY _ZTI8S20282C8[];
extern  VTBL_ENTRY _ZTV8S20282C8[];
extern Class_Descriptor cd_S20282C5;
extern VTBL_ENTRY _ZTI8S20282C5[];
extern  VTBL_ENTRY _ZTV8S20282C5[];
extern Class_Descriptor cd_S20282C4;
extern VTBL_ENTRY _ZTI8S20282C4[];
extern  VTBL_ENTRY _ZTV8S20282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20282C4[];
extern Class_Descriptor cd_S20282C3;
extern VTBL_ENTRY _ZTI8S20282C3[];
extern  VTBL_ENTRY _ZTV8S20282C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20282C3[];
static Base_Class bases_S20282C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20282C2,    ABISELECT(32,16), //bcp->offset
    15, //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_S20282C7,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20282C6,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20282C8,    ABISELECT(64,28), //bcp->offset
    56, //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20282C5,    ABISELECT(48,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20282C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20282C3,    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 _ZTI8S20282C1[];
extern void _ZN8S20282C1D1Ev();
extern void _ZN8S20282C1D0Ev();
extern void _ZN8S20282C43v25Ev();
extern void _ZN8S20282C43v26Ev();
extern void _ZN8S20282C43v27Ev();
extern void _ZN8S20282C33v28Ev();
extern void _ZN8S20282C33v29Ev();
extern void _ZN8S20282C12v1Ev();
extern void _ZN8S20282C12v2Ev();
extern void _ZN8S20282C12v3Ev();
extern void _ZN8S20282C12v4Ev();
extern void _ZN8S20282C22v5Ev();
extern void _ZN8S20282C72v6Ev();
extern void _ZN8S20282C72v7Ev();
extern void _ZN8S20282C72v8Ev();
extern void ABISELECT(_ZTv0_n48_N8S20282C1D1Ev,_ZTv0_n24_N8S20282C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S20282C1D1Ev,_ZThn20_N8S20282C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20282C1D0Ev,_ZTv0_n24_N8S20282C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S20282C1D0Ev,_ZThn20_N8S20282C1D0Ev)() __attribute__((weak));
extern void _ZN8S20282C62v9Ev();
extern void _ZN8S20282C63v10Ev();
extern void _ZN8S20282C63v11Ev();
extern void _ZN8S20282C63v12Ev();
extern void _ZN8S20282C63v13Ev();
extern void _ZN8S20282C53v20Ev();
extern void _ZN8S20282C53v21Ev();
extern void _ZN8S20282C53v22Ev();
extern void _ZN8S20282C53v23Ev();
extern void _ZN8S20282C53v24Ev();
extern void _ZN8S20282C83v14Ev();
extern void _ZN8S20282C83v15Ev();
extern void _ZN8S20282C83v16Ev();
extern void _ZN8S20282C83v17Ev();
extern void _ZN8S20282C83v18Ev();
extern void _ZN8S20282C83v19Ev();
static  VTBL_ENTRY vtc_S20282C1[] = {
  ABISELECT(32,16),
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20282C1[0]),
  (VTBL_ENTRY)&_ZN8S20282C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20282C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20282C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20282C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20282C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20282C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20282C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20282C12v4Ev,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20282C1[0]),
  (VTBL_ENTRY)&_ZN8S20282C22v5Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S20282C1[0]),
  (VTBL_ENTRY)&_ZN8S20282C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20282C1D1Ev,_ZTv0_n24_N8S20282C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20282C1D0Ev,_ZTv0_n24_N8S20282C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20282C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v24Ev,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S20282C1[0]),
  (VTBL_ENTRY)&_ZN8S20282C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v19Ev,
};
extern VTBL_ENTRY _ZTV8S20282C1[];
extern void _ZN8S20282C3D1Ev();
extern void _ZN8S20282C3D0Ev();
extern void _ZN8S20282C43v25Ev();
extern void _ZN8S20282C43v26Ev();
extern void _ZN8S20282C43v27Ev();
extern void _ZN8S20282C33v28Ev();
extern void _ZN8S20282C33v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20282C3__8S20282C1[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20282C3[0]),
  (VTBL_ENTRY)&_ZN8S20282C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20282C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20282C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20282C33v29Ev,
};
extern void _ZN8S20282C4D1Ev();
extern void _ZN8S20282C4D0Ev();
extern void _ZN8S20282C43v25Ev();
extern void _ZN8S20282C43v26Ev();
extern void _ZN8S20282C43v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20282C48S20282C3__8S20282C1[] = {
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20282C4[0]),
  (VTBL_ENTRY)&_ZN8S20282C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20282C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20282C43v27Ev,
};
extern void _ZN8S20282C72v6Ev();
extern void _ZN8S20282C72v7Ev();
extern void _ZN8S20282C72v8Ev();
extern void ABISELECT(_ZTv0_n48_N8S20282C4D1Ev,_ZTv0_n24_N8S20282C4D1Ev)();
extern void ABISELECT(_ZThn48_N8S20282C4D1Ev,_ZThn20_N8S20282C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20282C4D0Ev,_ZTv0_n24_N8S20282C4D0Ev)();
extern void ABISELECT(_ZThn48_N8S20282C4D0Ev,_ZThn20_N8S20282C4D0Ev)() __attribute__((weak));
extern void _ZN8S20282C62v9Ev();
extern void _ZN8S20282C63v10Ev();
extern void _ZN8S20282C63v11Ev();
extern void _ZN8S20282C63v12Ev();
extern void _ZN8S20282C63v13Ev();
extern void _ZN8S20282C53v20Ev();
extern void _ZN8S20282C53v21Ev();
extern void _ZN8S20282C53v22Ev();
extern void _ZN8S20282C53v23Ev();
extern void _ZN8S20282C53v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20282C5__8S20282C48S20282C3__8S20282C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S20282C4[0]),
  (VTBL_ENTRY)&_ZN8S20282C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20282C4D1Ev,_ZTv0_n24_N8S20282C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20282C4D0Ev,_ZTv0_n24_N8S20282C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20282C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v24Ev,
};
extern void _ZN8S20282C83v14Ev();
extern void _ZN8S20282C83v15Ev();
extern void _ZN8S20282C83v16Ev();
extern void _ZN8S20282C83v17Ev();
extern void _ZN8S20282C83v18Ev();
extern void _ZN8S20282C83v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20282C88S20282C5__8S20282C48S20282C3__8S20282C1[] = {
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S20282C4[0]),
  (VTBL_ENTRY)&_ZN8S20282C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v19Ev,
};
extern void _ZN8S20282C72v6Ev();
extern void _ZN8S20282C72v7Ev();
extern void _ZN8S20282C72v8Ev();
extern void ABISELECT(_ZTv0_n48_N8S20282C3D1Ev,_ZTv0_n24_N8S20282C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S20282C3D1Ev,_ZThn20_N8S20282C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20282C3D0Ev,_ZTv0_n24_N8S20282C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S20282C3D0Ev,_ZThn20_N8S20282C3D0Ev)() __attribute__((weak));
extern void _ZN8S20282C62v9Ev();
extern void _ZN8S20282C63v10Ev();
extern void _ZN8S20282C63v11Ev();
extern void _ZN8S20282C63v12Ev();
extern void _ZN8S20282C63v13Ev();
extern void _ZN8S20282C53v20Ev();
extern void _ZN8S20282C53v21Ev();
extern void _ZN8S20282C53v22Ev();
extern void _ZN8S20282C53v23Ev();
extern void _ZN8S20282C53v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20282C5__8S20282C3__8S20282C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  0,
  0,
  0,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S20282C3[0]),
  (VTBL_ENTRY)&_ZN8S20282C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20282C72v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20282C3D1Ev,_ZTv0_n24_N8S20282C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20282C3D0Ev,_ZTv0_n24_N8S20282C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20282C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20282C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v22Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v23Ev,
  (VTBL_ENTRY)&_ZN8S20282C53v24Ev,
};
extern void _ZN8S20282C83v14Ev();
extern void _ZN8S20282C83v15Ev();
extern void _ZN8S20282C83v16Ev();
extern void _ZN8S20282C83v17Ev();
extern void _ZN8S20282C83v18Ev();
extern void _ZN8S20282C83v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20282C88S20282C5__8S20282C3__8S20282C1[] = {
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S20282C3[0]),
  (VTBL_ENTRY)&_ZN8S20282C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v18Ev,
  (VTBL_ENTRY)&_ZN8S20282C83v19Ev,
};
static  VTT_ENTRY vtt_S20282C1[] = {
  {&(_ZTV8S20282C1[4]),  4,64},
  {&(_tg__ZTV8S20282C3__8S20282C1[3]),  3,10},
  {&(_tg__ZTV8S20282C48S20282C3__8S20282C1[3]),  3,8},
  {&(_tg__ZTV8S20282C5__8S20282C48S20282C3__8S20282C1[22]),  22,37},
  {&(_tg__ZTV8S20282C88S20282C5__8S20282C48S20282C3__8S20282C1[2]),  2,8},
  {&(_tg__ZTV8S20282C5__8S20282C3__8S20282C1[22]),  22,37},
  {&(_tg__ZTV8S20282C88S20282C5__8S20282C3__8S20282C1[2]),  2,8},
  {&(_ZTV8S20282C1[18]),  18,64},
  {&(_ZTV8S20282C1[41]),  41,64},
  {&(_ZTV8S20282C1[58]),  58,64},
};
extern VTBL_ENTRY _ZTI8S20282C1[];
extern  VTBL_ENTRY _ZTV8S20282C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20282C1[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20282C3D0Ev,_ZTv0_n24_N8S20282C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20282C3D0Ev,_ZThn20_N8S20282C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20282C3D1Ev,_ZTv0_n24_N8S20282C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20282C3D1Ev,_ZThn20_N8S20282C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20282C4D0Ev,_ZTv0_n24_N8S20282C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20282C4D0Ev,_ZThn20_N8S20282C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20282C4D1Ev,_ZTv0_n24_N8S20282C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20282C4D1Ev,_ZThn20_N8S20282C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20282C1D0Ev,_ZTv0_n24_N8S20282C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20282C1D0Ev,_ZThn20_N8S20282C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20282C1D1Ev,_ZTv0_n24_N8S20282C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20282C1D1Ev,_ZThn20_N8S20282C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20282C1 = {  "S20282C1", // class name
  bases_S20282C1, 7,
  &(vtc_S20282C1[0]), // expected_vtbl_contents
  &(vtt_S20282C1[0]), // expected_vtt_contents
  ABISELECT(128,60), // object size
  NSPAIRA(_ZTI8S20282C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20282C1),64, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20282C1),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3957C2  : S1766C4_nt {
  int s3957c2f0;
  void *s3957c2f1[2];
  int s3957c2f2;
  virtual  ~S3957C2(); // _ZN7S3957C2D1Ev
  virtual void  v12(); // _ZN7S3957C23v12Ev
  virtual void  v13(); // _ZN7S3957C23v13Ev
  virtual void  v14(); // _ZN7S3957C23v14Ev
  virtual void  v15(); // _ZN7S3957C23v15Ev
  virtual void  v16(); // _ZN7S3957C23v16Ev
  virtual void  v17(); // _ZN7S3957C23v17Ev
  virtual void  v18(); // _ZN7S3957C23v18Ev
  virtual void  v19(); // _ZN7S3957C23v19Ev
  virtual void  v20(); // _ZN7S3957C23v20Ev
  virtual void  v21(); // _ZN7S3957C23v21Ev
  virtual void  v22(); // _ZN7S3957C23v22Ev
  S3957C2(); // tgen
};
//SIG(-1 S3957C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S3957C2 ::~S3957C2(){ note_dtor("S3957C2", this);}
void  S3957C2 ::v12(){vfunc_called(this, "_ZN7S3957C23v12Ev");}
void  S3957C2 ::v13(){vfunc_called(this, "_ZN7S3957C23v13Ev");}
void  S3957C2 ::v14(){vfunc_called(this, "_ZN7S3957C23v14Ev");}
void  S3957C2 ::v15(){vfunc_called(this, "_ZN7S3957C23v15Ev");}
void  S3957C2 ::v16(){vfunc_called(this, "_ZN7S3957C23v16Ev");}
void  S3957C2 ::v17(){vfunc_called(this, "_ZN7S3957C23v17Ev");}
void  S3957C2 ::v18(){vfunc_called(this, "_ZN7S3957C23v18Ev");}
void  S3957C2 ::v19(){vfunc_called(this, "_ZN7S3957C23v19Ev");}
void  S3957C2 ::v20(){vfunc_called(this, "_ZN7S3957C23v20Ev");}
void  S3957C2 ::v21(){vfunc_called(this, "_ZN7S3957C23v21Ev");}
void  S3957C2 ::v22(){vfunc_called(this, "_ZN7S3957C23v22Ev");}
S3957C2 ::S3957C2(){ note_ctor("S3957C2", this);} // tgen

static void Test_S3957C2()
{
  extern Class_Descriptor cd_S3957C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3957C2, buf);
    S3957C2 *dp, &lv = *(dp=new (buf) S3957C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3957C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3957C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3957C2");
    check_field_offset(lv, s3957c2f0, ABISELECT(16,12), "S3957C2.s3957c2f0");
    check_field_offset(lv, s3957c2f1, ABISELECT(24,16), "S3957C2.s3957c2f1");
    check_field_offset(lv, s3957c2f2, ABISELECT(40,24), "S3957C2.s3957c2f2");
    test_class_info(&lv, &cd_S3957C2);
    dp->~S3957C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3957C2(Test_S3957C2, "S3957C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3957C2C1Ev();
extern void _ZN7S3957C2D1Ev();
Name_Map name_map_S3957C2[] = {
  NSPAIR(_ZN7S3957C2C1Ev),
  NSPAIR(_ZN7S3957C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3957C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3957C2[];
extern void _ZN7S3957C2D1Ev();
extern void _ZN7S3957C2D0Ev();
extern void _ZN7S3957C23v12Ev();
extern void _ZN7S3957C23v13Ev();
extern void _ZN7S3957C23v14Ev();
extern void _ZN7S3957C23v15Ev();
extern void _ZN7S3957C23v16Ev();
extern void _ZN7S3957C23v17Ev();
extern void _ZN7S3957C23v18Ev();
extern void _ZN7S3957C23v19Ev();
extern void _ZN7S3957C23v20Ev();
extern void _ZN7S3957C23v21Ev();
extern void _ZN7S3957C23v22Ev();
static  VTBL_ENTRY vtc_S3957C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3957C2[0]),
  (VTBL_ENTRY)&_ZN7S3957C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3957C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v22Ev,
};
extern VTBL_ENTRY _ZTI7S3957C2[];
extern  VTBL_ENTRY _ZTV7S3957C2[];
Class_Descriptor cd_S3957C2 = {  "S3957C2", // class name
  bases_S3957C2, 1,
  &(vtc_S3957C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3957C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3957C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3957C4  {
  virtual  ~S3957C4(); // _ZN7S3957C4D1Ev
  virtual void  v23(); // _ZN7S3957C43v23Ev
  virtual void  v24(); // _ZN7S3957C43v24Ev
  S3957C4(); // tgen
};
//SIG(-1 S3957C4) C1{ vd v1 v2}


 S3957C4 ::~S3957C4(){ note_dtor("S3957C4", this);}
void  S3957C4 ::v23(){vfunc_called(this, "_ZN7S3957C43v23Ev");}
void  S3957C4 ::v24(){vfunc_called(this, "_ZN7S3957C43v24Ev");}
S3957C4 ::S3957C4(){ note_ctor("S3957C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3957C4C1Ev();
extern void _ZN7S3957C4D1Ev();
Name_Map name_map_S3957C4[] = {
  NSPAIR(_ZN7S3957C4C1Ev),
  NSPAIR(_ZN7S3957C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3957C4[];
extern void _ZN7S3957C4D1Ev();
extern void _ZN7S3957C4D0Ev();
extern void _ZN7S3957C43v23Ev();
extern void _ZN7S3957C43v24Ev();
static  VTBL_ENTRY vtc_S3957C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3957C4[0]),
  (VTBL_ENTRY)&_ZN7S3957C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3957C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3957C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3957C43v24Ev,
};
extern VTBL_ENTRY _ZTI7S3957C4[];
extern  VTBL_ENTRY _ZTV7S3957C4[];
Class_Descriptor cd_S3957C4 = {  "S3957C4", // class name
  0,0,//no base classes
  &(vtc_S3957C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3957C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3957C4),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  S3957C1  : S3957C2 , S3957C4 {
  void *s3957c1f0[3];
  char s3957c1f1;
  ::S3961C7_nt s3957c1f2;
  ::S3961C7_nt s3957c1f3;
  int s3957c1f4[4];
  virtual  ~S3957C1(); // _ZN7S3957C1D1Ev
  virtual void  v1(); // _ZN7S3957C12v1Ev
  virtual void  v2(); // _ZN7S3957C12v2Ev
  virtual void  v3(); // _ZN7S3957C12v3Ev
  virtual void  v4(); // _ZN7S3957C12v4Ev
  virtual void  v5(); // _ZN7S3957C12v5Ev
  virtual void  v6(); // _ZN7S3957C12v6Ev
  virtual void  v7(); // _ZN7S3957C12v7Ev
  virtual void  v8(); // _ZN7S3957C12v8Ev
  virtual void  v9(); // _ZN7S3957C12v9Ev
  virtual void  v10(); // _ZN7S3957C13v10Ev
  virtual void  v11(); // _ZN7S3957C13v11Ev
  S3957C1(); // tgen
};
//SIG(1 S3957C1) C1{ BC2{ BC3{ vd m FL} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi Fp[2] Fi} BC4{ vd v23 v24} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] Fc FC5{ BC3 vd Fp Fi[4] Fp} FC5 Fi[4]}


 S3957C1 ::~S3957C1(){ note_dtor("S3957C1", this);}
void  S3957C1 ::v1(){vfunc_called(this, "_ZN7S3957C12v1Ev");}
void  S3957C1 ::v2(){vfunc_called(this, "_ZN7S3957C12v2Ev");}
void  S3957C1 ::v3(){vfunc_called(this, "_ZN7S3957C12v3Ev");}
void  S3957C1 ::v4(){vfunc_called(this, "_ZN7S3957C12v4Ev");}
void  S3957C1 ::v5(){vfunc_called(this, "_ZN7S3957C12v5Ev");}
void  S3957C1 ::v6(){vfunc_called(this, "_ZN7S3957C12v6Ev");}
void  S3957C1 ::v7(){vfunc_called(this, "_ZN7S3957C12v7Ev");}
void  S3957C1 ::v8(){vfunc_called(this, "_ZN7S3957C12v8Ev");}
void  S3957C1 ::v9(){vfunc_called(this, "_ZN7S3957C12v9Ev");}
void  S3957C1 ::v10(){vfunc_called(this, "_ZN7S3957C13v10Ev");}
void  S3957C1 ::v11(){vfunc_called(this, "_ZN7S3957C13v11Ev");}
S3957C1 ::S3957C1(){ note_ctor("S3957C1", this);} // tgen

static void Test_S3957C1()
{
  extern Class_Descriptor cd_S3957C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,35)];
    init_test(&cd_S3957C1, buf);
    S3957C1 *dp, &lv = *(dp=new (buf) S3957C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,136), "sizeof(S3957C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3957C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3957C2*), 0, "S3957C1");
    check_base_class_offset(lv, (S3957C2*), 0, "S3957C1");
    check_base_class_offset(lv, (S3957C4*), ABISELECT(48,28), "S3957C1");
    check_field_offset(lv, s3957c1f0, ABISELECT(56,32), "S3957C1.s3957c1f0");
    check_field_offset(lv, s3957c1f1, ABISELECT(80,44), "S3957C1.s3957c1f1");
    check_field_offset(lv, s3957c1f2, ABISELECT(88,48), "S3957C1.s3957c1f2");
    check_field_offset(lv, s3957c1f3, ABISELECT(136,84), "S3957C1.s3957c1f3");
    check_field_offset(lv, s3957c1f4, ABISELECT(184,120), "S3957C1.s3957c1f4");
    test_class_info(&lv, &cd_S3957C1);
    dp->~S3957C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3957C1(Test_S3957C1, "S3957C1", ABISELECT(200,136));

#else // __cplusplus

extern void _ZN7S3957C1C1Ev();
extern void _ZN7S3957C1D1Ev();
Name_Map name_map_S3957C1[] = {
  NSPAIR(_ZN7S3957C1C1Ev),
  NSPAIR(_ZN7S3957C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3957C2;
extern VTBL_ENTRY _ZTI7S3957C2[];
extern  VTBL_ENTRY _ZTV7S3957C2[];
extern Class_Descriptor cd_S3957C4;
extern VTBL_ENTRY _ZTI7S3957C4[];
extern  VTBL_ENTRY _ZTV7S3957C4[];
static Base_Class bases_S3957C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3957C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3957C4,    ABISELECT(48,28), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3957C1[];
extern void _ZN7S3957C1D1Ev();
extern void _ZN7S3957C1D0Ev();
extern void _ZN7S3957C23v12Ev();
extern void _ZN7S3957C23v13Ev();
extern void _ZN7S3957C23v14Ev();
extern void _ZN7S3957C23v15Ev();
extern void _ZN7S3957C23v16Ev();
extern void _ZN7S3957C23v17Ev();
extern void _ZN7S3957C23v18Ev();
extern void _ZN7S3957C23v19Ev();
extern void _ZN7S3957C23v20Ev();
extern void _ZN7S3957C23v21Ev();
extern void _ZN7S3957C23v22Ev();
extern void _ZN7S3957C12v1Ev();
extern void _ZN7S3957C12v2Ev();
extern void _ZN7S3957C12v3Ev();
extern void _ZN7S3957C12v4Ev();
extern void _ZN7S3957C12v5Ev();
extern void _ZN7S3957C12v6Ev();
extern void _ZN7S3957C12v7Ev();
extern void _ZN7S3957C12v8Ev();
extern void _ZN7S3957C12v9Ev();
extern void _ZN7S3957C13v10Ev();
extern void _ZN7S3957C13v11Ev();
extern void ABISELECT(_ZThn48_N7S3957C1D1Ev,_ZThn28_N7S3957C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3957C1D0Ev,_ZThn28_N7S3957C1D0Ev)();
extern void _ZN7S3957C43v23Ev();
extern void _ZN7S3957C43v24Ev();
static  VTBL_ENTRY vtc_S3957C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3957C1[0]),
  (VTBL_ENTRY)&_ZN7S3957C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3957C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3957C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3957C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3957C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3957C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3957C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3957C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3957C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3957C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3957C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3957C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3957C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3957C13v11Ev,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3957C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3957C1D1Ev,_ZThn28_N7S3957C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3957C1D0Ev,_ZThn28_N7S3957C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3957C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3957C43v24Ev,
};
extern VTBL_ENTRY _ZTI7S3957C1[];
extern  VTBL_ENTRY _ZTV7S3957C1[];
Class_Descriptor cd_S3957C1 = {  "S3957C1", // class name
  bases_S3957C1, 3,
  &(vtc_S3957C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,136), // object size
  NSPAIRA(_ZTI7S3957C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3957C1),32, //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  S20508C4  {
  virtual void  v1(); // _ZN8S20508C42v1Ev
  virtual void  v2(); // _ZN8S20508C42v2Ev
  virtual void  v3(); // _ZN8S20508C42v3Ev
  ~S20508C4(); // tgen
  S20508C4(); // tgen
};
//SIG(-1 S20508C4) C1{ v1 v2 v3}


void  S20508C4 ::v1(){vfunc_called(this, "_ZN8S20508C42v1Ev");}
void  S20508C4 ::v2(){vfunc_called(this, "_ZN8S20508C42v2Ev");}
void  S20508C4 ::v3(){vfunc_called(this, "_ZN8S20508C42v3Ev");}
S20508C4 ::~S20508C4(){ note_dtor("S20508C4", this);} // tgen
S20508C4 ::S20508C4(){ note_ctor("S20508C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20508C4C1Ev();
extern void _ZN8S20508C4D1Ev();
Name_Map name_map_S20508C4[] = {
  NSPAIR(_ZN8S20508C4C1Ev),
  NSPAIR(_ZN8S20508C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20508C4[];
extern void _ZN8S20508C42v1Ev();
extern void _ZN8S20508C42v2Ev();
extern void _ZN8S20508C42v3Ev();
static  VTBL_ENTRY vtc_S20508C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20508C4[0]),
  (VTBL_ENTRY)&_ZN8S20508C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v3Ev,
};
extern VTBL_ENTRY _ZTI8S20508C4[];
extern  VTBL_ENTRY _ZTV8S20508C4[];
Class_Descriptor cd_S20508C4 = {  "S20508C4", // class name
  0,0,//no base classes
  &(vtc_S20508C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20508C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20508C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20508C3  : S20508C4 {
  void *s20508c3f0;
  virtual  ~S20508C3(); // _ZN8S20508C3D1Ev
  virtual void  v4(); // _ZN8S20508C32v4Ev
  virtual void  v5(); // _ZN8S20508C32v5Ev
  virtual void  v6(); // _ZN8S20508C32v6Ev
  virtual void  v7(); // _ZN8S20508C32v7Ev
  virtual void  v8(); // _ZN8S20508C32v8Ev
  S20508C3(); // tgen
};
//SIG(-1 S20508C3) C1{ BC2{ v6 v7 v8} vd v1 v2 v3 v4 v5 Fp}


 S20508C3 ::~S20508C3(){ note_dtor("S20508C3", this);}
void  S20508C3 ::v4(){vfunc_called(this, "_ZN8S20508C32v4Ev");}
void  S20508C3 ::v5(){vfunc_called(this, "_ZN8S20508C32v5Ev");}
void  S20508C3 ::v6(){vfunc_called(this, "_ZN8S20508C32v6Ev");}
void  S20508C3 ::v7(){vfunc_called(this, "_ZN8S20508C32v7Ev");}
void  S20508C3 ::v8(){vfunc_called(this, "_ZN8S20508C32v8Ev");}
S20508C3 ::S20508C3(){ note_ctor("S20508C3", this);} // tgen

static void Test_S20508C3()
{
  extern Class_Descriptor cd_S20508C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20508C3, buf);
    S20508C3 *dp, &lv = *(dp=new (buf) S20508C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20508C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20508C3)");
    check_base_class_offset(lv, (S20508C4*), 0, "S20508C3");
    check_field_offset(lv, s20508c3f0, ABISELECT(8,4), "S20508C3.s20508c3f0");
    test_class_info(&lv, &cd_S20508C3);
    dp->~S20508C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20508C3(Test_S20508C3, "S20508C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20508C3C1Ev();
extern void _ZN8S20508C3D1Ev();
Name_Map name_map_S20508C3[] = {
  NSPAIR(_ZN8S20508C3C1Ev),
  NSPAIR(_ZN8S20508C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20508C4;
extern VTBL_ENTRY _ZTI8S20508C4[];
extern  VTBL_ENTRY _ZTV8S20508C4[];
static Base_Class bases_S20508C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20508C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20508C3[];
extern void _ZN8S20508C42v1Ev();
extern void _ZN8S20508C42v2Ev();
extern void _ZN8S20508C42v3Ev();
extern void _ZN8S20508C3D1Ev();
extern void _ZN8S20508C3D0Ev();
extern void _ZN8S20508C32v4Ev();
extern void _ZN8S20508C32v5Ev();
extern void _ZN8S20508C32v6Ev();
extern void _ZN8S20508C32v7Ev();
extern void _ZN8S20508C32v8Ev();
static  VTBL_ENTRY vtc_S20508C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20508C3[0]),
  (VTBL_ENTRY)&_ZN8S20508C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20508C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20508C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S20508C3[];
extern  VTBL_ENTRY _ZTV8S20508C3[];
Class_Descriptor cd_S20508C3 = {  "S20508C3", // class name
  bases_S20508C3, 1,
  &(vtc_S20508C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20508C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20508C3),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  S20508C6  {
  void *s20508c6f0[10];
  ::S20508C4 s20508c6f1;
  virtual  ~S20508C6(); // _ZN8S20508C6D1Ev
  virtual void  v9(); // _ZN8S20508C62v9Ev
  virtual void  v10(); // _ZN8S20508C63v10Ev
  virtual void  v11(); // _ZN8S20508C63v11Ev
  S20508C6(); // tgen
};
//SIG(-1 S20508C6) C1{ vd v1 v2 v3 Fp[10] FC2{ v4 v5 v6}}


 S20508C6 ::~S20508C6(){ note_dtor("S20508C6", this);}
void  S20508C6 ::v9(){vfunc_called(this, "_ZN8S20508C62v9Ev");}
void  S20508C6 ::v10(){vfunc_called(this, "_ZN8S20508C63v10Ev");}
void  S20508C6 ::v11(){vfunc_called(this, "_ZN8S20508C63v11Ev");}
S20508C6 ::S20508C6(){ note_ctor("S20508C6", this);} // tgen

static void Test_S20508C6()
{
  extern Class_Descriptor cd_S20508C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S20508C6, buf);
    S20508C6 *dp, &lv = *(dp=new (buf) S20508C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20508C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20508C6)");
    check_field_offset(lv, s20508c6f0, ABISELECT(8,4), "S20508C6.s20508c6f0");
    check_field_offset(lv, s20508c6f1, ABISELECT(88,44), "S20508C6.s20508c6f1");
    test_class_info(&lv, &cd_S20508C6);
    dp->~S20508C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20508C6(Test_S20508C6, "S20508C6", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20508C6C1Ev();
extern void _ZN8S20508C6D1Ev();
Name_Map name_map_S20508C6[] = {
  NSPAIR(_ZN8S20508C6C1Ev),
  NSPAIR(_ZN8S20508C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20508C6[];
extern void _ZN8S20508C6D1Ev();
extern void _ZN8S20508C6D0Ev();
extern void _ZN8S20508C62v9Ev();
extern void _ZN8S20508C63v10Ev();
extern void _ZN8S20508C63v11Ev();
static  VTBL_ENTRY vtc_S20508C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20508C6[0]),
  (VTBL_ENTRY)&_ZN8S20508C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20508C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20508C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v11Ev,
};
extern VTBL_ENTRY _ZTI8S20508C6[];
extern  VTBL_ENTRY _ZTV8S20508C6[];
Class_Descriptor cd_S20508C6 = {  "S20508C6", // class name
  0,0,//no base classes
  &(vtc_S20508C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20508C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20508C6),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  S20508C5  : S20508C6 , virtual S20508C4 {
  virtual void  v12(); // _ZN8S20508C53v12Ev
  virtual void  v13(); // _ZN8S20508C53v13Ev
  virtual void  v14(); // _ZN8S20508C53v14Ev
  virtual void  v15(); // _ZN8S20508C53v15Ev
  virtual void  v16(); // _ZN8S20508C53v16Ev
  virtual void  v17(); // _ZN8S20508C53v17Ev
  virtual void  v18(); // _ZN8S20508C53v18Ev
  virtual void  v19(); // _ZN8S20508C53v19Ev
  virtual void  v20(); // _ZN8S20508C53v20Ev
  virtual void  v21(); // _ZN8S20508C53v21Ev
  ~S20508C5(); // tgen
  S20508C5(); // tgen
};
//SIG(-1 S20508C5) C1{ BC2{ vd v11 v12 v13 Fp[10] FC3{ v14 v15 v16}} VBC3 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


void  S20508C5 ::v12(){vfunc_called(this, "_ZN8S20508C53v12Ev");}
void  S20508C5 ::v13(){vfunc_called(this, "_ZN8S20508C53v13Ev");}
void  S20508C5 ::v14(){vfunc_called(this, "_ZN8S20508C53v14Ev");}
void  S20508C5 ::v15(){vfunc_called(this, "_ZN8S20508C53v15Ev");}
void  S20508C5 ::v16(){vfunc_called(this, "_ZN8S20508C53v16Ev");}
void  S20508C5 ::v17(){vfunc_called(this, "_ZN8S20508C53v17Ev");}
void  S20508C5 ::v18(){vfunc_called(this, "_ZN8S20508C53v18Ev");}
void  S20508C5 ::v19(){vfunc_called(this, "_ZN8S20508C53v19Ev");}
void  S20508C5 ::v20(){vfunc_called(this, "_ZN8S20508C53v20Ev");}
void  S20508C5 ::v21(){vfunc_called(this, "_ZN8S20508C53v21Ev");}
S20508C5 ::~S20508C5(){ note_dtor("S20508C5", this);} // tgen
S20508C5 ::S20508C5(){ note_ctor("S20508C5", this);} // tgen

static void Test_S20508C5()
{
  extern Class_Descriptor cd_S20508C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[14];
    init_test(&cd_S20508C5, buf);
    S20508C5 *dp, &lv = *(dp=new (buf) S20508C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S20508C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20508C5)");
    check_base_class_offset(lv, (S20508C6*), 0, "S20508C5");
    check_base_class_offset(lv, (S20508C4*), ABISELECT(96,48), "S20508C5");
    test_class_info(&lv, &cd_S20508C5);
    dp->~S20508C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20508C5(Test_S20508C5, "S20508C5", ABISELECT(104,52));

#else // __cplusplus

extern void _ZN8S20508C5C1Ev();
extern void _ZN8S20508C5D1Ev();
Name_Map name_map_S20508C5[] = {
  NSPAIR(_ZN8S20508C5C1Ev),
  NSPAIR(_ZN8S20508C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20508C6;
extern VTBL_ENTRY _ZTI8S20508C6[];
extern  VTBL_ENTRY _ZTV8S20508C6[];
extern Class_Descriptor cd_S20508C4;
extern VTBL_ENTRY _ZTI8S20508C4[];
extern  VTBL_ENTRY _ZTV8S20508C4[];
static Base_Class bases_S20508C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20508C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20508C4,    ABISELECT(96,48), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20508C5[];
extern void _ZN8S20508C5D1Ev();
extern void _ZN8S20508C5D0Ev();
extern void _ZN8S20508C62v9Ev();
extern void _ZN8S20508C63v10Ev();
extern void _ZN8S20508C63v11Ev();
extern void _ZN8S20508C53v12Ev();
extern void _ZN8S20508C53v13Ev();
extern void _ZN8S20508C53v14Ev();
extern void _ZN8S20508C53v15Ev();
extern void _ZN8S20508C53v16Ev();
extern void _ZN8S20508C53v17Ev();
extern void _ZN8S20508C53v18Ev();
extern void _ZN8S20508C53v19Ev();
extern void _ZN8S20508C53v20Ev();
extern void _ZN8S20508C53v21Ev();
extern void _ZN8S20508C42v1Ev();
extern void _ZN8S20508C42v2Ev();
extern void _ZN8S20508C42v3Ev();
static  VTBL_ENTRY vtc_S20508C5[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20508C5[0]),
  (VTBL_ENTRY)&_ZN8S20508C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20508C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20508C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v21Ev,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20508C5[0]),
  (VTBL_ENTRY)&_ZN8S20508C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20508C5[];
static  VTT_ENTRY vtt_S20508C5[] = {
  {&(_ZTV8S20508C5[3]),  3,26},
  {&(_ZTV8S20508C5[23]),  23,26},
};
extern VTBL_ENTRY _ZTI8S20508C5[];
extern  VTBL_ENTRY _ZTV8S20508C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20508C5[];
Class_Descriptor cd_S20508C5 = {  "S20508C5", // class name
  bases_S20508C5, 2,
  &(vtc_S20508C5[0]), // expected_vtbl_contents
  &(vtt_S20508C5[0]), // expected_vtt_contents
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI8S20508C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20508C5),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20508C5),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20508C7_nt  {
  void *s20508c7f0;
  int s20508c7f1;
  virtual void  v24(); // _ZN11S20508C7_nt3v24Ev
  virtual void  v25(); // _ZN11S20508C7_nt3v25Ev
  ~S20508C7_nt(); // tgen
  S20508C7_nt(); // tgen
};
//SIG(1 S20508C7_nt) C1{ v1 v2 Fp Fi}


void  S20508C7_nt ::v24(){vfunc_called(this, "_ZN11S20508C7_nt3v24Ev");}
void  S20508C7_nt ::v25(){vfunc_called(this, "_ZN11S20508C7_nt3v25Ev");}
S20508C7_nt ::~S20508C7_nt(){ note_dtor("S20508C7_nt", this);} // tgen
S20508C7_nt ::S20508C7_nt(){ note_ctor("S20508C7_nt", this);} // tgen

//skip512 S20508C7_nt

#else // __cplusplus

extern void _ZN11S20508C7_ntC1Ev();
extern void _ZN11S20508C7_ntD1Ev();
Name_Map name_map_S20508C7_nt[] = {
  NSPAIR(_ZN11S20508C7_ntC1Ev),
  NSPAIR(_ZN11S20508C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20508C7_nt[];
extern void _ZN11S20508C7_nt3v24Ev();
extern void _ZN11S20508C7_nt3v25Ev();
static  VTBL_ENTRY vtc_S20508C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20508C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S20508C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S20508C7_nt3v25Ev,
};
extern VTBL_ENTRY _ZTI11S20508C7_nt[];
VTBL_ENTRY *P__ZTI11S20508C7_nt = _ZTI11S20508C7_nt; 
extern  VTBL_ENTRY _ZTV11S20508C7_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20508C2  : virtual S20508C3 , S20508C5 {
  char s20508c2f0;
  ::S20508C7_nt s20508c2f1[4];
  ::S20282C2 s20508c2f2;
  virtual  ~S20508C2(); // _ZN8S20508C2D2Ev
  virtual void  v22(); // _ZN8S20508C23v22Ev
  virtual void  v23(); // _ZN8S20508C23v23Ev
  S20508C2(); // tgen
};
//SIG(-1 S20508C2) C1{ VBC2{ BC3{ v3 v4 v5} vd v6 v7 v8 v9 v10 Fp} BC4{ BC5{ vd v11 v12 v13 Fp[10] FC3} VBC3 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23} vd v1 v2 Fc FC6{ v24 v25 Fp Fi}[4] FC7{ v26}}


 S20508C2 ::~S20508C2(){ note_dtor("S20508C2", this);}
void  S20508C2 ::v22(){vfunc_called(this, "_ZN8S20508C23v22Ev");}
void  S20508C2 ::v23(){vfunc_called(this, "_ZN8S20508C23v23Ev");}
S20508C2 ::S20508C2(){ note_ctor("S20508C2", this);} // tgen

static void Test_S20508C2()
{
  extern Class_Descriptor cd_S20508C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[30];
    init_test(&cd_S20508C2, buf);
    S20508C2 *dp, &lv = *(dp=new (buf) S20508C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,116), "sizeof(S20508C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20508C2)");
    check_base_class_offset(lv, (S20508C4*)(S20508C3*), ABISELECT(208,104), "S20508C2");
    check_base_class_offset(lv, (S20508C3*), ABISELECT(208,104), "S20508C2");
    check_base_class_offset(lv, (S20508C6*)(S20508C5*), 0, "S20508C2");
    check_base_class_offset(lv, (S20508C4*)(S20508C5*), ABISELECT(224,112), "S20508C2");
    check_base_class_offset(lv, (S20508C5*), 0, "S20508C2");
    check_field_offset(lv, s20508c2f0, ABISELECT(96,48), "S20508C2.s20508c2f0");
    check_field_offset(lv, s20508c2f1, ABISELECT(104,52), "S20508C2.s20508c2f1");
    check_field_offset(lv, s20508c2f2, ABISELECT(200,100), "S20508C2.s20508c2f2");
    test_class_info(&lv, &cd_S20508C2);
    dp->~S20508C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20508C2(Test_S20508C2, "S20508C2", ABISELECT(232,116));

#else // __cplusplus

extern void _ZN8S20508C2C1Ev();
extern void _ZN8S20508C2D2Ev();
Name_Map name_map_S20508C2[] = {
  NSPAIR(_ZN8S20508C2C1Ev),
  NSPAIR(_ZN8S20508C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20508C4;
extern VTBL_ENTRY _ZTI8S20508C4[];
extern  VTBL_ENTRY _ZTV8S20508C4[];
extern Class_Descriptor cd_S20508C3;
extern VTBL_ENTRY _ZTI8S20508C3[];
extern  VTBL_ENTRY _ZTV8S20508C3[];
extern Class_Descriptor cd_S20508C6;
extern VTBL_ENTRY _ZTI8S20508C6[];
extern  VTBL_ENTRY _ZTV8S20508C6[];
extern Class_Descriptor cd_S20508C4;
extern VTBL_ENTRY _ZTI8S20508C4[];
extern  VTBL_ENTRY _ZTV8S20508C4[];
extern Class_Descriptor cd_S20508C5;
extern VTBL_ENTRY _ZTI8S20508C5[];
extern  VTBL_ENTRY _ZTV8S20508C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20508C5[];
static Base_Class bases_S20508C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20508C4,    ABISELECT(208,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
    1, //immediately_derived
  0, 0},
  {&cd_S20508C3,    ABISELECT(208,104), //bcp->offset
    21, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20508C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20508C4,    ABISELECT(224,112), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20508C5,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S20508C2[];
extern void _ZN8S20508C2D1Ev();
extern void _ZN8S20508C2D0Ev();
extern void _ZN8S20508C62v9Ev();
extern void _ZN8S20508C63v10Ev();
extern void _ZN8S20508C63v11Ev();
extern void _ZN8S20508C53v12Ev();
extern void _ZN8S20508C53v13Ev();
extern void _ZN8S20508C53v14Ev();
extern void _ZN8S20508C53v15Ev();
extern void _ZN8S20508C53v16Ev();
extern void _ZN8S20508C53v17Ev();
extern void _ZN8S20508C53v18Ev();
extern void _ZN8S20508C53v19Ev();
extern void _ZN8S20508C53v20Ev();
extern void _ZN8S20508C53v21Ev();
extern void _ZN8S20508C23v22Ev();
extern void _ZN8S20508C23v23Ev();
extern void _ZN8S20508C42v1Ev();
extern void _ZN8S20508C42v2Ev();
extern void _ZN8S20508C42v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S20508C2D1Ev,_ZTv0_n24_N8S20508C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S20508C2D1Ev,_ZThn104_N8S20508C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20508C2D0Ev,_ZTv0_n24_N8S20508C2D0Ev)();
extern void ABISELECT(_ZThn208_N8S20508C2D0Ev,_ZThn104_N8S20508C2D0Ev)() __attribute__((weak));
extern void _ZN8S20508C32v4Ev();
extern void _ZN8S20508C32v5Ev();
extern void _ZN8S20508C32v6Ev();
extern void _ZN8S20508C32v7Ev();
extern void _ZN8S20508C32v8Ev();
extern void _ZN8S20508C42v1Ev();
extern void _ZN8S20508C42v2Ev();
extern void _ZN8S20508C42v3Ev();
static  VTBL_ENTRY vtc_S20508C2[] = {
  ABISELECT(208,104),
  ABISELECT(224,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S20508C2[0]),
  (VTBL_ENTRY)&_ZN8S20508C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20508C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20508C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20508C23v22Ev,
  (VTBL_ENTRY)&_ZN8S20508C23v23Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-104),
  0,
  0,
  0,
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI8S20508C2[0]),
  (VTBL_ENTRY)&_ZN8S20508C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20508C2D1Ev,_ZTv0_n24_N8S20508C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20508C2D0Ev,_ZTv0_n24_N8S20508C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20508C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v8Ev,
  0,
  0,
  0,
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI8S20508C2[0]),
  (VTBL_ENTRY)&_ZN8S20508C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20508C2[];
extern void _ZN8S20508C5D1Ev();
extern void _ZN8S20508C5D0Ev();
extern void _ZN8S20508C62v9Ev();
extern void _ZN8S20508C63v10Ev();
extern void _ZN8S20508C63v11Ev();
extern void _ZN8S20508C53v12Ev();
extern void _ZN8S20508C53v13Ev();
extern void _ZN8S20508C53v14Ev();
extern void _ZN8S20508C53v15Ev();
extern void _ZN8S20508C53v16Ev();
extern void _ZN8S20508C53v17Ev();
extern void _ZN8S20508C53v18Ev();
extern void _ZN8S20508C53v19Ev();
extern void _ZN8S20508C53v20Ev();
extern void _ZN8S20508C53v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20508C5__8S20508C2[] = {
  ABISELECT(224,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S20508C5[0]),
  (VTBL_ENTRY)&_ZN8S20508C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20508C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20508C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v21Ev,
};
extern void _ZN8S20508C42v1Ev();
extern void _ZN8S20508C42v2Ev();
extern void _ZN8S20508C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20508C4__8S20508C5__8S20508C2[] = {
  0,
  0,
  0,
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI8S20508C5[0]),
  (VTBL_ENTRY)&_ZN8S20508C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v3Ev,
};
static  VTT_ENTRY vtt_S20508C2[] = {
  {&(_ZTV8S20508C2[4]),  4,50},
  {&(_tg__ZTV8S20508C5__8S20508C2[3]),  3,18},
  {&(_tg__ZTV8S20508C4__8S20508C5__8S20508C2[5]),  5,8},
  {&(_ZTV8S20508C2[32]),  32,50},
  {&(_ZTV8S20508C2[47]),  47,50},
};
extern VTBL_ENTRY _ZTI8S20508C2[];
extern  VTBL_ENTRY _ZTV8S20508C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20508C2[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20508C2D0Ev,_ZTv0_n24_N8S20508C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20508C2D0Ev,_ZThn104_N8S20508C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20508C2D1Ev,_ZTv0_n24_N8S20508C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20508C2D1Ev,_ZThn104_N8S20508C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20508C2 = {  "S20508C2", // class name
  bases_S20508C2, 5,
  &(vtc_S20508C2[0]), // expected_vtbl_contents
  &(vtt_S20508C2[0]), // expected_vtt_contents
  ABISELECT(232,116), // object size
  NSPAIRA(_ZTI8S20508C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20508C2),50, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20508C2),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20508C1  : virtual S20508C2 {
  void *s20508c1f0;
  ~S20508C1(); // tgen
  S20508C1(); // tgen
};
//SIG(1 S20508C1) C1{ VBC2{ VBC3{ BC4{ v1 v2 v3} vd v4 v5 v6 v7 v8 Fp} BC5{ BC6{ vd v9 v10 v11 Fp[10] FC4} VBC4 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21} vd v22 v23 Fc FC7{ v24 v25 Fp Fi}[4] FC8{ v26}} Fp}


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

static void Test_S20508C1()
{
  extern Class_Descriptor cd_S20508C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[31];
    init_test(&cd_S20508C1, buf);
    S20508C1 *dp, &lv = *(dp=new (buf) S20508C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,120), "sizeof(S20508C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20508C1)");
    check_base_class_offset(lv, (S20508C4*)(S20508C3*), ABISELECT(224,112), "S20508C1");
    check_base_class_offset(lv, (S20508C3*)(S20508C2*), ABISELECT(224,112), "S20508C1");
    check_base_class_offset(lv, (S20508C6*)(S20508C5*)(S20508C2*), ABISELECT(16,8), "S20508C1");
    check_base_class_offset(lv, (S20508C4*)(S20508C5*)(S20508C2*), 0, "S20508C1");
    check_base_class_offset(lv, (S20508C5*)(S20508C2*), ABISELECT(16,8), "S20508C1");
    check_base_class_offset(lv, (S20508C2*), ABISELECT(16,8), "S20508C1");
    check_field_offset(lv, s20508c1f0, ABISELECT(8,4), "S20508C1.s20508c1f0");
    test_class_info(&lv, &cd_S20508C1);
    dp->~S20508C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20508C1(Test_S20508C1, "S20508C1", ABISELECT(240,120));

#else // __cplusplus

extern void _ZN8S20508C1C1Ev();
extern void _ZN8S20508C1D1Ev();
Name_Map name_map_S20508C1[] = {
  NSPAIR(_ZN8S20508C1C1Ev),
  NSPAIR(_ZN8S20508C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20508C4;
extern VTBL_ENTRY _ZTI8S20508C4[];
extern  VTBL_ENTRY _ZTV8S20508C4[];
extern Class_Descriptor cd_S20508C3;
extern VTBL_ENTRY _ZTI8S20508C3[];
extern  VTBL_ENTRY _ZTV8S20508C3[];
extern Class_Descriptor cd_S20508C6;
extern VTBL_ENTRY _ZTI8S20508C6[];
extern  VTBL_ENTRY _ZTV8S20508C6[];
extern Class_Descriptor cd_S20508C4;
extern VTBL_ENTRY _ZTI8S20508C4[];
extern  VTBL_ENTRY _ZTV8S20508C4[];
extern Class_Descriptor cd_S20508C5;
extern VTBL_ENTRY _ZTI8S20508C5[];
extern  VTBL_ENTRY _ZTV8S20508C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20508C5[];
extern Class_Descriptor cd_S20508C2;
extern VTBL_ENTRY _ZTI8S20508C2[];
extern  VTBL_ENTRY _ZTV8S20508C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20508C2[];
static Base_Class bases_S20508C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20508C4,    ABISELECT(224,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20508C3,    ABISELECT(224,112), //bcp->offset
    50, //bcp->virtual_function_table_offset
    11, //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
    5, //immediately_derived
  0, 1},
  {&cd_S20508C6,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20508C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20508C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20508C2,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20508C1[];
extern void _ZN8S20508C42v1Ev();
extern void _ZN8S20508C42v2Ev();
extern void _ZN8S20508C42v3Ev();
extern void _ZN8S20508C1D1Ev();
extern void _ZN8S20508C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S20508C1D1Ev,_ZTv0_n20_N8S20508C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20508C1D1Ev,_ZThn8_N8S20508C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20508C1D0Ev,_ZTv0_n20_N8S20508C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20508C1D0Ev,_ZThn8_N8S20508C1D0Ev)() __attribute__((weak));
extern void _ZN8S20508C62v9Ev();
extern void _ZN8S20508C63v10Ev();
extern void _ZN8S20508C63v11Ev();
extern void _ZN8S20508C53v12Ev();
extern void _ZN8S20508C53v13Ev();
extern void _ZN8S20508C53v14Ev();
extern void _ZN8S20508C53v15Ev();
extern void _ZN8S20508C53v16Ev();
extern void _ZN8S20508C53v17Ev();
extern void _ZN8S20508C53v18Ev();
extern void _ZN8S20508C53v19Ev();
extern void _ZN8S20508C53v20Ev();
extern void _ZN8S20508C53v21Ev();
extern void _ZN8S20508C23v22Ev();
extern void _ZN8S20508C23v23Ev();
extern void _ZN8S20508C42v1Ev();
extern void _ZN8S20508C42v2Ev();
extern void _ZN8S20508C42v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S20508C1D1Ev,_ZTv0_n24_N8S20508C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S20508C1D1Ev,_ZThn112_N8S20508C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20508C1D0Ev,_ZTv0_n24_N8S20508C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S20508C1D0Ev,_ZThn112_N8S20508C1D0Ev)() __attribute__((weak));
extern void _ZN8S20508C32v4Ev();
extern void _ZN8S20508C32v5Ev();
extern void _ZN8S20508C32v6Ev();
extern void _ZN8S20508C32v7Ev();
extern void _ZN8S20508C32v8Ev();
static  VTBL_ENTRY vtc_S20508C1[] = {
  0,
  ABISELECT(224,112),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20508C1[0]),
  (VTBL_ENTRY)&_ZN8S20508C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20508C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20508C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(208,104),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20508C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20508C1D1Ev,_ZTv0_n20_N8S20508C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20508C1D0Ev,_ZTv0_n20_N8S20508C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20508C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20508C23v22Ev,
  (VTBL_ENTRY)&_ZN8S20508C23v23Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-112),
  0,
  0,
  0,
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI8S20508C1[0]),
  (VTBL_ENTRY)&_ZN8S20508C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20508C1D1Ev,_ZTv0_n24_N8S20508C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20508C1D0Ev,_ZTv0_n24_N8S20508C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20508C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v8Ev,
};
extern VTBL_ENTRY _ZTV8S20508C1[];
extern void _ZN8S20508C2D1Ev();
extern void _ZN8S20508C2D0Ev();
extern void _ZN8S20508C62v9Ev();
extern void _ZN8S20508C63v10Ev();
extern void _ZN8S20508C63v11Ev();
extern void _ZN8S20508C53v12Ev();
extern void _ZN8S20508C53v13Ev();
extern void _ZN8S20508C53v14Ev();
extern void _ZN8S20508C53v15Ev();
extern void _ZN8S20508C53v16Ev();
extern void _ZN8S20508C53v17Ev();
extern void _ZN8S20508C53v18Ev();
extern void _ZN8S20508C53v19Ev();
extern void _ZN8S20508C53v20Ev();
extern void _ZN8S20508C53v21Ev();
extern void _ZN8S20508C23v22Ev();
extern void _ZN8S20508C23v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20508C2__8S20508C1[] = {
  ABISELECT(208,104),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20508C2[0]),
  (VTBL_ENTRY)&_ZN8S20508C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20508C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20508C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v21Ev,
  (VTBL_ENTRY)&_ZN8S20508C23v22Ev,
  (VTBL_ENTRY)&_ZN8S20508C23v23Ev,
};
extern void _ZN8S20508C5D1Ev();
extern void _ZN8S20508C5D0Ev();
extern void _ZN8S20508C62v9Ev();
extern void _ZN8S20508C63v10Ev();
extern void _ZN8S20508C63v11Ev();
extern void _ZN8S20508C53v12Ev();
extern void _ZN8S20508C53v13Ev();
extern void _ZN8S20508C53v14Ev();
extern void _ZN8S20508C53v15Ev();
extern void _ZN8S20508C53v16Ev();
extern void _ZN8S20508C53v17Ev();
extern void _ZN8S20508C53v18Ev();
extern void _ZN8S20508C53v19Ev();
extern void _ZN8S20508C53v20Ev();
extern void _ZN8S20508C53v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20508C58S20508C2__8S20508C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20508C5[0]),
  (VTBL_ENTRY)&_ZN8S20508C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20508C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20508C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20508C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v19Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v20Ev,
  (VTBL_ENTRY)&_ZN8S20508C53v21Ev,
};
extern void _ZN8S20508C42v1Ev();
extern void _ZN8S20508C42v2Ev();
extern void _ZN8S20508C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20508C4__8S20508C58S20508C2__8S20508C1[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20508C5[0]),
  (VTBL_ENTRY)&_ZN8S20508C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v3Ev,
};
extern void _ZN8S20508C42v1Ev();
extern void _ZN8S20508C42v2Ev();
extern void _ZN8S20508C42v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S20508C2D1Ev,_ZTv0_n24_N8S20508C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S20508C2D1Ev,_ZThn104_N8S20508C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20508C2D0Ev,_ZTv0_n24_N8S20508C2D0Ev)();
extern void ABISELECT(_ZThn208_N8S20508C2D0Ev,_ZThn104_N8S20508C2D0Ev)() __attribute__((weak));
extern void _ZN8S20508C32v4Ev();
extern void _ZN8S20508C32v5Ev();
extern void _ZN8S20508C32v6Ev();
extern void _ZN8S20508C32v7Ev();
extern void _ZN8S20508C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20508C3__8S20508C2__8S20508C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-104),
  0,
  0,
  0,
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI8S20508C2[0]),
  (VTBL_ENTRY)&_ZN8S20508C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20508C2D1Ev,_ZTv0_n24_N8S20508C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20508C2D0Ev,_ZTv0_n24_N8S20508C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20508C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20508C32v8Ev,
};
extern void _ZN8S20508C42v1Ev();
extern void _ZN8S20508C42v2Ev();
extern void _ZN8S20508C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20508C4__A1__8S20508C2__8S20508C1[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20508C2[0]),
  (VTBL_ENTRY)&_ZN8S20508C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20508C42v3Ev,
};
static  VTT_ENTRY vtt_S20508C1[] = {
  {&(_ZTV8S20508C1[8]),  8,71},
  {&(_ZTV8S20508C1[33]),  33,71},
  {&(_ZTV8S20508C1[61]),  61,71},
  {&(_ZTV8S20508C1[8]),  8,71},
  {&(_tg__ZTV8S20508C2__8S20508C1[4]),  4,21},
  {&(_tg__ZTV8S20508C58S20508C2__8S20508C1[3]),  3,18},
  {&(_tg__ZTV8S20508C4__8S20508C58S20508C2__8S20508C1[5]),  5,8},
  {&(_tg__ZTV8S20508C3__8S20508C2__8S20508C1[11]),  11,21},
  {&(_tg__ZTV8S20508C4__A1__8S20508C2__8S20508C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S20508C1[];
extern  VTBL_ENTRY _ZTV8S20508C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20508C1[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20508C2D0Ev,_ZTv0_n24_N8S20508C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20508C2D0Ev,_ZThn104_N8S20508C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20508C2D1Ev,_ZTv0_n24_N8S20508C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20508C2D1Ev,_ZThn104_N8S20508C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20508C1D0Ev,_ZTv0_n24_N8S20508C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20508C1D0Ev,_ZThn112_N8S20508C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20508C1D1Ev,_ZTv0_n24_N8S20508C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20508C1D1Ev,_ZThn112_N8S20508C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20508C1D0Ev,_ZTv0_n20_N8S20508C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20508C1D0Ev,_ZThn8_N8S20508C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20508C1D1Ev,_ZTv0_n20_N8S20508C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20508C1D1Ev,_ZThn8_N8S20508C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20508C1 = {  "S20508C1", // class name
  bases_S20508C1, 6,
  &(vtc_S20508C1[0]), // expected_vtbl_contents
  &(vtt_S20508C1[0]), // expected_vtt_contents
  ABISELECT(240,120), // object size
  NSPAIRA(_ZTI8S20508C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20508C1),71, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20508C1),9, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7213C5  {
  virtual void  v4(); // _ZN7S7213C52v4Ev
  virtual void  v5(); // _ZN7S7213C52v5Ev
  virtual void  v6(); // _ZN7S7213C52v6Ev
  ~S7213C5(); // tgen
  S7213C5(); // tgen
};
//SIG(-1 S7213C5) C1{ v1 v2 v3}


void  S7213C5 ::v4(){vfunc_called(this, "_ZN7S7213C52v4Ev");}
void  S7213C5 ::v5(){vfunc_called(this, "_ZN7S7213C52v5Ev");}
void  S7213C5 ::v6(){vfunc_called(this, "_ZN7S7213C52v6Ev");}
S7213C5 ::~S7213C5(){ note_dtor("S7213C5", this);} // tgen
S7213C5 ::S7213C5(){ note_ctor("S7213C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7213C5C1Ev();
extern void _ZN7S7213C5D1Ev();
Name_Map name_map_S7213C5[] = {
  NSPAIR(_ZN7S7213C5C1Ev),
  NSPAIR(_ZN7S7213C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7213C5[];
extern void _ZN7S7213C52v4Ev();
extern void _ZN7S7213C52v5Ev();
extern void _ZN7S7213C52v6Ev();
static  VTBL_ENTRY vtc_S7213C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7213C5[0]),
  (VTBL_ENTRY)&_ZN7S7213C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7213C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7213C52v6Ev,
};
extern VTBL_ENTRY _ZTI7S7213C5[];
extern  VTBL_ENTRY _ZTV7S7213C5[];
Class_Descriptor cd_S7213C5 = {  "S7213C5", // class name
  0,0,//no base classes
  &(vtc_S7213C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7213C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7213C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7213C4  : S7213C5 {
  void *s7213c4f0;
  virtual  ~S7213C4(); // _ZN7S7213C4D1Ev
  virtual void  v7(); // _ZN7S7213C42v7Ev
  virtual void  v8(); // _ZN7S7213C42v8Ev
  virtual void  v9(); // _ZN7S7213C42v9Ev
  virtual void  v10(); // _ZN7S7213C43v10Ev
  virtual void  v11(); // _ZN7S7213C43v11Ev
  S7213C4(); // tgen
};
//SIG(-1 S7213C4) C1{ BC2{ v6 v7 v8} vd v1 v2 v3 v4 v5 Fp}


 S7213C4 ::~S7213C4(){ note_dtor("S7213C4", this);}
void  S7213C4 ::v7(){vfunc_called(this, "_ZN7S7213C42v7Ev");}
void  S7213C4 ::v8(){vfunc_called(this, "_ZN7S7213C42v8Ev");}
void  S7213C4 ::v9(){vfunc_called(this, "_ZN7S7213C42v9Ev");}
void  S7213C4 ::v10(){vfunc_called(this, "_ZN7S7213C43v10Ev");}
void  S7213C4 ::v11(){vfunc_called(this, "_ZN7S7213C43v11Ev");}
S7213C4 ::S7213C4(){ note_ctor("S7213C4", this);} // tgen

static void Test_S7213C4()
{
  extern Class_Descriptor cd_S7213C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7213C4, buf);
    S7213C4 *dp, &lv = *(dp=new (buf) S7213C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7213C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7213C4)");
    check_base_class_offset(lv, (S7213C5*), 0, "S7213C4");
    check_field_offset(lv, s7213c4f0, ABISELECT(8,4), "S7213C4.s7213c4f0");
    test_class_info(&lv, &cd_S7213C4);
    dp->~S7213C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7213C4(Test_S7213C4, "S7213C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7213C4C1Ev();
extern void _ZN7S7213C4D1Ev();
Name_Map name_map_S7213C4[] = {
  NSPAIR(_ZN7S7213C4C1Ev),
  NSPAIR(_ZN7S7213C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7213C5;
extern VTBL_ENTRY _ZTI7S7213C5[];
extern  VTBL_ENTRY _ZTV7S7213C5[];
static Base_Class bases_S7213C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7213C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7213C4[];
extern void _ZN7S7213C52v4Ev();
extern void _ZN7S7213C52v5Ev();
extern void _ZN7S7213C52v6Ev();
extern void _ZN7S7213C4D1Ev();
extern void _ZN7S7213C4D0Ev();
extern void _ZN7S7213C42v7Ev();
extern void _ZN7S7213C42v8Ev();
extern void _ZN7S7213C42v9Ev();
extern void _ZN7S7213C43v10Ev();
extern void _ZN7S7213C43v11Ev();
static  VTBL_ENTRY vtc_S7213C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7213C4[0]),
  (VTBL_ENTRY)&_ZN7S7213C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7213C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7213C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7213C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7213C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7213C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7213C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7213C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7213C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7213C43v11Ev,
};
extern VTBL_ENTRY _ZTI7S7213C4[];
extern  VTBL_ENTRY _ZTV7S7213C4[];
Class_Descriptor cd_S7213C4 = {  "S7213C4", // class name
  bases_S7213C4, 1,
  &(vtc_S7213C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7213C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7213C4),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  S7213C6  {
  ::S7213C5 s7213c6f0;
  __tsi64 s7213c6f1;
  long double s7213c6f2;
  virtual void  v12(); // _ZN7S7213C63v12Ev
  virtual void  v13(); // _ZN7S7213C63v13Ev
  virtual void  v14(); // _ZN7S7213C63v14Ev
  virtual void  v15(); // _ZN7S7213C63v15Ev
  virtual void  v16(); // _ZN7S7213C63v16Ev
  virtual void  v17(); // _ZN7S7213C63v17Ev
  ~S7213C6(); // tgen
  S7213C6(); // tgen
};
//SIG(-1 S7213C6) C1{ v1 v2 v3 v4 v5 v6 FC2{ v7 v8 v9} FL FD}


void  S7213C6 ::v12(){vfunc_called(this, "_ZN7S7213C63v12Ev");}
void  S7213C6 ::v13(){vfunc_called(this, "_ZN7S7213C63v13Ev");}
void  S7213C6 ::v14(){vfunc_called(this, "_ZN7S7213C63v14Ev");}
void  S7213C6 ::v15(){vfunc_called(this, "_ZN7S7213C63v15Ev");}
void  S7213C6 ::v16(){vfunc_called(this, "_ZN7S7213C63v16Ev");}
void  S7213C6 ::v17(){vfunc_called(this, "_ZN7S7213C63v17Ev");}
S7213C6 ::~S7213C6(){ note_dtor("S7213C6", this);} // tgen
S7213C6 ::S7213C6(){ note_ctor("S7213C6", this);} // tgen

static void Test_S7213C6()
{
  extern Class_Descriptor cd_S7213C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S7213C6, buf);
    S7213C6 *dp, &lv = *(dp=new (buf) S7213C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7213C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7213C6)");
    check_field_offset(lv, s7213c6f0, ABISELECT(8,4), "S7213C6.s7213c6f0");
    check_field_offset(lv, s7213c6f1, ABISELECT(16,8), "S7213C6.s7213c6f1");
    check_field_offset(lv, s7213c6f2, ABISELECT(32,16), "S7213C6.s7213c6f2");
    test_class_info(&lv, &cd_S7213C6);
    dp->~S7213C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7213C6(Test_S7213C6, "S7213C6", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S7213C6C1Ev();
extern void _ZN7S7213C6D1Ev();
Name_Map name_map_S7213C6[] = {
  NSPAIR(_ZN7S7213C6C1Ev),
  NSPAIR(_ZN7S7213C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7213C6[];
extern void _ZN7S7213C63v12Ev();
extern void _ZN7S7213C63v13Ev();
extern void _ZN7S7213C63v14Ev();
extern void _ZN7S7213C63v15Ev();
extern void _ZN7S7213C63v16Ev();
extern void _ZN7S7213C63v17Ev();
static  VTBL_ENTRY vtc_S7213C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7213C6[0]),
  (VTBL_ENTRY)&_ZN7S7213C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v17Ev,
};
extern VTBL_ENTRY _ZTI7S7213C6[];
extern  VTBL_ENTRY _ZTV7S7213C6[];
Class_Descriptor cd_S7213C6 = {  "S7213C6", // class name
  0,0,//no base classes
  &(vtc_S7213C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S7213C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7213C6),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7213C3  : S7213C4 , S7213C6 {
  void *s7213c3f0;
  virtual  ~S7213C3(); // _ZN7S7213C3D1Ev
  virtual void  v18(); // _ZN7S7213C33v18Ev
  virtual void  v19(); // _ZN7S7213C33v19Ev
  virtual void  v20(); // _ZN7S7213C33v20Ev
  virtual void  v21(); // _ZN7S7213C33v21Ev
  virtual void  v22(); // _ZN7S7213C33v22Ev
  S7213C3(); // tgen
};
//SIG(-1 S7213C3) C1{ BC2{ BC3{ v6 v7 v8} vd v9 v10 v11 v12 v13 Fp} BC4{ v14 v15 v16 v17 v18 v19 FC3 FL FD} vd v1 v2 v3 v4 v5 Fp}


 S7213C3 ::~S7213C3(){ note_dtor("S7213C3", this);}
void  S7213C3 ::v18(){vfunc_called(this, "_ZN7S7213C33v18Ev");}
void  S7213C3 ::v19(){vfunc_called(this, "_ZN7S7213C33v19Ev");}
void  S7213C3 ::v20(){vfunc_called(this, "_ZN7S7213C33v20Ev");}
void  S7213C3 ::v21(){vfunc_called(this, "_ZN7S7213C33v21Ev");}
void  S7213C3 ::v22(){vfunc_called(this, "_ZN7S7213C33v22Ev");}
S7213C3 ::S7213C3(){ note_ctor("S7213C3", this);} // tgen

static void Test_S7213C3()
{
  extern Class_Descriptor cd_S7213C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,11)];
    init_test(&cd_S7213C3, buf);
    S7213C3 *dp, &lv = *(dp=new (buf) S7213C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S7213C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7213C3)");
    check_base_class_offset(lv, (S7213C5*)(S7213C4*), 0, "S7213C3");
    check_base_class_offset(lv, (S7213C4*), 0, "S7213C3");
    check_base_class_offset(lv, (S7213C6*), ABISELECT(16,8), "S7213C3");
    check_field_offset(lv, s7213c3f0, ABISELECT(64,36), "S7213C3.s7213c3f0");
    test_class_info(&lv, &cd_S7213C3);
    dp->~S7213C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7213C3(Test_S7213C3, "S7213C3", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN7S7213C3C1Ev();
extern void _ZN7S7213C3D1Ev();
Name_Map name_map_S7213C3[] = {
  NSPAIR(_ZN7S7213C3C1Ev),
  NSPAIR(_ZN7S7213C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7213C5;
extern VTBL_ENTRY _ZTI7S7213C5[];
extern  VTBL_ENTRY _ZTV7S7213C5[];
extern Class_Descriptor cd_S7213C4;
extern VTBL_ENTRY _ZTI7S7213C4[];
extern  VTBL_ENTRY _ZTV7S7213C4[];
extern Class_Descriptor cd_S7213C6;
extern VTBL_ENTRY _ZTI7S7213C6[];
extern  VTBL_ENTRY _ZTV7S7213C6[];
static Base_Class bases_S7213C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7213C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7213C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7213C6,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_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 _ZTI7S7213C3[];
extern void _ZN7S7213C52v4Ev();
extern void _ZN7S7213C52v5Ev();
extern void _ZN7S7213C52v6Ev();
extern void _ZN7S7213C3D1Ev();
extern void _ZN7S7213C3D0Ev();
extern void _ZN7S7213C42v7Ev();
extern void _ZN7S7213C42v8Ev();
extern void _ZN7S7213C42v9Ev();
extern void _ZN7S7213C43v10Ev();
extern void _ZN7S7213C43v11Ev();
extern void _ZN7S7213C33v18Ev();
extern void _ZN7S7213C33v19Ev();
extern void _ZN7S7213C33v20Ev();
extern void _ZN7S7213C33v21Ev();
extern void _ZN7S7213C33v22Ev();
extern void _ZN7S7213C63v12Ev();
extern void _ZN7S7213C63v13Ev();
extern void _ZN7S7213C63v14Ev();
extern void _ZN7S7213C63v15Ev();
extern void _ZN7S7213C63v16Ev();
extern void _ZN7S7213C63v17Ev();
static  VTBL_ENTRY vtc_S7213C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7213C3[0]),
  (VTBL_ENTRY)&_ZN7S7213C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7213C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7213C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7213C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7213C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7213C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7213C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7213C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7213C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7213C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v22Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7213C3[0]),
  (VTBL_ENTRY)&_ZN7S7213C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v17Ev,
};
extern VTBL_ENTRY _ZTI7S7213C3[];
extern  VTBL_ENTRY _ZTV7S7213C3[];
Class_Descriptor cd_S7213C3 = {  "S7213C3", // class name
  bases_S7213C3, 3,
  &(vtc_S7213C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI7S7213C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7213C3),25, //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  S7213C2  : virtual S7213C3 {
  void *s7213c2f0;
  short s7213c2f1;
  virtual void  v23(); // _ZN7S7213C23v23Ev
  virtual void  v24(); // _ZN7S7213C23v24Ev
  virtual void  v25(); // _ZN7S7213C23v25Ev
  virtual void  v26(); // _ZN7S7213C23v26Ev
  virtual void  v27(); // _ZN7S7213C23v27Ev
  virtual void  v28(); // _ZN7S7213C23v28Ev
  virtual void  v29(); // _ZN7S7213C23v29Ev
  virtual void  v30(); // _ZN7S7213C23v30Ev
  ~S7213C2(); // tgen
  S7213C2(); // tgen
};
//SIG(-1 S7213C2) C1{ VBC2{ BC3{ BC4{ v9 v10 v11} vd v12 v13 v14 v15 v16 Fp} BC5{ v17 v18 v19 v20 v21 v22 FC4 FL FD} vd v23 v24 v25 v26 v27 Fp} v1 v2 v3 v4 v5 v6 v7 v8 Fp Fs}


void  S7213C2 ::v23(){vfunc_called(this, "_ZN7S7213C23v23Ev");}
void  S7213C2 ::v24(){vfunc_called(this, "_ZN7S7213C23v24Ev");}
void  S7213C2 ::v25(){vfunc_called(this, "_ZN7S7213C23v25Ev");}
void  S7213C2 ::v26(){vfunc_called(this, "_ZN7S7213C23v26Ev");}
void  S7213C2 ::v27(){vfunc_called(this, "_ZN7S7213C23v27Ev");}
void  S7213C2 ::v28(){vfunc_called(this, "_ZN7S7213C23v28Ev");}
void  S7213C2 ::v29(){vfunc_called(this, "_ZN7S7213C23v29Ev");}
void  S7213C2 ::v30(){vfunc_called(this, "_ZN7S7213C23v30Ev");}
S7213C2 ::~S7213C2(){ note_dtor("S7213C2", this);} // tgen
S7213C2 ::S7213C2(){ note_ctor("S7213C2", this);} // tgen

static void Test_S7213C2()
{
  extern Class_Descriptor cd_S7213C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,14)];
    init_test(&cd_S7213C2, buf);
    S7213C2 *dp, &lv = *(dp=new (buf) S7213C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,52), "sizeof(S7213C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7213C2)");
    check_base_class_offset(lv, (S7213C5*)(S7213C4*)(S7213C3*), ABISELECT(32,12), "S7213C2");
    check_base_class_offset(lv, (S7213C4*)(S7213C3*), ABISELECT(32,12), "S7213C2");
    check_base_class_offset(lv, (S7213C6*)(S7213C3*), ABISELECT(48,20), "S7213C2");
    check_base_class_offset(lv, (S7213C3*), ABISELECT(32,12), "S7213C2");
    check_field_offset(lv, s7213c2f0, ABISELECT(8,4), "S7213C2.s7213c2f0");
    check_field_offset(lv, s7213c2f1, ABISELECT(16,8), "S7213C2.s7213c2f1");
    test_class_info(&lv, &cd_S7213C2);
    dp->~S7213C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7213C2(Test_S7213C2, "S7213C2", ABISELECT(112,52));

#else // __cplusplus

extern void _ZN7S7213C2C1Ev();
extern void _ZN7S7213C2D1Ev();
Name_Map name_map_S7213C2[] = {
  NSPAIR(_ZN7S7213C2C1Ev),
  NSPAIR(_ZN7S7213C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7213C5;
extern VTBL_ENTRY _ZTI7S7213C5[];
extern  VTBL_ENTRY _ZTV7S7213C5[];
extern Class_Descriptor cd_S7213C4;
extern VTBL_ENTRY _ZTI7S7213C4[];
extern  VTBL_ENTRY _ZTV7S7213C4[];
extern Class_Descriptor cd_S7213C6;
extern VTBL_ENTRY _ZTI7S7213C6[];
extern  VTBL_ENTRY _ZTV7S7213C6[];
extern Class_Descriptor cd_S7213C3;
extern VTBL_ENTRY _ZTI7S7213C3[];
extern  VTBL_ENTRY _ZTV7S7213C3[];
static Base_Class bases_S7213C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7213C5,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7213C4,    ABISELECT(32,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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7213C6,    ABISELECT(48,20), //bcp->offset
    50, //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
    3, //immediately_derived
  0, 0},
  {&cd_S7213C3,    ABISELECT(32,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7213C2[];
extern void _ZN7S7213C23v23Ev();
extern void _ZN7S7213C23v24Ev();
extern void _ZN7S7213C23v25Ev();
extern void _ZN7S7213C23v26Ev();
extern void _ZN7S7213C23v27Ev();
extern void _ZN7S7213C23v28Ev();
extern void _ZN7S7213C23v29Ev();
extern void _ZN7S7213C23v30Ev();
extern void _ZN7S7213C2D1Ev();
extern void _ZN7S7213C2D0Ev();
extern void _ZN7S7213C52v4Ev();
extern void _ZN7S7213C52v5Ev();
extern void _ZN7S7213C52v6Ev();
extern void ABISELECT(_ZTv0_n48_N7S7213C2D1Ev,_ZTv0_n24_N7S7213C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7213C2D1Ev,_ZThn12_N7S7213C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7213C2D0Ev,_ZTv0_n24_N7S7213C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7213C2D0Ev,_ZThn12_N7S7213C2D0Ev)() __attribute__((weak));
extern void _ZN7S7213C42v7Ev();
extern void _ZN7S7213C42v8Ev();
extern void _ZN7S7213C42v9Ev();
extern void _ZN7S7213C43v10Ev();
extern void _ZN7S7213C43v11Ev();
extern void _ZN7S7213C33v18Ev();
extern void _ZN7S7213C33v19Ev();
extern void _ZN7S7213C33v20Ev();
extern void _ZN7S7213C33v21Ev();
extern void _ZN7S7213C33v22Ev();
extern void _ZN7S7213C63v12Ev();
extern void _ZN7S7213C63v13Ev();
extern void _ZN7S7213C63v14Ev();
extern void _ZN7S7213C63v15Ev();
extern void _ZN7S7213C63v16Ev();
extern void _ZN7S7213C63v17Ev();
static  VTBL_ENTRY vtc_S7213C2[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7213C2[0]),
  (VTBL_ENTRY)&_ZN7S7213C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7213C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7213C2D0Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7213C2[0]),
  (VTBL_ENTRY)&_ZN7S7213C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7213C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7213C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7213C2D1Ev,_ZTv0_n24_N7S7213C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7213C2D0Ev,_ZTv0_n24_N7S7213C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7213C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7213C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7213C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7213C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7213C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v22Ev,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S7213C2[0]),
  (VTBL_ENTRY)&_ZN7S7213C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v17Ev,
};
extern VTBL_ENTRY _ZTV7S7213C2[];
static  VTT_ENTRY vtt_S7213C2[] = {
  {&(_ZTV7S7213C2[3]),  3,58},
  {&(_ZTV7S7213C2[35]),  35,58},
  {&(_ZTV7S7213C2[52]),  52,58},
};
extern VTBL_ENTRY _ZTI7S7213C2[];
extern  VTBL_ENTRY _ZTV7S7213C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7213C2[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7213C2D0Ev,_ZTv0_n24_N7S7213C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7213C2D0Ev,_ZThn12_N7S7213C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7213C2D1Ev,_ZTv0_n24_N7S7213C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7213C2D1Ev,_ZThn12_N7S7213C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7213C2 = {  "S7213C2", // class name
  bases_S7213C2, 4,
  &(vtc_S7213C2[0]), // expected_vtbl_contents
  &(vtt_S7213C2[0]), // expected_vtt_contents
  ABISELECT(112,52), // object size
  NSPAIRA(_ZTI7S7213C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7213C2),58, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7213C2),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7213C1  : S7213C2 {
  void *s7213c1f0;
  virtual  ~S7213C1(); // _ZN7S7213C1D2Ev
  virtual void  v1(); // _ZN7S7213C12v1Ev
  virtual void  v2(); // _ZN7S7213C12v2Ev
  virtual void  v3(); // _ZN7S7213C12v3Ev
  S7213C1(); // tgen
};
//SIG(1 S7213C1) C1{ BC2{ VBC3{ BC4{ BC5{ v4 v5 v6} vd v7 v8 v9 v10 v11 Fp} BC6{ v12 v13 v14 v15 v16 v17 FC5 FL FD} vd v18 v19 v20 v21 v22 Fp} v23 v24 v25 v26 v27 v28 v29 v30 Fp Fs} vd v1 v2 v3 Fp}


 S7213C1 ::~S7213C1(){ note_dtor("S7213C1", this);}
void  S7213C1 ::v1(){vfunc_called(this, "_ZN7S7213C12v1Ev");}
void  S7213C1 ::v2(){vfunc_called(this, "_ZN7S7213C12v2Ev");}
void  S7213C1 ::v3(){vfunc_called(this, "_ZN7S7213C12v3Ev");}
S7213C1 ::S7213C1(){ note_ctor("S7213C1", this);} // tgen

static void Test_S7213C1()
{
  extern Class_Descriptor cd_S7213C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S7213C1, buf);
    S7213C1 *dp, &lv = *(dp=new (buf) S7213C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S7213C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7213C1)");
    check_base_class_offset(lv, (S7213C5*)(S7213C4*)(S7213C3*), ABISELECT(32,16), "S7213C1");
    check_base_class_offset(lv, (S7213C4*)(S7213C3*), ABISELECT(32,16), "S7213C1");
    check_base_class_offset(lv, (S7213C6*)(S7213C3*), ABISELECT(48,24), "S7213C1");
    check_base_class_offset(lv, (S7213C3*)(S7213C2*), ABISELECT(32,16), "S7213C1");
    check_base_class_offset(lv, (S7213C2*), 0, "S7213C1");
    check_field_offset(lv, s7213c1f0, ABISELECT(24,12), "S7213C1.s7213c1f0");
    test_class_info(&lv, &cd_S7213C1);
    dp->~S7213C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7213C1(Test_S7213C1, "S7213C1", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN7S7213C1C1Ev();
extern void _ZN7S7213C1D2Ev();
Name_Map name_map_S7213C1[] = {
  NSPAIR(_ZN7S7213C1C1Ev),
  NSPAIR(_ZN7S7213C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7213C5;
extern VTBL_ENTRY _ZTI7S7213C5[];
extern  VTBL_ENTRY _ZTV7S7213C5[];
extern Class_Descriptor cd_S7213C4;
extern VTBL_ENTRY _ZTI7S7213C4[];
extern  VTBL_ENTRY _ZTV7S7213C4[];
extern Class_Descriptor cd_S7213C6;
extern VTBL_ENTRY _ZTI7S7213C6[];
extern  VTBL_ENTRY _ZTV7S7213C6[];
extern Class_Descriptor cd_S7213C3;
extern VTBL_ENTRY _ZTI7S7213C3[];
extern  VTBL_ENTRY _ZTV7S7213C3[];
extern Class_Descriptor cd_S7213C2;
extern VTBL_ENTRY _ZTI7S7213C2[];
extern  VTBL_ENTRY _ZTV7S7213C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7213C2[];
static Base_Class bases_S7213C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7213C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7213C4,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7213C6,    ABISELECT(48,24), //bcp->offset
    53, //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
    3, //immediately_derived
  0, 0},
  {&cd_S7213C3,    ABISELECT(32,16), //bcp->offset
    16, //bcp->virtual_function_table_offset
    22, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7213C2,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S7213C1[];
extern void _ZN7S7213C23v23Ev();
extern void _ZN7S7213C23v24Ev();
extern void _ZN7S7213C23v25Ev();
extern void _ZN7S7213C23v26Ev();
extern void _ZN7S7213C23v27Ev();
extern void _ZN7S7213C23v28Ev();
extern void _ZN7S7213C23v29Ev();
extern void _ZN7S7213C23v30Ev();
extern void _ZN7S7213C1D1Ev();
extern void _ZN7S7213C1D0Ev();
extern void _ZN7S7213C12v1Ev();
extern void _ZN7S7213C12v2Ev();
extern void _ZN7S7213C12v3Ev();
extern void _ZN7S7213C52v4Ev();
extern void _ZN7S7213C52v5Ev();
extern void _ZN7S7213C52v6Ev();
extern void ABISELECT(_ZTv0_n48_N7S7213C1D1Ev,_ZTv0_n24_N7S7213C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7213C1D1Ev,_ZThn16_N7S7213C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7213C1D0Ev,_ZTv0_n24_N7S7213C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7213C1D0Ev,_ZThn16_N7S7213C1D0Ev)() __attribute__((weak));
extern void _ZN7S7213C42v7Ev();
extern void _ZN7S7213C42v8Ev();
extern void _ZN7S7213C42v9Ev();
extern void _ZN7S7213C43v10Ev();
extern void _ZN7S7213C43v11Ev();
extern void _ZN7S7213C33v18Ev();
extern void _ZN7S7213C33v19Ev();
extern void _ZN7S7213C33v20Ev();
extern void _ZN7S7213C33v21Ev();
extern void _ZN7S7213C33v22Ev();
extern void _ZN7S7213C63v12Ev();
extern void _ZN7S7213C63v13Ev();
extern void _ZN7S7213C63v14Ev();
extern void _ZN7S7213C63v15Ev();
extern void _ZN7S7213C63v16Ev();
extern void _ZN7S7213C63v17Ev();
static  VTBL_ENTRY vtc_S7213C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7213C1[0]),
  (VTBL_ENTRY)&_ZN7S7213C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7213C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7213C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7213C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7213C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7213C12v3Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7213C1[0]),
  (VTBL_ENTRY)&_ZN7S7213C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7213C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7213C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7213C1D1Ev,_ZTv0_n24_N7S7213C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7213C1D0Ev,_ZTv0_n24_N7S7213C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7213C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7213C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7213C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7213C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7213C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v22Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7213C1[0]),
  (VTBL_ENTRY)&_ZN7S7213C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v17Ev,
};
extern VTBL_ENTRY _ZTV7S7213C1[];
extern void _ZN7S7213C23v23Ev();
extern void _ZN7S7213C23v24Ev();
extern void _ZN7S7213C23v25Ev();
extern void _ZN7S7213C23v26Ev();
extern void _ZN7S7213C23v27Ev();
extern void _ZN7S7213C23v28Ev();
extern void _ZN7S7213C23v29Ev();
extern void _ZN7S7213C23v30Ev();
extern void _ZN7S7213C2D1Ev();
extern void _ZN7S7213C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7213C2__7S7213C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7213C2[0]),
  (VTBL_ENTRY)&_ZN7S7213C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7213C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7213C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7213C2D0Ev,
};
extern void _ZN7S7213C52v4Ev();
extern void _ZN7S7213C52v5Ev();
extern void _ZN7S7213C52v6Ev();
extern void ABISELECT(_ZTv0_n48_N7S7213C2D1Ev,_ZTv0_n24_N7S7213C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7213C2D1Ev,_ZThn16_N7S7213C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7213C2D0Ev,_ZTv0_n24_N7S7213C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7213C2D0Ev,_ZThn16_N7S7213C2D0Ev)() __attribute__((weak));
extern void _ZN7S7213C42v7Ev();
extern void _ZN7S7213C42v8Ev();
extern void _ZN7S7213C42v9Ev();
extern void _ZN7S7213C43v10Ev();
extern void _ZN7S7213C43v11Ev();
extern void _ZN7S7213C33v18Ev();
extern void _ZN7S7213C33v19Ev();
extern void _ZN7S7213C33v20Ev();
extern void _ZN7S7213C33v21Ev();
extern void _ZN7S7213C33v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7213C3__7S7213C2__7S7213C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7213C2[0]),
  (VTBL_ENTRY)&_ZN7S7213C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7213C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7213C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7213C2D1Ev,_ZTv0_n24_N7S7213C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7213C2D0Ev,_ZTv0_n24_N7S7213C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7213C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7213C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7213C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7213C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7213C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7213C33v22Ev,
};
extern void _ZN7S7213C63v12Ev();
extern void _ZN7S7213C63v13Ev();
extern void _ZN7S7213C63v14Ev();
extern void _ZN7S7213C63v15Ev();
extern void _ZN7S7213C63v16Ev();
extern void _ZN7S7213C63v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7213C67S7213C3__7S7213C2__7S7213C1[] = {
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7213C2[0]),
  (VTBL_ENTRY)&_ZN7S7213C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7213C63v17Ev,
};
static  VTT_ENTRY vtt_S7213C1[] = {
  {&(_ZTV7S7213C1[3]),  3,61},
  {&(_tg__ZTV7S7213C2__7S7213C1[3]),  3,13},
  {&(_tg__ZTV7S7213C3__7S7213C2__7S7213C1[22]),  22,37},
  {&(_tg__ZTV7S7213C67S7213C3__7S7213C2__7S7213C1[2]),  2,8},
  {&(_ZTV7S7213C1[38]),  38,61},
  {&(_ZTV7S7213C1[55]),  55,61},
};
extern VTBL_ENTRY _ZTI7S7213C1[];
extern  VTBL_ENTRY _ZTV7S7213C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7213C1[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7213C2D0Ev,_ZTv0_n24_N7S7213C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7213C2D0Ev,_ZThn16_N7S7213C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7213C2D1Ev,_ZTv0_n24_N7S7213C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7213C2D1Ev,_ZThn16_N7S7213C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7213C1D0Ev,_ZTv0_n24_N7S7213C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7213C1D0Ev,_ZThn16_N7S7213C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7213C1D1Ev,_ZTv0_n24_N7S7213C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7213C1D1Ev,_ZThn16_N7S7213C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7213C1 = {  "S7213C1", // class name
  bases_S7213C1, 5,
  &(vtc_S7213C1[0]), // expected_vtbl_contents
  &(vtt_S7213C1[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI7S7213C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7213C1),61, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7213C1),6, //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  S21028C3  : virtual S19863C10 , virtual S19863C9_nt {
  long double s21028c3f0[10];
  virtual  ~S21028C3(); // _ZN8S21028C3D2Ev
  S21028C3(); // tgen
};
//SIG(-1 S21028C3) C1{ VBC2{ m} VBC3{ m Fi} vd FD[10]}


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

static void Test_S21028C3()
{
  extern Class_Descriptor cd_S21028C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S21028C3, buf);
    S21028C3 *dp, &lv = *(dp=new (buf) S21028C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S21028C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21028C3)");
    check_base_class_offset(lv, (S19863C10*), 0, "S21028C3");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(176,124), "S21028C3");
    check_field_offset(lv, s21028c3f0, ABISELECT(16,4), "S21028C3.s21028c3f0");
    test_class_info(&lv, &cd_S21028C3);
    dp->~S21028C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21028C3(Test_S21028C3, "S21028C3", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN8S21028C3C1Ev();
extern void _ZN8S21028C3D2Ev();
Name_Map name_map_S21028C3[] = {
  NSPAIR(_ZN8S21028C3C1Ev),
  NSPAIR(_ZN8S21028C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S21028C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C9_nt,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21028C3[];
extern void _ZN8S21028C3D1Ev();
extern void _ZN8S21028C3D0Ev();
static  VTBL_ENTRY vtc_S21028C3[] = {
  ABISELECT(176,124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21028C3[0]),
  (VTBL_ENTRY)&_ZN8S21028C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21028C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S21028C3[];
static  VTT_ENTRY vtt_S21028C3[] = {
  {&(_ZTV8S21028C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21028C3[];
extern  VTBL_ENTRY _ZTV8S21028C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21028C3[];
Class_Descriptor cd_S21028C3 = {  "S21028C3", // class name
  bases_S21028C3, 2,
  &(vtc_S21028C3[0]), // expected_vtbl_contents
  &(vtt_S21028C3[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI8S21028C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21028C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21028C3),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  S21028C6  : S19863C10 {
};
//SIG(-1 S21028C6) C1{ BC2{ m}}



static void Test_S21028C6()
{
  extern Class_Descriptor cd_S21028C6;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S21028C6, buf);
    S21028C6 &lv = *(new (buf) S21028C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S21028C6)");
    check2(__alignof__(lv), 1, "__alignof__(S21028C6)");
    check_base_class_offset(lv, (S19863C10*), 0, "S21028C6");
    test_class_info(&lv, &cd_S21028C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21028C6(Test_S21028C6, "S21028C6", 1);

#else // __cplusplus

extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S21028C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21028C6[];
Class_Descriptor cd_S21028C6 = {  "S21028C6", // class name
  bases_S21028C6, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S21028C6),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  S21028C2  : virtual S21028C3 , S21028C6 {
  char s21028c2f0;
  virtual  ~S21028C2(); // _ZN8S21028C2D2Ev
  S21028C2(); // tgen
};
//SIG(-1 S21028C2) C1{ VBC2{ VBC3{ m} VBC4{ m Fi} vd FD[10]} BC5{ BC3} vd Fc}


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

static void Test_S21028C2()
{
  extern Class_Descriptor cd_S21028C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S21028C2, buf);
    S21028C2 *dp, &lv = *(dp=new (buf) S21028C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S21028C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21028C2)");
    check_base_class_offset(lv, (S19863C10*)(S21028C3*), ABISELECT(192,132), "S21028C2");
    check_base_class_offset(lv, (S19863C9_nt*)(S21028C3*), ABISELECT(192,132), "S21028C2");
    check_base_class_offset(lv, (S21028C3*), ABISELECT(16,8), "S21028C2");
    check_base_class_offset(lv, (S19863C10*)(S21028C6*), 0, "S21028C2");
    check_base_class_offset(lv, (S21028C6*), 0, "S21028C2");
    check_field_offset(lv, s21028c2f0, ABISELECT(8,4), "S21028C2.s21028c2f0");
    test_class_info(&lv, &cd_S21028C2);
    dp->~S21028C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21028C2(Test_S21028C2, "S21028C2", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN8S21028C2C1Ev();
extern void _ZN8S21028C2D2Ev();
Name_Map name_map_S21028C2[] = {
  NSPAIR(_ZN8S21028C2C1Ev),
  NSPAIR(_ZN8S21028C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S21028C3;
extern VTBL_ENTRY _ZTI8S21028C3[];
extern  VTBL_ENTRY _ZTV8S21028C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21028C3[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S21028C6;
extern VTBL_ENTRY _ZTI8S21028C6[];
static Base_Class bases_S21028C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    ABISELECT(192,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(192,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21028C3,    ABISELECT(16,8), //bcp->offset
    7, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21028C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21028C2[];
extern void _ZN8S21028C2D1Ev();
extern void _ZN8S21028C2D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S21028C2D1Ev,_ZTv0_n20_N8S21028C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S21028C2D1Ev,_ZThn8_N8S21028C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21028C2D0Ev,_ZTv0_n20_N8S21028C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S21028C2D0Ev,_ZThn8_N8S21028C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21028C2[] = {
  ABISELECT(192,132),
  ABISELECT(192,132),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21028C2[0]),
  (VTBL_ENTRY)&_ZN8S21028C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21028C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21028C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21028C2D1Ev,_ZTv0_n20_N8S21028C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21028C2D0Ev,_ZTv0_n20_N8S21028C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S21028C2[];
extern void _ZN8S21028C3D1Ev();
extern void _ZN8S21028C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21028C3__8S21028C2[] = {
  ABISELECT(176,124),
  ABISELECT(176,124),
  0,
  (VTBL_ENTRY)&(_ZTI8S21028C3[0]),
  (VTBL_ENTRY)&_ZN8S21028C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21028C3D0Ev,
};
static  VTT_ENTRY vtt_S21028C2[] = {
  {&(_ZTV8S21028C2[5]),  5,14},
  {&(_ZTV8S21028C2[12]),  12,14},
  {&(_tg__ZTV8S21028C3__8S21028C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21028C2[];
extern  VTBL_ENTRY _ZTV8S21028C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21028C2[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21028C2D0Ev,_ZTv0_n20_N8S21028C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21028C2D0Ev,_ZThn8_N8S21028C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21028C2D1Ev,_ZTv0_n20_N8S21028C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21028C2D1Ev,_ZThn8_N8S21028C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21028C2 = {  "S21028C2", // class name
  bases_S21028C2, 5,
  &(vtc_S21028C2[0]), // expected_vtbl_contents
  &(vtt_S21028C2[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI8S21028C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21028C2),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21028C2),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21028C11  : virtual S19863C6 , S19863C2_nt {
  virtual  ~S21028C11(); // _ZN9S21028C11D2Ev
  S21028C11(); // tgen
};
//SIG(-1 S21028C11) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} BC6{ m} vd}


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

static void Test_S21028C11()
{
  extern Class_Descriptor cd_S21028C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,35)];
    init_test(&cd_S21028C11, buf);
    S21028C11 *dp, &lv = *(dp=new (buf) S21028C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,136), "sizeof(S21028C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21028C11)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,4), "S21028C11");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S21028C11");
    test_class_info(&lv, &cd_S21028C11);
    dp->~S21028C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21028C11(Test_S21028C11, "S21028C11", ABISELECT(224,136));

#else // __cplusplus

extern void _ZN9S21028C11C1Ev();
extern void _ZN9S21028C11D2Ev();
Name_Map name_map_S21028C11[] = {
  NSPAIR(_ZN9S21028C11C1Ev),
  NSPAIR(_ZN9S21028C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
static Base_Class bases_S21028C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,4), //bcp->offset
    5, //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_S19863C2_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 _ZTI9S21028C11[];
extern void _ZN9S21028C11D1Ev();
extern void _ZN9S21028C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21028C11D1Ev,_ZTv0_n12_N9S21028C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S21028C11D1Ev,_ZThn4_N9S21028C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21028C11D0Ev,_ZTv0_n12_N9S21028C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S21028C11D0Ev,_ZThn4_N9S21028C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21028C11[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S21028C11[0]),
  (VTBL_ENTRY)&_ZN9S21028C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21028C11D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S21028C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21028C11D1Ev,_ZTv0_n12_N9S21028C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21028C11D0Ev,_ZTv0_n12_N9S21028C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21028C11[];
static  VTT_ENTRY vtt_S21028C11[] = {
  {&(_ZTV9S21028C11[3]),  3,10},
  {&(_ZTV9S21028C11[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S21028C11[];
extern  VTBL_ENTRY _ZTV9S21028C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21028C11[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21028C11D0Ev,_ZTv0_n12_N9S21028C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21028C11D0Ev,_ZThn4_N9S21028C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21028C11D1Ev,_ZTv0_n12_N9S21028C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21028C11D1Ev,_ZThn4_N9S21028C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21028C11 = {  "S21028C11", // class name
  bases_S21028C11, 2,
  &(vtc_S21028C11[0]), // expected_vtbl_contents
  &(vtt_S21028C11[0]), // expected_vtt_contents
  ABISELECT(224,136), // object size
  NSPAIRA(_ZTI9S21028C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21028C11),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21028C11),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21028C13  : S19863C2_nt , S19863C10 , virtual S21028C6 , virtual S19863C9_nt {
  ~S21028C13(); // tgen
  S21028C13(); // tgen
};
//SIG(-1 S21028C13) C1{ BC2{ m} BC3{ m} VBC4{ BC3} VBC5{ m Fi}}


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

static void Test_S21028C13()
{
  extern Class_Descriptor cd_S21028C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21028C13, buf);
    S21028C13 *dp, &lv = *(dp=new (buf) S21028C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21028C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21028C13)");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S21028C13");
    /*is_ambiguous_... S21028C13::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*), 0, "S21028C13");
    check_base_class_offset(lv, (S19863C10*)(S21028C6*), ABISELECT(8,4), "S21028C13");
    check_base_class_offset(lv, (S21028C6*), ABISELECT(8,4), "S21028C13");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(8,4), "S21028C13");
    test_class_info(&lv, &cd_S21028C13);
    dp->~S21028C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21028C13(Test_S21028C13, "S21028C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S21028C13C1Ev();
extern void _ZN9S21028C13D1Ev();
Name_Map name_map_S21028C13[] = {
  NSPAIR(_ZN9S21028C13C1Ev),
  NSPAIR(_ZN9S21028C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S21028C6;
extern VTBL_ENTRY _ZTI8S21028C6[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S21028C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C2_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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C10,    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_S21028C6,    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},
  {&cd_S19863C9_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21028C13[];
static  VTBL_ENTRY vtc_S21028C13[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S21028C13[0]),
};
extern VTBL_ENTRY _ZTV9S21028C13[];
static  VTT_ENTRY vtt_S21028C13[] = {
  {&(_ZTV9S21028C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S21028C13[];
extern  VTBL_ENTRY _ZTV9S21028C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21028C13[];
Class_Descriptor cd_S21028C13 = {  "S21028C13", // class name
  bases_S21028C13, 5,
  &(vtc_S21028C13[0]), // expected_vtbl_contents
  &(vtt_S21028C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S21028C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21028C13),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21028C13),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  S21028C8  : virtual S19863C12_nt , virtual S19863C9_nt , virtual S19863C6 , virtual S21028C11 , S21028C13 {
  int s21028c8f0;
  virtual  ~S21028C8(); // _ZN8S21028C8D2Ev
  S21028C8(); // tgen
};
//SIG(-1 S21028C8) C1{ VBC2{ m Fs} VBC3{ m Fi} VBC4{ vd m FC5{ VBC6{ m} VBC3 vd FD[10]}} VBC7{ VBC4 BC8{ m} vd} BC9{ BC8 BC10{ m} VBC11{ BC10} VBC3} vd Fi}


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

static void Test_S21028C8()
{
  extern Class_Descriptor cd_S21028C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,40)];
    init_test(&cd_S21028C8, buf);
    S21028C8 *dp, &lv = *(dp=new (buf) S21028C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,156), "sizeof(S21028C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21028C8)");
    check_base_class_offset(lv, (S19863C12_nt*), ABISELECT(12,8), "S21028C8");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(16,12), "S21028C8");
    check_base_class_offset(lv, (S19863C9_nt*)(S21028C13*), ABISELECT(16,12), "S21028C8");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(32,16), "S21028C8");
    check_base_class_offset(lv, (S19863C6*)(S21028C11*), ABISELECT(32,16), "S21028C8");
    check_base_class_offset(lv, (S19863C2_nt*)(S21028C11*), ABISELECT(240,148), "S21028C8");
    check_base_class_offset(lv, (S21028C11*), ABISELECT(240,148), "S21028C8");
    check_base_class_offset(lv, (S19863C2_nt*)(S21028C13*), 0, "S21028C8");
    /*is_ambiguous_... S21028C13::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*)(S21028C13*), 0, "S21028C8");
    check_base_class_offset(lv, (S19863C10*)(S21028C6*), ABISELECT(248,152), "S21028C8");
    check_base_class_offset(lv, (S21028C6*)(S21028C13*), ABISELECT(248,152), "S21028C8");
    check_base_class_offset(lv, (S21028C13*), 0, "S21028C8");
    check_field_offset(lv, s21028c8f0, ABISELECT(8,4), "S21028C8.s21028c8f0");
    test_class_info(&lv, &cd_S21028C8);
    dp->~S21028C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21028C8(Test_S21028C8, "S21028C8", ABISELECT(256,156));

#else // __cplusplus

extern void _ZN8S21028C8C1Ev();
extern void _ZN8S21028C8D2Ev();
Name_Map name_map_S21028C8[] = {
  NSPAIR(_ZN8S21028C8C1Ev),
  NSPAIR(_ZN8S21028C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S21028C11;
extern VTBL_ENTRY _ZTI9S21028C11[];
extern  VTBL_ENTRY _ZTV9S21028C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21028C11[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S21028C6;
extern VTBL_ENTRY _ZTI8S21028C6[];
extern Class_Descriptor cd_S21028C13;
extern VTBL_ENTRY _ZTI9S21028C13[];
extern  VTBL_ENTRY _ZTV9S21028C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21028C13[];
static Base_Class bases_S21028C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C12_nt,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C9_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C6,    ABISELECT(32,16), //bcp->offset
    9, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C2_nt,    ABISELECT(240,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21028C11,    ABISELECT(240,148), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C2_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
    9, //immediately_derived
  0, 0},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C10,    ABISELECT(248,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
    8, //immediately_derived
  0, 0},
  {&cd_S21028C6,    ABISELECT(248,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
    9, //immediately_derived
  0, 1},
  {&cd_S21028C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21028C8[];
extern void _ZN8S21028C8D1Ev();
extern void _ZN8S21028C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21028C8D1Ev,_ZTv0_n12_N8S21028C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S21028C8D1Ev,_ZThn16_N8S21028C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21028C8D0Ev,_ZTv0_n12_N8S21028C8D0Ev)();
extern void ABISELECT(_ZThn32_N8S21028C8D0Ev,_ZThn16_N8S21028C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21028C8D1Ev,_ZTv0_n16_N8S21028C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S21028C8D1Ev,_ZThn148_N8S21028C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21028C8D0Ev,_ZTv0_n16_N8S21028C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S21028C8D0Ev,_ZThn148_N8S21028C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21028C8[] = {
  ABISELECT(240,148),
  ABISELECT(32,16),
  ABISELECT(12,8),
  ABISELECT(16,12),
  ABISELECT(248,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S21028C8[0]),
  (VTBL_ENTRY)&_ZN8S21028C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21028C8D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21028C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21028C8D1Ev,_ZTv0_n12_N8S21028C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21028C8D0Ev,_ZTv0_n12_N8S21028C8D0Ev),
  ABISELECT(-240,-148),
  ABISELECT(-208,-132),
  ABISELECT(-240,-148),
  (VTBL_ENTRY)&(_ZTI8S21028C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21028C8D1Ev,_ZTv0_n16_N8S21028C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21028C8D0Ev,_ZTv0_n16_N8S21028C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S21028C8[];
static  VTBL_ENTRY _tg__ZTV9S21028C13__8S21028C8[] = {
  ABISELECT(16,12),
  ABISELECT(248,152),
  0,
  (VTBL_ENTRY)&(_ZTI9S21028C13[0]),
};
extern void _ZN9S21028C11D1Ev();
extern void _ZN9S21028C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21028C11__8S21028C8[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S21028C11[0]),
  (VTBL_ENTRY)&_ZN9S21028C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21028C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21028C11D1Ev,_ZTv0_n12_N9S21028C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21028C11D0Ev,_ZTv0_n12_N9S21028C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S21028C11__8S21028C8[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S21028C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21028C11D1Ev,_ZTv0_n12_N9S21028C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21028C11D0Ev,_ZTv0_n12_N9S21028C11D0Ev),
};
static  VTT_ENTRY vtt_S21028C8[] = {
  {&(_ZTV8S21028C8[7]),  7,20},
  {&(_tg__ZTV9S21028C13__8S21028C8[4]),  4,4},
  {&(_ZTV8S21028C8[12]),  12,20},
  {&(_ZTV8S21028C8[18]),  18,20},
  {&(_tg__ZTV9S21028C11__8S21028C8[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S21028C11__8S21028C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21028C8[];
extern  VTBL_ENTRY _ZTV8S21028C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21028C8[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21028C8D0Ev,_ZTv0_n16_N8S21028C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21028C8D0Ev,_ZThn148_N8S21028C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21028C8D1Ev,_ZTv0_n16_N8S21028C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S21028C8D1Ev,_ZThn148_N8S21028C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21028C8D0Ev,_ZTv0_n12_N8S21028C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21028C8D0Ev,_ZThn16_N8S21028C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21028C8D1Ev,_ZTv0_n12_N8S21028C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21028C8D1Ev,_ZThn16_N8S21028C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21028C8 = {  "S21028C8", // class name
  bases_S21028C8, 10,
  &(vtc_S21028C8[0]), // expected_vtbl_contents
  &(vtt_S21028C8[0]), // expected_vtt_contents
  ABISELECT(256,156), // object size
  NSPAIRA(_ZTI8S21028C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21028C8),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21028C8),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21028C14_nt  {
  ::S19863C9_nt s21028c14f0;
  void  mf21028c14(); // _ZN12S21028C14_nt10mf21028c14Ev
};
//SIG(-1 S21028C14_nt) C1{ m FC2{ m Fi}}


void  S21028C14_nt ::mf21028c14(){}

//skip512 S21028C14_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI12S21028C14_nt[];
VTBL_ENTRY *P__ZTI12S21028C14_nt = _ZTI12S21028C14_nt; 
Class_Descriptor cd_S21028C14_nt = {  "S21028C14_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI12S21028C14_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21028C1  : virtual S21028C2 , virtual S19863C8 , S21028C8 , virtual S21028C14_nt {
  virtual  ~S21028C1(); // _ZN8S21028C1D2Ev
  S21028C1(); // tgen
};
//SIG(1 S21028C1) C1{ VBC2{ VBC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]} BC6{ BC4} vd Fc} VBC7{ m} BC8{ VBC9{ m Fs} VBC5 VBC10{ vd m FC11{ VBC7 VBC5 vd FD[10]}} VBC12{ VBC10 BC13{ m} vd} BC14{ BC13 BC4 VBC6 VBC5} vd Fi} VBC15{ m FC5} vd}


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

static void Test_S21028C1()
{
  extern Class_Descriptor cd_S21028C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,73)];
    init_test(&cd_S21028C1, buf);
    S21028C1 *dp, &lv = *(dp=new (buf) S21028C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,288), "sizeof(S21028C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21028C1)");
    check_base_class_offset(lv, (S19863C10*)(S21028C3*), ABISELECT(208,140), "S21028C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S21028C3*), ABISELECT(208,140), "S21028C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S21028C8*), ABISELECT(208,140), "S21028C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S21028C13*)(S21028C8*), ABISELECT(208,140), "S21028C1");
    check_base_class_offset(lv, (S21028C3*)(S21028C2*), ABISELECT(32,16), "S21028C1");
    check_base_class_offset(lv, (S19863C10*)(S21028C6*)(S21028C2*), ABISELECT(16,8), "S21028C1");
    check_base_class_offset(lv, (S21028C6*)(S21028C2*), ABISELECT(16,8), "S21028C1");
    check_base_class_offset(lv, (S21028C2*), ABISELECT(16,8), "S21028C1");
    check_base_class_offset(lv, (S19863C8*), 0, "S21028C1");
    check_base_class_offset(lv, (S19863C12_nt*)(S21028C8*), ABISELECT(212,144), "S21028C1");
    check_base_class_offset(lv, (S19863C6*)(S21028C8*), ABISELECT(224,148), "S21028C1");
    check_base_class_offset(lv, (S19863C6*)(S21028C11*), ABISELECT(224,148), "S21028C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S21028C11*), ABISELECT(432,280), "S21028C1");
    check_base_class_offset(lv, (S21028C11*)(S21028C8*), ABISELECT(432,280), "S21028C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S21028C13*)(S21028C8*), 0, "S21028C1");
    /*is_ambiguous_... S21028C13::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*)(S21028C13*)(S21028C8*), 0, "S21028C1");
    /*is_ambiguous_... S21028C1::S21028C6 */ AMB_check_base_class_offset(lv, (S19863C10*)(S21028C6*), ABISELECT(440,284), "S21028C1");
    check_base_class_offset(lv, (S21028C6*)(S21028C13*)(S21028C8*), ABISELECT(440,284), "S21028C1");
    check_base_class_offset(lv, (S21028C13*)(S21028C8*), 0, "S21028C1");
    check_base_class_offset(lv, (S21028C8*), 0, "S21028C1");
    check_base_class_offset(lv, (S21028C14_nt*), ABISELECT(440,284), "S21028C1");
    test_class_info(&lv, &cd_S21028C1);
    dp->~S21028C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21028C1(Test_S21028C1, "S21028C1", ABISELECT(448,288));

#else // __cplusplus

extern void _ZN8S21028C1C1Ev();
extern void _ZN8S21028C1D2Ev();
Name_Map name_map_S21028C1[] = {
  NSPAIR(_ZN8S21028C1C1Ev),
  NSPAIR(_ZN8S21028C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S21028C3;
extern VTBL_ENTRY _ZTI8S21028C3[];
extern  VTBL_ENTRY _ZTV8S21028C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21028C3[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S21028C6;
extern VTBL_ENTRY _ZTI8S21028C6[];
extern Class_Descriptor cd_S21028C2;
extern VTBL_ENTRY _ZTI8S21028C2[];
extern  VTBL_ENTRY _ZTV8S21028C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21028C2[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S21028C11;
extern VTBL_ENTRY _ZTI9S21028C11[];
extern  VTBL_ENTRY _ZTV9S21028C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21028C11[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S21028C6;
extern VTBL_ENTRY _ZTI8S21028C6[];
extern Class_Descriptor cd_S21028C13;
extern VTBL_ENTRY _ZTI9S21028C13[];
extern  VTBL_ENTRY _ZTV9S21028C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21028C13[];
extern Class_Descriptor cd_S21028C8;
extern VTBL_ENTRY _ZTI8S21028C8[];
extern  VTBL_ENTRY _ZTV8S21028C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21028C8[];
extern Class_Descriptor cd_S21028C14_nt;
extern VTBL_ENTRY _ZTI12S21028C14_nt[];
static Base_Class bases_S21028C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    ABISELECT(208,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
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(208,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
    2, //immediately_derived
  0, 1},
  {&cd_S21028C3,    ABISELECT(32,16), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19863C10,    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_S21028C6,    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_S21028C2,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C12_nt,    ABISELECT(212,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19863C6,    ABISELECT(224,148), //bcp->offset
    29, //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
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19863C2_nt,    ABISELECT(432,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21028C11,    ABISELECT(432,280), //bcp->offset
    34, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19863C2_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
    15, //immediately_derived
  0, 0},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19863C10,    ABISELECT(440,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21028C6,    ABISELECT(440,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21028C13,    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
    5, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S21028C8,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21028C14_nt,    ABISELECT(440,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S21028C1[];
extern void _ZN8S21028C1D1Ev();
extern void _ZN8S21028C1D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S21028C1D1Ev,_ZTv0_n24_N8S21028C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21028C1D1Ev,_ZThn8_N8S21028C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21028C1D0Ev,_ZTv0_n24_N8S21028C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S21028C1D0Ev,_ZThn8_N8S21028C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21028C1D1Ev,_ZTv0_n20_N8S21028C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S21028C1D1Ev,_ZThn16_N8S21028C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21028C1D0Ev,_ZTv0_n20_N8S21028C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S21028C1D0Ev,_ZThn16_N8S21028C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21028C1D1Ev,_ZTv0_n12_N8S21028C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S21028C1D1Ev,_ZThn148_N8S21028C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21028C1D0Ev,_ZTv0_n12_N8S21028C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S21028C1D0Ev,_ZThn148_N8S21028C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21028C1D1Ev,_ZTv0_n16_N8S21028C1D1Ev)();
extern void ABISELECT(_ZThn432_N8S21028C1D1Ev,_ZThn280_N8S21028C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21028C1D0Ev,_ZTv0_n16_N8S21028C1D0Ev)();
extern void ABISELECT(_ZThn432_N8S21028C1D0Ev,_ZThn280_N8S21028C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21028C1[] = {
  ABISELECT(440,284),
  0,
  ABISELECT(208,140),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(432,280),
  ABISELECT(224,148),
  ABISELECT(212,144),
  ABISELECT(208,140),
  ABISELECT(440,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S21028C1[0]),
  (VTBL_ENTRY)&_ZN8S21028C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21028C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(192,132),
  ABISELECT(192,132),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21028C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21028C1D1Ev,_ZTv0_n24_N8S21028C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21028C1D0Ev,_ZTv0_n24_N8S21028C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21028C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21028C1D1Ev,_ZTv0_n20_N8S21028C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21028C1D0Ev,_ZTv0_n20_N8S21028C1D0Ev),
  ABISELECT(-224,-148),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S21028C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21028C1D1Ev,_ZTv0_n12_N8S21028C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21028C1D0Ev,_ZTv0_n12_N8S21028C1D0Ev),
  ABISELECT(-432,-280),
  ABISELECT(-208,-132),
  ABISELECT(-432,-280),
  (VTBL_ENTRY)&(_ZTI8S21028C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21028C1D1Ev,_ZTv0_n16_N8S21028C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21028C1D0Ev,_ZTv0_n16_N8S21028C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21028C1[];
extern void _ZN8S21028C8D1Ev();
extern void _ZN8S21028C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21028C8__8S21028C1[] = {
  ABISELECT(432,280),
  ABISELECT(224,148),
  ABISELECT(212,144),
  ABISELECT(208,140),
  ABISELECT(440,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S21028C8[0]),
  (VTBL_ENTRY)&_ZN8S21028C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21028C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S21028C138S21028C8__8S21028C1[] = {
  ABISELECT(208,140),
  ABISELECT(440,284),
  0,
  (VTBL_ENTRY)&(_ZTI9S21028C13[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S21028C8D1Ev,_ZTv0_n12_N8S21028C8D1Ev)();
extern void ABISELECT(_ZThn224_N8S21028C8D1Ev,_ZThn148_N8S21028C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21028C8D0Ev,_ZTv0_n12_N8S21028C8D0Ev)();
extern void ABISELECT(_ZThn224_N8S21028C8D0Ev,_ZThn148_N8S21028C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S21028C8__8S21028C1[] = {
  ABISELECT(-224,-148),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S21028C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21028C8D1Ev,_ZTv0_n12_N8S21028C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21028C8D0Ev,_ZTv0_n12_N8S21028C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21028C8D1Ev,_ZTv0_n16_N8S21028C8D1Ev)();
extern void ABISELECT(_ZThn432_N8S21028C8D1Ev,_ZThn280_N8S21028C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21028C8D0Ev,_ZTv0_n16_N8S21028C8D0Ev)();
extern void ABISELECT(_ZThn432_N8S21028C8D0Ev,_ZThn280_N8S21028C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21028C11__8S21028C8__8S21028C1[] = {
  ABISELECT(-432,-280),
  ABISELECT(-208,-132),
  ABISELECT(-432,-280),
  (VTBL_ENTRY)&(_ZTI8S21028C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21028C8D1Ev,_ZTv0_n16_N8S21028C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21028C8D0Ev,_ZTv0_n16_N8S21028C8D0Ev),
};
extern void _ZN8S21028C2D1Ev();
extern void _ZN8S21028C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21028C2__8S21028C1[] = {
  ABISELECT(192,132),
  ABISELECT(192,132),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21028C2[0]),
  (VTBL_ENTRY)&_ZN8S21028C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21028C2D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21028C2D1Ev,_ZTv0_n20_N8S21028C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S21028C2D1Ev,_ZThn8_N8S21028C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21028C2D0Ev,_ZTv0_n20_N8S21028C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S21028C2D0Ev,_ZThn8_N8S21028C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21028C3__8S21028C2__8S21028C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21028C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21028C2D1Ev,_ZTv0_n20_N8S21028C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21028C2D0Ev,_ZTv0_n20_N8S21028C2D0Ev),
};
extern void _ZN8S21028C3D1Ev();
extern void _ZN8S21028C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21028C3__8S21028C1[] = {
  ABISELECT(176,124),
  ABISELECT(176,124),
  0,
  (VTBL_ENTRY)&(_ZTI8S21028C3[0]),
  (VTBL_ENTRY)&_ZN8S21028C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21028C3D0Ev,
};
extern void _ZN9S21028C11D1Ev();
extern void _ZN9S21028C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21028C11__8S21028C1[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S21028C11[0]),
  (VTBL_ENTRY)&_ZN9S21028C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21028C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21028C11D1Ev,_ZTv0_n12_N9S21028C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21028C11D0Ev,_ZTv0_n12_N9S21028C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S21028C11__8S21028C1[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S21028C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21028C11D1Ev,_ZTv0_n12_N9S21028C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21028C11D0Ev,_ZTv0_n12_N9S21028C11D0Ev),
};
static  VTT_ENTRY vtt_S21028C1[] = {
  {&(_ZTV8S21028C1[12]),  12,40},
  {&(_tg__ZTV8S21028C8__8S21028C1[7]),  7,9},
  {&(_tg__ZTV9S21028C138S21028C8__8S21028C1[4]),  4,4},
  {&(_tg__ZTV8S19863C6__8S21028C8__8S21028C1[3]),  3,5},
  {&(_tg__ZTV9S21028C11__8S21028C8__8S21028C1[4]),  4,6},
  {&(_ZTV8S21028C1[20]),  20,40},
  {&(_ZTV8S21028C1[27]),  27,40},
  {&(_ZTV8S21028C1[32]),  32,40},
  {&(_ZTV8S21028C1[38]),  38,40},
  {&(_tg__ZTV8S21028C2__8S21028C1[5]),  5,7},
  {&(_tg__ZTV8S21028C3__8S21028C2__8S21028C1[5]),  5,7},
  {&(_tg__ZTV8S21028C3__8S21028C1[4]),  4,6},
  {&(_tg__ZTV9S21028C11__8S21028C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S21028C11__8S21028C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21028C1[];
extern  VTBL_ENTRY _ZTV8S21028C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21028C1[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21028C2D0Ev,_ZTv0_n20_N8S21028C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21028C2D0Ev,_ZThn8_N8S21028C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21028C2D1Ev,_ZTv0_n20_N8S21028C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21028C2D1Ev,_ZThn8_N8S21028C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21028C8D0Ev,_ZTv0_n16_N8S21028C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S21028C8D0Ev,_ZThn280_N8S21028C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21028C8D1Ev,_ZTv0_n16_N8S21028C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S21028C8D1Ev,_ZThn280_N8S21028C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21028C8D0Ev,_ZTv0_n12_N8S21028C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S21028C8D0Ev,_ZThn148_N8S21028C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21028C8D1Ev,_ZTv0_n12_N8S21028C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S21028C8D1Ev,_ZThn148_N8S21028C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21028C1D0Ev,_ZTv0_n16_N8S21028C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S21028C1D0Ev,_ZThn280_N8S21028C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21028C1D1Ev,_ZTv0_n16_N8S21028C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S21028C1D1Ev,_ZThn280_N8S21028C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21028C1D0Ev,_ZTv0_n12_N8S21028C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S21028C1D0Ev,_ZThn148_N8S21028C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21028C1D1Ev,_ZTv0_n12_N8S21028C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S21028C1D1Ev,_ZThn148_N8S21028C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21028C1D0Ev,_ZTv0_n20_N8S21028C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21028C1D0Ev,_ZThn16_N8S21028C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21028C1D1Ev,_ZTv0_n20_N8S21028C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21028C1D1Ev,_ZThn16_N8S21028C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21028C1D0Ev,_ZTv0_n24_N8S21028C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21028C1D0Ev,_ZThn8_N8S21028C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21028C1D1Ev,_ZTv0_n24_N8S21028C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21028C1D1Ev,_ZThn8_N8S21028C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21028C1 = {  "S21028C1", // class name
  bases_S21028C1, 18,
  &(vtc_S21028C1[0]), // expected_vtbl_contents
  &(vtt_S21028C1[0]), // expected_vtt_contents
  ABISELECT(448,288), // object size
  NSPAIRA(_ZTI8S21028C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21028C1),40, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21028C1),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7834C4  : virtual S19863C10 , virtual S19863C9_nt {
  long double s7834c4f0[10];
  virtual  ~S7834C4(); // _ZN7S7834C4D2Ev
  S7834C4(); // tgen
};
//SIG(-1 S7834C4) C1{ VBC2{ m} VBC3{ m Fi} vd FD[10]}


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

static void Test_S7834C4()
{
  extern Class_Descriptor cd_S7834C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S7834C4, buf);
    S7834C4 *dp, &lv = *(dp=new (buf) S7834C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S7834C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7834C4)");
    check_base_class_offset(lv, (S19863C10*), 0, "S7834C4");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(176,124), "S7834C4");
    check_field_offset(lv, s7834c4f0, ABISELECT(16,4), "S7834C4.s7834c4f0");
    test_class_info(&lv, &cd_S7834C4);
    dp->~S7834C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7834C4(Test_S7834C4, "S7834C4", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN7S7834C4C1Ev();
extern void _ZN7S7834C4D2Ev();
Name_Map name_map_S7834C4[] = {
  NSPAIR(_ZN7S7834C4C1Ev),
  NSPAIR(_ZN7S7834C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S7834C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C9_nt,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7834C4[];
extern void _ZN7S7834C4D1Ev();
extern void _ZN7S7834C4D0Ev();
static  VTBL_ENTRY vtc_S7834C4[] = {
  ABISELECT(176,124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7834C4[0]),
  (VTBL_ENTRY)&_ZN7S7834C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7834C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S7834C4[];
static  VTT_ENTRY vtt_S7834C4[] = {
  {&(_ZTV7S7834C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7834C4[];
extern  VTBL_ENTRY _ZTV7S7834C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7834C4[];
Class_Descriptor cd_S7834C4 = {  "S7834C4", // class name
  bases_S7834C4, 2,
  &(vtc_S7834C4[0]), // expected_vtbl_contents
  &(vtt_S7834C4[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI7S7834C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7834C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7834C4),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  S7834C7  : S19863C10 {
};
//SIG(-1 S7834C7) C1{ BC2{ m}}



static void Test_S7834C7()
{
  extern Class_Descriptor cd_S7834C7;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S7834C7, buf);
    S7834C7 &lv = *(new (buf) S7834C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S7834C7)");
    check2(__alignof__(lv), 1, "__alignof__(S7834C7)");
    check_base_class_offset(lv, (S19863C10*), 0, "S7834C7");
    test_class_info(&lv, &cd_S7834C7);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7834C7(Test_S7834C7, "S7834C7", 1);

#else // __cplusplus

extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S7834C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7834C7[];
Class_Descriptor cd_S7834C7 = {  "S7834C7", // class name
  bases_S7834C7, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI7S7834C7),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  S7834C3  : virtual S7834C4 , S7834C7 {
  char s7834c3f0;
  virtual  ~S7834C3(); // _ZN7S7834C3D2Ev
  S7834C3(); // tgen
};
//SIG(-1 S7834C3) C1{ VBC2{ VBC3{ m} VBC4{ m Fi} vd FD[10]} BC5{ BC3} vd Fc}


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

static void Test_S7834C3()
{
  extern Class_Descriptor cd_S7834C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S7834C3, buf);
    S7834C3 *dp, &lv = *(dp=new (buf) S7834C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S7834C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7834C3)");
    check_base_class_offset(lv, (S19863C10*)(S7834C4*), ABISELECT(192,132), "S7834C3");
    check_base_class_offset(lv, (S19863C9_nt*)(S7834C4*), ABISELECT(192,132), "S7834C3");
    check_base_class_offset(lv, (S7834C4*), ABISELECT(16,8), "S7834C3");
    check_base_class_offset(lv, (S19863C10*)(S7834C7*), 0, "S7834C3");
    check_base_class_offset(lv, (S7834C7*), 0, "S7834C3");
    check_field_offset(lv, s7834c3f0, ABISELECT(8,4), "S7834C3.s7834c3f0");
    test_class_info(&lv, &cd_S7834C3);
    dp->~S7834C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7834C3(Test_S7834C3, "S7834C3", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN7S7834C3C1Ev();
extern void _ZN7S7834C3D2Ev();
Name_Map name_map_S7834C3[] = {
  NSPAIR(_ZN7S7834C3C1Ev),
  NSPAIR(_ZN7S7834C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S7834C4;
extern VTBL_ENTRY _ZTI7S7834C4[];
extern  VTBL_ENTRY _ZTV7S7834C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7834C4[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S7834C7;
extern VTBL_ENTRY _ZTI7S7834C7[];
static Base_Class bases_S7834C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    ABISELECT(192,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(192,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7834C4,    ABISELECT(16,8), //bcp->offset
    7, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7834C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7834C3[];
extern void _ZN7S7834C3D1Ev();
extern void _ZN7S7834C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7834C3D1Ev,_ZTv0_n20_N7S7834C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7834C3D1Ev,_ZThn8_N7S7834C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7834C3D0Ev,_ZTv0_n20_N7S7834C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7834C3D0Ev,_ZThn8_N7S7834C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7834C3[] = {
  ABISELECT(192,132),
  ABISELECT(192,132),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7834C3[0]),
  (VTBL_ENTRY)&_ZN7S7834C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7834C3D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7834C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7834C3D1Ev,_ZTv0_n20_N7S7834C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7834C3D0Ev,_ZTv0_n20_N7S7834C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S7834C3[];
extern void _ZN7S7834C4D1Ev();
extern void _ZN7S7834C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7834C4__7S7834C3[] = {
  ABISELECT(176,124),
  ABISELECT(176,124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7834C4[0]),
  (VTBL_ENTRY)&_ZN7S7834C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7834C4D0Ev,
};
static  VTT_ENTRY vtt_S7834C3[] = {
  {&(_ZTV7S7834C3[5]),  5,14},
  {&(_ZTV7S7834C3[12]),  12,14},
  {&(_tg__ZTV7S7834C4__7S7834C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7834C3[];
extern  VTBL_ENTRY _ZTV7S7834C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7834C3[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7834C3D0Ev,_ZTv0_n20_N7S7834C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7834C3D0Ev,_ZThn8_N7S7834C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7834C3D1Ev,_ZTv0_n20_N7S7834C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7834C3D1Ev,_ZThn8_N7S7834C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7834C3 = {  "S7834C3", // class name
  bases_S7834C3, 5,
  &(vtc_S7834C3[0]), // expected_vtbl_contents
  &(vtt_S7834C3[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI7S7834C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7834C3),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7834C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7834C8  : virtual S19863C6 , S19863C8 {
  virtual  ~S7834C8(); // _ZN7S7834C8D2Ev
  S7834C8(); // tgen
};
//SIG(-1 S7834C8) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} BC4 vd}


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

static void Test_S7834C8()
{
  extern Class_Descriptor cd_S7834C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,35)];
    init_test(&cd_S7834C8, buf);
    S7834C8 *dp, &lv = *(dp=new (buf) S7834C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,136), "sizeof(S7834C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7834C8)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,4), "S7834C8");
    check_base_class_offset(lv, (S19863C8*), 0, "S7834C8");
    test_class_info(&lv, &cd_S7834C8);
    dp->~S7834C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7834C8(Test_S7834C8, "S7834C8", ABISELECT(224,136));

#else // __cplusplus

extern void _ZN7S7834C8C1Ev();
extern void _ZN7S7834C8D2Ev();
Name_Map name_map_S7834C8[] = {
  NSPAIR(_ZN7S7834C8C1Ev),
  NSPAIR(_ZN7S7834C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
static Base_Class bases_S7834C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,4), //bcp->offset
    5, //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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7834C8[];
extern void _ZN7S7834C8D1Ev();
extern void _ZN7S7834C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7834C8D1Ev,_ZTv0_n12_N7S7834C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S7834C8D1Ev,_ZThn4_N7S7834C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7834C8D0Ev,_ZTv0_n12_N7S7834C8D0Ev)();
extern void ABISELECT(_ZThn16_N7S7834C8D0Ev,_ZThn4_N7S7834C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7834C8[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7834C8[0]),
  (VTBL_ENTRY)&_ZN7S7834C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7834C8D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7834C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7834C8D1Ev,_ZTv0_n12_N7S7834C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7834C8D0Ev,_ZTv0_n12_N7S7834C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S7834C8[];
static  VTT_ENTRY vtt_S7834C8[] = {
  {&(_ZTV7S7834C8[3]),  3,10},
  {&(_ZTV7S7834C8[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S7834C8[];
extern  VTBL_ENTRY _ZTV7S7834C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7834C8[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7834C8D0Ev,_ZTv0_n12_N7S7834C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7834C8D0Ev,_ZThn4_N7S7834C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7834C8D1Ev,_ZTv0_n12_N7S7834C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7834C8D1Ev,_ZThn4_N7S7834C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7834C8 = {  "S7834C8", // class name
  bases_S7834C8, 2,
  &(vtc_S7834C8[0]), // expected_vtbl_contents
  &(vtt_S7834C8[0]), // expected_vtt_contents
  ABISELECT(224,136), // object size
  NSPAIRA(_ZTI7S7834C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7834C8),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7834C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7834C2  : virtual S7834C3 {
  ::S7834C8 s7834c2f0;
  int s7834c2f1;
  virtual  ~S7834C2(); // _ZN7S7834C2D2Ev
  S7834C2(); // tgen
};
//SIG(-1 S7834C2) C1{ VBC2{ VBC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]} BC6{ BC4} vd Fc} vd FC7{ VBC8{ vd m FC9{ VBC10{ m} VBC5 vd FD[10]}} BC10 vd} Fi}


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

static void Test_S7834C2()
{
  extern Class_Descriptor cd_S7834C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,71)];
    init_test(&cd_S7834C2, buf);
    S7834C2 *dp, &lv = *(dp=new (buf) S7834C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,280), "sizeof(S7834C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7834C2)");
    check_base_class_offset(lv, (S19863C10*)(S7834C4*), 0, "S7834C2");
    check_base_class_offset(lv, (S19863C9_nt*)(S7834C4*), ABISELECT(448,276), "S7834C2");
    check_base_class_offset(lv, (S7834C4*)(S7834C3*), ABISELECT(272,152), "S7834C2");
    check_base_class_offset(lv, (S19863C10*)(S7834C7*)(S7834C3*), ABISELECT(248,144), "S7834C2");
    check_base_class_offset(lv, (S7834C7*)(S7834C3*), ABISELECT(248,144), "S7834C2");
    check_base_class_offset(lv, (S7834C3*), ABISELECT(248,144), "S7834C2");
    check_field_offset(lv, s7834c2f0, ABISELECT(16,4), "S7834C2.s7834c2f0");
    check_field_offset(lv, s7834c2f1, ABISELECT(240,140), "S7834C2.s7834c2f1");
    test_class_info(&lv, &cd_S7834C2);
    dp->~S7834C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7834C2(Test_S7834C2, "S7834C2", ABISELECT(464,280));

#else // __cplusplus

extern void _ZN7S7834C2C1Ev();
extern void _ZN7S7834C2D2Ev();
Name_Map name_map_S7834C2[] = {
  NSPAIR(_ZN7S7834C2C1Ev),
  NSPAIR(_ZN7S7834C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S7834C4;
extern VTBL_ENTRY _ZTI7S7834C4[];
extern  VTBL_ENTRY _ZTV7S7834C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7834C4[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S7834C7;
extern VTBL_ENTRY _ZTI7S7834C7[];
extern Class_Descriptor cd_S7834C3;
extern VTBL_ENTRY _ZTI7S7834C3[];
extern  VTBL_ENTRY _ZTV7S7834C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7834C3[];
static Base_Class bases_S7834C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(448,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7834C4,    ABISELECT(272,152), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19863C10,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7834C7,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7834C3,    ABISELECT(248,144), //bcp->offset
    8, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7834C2[];
extern void _ZN7S7834C2D1Ev();
extern void _ZN7S7834C2D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S7834C2D1Ev,_ZTv0_n24_N7S7834C2D1Ev)();
extern void ABISELECT(_ZThn248_N7S7834C2D1Ev,_ZThn144_N7S7834C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7834C2D0Ev,_ZTv0_n24_N7S7834C2D0Ev)();
extern void ABISELECT(_ZThn248_N7S7834C2D0Ev,_ZThn144_N7S7834C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7834C2D1Ev,_ZTv0_n20_N7S7834C2D1Ev)();
extern void ABISELECT(_ZThn272_N7S7834C2D1Ev,_ZThn152_N7S7834C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7834C2D0Ev,_ZTv0_n20_N7S7834C2D0Ev)();
extern void ABISELECT(_ZThn272_N7S7834C2D0Ev,_ZThn152_N7S7834C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7834C2[] = {
  ABISELECT(448,276),
  0,
  ABISELECT(272,152),
  ABISELECT(248,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7834C2[0]),
  (VTBL_ENTRY)&_ZN7S7834C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7834C2D0Ev,
  ABISELECT(-248,-144),
  ABISELECT(200,132),
  ABISELECT(-248,-144),
  ABISELECT(24,8),
  ABISELECT(-248,-144),
  (VTBL_ENTRY)&(_ZTI7S7834C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7834C2D1Ev,_ZTv0_n24_N7S7834C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7834C2D0Ev,_ZTv0_n24_N7S7834C2D0Ev),
  ABISELECT(-272,-152),
  ABISELECT(176,124),
  ABISELECT(-272,-152),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI7S7834C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7834C2D1Ev,_ZTv0_n20_N7S7834C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7834C2D0Ev,_ZTv0_n20_N7S7834C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7834C2[];
extern void _ZN7S7834C3D1Ev();
extern void _ZN7S7834C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7834C3__7S7834C2[] = {
  ABISELECT(200,132),
  ABISELECT(-248,-144),
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7834C3[0]),
  (VTBL_ENTRY)&_ZN7S7834C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7834C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7834C3D1Ev,_ZTv0_n20_N7S7834C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S7834C3D1Ev,_ZThn8_N7S7834C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7834C3D0Ev,_ZTv0_n20_N7S7834C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S7834C3D0Ev,_ZThn8_N7S7834C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7834C4__7S7834C3__7S7834C2[] = {
  ABISELECT(-24,-8),
  ABISELECT(176,124),
  ABISELECT(-272,-152),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI7S7834C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7834C3D1Ev,_ZTv0_n20_N7S7834C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7834C3D0Ev,_ZTv0_n20_N7S7834C3D0Ev),
};
extern void _ZN7S7834C4D1Ev();
extern void _ZN7S7834C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7834C4__7S7834C2[] = {
  ABISELECT(176,124),
  ABISELECT(-272,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7834C4[0]),
  (VTBL_ENTRY)&_ZN7S7834C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7834C4D0Ev,
};
static  VTT_ENTRY vtt_S7834C2[] = {
  {&(_ZTV7S7834C2[6]),  6,23},
  {&(_ZTV7S7834C2[14]),  14,23},
  {&(_ZTV7S7834C2[21]),  21,23},
  {&(_tg__ZTV7S7834C3__7S7834C2[5]),  5,7},
  {&(_tg__ZTV7S7834C4__7S7834C3__7S7834C2[5]),  5,7},
  {&(_tg__ZTV7S7834C4__7S7834C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7834C2[];
extern  VTBL_ENTRY _ZTV7S7834C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7834C2[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7834C3D0Ev,_ZTv0_n20_N7S7834C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7834C3D0Ev,_ZThn8_N7S7834C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7834C3D1Ev,_ZTv0_n20_N7S7834C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7834C3D1Ev,_ZThn8_N7S7834C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7834C2D0Ev,_ZTv0_n20_N7S7834C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7834C2D0Ev,_ZThn152_N7S7834C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7834C2D1Ev,_ZTv0_n20_N7S7834C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7834C2D1Ev,_ZThn152_N7S7834C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7834C2D0Ev,_ZTv0_n24_N7S7834C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N7S7834C2D0Ev,_ZThn144_N7S7834C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7834C2D1Ev,_ZTv0_n24_N7S7834C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N7S7834C2D1Ev,_ZThn144_N7S7834C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7834C2 = {  "S7834C2", // class name
  bases_S7834C2, 6,
  &(vtc_S7834C2[0]), // expected_vtbl_contents
  &(vtt_S7834C2[0]), // expected_vtt_contents
  ABISELECT(464,280), // object size
  NSPAIRA(_ZTI7S7834C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7834C2),23, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7834C2),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7834C12  : virtual S19863C6 , virtual S19863C8 , virtual S19863C10 {
  void *s7834c12f0;
  ~S7834C12(); // tgen
  S7834C12(); // tgen
};
//SIG(-1 S7834C12) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} VBC4 VBC6{ m} Fp}


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

static void Test_S7834C12()
{
  extern Class_Descriptor cd_S7834C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,36)];
    init_test(&cd_S7834C12, buf);
    S7834C12 *dp, &lv = *(dp=new (buf) S7834C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S7834C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7834C12)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,8), "S7834C12");
    check_base_class_offset(lv, (S19863C8*), 0, "S7834C12");
    check_base_class_offset(lv, (S19863C10*), 0, "S7834C12");
    check_field_offset(lv, s7834c12f0, ABISELECT(8,4), "S7834C12.s7834c12f0");
    test_class_info(&lv, &cd_S7834C12);
    dp->~S7834C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7834C12(Test_S7834C12, "S7834C12", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN8S7834C12C1Ev();
extern void _ZN8S7834C12D1Ev();
Name_Map name_map_S7834C12[] = {
  NSPAIR(_ZN8S7834C12C1Ev),
  NSPAIR(_ZN8S7834C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S7834C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,8), //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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S7834C12[];
extern void _ZN8S7834C12D1Ev();
extern void _ZN8S7834C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7834C12D1Ev,_ZTv0_n12_N8S7834C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S7834C12D1Ev,_ZThn8_N8S7834C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7834C12D0Ev,_ZTv0_n12_N8S7834C12D0Ev)();
extern void ABISELECT(_ZThn16_N8S7834C12D0Ev,_ZThn8_N8S7834C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7834C12[] = {
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7834C12[0]),
  (VTBL_ENTRY)&_ZN8S7834C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7834C12D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7834C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7834C12D1Ev,_ZTv0_n12_N8S7834C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7834C12D0Ev,_ZTv0_n12_N8S7834C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S7834C12[];
static  VTT_ENTRY vtt_S7834C12[] = {
  {&(_ZTV8S7834C12[5]),  5,12},
  {&(_ZTV8S7834C12[10]),  10,12},
};
extern VTBL_ENTRY _ZTI8S7834C12[];
extern  VTBL_ENTRY _ZTV8S7834C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7834C12[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7834C12D0Ev,_ZTv0_n12_N8S7834C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7834C12D0Ev,_ZThn8_N8S7834C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7834C12D1Ev,_ZTv0_n12_N8S7834C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7834C12D1Ev,_ZThn8_N8S7834C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7834C12 = {  "S7834C12", // class name
  bases_S7834C12, 3,
  &(vtc_S7834C12[0]), // expected_vtbl_contents
  &(vtt_S7834C12[0]), // expected_vtt_contents
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI8S7834C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7834C12),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7834C12),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7834C13  : S19863C8 , S19863C10 , virtual S7834C7 , virtual S19863C9_nt {
  ~S7834C13(); // tgen
  S7834C13(); // tgen
};
//SIG(-1 S7834C13) C1{ BC2{ m} BC3{ m} VBC4{ BC3} VBC5{ m Fi}}


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

static void Test_S7834C13()
{
  extern Class_Descriptor cd_S7834C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7834C13, buf);
    S7834C13 *dp, &lv = *(dp=new (buf) S7834C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7834C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7834C13)");
    check_base_class_offset(lv, (S19863C8*), 0, "S7834C13");
    /*is_ambiguous_... S7834C13::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*), 0, "S7834C13");
    check_base_class_offset(lv, (S19863C10*)(S7834C7*), ABISELECT(8,4), "S7834C13");
    check_base_class_offset(lv, (S7834C7*), ABISELECT(8,4), "S7834C13");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(8,4), "S7834C13");
    test_class_info(&lv, &cd_S7834C13);
    dp->~S7834C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7834C13(Test_S7834C13, "S7834C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7834C13C1Ev();
extern void _ZN8S7834C13D1Ev();
Name_Map name_map_S7834C13[] = {
  NSPAIR(_ZN8S7834C13C1Ev),
  NSPAIR(_ZN8S7834C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S7834C7;
extern VTBL_ENTRY _ZTI7S7834C7[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S7834C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C10,    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_S7834C7,    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},
  {&cd_S19863C9_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7834C13[];
static  VTBL_ENTRY vtc_S7834C13[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7834C13[0]),
};
extern VTBL_ENTRY _ZTV8S7834C13[];
static  VTT_ENTRY vtt_S7834C13[] = {
  {&(_ZTV8S7834C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7834C13[];
extern  VTBL_ENTRY _ZTV8S7834C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7834C13[];
Class_Descriptor cd_S7834C13 = {  "S7834C13", // class name
  bases_S7834C13, 5,
  &(vtc_S7834C13[0]), // expected_vtbl_contents
  &(vtt_S7834C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7834C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7834C13),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7834C13),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  S7834C1  : S7834C2 , virtual S19863C2_nt , virtual S7834C8 , virtual S7834C12 , virtual S7834C13 {
  __tsi64 s7834c1f0;
  virtual  ~S7834C1(); // _ZN7S7834C1D2Ev
  S7834C1(); // tgen
};
//SIG(1 S7834C1) C1{ BC2{ VBC3{ VBC4{ VBC5{ m} VBC6{ m Fi} vd FD[10]} BC7{ BC5} vd Fc} vd FC8{ VBC9{ vd m FC10{ VBC11{ m} VBC6 vd FD[10]}} BC11 vd} Fi} VBC12{ m} VBC8 VBC13{ VBC9 VBC11 VBC5 Fp} VBC14{ BC11 BC5 VBC7 VBC6} vd FL}


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

static void Test_S7834C1()
{
  extern Class_Descriptor cd_S7834C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(45,111)];
    init_test(&cd_S7834C1, buf);
    S7834C1 *dp, &lv = *(dp=new (buf) S7834C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(704,440), "sizeof(S7834C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7834C1)");
    check_base_class_offset(lv, (S19863C10*)(S7834C4*), 0, "S7834C1");
    check_base_class_offset(lv, (S19863C10*)(S7834C12*), 0, "S7834C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S7834C4*), ABISELECT(448,284), "S7834C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S7834C13*), ABISELECT(448,284), "S7834C1");
    check_base_class_offset(lv, (S7834C4*)(S7834C3*), ABISELECT(272,160), "S7834C1");
    check_base_class_offset(lv, (S19863C10*)(S7834C7*)(S7834C3*), ABISELECT(256,152), "S7834C1");
    check_base_class_offset(lv, (S7834C7*)(S7834C3*), ABISELECT(256,152), "S7834C1");
    check_base_class_offset(lv, (S7834C3*)(S7834C2*), ABISELECT(256,152), "S7834C1");
    check_base_class_offset(lv, (S7834C2*), 0, "S7834C1");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S7834C1");
    check_base_class_offset(lv, (S19863C6*)(S7834C8*), ABISELECT(464,292), "S7834C1");
    check_base_class_offset(lv, (S19863C6*)(S7834C12*), ABISELECT(464,292), "S7834C1");
    check_base_class_offset(lv, (S19863C8*)(S7834C8*), ABISELECT(456,288), "S7834C1");
    check_base_class_offset(lv, (S7834C8*), ABISELECT(456,288), "S7834C1");
    check_base_class_offset(lv, (S19863C8*)(S7834C12*), 0, "S7834C1");
    check_base_class_offset(lv, (S7834C12*), ABISELECT(672,424), "S7834C1");
    check_base_class_offset(lv, (S19863C8*)(S7834C13*), ABISELECT(688,432), "S7834C1");
    /*is_ambiguous_... S7834C13::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*)(S7834C13*), ABISELECT(688,432), "S7834C1");
    /*is_ambiguous_... S7834C1::S7834C7 */ AMB_check_base_class_offset(lv, (S19863C10*)(S7834C7*), ABISELECT(696,436), "S7834C1");
    check_base_class_offset(lv, (S7834C7*)(S7834C13*), ABISELECT(696,436), "S7834C1");
    check_base_class_offset(lv, (S7834C13*), ABISELECT(688,432), "S7834C1");
    check_field_offset(lv, s7834c1f0, ABISELECT(248,144), "S7834C1.s7834c1f0");
    test_class_info(&lv, &cd_S7834C1);
    dp->~S7834C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7834C1(Test_S7834C1, "S7834C1", ABISELECT(704,440));

#else // __cplusplus

extern void _ZN7S7834C1C1Ev();
extern void _ZN7S7834C1D2Ev();
Name_Map name_map_S7834C1[] = {
  NSPAIR(_ZN7S7834C1C1Ev),
  NSPAIR(_ZN7S7834C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S7834C4;
extern VTBL_ENTRY _ZTI7S7834C4[];
extern  VTBL_ENTRY _ZTV7S7834C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7834C4[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S7834C7;
extern VTBL_ENTRY _ZTI7S7834C7[];
extern Class_Descriptor cd_S7834C3;
extern VTBL_ENTRY _ZTI7S7834C3[];
extern  VTBL_ENTRY _ZTV7S7834C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7834C3[];
extern Class_Descriptor cd_S7834C2;
extern VTBL_ENTRY _ZTI7S7834C2[];
extern  VTBL_ENTRY _ZTV7S7834C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7834C2[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S7834C8;
extern VTBL_ENTRY _ZTI7S7834C8[];
extern  VTBL_ENTRY _ZTV7S7834C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7834C8[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S7834C12;
extern VTBL_ENTRY _ZTI8S7834C12[];
extern  VTBL_ENTRY _ZTV8S7834C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7834C12[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S7834C7;
extern VTBL_ENTRY _ZTI7S7834C7[];
extern Class_Descriptor cd_S7834C13;
extern VTBL_ENTRY _ZTI8S7834C13[];
extern  VTBL_ENTRY _ZTV8S7834C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7834C13[];
static Base_Class bases_S7834C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(448,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7834C4,    ABISELECT(272,160), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19863C10,    ABISELECT(256,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
    4, //immediately_derived
  0, 0},
  {&cd_S7834C7,    ABISELECT(256,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
    5, //immediately_derived
  0, 0},
  {&cd_S7834C3,    ABISELECT(256,152), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7834C2,    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},
  {&cd_S19863C2_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, 1},
  {&cd_S19863C6,    ABISELECT(464,292), //bcp->offset
    36, //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
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19863C8,    ABISELECT(456,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7834C8,    ABISELECT(456,288), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7834C12,    ABISELECT(672,424), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C8,    ABISELECT(688,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19863C10,    ABISELECT(688,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19863C10,    ABISELECT(696,436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7834C7,    ABISELECT(696,436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7834C13,    ABISELECT(688,432), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7834C1[];
extern void _ZN7S7834C1D1Ev();
extern void _ZN7S7834C1D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S7834C1D1Ev,_ZTv0_n24_N7S7834C1D1Ev)();
extern void ABISELECT(_ZThn256_N7S7834C1D1Ev,_ZThn152_N7S7834C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7834C1D0Ev,_ZTv0_n24_N7S7834C1D0Ev)();
extern void ABISELECT(_ZThn256_N7S7834C1D0Ev,_ZThn152_N7S7834C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7834C1D1Ev,_ZTv0_n20_N7S7834C1D1Ev)();
extern void ABISELECT(_ZThn272_N7S7834C1D1Ev,_ZThn160_N7S7834C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7834C1D0Ev,_ZTv0_n20_N7S7834C1D0Ev)();
extern void ABISELECT(_ZThn272_N7S7834C1D0Ev,_ZThn160_N7S7834C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7834C1D1Ev,_ZTv0_n16_N7S7834C1D1Ev)();
extern void ABISELECT(_ZThn456_N7S7834C1D1Ev,_ZThn288_N7S7834C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7834C1D0Ev,_ZTv0_n16_N7S7834C1D0Ev)();
extern void ABISELECT(_ZThn456_N7S7834C1D0Ev,_ZThn288_N7S7834C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7834C1D1Ev,_ZTv0_n12_N7S7834C1D1Ev)();
extern void ABISELECT(_ZThn464_N7S7834C1D1Ev,_ZThn292_N7S7834C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7834C1D0Ev,_ZTv0_n12_N7S7834C1D0Ev)();
extern void ABISELECT(_ZThn464_N7S7834C1D0Ev,_ZThn292_N7S7834C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7834C1D1Ev,_ZTv0_n24_N7S7834C1D1Ev)();
extern void ABISELECT(_ZThn672_N7S7834C1D1Ev,_ZThn424_N7S7834C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7834C1D0Ev,_ZTv0_n24_N7S7834C1D0Ev)();
extern void ABISELECT(_ZThn672_N7S7834C1D0Ev,_ZThn424_N7S7834C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7834C1[] = {
  ABISELECT(696,436),
  ABISELECT(688,432),
  0,
  ABISELECT(672,424),
  ABISELECT(464,292),
  ABISELECT(456,288),
  0,
  ABISELECT(448,284),
  0,
  ABISELECT(272,160),
  ABISELECT(256,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7834C1[0]),
  (VTBL_ENTRY)&_ZN7S7834C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7834C1D0Ev,
  ABISELECT(-256,-152),
  ABISELECT(192,132),
  ABISELECT(-256,-152),
  ABISELECT(16,8),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S7834C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7834C1D1Ev,_ZTv0_n24_N7S7834C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7834C1D0Ev,_ZTv0_n24_N7S7834C1D0Ev),
  ABISELECT(-272,-160),
  ABISELECT(176,124),
  ABISELECT(-272,-160),
  ABISELECT(-272,-160),
  (VTBL_ENTRY)&(_ZTI7S7834C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7834C1D1Ev,_ZTv0_n20_N7S7834C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7834C1D0Ev,_ZTv0_n20_N7S7834C1D0Ev),
  ABISELECT(-456,-288),
  ABISELECT(8,4),
  ABISELECT(-456,-288),
  (VTBL_ENTRY)&(_ZTI7S7834C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7834C1D1Ev,_ZTv0_n16_N7S7834C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7834C1D0Ev,_ZTv0_n16_N7S7834C1D0Ev),
  ABISELECT(-464,-292),
  ABISELECT(-464,-292),
  (VTBL_ENTRY)&(_ZTI7S7834C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7834C1D1Ev,_ZTv0_n12_N7S7834C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7834C1D0Ev,_ZTv0_n12_N7S7834C1D0Ev),
  ABISELECT(-672,-424),
  ABISELECT(-672,-424),
  ABISELECT(-672,-424),
  ABISELECT(-208,-132),
  ABISELECT(-672,-424),
  (VTBL_ENTRY)&(_ZTI7S7834C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7834C1D1Ev,_ZTv0_n24_N7S7834C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7834C1D0Ev,_ZTv0_n24_N7S7834C1D0Ev),
  ABISELECT(-240,-148),
  ABISELECT(8,4),
  ABISELECT(-688,-432),
  (VTBL_ENTRY)&(_ZTI7S7834C1[0]),
};
extern VTBL_ENTRY _ZTV7S7834C1[];
extern void _ZN7S7834C2D1Ev();
extern void _ZN7S7834C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7834C2__7S7834C1[] = {
  ABISELECT(448,284),
  0,
  ABISELECT(272,160),
  ABISELECT(256,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7834C2[0]),
  (VTBL_ENTRY)&_ZN7S7834C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7834C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7834C2D1Ev,_ZTv0_n24_N7S7834C2D1Ev)();
extern void ABISELECT(_ZThn256_N7S7834C2D1Ev,_ZThn152_N7S7834C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7834C2D0Ev,_ZTv0_n24_N7S7834C2D0Ev)();
extern void ABISELECT(_ZThn256_N7S7834C2D0Ev,_ZThn152_N7S7834C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7834C3__7S7834C2__7S7834C1[] = {
  ABISELECT(-256,-152),
  ABISELECT(192,132),
  ABISELECT(-256,-152),
  ABISELECT(16,8),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S7834C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7834C2D1Ev,_ZTv0_n24_N7S7834C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7834C2D0Ev,_ZTv0_n24_N7S7834C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7834C2D1Ev,_ZTv0_n20_N7S7834C2D1Ev)();
extern void ABISELECT(_ZThn272_N7S7834C2D1Ev,_ZThn160_N7S7834C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7834C2D0Ev,_ZTv0_n20_N7S7834C2D0Ev)();
extern void ABISELECT(_ZThn272_N7S7834C2D0Ev,_ZThn160_N7S7834C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7834C4__7S7834C2__7S7834C1[] = {
  ABISELECT(-272,-160),
  ABISELECT(176,124),
  ABISELECT(-272,-160),
  ABISELECT(-272,-160),
  (VTBL_ENTRY)&(_ZTI7S7834C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7834C2D1Ev,_ZTv0_n20_N7S7834C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7834C2D0Ev,_ZTv0_n20_N7S7834C2D0Ev),
};
extern void _ZN7S7834C3D1Ev();
extern void _ZN7S7834C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7834C3__7S7834C1[] = {
  ABISELECT(192,132),
  ABISELECT(-256,-152),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7834C3[0]),
  (VTBL_ENTRY)&_ZN7S7834C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7834C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7834C3D1Ev,_ZTv0_n20_N7S7834C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7834C3D1Ev,_ZThn8_N7S7834C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7834C3D0Ev,_ZTv0_n20_N7S7834C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7834C3D0Ev,_ZThn8_N7S7834C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7834C4__7S7834C3__7S7834C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(176,124),
  ABISELECT(-272,-160),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7834C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7834C3D1Ev,_ZTv0_n20_N7S7834C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7834C3D0Ev,_ZTv0_n20_N7S7834C3D0Ev),
};
extern void _ZN7S7834C4D1Ev();
extern void _ZN7S7834C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7834C4__7S7834C1[] = {
  ABISELECT(176,124),
  ABISELECT(-272,-160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7834C4[0]),
  (VTBL_ENTRY)&_ZN7S7834C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7834C4D0Ev,
};
extern void _ZN7S7834C8D1Ev();
extern void _ZN7S7834C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7834C8__7S7834C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7834C8[0]),
  (VTBL_ENTRY)&_ZN7S7834C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7834C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7834C8D1Ev,_ZTv0_n12_N7S7834C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S7834C8D1Ev,_ZThn4_N7S7834C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7834C8D0Ev,_ZTv0_n12_N7S7834C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S7834C8D0Ev,_ZThn4_N7S7834C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__7S7834C8__7S7834C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7834C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7834C8D1Ev,_ZTv0_n12_N7S7834C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7834C8D0Ev,_ZTv0_n12_N7S7834C8D0Ev),
};
extern void _ZN8S7834C12D1Ev();
extern void _ZN8S7834C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7834C12__7S7834C1[] = {
  ABISELECT(-672,-424),
  ABISELECT(-672,-424),
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S7834C12[0]),
  (VTBL_ENTRY)&_ZN8S7834C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7834C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7834C12D1Ev,_ZTv0_n12_N8S7834C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7834C12D0Ev,_ZTv0_n12_N8S7834C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S7834C12__7S7834C1[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI8S7834C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7834C12D1Ev,_ZTv0_n12_N8S7834C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7834C12D0Ev,_ZTv0_n12_N8S7834C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7834C13__7S7834C1[] = {
  ABISELECT(-240,-148),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7834C13[0]),
};
static  VTT_ENTRY vtt_S7834C1[] = {
  {&(_ZTV7S7834C1[13]),  13,53},
  {&(_tg__ZTV7S7834C2__7S7834C1[6]),  6,8},
  {&(_tg__ZTV7S7834C3__7S7834C2__7S7834C1[6]),  6,8},
  {&(_tg__ZTV7S7834C4__7S7834C2__7S7834C1[5]),  5,7},
  {&(_ZTV7S7834C1[21]),  21,53},
  {&(_ZTV7S7834C1[28]),  28,53},
  {&(_ZTV7S7834C1[34]),  34,53},
  {&(_ZTV7S7834C1[39]),  39,53},
  {&(_ZTV7S7834C1[47]),  47,53},
  {&(_ZTV7S7834C1[53]),  53,53},
  {&(_tg__ZTV7S7834C3__7S7834C1[5]),  5,7},
  {&(_tg__ZTV7S7834C4__7S7834C3__7S7834C1[5]),  5,7},
  {&(_tg__ZTV7S7834C4__7S7834C1[4]),  4,6},
  {&(_tg__ZTV7S7834C8__7S7834C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__7S7834C8__7S7834C1[3]),  3,5},
  {&(_tg__ZTV8S7834C12__7S7834C1[5]),  5,7},
  {&(_tg__ZTV8S19863C6__8S7834C12__7S7834C1[3]),  3,5},
  {&(_tg__ZTV8S7834C13__7S7834C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7834C1[];
extern  VTBL_ENTRY _ZTV7S7834C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7834C1[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7834C8D0Ev,_ZTv0_n12_N7S7834C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7834C8D0Ev,_ZThn4_N7S7834C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7834C8D1Ev,_ZTv0_n12_N7S7834C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7834C8D1Ev,_ZThn4_N7S7834C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7834C3D0Ev,_ZTv0_n20_N7S7834C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7834C3D0Ev,_ZThn8_N7S7834C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7834C3D1Ev,_ZTv0_n20_N7S7834C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7834C3D1Ev,_ZThn8_N7S7834C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7834C2D0Ev,_ZTv0_n20_N7S7834C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7834C2D0Ev,_ZThn160_N7S7834C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7834C2D1Ev,_ZTv0_n20_N7S7834C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7834C2D1Ev,_ZThn160_N7S7834C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7834C2D0Ev,_ZTv0_n24_N7S7834C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7834C2D0Ev,_ZThn152_N7S7834C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7834C2D1Ev,_ZTv0_n24_N7S7834C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7834C2D1Ev,_ZThn152_N7S7834C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7834C1D0Ev,_ZTv0_n12_N7S7834C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S7834C1D0Ev,_ZThn292_N7S7834C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7834C1D1Ev,_ZTv0_n12_N7S7834C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S7834C1D1Ev,_ZThn292_N7S7834C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7834C1D0Ev,_ZTv0_n16_N7S7834C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N7S7834C1D0Ev,_ZThn288_N7S7834C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7834C1D1Ev,_ZTv0_n16_N7S7834C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn456_N7S7834C1D1Ev,_ZThn288_N7S7834C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7834C1D0Ev,_ZTv0_n20_N7S7834C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7834C1D0Ev,_ZThn160_N7S7834C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7834C1D1Ev,_ZTv0_n20_N7S7834C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7834C1D1Ev,_ZThn160_N7S7834C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7834C1D0Ev,_ZTv0_n24_N7S7834C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S7834C1D0Ev,_ZThn424_N7S7834C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7834C1D0Ev,_ZThn152_N7S7834C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7834C1D1Ev,_ZTv0_n24_N7S7834C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S7834C1D1Ev,_ZThn424_N7S7834C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7834C1D1Ev,_ZThn152_N7S7834C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7834C1 = {  "S7834C1", // class name
  bases_S7834C1, 18,
  &(vtc_S7834C1[0]), // expected_vtbl_contents
  &(vtt_S7834C1[0]), // expected_vtt_contents
  ABISELECT(704,440), // object size
  NSPAIRA(_ZTI7S7834C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7834C1),53, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7834C1),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3950C2  : S1766C4_nt {
  int s3950c2f0;
  void *s3950c2f1[2];
  int s3950c2f2;
  virtual  ~S3950C2(); // _ZN7S3950C2D1Ev
  virtual void  v10(); // _ZN7S3950C23v10Ev
  virtual void  v11(); // _ZN7S3950C23v11Ev
  virtual void  v12(); // _ZN7S3950C23v12Ev
  virtual void  v13(); // _ZN7S3950C23v13Ev
  virtual void  v14(); // _ZN7S3950C23v14Ev
  virtual void  v15(); // _ZN7S3950C23v15Ev
  virtual void  v16(); // _ZN7S3950C23v16Ev
  virtual void  v17(); // _ZN7S3950C23v17Ev
  virtual void  v18(); // _ZN7S3950C23v18Ev
  virtual void  v19(); // _ZN7S3950C23v19Ev
  virtual void  v20(); // _ZN7S3950C23v20Ev
  S3950C2(); // tgen
};
//SIG(-1 S3950C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S3950C2 ::~S3950C2(){ note_dtor("S3950C2", this);}
void  S3950C2 ::v10(){vfunc_called(this, "_ZN7S3950C23v10Ev");}
void  S3950C2 ::v11(){vfunc_called(this, "_ZN7S3950C23v11Ev");}
void  S3950C2 ::v12(){vfunc_called(this, "_ZN7S3950C23v12Ev");}
void  S3950C2 ::v13(){vfunc_called(this, "_ZN7S3950C23v13Ev");}
void  S3950C2 ::v14(){vfunc_called(this, "_ZN7S3950C23v14Ev");}
void  S3950C2 ::v15(){vfunc_called(this, "_ZN7S3950C23v15Ev");}
void  S3950C2 ::v16(){vfunc_called(this, "_ZN7S3950C23v16Ev");}
void  S3950C2 ::v17(){vfunc_called(this, "_ZN7S3950C23v17Ev");}
void  S3950C2 ::v18(){vfunc_called(this, "_ZN7S3950C23v18Ev");}
void  S3950C2 ::v19(){vfunc_called(this, "_ZN7S3950C23v19Ev");}
void  S3950C2 ::v20(){vfunc_called(this, "_ZN7S3950C23v20Ev");}
S3950C2 ::S3950C2(){ note_ctor("S3950C2", this);} // tgen

static void Test_S3950C2()
{
  extern Class_Descriptor cd_S3950C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3950C2, buf);
    S3950C2 *dp, &lv = *(dp=new (buf) S3950C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3950C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3950C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3950C2");
    check_field_offset(lv, s3950c2f0, ABISELECT(16,12), "S3950C2.s3950c2f0");
    check_field_offset(lv, s3950c2f1, ABISELECT(24,16), "S3950C2.s3950c2f1");
    check_field_offset(lv, s3950c2f2, ABISELECT(40,24), "S3950C2.s3950c2f2");
    test_class_info(&lv, &cd_S3950C2);
    dp->~S3950C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3950C2(Test_S3950C2, "S3950C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3950C2C1Ev();
extern void _ZN7S3950C2D1Ev();
Name_Map name_map_S3950C2[] = {
  NSPAIR(_ZN7S3950C2C1Ev),
  NSPAIR(_ZN7S3950C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3950C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3950C2[];
extern void _ZN7S3950C2D1Ev();
extern void _ZN7S3950C2D0Ev();
extern void _ZN7S3950C23v10Ev();
extern void _ZN7S3950C23v11Ev();
extern void _ZN7S3950C23v12Ev();
extern void _ZN7S3950C23v13Ev();
extern void _ZN7S3950C23v14Ev();
extern void _ZN7S3950C23v15Ev();
extern void _ZN7S3950C23v16Ev();
extern void _ZN7S3950C23v17Ev();
extern void _ZN7S3950C23v18Ev();
extern void _ZN7S3950C23v19Ev();
extern void _ZN7S3950C23v20Ev();
static  VTBL_ENTRY vtc_S3950C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3950C2[0]),
  (VTBL_ENTRY)&_ZN7S3950C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3950C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S3950C2[];
extern  VTBL_ENTRY _ZTV7S3950C2[];
Class_Descriptor cd_S3950C2 = {  "S3950C2", // class name
  bases_S3950C2, 1,
  &(vtc_S3950C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3950C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3950C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3950C1  : S3950C2 {
  void *s3950c1f0;
  ::S3961C7_nt s3950c1f1;
  int s3950c1f2[2];
  void *s3950c1f3;
  int s3950c1f4;
  __tsi64 s3950c1f5;
  int s3950c1f6;
  char s3950c1f7[2];
  virtual  ~S3950C1(); // _ZN7S3950C1D1Ev
  virtual void  v1(); // _ZN7S3950C12v1Ev
  virtual void  v2(); // _ZN7S3950C12v2Ev
  virtual void  v3(); // _ZN7S3950C12v3Ev
  virtual void  v4(); // _ZN7S3950C12v4Ev
  virtual void  v5(); // _ZN7S3950C12v5Ev
  virtual void  v6(); // _ZN7S3950C12v6Ev
  virtual void  v7(); // _ZN7S3950C12v7Ev
  virtual void  v8(); // _ZN7S3950C12v8Ev
  virtual void  v9(); // _ZN7S3950C12v9Ev
  S3950C1(); // tgen
};
//SIG(1 S3950C1) C1{ BC2{ BC3{ vd m FL} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi Fp[2] Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp FC4{ BC3 vd Fp Fi[4] Fp} Fi[2] Fp Fi FL Fi Fc[2]}


 S3950C1 ::~S3950C1(){ note_dtor("S3950C1", this);}
void  S3950C1 ::v1(){vfunc_called(this, "_ZN7S3950C12v1Ev");}
void  S3950C1 ::v2(){vfunc_called(this, "_ZN7S3950C12v2Ev");}
void  S3950C1 ::v3(){vfunc_called(this, "_ZN7S3950C12v3Ev");}
void  S3950C1 ::v4(){vfunc_called(this, "_ZN7S3950C12v4Ev");}
void  S3950C1 ::v5(){vfunc_called(this, "_ZN7S3950C12v5Ev");}
void  S3950C1 ::v6(){vfunc_called(this, "_ZN7S3950C12v6Ev");}
void  S3950C1 ::v7(){vfunc_called(this, "_ZN7S3950C12v7Ev");}
void  S3950C1 ::v8(){vfunc_called(this, "_ZN7S3950C12v8Ev");}
void  S3950C1 ::v9(){vfunc_called(this, "_ZN7S3950C12v9Ev");}
S3950C1 ::S3950C1(){ note_ctor("S3950C1", this);} // tgen

static void Test_S3950C1()
{
  extern Class_Descriptor cd_S3950C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,26)];
    init_test(&cd_S3950C1, buf);
    S3950C1 *dp, &lv = *(dp=new (buf) S3950C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S3950C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3950C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3950C2*), 0, "S3950C1");
    check_base_class_offset(lv, (S3950C2*), 0, "S3950C1");
    check_field_offset(lv, s3950c1f0, ABISELECT(48,28), "S3950C1.s3950c1f0");
    check_field_offset(lv, s3950c1f1, ABISELECT(56,32), "S3950C1.s3950c1f1");
    check_field_offset(lv, s3950c1f2, ABISELECT(104,68), "S3950C1.s3950c1f2");
    check_field_offset(lv, s3950c1f3, ABISELECT(112,76), "S3950C1.s3950c1f3");
    check_field_offset(lv, s3950c1f4, ABISELECT(120,80), "S3950C1.s3950c1f4");
    check_field_offset(lv, s3950c1f5, ABISELECT(128,84), "S3950C1.s3950c1f5");
    check_field_offset(lv, s3950c1f6, ABISELECT(136,92), "S3950C1.s3950c1f6");
    check_field_offset(lv, s3950c1f7, ABISELECT(140,96), "S3950C1.s3950c1f7");
    test_class_info(&lv, &cd_S3950C1);
    dp->~S3950C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3950C1(Test_S3950C1, "S3950C1", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN7S3950C1C1Ev();
extern void _ZN7S3950C1D1Ev();
Name_Map name_map_S3950C1[] = {
  NSPAIR(_ZN7S3950C1C1Ev),
  NSPAIR(_ZN7S3950C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3950C2;
extern VTBL_ENTRY _ZTI7S3950C2[];
extern  VTBL_ENTRY _ZTV7S3950C2[];
static Base_Class bases_S3950C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3950C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3950C1[];
extern void _ZN7S3950C1D1Ev();
extern void _ZN7S3950C1D0Ev();
extern void _ZN7S3950C23v10Ev();
extern void _ZN7S3950C23v11Ev();
extern void _ZN7S3950C23v12Ev();
extern void _ZN7S3950C23v13Ev();
extern void _ZN7S3950C23v14Ev();
extern void _ZN7S3950C23v15Ev();
extern void _ZN7S3950C23v16Ev();
extern void _ZN7S3950C23v17Ev();
extern void _ZN7S3950C23v18Ev();
extern void _ZN7S3950C23v19Ev();
extern void _ZN7S3950C23v20Ev();
extern void _ZN7S3950C12v1Ev();
extern void _ZN7S3950C12v2Ev();
extern void _ZN7S3950C12v3Ev();
extern void _ZN7S3950C12v4Ev();
extern void _ZN7S3950C12v5Ev();
extern void _ZN7S3950C12v6Ev();
extern void _ZN7S3950C12v7Ev();
extern void _ZN7S3950C12v8Ev();
extern void _ZN7S3950C12v9Ev();
static  VTBL_ENTRY vtc_S3950C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3950C1[0]),
  (VTBL_ENTRY)&_ZN7S3950C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3950C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3950C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3950C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3950C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3950C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3950C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3950C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3950C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3950C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3950C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3950C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S3950C1[];
extern  VTBL_ENTRY _ZTV7S3950C1[];
Class_Descriptor cd_S3950C1 = {  "S3950C1", // class name
  bases_S3950C1, 2,
  &(vtc_S3950C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI7S3950C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3950C1),24, //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  S19423C6  {
  virtual void  v2(); // _ZN8S19423C62v2Ev
  virtual void  v3(); // _ZN8S19423C62v3Ev
  virtual void  v4(); // _ZN8S19423C62v4Ev
  ~S19423C6(); // tgen
  S19423C6(); // tgen
};
//SIG(-1 S19423C6) C1{ v1 v2 v3}


void  S19423C6 ::v2(){vfunc_called(this, "_ZN8S19423C62v2Ev");}
void  S19423C6 ::v3(){vfunc_called(this, "_ZN8S19423C62v3Ev");}
void  S19423C6 ::v4(){vfunc_called(this, "_ZN8S19423C62v4Ev");}
S19423C6 ::~S19423C6(){ note_dtor("S19423C6", this);} // tgen
S19423C6 ::S19423C6(){ note_ctor("S19423C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19423C6C1Ev();
extern void _ZN8S19423C6D1Ev();
Name_Map name_map_S19423C6[] = {
  NSPAIR(_ZN8S19423C6C1Ev),
  NSPAIR(_ZN8S19423C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19423C6[];
extern void _ZN8S19423C62v2Ev();
extern void _ZN8S19423C62v3Ev();
extern void _ZN8S19423C62v4Ev();
static  VTBL_ENTRY vtc_S19423C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19423C6[0]),
  (VTBL_ENTRY)&_ZN8S19423C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v4Ev,
};
extern VTBL_ENTRY _ZTI8S19423C6[];
extern  VTBL_ENTRY _ZTV8S19423C6[];
Class_Descriptor cd_S19423C6 = {  "S19423C6", // class name
  0,0,//no base classes
  &(vtc_S19423C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19423C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19423C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19423C5  : S19423C6 {
  void *s19423c5f0;
  virtual  ~S19423C5(); // _ZN8S19423C5D1Ev
  virtual void  v5(); // _ZN8S19423C52v5Ev
  virtual void  v6(); // _ZN8S19423C52v6Ev
  virtual void  v7(); // _ZN8S19423C52v7Ev
  virtual void  v8(); // _ZN8S19423C52v8Ev
  virtual void  v9(); // _ZN8S19423C52v9Ev
  S19423C5(); // tgen
};
//SIG(-1 S19423C5) C1{ BC2{ v6 v7 v8} vd v1 v2 v3 v4 v5 Fp}


 S19423C5 ::~S19423C5(){ note_dtor("S19423C5", this);}
void  S19423C5 ::v5(){vfunc_called(this, "_ZN8S19423C52v5Ev");}
void  S19423C5 ::v6(){vfunc_called(this, "_ZN8S19423C52v6Ev");}
void  S19423C5 ::v7(){vfunc_called(this, "_ZN8S19423C52v7Ev");}
void  S19423C5 ::v8(){vfunc_called(this, "_ZN8S19423C52v8Ev");}
void  S19423C5 ::v9(){vfunc_called(this, "_ZN8S19423C52v9Ev");}
S19423C5 ::S19423C5(){ note_ctor("S19423C5", this);} // tgen

static void Test_S19423C5()
{
  extern Class_Descriptor cd_S19423C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19423C5, buf);
    S19423C5 *dp, &lv = *(dp=new (buf) S19423C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19423C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19423C5)");
    check_base_class_offset(lv, (S19423C6*), 0, "S19423C5");
    check_field_offset(lv, s19423c5f0, ABISELECT(8,4), "S19423C5.s19423c5f0");
    test_class_info(&lv, &cd_S19423C5);
    dp->~S19423C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19423C5(Test_S19423C5, "S19423C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19423C5C1Ev();
extern void _ZN8S19423C5D1Ev();
Name_Map name_map_S19423C5[] = {
  NSPAIR(_ZN8S19423C5C1Ev),
  NSPAIR(_ZN8S19423C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19423C6;
extern VTBL_ENTRY _ZTI8S19423C6[];
extern  VTBL_ENTRY _ZTV8S19423C6[];
static Base_Class bases_S19423C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19423C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19423C5[];
extern void _ZN8S19423C62v2Ev();
extern void _ZN8S19423C62v3Ev();
extern void _ZN8S19423C62v4Ev();
extern void _ZN8S19423C5D1Ev();
extern void _ZN8S19423C5D0Ev();
extern void _ZN8S19423C52v5Ev();
extern void _ZN8S19423C52v6Ev();
extern void _ZN8S19423C52v7Ev();
extern void _ZN8S19423C52v8Ev();
extern void _ZN8S19423C52v9Ev();
static  VTBL_ENTRY vtc_S19423C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19423C5[0]),
  (VTBL_ENTRY)&_ZN8S19423C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19423C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19423C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v9Ev,
};
extern VTBL_ENTRY _ZTI8S19423C5[];
extern  VTBL_ENTRY _ZTV8S19423C5[];
Class_Descriptor cd_S19423C5 = {  "S19423C5", // class name
  bases_S19423C5, 1,
  &(vtc_S19423C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19423C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19423C5),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  S19423C7  {
  ::S19423C6 s19423c7f0;
  __tsi64 s19423c7f1;
  long double s19423c7f2;
  virtual void  v10(); // _ZN8S19423C73v10Ev
  virtual void  v11(); // _ZN8S19423C73v11Ev
  virtual void  v12(); // _ZN8S19423C73v12Ev
  virtual void  v13(); // _ZN8S19423C73v13Ev
  virtual void  v14(); // _ZN8S19423C73v14Ev
  virtual void  v15(); // _ZN8S19423C73v15Ev
  ~S19423C7(); // tgen
  S19423C7(); // tgen
};
//SIG(-1 S19423C7) C1{ v1 v2 v3 v4 v5 v6 FC2{ v7 v8 v9} FL FD}


void  S19423C7 ::v10(){vfunc_called(this, "_ZN8S19423C73v10Ev");}
void  S19423C7 ::v11(){vfunc_called(this, "_ZN8S19423C73v11Ev");}
void  S19423C7 ::v12(){vfunc_called(this, "_ZN8S19423C73v12Ev");}
void  S19423C7 ::v13(){vfunc_called(this, "_ZN8S19423C73v13Ev");}
void  S19423C7 ::v14(){vfunc_called(this, "_ZN8S19423C73v14Ev");}
void  S19423C7 ::v15(){vfunc_called(this, "_ZN8S19423C73v15Ev");}
S19423C7 ::~S19423C7(){ note_dtor("S19423C7", this);} // tgen
S19423C7 ::S19423C7(){ note_ctor("S19423C7", this);} // tgen

static void Test_S19423C7()
{
  extern Class_Descriptor cd_S19423C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S19423C7, buf);
    S19423C7 *dp, &lv = *(dp=new (buf) S19423C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19423C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19423C7)");
    check_field_offset(lv, s19423c7f0, ABISELECT(8,4), "S19423C7.s19423c7f0");
    check_field_offset(lv, s19423c7f1, ABISELECT(16,8), "S19423C7.s19423c7f1");
    check_field_offset(lv, s19423c7f2, ABISELECT(32,16), "S19423C7.s19423c7f2");
    test_class_info(&lv, &cd_S19423C7);
    dp->~S19423C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19423C7(Test_S19423C7, "S19423C7", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S19423C7C1Ev();
extern void _ZN8S19423C7D1Ev();
Name_Map name_map_S19423C7[] = {
  NSPAIR(_ZN8S19423C7C1Ev),
  NSPAIR(_ZN8S19423C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19423C7[];
extern void _ZN8S19423C73v10Ev();
extern void _ZN8S19423C73v11Ev();
extern void _ZN8S19423C73v12Ev();
extern void _ZN8S19423C73v13Ev();
extern void _ZN8S19423C73v14Ev();
extern void _ZN8S19423C73v15Ev();
static  VTBL_ENTRY vtc_S19423C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19423C7[0]),
  (VTBL_ENTRY)&_ZN8S19423C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v15Ev,
};
extern VTBL_ENTRY _ZTI8S19423C7[];
extern  VTBL_ENTRY _ZTV8S19423C7[];
Class_Descriptor cd_S19423C7 = {  "S19423C7", // class name
  0,0,//no base classes
  &(vtc_S19423C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S19423C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19423C7),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19423C4  : S19423C5 , S19423C7 {
  void *s19423c4f0;
  virtual  ~S19423C4(); // _ZN8S19423C4D1Ev
  virtual void  v16(); // _ZN8S19423C43v16Ev
  virtual void  v17(); // _ZN8S19423C43v17Ev
  virtual void  v18(); // _ZN8S19423C43v18Ev
  virtual void  v19(); // _ZN8S19423C43v19Ev
  virtual void  v20(); // _ZN8S19423C43v20Ev
  S19423C4(); // tgen
};
//SIG(-1 S19423C4) C1{ BC2{ BC3{ v6 v7 v8} vd v9 v10 v11 v12 v13 Fp} BC4{ v14 v15 v16 v17 v18 v19 FC3 FL FD} vd v1 v2 v3 v4 v5 Fp}


 S19423C4 ::~S19423C4(){ note_dtor("S19423C4", this);}
void  S19423C4 ::v16(){vfunc_called(this, "_ZN8S19423C43v16Ev");}
void  S19423C4 ::v17(){vfunc_called(this, "_ZN8S19423C43v17Ev");}
void  S19423C4 ::v18(){vfunc_called(this, "_ZN8S19423C43v18Ev");}
void  S19423C4 ::v19(){vfunc_called(this, "_ZN8S19423C43v19Ev");}
void  S19423C4 ::v20(){vfunc_called(this, "_ZN8S19423C43v20Ev");}
S19423C4 ::S19423C4(){ note_ctor("S19423C4", this);} // tgen

static void Test_S19423C4()
{
  extern Class_Descriptor cd_S19423C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,11)];
    init_test(&cd_S19423C4, buf);
    S19423C4 *dp, &lv = *(dp=new (buf) S19423C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S19423C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19423C4)");
    check_base_class_offset(lv, (S19423C6*)(S19423C5*), 0, "S19423C4");
    check_base_class_offset(lv, (S19423C5*), 0, "S19423C4");
    check_base_class_offset(lv, (S19423C7*), ABISELECT(16,8), "S19423C4");
    check_field_offset(lv, s19423c4f0, ABISELECT(64,36), "S19423C4.s19423c4f0");
    test_class_info(&lv, &cd_S19423C4);
    dp->~S19423C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19423C4(Test_S19423C4, "S19423C4", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN8S19423C4C1Ev();
extern void _ZN8S19423C4D1Ev();
Name_Map name_map_S19423C4[] = {
  NSPAIR(_ZN8S19423C4C1Ev),
  NSPAIR(_ZN8S19423C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19423C6;
extern VTBL_ENTRY _ZTI8S19423C6[];
extern  VTBL_ENTRY _ZTV8S19423C6[];
extern Class_Descriptor cd_S19423C5;
extern VTBL_ENTRY _ZTI8S19423C5[];
extern  VTBL_ENTRY _ZTV8S19423C5[];
extern Class_Descriptor cd_S19423C7;
extern VTBL_ENTRY _ZTI8S19423C7[];
extern  VTBL_ENTRY _ZTV8S19423C7[];
static Base_Class bases_S19423C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19423C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19423C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19423C7,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_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 _ZTI8S19423C4[];
extern void _ZN8S19423C62v2Ev();
extern void _ZN8S19423C62v3Ev();
extern void _ZN8S19423C62v4Ev();
extern void _ZN8S19423C4D1Ev();
extern void _ZN8S19423C4D0Ev();
extern void _ZN8S19423C52v5Ev();
extern void _ZN8S19423C52v6Ev();
extern void _ZN8S19423C52v7Ev();
extern void _ZN8S19423C52v8Ev();
extern void _ZN8S19423C52v9Ev();
extern void _ZN8S19423C43v16Ev();
extern void _ZN8S19423C43v17Ev();
extern void _ZN8S19423C43v18Ev();
extern void _ZN8S19423C43v19Ev();
extern void _ZN8S19423C43v20Ev();
extern void _ZN8S19423C73v10Ev();
extern void _ZN8S19423C73v11Ev();
extern void _ZN8S19423C73v12Ev();
extern void _ZN8S19423C73v13Ev();
extern void _ZN8S19423C73v14Ev();
extern void _ZN8S19423C73v15Ev();
static  VTBL_ENTRY vtc_S19423C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19423C4[0]),
  (VTBL_ENTRY)&_ZN8S19423C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v4Ev,
  (VTBL_ENTRY)&_ZN8S19423C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19423C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v20Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19423C4[0]),
  (VTBL_ENTRY)&_ZN8S19423C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v15Ev,
};
extern VTBL_ENTRY _ZTI8S19423C4[];
extern  VTBL_ENTRY _ZTV8S19423C4[];
Class_Descriptor cd_S19423C4 = {  "S19423C4", // class name
  bases_S19423C4, 3,
  &(vtc_S19423C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI8S19423C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19423C4),25, //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  S19423C3  : virtual S19423C4 {
  int s19423c3f0;
  virtual  ~S19423C3(); // _ZN8S19423C3D2Ev
  virtual void  v21(); // _ZN8S19423C33v21Ev
  virtual void  v22(); // _ZN8S19423C33v22Ev
  virtual void  v23(); // _ZN8S19423C33v23Ev
  S19423C3(); // tgen
};
//SIG(-1 S19423C3) C1{ VBC2{ BC3{ BC4{ v4 v5 v6} vd v7 v8 v9 v10 v11 Fp} BC5{ v12 v13 v14 v15 v16 v17 FC4 FL FD} vd v18 v19 v20 v21 v22 Fp} vd v1 v2 v3 Fi}


 S19423C3 ::~S19423C3(){ note_dtor("S19423C3", this);}
void  S19423C3 ::v21(){vfunc_called(this, "_ZN8S19423C33v21Ev");}
void  S19423C3 ::v22(){vfunc_called(this, "_ZN8S19423C33v22Ev");}
void  S19423C3 ::v23(){vfunc_called(this, "_ZN8S19423C33v23Ev");}
S19423C3 ::S19423C3(){ note_ctor("S19423C3", this);} // tgen

static void Test_S19423C3()
{
  extern Class_Descriptor cd_S19423C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S19423C3, buf);
    S19423C3 *dp, &lv = *(dp=new (buf) S19423C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19423C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19423C3)");
    check_base_class_offset(lv, (S19423C6*)(S19423C5*)(S19423C4*), ABISELECT(16,8), "S19423C3");
    check_base_class_offset(lv, (S19423C5*)(S19423C4*), ABISELECT(16,8), "S19423C3");
    check_base_class_offset(lv, (S19423C7*)(S19423C4*), ABISELECT(32,16), "S19423C3");
    check_base_class_offset(lv, (S19423C4*), ABISELECT(16,8), "S19423C3");
    check_field_offset(lv, s19423c3f0, ABISELECT(8,4), "S19423C3.s19423c3f0");
    test_class_info(&lv, &cd_S19423C3);
    dp->~S19423C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19423C3(Test_S19423C3, "S19423C3", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S19423C3C1Ev();
extern void _ZN8S19423C3D2Ev();
Name_Map name_map_S19423C3[] = {
  NSPAIR(_ZN8S19423C3C1Ev),
  NSPAIR(_ZN8S19423C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19423C6;
extern VTBL_ENTRY _ZTI8S19423C6[];
extern  VTBL_ENTRY _ZTV8S19423C6[];
extern Class_Descriptor cd_S19423C5;
extern VTBL_ENTRY _ZTI8S19423C5[];
extern  VTBL_ENTRY _ZTV8S19423C5[];
extern Class_Descriptor cd_S19423C7;
extern VTBL_ENTRY _ZTI8S19423C7[];
extern  VTBL_ENTRY _ZTV8S19423C7[];
extern Class_Descriptor cd_S19423C4;
extern VTBL_ENTRY _ZTI8S19423C4[];
extern  VTBL_ENTRY _ZTV8S19423C4[];
static Base_Class bases_S19423C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19423C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19423C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19423C7,    ABISELECT(32,16), //bcp->offset
    45, //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
    3, //immediately_derived
  0, 0},
  {&cd_S19423C4,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19423C3[];
extern void _ZN8S19423C3D1Ev();
extern void _ZN8S19423C3D0Ev();
extern void _ZN8S19423C33v21Ev();
extern void _ZN8S19423C33v22Ev();
extern void _ZN8S19423C33v23Ev();
extern void _ZN8S19423C62v2Ev();
extern void _ZN8S19423C62v3Ev();
extern void _ZN8S19423C62v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S19423C3D1Ev,_ZTv0_n24_N8S19423C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19423C3D1Ev,_ZThn8_N8S19423C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19423C3D0Ev,_ZTv0_n24_N8S19423C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19423C3D0Ev,_ZThn8_N8S19423C3D0Ev)() __attribute__((weak));
extern void _ZN8S19423C52v5Ev();
extern void _ZN8S19423C52v6Ev();
extern void _ZN8S19423C52v7Ev();
extern void _ZN8S19423C52v8Ev();
extern void _ZN8S19423C52v9Ev();
extern void _ZN8S19423C43v16Ev();
extern void _ZN8S19423C43v17Ev();
extern void _ZN8S19423C43v18Ev();
extern void _ZN8S19423C43v19Ev();
extern void _ZN8S19423C43v20Ev();
extern void _ZN8S19423C73v10Ev();
extern void _ZN8S19423C73v11Ev();
extern void _ZN8S19423C73v12Ev();
extern void _ZN8S19423C73v13Ev();
extern void _ZN8S19423C73v14Ev();
extern void _ZN8S19423C73v15Ev();
static  VTBL_ENTRY vtc_S19423C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19423C3[0]),
  (VTBL_ENTRY)&_ZN8S19423C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19423C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v23Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19423C3[0]),
  (VTBL_ENTRY)&_ZN8S19423C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19423C3D1Ev,_ZTv0_n24_N8S19423C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19423C3D0Ev,_ZTv0_n24_N8S19423C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19423C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v20Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19423C3[0]),
  (VTBL_ENTRY)&_ZN8S19423C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v15Ev,
};
extern VTBL_ENTRY _ZTV8S19423C3[];
static  VTT_ENTRY vtt_S19423C3[] = {
  {&(_ZTV8S19423C3[3]),  3,53},
  {&(_ZTV8S19423C3[30]),  30,53},
  {&(_ZTV8S19423C3[47]),  47,53},
};
extern VTBL_ENTRY _ZTI8S19423C3[];
extern  VTBL_ENTRY _ZTV8S19423C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19423C3[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19423C3D0Ev,_ZTv0_n24_N8S19423C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19423C3D0Ev,_ZThn8_N8S19423C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19423C3D1Ev,_ZTv0_n24_N8S19423C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19423C3D1Ev,_ZThn8_N8S19423C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19423C3 = {  "S19423C3", // class name
  bases_S19423C3, 4,
  &(vtc_S19423C3[0]), // expected_vtbl_contents
  &(vtt_S19423C3[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S19423C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19423C3),53, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19423C3),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19423C2  : S19423C3 {
  virtual  ~S19423C2(); // _ZN8S19423C2D2Ev
  virtual void  v24(); // _ZN8S19423C23v24Ev
  virtual void  v25(); // _ZN8S19423C23v25Ev
  S19423C2(); // tgen
};
//SIG(-1 S19423C2) C1{ BC2{ VBC3{ BC4{ BC5{ v3 v4 v5} vd v6 v7 v8 v9 v10 Fp} BC6{ v11 v12 v13 v14 v15 v16 FC5 FL FD} vd v17 v18 v19 v20 v21 Fp} vd v22 v23 v24 Fi} vd v1 v2}


 S19423C2 ::~S19423C2(){ note_dtor("S19423C2", this);}
void  S19423C2 ::v24(){vfunc_called(this, "_ZN8S19423C23v24Ev");}
void  S19423C2 ::v25(){vfunc_called(this, "_ZN8S19423C23v25Ev");}
S19423C2 ::S19423C2(){ note_ctor("S19423C2", this);} // tgen

static void Test_S19423C2()
{
  extern Class_Descriptor cd_S19423C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S19423C2, buf);
    S19423C2 *dp, &lv = *(dp=new (buf) S19423C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19423C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19423C2)");
    check_base_class_offset(lv, (S19423C6*)(S19423C5*)(S19423C4*), ABISELECT(16,8), "S19423C2");
    check_base_class_offset(lv, (S19423C5*)(S19423C4*), ABISELECT(16,8), "S19423C2");
    check_base_class_offset(lv, (S19423C7*)(S19423C4*), ABISELECT(32,16), "S19423C2");
    check_base_class_offset(lv, (S19423C4*)(S19423C3*), ABISELECT(16,8), "S19423C2");
    check_base_class_offset(lv, (S19423C3*), 0, "S19423C2");
    test_class_info(&lv, &cd_S19423C2);
    dp->~S19423C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19423C2(Test_S19423C2, "S19423C2", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S19423C2C1Ev();
extern void _ZN8S19423C2D2Ev();
Name_Map name_map_S19423C2[] = {
  NSPAIR(_ZN8S19423C2C1Ev),
  NSPAIR(_ZN8S19423C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19423C6;
extern VTBL_ENTRY _ZTI8S19423C6[];
extern  VTBL_ENTRY _ZTV8S19423C6[];
extern Class_Descriptor cd_S19423C5;
extern VTBL_ENTRY _ZTI8S19423C5[];
extern  VTBL_ENTRY _ZTV8S19423C5[];
extern Class_Descriptor cd_S19423C7;
extern VTBL_ENTRY _ZTI8S19423C7[];
extern  VTBL_ENTRY _ZTV8S19423C7[];
extern Class_Descriptor cd_S19423C4;
extern VTBL_ENTRY _ZTI8S19423C4[];
extern  VTBL_ENTRY _ZTV8S19423C4[];
extern Class_Descriptor cd_S19423C3;
extern VTBL_ENTRY _ZTI8S19423C3[];
extern  VTBL_ENTRY _ZTV8S19423C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19423C3[];
static Base_Class bases_S19423C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19423C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19423C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19423C7,    ABISELECT(32,16), //bcp->offset
    47, //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
    3, //immediately_derived
  0, 0},
  {&cd_S19423C4,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    22, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19423C3,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19423C2[];
extern void _ZN8S19423C2D1Ev();
extern void _ZN8S19423C2D0Ev();
extern void _ZN8S19423C33v21Ev();
extern void _ZN8S19423C33v22Ev();
extern void _ZN8S19423C33v23Ev();
extern void _ZN8S19423C23v24Ev();
extern void _ZN8S19423C23v25Ev();
extern void _ZN8S19423C62v2Ev();
extern void _ZN8S19423C62v3Ev();
extern void _ZN8S19423C62v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S19423C2D1Ev,_ZTv0_n24_N8S19423C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19423C2D1Ev,_ZThn8_N8S19423C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19423C2D0Ev,_ZTv0_n24_N8S19423C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19423C2D0Ev,_ZThn8_N8S19423C2D0Ev)() __attribute__((weak));
extern void _ZN8S19423C52v5Ev();
extern void _ZN8S19423C52v6Ev();
extern void _ZN8S19423C52v7Ev();
extern void _ZN8S19423C52v8Ev();
extern void _ZN8S19423C52v9Ev();
extern void _ZN8S19423C43v16Ev();
extern void _ZN8S19423C43v17Ev();
extern void _ZN8S19423C43v18Ev();
extern void _ZN8S19423C43v19Ev();
extern void _ZN8S19423C43v20Ev();
extern void _ZN8S19423C73v10Ev();
extern void _ZN8S19423C73v11Ev();
extern void _ZN8S19423C73v12Ev();
extern void _ZN8S19423C73v13Ev();
extern void _ZN8S19423C73v14Ev();
extern void _ZN8S19423C73v15Ev();
static  VTBL_ENTRY vtc_S19423C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19423C2[0]),
  (VTBL_ENTRY)&_ZN8S19423C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19423C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19423C23v24Ev,
  (VTBL_ENTRY)&_ZN8S19423C23v25Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19423C2[0]),
  (VTBL_ENTRY)&_ZN8S19423C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19423C2D1Ev,_ZTv0_n24_N8S19423C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19423C2D0Ev,_ZTv0_n24_N8S19423C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19423C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v20Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19423C2[0]),
  (VTBL_ENTRY)&_ZN8S19423C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v15Ev,
};
extern VTBL_ENTRY _ZTV8S19423C2[];
extern void _ZN8S19423C3D1Ev();
extern void _ZN8S19423C3D0Ev();
extern void _ZN8S19423C33v21Ev();
extern void _ZN8S19423C33v22Ev();
extern void _ZN8S19423C33v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19423C3__8S19423C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19423C3[0]),
  (VTBL_ENTRY)&_ZN8S19423C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19423C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v23Ev,
};
extern void _ZN8S19423C62v2Ev();
extern void _ZN8S19423C62v3Ev();
extern void _ZN8S19423C62v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S19423C3D1Ev,_ZTv0_n24_N8S19423C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19423C3D1Ev,_ZThn8_N8S19423C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19423C3D0Ev,_ZTv0_n24_N8S19423C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19423C3D0Ev,_ZThn8_N8S19423C3D0Ev)() __attribute__((weak));
extern void _ZN8S19423C52v5Ev();
extern void _ZN8S19423C52v6Ev();
extern void _ZN8S19423C52v7Ev();
extern void _ZN8S19423C52v8Ev();
extern void _ZN8S19423C52v9Ev();
extern void _ZN8S19423C43v16Ev();
extern void _ZN8S19423C43v17Ev();
extern void _ZN8S19423C43v18Ev();
extern void _ZN8S19423C43v19Ev();
extern void _ZN8S19423C43v20Ev();
static  VTBL_ENTRY _tg__ZTV8S19423C4__8S19423C3__8S19423C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19423C3[0]),
  (VTBL_ENTRY)&_ZN8S19423C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19423C3D1Ev,_ZTv0_n24_N8S19423C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19423C3D0Ev,_ZTv0_n24_N8S19423C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19423C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v20Ev,
};
extern void _ZN8S19423C73v10Ev();
extern void _ZN8S19423C73v11Ev();
extern void _ZN8S19423C73v12Ev();
extern void _ZN8S19423C73v13Ev();
extern void _ZN8S19423C73v14Ev();
extern void _ZN8S19423C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19423C78S19423C4__8S19423C3__8S19423C2[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19423C3[0]),
  (VTBL_ENTRY)&_ZN8S19423C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v15Ev,
};
static  VTT_ENTRY vtt_S19423C2[] = {
  {&(_ZTV8S19423C2[3]),  3,55},
  {&(_tg__ZTV8S19423C3__8S19423C2[3]),  3,8},
  {&(_tg__ZTV8S19423C4__8S19423C3__8S19423C2[22]),  22,37},
  {&(_tg__ZTV8S19423C78S19423C4__8S19423C3__8S19423C2[2]),  2,8},
  {&(_ZTV8S19423C2[32]),  32,55},
  {&(_ZTV8S19423C2[49]),  49,55},
};
extern VTBL_ENTRY _ZTI8S19423C2[];
extern  VTBL_ENTRY _ZTV8S19423C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19423C2[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19423C3D0Ev,_ZTv0_n24_N8S19423C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19423C3D0Ev,_ZThn8_N8S19423C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19423C3D1Ev,_ZTv0_n24_N8S19423C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19423C3D1Ev,_ZThn8_N8S19423C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19423C2D0Ev,_ZTv0_n24_N8S19423C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19423C2D0Ev,_ZThn8_N8S19423C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19423C2D1Ev,_ZTv0_n24_N8S19423C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19423C2D1Ev,_ZThn8_N8S19423C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19423C2 = {  "S19423C2", // class name
  bases_S19423C2, 5,
  &(vtc_S19423C2[0]), // expected_vtbl_contents
  &(vtt_S19423C2[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S19423C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19423C2),55, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19423C2),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19423C1  : virtual S19423C2 {
  virtual void  v1(); // _ZN8S19423C12v1Ev
  ~S19423C1(); // tgen
  S19423C1(); // tgen
};
//SIG(1 S19423C1) C1{ VBC2{ BC3{ VBC4{ BC5{ BC6{ v2 v3 v4} vd v5 v6 v7 v8 v9 Fp} BC7{ v10 v11 v12 v13 v14 v15 FC6 FL FD} vd v16 v17 v18 v19 v20 Fp} vd v21 v22 v23 Fi} vd v24 v25} v1}


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

static void Test_S19423C1()
{
  extern Class_Descriptor cd_S19423C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,14)];
    init_test(&cd_S19423C1, buf);
    S19423C1 *dp, &lv = *(dp=new (buf) S19423C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,52), "sizeof(S19423C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19423C1)");
    check_base_class_offset(lv, (S19423C6*)(S19423C5*)(S19423C4*), ABISELECT(32,12), "S19423C1");
    check_base_class_offset(lv, (S19423C5*)(S19423C4*), ABISELECT(32,12), "S19423C1");
    check_base_class_offset(lv, (S19423C7*)(S19423C4*), ABISELECT(48,20), "S19423C1");
    check_base_class_offset(lv, (S19423C4*)(S19423C3*)(S19423C2*), ABISELECT(32,12), "S19423C1");
    check_base_class_offset(lv, (S19423C3*)(S19423C2*), ABISELECT(8,4), "S19423C1");
    check_base_class_offset(lv, (S19423C2*), ABISELECT(8,4), "S19423C1");
    test_class_info(&lv, &cd_S19423C1);
    dp->~S19423C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19423C1(Test_S19423C1, "S19423C1", ABISELECT(112,52));

#else // __cplusplus

extern void _ZN8S19423C1C1Ev();
extern void _ZN8S19423C1D1Ev();
Name_Map name_map_S19423C1[] = {
  NSPAIR(_ZN8S19423C1C1Ev),
  NSPAIR(_ZN8S19423C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19423C6;
extern VTBL_ENTRY _ZTI8S19423C6[];
extern  VTBL_ENTRY _ZTV8S19423C6[];
extern Class_Descriptor cd_S19423C5;
extern VTBL_ENTRY _ZTI8S19423C5[];
extern  VTBL_ENTRY _ZTV8S19423C5[];
extern Class_Descriptor cd_S19423C7;
extern VTBL_ENTRY _ZTI8S19423C7[];
extern  VTBL_ENTRY _ZTV8S19423C7[];
extern Class_Descriptor cd_S19423C4;
extern VTBL_ENTRY _ZTI8S19423C4[];
extern  VTBL_ENTRY _ZTV8S19423C4[];
extern Class_Descriptor cd_S19423C3;
extern VTBL_ENTRY _ZTI8S19423C3[];
extern  VTBL_ENTRY _ZTV8S19423C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19423C3[];
extern Class_Descriptor cd_S19423C2;
extern VTBL_ENTRY _ZTI8S19423C2[];
extern  VTBL_ENTRY _ZTV8S19423C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19423C2[];
static Base_Class bases_S19423C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19423C6,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19423C5,    ABISELECT(32,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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19423C7,    ABISELECT(48,20), //bcp->offset
    60, //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
    3, //immediately_derived
  0, 0},
  {&cd_S19423C4,    ABISELECT(32,12), //bcp->offset
    23, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19423C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19423C2,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19423C1[];
extern void _ZN8S19423C12v1Ev();
extern void _ZN8S19423C1D1Ev();
extern void _ZN8S19423C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19423C1D1Ev,_ZTv0_n16_N8S19423C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19423C1D1Ev,_ZThn4_N8S19423C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19423C1D0Ev,_ZTv0_n16_N8S19423C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S19423C1D0Ev,_ZThn4_N8S19423C1D0Ev)() __attribute__((weak));
extern void _ZN8S19423C33v21Ev();
extern void _ZN8S19423C33v22Ev();
extern void _ZN8S19423C33v23Ev();
extern void _ZN8S19423C23v24Ev();
extern void _ZN8S19423C23v25Ev();
extern void _ZN8S19423C62v2Ev();
extern void _ZN8S19423C62v3Ev();
extern void _ZN8S19423C62v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S19423C1D1Ev,_ZTv0_n24_N8S19423C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19423C1D1Ev,_ZThn12_N8S19423C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19423C1D0Ev,_ZTv0_n24_N8S19423C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19423C1D0Ev,_ZThn12_N8S19423C1D0Ev)() __attribute__((weak));
extern void _ZN8S19423C52v5Ev();
extern void _ZN8S19423C52v6Ev();
extern void _ZN8S19423C52v7Ev();
extern void _ZN8S19423C52v8Ev();
extern void _ZN8S19423C52v9Ev();
extern void _ZN8S19423C43v16Ev();
extern void _ZN8S19423C43v17Ev();
extern void _ZN8S19423C43v18Ev();
extern void _ZN8S19423C43v19Ev();
extern void _ZN8S19423C43v20Ev();
extern void _ZN8S19423C73v10Ev();
extern void _ZN8S19423C73v11Ev();
extern void _ZN8S19423C73v12Ev();
extern void _ZN8S19423C73v13Ev();
extern void _ZN8S19423C73v14Ev();
extern void _ZN8S19423C73v15Ev();
static  VTBL_ENTRY vtc_S19423C1[] = {
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19423C1[0]),
  (VTBL_ENTRY)&_ZN8S19423C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19423C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19423C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19423C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19423C1D1Ev,_ZTv0_n16_N8S19423C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19423C1D0Ev,_ZTv0_n16_N8S19423C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19423C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19423C23v24Ev,
  (VTBL_ENTRY)&_ZN8S19423C23v25Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S19423C1[0]),
  (VTBL_ENTRY)&_ZN8S19423C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19423C1D1Ev,_ZTv0_n24_N8S19423C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19423C1D0Ev,_ZTv0_n24_N8S19423C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19423C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v20Ev,
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S19423C1[0]),
  (VTBL_ENTRY)&_ZN8S19423C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v15Ev,
};
extern VTBL_ENTRY _ZTV8S19423C1[];
extern void _ZN8S19423C2D1Ev();
extern void _ZN8S19423C2D0Ev();
extern void _ZN8S19423C33v21Ev();
extern void _ZN8S19423C33v22Ev();
extern void _ZN8S19423C33v23Ev();
extern void _ZN8S19423C23v24Ev();
extern void _ZN8S19423C23v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19423C2__8S19423C1[] = {
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19423C2[0]),
  (VTBL_ENTRY)&_ZN8S19423C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19423C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19423C23v24Ev,
  (VTBL_ENTRY)&_ZN8S19423C23v25Ev,
};
extern void _ZN8S19423C3D1Ev();
extern void _ZN8S19423C3D0Ev();
extern void _ZN8S19423C33v21Ev();
extern void _ZN8S19423C33v22Ev();
extern void _ZN8S19423C33v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19423C38S19423C2__8S19423C1[] = {
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19423C3[0]),
  (VTBL_ENTRY)&_ZN8S19423C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19423C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v21Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19423C33v23Ev,
};
extern void _ZN8S19423C62v2Ev();
extern void _ZN8S19423C62v3Ev();
extern void _ZN8S19423C62v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S19423C3D1Ev,_ZTv0_n24_N8S19423C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S19423C3D1Ev,_ZThn8_N8S19423C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19423C3D0Ev,_ZTv0_n24_N8S19423C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S19423C3D0Ev,_ZThn8_N8S19423C3D0Ev)() __attribute__((weak));
extern void _ZN8S19423C52v5Ev();
extern void _ZN8S19423C52v6Ev();
extern void _ZN8S19423C52v7Ev();
extern void _ZN8S19423C52v8Ev();
extern void _ZN8S19423C52v9Ev();
extern void _ZN8S19423C43v16Ev();
extern void _ZN8S19423C43v17Ev();
extern void _ZN8S19423C43v18Ev();
extern void _ZN8S19423C43v19Ev();
extern void _ZN8S19423C43v20Ev();
static  VTBL_ENTRY _tg__ZTV8S19423C4__8S19423C38S19423C2__8S19423C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-8),
  0,
  0,
  0,
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19423C3[0]),
  (VTBL_ENTRY)&_ZN8S19423C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19423C3D1Ev,_ZTv0_n24_N8S19423C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19423C3D0Ev,_ZTv0_n24_N8S19423C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19423C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v20Ev,
};
extern void _ZN8S19423C73v10Ev();
extern void _ZN8S19423C73v11Ev();
extern void _ZN8S19423C73v12Ev();
extern void _ZN8S19423C73v13Ev();
extern void _ZN8S19423C73v14Ev();
extern void _ZN8S19423C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19423C78S19423C4__8S19423C38S19423C2__8S19423C1[] = {
  ABISELECT(-40,-16),
  (VTBL_ENTRY)&(_ZTI8S19423C3[0]),
  (VTBL_ENTRY)&_ZN8S19423C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v15Ev,
};
extern void _ZN8S19423C62v2Ev();
extern void _ZN8S19423C62v3Ev();
extern void _ZN8S19423C62v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S19423C2D1Ev,_ZTv0_n24_N8S19423C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19423C2D1Ev,_ZThn8_N8S19423C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19423C2D0Ev,_ZTv0_n24_N8S19423C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S19423C2D0Ev,_ZThn8_N8S19423C2D0Ev)() __attribute__((weak));
extern void _ZN8S19423C52v5Ev();
extern void _ZN8S19423C52v6Ev();
extern void _ZN8S19423C52v7Ev();
extern void _ZN8S19423C52v8Ev();
extern void _ZN8S19423C52v9Ev();
extern void _ZN8S19423C43v16Ev();
extern void _ZN8S19423C43v17Ev();
extern void _ZN8S19423C43v18Ev();
extern void _ZN8S19423C43v19Ev();
extern void _ZN8S19423C43v20Ev();
static  VTBL_ENTRY _tg__ZTV8S19423C4__8S19423C2__8S19423C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-8),
  0,
  0,
  0,
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19423C2[0]),
  (VTBL_ENTRY)&_ZN8S19423C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19423C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19423C2D1Ev,_ZTv0_n24_N8S19423C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19423C2D0Ev,_ZTv0_n24_N8S19423C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19423C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19423C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19423C43v20Ev,
};
extern void _ZN8S19423C73v10Ev();
extern void _ZN8S19423C73v11Ev();
extern void _ZN8S19423C73v12Ev();
extern void _ZN8S19423C73v13Ev();
extern void _ZN8S19423C73v14Ev();
extern void _ZN8S19423C73v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19423C78S19423C4__8S19423C2__8S19423C1[] = {
  ABISELECT(-40,-16),
  (VTBL_ENTRY)&(_ZTI8S19423C2[0]),
  (VTBL_ENTRY)&_ZN8S19423C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19423C73v15Ev,
};
static  VTT_ENTRY vtt_S19423C1[] = {
  {&(_ZTV8S19423C1[4]),  4,68},
  {&(_ZTV8S19423C1[16]),  16,68},
  {&(_ZTV8S19423C1[45]),  45,68},
  {&(_ZTV8S19423C1[62]),  62,68},
  {&(_tg__ZTV8S19423C2__8S19423C1[3]),  3,10},
  {&(_tg__ZTV8S19423C38S19423C2__8S19423C1[3]),  3,8},
  {&(_tg__ZTV8S19423C4__8S19423C38S19423C2__8S19423C1[22]),  22,37},
  {&(_tg__ZTV8S19423C78S19423C4__8S19423C38S19423C2__8S19423C1[2]),  2,8},
  {&(_tg__ZTV8S19423C4__8S19423C2__8S19423C1[22]),  22,37},
  {&(_tg__ZTV8S19423C78S19423C4__8S19423C2__8S19423C1[2]),  2,8},
};
extern VTBL_ENTRY _ZTI8S19423C1[];
extern  VTBL_ENTRY _ZTV8S19423C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19423C1[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19423C2D0Ev,_ZTv0_n24_N8S19423C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19423C2D0Ev,_ZThn8_N8S19423C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19423C2D1Ev,_ZTv0_n24_N8S19423C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19423C2D1Ev,_ZThn8_N8S19423C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19423C3D0Ev,_ZTv0_n24_N8S19423C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19423C3D0Ev,_ZThn8_N8S19423C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19423C3D1Ev,_ZTv0_n24_N8S19423C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19423C3D1Ev,_ZThn8_N8S19423C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19423C1D0Ev,_ZTv0_n24_N8S19423C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19423C1D0Ev,_ZThn12_N8S19423C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19423C1D1Ev,_ZTv0_n24_N8S19423C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19423C1D1Ev,_ZThn12_N8S19423C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19423C1D0Ev,_ZTv0_n16_N8S19423C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19423C1D0Ev,_ZThn4_N8S19423C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19423C1D1Ev,_ZTv0_n16_N8S19423C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19423C1D1Ev,_ZThn4_N8S19423C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19423C1 = {  "S19423C1", // class name
  bases_S19423C1, 6,
  &(vtc_S19423C1[0]), // expected_vtbl_contents
  &(vtt_S19423C1[0]), // expected_vtt_contents
  ABISELECT(112,52), // object size
  NSPAIRA(_ZTI8S19423C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19423C1),68, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19423C1),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3960C2  : S1766C4_nt {
  int s3960c2f0;
  void *s3960c2f1[2];
  int s3960c2f2;
  virtual  ~S3960C2(); // _ZN7S3960C2D1Ev
  virtual void  v12(); // _ZN7S3960C23v12Ev
  virtual void  v13(); // _ZN7S3960C23v13Ev
  virtual void  v14(); // _ZN7S3960C23v14Ev
  virtual void  v15(); // _ZN7S3960C23v15Ev
  virtual void  v16(); // _ZN7S3960C23v16Ev
  virtual void  v17(); // _ZN7S3960C23v17Ev
  virtual void  v18(); // _ZN7S3960C23v18Ev
  virtual void  v19(); // _ZN7S3960C23v19Ev
  virtual void  v20(); // _ZN7S3960C23v20Ev
  virtual void  v21(); // _ZN7S3960C23v21Ev
  virtual void  v22(); // _ZN7S3960C23v22Ev
  S3960C2(); // tgen
};
//SIG(-1 S3960C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S3960C2 ::~S3960C2(){ note_dtor("S3960C2", this);}
void  S3960C2 ::v12(){vfunc_called(this, "_ZN7S3960C23v12Ev");}
void  S3960C2 ::v13(){vfunc_called(this, "_ZN7S3960C23v13Ev");}
void  S3960C2 ::v14(){vfunc_called(this, "_ZN7S3960C23v14Ev");}
void  S3960C2 ::v15(){vfunc_called(this, "_ZN7S3960C23v15Ev");}
void  S3960C2 ::v16(){vfunc_called(this, "_ZN7S3960C23v16Ev");}
void  S3960C2 ::v17(){vfunc_called(this, "_ZN7S3960C23v17Ev");}
void  S3960C2 ::v18(){vfunc_called(this, "_ZN7S3960C23v18Ev");}
void  S3960C2 ::v19(){vfunc_called(this, "_ZN7S3960C23v19Ev");}
void  S3960C2 ::v20(){vfunc_called(this, "_ZN7S3960C23v20Ev");}
void  S3960C2 ::v21(){vfunc_called(this, "_ZN7S3960C23v21Ev");}
void  S3960C2 ::v22(){vfunc_called(this, "_ZN7S3960C23v22Ev");}
S3960C2 ::S3960C2(){ note_ctor("S3960C2", this);} // tgen

static void Test_S3960C2()
{
  extern Class_Descriptor cd_S3960C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3960C2, buf);
    S3960C2 *dp, &lv = *(dp=new (buf) S3960C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3960C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3960C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3960C2");
    check_field_offset(lv, s3960c2f0, ABISELECT(16,12), "S3960C2.s3960c2f0");
    check_field_offset(lv, s3960c2f1, ABISELECT(24,16), "S3960C2.s3960c2f1");
    check_field_offset(lv, s3960c2f2, ABISELECT(40,24), "S3960C2.s3960c2f2");
    test_class_info(&lv, &cd_S3960C2);
    dp->~S3960C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3960C2(Test_S3960C2, "S3960C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3960C2C1Ev();
extern void _ZN7S3960C2D1Ev();
Name_Map name_map_S3960C2[] = {
  NSPAIR(_ZN7S3960C2C1Ev),
  NSPAIR(_ZN7S3960C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3960C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3960C2[];
extern void _ZN7S3960C2D1Ev();
extern void _ZN7S3960C2D0Ev();
extern void _ZN7S3960C23v12Ev();
extern void _ZN7S3960C23v13Ev();
extern void _ZN7S3960C23v14Ev();
extern void _ZN7S3960C23v15Ev();
extern void _ZN7S3960C23v16Ev();
extern void _ZN7S3960C23v17Ev();
extern void _ZN7S3960C23v18Ev();
extern void _ZN7S3960C23v19Ev();
extern void _ZN7S3960C23v20Ev();
extern void _ZN7S3960C23v21Ev();
extern void _ZN7S3960C23v22Ev();
static  VTBL_ENTRY vtc_S3960C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3960C2[0]),
  (VTBL_ENTRY)&_ZN7S3960C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3960C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v22Ev,
};
extern VTBL_ENTRY _ZTI7S3960C2[];
extern  VTBL_ENTRY _ZTV7S3960C2[];
Class_Descriptor cd_S3960C2 = {  "S3960C2", // class name
  bases_S3960C2, 1,
  &(vtc_S3960C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3960C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3960C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3960C1  : S3960C2 {
  void *s3960c1f0[2];
  int s3960c1f1[4];
  void *s3960c1f2;
  int s3960c1f3[4];
  __tsi64 s3960c1f4[5];
  int s3960c1f5[2];
  virtual  ~S3960C1(); // _ZN7S3960C1D1Ev
  virtual void  v1(); // _ZN7S3960C12v1Ev
  virtual void  v2(); // _ZN7S3960C12v2Ev
  virtual void  v3(); // _ZN7S3960C12v3Ev
  virtual void  v4(); // _ZN7S3960C12v4Ev
  virtual void  v5(); // _ZN7S3960C12v5Ev
  virtual void  v6(); // _ZN7S3960C12v6Ev
  virtual void  v7(); // _ZN7S3960C12v7Ev
  virtual void  v8(); // _ZN7S3960C12v8Ev
  virtual void  v9(); // _ZN7S3960C12v9Ev
  virtual void  v10(); // _ZN7S3960C13v10Ev
  virtual void  v11(); // _ZN7S3960C13v11Ev
  S3960C1(); // tgen
};
//SIG(1 S3960C1) C1{ BC2{ BC3{ vd m FL} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi Fp[2] Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] Fi[4] Fp Fi[4] FL[5] Fi[2]}


 S3960C1 ::~S3960C1(){ note_dtor("S3960C1", this);}
void  S3960C1 ::v1(){vfunc_called(this, "_ZN7S3960C12v1Ev");}
void  S3960C1 ::v2(){vfunc_called(this, "_ZN7S3960C12v2Ev");}
void  S3960C1 ::v3(){vfunc_called(this, "_ZN7S3960C12v3Ev");}
void  S3960C1 ::v4(){vfunc_called(this, "_ZN7S3960C12v4Ev");}
void  S3960C1 ::v5(){vfunc_called(this, "_ZN7S3960C12v5Ev");}
void  S3960C1 ::v6(){vfunc_called(this, "_ZN7S3960C12v6Ev");}
void  S3960C1 ::v7(){vfunc_called(this, "_ZN7S3960C12v7Ev");}
void  S3960C1 ::v8(){vfunc_called(this, "_ZN7S3960C12v8Ev");}
void  S3960C1 ::v9(){vfunc_called(this, "_ZN7S3960C12v9Ev");}
void  S3960C1 ::v10(){vfunc_called(this, "_ZN7S3960C13v10Ev");}
void  S3960C1 ::v11(){vfunc_called(this, "_ZN7S3960C13v11Ev");}
S3960C1 ::S3960C1(){ note_ctor("S3960C1", this);} // tgen

static void Test_S3960C1()
{
  extern Class_Descriptor cd_S3960C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,31)];
    init_test(&cd_S3960C1, buf);
    S3960C1 *dp, &lv = *(dp=new (buf) S3960C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,120), "sizeof(S3960C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3960C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3960C2*), 0, "S3960C1");
    check_base_class_offset(lv, (S3960C2*), 0, "S3960C1");
    check_field_offset(lv, s3960c1f0, ABISELECT(48,28), "S3960C1.s3960c1f0");
    check_field_offset(lv, s3960c1f1, ABISELECT(64,36), "S3960C1.s3960c1f1");
    check_field_offset(lv, s3960c1f2, ABISELECT(80,52), "S3960C1.s3960c1f2");
    check_field_offset(lv, s3960c1f3, ABISELECT(88,56), "S3960C1.s3960c1f3");
    check_field_offset(lv, s3960c1f4, ABISELECT(104,72), "S3960C1.s3960c1f4");
    check_field_offset(lv, s3960c1f5, ABISELECT(144,112), "S3960C1.s3960c1f5");
    test_class_info(&lv, &cd_S3960C1);
    dp->~S3960C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3960C1(Test_S3960C1, "S3960C1", ABISELECT(152,120));

#else // __cplusplus

extern void _ZN7S3960C1C1Ev();
extern void _ZN7S3960C1D1Ev();
Name_Map name_map_S3960C1[] = {
  NSPAIR(_ZN7S3960C1C1Ev),
  NSPAIR(_ZN7S3960C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3960C2;
extern VTBL_ENTRY _ZTI7S3960C2[];
extern  VTBL_ENTRY _ZTV7S3960C2[];
static Base_Class bases_S3960C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3960C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3960C1[];
extern void _ZN7S3960C1D1Ev();
extern void _ZN7S3960C1D0Ev();
extern void _ZN7S3960C23v12Ev();
extern void _ZN7S3960C23v13Ev();
extern void _ZN7S3960C23v14Ev();
extern void _ZN7S3960C23v15Ev();
extern void _ZN7S3960C23v16Ev();
extern void _ZN7S3960C23v17Ev();
extern void _ZN7S3960C23v18Ev();
extern void _ZN7S3960C23v19Ev();
extern void _ZN7S3960C23v20Ev();
extern void _ZN7S3960C23v21Ev();
extern void _ZN7S3960C23v22Ev();
extern void _ZN7S3960C12v1Ev();
extern void _ZN7S3960C12v2Ev();
extern void _ZN7S3960C12v3Ev();
extern void _ZN7S3960C12v4Ev();
extern void _ZN7S3960C12v5Ev();
extern void _ZN7S3960C12v6Ev();
extern void _ZN7S3960C12v7Ev();
extern void _ZN7S3960C12v8Ev();
extern void _ZN7S3960C12v9Ev();
extern void _ZN7S3960C13v10Ev();
extern void _ZN7S3960C13v11Ev();
static  VTBL_ENTRY vtc_S3960C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3960C1[0]),
  (VTBL_ENTRY)&_ZN7S3960C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3960C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3960C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3960C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3960C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3960C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3960C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3960C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3960C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3960C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3960C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3960C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3960C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3960C13v11Ev,
};
extern VTBL_ENTRY _ZTI7S3960C1[];
extern  VTBL_ENTRY _ZTV7S3960C1[];
Class_Descriptor cd_S3960C1 = {  "S3960C1", // class name
  bases_S3960C1, 2,
  &(vtc_S3960C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,120), // object size
  NSPAIRA(_ZTI7S3960C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3960C1),26, //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  S19240C2  : S19863C10 {
};
//SIG(-1 S19240C2) C1{ BC2{ m}}



static void Test_S19240C2()
{
  extern Class_Descriptor cd_S19240C2;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S19240C2, buf);
    S19240C2 &lv = *(new (buf) S19240C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S19240C2)");
    check2(__alignof__(lv), 1, "__alignof__(S19240C2)");
    check_base_class_offset(lv, (S19863C10*), 0, "S19240C2");
    test_class_info(&lv, &cd_S19240C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19240C2(Test_S19240C2, "S19240C2", 1);

#else // __cplusplus

extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S19240C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19240C2[];
Class_Descriptor cd_S19240C2 = {  "S19240C2", // class name
  bases_S19240C2, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S19240C2),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  S19240C5  : virtual S19863C10 , virtual S19863C9_nt {
  long double s19240c5f0[10];
  virtual  ~S19240C5(); // _ZN8S19240C5D2Ev
  S19240C5(); // tgen
};
//SIG(-1 S19240C5) C1{ VBC2{ m} VBC3{ m Fi} vd FD[10]}


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

static void Test_S19240C5()
{
  extern Class_Descriptor cd_S19240C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S19240C5, buf);
    S19240C5 *dp, &lv = *(dp=new (buf) S19240C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S19240C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19240C5)");
    check_base_class_offset(lv, (S19863C10*), 0, "S19240C5");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(176,124), "S19240C5");
    check_field_offset(lv, s19240c5f0, ABISELECT(16,4), "S19240C5.s19240c5f0");
    test_class_info(&lv, &cd_S19240C5);
    dp->~S19240C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19240C5(Test_S19240C5, "S19240C5", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN8S19240C5C1Ev();
extern void _ZN8S19240C5D2Ev();
Name_Map name_map_S19240C5[] = {
  NSPAIR(_ZN8S19240C5C1Ev),
  NSPAIR(_ZN8S19240C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S19240C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C9_nt,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19240C5[];
extern void _ZN8S19240C5D1Ev();
extern void _ZN8S19240C5D0Ev();
static  VTBL_ENTRY vtc_S19240C5[] = {
  ABISELECT(176,124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19240C5[0]),
  (VTBL_ENTRY)&_ZN8S19240C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19240C5D0Ev,
};
extern VTBL_ENTRY _ZTV8S19240C5[];
static  VTT_ENTRY vtt_S19240C5[] = {
  {&(_ZTV8S19240C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19240C5[];
extern  VTBL_ENTRY _ZTV8S19240C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19240C5[];
Class_Descriptor cd_S19240C5 = {  "S19240C5", // class name
  bases_S19240C5, 2,
  &(vtc_S19240C5[0]), // expected_vtbl_contents
  &(vtt_S19240C5[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI8S19240C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19240C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19240C5),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  S19240C10  : virtual S19863C6 , S19863C2_nt {
  virtual  ~S19240C10(); // _ZN9S19240C10D2Ev
  S19240C10(); // tgen
};
//SIG(-1 S19240C10) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} BC6{ m} vd}


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

static void Test_S19240C10()
{
  extern Class_Descriptor cd_S19240C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,35)];
    init_test(&cd_S19240C10, buf);
    S19240C10 *dp, &lv = *(dp=new (buf) S19240C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,136), "sizeof(S19240C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19240C10)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,4), "S19240C10");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S19240C10");
    test_class_info(&lv, &cd_S19240C10);
    dp->~S19240C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19240C10(Test_S19240C10, "S19240C10", ABISELECT(224,136));

#else // __cplusplus

extern void _ZN9S19240C10C1Ev();
extern void _ZN9S19240C10D2Ev();
Name_Map name_map_S19240C10[] = {
  NSPAIR(_ZN9S19240C10C1Ev),
  NSPAIR(_ZN9S19240C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
static Base_Class bases_S19240C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,4), //bcp->offset
    5, //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_S19863C2_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 _ZTI9S19240C10[];
extern void _ZN9S19240C10D1Ev();
extern void _ZN9S19240C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19240C10D1Ev,_ZTv0_n12_N9S19240C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19240C10D1Ev,_ZThn4_N9S19240C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19240C10D0Ev,_ZTv0_n12_N9S19240C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19240C10D0Ev,_ZThn4_N9S19240C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19240C10[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19240C10[0]),
  (VTBL_ENTRY)&_ZN9S19240C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19240C10D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S19240C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19240C10D1Ev,_ZTv0_n12_N9S19240C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19240C10D0Ev,_ZTv0_n12_N9S19240C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19240C10[];
static  VTT_ENTRY vtt_S19240C10[] = {
  {&(_ZTV9S19240C10[3]),  3,10},
  {&(_ZTV9S19240C10[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19240C10[];
extern  VTBL_ENTRY _ZTV9S19240C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19240C10[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19240C10D0Ev,_ZTv0_n12_N9S19240C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19240C10D0Ev,_ZThn4_N9S19240C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19240C10D1Ev,_ZTv0_n12_N9S19240C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19240C10D1Ev,_ZThn4_N9S19240C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19240C10 = {  "S19240C10", // class name
  bases_S19240C10, 2,
  &(vtc_S19240C10[0]), // expected_vtbl_contents
  &(vtt_S19240C10[0]), // expected_vtt_contents
  ABISELECT(224,136), // object size
  NSPAIRA(_ZTI9S19240C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19240C10),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19240C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19240C12  : S19863C2_nt , S19863C10 , virtual S19240C2 , virtual S19863C9_nt {
  ~S19240C12(); // tgen
  S19240C12(); // tgen
};
//SIG(-1 S19240C12) C1{ BC2{ m} BC3{ m} VBC4{ BC3} VBC5{ m Fi}}


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

static void Test_S19240C12()
{
  extern Class_Descriptor cd_S19240C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19240C12, buf);
    S19240C12 *dp, &lv = *(dp=new (buf) S19240C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19240C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19240C12)");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S19240C12");
    /*is_ambiguous_... S19240C12::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*), 0, "S19240C12");
    check_base_class_offset(lv, (S19863C10*)(S19240C2*), ABISELECT(8,4), "S19240C12");
    check_base_class_offset(lv, (S19240C2*), ABISELECT(8,4), "S19240C12");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(8,4), "S19240C12");
    test_class_info(&lv, &cd_S19240C12);
    dp->~S19240C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19240C12(Test_S19240C12, "S19240C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19240C12C1Ev();
extern void _ZN9S19240C12D1Ev();
Name_Map name_map_S19240C12[] = {
  NSPAIR(_ZN9S19240C12C1Ev),
  NSPAIR(_ZN9S19240C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19240C2;
extern VTBL_ENTRY _ZTI8S19240C2[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S19240C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C2_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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C10,    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_S19240C2,    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},
  {&cd_S19863C9_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19240C12[];
static  VTBL_ENTRY vtc_S19240C12[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19240C12[0]),
};
extern VTBL_ENTRY _ZTV9S19240C12[];
static  VTT_ENTRY vtt_S19240C12[] = {
  {&(_ZTV9S19240C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19240C12[];
extern  VTBL_ENTRY _ZTV9S19240C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19240C12[];
Class_Descriptor cd_S19240C12 = {  "S19240C12", // class name
  bases_S19240C12, 5,
  &(vtc_S19240C12[0]), // expected_vtbl_contents
  &(vtt_S19240C12[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19240C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19240C12),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19240C12),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  S19240C7  : virtual S19863C12_nt , virtual S19863C9_nt , virtual S19863C6 , virtual S19240C10 , S19240C12 {
  int s19240c7f0;
  virtual  ~S19240C7(); // _ZN8S19240C7D2Ev
  S19240C7(); // tgen
};
//SIG(-1 S19240C7) C1{ VBC2{ m Fs} VBC3{ m Fi} VBC4{ vd m FC5{ VBC6{ m} VBC3 vd FD[10]}} VBC7{ VBC4 BC8{ m} vd} BC9{ BC8 BC10{ m} VBC11{ BC10} VBC3} vd Fi}


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

static void Test_S19240C7()
{
  extern Class_Descriptor cd_S19240C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,40)];
    init_test(&cd_S19240C7, buf);
    S19240C7 *dp, &lv = *(dp=new (buf) S19240C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,156), "sizeof(S19240C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19240C7)");
    check_base_class_offset(lv, (S19863C12_nt*), ABISELECT(12,8), "S19240C7");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(16,12), "S19240C7");
    check_base_class_offset(lv, (S19863C9_nt*)(S19240C12*), ABISELECT(16,12), "S19240C7");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(32,16), "S19240C7");
    check_base_class_offset(lv, (S19863C6*)(S19240C10*), ABISELECT(32,16), "S19240C7");
    check_base_class_offset(lv, (S19863C2_nt*)(S19240C10*), ABISELECT(240,148), "S19240C7");
    check_base_class_offset(lv, (S19240C10*), ABISELECT(240,148), "S19240C7");
    check_base_class_offset(lv, (S19863C2_nt*)(S19240C12*), 0, "S19240C7");
    /*is_ambiguous_... S19240C12::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19240C12*), 0, "S19240C7");
    check_base_class_offset(lv, (S19863C10*)(S19240C2*), ABISELECT(248,152), "S19240C7");
    check_base_class_offset(lv, (S19240C2*)(S19240C12*), ABISELECT(248,152), "S19240C7");
    check_base_class_offset(lv, (S19240C12*), 0, "S19240C7");
    check_field_offset(lv, s19240c7f0, ABISELECT(8,4), "S19240C7.s19240c7f0");
    test_class_info(&lv, &cd_S19240C7);
    dp->~S19240C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19240C7(Test_S19240C7, "S19240C7", ABISELECT(256,156));

#else // __cplusplus

extern void _ZN8S19240C7C1Ev();
extern void _ZN8S19240C7D2Ev();
Name_Map name_map_S19240C7[] = {
  NSPAIR(_ZN8S19240C7C1Ev),
  NSPAIR(_ZN8S19240C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19240C10;
extern VTBL_ENTRY _ZTI9S19240C10[];
extern  VTBL_ENTRY _ZTV9S19240C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19240C10[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19240C2;
extern VTBL_ENTRY _ZTI8S19240C2[];
extern Class_Descriptor cd_S19240C12;
extern VTBL_ENTRY _ZTI9S19240C12[];
extern  VTBL_ENTRY _ZTV9S19240C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19240C12[];
static Base_Class bases_S19240C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C12_nt,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C9_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C6,    ABISELECT(32,16), //bcp->offset
    9, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C2_nt,    ABISELECT(240,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19240C10,    ABISELECT(240,148), //bcp->offset
    14, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C2_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
    9, //immediately_derived
  0, 0},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C10,    ABISELECT(248,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
    8, //immediately_derived
  0, 0},
  {&cd_S19240C2,    ABISELECT(248,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
    9, //immediately_derived
  0, 1},
  {&cd_S19240C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19240C7[];
extern void _ZN8S19240C7D1Ev();
extern void _ZN8S19240C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19240C7D1Ev,_ZTv0_n12_N8S19240C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19240C7D1Ev,_ZThn16_N8S19240C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19240C7D0Ev,_ZTv0_n12_N8S19240C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S19240C7D0Ev,_ZThn16_N8S19240C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19240C7D1Ev,_ZTv0_n16_N8S19240C7D1Ev)();
extern void ABISELECT(_ZThn240_N8S19240C7D1Ev,_ZThn148_N8S19240C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19240C7D0Ev,_ZTv0_n16_N8S19240C7D0Ev)();
extern void ABISELECT(_ZThn240_N8S19240C7D0Ev,_ZThn148_N8S19240C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19240C7[] = {
  ABISELECT(240,148),
  ABISELECT(32,16),
  ABISELECT(12,8),
  ABISELECT(16,12),
  ABISELECT(248,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19240C7[0]),
  (VTBL_ENTRY)&_ZN8S19240C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19240C7D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19240C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19240C7D1Ev,_ZTv0_n12_N8S19240C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19240C7D0Ev,_ZTv0_n12_N8S19240C7D0Ev),
  ABISELECT(-240,-148),
  ABISELECT(-208,-132),
  ABISELECT(-240,-148),
  (VTBL_ENTRY)&(_ZTI8S19240C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19240C7D1Ev,_ZTv0_n16_N8S19240C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19240C7D0Ev,_ZTv0_n16_N8S19240C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19240C7[];
static  VTBL_ENTRY _tg__ZTV9S19240C12__8S19240C7[] = {
  ABISELECT(16,12),
  ABISELECT(248,152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19240C12[0]),
};
extern void _ZN9S19240C10D1Ev();
extern void _ZN9S19240C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19240C10__8S19240C7[] = {
  ABISELECT(-208,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19240C10[0]),
  (VTBL_ENTRY)&_ZN9S19240C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19240C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19240C10D1Ev,_ZTv0_n12_N9S19240C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19240C10D0Ev,_ZTv0_n12_N9S19240C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19240C10__8S19240C7[] = {
  ABISELECT(208,132),
  ABISELECT(208,132),
  (VTBL_ENTRY)&(_ZTI9S19240C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19240C10D1Ev,_ZTv0_n12_N9S19240C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19240C10D0Ev,_ZTv0_n12_N9S19240C10D0Ev),
};
static  VTT_ENTRY vtt_S19240C7[] = {
  {&(_ZTV8S19240C7[7]),  7,20},
  {&(_tg__ZTV9S19240C12__8S19240C7[4]),  4,4},
  {&(_ZTV8S19240C7[12]),  12,20},
  {&(_ZTV8S19240C7[18]),  18,20},
  {&(_tg__ZTV9S19240C10__8S19240C7[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19240C10__8S19240C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19240C7[];
extern  VTBL_ENTRY _ZTV8S19240C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19240C7[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19240C7D0Ev,_ZTv0_n16_N8S19240C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19240C7D0Ev,_ZThn148_N8S19240C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19240C7D1Ev,_ZTv0_n16_N8S19240C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19240C7D1Ev,_ZThn148_N8S19240C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19240C7D0Ev,_ZTv0_n12_N8S19240C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19240C7D0Ev,_ZThn16_N8S19240C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19240C7D1Ev,_ZTv0_n12_N8S19240C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19240C7D1Ev,_ZThn16_N8S19240C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19240C7 = {  "S19240C7", // class name
  bases_S19240C7, 10,
  &(vtc_S19240C7[0]), // expected_vtbl_contents
  &(vtt_S19240C7[0]), // expected_vtt_contents
  ABISELECT(256,156), // object size
  NSPAIRA(_ZTI8S19240C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19240C7),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19240C7),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19240C1  : virtual S19240C2 , virtual S19863C8 , virtual S19240C5 , virtual S19240C7 , S19863C2_nt {
  ::S19240C7 s19240c1f0[2];
  ~S19240C1(); // tgen
  S19240C1(); // tgen
};
//SIG(1 S19240C1) C1{ VBC2{ BC3{ m}} VBC4{ m} VBC5{ VBC3 VBC6{ m Fi} vd FD[10]} VBC7{ VBC8{ m Fs} VBC6 VBC9{ vd m FC10{ VBC4 VBC6 vd FD[10]}} VBC11{ VBC9 BC12{ m} vd} BC13{ BC12 BC3 VBC2 VBC6} vd Fi} BC12 FC7[2]}


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

static void Test_S19240C1()
{
  extern Class_Descriptor cd_S19240C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,149)];
    init_test(&cd_S19240C1, buf);
    S19240C1 *dp, &lv = *(dp=new (buf) S19240C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,592), "sizeof(S19240C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19240C1)");
    check_base_class_offset(lv, (S19863C10*)(S19240C2*), 0, "S19240C1");
    check_base_class_offset(lv, (S19240C2*), 0, "S19240C1");
    check_base_class_offset(lv, (S19240C2*)(S19240C12*)(S19240C7*), 0, "S19240C1");
    check_base_class_offset(lv, (S19863C8*), 0, "S19240C1");
    check_base_class_offset(lv, (S19863C10*)(S19240C5*), ABISELECT(704,444), "S19240C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S19240C5*), ABISELECT(704,444), "S19240C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S19240C7*), ABISELECT(704,444), "S19240C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S19240C12*)(S19240C7*), ABISELECT(704,444), "S19240C1");
    check_base_class_offset(lv, (S19240C5*), ABISELECT(528,320), "S19240C1");
    check_base_class_offset(lv, (S19863C12_nt*)(S19240C7*), ABISELECT(724,456), "S19240C1");
    check_base_class_offset(lv, (S19863C6*)(S19240C7*), ABISELECT(736,460), "S19240C1");
    check_base_class_offset(lv, (S19863C6*)(S19240C10*), ABISELECT(736,460), "S19240C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S19240C10*), 0, "S19240C1");
    check_base_class_offset(lv, (S19240C10*)(S19240C7*), 0, "S19240C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S19240C12*)(S19240C7*), ABISELECT(712,448), "S19240C1");
    /*is_ambiguous_... S19240C12::S19863C10 */ AMB_check_base_class_offset(lv, (S19863C10*)(S19240C12*)(S19240C7*), ABISELECT(712,448), "S19240C1");
    check_base_class_offset(lv, (S19240C12*)(S19240C7*), ABISELECT(712,448), "S19240C1");
    check_base_class_offset(lv, (S19240C7*), ABISELECT(712,448), "S19240C1");
    /*is_ambiguous_... S19240C1::S19863C2_nt */ AMB_check_base_class_offset(lv, (S19863C2_nt*), ABISELECT(8,4), "S19240C1");
    check_field_offset(lv, s19240c1f0, ABISELECT(16,8), "S19240C1.s19240c1f0");
    test_class_info(&lv, &cd_S19240C1);
    dp->~S19240C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19240C1(Test_S19240C1, "S19240C1", ABISELECT(944,592));

#else // __cplusplus

extern void _ZN8S19240C1C1Ev();
extern void _ZN8S19240C1D1Ev();
Name_Map name_map_S19240C1[] = {
  NSPAIR(_ZN8S19240C1C1Ev),
  NSPAIR(_ZN8S19240C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19240C2;
extern VTBL_ENTRY _ZTI8S19240C2[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19240C5;
extern VTBL_ENTRY _ZTI8S19240C5[];
extern  VTBL_ENTRY _ZTV8S19240C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19240C5[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19240C10;
extern VTBL_ENTRY _ZTI9S19240C10[];
extern  VTBL_ENTRY _ZTV9S19240C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19240C10[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19240C12;
extern VTBL_ENTRY _ZTI9S19240C12[];
extern  VTBL_ENTRY _ZTV9S19240C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19240C12[];
extern Class_Descriptor cd_S19240C7;
extern VTBL_ENTRY _ZTI8S19240C7[];
extern  VTBL_ENTRY _ZTV8S19240C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19240C7[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
static Base_Class bases_S19240C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19240C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C10,    ABISELECT(704,444), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C9_nt,    ABISELECT(704,444), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19240C5,    ABISELECT(528,320), //bcp->offset
    14, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C12_nt,    ABISELECT(724,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19863C6,    ABISELECT(736,460), //bcp->offset
    31, //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
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19863C2_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
    9, //immediately_derived
  0, 0},
  {&cd_S19240C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19863C2_nt,    ABISELECT(712,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C10,    ABISELECT(712,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19240C12,    ABISELECT(712,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19240C7,    ABISELECT(712,448), //bcp->offset
    21, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C2_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 _ZTI8S19240C1[];
extern void _ZN8S19240C1D1Ev();
extern void _ZN8S19240C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19240C1D1Ev,_ZTv0_n20_N8S19240C1D1Ev)();
extern void ABISELECT(_ZThn528_N8S19240C1D1Ev,_ZThn320_N8S19240C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19240C1D0Ev,_ZTv0_n20_N8S19240C1D0Ev)();
extern void ABISELECT(_ZThn528_N8S19240C1D0Ev,_ZThn320_N8S19240C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19240C1D1Ev,_ZTv0_n32_N8S19240C1D1Ev)();
extern void ABISELECT(_ZThn712_N8S19240C1D1Ev,_ZThn448_N8S19240C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19240C1D0Ev,_ZTv0_n32_N8S19240C1D0Ev)();
extern void ABISELECT(_ZThn712_N8S19240C1D0Ev,_ZThn448_N8S19240C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19240C1D1Ev,_ZTv0_n12_N8S19240C1D1Ev)();
extern void ABISELECT(_ZThn736_N8S19240C1D1Ev,_ZThn460_N8S19240C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19240C1D0Ev,_ZTv0_n12_N8S19240C1D0Ev)();
extern void ABISELECT(_ZThn736_N8S19240C1D0Ev,_ZThn460_N8S19240C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19240C1[] = {
  0,
  ABISELECT(724,456),
  ABISELECT(712,448),
  ABISELECT(704,444),
  ABISELECT(704,444),
  ABISELECT(528,320),
  0,
  0,
  0,
  ABISELECT(736,460),
  0,
  (VTBL_ENTRY)&(_ZTI8S19240C1[0]),
  (VTBL_ENTRY)&_ZN8S19240C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19240C1D0Ev,
  ABISELECT(-528,-320),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(-528,-320),
  (VTBL_ENTRY)&(_ZTI8S19240C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19240C1D1Ev,_ZTv0_n20_N8S19240C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19240C1D0Ev,_ZTv0_n20_N8S19240C1D0Ev),
  ABISELECT(-712,-448),
  ABISELECT(-712,-448),
  ABISELECT(24,12),
  ABISELECT(12,8),
  ABISELECT(-8,-4),
  ABISELECT(-712,-448),
  ABISELECT(-712,-448),
  (VTBL_ENTRY)&(_ZTI8S19240C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19240C1D1Ev,_ZTv0_n32_N8S19240C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19240C1D0Ev,_ZTv0_n32_N8S19240C1D0Ev),
  ABISELECT(-736,-460),
  ABISELECT(-736,-460),
  (VTBL_ENTRY)&(_ZTI8S19240C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19240C1D1Ev,_ZTv0_n12_N8S19240C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19240C1D0Ev,_ZTv0_n12_N8S19240C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19240C1[];
extern void _ZN8S19240C5D1Ev();
extern void _ZN8S19240C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19240C5__8S19240C1[] = {
  ABISELECT(176,124),
  ABISELECT(176,124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19240C5[0]),
  (VTBL_ENTRY)&_ZN8S19240C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19240C5D0Ev,
};
extern void _ZN8S19240C7D1Ev();
extern void _ZN8S19240C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19240C7__8S19240C1[] = {
  ABISELECT(-712,-448),
  ABISELECT(24,12),
  ABISELECT(12,8),
  ABISELECT(-8,-4),
  ABISELECT(-712,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19240C7[0]),
  (VTBL_ENTRY)&_ZN8S19240C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19240C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19240C128S19240C7__8S19240C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-712,-448),
  0,
  (VTBL_ENTRY)&(_ZTI9S19240C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19240C7D1Ev,_ZTv0_n12_N8S19240C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S19240C7D1Ev,_ZThn12_N8S19240C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19240C7D0Ev,_ZTv0_n12_N8S19240C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S19240C7D0Ev,_ZThn12_N8S19240C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S19240C7__8S19240C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19240C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19240C7D1Ev,_ZTv0_n12_N8S19240C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19240C7D0Ev,_ZTv0_n12_N8S19240C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19240C7D1Ev,_ZTv0_n16_N8S19240C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19240C7D0Ev,_ZTv0_n16_N8S19240C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19240C10__8S19240C7__8S19240C1[] = {
  ABISELECT(712,448),
  ABISELECT(736,460),
  ABISELECT(712,448),
  (VTBL_ENTRY)&(_ZTI8S19240C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19240C7D1Ev,_ZTv0_n16_N8S19240C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19240C7D0Ev,_ZTv0_n16_N8S19240C7D0Ev),
};
extern void _ZN9S19240C10D1Ev();
extern void _ZN9S19240C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19240C10__8S19240C1[] = {
  ABISELECT(736,460),
  0,
  (VTBL_ENTRY)&(_ZTI9S19240C10[0]),
  (VTBL_ENTRY)&_ZN9S19240C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19240C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19240C10D1Ev,_ZTv0_n12_N9S19240C10D1Ev)();
extern void ABISELECT(_ZThn736_N9S19240C10D1Ev,_ZThn460_N9S19240C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19240C10D0Ev,_ZTv0_n12_N9S19240C10D0Ev)();
extern void ABISELECT(_ZThn736_N9S19240C10D0Ev,_ZThn460_N9S19240C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__9S19240C10__8S19240C1[] = {
  ABISELECT(-736,-460),
  ABISELECT(-736,-460),
  (VTBL_ENTRY)&(_ZTI9S19240C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19240C10D1Ev,_ZTv0_n12_N9S19240C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19240C10D0Ev,_ZTv0_n12_N9S19240C10D0Ev),
};
static  VTT_ENTRY vtt_S19240C1[] = {
  {&(_ZTV8S19240C1[12]),  12,36},
  {&(_ZTV8S19240C1[19]),  19,36},
  {&(_ZTV8S19240C1[29]),  29,36},
  {&(_ZTV8S19240C1[34]),  34,36},
  {&(_ZTV8S19240C1[12]),  12,36},
  {&(_tg__ZTV8S19240C5__8S19240C1[4]),  4,6},
  {&(_tg__ZTV8S19240C7__8S19240C1[7]),  7,9},
  {&(_tg__ZTV9S19240C128S19240C7__8S19240C1[4]),  4,4},
  {&(_tg__ZTV8S19863C6__8S19240C7__8S19240C1[3]),  3,5},
  {&(_tg__ZTV9S19240C10__8S19240C7__8S19240C1[4]),  4,6},
  {&(_tg__ZTV9S19240C10__8S19240C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__9S19240C10__8S19240C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19240C1[];
extern  VTBL_ENTRY _ZTV8S19240C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19240C1[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19240C10D0Ev,_ZTv0_n12_N9S19240C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N9S19240C10D0Ev,_ZThn460_N9S19240C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19240C10D1Ev,_ZTv0_n12_N9S19240C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N9S19240C10D1Ev,_ZThn460_N9S19240C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19240C7D0Ev,_ZTv0_n12_N8S19240C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19240C7D0Ev,_ZThn12_N8S19240C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19240C7D1Ev,_ZTv0_n12_N8S19240C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19240C7D1Ev,_ZThn12_N8S19240C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19240C1D0Ev,_ZTv0_n12_N8S19240C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N8S19240C1D0Ev,_ZThn460_N8S19240C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19240C1D1Ev,_ZTv0_n12_N8S19240C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N8S19240C1D1Ev,_ZThn460_N8S19240C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19240C1D0Ev,_ZTv0_n32_N8S19240C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn712_N8S19240C1D0Ev,_ZThn448_N8S19240C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19240C1D1Ev,_ZTv0_n32_N8S19240C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn712_N8S19240C1D1Ev,_ZThn448_N8S19240C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19240C1D0Ev,_ZTv0_n20_N8S19240C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19240C1D0Ev,_ZThn320_N8S19240C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19240C1D1Ev,_ZTv0_n20_N8S19240C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N8S19240C1D1Ev,_ZThn320_N8S19240C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19240C1 = {  "S19240C1", // class name
  bases_S19240C1, 15,
  &(vtc_S19240C1[0]), // expected_vtbl_contents
  &(vtt_S19240C1[0]), // expected_vtt_contents
  ABISELECT(944,592), // object size
  NSPAIRA(_ZTI8S19240C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19240C1),36, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19240C1),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7054C2  {
  virtual void  v6(); // _ZN7S7054C22v6Ev
  virtual void  v7(); // _ZN7S7054C22v7Ev
  virtual void  v8(); // _ZN7S7054C22v8Ev
  ~S7054C2(); // tgen
  S7054C2(); // tgen
};
//SIG(-1 S7054C2) C1{ v1 v2 v3}


void  S7054C2 ::v6(){vfunc_called(this, "_ZN7S7054C22v6Ev");}
void  S7054C2 ::v7(){vfunc_called(this, "_ZN7S7054C22v7Ev");}
void  S7054C2 ::v8(){vfunc_called(this, "_ZN7S7054C22v8Ev");}
S7054C2 ::~S7054C2(){ note_dtor("S7054C2", this);} // tgen
S7054C2 ::S7054C2(){ note_ctor("S7054C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7054C2C1Ev();
extern void _ZN7S7054C2D1Ev();
Name_Map name_map_S7054C2[] = {
  NSPAIR(_ZN7S7054C2C1Ev),
  NSPAIR(_ZN7S7054C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7054C2[];
extern void _ZN7S7054C22v6Ev();
extern void _ZN7S7054C22v7Ev();
extern void _ZN7S7054C22v8Ev();
static  VTBL_ENTRY vtc_S7054C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7054C2[0]),
  (VTBL_ENTRY)&_ZN7S7054C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S7054C2[];
extern  VTBL_ENTRY _ZTV7S7054C2[];
Class_Descriptor cd_S7054C2 = {  "S7054C2", // class name
  0,0,//no base classes
  &(vtc_S7054C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7054C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7054C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7054C5  {
  void *s7054c5f0[10];
  ::S7054C2 s7054c5f1;
  virtual  ~S7054C5(); // _ZN7S7054C5D1Ev
  virtual void  v9(); // _ZN7S7054C52v9Ev
  virtual void  v10(); // _ZN7S7054C53v10Ev
  virtual void  v11(); // _ZN7S7054C53v11Ev
  S7054C5(); // tgen
};
//SIG(-1 S7054C5) C1{ vd v1 v2 v3 Fp[10] FC2{ v4 v5 v6}}


 S7054C5 ::~S7054C5(){ note_dtor("S7054C5", this);}
void  S7054C5 ::v9(){vfunc_called(this, "_ZN7S7054C52v9Ev");}
void  S7054C5 ::v10(){vfunc_called(this, "_ZN7S7054C53v10Ev");}
void  S7054C5 ::v11(){vfunc_called(this, "_ZN7S7054C53v11Ev");}
S7054C5 ::S7054C5(){ note_ctor("S7054C5", this);} // tgen

static void Test_S7054C5()
{
  extern Class_Descriptor cd_S7054C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S7054C5, buf);
    S7054C5 *dp, &lv = *(dp=new (buf) S7054C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S7054C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7054C5)");
    check_field_offset(lv, s7054c5f0, ABISELECT(8,4), "S7054C5.s7054c5f0");
    check_field_offset(lv, s7054c5f1, ABISELECT(88,44), "S7054C5.s7054c5f1");
    test_class_info(&lv, &cd_S7054C5);
    dp->~S7054C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7054C5(Test_S7054C5, "S7054C5", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S7054C5C1Ev();
extern void _ZN7S7054C5D1Ev();
Name_Map name_map_S7054C5[] = {
  NSPAIR(_ZN7S7054C5C1Ev),
  NSPAIR(_ZN7S7054C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7054C5[];
extern void _ZN7S7054C5D1Ev();
extern void _ZN7S7054C5D0Ev();
extern void _ZN7S7054C52v9Ev();
extern void _ZN7S7054C53v10Ev();
extern void _ZN7S7054C53v11Ev();
static  VTBL_ENTRY vtc_S7054C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7054C5[0]),
  (VTBL_ENTRY)&_ZN7S7054C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7054C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7054C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v11Ev,
};
extern VTBL_ENTRY _ZTI7S7054C5[];
extern  VTBL_ENTRY _ZTV7S7054C5[];
Class_Descriptor cd_S7054C5 = {  "S7054C5", // class name
  0,0,//no base classes
  &(vtc_S7054C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S7054C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7054C5),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  S7054C4  : virtual S7054C5 , virtual S7054C2 {
  virtual void  v12(); // _ZN7S7054C43v12Ev
  virtual void  v13(); // _ZN7S7054C43v13Ev
  virtual void  v14(); // _ZN7S7054C43v14Ev
  virtual void  v15(); // _ZN7S7054C43v15Ev
  ~S7054C4(); // tgen
  S7054C4(); // tgen
};
//SIG(-1 S7054C4) C1{ VBC2{ vd v5 v6 v7 Fp[10] FC3{ v8 v9 v10}} VBC3 v1 v2 v3 v4}


void  S7054C4 ::v12(){vfunc_called(this, "_ZN7S7054C43v12Ev");}
void  S7054C4 ::v13(){vfunc_called(this, "_ZN7S7054C43v13Ev");}
void  S7054C4 ::v14(){vfunc_called(this, "_ZN7S7054C43v14Ev");}
void  S7054C4 ::v15(){vfunc_called(this, "_ZN7S7054C43v15Ev");}
S7054C4 ::~S7054C4(){ note_dtor("S7054C4", this);} // tgen
S7054C4 ::S7054C4(){ note_ctor("S7054C4", this);} // tgen

static void Test_S7054C4()
{
  extern Class_Descriptor cd_S7054C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[14];
    init_test(&cd_S7054C4, buf);
    S7054C4 *dp, &lv = *(dp=new (buf) S7054C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S7054C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7054C4)");
    check_base_class_offset(lv, (S7054C5*), ABISELECT(8,4), "S7054C4");
    check_base_class_offset(lv, (S7054C2*), 0, "S7054C4");
    test_class_info(&lv, &cd_S7054C4);
    dp->~S7054C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7054C4(Test_S7054C4, "S7054C4", ABISELECT(104,52));

#else // __cplusplus

extern void _ZN7S7054C4C1Ev();
extern void _ZN7S7054C4D1Ev();
Name_Map name_map_S7054C4[] = {
  NSPAIR(_ZN7S7054C4C1Ev),
  NSPAIR(_ZN7S7054C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7054C5;
extern VTBL_ENTRY _ZTI7S7054C5[];
extern  VTBL_ENTRY _ZTV7S7054C5[];
extern Class_Descriptor cd_S7054C2;
extern VTBL_ENTRY _ZTI7S7054C2[];
extern  VTBL_ENTRY _ZTV7S7054C2[];
static Base_Class bases_S7054C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7054C5,    ABISELECT(8,4), //bcp->offset
    16, //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_S7054C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7054C4[];
extern void _ZN7S7054C22v6Ev();
extern void _ZN7S7054C22v7Ev();
extern void _ZN7S7054C22v8Ev();
extern void _ZN7S7054C43v12Ev();
extern void _ZN7S7054C43v13Ev();
extern void _ZN7S7054C43v14Ev();
extern void _ZN7S7054C43v15Ev();
extern void _ZN7S7054C4D1Ev();
extern void _ZN7S7054C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7054C4D1Ev,_ZTv0_n12_N7S7054C4D1Ev)();
extern void ABISELECT(_ZThn8_N7S7054C4D1Ev,_ZThn4_N7S7054C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7054C4D0Ev,_ZTv0_n12_N7S7054C4D0Ev)();
extern void ABISELECT(_ZThn8_N7S7054C4D0Ev,_ZThn4_N7S7054C4D0Ev)() __attribute__((weak));
extern void _ZN7S7054C52v9Ev();
extern void _ZN7S7054C53v10Ev();
extern void _ZN7S7054C53v11Ev();
static  VTBL_ENTRY vtc_S7054C4[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7054C4[0]),
  (VTBL_ENTRY)&_ZN7S7054C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7054C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7054C4D0Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7054C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7054C4D1Ev,_ZTv0_n12_N7S7054C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7054C4D0Ev,_ZTv0_n12_N7S7054C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7054C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v11Ev,
};
extern VTBL_ENTRY _ZTV7S7054C4[];
static  VTT_ENTRY vtt_S7054C4[] = {
  {&(_ZTV7S7054C4[7]),  7,27},
  {&(_ZTV7S7054C4[22]),  22,27},
  {&(_ZTV7S7054C4[7]),  7,27},
};
extern VTBL_ENTRY _ZTI7S7054C4[];
extern  VTBL_ENTRY _ZTV7S7054C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7054C4[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7054C4D0Ev,_ZTv0_n12_N7S7054C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7054C4D0Ev,_ZThn4_N7S7054C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7054C4D1Ev,_ZTv0_n12_N7S7054C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7054C4D1Ev,_ZThn4_N7S7054C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7054C4 = {  "S7054C4", // class name
  bases_S7054C4, 2,
  &(vtc_S7054C4[0]), // expected_vtbl_contents
  &(vtt_S7054C4[0]), // expected_vtt_contents
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI7S7054C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7054C4),27, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7054C4),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7054C3  : virtual S7054C4 {
  __tsi64 s7054c3f0;
  int s7054c3f1;
  void *s7054c3f2;
  virtual  ~S7054C3(); // _ZN7S7054C3D2Ev
  virtual void  v16(); // _ZN7S7054C33v16Ev
  virtual void  v17(); // _ZN7S7054C33v17Ev
  virtual void  v18(); // _ZN7S7054C33v18Ev
  virtual void  v19(); // _ZN7S7054C33v19Ev
  virtual void  v20(); // _ZN7S7054C33v20Ev
  virtual void  v21(); // _ZN7S7054C33v21Ev
  S7054C3(); // tgen
};
//SIG(-1 S7054C3) C1{ VBC2{ VBC3{ vd v7 v8 v9 Fp[10] FC4{ v10 v11 v12}} VBC4 v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 FL Fi Fp}


 S7054C3 ::~S7054C3(){ note_dtor("S7054C3", this);}
void  S7054C3 ::v16(){vfunc_called(this, "_ZN7S7054C33v16Ev");}
void  S7054C3 ::v17(){vfunc_called(this, "_ZN7S7054C33v17Ev");}
void  S7054C3 ::v18(){vfunc_called(this, "_ZN7S7054C33v18Ev");}
void  S7054C3 ::v19(){vfunc_called(this, "_ZN7S7054C33v19Ev");}
void  S7054C3 ::v20(){vfunc_called(this, "_ZN7S7054C33v20Ev");}
void  S7054C3 ::v21(){vfunc_called(this, "_ZN7S7054C33v21Ev");}
S7054C3 ::S7054C3(){ note_ctor("S7054C3", this);} // tgen

static void Test_S7054C3()
{
  extern Class_Descriptor cd_S7054C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,18)];
    init_test(&cd_S7054C3, buf);
    S7054C3 *dp, &lv = *(dp=new (buf) S7054C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S7054C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7054C3)");
    check_base_class_offset(lv, (S7054C5*)(S7054C4*), ABISELECT(32,20), "S7054C3");
    check_base_class_offset(lv, (S7054C2*)(S7054C4*), 0, "S7054C3");
    check_base_class_offset(lv, (S7054C4*), 0, "S7054C3");
    check_field_offset(lv, s7054c3f0, ABISELECT(8,4), "S7054C3.s7054c3f0");
    check_field_offset(lv, s7054c3f1, ABISELECT(16,12), "S7054C3.s7054c3f1");
    check_field_offset(lv, s7054c3f2, ABISELECT(24,16), "S7054C3.s7054c3f2");
    test_class_info(&lv, &cd_S7054C3);
    dp->~S7054C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7054C3(Test_S7054C3, "S7054C3", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN7S7054C3C1Ev();
extern void _ZN7S7054C3D2Ev();
Name_Map name_map_S7054C3[] = {
  NSPAIR(_ZN7S7054C3C1Ev),
  NSPAIR(_ZN7S7054C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7054C5;
extern VTBL_ENTRY _ZTI7S7054C5[];
extern  VTBL_ENTRY _ZTV7S7054C5[];
extern Class_Descriptor cd_S7054C2;
extern VTBL_ENTRY _ZTI7S7054C2[];
extern  VTBL_ENTRY _ZTV7S7054C2[];
extern Class_Descriptor cd_S7054C4;
extern VTBL_ENTRY _ZTI7S7054C4[];
extern  VTBL_ENTRY _ZTV7S7054C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7054C4[];
static Base_Class bases_S7054C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7054C5,    ABISELECT(32,20), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7054C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7054C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //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 _ZTI7S7054C3[];
extern void _ZN7S7054C22v6Ev();
extern void _ZN7S7054C22v7Ev();
extern void _ZN7S7054C22v8Ev();
extern void _ZN7S7054C43v12Ev();
extern void _ZN7S7054C43v13Ev();
extern void _ZN7S7054C43v14Ev();
extern void _ZN7S7054C43v15Ev();
extern void _ZN7S7054C3D1Ev();
extern void _ZN7S7054C3D0Ev();
extern void _ZN7S7054C33v16Ev();
extern void _ZN7S7054C33v17Ev();
extern void _ZN7S7054C33v18Ev();
extern void _ZN7S7054C33v19Ev();
extern void _ZN7S7054C33v20Ev();
extern void _ZN7S7054C33v21Ev();
extern void ABISELECT(_ZTv0_n24_N7S7054C3D1Ev,_ZTv0_n12_N7S7054C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7054C3D1Ev,_ZThn20_N7S7054C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7054C3D0Ev,_ZTv0_n12_N7S7054C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S7054C3D0Ev,_ZThn20_N7S7054C3D0Ev)() __attribute__((weak));
extern void _ZN7S7054C52v9Ev();
extern void _ZN7S7054C53v10Ev();
extern void _ZN7S7054C53v11Ev();
static  VTBL_ENTRY vtc_S7054C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7054C3[0]),
  (VTBL_ENTRY)&_ZN7S7054C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7054C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7054C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v21Ev,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7054C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7054C3D1Ev,_ZTv0_n12_N7S7054C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7054C3D0Ev,_ZTv0_n12_N7S7054C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7054C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v11Ev,
};
extern VTBL_ENTRY _ZTV7S7054C3[];
extern void _ZN7S7054C22v6Ev();
extern void _ZN7S7054C22v7Ev();
extern void _ZN7S7054C22v8Ev();
extern void _ZN7S7054C43v12Ev();
extern void _ZN7S7054C43v13Ev();
extern void _ZN7S7054C43v14Ev();
extern void _ZN7S7054C43v15Ev();
extern void _ZN7S7054C4D1Ev();
extern void _ZN7S7054C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7054C4__7S7054C3[] = {
  0,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7054C4[0]),
  (VTBL_ENTRY)&_ZN7S7054C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7054C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7054C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7054C4D1Ev,_ZTv0_n12_N7S7054C4D1Ev)();
extern void ABISELECT(_ZThn32_N7S7054C4D1Ev,_ZThn20_N7S7054C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7054C4D0Ev,_ZTv0_n12_N7S7054C4D0Ev)();
extern void ABISELECT(_ZThn32_N7S7054C4D0Ev,_ZThn20_N7S7054C4D0Ev)() __attribute__((weak));
extern void _ZN7S7054C52v9Ev();
extern void _ZN7S7054C53v10Ev();
extern void _ZN7S7054C53v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7054C5__7S7054C4__7S7054C3[] = {
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7054C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7054C4D1Ev,_ZTv0_n12_N7S7054C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7054C4D0Ev,_ZTv0_n12_N7S7054C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7054C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v11Ev,
};
static  VTT_ENTRY vtt_S7054C3[] = {
  {&(_ZTV7S7054C3[13]),  13,39},
  {&(_ZTV7S7054C3[13]),  13,39},
  {&(_ZTV7S7054C3[34]),  34,39},
  {&(_ZTV7S7054C3[13]),  13,39},
  {&(_tg__ZTV7S7054C4__7S7054C3[7]),  7,16},
  {&(_tg__ZTV7S7054C5__7S7054C4__7S7054C3[6]),  6,11},
  {&(_tg__ZTV7S7054C4__7S7054C3[7]),  7,16},
};
extern VTBL_ENTRY _ZTI7S7054C3[];
extern  VTBL_ENTRY _ZTV7S7054C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7054C3[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7054C4D0Ev,_ZTv0_n12_N7S7054C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7054C4D0Ev,_ZThn20_N7S7054C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7054C4D1Ev,_ZTv0_n12_N7S7054C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7054C4D1Ev,_ZThn20_N7S7054C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7054C3D0Ev,_ZTv0_n12_N7S7054C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7054C3D0Ev,_ZThn20_N7S7054C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7054C3D1Ev,_ZTv0_n12_N7S7054C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7054C3D1Ev,_ZThn20_N7S7054C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7054C3 = {  "S7054C3", // class name
  bases_S7054C3, 3,
  &(vtc_S7054C3[0]), // expected_vtbl_contents
  &(vtt_S7054C3[0]), // expected_vtt_contents
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI7S7054C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7054C3),39, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7054C3),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7054C1  : S7054C2 , virtual S7054C3 {
  char s7054c1f0;
  void *s7054c1f1;
  long s7054c1f2;
  long double s7054c1f3;
  virtual  ~S7054C1(); // _ZN7S7054C1D2Ev
  virtual void  v1(); // _ZN7S7054C12v1Ev
  virtual void  v2(); // _ZN7S7054C12v2Ev
  virtual void  v3(); // _ZN7S7054C12v3Ev
  virtual void  v4(); // _ZN7S7054C12v4Ev
  virtual void  v5(); // _ZN7S7054C12v5Ev
  S7054C1(); // tgen
};
//SIG(1 S7054C1) C1{ BC2{ v6 v7 v8} VBC3{ VBC4{ VBC5{ vd v9 v10 v11 Fp[10] FC2} VBC2 v12 v13 v14 v15} vd v16 v17 v18 v19 v20 v21 FL Fi Fp} vd v1 v2 v3 v4 v5 Fc Fp Fl FD}


 S7054C1 ::~S7054C1(){ note_dtor("S7054C1", this);}
void  S7054C1 ::v1(){vfunc_called(this, "_ZN7S7054C12v1Ev");}
void  S7054C1 ::v2(){vfunc_called(this, "_ZN7S7054C12v2Ev");}
void  S7054C1 ::v3(){vfunc_called(this, "_ZN7S7054C12v3Ev");}
void  S7054C1 ::v4(){vfunc_called(this, "_ZN7S7054C12v4Ev");}
void  S7054C1 ::v5(){vfunc_called(this, "_ZN7S7054C12v5Ev");}
S7054C1 ::S7054C1(){ note_ctor("S7054C1", this);} // tgen

static void Test_S7054C1()
{
  extern Class_Descriptor cd_S7054C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,25)];
    init_test(&cd_S7054C1, buf);
    S7054C1 *dp, &lv = *(dp=new (buf) S7054C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,96), "sizeof(S7054C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7054C1)");
    /*is_ambiguous_... S7054C1::S7054C2 */ AMB_check_base_class_offset(lv, (S7054C2*), 0, "S7054C1");
    check_base_class_offset(lv, (S7054C5*)(S7054C4*), ABISELECT(80,48), "S7054C1");
    check_base_class_offset(lv, (S7054C2*)(S7054C4*), ABISELECT(48,28), "S7054C1");
    check_base_class_offset(lv, (S7054C4*)(S7054C3*), ABISELECT(48,28), "S7054C1");
    check_base_class_offset(lv, (S7054C3*), ABISELECT(48,28), "S7054C1");
    check_field_offset(lv, s7054c1f0, ABISELECT(8,4), "S7054C1.s7054c1f0");
    check_field_offset(lv, s7054c1f1, ABISELECT(16,8), "S7054C1.s7054c1f1");
    check_field_offset(lv, s7054c1f2, ABISELECT(24,12), "S7054C1.s7054c1f2");
    check_field_offset(lv, s7054c1f3, ABISELECT(32,16), "S7054C1.s7054c1f3");
    test_class_info(&lv, &cd_S7054C1);
    dp->~S7054C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7054C1(Test_S7054C1, "S7054C1", ABISELECT(176,96));

#else // __cplusplus

extern void _ZN7S7054C1C1Ev();
extern void _ZN7S7054C1D2Ev();
Name_Map name_map_S7054C1[] = {
  NSPAIR(_ZN7S7054C1C1Ev),
  NSPAIR(_ZN7S7054C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7054C2;
extern VTBL_ENTRY _ZTI7S7054C2[];
extern  VTBL_ENTRY _ZTV7S7054C2[];
extern Class_Descriptor cd_S7054C5;
extern VTBL_ENTRY _ZTI7S7054C5[];
extern  VTBL_ENTRY _ZTV7S7054C5[];
extern Class_Descriptor cd_S7054C2;
extern VTBL_ENTRY _ZTI7S7054C2[];
extern  VTBL_ENTRY _ZTV7S7054C2[];
extern Class_Descriptor cd_S7054C4;
extern VTBL_ENTRY _ZTI7S7054C4[];
extern  VTBL_ENTRY _ZTV7S7054C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7054C4[];
extern Class_Descriptor cd_S7054C3;
extern VTBL_ENTRY _ZTI7S7054C3[];
extern  VTBL_ENTRY _ZTV7S7054C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7054C3[];
static Base_Class bases_S7054C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7054C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7054C5,    ABISELECT(80,48), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7054C2,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7054C4,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7054C3,    ABISELECT(48,28), //bcp->offset
    16, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7054C1[];
extern void _ZN7S7054C22v6Ev();
extern void _ZN7S7054C22v7Ev();
extern void _ZN7S7054C22v8Ev();
extern void _ZN7S7054C1D1Ev();
extern void _ZN7S7054C1D0Ev();
extern void _ZN7S7054C12v1Ev();
extern void _ZN7S7054C12v2Ev();
extern void _ZN7S7054C12v3Ev();
extern void _ZN7S7054C12v4Ev();
extern void _ZN7S7054C12v5Ev();
extern void _ZN7S7054C22v6Ev();
extern void _ZN7S7054C22v7Ev();
extern void _ZN7S7054C22v8Ev();
extern void _ZN7S7054C43v12Ev();
extern void _ZN7S7054C43v13Ev();
extern void _ZN7S7054C43v14Ev();
extern void _ZN7S7054C43v15Ev();
extern void ABISELECT(_ZTv0_n96_N7S7054C1D1Ev,_ZTv0_n48_N7S7054C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7054C1D1Ev,_ZThn28_N7S7054C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7054C1D0Ev,_ZTv0_n48_N7S7054C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7054C1D0Ev,_ZThn28_N7S7054C1D0Ev)() __attribute__((weak));
extern void _ZN7S7054C33v16Ev();
extern void _ZN7S7054C33v17Ev();
extern void _ZN7S7054C33v18Ev();
extern void _ZN7S7054C33v19Ev();
extern void _ZN7S7054C33v20Ev();
extern void _ZN7S7054C33v21Ev();
extern void ABISELECT(_ZTv0_n24_N7S7054C1D1Ev,_ZTv0_n12_N7S7054C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S7054C1D1Ev,_ZThn48_N7S7054C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7054C1D0Ev,_ZTv0_n12_N7S7054C1D0Ev)();
extern void ABISELECT(_ZThn80_N7S7054C1D0Ev,_ZThn48_N7S7054C1D0Ev)() __attribute__((weak));
extern void _ZN7S7054C52v9Ev();
extern void _ZN7S7054C53v10Ev();
extern void _ZN7S7054C53v11Ev();
static  VTBL_ENTRY vtc_S7054C1[] = {
  ABISELECT(48,28),
  ABISELECT(80,48),
  ABISELECT(48,28),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7054C1[0]),
  (VTBL_ENTRY)&_ZN7S7054C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7054C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7054C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7054C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7054C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7054C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7054C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7054C12v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7054C1[0]),
  (VTBL_ENTRY)&_ZN7S7054C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7054C1D1Ev,_ZTv0_n48_N7S7054C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7054C1D0Ev,_ZTv0_n48_N7S7054C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7054C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v21Ev,
  0,
  0,
  0,
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7054C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7054C1D1Ev,_ZTv0_n12_N7S7054C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7054C1D0Ev,_ZTv0_n12_N7S7054C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7054C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v11Ev,
};
extern VTBL_ENTRY _ZTV7S7054C1[];
extern void _ZN7S7054C22v6Ev();
extern void _ZN7S7054C22v7Ev();
extern void _ZN7S7054C22v8Ev();
extern void _ZN7S7054C43v12Ev();
extern void _ZN7S7054C43v13Ev();
extern void _ZN7S7054C43v14Ev();
extern void _ZN7S7054C43v15Ev();
extern void ABISELECT(_ZTv0_n96_N7S7054C3D1Ev,_ZTv0_n48_N7S7054C3D1Ev)();
extern void _ZN7S7054C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7054C3D0Ev,_ZTv0_n48_N7S7054C3D0Ev)();
extern void _ZN7S7054C3D0Ev() __attribute__((weak));
extern void _ZN7S7054C33v16Ev();
extern void _ZN7S7054C33v17Ev();
extern void _ZN7S7054C33v18Ev();
extern void _ZN7S7054C33v19Ev();
extern void _ZN7S7054C33v20Ev();
extern void _ZN7S7054C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7054C3__7S7054C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7054C3[0]),
  (VTBL_ENTRY)&_ZN7S7054C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7054C3D1Ev,_ZTv0_n48_N7S7054C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7054C3D0Ev,_ZTv0_n48_N7S7054C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7054C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7054C33v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7054C3D1Ev,_ZTv0_n12_N7S7054C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7054C3D1Ev,_ZThn20_N7S7054C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7054C3D0Ev,_ZTv0_n12_N7S7054C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S7054C3D0Ev,_ZThn20_N7S7054C3D0Ev)() __attribute__((weak));
extern void _ZN7S7054C52v9Ev();
extern void _ZN7S7054C53v10Ev();
extern void _ZN7S7054C53v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7054C5__7S7054C3__7S7054C1[] = {
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7054C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7054C3D1Ev,_ZTv0_n12_N7S7054C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7054C3D0Ev,_ZTv0_n12_N7S7054C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7054C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v11Ev,
};
extern void _ZN7S7054C22v6Ev();
extern void _ZN7S7054C22v7Ev();
extern void _ZN7S7054C22v8Ev();
extern void _ZN7S7054C43v12Ev();
extern void _ZN7S7054C43v13Ev();
extern void _ZN7S7054C43v14Ev();
extern void _ZN7S7054C43v15Ev();
extern void _ZN7S7054C4D1Ev();
extern void _ZN7S7054C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7054C4__7S7054C1[] = {
  0,
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7054C4[0]),
  (VTBL_ENTRY)&_ZN7S7054C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7054C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7054C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7054C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7054C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7054C4D1Ev,_ZTv0_n12_N7S7054C4D1Ev)();
extern void ABISELECT(_ZThn32_N7S7054C4D1Ev,_ZThn20_N7S7054C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7054C4D0Ev,_ZTv0_n12_N7S7054C4D0Ev)();
extern void ABISELECT(_ZThn32_N7S7054C4D0Ev,_ZThn20_N7S7054C4D0Ev)() __attribute__((weak));
extern void _ZN7S7054C52v9Ev();
extern void _ZN7S7054C53v10Ev();
extern void _ZN7S7054C53v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7054C5__7S7054C4__7S7054C1[] = {
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7054C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7054C4D1Ev,_ZTv0_n12_N7S7054C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7054C4D0Ev,_ZTv0_n12_N7S7054C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7054C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7054C53v11Ev,
};
static  VTT_ENTRY vtt_S7054C1[] = {
  {&(_ZTV7S7054C1[6]),  6,61},
  {&(_ZTV7S7054C1[35]),  35,61},
  {&(_ZTV7S7054C1[35]),  35,61},
  {&(_ZTV7S7054C1[56]),  56,61},
  {&(_ZTV7S7054C1[35]),  35,61},
  {&(_tg__ZTV7S7054C3__7S7054C1[13]),  13,28},
  {&(_tg__ZTV7S7054C3__7S7054C1[13]),  13,28},
  {&(_tg__ZTV7S7054C5__7S7054C3__7S7054C1[6]),  6,11},
  {&(_tg__ZTV7S7054C3__7S7054C1[13]),  13,28},
  {&(_tg__ZTV7S7054C4__7S7054C1[7]),  7,16},
  {&(_tg__ZTV7S7054C5__7S7054C4__7S7054C1[6]),  6,11},
  {&(_tg__ZTV7S7054C4__7S7054C1[7]),  7,16},
};
extern VTBL_ENTRY _ZTI7S7054C1[];
extern  VTBL_ENTRY _ZTV7S7054C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7054C1[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7054C4D0Ev,_ZTv0_n12_N7S7054C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7054C4D0Ev,_ZThn20_N7S7054C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7054C4D1Ev,_ZTv0_n12_N7S7054C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7054C4D1Ev,_ZThn20_N7S7054C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7054C3D0Ev,_ZTv0_n12_N7S7054C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7054C3D0Ev,_ZThn20_N7S7054C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7054C3D1Ev,_ZTv0_n12_N7S7054C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7054C3D1Ev,_ZThn20_N7S7054C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7054C3D0Ev,_ZTv0_n48_N7S7054C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S7054C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7054C3D1Ev,_ZTv0_n48_N7S7054C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S7054C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7054C1D0Ev,_ZTv0_n12_N7S7054C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7054C1D0Ev,_ZThn48_N7S7054C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7054C1D1Ev,_ZTv0_n12_N7S7054C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7054C1D1Ev,_ZThn48_N7S7054C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7054C1D0Ev,_ZTv0_n48_N7S7054C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7054C1D0Ev,_ZThn28_N7S7054C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7054C1D1Ev,_ZTv0_n48_N7S7054C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7054C1D1Ev,_ZThn28_N7S7054C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7054C1 = {  "S7054C1", // class name
  bases_S7054C1, 5,
  &(vtc_S7054C1[0]), // expected_vtbl_contents
  &(vtt_S7054C1[0]), // expected_vtt_contents
  ABISELECT(176,96), // object size
  NSPAIRA(_ZTI7S7054C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7054C1),61, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7054C1),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1764C3  : S1766C4_nt {
  int s1764c3f0;
  void *s1764c3f1[2];
  int s1764c3f2;
  virtual  ~S1764C3(); // _ZN7S1764C3D1Ev
  virtual void  v10(); // _ZN7S1764C33v10Ev
  virtual void  v11(); // _ZN7S1764C33v11Ev
  virtual void  v12(); // _ZN7S1764C33v12Ev
  virtual void  v13(); // _ZN7S1764C33v13Ev
  virtual void  v14(); // _ZN7S1764C33v14Ev
  virtual void  v15(); // _ZN7S1764C33v15Ev
  virtual void  v16(); // _ZN7S1764C33v16Ev
  virtual void  v17(); // _ZN7S1764C33v17Ev
  virtual void  v18(); // _ZN7S1764C33v18Ev
  virtual void  v19(); // _ZN7S1764C33v19Ev
  virtual void  v20(); // _ZN7S1764C33v20Ev
  S1764C3(); // tgen
};
//SIG(-1 S1764C3) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S1764C3 ::~S1764C3(){ note_dtor("S1764C3", this);}
void  S1764C3 ::v10(){vfunc_called(this, "_ZN7S1764C33v10Ev");}
void  S1764C3 ::v11(){vfunc_called(this, "_ZN7S1764C33v11Ev");}
void  S1764C3 ::v12(){vfunc_called(this, "_ZN7S1764C33v12Ev");}
void  S1764C3 ::v13(){vfunc_called(this, "_ZN7S1764C33v13Ev");}
void  S1764C3 ::v14(){vfunc_called(this, "_ZN7S1764C33v14Ev");}
void  S1764C3 ::v15(){vfunc_called(this, "_ZN7S1764C33v15Ev");}
void  S1764C3 ::v16(){vfunc_called(this, "_ZN7S1764C33v16Ev");}
void  S1764C3 ::v17(){vfunc_called(this, "_ZN7S1764C33v17Ev");}
void  S1764C3 ::v18(){vfunc_called(this, "_ZN7S1764C33v18Ev");}
void  S1764C3 ::v19(){vfunc_called(this, "_ZN7S1764C33v19Ev");}
void  S1764C3 ::v20(){vfunc_called(this, "_ZN7S1764C33v20Ev");}
S1764C3 ::S1764C3(){ note_ctor("S1764C3", this);} // tgen

static void Test_S1764C3()
{
  extern Class_Descriptor cd_S1764C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1764C3, buf);
    S1764C3 *dp, &lv = *(dp=new (buf) S1764C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1764C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1764C3)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S1764C3");
    check_field_offset(lv, s1764c3f0, ABISELECT(16,12), "S1764C3.s1764c3f0");
    check_field_offset(lv, s1764c3f1, ABISELECT(24,16), "S1764C3.s1764c3f1");
    check_field_offset(lv, s1764c3f2, ABISELECT(40,24), "S1764C3.s1764c3f2");
    test_class_info(&lv, &cd_S1764C3);
    dp->~S1764C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1764C3(Test_S1764C3, "S1764C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1764C3C1Ev();
extern void _ZN7S1764C3D1Ev();
Name_Map name_map_S1764C3[] = {
  NSPAIR(_ZN7S1764C3C1Ev),
  NSPAIR(_ZN7S1764C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S1764C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S1764C3[];
extern void _ZN7S1764C3D1Ev();
extern void _ZN7S1764C3D0Ev();
extern void _ZN7S1764C33v10Ev();
extern void _ZN7S1764C33v11Ev();
extern void _ZN7S1764C33v12Ev();
extern void _ZN7S1764C33v13Ev();
extern void _ZN7S1764C33v14Ev();
extern void _ZN7S1764C33v15Ev();
extern void _ZN7S1764C33v16Ev();
extern void _ZN7S1764C33v17Ev();
extern void _ZN7S1764C33v18Ev();
extern void _ZN7S1764C33v19Ev();
extern void _ZN7S1764C33v20Ev();
static  VTBL_ENTRY vtc_S1764C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1764C3[0]),
  (VTBL_ENTRY)&_ZN7S1764C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1764C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v20Ev,
};
extern VTBL_ENTRY _ZTI7S1764C3[];
extern  VTBL_ENTRY _ZTV7S1764C3[];
Class_Descriptor cd_S1764C3 = {  "S1764C3", // class name
  bases_S1764C3, 1,
  &(vtc_S1764C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1764C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1764C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1764C2  : S1764C3 {
  virtual  ~S1764C2(); // _ZN7S1764C2D1Ev
  S1764C2(); // tgen
};
//SIG(-1 S1764C2) C1{ BC2{ BC3{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi} vd}


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

static void Test_S1764C2()
{
  extern Class_Descriptor cd_S1764C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1764C2, buf);
    S1764C2 *dp, &lv = *(dp=new (buf) S1764C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1764C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1764C2)");
    check_base_class_offset(lv, (S1766C4_nt*)(S1764C3*), 0, "S1764C2");
    check_base_class_offset(lv, (S1764C3*), 0, "S1764C2");
    test_class_info(&lv, &cd_S1764C2);
    dp->~S1764C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1764C2(Test_S1764C2, "S1764C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1764C2C1Ev();
extern void _ZN7S1764C2D1Ev();
Name_Map name_map_S1764C2[] = {
  NSPAIR(_ZN7S1764C2C1Ev),
  NSPAIR(_ZN7S1764C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S1764C3;
extern VTBL_ENTRY _ZTI7S1764C3[];
extern  VTBL_ENTRY _ZTV7S1764C3[];
static Base_Class bases_S1764C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S1764C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1764C2[];
extern void _ZN7S1764C2D1Ev();
extern void _ZN7S1764C2D0Ev();
extern void _ZN7S1764C33v10Ev();
extern void _ZN7S1764C33v11Ev();
extern void _ZN7S1764C33v12Ev();
extern void _ZN7S1764C33v13Ev();
extern void _ZN7S1764C33v14Ev();
extern void _ZN7S1764C33v15Ev();
extern void _ZN7S1764C33v16Ev();
extern void _ZN7S1764C33v17Ev();
extern void _ZN7S1764C33v18Ev();
extern void _ZN7S1764C33v19Ev();
extern void _ZN7S1764C33v20Ev();
static  VTBL_ENTRY vtc_S1764C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1764C2[0]),
  (VTBL_ENTRY)&_ZN7S1764C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1764C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v20Ev,
};
extern VTBL_ENTRY _ZTI7S1764C2[];
extern  VTBL_ENTRY _ZTV7S1764C2[];
Class_Descriptor cd_S1764C2 = {  "S1764C2", // class name
  bases_S1764C2, 2,
  &(vtc_S1764C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1764C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1764C2),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  S1764C1  : S1764C2 {
  void *s1764c1f0;
  int s1764c1f1[3];
  __tsi64 s1764c1f2[2];
  char s1764c1f3;
  int s1764c1f4[2];
  virtual  ~S1764C1(); // _ZN7S1764C1D1Ev
  virtual void  v1(); // _ZN7S1764C12v1Ev
  virtual void  v2(); // _ZN7S1764C12v2Ev
  virtual void  v3(); // _ZN7S1764C12v3Ev
  virtual void  v4(); // _ZN7S1764C12v4Ev
  virtual void  v5(); // _ZN7S1764C12v5Ev
  virtual void  v6(); // _ZN7S1764C12v6Ev
  virtual void  v7(); // _ZN7S1764C12v7Ev
  virtual void  v8(); // _ZN7S1764C12v8Ev
  virtual void  v9(); // _ZN7S1764C12v9Ev
  S1764C1(); // tgen
};
//SIG(1 S1764C1) C1{ BC2{ BC3{ BC4{ vd m FL} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi Fp[2] Fi} vd} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp Fi[3] FL[2] Fc Fi[2]}


 S1764C1 ::~S1764C1(){ note_dtor("S1764C1", this);}
void  S1764C1 ::v1(){vfunc_called(this, "_ZN7S1764C12v1Ev");}
void  S1764C1 ::v2(){vfunc_called(this, "_ZN7S1764C12v2Ev");}
void  S1764C1 ::v3(){vfunc_called(this, "_ZN7S1764C12v3Ev");}
void  S1764C1 ::v4(){vfunc_called(this, "_ZN7S1764C12v4Ev");}
void  S1764C1 ::v5(){vfunc_called(this, "_ZN7S1764C12v5Ev");}
void  S1764C1 ::v6(){vfunc_called(this, "_ZN7S1764C12v6Ev");}
void  S1764C1 ::v7(){vfunc_called(this, "_ZN7S1764C12v7Ev");}
void  S1764C1 ::v8(){vfunc_called(this, "_ZN7S1764C12v8Ev");}
void  S1764C1 ::v9(){vfunc_called(this, "_ZN7S1764C12v9Ev");}
S1764C1 ::S1764C1(){ note_ctor("S1764C1", this);} // tgen

static void Test_S1764C1()
{
  extern Class_Descriptor cd_S1764C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S1764C1, buf);
    S1764C1 *dp, &lv = *(dp=new (buf) S1764C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S1764C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1764C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S1764C3*)(S1764C2*), 0, "S1764C1");
    check_base_class_offset(lv, (S1764C3*)(S1764C2*), 0, "S1764C1");
    check_base_class_offset(lv, (S1764C2*), 0, "S1764C1");
    check_field_offset(lv, s1764c1f0, ABISELECT(48,28), "S1764C1.s1764c1f0");
    check_field_offset(lv, s1764c1f1, ABISELECT(56,32), "S1764C1.s1764c1f1");
    check_field_offset(lv, s1764c1f2, ABISELECT(72,44), "S1764C1.s1764c1f2");
    check_field_offset(lv, s1764c1f3, ABISELECT(88,60), "S1764C1.s1764c1f3");
    check_field_offset(lv, s1764c1f4, ABISELECT(92,64), "S1764C1.s1764c1f4");
    test_class_info(&lv, &cd_S1764C1);
    dp->~S1764C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1764C1(Test_S1764C1, "S1764C1", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN7S1764C1C1Ev();
extern void _ZN7S1764C1D1Ev();
Name_Map name_map_S1764C1[] = {
  NSPAIR(_ZN7S1764C1C1Ev),
  NSPAIR(_ZN7S1764C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S1764C3;
extern VTBL_ENTRY _ZTI7S1764C3[];
extern  VTBL_ENTRY _ZTV7S1764C3[];
extern Class_Descriptor cd_S1764C2;
extern VTBL_ENTRY _ZTI7S1764C2[];
extern  VTBL_ENTRY _ZTV7S1764C2[];
static Base_Class bases_S1764C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S1764C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1764C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1764C1[];
extern void _ZN7S1764C1D1Ev();
extern void _ZN7S1764C1D0Ev();
extern void _ZN7S1764C33v10Ev();
extern void _ZN7S1764C33v11Ev();
extern void _ZN7S1764C33v12Ev();
extern void _ZN7S1764C33v13Ev();
extern void _ZN7S1764C33v14Ev();
extern void _ZN7S1764C33v15Ev();
extern void _ZN7S1764C33v16Ev();
extern void _ZN7S1764C33v17Ev();
extern void _ZN7S1764C33v18Ev();
extern void _ZN7S1764C33v19Ev();
extern void _ZN7S1764C33v20Ev();
extern void _ZN7S1764C12v1Ev();
extern void _ZN7S1764C12v2Ev();
extern void _ZN7S1764C12v3Ev();
extern void _ZN7S1764C12v4Ev();
extern void _ZN7S1764C12v5Ev();
extern void _ZN7S1764C12v6Ev();
extern void _ZN7S1764C12v7Ev();
extern void _ZN7S1764C12v8Ev();
extern void _ZN7S1764C12v9Ev();
static  VTBL_ENTRY vtc_S1764C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1764C1[0]),
  (VTBL_ENTRY)&_ZN7S1764C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1764C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1764C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1764C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1764C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1764C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1764C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1764C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1764C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1764C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1764C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1764C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S1764C1[];
extern  VTBL_ENTRY _ZTV7S1764C1[];
Class_Descriptor cd_S1764C1 = {  "S1764C1", // class name
  bases_S1764C1, 3,
  &(vtc_S1764C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI7S1764C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1764C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1763C3  : S1766C4_nt {
  int s1763c3f0;
  void *s1763c3f1[2];
  int s1763c3f2;
  virtual  ~S1763C3(); // _ZN7S1763C3D1Ev
  virtual void  v10(); // _ZN7S1763C33v10Ev
  virtual void  v11(); // _ZN7S1763C33v11Ev
  virtual void  v12(); // _ZN7S1763C33v12Ev
  virtual void  v13(); // _ZN7S1763C33v13Ev
  virtual void  v14(); // _ZN7S1763C33v14Ev
  virtual void  v15(); // _ZN7S1763C33v15Ev
  virtual void  v16(); // _ZN7S1763C33v16Ev
  virtual void  v17(); // _ZN7S1763C33v17Ev
  virtual void  v18(); // _ZN7S1763C33v18Ev
  virtual void  v19(); // _ZN7S1763C33v19Ev
  virtual void  v20(); // _ZN7S1763C33v20Ev
  S1763C3(); // tgen
};
//SIG(-1 S1763C3) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S1763C3 ::~S1763C3(){ note_dtor("S1763C3", this);}
void  S1763C3 ::v10(){vfunc_called(this, "_ZN7S1763C33v10Ev");}
void  S1763C3 ::v11(){vfunc_called(this, "_ZN7S1763C33v11Ev");}
void  S1763C3 ::v12(){vfunc_called(this, "_ZN7S1763C33v12Ev");}
void  S1763C3 ::v13(){vfunc_called(this, "_ZN7S1763C33v13Ev");}
void  S1763C3 ::v14(){vfunc_called(this, "_ZN7S1763C33v14Ev");}
void  S1763C3 ::v15(){vfunc_called(this, "_ZN7S1763C33v15Ev");}
void  S1763C3 ::v16(){vfunc_called(this, "_ZN7S1763C33v16Ev");}
void  S1763C3 ::v17(){vfunc_called(this, "_ZN7S1763C33v17Ev");}
void  S1763C3 ::v18(){vfunc_called(this, "_ZN7S1763C33v18Ev");}
void  S1763C3 ::v19(){vfunc_called(this, "_ZN7S1763C33v19Ev");}
void  S1763C3 ::v20(){vfunc_called(this, "_ZN7S1763C33v20Ev");}
S1763C3 ::S1763C3(){ note_ctor("S1763C3", this);} // tgen

static void Test_S1763C3()
{
  extern Class_Descriptor cd_S1763C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1763C3, buf);
    S1763C3 *dp, &lv = *(dp=new (buf) S1763C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1763C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1763C3)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S1763C3");
    check_field_offset(lv, s1763c3f0, ABISELECT(16,12), "S1763C3.s1763c3f0");
    check_field_offset(lv, s1763c3f1, ABISELECT(24,16), "S1763C3.s1763c3f1");
    check_field_offset(lv, s1763c3f2, ABISELECT(40,24), "S1763C3.s1763c3f2");
    test_class_info(&lv, &cd_S1763C3);
    dp->~S1763C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1763C3(Test_S1763C3, "S1763C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1763C3C1Ev();
extern void _ZN7S1763C3D1Ev();
Name_Map name_map_S1763C3[] = {
  NSPAIR(_ZN7S1763C3C1Ev),
  NSPAIR(_ZN7S1763C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S1763C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S1763C3[];
extern void _ZN7S1763C3D1Ev();
extern void _ZN7S1763C3D0Ev();
extern void _ZN7S1763C33v10Ev();
extern void _ZN7S1763C33v11Ev();
extern void _ZN7S1763C33v12Ev();
extern void _ZN7S1763C33v13Ev();
extern void _ZN7S1763C33v14Ev();
extern void _ZN7S1763C33v15Ev();
extern void _ZN7S1763C33v16Ev();
extern void _ZN7S1763C33v17Ev();
extern void _ZN7S1763C33v18Ev();
extern void _ZN7S1763C33v19Ev();
extern void _ZN7S1763C33v20Ev();
static  VTBL_ENTRY vtc_S1763C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1763C3[0]),
  (VTBL_ENTRY)&_ZN7S1763C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1763C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v20Ev,
};
extern VTBL_ENTRY _ZTI7S1763C3[];
extern  VTBL_ENTRY _ZTV7S1763C3[];
Class_Descriptor cd_S1763C3 = {  "S1763C3", // class name
  bases_S1763C3, 1,
  &(vtc_S1763C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1763C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1763C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1763C2  : S1763C3 {
  virtual  ~S1763C2(); // _ZN7S1763C2D1Ev
  S1763C2(); // tgen
};
//SIG(-1 S1763C2) C1{ BC2{ BC3{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi} vd}


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

static void Test_S1763C2()
{
  extern Class_Descriptor cd_S1763C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1763C2, buf);
    S1763C2 *dp, &lv = *(dp=new (buf) S1763C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1763C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1763C2)");
    check_base_class_offset(lv, (S1766C4_nt*)(S1763C3*), 0, "S1763C2");
    check_base_class_offset(lv, (S1763C3*), 0, "S1763C2");
    test_class_info(&lv, &cd_S1763C2);
    dp->~S1763C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1763C2(Test_S1763C2, "S1763C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1763C2C1Ev();
extern void _ZN7S1763C2D1Ev();
Name_Map name_map_S1763C2[] = {
  NSPAIR(_ZN7S1763C2C1Ev),
  NSPAIR(_ZN7S1763C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S1763C3;
extern VTBL_ENTRY _ZTI7S1763C3[];
extern  VTBL_ENTRY _ZTV7S1763C3[];
static Base_Class bases_S1763C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S1763C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1763C2[];
extern void _ZN7S1763C2D1Ev();
extern void _ZN7S1763C2D0Ev();
extern void _ZN7S1763C33v10Ev();
extern void _ZN7S1763C33v11Ev();
extern void _ZN7S1763C33v12Ev();
extern void _ZN7S1763C33v13Ev();
extern void _ZN7S1763C33v14Ev();
extern void _ZN7S1763C33v15Ev();
extern void _ZN7S1763C33v16Ev();
extern void _ZN7S1763C33v17Ev();
extern void _ZN7S1763C33v18Ev();
extern void _ZN7S1763C33v19Ev();
extern void _ZN7S1763C33v20Ev();
static  VTBL_ENTRY vtc_S1763C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1763C2[0]),
  (VTBL_ENTRY)&_ZN7S1763C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1763C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v20Ev,
};
extern VTBL_ENTRY _ZTI7S1763C2[];
extern  VTBL_ENTRY _ZTV7S1763C2[];
Class_Descriptor cd_S1763C2 = {  "S1763C2", // class name
  bases_S1763C2, 2,
  &(vtc_S1763C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1763C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1763C2),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  S1763C1  : S1763C2 {
  void *s1763c1f0;
  int s1763c1f1[3];
  long s1763c1f2[2];
  char s1763c1f3;
  int s1763c1f4[2];
  virtual  ~S1763C1(); // _ZN7S1763C1D1Ev
  virtual void  v1(); // _ZN7S1763C12v1Ev
  virtual void  v2(); // _ZN7S1763C12v2Ev
  virtual void  v3(); // _ZN7S1763C12v3Ev
  virtual void  v4(); // _ZN7S1763C12v4Ev
  virtual void  v5(); // _ZN7S1763C12v5Ev
  virtual void  v6(); // _ZN7S1763C12v6Ev
  virtual void  v7(); // _ZN7S1763C12v7Ev
  virtual void  v8(); // _ZN7S1763C12v8Ev
  virtual void  v9(); // _ZN7S1763C12v9Ev
  S1763C1(); // tgen
};
//SIG(1 S1763C1) C1{ BC2{ BC3{ BC4{ vd m FL} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi Fp[2] Fi} vd} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp Fi[3] Fl[2] Fc Fi[2]}


 S1763C1 ::~S1763C1(){ note_dtor("S1763C1", this);}
void  S1763C1 ::v1(){vfunc_called(this, "_ZN7S1763C12v1Ev");}
void  S1763C1 ::v2(){vfunc_called(this, "_ZN7S1763C12v2Ev");}
void  S1763C1 ::v3(){vfunc_called(this, "_ZN7S1763C12v3Ev");}
void  S1763C1 ::v4(){vfunc_called(this, "_ZN7S1763C12v4Ev");}
void  S1763C1 ::v5(){vfunc_called(this, "_ZN7S1763C12v5Ev");}
void  S1763C1 ::v6(){vfunc_called(this, "_ZN7S1763C12v6Ev");}
void  S1763C1 ::v7(){vfunc_called(this, "_ZN7S1763C12v7Ev");}
void  S1763C1 ::v8(){vfunc_called(this, "_ZN7S1763C12v8Ev");}
void  S1763C1 ::v9(){vfunc_called(this, "_ZN7S1763C12v9Ev");}
S1763C1 ::S1763C1(){ note_ctor("S1763C1", this);} // tgen

static void Test_S1763C1()
{
  extern Class_Descriptor cd_S1763C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1763C1, buf);
    S1763C1 *dp, &lv = *(dp=new (buf) S1763C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1763C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1763C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S1763C3*)(S1763C2*), 0, "S1763C1");
    check_base_class_offset(lv, (S1763C3*)(S1763C2*), 0, "S1763C1");
    check_base_class_offset(lv, (S1763C2*), 0, "S1763C1");
    check_field_offset(lv, s1763c1f0, ABISELECT(48,28), "S1763C1.s1763c1f0");
    check_field_offset(lv, s1763c1f1, ABISELECT(56,32), "S1763C1.s1763c1f1");
    check_field_offset(lv, s1763c1f2, ABISELECT(72,44), "S1763C1.s1763c1f2");
    check_field_offset(lv, s1763c1f3, ABISELECT(88,52), "S1763C1.s1763c1f3");
    check_field_offset(lv, s1763c1f4, ABISELECT(92,56), "S1763C1.s1763c1f4");
    test_class_info(&lv, &cd_S1763C1);
    dp->~S1763C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1763C1(Test_S1763C1, "S1763C1", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1763C1C1Ev();
extern void _ZN7S1763C1D1Ev();
Name_Map name_map_S1763C1[] = {
  NSPAIR(_ZN7S1763C1C1Ev),
  NSPAIR(_ZN7S1763C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S1763C3;
extern VTBL_ENTRY _ZTI7S1763C3[];
extern  VTBL_ENTRY _ZTV7S1763C3[];
extern Class_Descriptor cd_S1763C2;
extern VTBL_ENTRY _ZTI7S1763C2[];
extern  VTBL_ENTRY _ZTV7S1763C2[];
static Base_Class bases_S1763C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S1763C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1763C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1763C1[];
extern void _ZN7S1763C1D1Ev();
extern void _ZN7S1763C1D0Ev();
extern void _ZN7S1763C33v10Ev();
extern void _ZN7S1763C33v11Ev();
extern void _ZN7S1763C33v12Ev();
extern void _ZN7S1763C33v13Ev();
extern void _ZN7S1763C33v14Ev();
extern void _ZN7S1763C33v15Ev();
extern void _ZN7S1763C33v16Ev();
extern void _ZN7S1763C33v17Ev();
extern void _ZN7S1763C33v18Ev();
extern void _ZN7S1763C33v19Ev();
extern void _ZN7S1763C33v20Ev();
extern void _ZN7S1763C12v1Ev();
extern void _ZN7S1763C12v2Ev();
extern void _ZN7S1763C12v3Ev();
extern void _ZN7S1763C12v4Ev();
extern void _ZN7S1763C12v5Ev();
extern void _ZN7S1763C12v6Ev();
extern void _ZN7S1763C12v7Ev();
extern void _ZN7S1763C12v8Ev();
extern void _ZN7S1763C12v9Ev();
static  VTBL_ENTRY vtc_S1763C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1763C1[0]),
  (VTBL_ENTRY)&_ZN7S1763C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1763C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1763C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1763C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1763C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1763C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1763C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1763C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1763C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1763C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1763C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1763C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S1763C1[];
extern  VTBL_ENTRY _ZTV7S1763C1[];
Class_Descriptor cd_S1763C1 = {  "S1763C1", // class name
  bases_S1763C1, 3,
  &(vtc_S1763C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1763C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1763C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5847C4  : virtual S19863C10 , virtual S19863C9_nt {
  long double s5847c4f0[10];
  virtual  ~S5847C4(); // _ZN7S5847C4D2Ev
  S5847C4(); // tgen
};
//SIG(-1 S5847C4) C1{ VBC2{ m} VBC3{ m Fi} vd FD[10]}


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

static void Test_S5847C4()
{
  extern Class_Descriptor cd_S5847C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S5847C4, buf);
    S5847C4 *dp, &lv = *(dp=new (buf) S5847C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S5847C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5847C4)");
    check_base_class_offset(lv, (S19863C10*), 0, "S5847C4");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(176,124), "S5847C4");
    check_field_offset(lv, s5847c4f0, ABISELECT(16,4), "S5847C4.s5847c4f0");
    test_class_info(&lv, &cd_S5847C4);
    dp->~S5847C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5847C4(Test_S5847C4, "S5847C4", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN7S5847C4C1Ev();
extern void _ZN7S5847C4D2Ev();
Name_Map name_map_S5847C4[] = {
  NSPAIR(_ZN7S5847C4C1Ev),
  NSPAIR(_ZN7S5847C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S5847C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C9_nt,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5847C4[];
extern void _ZN7S5847C4D1Ev();
extern void _ZN7S5847C4D0Ev();
static  VTBL_ENTRY vtc_S5847C4[] = {
  ABISELECT(176,124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5847C4[0]),
  (VTBL_ENTRY)&_ZN7S5847C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5847C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S5847C4[];
static  VTT_ENTRY vtt_S5847C4[] = {
  {&(_ZTV7S5847C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5847C4[];
extern  VTBL_ENTRY _ZTV7S5847C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5847C4[];
Class_Descriptor cd_S5847C4 = {  "S5847C4", // class name
  bases_S5847C4, 2,
  &(vtc_S5847C4[0]), // expected_vtbl_contents
  &(vtt_S5847C4[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI7S5847C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5847C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5847C4),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  S5847C6  : S19863C10 {
};
//SIG(-1 S5847C6) C1{ BC2{ m}}



static void Test_S5847C6()
{
  extern Class_Descriptor cd_S5847C6;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S5847C6, buf);
    S5847C6 &lv = *(new (buf) S5847C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S5847C6)");
    check2(__alignof__(lv), 1, "__alignof__(S5847C6)");
    check_base_class_offset(lv, (S19863C10*), 0, "S5847C6");
    test_class_info(&lv, &cd_S5847C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5847C6(Test_S5847C6, "S5847C6", 1);

#else // __cplusplus

extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S5847C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5847C6[];
Class_Descriptor cd_S5847C6 = {  "S5847C6", // class name
  bases_S5847C6, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI7S5847C6),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  S5847C3  : virtual S5847C4 , S5847C6 {
  char s5847c3f0;
  virtual  ~S5847C3(); // _ZN7S5847C3D2Ev
  S5847C3(); // tgen
};
//SIG(-1 S5847C3) C1{ VBC2{ VBC3{ m} VBC4{ m Fi} vd FD[10]} BC5{ BC3} vd Fc}


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

static void Test_S5847C3()
{
  extern Class_Descriptor cd_S5847C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S5847C3, buf);
    S5847C3 *dp, &lv = *(dp=new (buf) S5847C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S5847C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5847C3)");
    check_base_class_offset(lv, (S19863C10*)(S5847C4*), ABISELECT(192,132), "S5847C3");
    check_base_class_offset(lv, (S19863C9_nt*)(S5847C4*), ABISELECT(192,132), "S5847C3");
    check_base_class_offset(lv, (S5847C4*), ABISELECT(16,8), "S5847C3");
    check_base_class_offset(lv, (S19863C10*)(S5847C6*), 0, "S5847C3");
    check_base_class_offset(lv, (S5847C6*), 0, "S5847C3");
    check_field_offset(lv, s5847c3f0, ABISELECT(8,4), "S5847C3.s5847c3f0");
    test_class_info(&lv, &cd_S5847C3);
    dp->~S5847C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5847C3(Test_S5847C3, "S5847C3", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN7S5847C3C1Ev();
extern void _ZN7S5847C3D2Ev();
Name_Map name_map_S5847C3[] = {
  NSPAIR(_ZN7S5847C3C1Ev),
  NSPAIR(_ZN7S5847C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S5847C4;
extern VTBL_ENTRY _ZTI7S5847C4[];
extern  VTBL_ENTRY _ZTV7S5847C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5847C4[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S5847C6;
extern VTBL_ENTRY _ZTI7S5847C6[];
static Base_Class bases_S5847C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    ABISELECT(192,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(192,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5847C4,    ABISELECT(16,8), //bcp->offset
    7, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5847C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5847C3[];
extern void _ZN7S5847C3D1Ev();
extern void _ZN7S5847C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S5847C3D1Ev,_ZTv0_n20_N7S5847C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S5847C3D1Ev,_ZThn8_N7S5847C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5847C3D0Ev,_ZTv0_n20_N7S5847C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S5847C3D0Ev,_ZThn8_N7S5847C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5847C3[] = {
  ABISELECT(192,132),
  ABISELECT(192,132),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5847C3[0]),
  (VTBL_ENTRY)&_ZN7S5847C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5847C3D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5847C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5847C3D1Ev,_ZTv0_n20_N7S5847C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5847C3D0Ev,_ZTv0_n20_N7S5847C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S5847C3[];
extern void _ZN7S5847C4D1Ev();
extern void _ZN7S5847C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5847C4__7S5847C3[] = {
  ABISELECT(176,124),
  ABISELECT(176,124),
  0,
  (VTBL_ENTRY)&(_ZTI7S5847C4[0]),
  (VTBL_ENTRY)&_ZN7S5847C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5847C4D0Ev,
};
static  VTT_ENTRY vtt_S5847C3[] = {
  {&(_ZTV7S5847C3[5]),  5,14},
  {&(_ZTV7S5847C3[12]),  12,14},
  {&(_tg__ZTV7S5847C4__7S5847C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5847C3[];
extern  VTBL_ENTRY _ZTV7S5847C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5847C3[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5847C3D0Ev,_ZTv0_n20_N7S5847C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5847C3D0Ev,_ZThn8_N7S5847C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5847C3D1Ev,_ZTv0_n20_N7S5847C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5847C3D1Ev,_ZThn8_N7S5847C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5847C3 = {  "S5847C3", // class name
  bases_S5847C3, 5,
  &(vtc_S5847C3[0]), // expected_vtbl_contents
  &(vtt_S5847C3[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI7S5847C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5847C3),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5847C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5847C8  : virtual S19863C6 , virtual S19863C8 , virtual S19863C10 {
  void *s5847c8f0;
  ~S5847C8(); // tgen
  S5847C8(); // tgen
};
//SIG(-1 S5847C8) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} VBC4 VBC6{ m} Fp}


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

static void Test_S5847C8()
{
  extern Class_Descriptor cd_S5847C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,36)];
    init_test(&cd_S5847C8, buf);
    S5847C8 *dp, &lv = *(dp=new (buf) S5847C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S5847C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5847C8)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,8), "S5847C8");
    check_base_class_offset(lv, (S19863C8*), 0, "S5847C8");
    check_base_class_offset(lv, (S19863C10*), 0, "S5847C8");
    check_field_offset(lv, s5847c8f0, ABISELECT(8,4), "S5847C8.s5847c8f0");
    test_class_info(&lv, &cd_S5847C8);
    dp->~S5847C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5847C8(Test_S5847C8, "S5847C8", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN7S5847C8C1Ev();
extern void _ZN7S5847C8D1Ev();
Name_Map name_map_S5847C8[] = {
  NSPAIR(_ZN7S5847C8C1Ev),
  NSPAIR(_ZN7S5847C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S5847C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,8), //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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5847C8[];
extern void _ZN7S5847C8D1Ev();
extern void _ZN7S5847C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S5847C8D1Ev,_ZTv0_n12_N7S5847C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S5847C8D1Ev,_ZThn8_N7S5847C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5847C8D0Ev,_ZTv0_n12_N7S5847C8D0Ev)();
extern void ABISELECT(_ZThn16_N7S5847C8D0Ev,_ZThn8_N7S5847C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5847C8[] = {
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5847C8[0]),
  (VTBL_ENTRY)&_ZN7S5847C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5847C8D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5847C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5847C8D1Ev,_ZTv0_n12_N7S5847C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5847C8D0Ev,_ZTv0_n12_N7S5847C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S5847C8[];
static  VTT_ENTRY vtt_S5847C8[] = {
  {&(_ZTV7S5847C8[5]),  5,12},
  {&(_ZTV7S5847C8[10]),  10,12},
};
extern VTBL_ENTRY _ZTI7S5847C8[];
extern  VTBL_ENTRY _ZTV7S5847C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5847C8[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5847C8D0Ev,_ZTv0_n12_N7S5847C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5847C8D0Ev,_ZThn8_N7S5847C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5847C8D1Ev,_ZTv0_n12_N7S5847C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5847C8D1Ev,_ZThn8_N7S5847C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5847C8 = {  "S5847C8", // class name
  bases_S5847C8, 3,
  &(vtc_S5847C8[0]), // expected_vtbl_contents
  &(vtt_S5847C8[0]), // expected_vtt_contents
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI7S5847C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5847C8),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5847C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5847C7  : S5847C8 , virtual S19863C20 {
  ::S19863C9_nt s5847c7f0;
  ~S5847C7(); // tgen
  S5847C7(); // tgen
};
//SIG(-1 S5847C7) C1{ BC2{ VBC3{ vd m FC4{ VBC5{ m} VBC6{ m Fi} vd FD[10]}} VBC5 VBC7{ m} Fp} VBC8{ m FC4[3] Fp} FC6}


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

static void Test_S5847C7()
{
  extern Class_Descriptor cd_S5847C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,134)];
    init_test(&cd_S5847C7, buf);
    S5847C7 *dp, &lv = *(dp=new (buf) S5847C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,532), "sizeof(S5847C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5847C7)");
    check_base_class_offset(lv, (S19863C6*)(S5847C8*), ABISELECT(32,12), "S5847C7");
    check_base_class_offset(lv, (S19863C8*)(S5847C8*), 0, "S5847C7");
    check_base_class_offset(lv, (S19863C10*)(S5847C8*), 0, "S5847C7");
    check_base_class_offset(lv, (S5847C8*), 0, "S5847C7");
    check_base_class_offset(lv, (S19863C20*), ABISELECT(240,144), "S5847C7");
    check_field_offset(lv, s5847c7f0, ABISELECT(16,8), "S5847C7.s5847c7f0");
    test_class_info(&lv, &cd_S5847C7);
    dp->~S5847C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5847C7(Test_S5847C7, "S5847C7", ABISELECT(832,532));

#else // __cplusplus

extern void _ZN7S5847C7C1Ev();
extern void _ZN7S5847C7D1Ev();
Name_Map name_map_S5847C7[] = {
  NSPAIR(_ZN7S5847C7C1Ev),
  NSPAIR(_ZN7S5847C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S5847C8;
extern VTBL_ENTRY _ZTI7S5847C8[];
extern  VTBL_ENTRY _ZTV7S5847C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5847C8[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
static Base_Class bases_S5847C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(32,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5847C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C20,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5847C7[];
extern void _ZN7S5847C7D1Ev();
extern void _ZN7S5847C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S5847C7D1Ev,_ZTv0_n12_N7S5847C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S5847C7D1Ev,_ZThn12_N7S5847C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5847C7D0Ev,_ZTv0_n12_N7S5847C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S5847C7D0Ev,_ZThn12_N7S5847C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5847C7[] = {
  ABISELECT(240,144),
  0,
  0,
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S5847C7[0]),
  (VTBL_ENTRY)&_ZN7S5847C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5847C7D0Ev,
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S5847C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5847C7D1Ev,_ZTv0_n12_N7S5847C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5847C7D0Ev,_ZTv0_n12_N7S5847C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S5847C7[];
extern void _ZN7S5847C8D1Ev();
extern void _ZN7S5847C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5847C8__7S5847C7[] = {
  0,
  0,
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S5847C8[0]),
  (VTBL_ENTRY)&_ZN7S5847C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5847C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5847C8D1Ev,_ZTv0_n12_N7S5847C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S5847C8D1Ev,_ZThn12_N7S5847C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5847C8D0Ev,_ZTv0_n12_N7S5847C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S5847C8D0Ev,_ZThn12_N7S5847C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__7S5847C8__7S5847C7[] = {
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S5847C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5847C8D1Ev,_ZTv0_n12_N7S5847C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5847C8D0Ev,_ZTv0_n12_N7S5847C8D0Ev),
};
static  VTT_ENTRY vtt_S5847C7[] = {
  {&(_ZTV7S5847C7[6]),  6,13},
  {&(_tg__ZTV7S5847C8__7S5847C7[5]),  5,7},
  {&(_tg__ZTV8S19863C6__7S5847C8__7S5847C7[3]),  3,5},
  {&(_ZTV7S5847C7[11]),  11,13},
};
extern VTBL_ENTRY _ZTI7S5847C7[];
extern  VTBL_ENTRY _ZTV7S5847C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5847C7[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5847C8D0Ev,_ZTv0_n12_N7S5847C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S5847C8D0Ev,_ZThn12_N7S5847C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5847C8D1Ev,_ZTv0_n12_N7S5847C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S5847C8D1Ev,_ZThn12_N7S5847C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5847C7D0Ev,_ZTv0_n12_N7S5847C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S5847C7D0Ev,_ZThn12_N7S5847C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5847C7D1Ev,_ZTv0_n12_N7S5847C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S5847C7D1Ev,_ZThn12_N7S5847C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5847C7 = {  "S5847C7", // class name
  bases_S5847C7, 5,
  &(vtc_S5847C7[0]), // expected_vtbl_contents
  &(vtt_S5847C7[0]), // expected_vtt_contents
  ABISELECT(832,532), // object size
  NSPAIRA(_ZTI7S5847C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5847C7),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5847C7),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5847C1  : S19863C9_nt , S5847C3 , virtual S5847C7 , virtual S165C11_nt {
  void *s5847c1f0;
  int s5847c1f1;
  virtual  ~S5847C1(); // _ZN7S5847C1D2Ev
  S5847C1(); // tgen
};
//SIG(1 S5847C1) C1{ BC2{ m Fi} BC3{ VBC4{ VBC5{ m} VBC2 vd FD[10]} BC6{ BC5} vd Fc} VBC7{ BC8{ VBC9{ vd m FC10{ VBC11{ m} VBC2 vd FD[10]}} VBC11 VBC5 Fp} VBC12{ m FC10[3] Fp} FC2} VBC13{ m Fi} vd Fp Fi}


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

static void Test_S5847C1()
{
  extern Class_Descriptor cd_S5847C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(66,172)];
    init_test(&cd_S5847C1, buf);
    S5847C1 *dp, &lv = *(dp=new (buf) S5847C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,684), "sizeof(S5847C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5847C1)");
    /*is_ambiguous_... S5847C1::S19863C9_nt */ AMB_check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(12,8), "S5847C1");
    check_base_class_offset(lv, (S19863C10*)(S5847C4*), ABISELECT(208,144), "S5847C1");
    check_base_class_offset(lv, (S19863C10*)(S5847C8*)(S5847C7*), ABISELECT(208,144), "S5847C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S5847C4*), ABISELECT(208,144), "S5847C1");
    check_base_class_offset(lv, (S5847C4*)(S5847C3*), ABISELECT(32,20), "S5847C1");
    check_base_class_offset(lv, (S19863C10*)(S5847C6*)(S5847C3*), 0, "S5847C1");
    check_base_class_offset(lv, (S5847C6*)(S5847C3*), 0, "S5847C1");
    check_base_class_offset(lv, (S5847C3*), 0, "S5847C1");
    check_base_class_offset(lv, (S19863C6*)(S5847C8*)(S5847C7*), ABISELECT(240,160), "S5847C1");
    check_base_class_offset(lv, (S19863C8*)(S5847C8*)(S5847C7*), 0, "S5847C1");
    check_base_class_offset(lv, (S5847C8*)(S5847C7*), ABISELECT(216,148), "S5847C1");
    check_base_class_offset(lv, (S19863C20*)(S5847C7*), ABISELECT(448,292), "S5847C1");
    check_base_class_offset(lv, (S5847C7*), ABISELECT(216,148), "S5847C1");
    check_base_class_offset(lv, (S165C11_nt*), ABISELECT(1032,680), "S5847C1");
    check_field_offset(lv, s5847c1f0, ABISELECT(16,12), "S5847C1.s5847c1f0");
    check_field_offset(lv, s5847c1f1, ABISELECT(24,16), "S5847C1.s5847c1f1");
    test_class_info(&lv, &cd_S5847C1);
    dp->~S5847C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5847C1(Test_S5847C1, "S5847C1", ABISELECT(1040,684));

#else // __cplusplus

extern void _ZN7S5847C1C1Ev();
extern void _ZN7S5847C1D2Ev();
Name_Map name_map_S5847C1[] = {
  NSPAIR(_ZN7S5847C1C1Ev),
  NSPAIR(_ZN7S5847C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S5847C4;
extern VTBL_ENTRY _ZTI7S5847C4[];
extern  VTBL_ENTRY _ZTV7S5847C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5847C4[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S5847C6;
extern VTBL_ENTRY _ZTI7S5847C6[];
extern Class_Descriptor cd_S5847C3;
extern VTBL_ENTRY _ZTI7S5847C3[];
extern  VTBL_ENTRY _ZTV7S5847C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5847C3[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S5847C8;
extern VTBL_ENTRY _ZTI7S5847C8[];
extern  VTBL_ENTRY _ZTV7S5847C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5847C8[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
extern Class_Descriptor cd_S5847C7;
extern VTBL_ENTRY _ZTI7S5847C7[];
extern  VTBL_ENTRY _ZTV7S5847C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5847C7[];
extern Class_Descriptor cd_S165C11_nt;
extern VTBL_ENTRY _ZTI10S165C11_nt[];
static Base_Class bases_S5847C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C9_nt,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C10,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5847C4,    ABISELECT(32,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5847C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5847C3,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C6,    ABISELECT(240,160), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5847C8,    ABISELECT(216,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19863C20,    ABISELECT(448,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5847C7,    ABISELECT(216,148), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S165C11_nt,    ABISELECT(1032,680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5847C1[];
extern void _ZN7S5847C1D1Ev();
extern void _ZN7S5847C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S5847C1D1Ev,_ZTv0_n20_N7S5847C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S5847C1D1Ev,_ZThn20_N7S5847C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5847C1D0Ev,_ZTv0_n20_N7S5847C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S5847C1D0Ev,_ZThn20_N7S5847C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S5847C1D1Ev,_ZTv0_n28_N7S5847C1D1Ev)();
extern void ABISELECT(_ZThn216_N7S5847C1D1Ev,_ZThn148_N7S5847C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S5847C1D0Ev,_ZTv0_n28_N7S5847C1D0Ev)();
extern void ABISELECT(_ZThn216_N7S5847C1D0Ev,_ZThn148_N7S5847C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5847C1D1Ev,_ZTv0_n12_N7S5847C1D1Ev)();
extern void ABISELECT(_ZThn240_N7S5847C1D1Ev,_ZThn160_N7S5847C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5847C1D0Ev,_ZTv0_n12_N7S5847C1D0Ev)();
extern void ABISELECT(_ZThn240_N7S5847C1D0Ev,_ZThn160_N7S5847C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5847C1[] = {
  ABISELECT(1032,680),
  ABISELECT(448,292),
  0,
  ABISELECT(240,160),
  ABISELECT(216,148),
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S5847C1[0]),
  (VTBL_ENTRY)&_ZN7S5847C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5847C1D0Ev,
  ABISELECT(-32,-20),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S5847C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5847C1D1Ev,_ZTv0_n20_N7S5847C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5847C1D0Ev,_ZTv0_n20_N7S5847C1D0Ev),
  ABISELECT(-216,-148),
  ABISELECT(232,144),
  ABISELECT(-8,-4),
  ABISELECT(-216,-148),
  ABISELECT(24,12),
  ABISELECT(-216,-148),
  (VTBL_ENTRY)&(_ZTI7S5847C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S5847C1D1Ev,_ZTv0_n28_N7S5847C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S5847C1D0Ev,_ZTv0_n28_N7S5847C1D0Ev),
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI7S5847C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5847C1D1Ev,_ZTv0_n12_N7S5847C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5847C1D0Ev,_ZTv0_n12_N7S5847C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S5847C1[];
extern void _ZN7S5847C3D1Ev();
extern void _ZN7S5847C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5847C3__7S5847C1[] = {
  ABISELECT(208,144),
  ABISELECT(208,144),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S5847C3[0]),
  (VTBL_ENTRY)&_ZN7S5847C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5847C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S5847C3D1Ev,_ZTv0_n20_N7S5847C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S5847C3D1Ev,_ZThn20_N7S5847C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5847C3D0Ev,_ZTv0_n20_N7S5847C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S5847C3D0Ev,_ZThn20_N7S5847C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5847C4__7S5847C3__7S5847C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(176,124),
  ABISELECT(176,124),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S5847C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5847C3D1Ev,_ZTv0_n20_N7S5847C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5847C3D0Ev,_ZTv0_n20_N7S5847C3D0Ev),
};
extern void _ZN7S5847C4D1Ev();
extern void _ZN7S5847C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5847C4__7S5847C1[] = {
  ABISELECT(176,124),
  ABISELECT(176,124),
  0,
  (VTBL_ENTRY)&(_ZTI7S5847C4[0]),
  (VTBL_ENTRY)&_ZN7S5847C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5847C4D0Ev,
};
extern void _ZN7S5847C7D1Ev();
extern void _ZN7S5847C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5847C7__7S5847C1[] = {
  ABISELECT(232,144),
  ABISELECT(-8,-4),
  ABISELECT(-216,-148),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S5847C7[0]),
  (VTBL_ENTRY)&_ZN7S5847C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5847C7D0Ev,
};
extern void _ZN7S5847C8D1Ev();
extern void _ZN7S5847C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5847C87S5847C7__7S5847C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-216,-148),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S5847C8[0]),
  (VTBL_ENTRY)&_ZN7S5847C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5847C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5847C8D1Ev,_ZTv0_n12_N7S5847C8D1Ev)();
extern void ABISELECT(_ZThn24_N7S5847C8D1Ev,_ZThn12_N7S5847C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5847C8D0Ev,_ZTv0_n12_N7S5847C8D0Ev)();
extern void ABISELECT(_ZThn24_N7S5847C8D0Ev,_ZThn12_N7S5847C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__7S5847C87S5847C7__7S5847C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S5847C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5847C8D1Ev,_ZTv0_n12_N7S5847C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5847C8D0Ev,_ZTv0_n12_N7S5847C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S5847C7D1Ev,_ZTv0_n12_N7S5847C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S5847C7D1Ev,_ZThn12_N7S5847C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5847C7D0Ev,_ZTv0_n12_N7S5847C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S5847C7D0Ev,_ZThn12_N7S5847C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__7S5847C7__7S5847C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S5847C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5847C7D1Ev,_ZTv0_n12_N7S5847C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5847C7D0Ev,_ZTv0_n12_N7S5847C7D0Ev),
};
static  VTT_ENTRY vtt_S5847C1[] = {
  {&(_ZTV7S5847C1[10]),  10,33},
  {&(_tg__ZTV7S5847C3__7S5847C1[5]),  5,7},
  {&(_tg__ZTV7S5847C4__7S5847C3__7S5847C1[5]),  5,7},
  {&(_ZTV7S5847C1[17]),  17,33},
  {&(_ZTV7S5847C1[26]),  26,33},
  {&(_ZTV7S5847C1[31]),  31,33},
  {&(_tg__ZTV7S5847C4__7S5847C1[4]),  4,6},
  {&(_tg__ZTV7S5847C7__7S5847C1[6]),  6,8},
  {&(_tg__ZTV7S5847C87S5847C7__7S5847C1[5]),  5,7},
  {&(_tg__ZTV8S19863C6__7S5847C87S5847C7__7S5847C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__7S5847C7__7S5847C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S5847C1[];
extern  VTBL_ENTRY _ZTV7S5847C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5847C1[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5847C7D0Ev,_ZTv0_n12_N7S5847C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S5847C7D0Ev,_ZThn12_N7S5847C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5847C7D1Ev,_ZTv0_n12_N7S5847C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S5847C7D1Ev,_ZThn12_N7S5847C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5847C8D0Ev,_ZTv0_n12_N7S5847C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S5847C8D0Ev,_ZThn12_N7S5847C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5847C8D1Ev,_ZTv0_n12_N7S5847C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S5847C8D1Ev,_ZThn12_N7S5847C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5847C3D0Ev,_ZTv0_n20_N7S5847C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S5847C3D0Ev,_ZThn20_N7S5847C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5847C3D1Ev,_ZTv0_n20_N7S5847C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S5847C3D1Ev,_ZThn20_N7S5847C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5847C1D0Ev,_ZTv0_n12_N7S5847C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S5847C1D0Ev,_ZThn160_N7S5847C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5847C1D1Ev,_ZTv0_n12_N7S5847C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S5847C1D1Ev,_ZThn160_N7S5847C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S5847C1D0Ev,_ZTv0_n28_N7S5847C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S5847C1D0Ev,_ZThn148_N7S5847C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S5847C1D1Ev,_ZTv0_n28_N7S5847C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S5847C1D1Ev,_ZThn148_N7S5847C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5847C1D0Ev,_ZTv0_n20_N7S5847C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S5847C1D0Ev,_ZThn20_N7S5847C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5847C1D1Ev,_ZTv0_n20_N7S5847C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S5847C1D1Ev,_ZThn20_N7S5847C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5847C1 = {  "S5847C1", // class name
  bases_S5847C1, 13,
  &(vtc_S5847C1[0]), // expected_vtbl_contents
  &(vtt_S5847C1[0]), // expected_vtt_contents
  ABISELECT(1040,684), // object size
  NSPAIRA(_ZTI7S5847C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5847C1),33, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5847C1),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5830C8  : S19863C12_nt {
  virtual void  v2(); // _ZN7S5830C82v2Ev
  ~S5830C8(); // tgen
  S5830C8(); // tgen
};
//SIG(-1 S5830C8) C1{ BC2{ m Fs} v1}


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

static void Test_S5830C8()
{
  extern Class_Descriptor cd_S5830C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S5830C8, buf);
    S5830C8 *dp, &lv = *(dp=new (buf) S5830C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S5830C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5830C8)");
    check_base_class_offset(lv, (S19863C12_nt*), ABISELECT(8,4), "S5830C8");
    test_class_info(&lv, &cd_S5830C8);
    dp->~S5830C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5830C8(Test_S5830C8, "S5830C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S5830C8C1Ev();
extern void _ZN7S5830C8D1Ev();
Name_Map name_map_S5830C8[] = {
  NSPAIR(_ZN7S5830C8C1Ev),
  NSPAIR(_ZN7S5830C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
static Base_Class bases_S5830C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C12_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 _ZTI7S5830C8[];
extern void _ZN7S5830C82v2Ev();
static  VTBL_ENTRY vtc_S5830C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5830C8[0]),
  (VTBL_ENTRY)&_ZN7S5830C82v2Ev,
};
extern VTBL_ENTRY _ZTI7S5830C8[];
extern  VTBL_ENTRY _ZTV7S5830C8[];
Class_Descriptor cd_S5830C8 = {  "S5830C8", // class name
  bases_S5830C8, 1,
  &(vtc_S5830C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S5830C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5830C8),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  S5830C11  : virtual S19863C6 , virtual S19863C10 , virtual S19863C8 {
  void *s5830c11f0;
  ~S5830C11(); // tgen
  S5830C11(); // tgen
};
//SIG(-1 S5830C11) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} VBC6{ m} VBC4 Fp}


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

static void Test_S5830C11()
{
  extern Class_Descriptor cd_S5830C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,36)];
    init_test(&cd_S5830C11, buf);
    S5830C11 *dp, &lv = *(dp=new (buf) S5830C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S5830C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5830C11)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,8), "S5830C11");
    check_base_class_offset(lv, (S19863C10*), 0, "S5830C11");
    check_base_class_offset(lv, (S19863C8*), 0, "S5830C11");
    check_field_offset(lv, s5830c11f0, ABISELECT(8,4), "S5830C11.s5830c11f0");
    test_class_info(&lv, &cd_S5830C11);
    dp->~S5830C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5830C11(Test_S5830C11, "S5830C11", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN8S5830C11C1Ev();
extern void _ZN8S5830C11D1Ev();
Name_Map name_map_S5830C11[] = {
  NSPAIR(_ZN8S5830C11C1Ev),
  NSPAIR(_ZN8S5830C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
static Base_Class bases_S5830C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,8), //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_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S5830C11[];
extern void _ZN8S5830C11D1Ev();
extern void _ZN8S5830C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S5830C11D1Ev,_ZTv0_n12_N8S5830C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S5830C11D1Ev,_ZThn8_N8S5830C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5830C11D0Ev,_ZTv0_n12_N8S5830C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S5830C11D0Ev,_ZThn8_N8S5830C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5830C11[] = {
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S5830C11[0]),
  (VTBL_ENTRY)&_ZN8S5830C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5830C11D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S5830C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C11D1Ev,_ZTv0_n12_N8S5830C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C11D0Ev,_ZTv0_n12_N8S5830C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S5830C11[];
static  VTT_ENTRY vtt_S5830C11[] = {
  {&(_ZTV8S5830C11[5]),  5,12},
  {&(_ZTV8S5830C11[10]),  10,12},
};
extern VTBL_ENTRY _ZTI8S5830C11[];
extern  VTBL_ENTRY _ZTV8S5830C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5830C11[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C11D0Ev,_ZTv0_n12_N8S5830C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S5830C11D0Ev,_ZThn8_N8S5830C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C11D1Ev,_ZTv0_n12_N8S5830C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S5830C11D1Ev,_ZThn8_N8S5830C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5830C11 = {  "S5830C11", // class name
  bases_S5830C11, 3,
  &(vtc_S5830C11[0]), // expected_vtbl_contents
  &(vtt_S5830C11[0]), // expected_vtt_contents
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI8S5830C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S5830C11),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5830C11),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5830C10  : S5830C11 , virtual S19863C20 {
  ::S165C11_nt s5830c10f0;
  ~S5830C10(); // tgen
  S5830C10(); // tgen
};
//SIG(-1 S5830C10) C1{ BC2{ VBC3{ vd m FC4{ VBC5{ m} VBC6{ m Fi} vd FD[10]}} VBC7{ m} VBC5 Fp} VBC8{ m FC4[3] Fp} FC9{ m Fi}}


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

static void Test_S5830C10()
{
  extern Class_Descriptor cd_S5830C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,134)];
    init_test(&cd_S5830C10, buf);
    S5830C10 *dp, &lv = *(dp=new (buf) S5830C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,532), "sizeof(S5830C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5830C10)");
    check_base_class_offset(lv, (S19863C6*)(S5830C11*), ABISELECT(32,12), "S5830C10");
    check_base_class_offset(lv, (S19863C10*)(S5830C11*), 0, "S5830C10");
    check_base_class_offset(lv, (S19863C8*)(S5830C11*), 0, "S5830C10");
    check_base_class_offset(lv, (S5830C11*), 0, "S5830C10");
    check_base_class_offset(lv, (S19863C20*), ABISELECT(240,144), "S5830C10");
    check_field_offset(lv, s5830c10f0, ABISELECT(16,8), "S5830C10.s5830c10f0");
    test_class_info(&lv, &cd_S5830C10);
    dp->~S5830C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5830C10(Test_S5830C10, "S5830C10", ABISELECT(832,532));

#else // __cplusplus

extern void _ZN8S5830C10C1Ev();
extern void _ZN8S5830C10D1Ev();
Name_Map name_map_S5830C10[] = {
  NSPAIR(_ZN8S5830C10C1Ev),
  NSPAIR(_ZN8S5830C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S5830C11;
extern VTBL_ENTRY _ZTI8S5830C11[];
extern  VTBL_ENTRY _ZTV8S5830C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5830C11[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
static Base_Class bases_S5830C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(32,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5830C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C20,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S5830C10[];
extern void _ZN8S5830C10D1Ev();
extern void _ZN8S5830C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S5830C10D1Ev,_ZTv0_n12_N8S5830C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S5830C10D1Ev,_ZThn12_N8S5830C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5830C10D0Ev,_ZTv0_n12_N8S5830C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S5830C10D0Ev,_ZThn12_N8S5830C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5830C10[] = {
  ABISELECT(240,144),
  0,
  0,
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S5830C10[0]),
  (VTBL_ENTRY)&_ZN8S5830C10D1Ev,
  (VTBL_ENTRY)&_ZN8S5830C10D0Ev,
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S5830C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C10D1Ev,_ZTv0_n12_N8S5830C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C10D0Ev,_ZTv0_n12_N8S5830C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S5830C10[];
extern void _ZN8S5830C11D1Ev();
extern void _ZN8S5830C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5830C11__8S5830C10[] = {
  0,
  0,
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S5830C11[0]),
  (VTBL_ENTRY)&_ZN8S5830C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5830C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S5830C11D1Ev,_ZTv0_n12_N8S5830C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S5830C11D1Ev,_ZThn12_N8S5830C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5830C11D0Ev,_ZTv0_n12_N8S5830C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S5830C11D0Ev,_ZThn12_N8S5830C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S5830C11__8S5830C10[] = {
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S5830C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C11D1Ev,_ZTv0_n12_N8S5830C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C11D0Ev,_ZTv0_n12_N8S5830C11D0Ev),
};
static  VTT_ENTRY vtt_S5830C10[] = {
  {&(_ZTV8S5830C10[6]),  6,13},
  {&(_tg__ZTV8S5830C11__8S5830C10[5]),  5,7},
  {&(_tg__ZTV8S19863C6__8S5830C11__8S5830C10[3]),  3,5},
  {&(_ZTV8S5830C10[11]),  11,13},
};
extern VTBL_ENTRY _ZTI8S5830C10[];
extern  VTBL_ENTRY _ZTV8S5830C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5830C10[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C11D0Ev,_ZTv0_n12_N8S5830C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S5830C11D0Ev,_ZThn12_N8S5830C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C11D1Ev,_ZTv0_n12_N8S5830C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S5830C11D1Ev,_ZThn12_N8S5830C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C10D0Ev,_ZTv0_n12_N8S5830C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S5830C10D0Ev,_ZThn12_N8S5830C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C10D1Ev,_ZTv0_n12_N8S5830C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S5830C10D1Ev,_ZThn12_N8S5830C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5830C10 = {  "S5830C10", // class name
  bases_S5830C10, 5,
  &(vtc_S5830C10[0]), // expected_vtbl_contents
  &(vtt_S5830C10[0]), // expected_vtt_contents
  ABISELECT(832,532), // object size
  NSPAIRA(_ZTI8S5830C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S5830C10),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5830C10),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5830C5  : virtual S19863C8 , virtual S165C11_nt {
  long double s5830c5f0[10];
  virtual  ~S5830C5(); // _ZN7S5830C5D2Ev
  S5830C5(); // tgen
};
//SIG(-1 S5830C5) C1{ VBC2{ m} VBC3{ m Fi} vd FD[10]}


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

static void Test_S5830C5()
{
  extern Class_Descriptor cd_S5830C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S5830C5, buf);
    S5830C5 *dp, &lv = *(dp=new (buf) S5830C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S5830C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5830C5)");
    check_base_class_offset(lv, (S19863C8*), 0, "S5830C5");
    check_base_class_offset(lv, (S165C11_nt*), ABISELECT(176,124), "S5830C5");
    check_field_offset(lv, s5830c5f0, ABISELECT(16,4), "S5830C5.s5830c5f0");
    test_class_info(&lv, &cd_S5830C5);
    dp->~S5830C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5830C5(Test_S5830C5, "S5830C5", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN7S5830C5C1Ev();
extern void _ZN7S5830C5D2Ev();
Name_Map name_map_S5830C5[] = {
  NSPAIR(_ZN7S5830C5C1Ev),
  NSPAIR(_ZN7S5830C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S165C11_nt;
extern VTBL_ENTRY _ZTI10S165C11_nt[];
static Base_Class bases_S5830C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S165C11_nt,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5830C5[];
extern void _ZN7S5830C5D1Ev();
extern void _ZN7S5830C5D0Ev();
static  VTBL_ENTRY vtc_S5830C5[] = {
  ABISELECT(176,124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5830C5[0]),
  (VTBL_ENTRY)&_ZN7S5830C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5830C5D0Ev,
};
extern VTBL_ENTRY _ZTV7S5830C5[];
static  VTT_ENTRY vtt_S5830C5[] = {
  {&(_ZTV7S5830C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5830C5[];
extern  VTBL_ENTRY _ZTV7S5830C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5830C5[];
Class_Descriptor cd_S5830C5 = {  "S5830C5", // class name
  bases_S5830C5, 2,
  &(vtc_S5830C5[0]), // expected_vtbl_contents
  &(vtt_S5830C5[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI7S5830C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5830C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5830C5),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  S5830C3  : S19863C6 , virtual S5830C8 , S5830C10 , virtual S5830C5 {
  virtual  ~S5830C3(); // _ZN7S5830C3D2Ev
  S5830C3(); // tgen
};
//SIG(-1 S5830C3) C1{ BC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} VBC6{ BC7{ m Fs} v1} BC8{ BC9{ VBC2 VBC10{ m} VBC4 Fp} VBC11{ m FC3[3] Fp} FC12{ m Fi}} VBC13{ VBC4 VBC12 vd FD[10]} vd}


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

static void Test_S5830C3()
{
  extern Class_Descriptor cd_S5830C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(79,201)];
    init_test(&cd_S5830C3, buf);
    S5830C3 *dp, &lv = *(dp=new (buf) S5830C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1248,800), "sizeof(S5830C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5830C3)");
    /*is_ambiguous_... S5830C3::S19863C6 */ AMB_check_base_class_offset(lv, (S19863C6*), 0, "S5830C3");
    check_base_class_offset(lv, (S19863C12_nt*)(S5830C8*), ABISELECT(240,148), "S5830C3");
    check_base_class_offset(lv, (S5830C8*), ABISELECT(232,144), "S5830C3");
    check_base_class_offset(lv, (S19863C6*)(S5830C11*)(S5830C10*), ABISELECT(256,152), "S5830C3");
    check_base_class_offset(lv, (S19863C10*)(S5830C11*)(S5830C10*), 0, "S5830C3");
    check_base_class_offset(lv, (S19863C8*)(S5830C11*)(S5830C10*), 0, "S5830C3");
    check_base_class_offset(lv, (S19863C8*)(S5830C5*), 0, "S5830C3");
    check_base_class_offset(lv, (S5830C11*)(S5830C10*), ABISELECT(208,132), "S5830C3");
    check_base_class_offset(lv, (S19863C20*)(S5830C10*), ABISELECT(464,284), "S5830C3");
    check_base_class_offset(lv, (S5830C10*), ABISELECT(208,132), "S5830C3");
    check_base_class_offset(lv, (S165C11_nt*)(S5830C5*), ABISELECT(1232,796), "S5830C3");
    check_base_class_offset(lv, (S5830C5*), ABISELECT(1056,672), "S5830C3");
    test_class_info(&lv, &cd_S5830C3);
    dp->~S5830C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5830C3(Test_S5830C3, "S5830C3", ABISELECT(1248,800));

#else // __cplusplus

extern void _ZN7S5830C3C1Ev();
extern void _ZN7S5830C3D2Ev();
Name_Map name_map_S5830C3[] = {
  NSPAIR(_ZN7S5830C3C1Ev),
  NSPAIR(_ZN7S5830C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S5830C8;
extern VTBL_ENTRY _ZTI7S5830C8[];
extern  VTBL_ENTRY _ZTV7S5830C8[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S5830C11;
extern VTBL_ENTRY _ZTI8S5830C11[];
extern  VTBL_ENTRY _ZTV8S5830C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5830C11[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
extern Class_Descriptor cd_S5830C10;
extern VTBL_ENTRY _ZTI8S5830C10[];
extern  VTBL_ENTRY _ZTV8S5830C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5830C10[];
extern Class_Descriptor cd_S165C11_nt;
extern VTBL_ENTRY _ZTI10S165C11_nt[];
extern Class_Descriptor cd_S5830C5;
extern VTBL_ENTRY _ZTI7S5830C5[];
extern  VTBL_ENTRY _ZTV7S5830C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5830C5[];
static Base_Class bases_S5830C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19863C12_nt,    ABISELECT(240,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5830C8,    ABISELECT(232,144), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19863C6,    ABISELECT(256,152), //bcp->offset
    23, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5830C11,    ABISELECT(208,132), //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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19863C20,    ABISELECT(464,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S5830C10,    ABISELECT(208,132), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S165C11_nt,    ABISELECT(1232,796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S5830C5,    ABISELECT(1056,672), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5830C3[];
extern void _ZN7S5830C3D1Ev();
extern void _ZN7S5830C3D0Ev();
extern void ABISELECT(_ZThn208_N7S5830C3D1Ev,_ZThn132_N7S5830C3D1Ev)();
extern void ABISELECT(_ZThn208_N7S5830C3D0Ev,_ZThn132_N7S5830C3D0Ev)();
extern void _ZN7S5830C82v2Ev();
extern void ABISELECT(_ZTv0_n24_N7S5830C3D1Ev,_ZTv0_n12_N7S5830C3D1Ev)();
extern void ABISELECT(_ZThn256_N7S5830C3D1Ev,_ZThn152_N7S5830C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5830C3D0Ev,_ZTv0_n12_N7S5830C3D0Ev)();
extern void ABISELECT(_ZThn256_N7S5830C3D0Ev,_ZThn152_N7S5830C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5830C3D1Ev,_ZTv0_n20_N7S5830C3D1Ev)();
extern void ABISELECT(_ZThn1056_N7S5830C3D1Ev,_ZThn672_N7S5830C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5830C3D0Ev,_ZTv0_n20_N7S5830C3D0Ev)();
extern void ABISELECT(_ZThn1056_N7S5830C3D0Ev,_ZThn672_N7S5830C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5830C3[] = {
  ABISELECT(1232,796),
  ABISELECT(1056,672),
  ABISELECT(464,284),
  0,
  0,
  ABISELECT(256,152),
  ABISELECT(232,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S5830C3[0]),
  (VTBL_ENTRY)&_ZN7S5830C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5830C3D0Ev,
  ABISELECT(256,152),
  ABISELECT(-208,-132),
  ABISELECT(-208,-132),
  ABISELECT(48,20),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S5830C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N7S5830C3D1Ev,_ZThn132_N7S5830C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N7S5830C3D0Ev,_ZThn132_N7S5830C3D0Ev),
  0,
  ABISELECT(-232,-144),
  (VTBL_ENTRY)&(_ZTI7S5830C3[0]),
  (VTBL_ENTRY)&_ZN7S5830C82v2Ev,
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S5830C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5830C3D1Ev,_ZTv0_n12_N7S5830C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5830C3D0Ev,_ZTv0_n12_N7S5830C3D0Ev),
  ABISELECT(-1056,-672),
  ABISELECT(176,124),
  ABISELECT(-1056,-672),
  ABISELECT(-1056,-672),
  (VTBL_ENTRY)&(_ZTI7S5830C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5830C3D1Ev,_ZTv0_n20_N7S5830C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5830C3D0Ev,_ZTv0_n20_N7S5830C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S5830C3[];
extern void _ZN8S5830C10D1Ev();
extern void _ZN8S5830C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5830C10__7S5830C3[] = {
  ABISELECT(256,152),
  ABISELECT(-208,-132),
  ABISELECT(-208,-132),
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S5830C10[0]),
  (VTBL_ENTRY)&_ZN8S5830C10D1Ev,
  (VTBL_ENTRY)&_ZN8S5830C10D0Ev,
};
extern void _ZN8S5830C11D1Ev();
extern void _ZN8S5830C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5830C118S5830C10__7S5830C3[] = {
  ABISELECT(-208,-132),
  ABISELECT(-208,-132),
  ABISELECT(48,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S5830C11[0]),
  (VTBL_ENTRY)&_ZN8S5830C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5830C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S5830C11D1Ev,_ZTv0_n12_N8S5830C11D1Ev)();
extern void ABISELECT(_ZThn48_N8S5830C11D1Ev,_ZThn20_N8S5830C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5830C11D0Ev,_ZTv0_n12_N8S5830C11D0Ev)();
extern void ABISELECT(_ZThn48_N8S5830C11D0Ev,_ZThn20_N8S5830C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S5830C118S5830C10__7S5830C3[] = {
  ABISELECT(-48,-20),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S5830C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C11D1Ev,_ZTv0_n12_N8S5830C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C11D0Ev,_ZTv0_n12_N8S5830C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S5830C10D1Ev,_ZTv0_n12_N8S5830C10D1Ev)();
extern void ABISELECT(_ZThn48_N8S5830C10D1Ev,_ZThn20_N8S5830C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5830C10D0Ev,_ZTv0_n12_N8S5830C10D0Ev)();
extern void ABISELECT(_ZThn48_N8S5830C10D0Ev,_ZThn20_N8S5830C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S5830C10__7S5830C3[] = {
  ABISELECT(-48,-20),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S5830C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C10D1Ev,_ZTv0_n12_N8S5830C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C10D0Ev,_ZTv0_n12_N8S5830C10D0Ev),
};
extern void _ZN7S5830C5D1Ev();
extern void _ZN7S5830C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5830C5__7S5830C3[] = {
  ABISELECT(176,124),
  ABISELECT(-1056,-672),
  0,
  (VTBL_ENTRY)&(_ZTI7S5830C5[0]),
  (VTBL_ENTRY)&_ZN7S5830C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5830C5D0Ev,
};
static  VTT_ENTRY vtt_S5830C3[] = {
  {&(_ZTV7S5830C3[9]),  9,35},
  {&(_tg__ZTV8S5830C10__7S5830C3[6]),  6,8},
  {&(_tg__ZTV8S5830C118S5830C10__7S5830C3[5]),  5,7},
  {&(_tg__ZTV8S19863C6__8S5830C118S5830C10__7S5830C3[3]),  3,5},
  {&(_tg__ZTV8S19863C6__8S5830C10__7S5830C3[3]),  3,5},
  {&(_ZTV7S5830C3[22]),  22,35},
  {&(_ZTV7S5830C3[17]),  17,35},
  {&(_ZTV7S5830C3[26]),  26,35},
  {&(_ZTV7S5830C3[33]),  33,35},
  {&(_tg__ZTV7S5830C5__7S5830C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5830C3[];
extern  VTBL_ENTRY _ZTV7S5830C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5830C3[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C10D0Ev,_ZTv0_n12_N8S5830C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S5830C10D0Ev,_ZThn20_N8S5830C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C10D1Ev,_ZTv0_n12_N8S5830C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S5830C10D1Ev,_ZThn20_N8S5830C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C11D0Ev,_ZTv0_n12_N8S5830C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S5830C11D0Ev,_ZThn20_N8S5830C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C11D1Ev,_ZTv0_n12_N8S5830C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S5830C11D1Ev,_ZThn20_N8S5830C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5830C3D0Ev,_ZTv0_n20_N7S5830C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N7S5830C3D0Ev,_ZThn672_N7S5830C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5830C3D1Ev,_ZTv0_n20_N7S5830C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N7S5830C3D1Ev,_ZThn672_N7S5830C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5830C3D0Ev,_ZTv0_n12_N7S5830C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S5830C3D0Ev,_ZThn152_N7S5830C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5830C3D1Ev,_ZTv0_n12_N7S5830C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S5830C3D1Ev,_ZThn152_N7S5830C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5830C3 = {  "S5830C3", // class name
  bases_S5830C3, 11,
  &(vtc_S5830C3[0]), // expected_vtbl_contents
  &(vtt_S5830C3[0]), // expected_vtt_contents
  ABISELECT(1248,800), // object size
  NSPAIRA(_ZTI7S5830C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5830C3),35, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5830C3),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5830C1  : S19863C9_nt , S5830C3 {
  virtual void  v1(); // _ZN7S5830C12v1Ev
  ~S5830C1(); // tgen
  S5830C1(); // tgen
};
//SIG(1 S5830C1) C1{ BC2{ m Fi} BC3{ BC4{ vd m FC5{ VBC6{ m} VBC2 vd FD[10]}} VBC7{ BC8{ m Fs} v2} BC9{ BC10{ VBC4 VBC11{ m} VBC6 Fp} VBC12{ m FC5[3] Fp} FC13{ m Fi}} VBC14{ VBC6 VBC13 vd FD[10]} vd} v1}


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

static void Test_S5830C1()
{
  extern Class_Descriptor cd_S5830C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(79,202)];
    init_test(&cd_S5830C1, buf);
    S5830C1 *dp, &lv = *(dp=new (buf) S5830C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1248,804), "sizeof(S5830C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5830C1)");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(228,144), "S5830C1");
    /*is_ambiguous_... S5830C3::S19863C6 */ AMB_check_base_class_offset(lv, (S19863C6*)(S5830C3*), 0, "S5830C1");
    check_base_class_offset(lv, (S19863C12_nt*)(S5830C8*), ABISELECT(240,152), "S5830C1");
    check_base_class_offset(lv, (S5830C8*)(S5830C3*), ABISELECT(232,148), "S5830C1");
    check_base_class_offset(lv, (S19863C6*)(S5830C11*)(S5830C10*)(S5830C3*), ABISELECT(256,156), "S5830C1");
    check_base_class_offset(lv, (S19863C10*)(S5830C11*)(S5830C10*)(S5830C3*), 0, "S5830C1");
    check_base_class_offset(lv, (S19863C8*)(S5830C11*)(S5830C10*)(S5830C3*), 0, "S5830C1");
    check_base_class_offset(lv, (S19863C8*)(S5830C5*), 0, "S5830C1");
    check_base_class_offset(lv, (S5830C11*)(S5830C10*)(S5830C3*), ABISELECT(208,132), "S5830C1");
    check_base_class_offset(lv, (S19863C20*)(S5830C10*)(S5830C3*), ABISELECT(464,288), "S5830C1");
    check_base_class_offset(lv, (S5830C10*)(S5830C3*), ABISELECT(208,132), "S5830C1");
    check_base_class_offset(lv, (S165C11_nt*)(S5830C5*), ABISELECT(1232,800), "S5830C1");
    check_base_class_offset(lv, (S5830C5*)(S5830C3*), ABISELECT(1056,676), "S5830C1");
    check_base_class_offset(lv, (S5830C3*), 0, "S5830C1");
    test_class_info(&lv, &cd_S5830C1);
    dp->~S5830C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5830C1(Test_S5830C1, "S5830C1", ABISELECT(1248,804));

#else // __cplusplus

extern void _ZN7S5830C1C1Ev();
extern void _ZN7S5830C1D1Ev();
Name_Map name_map_S5830C1[] = {
  NSPAIR(_ZN7S5830C1C1Ev),
  NSPAIR(_ZN7S5830C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C12_nt;
extern VTBL_ENTRY _ZTI12S19863C12_nt[];
extern Class_Descriptor cd_S5830C8;
extern VTBL_ENTRY _ZTI7S5830C8[];
extern  VTBL_ENTRY _ZTV7S5830C8[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S5830C11;
extern VTBL_ENTRY _ZTI8S5830C11[];
extern  VTBL_ENTRY _ZTV8S5830C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5830C11[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
extern Class_Descriptor cd_S5830C10;
extern VTBL_ENTRY _ZTI8S5830C10[];
extern  VTBL_ENTRY _ZTV8S5830C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5830C10[];
extern Class_Descriptor cd_S165C11_nt;
extern VTBL_ENTRY _ZTI10S165C11_nt[];
extern Class_Descriptor cd_S5830C5;
extern VTBL_ENTRY _ZTI7S5830C5[];
extern  VTBL_ENTRY _ZTV7S5830C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5830C5[];
extern Class_Descriptor cd_S5830C3;
extern VTBL_ENTRY _ZTI7S5830C3[];
extern  VTBL_ENTRY _ZTV7S5830C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5830C3[];
static Base_Class bases_S5830C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C9_nt,    ABISELECT(228,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S19863C12_nt,    ABISELECT(240,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
    3, //immediately_derived
  0, 0},
  {&cd_S5830C8,    ABISELECT(232,148), //bcp->offset
    20, //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
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19863C6,    ABISELECT(256,156), //bcp->offset
    24, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S5830C11,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19863C20,    ABISELECT(464,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5830C10,    ABISELECT(208,132), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S165C11_nt,    ABISELECT(1232,800), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5830C5,    ABISELECT(1056,676), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S5830C3,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5830C1[];
extern void _ZN7S5830C1D1Ev();
extern void _ZN7S5830C1D0Ev();
extern void _ZN7S5830C12v1Ev();
extern void ABISELECT(_ZThn208_N7S5830C1D1Ev,_ZThn132_N7S5830C1D1Ev)();
extern void ABISELECT(_ZThn208_N7S5830C1D0Ev,_ZThn132_N7S5830C1D0Ev)();
extern void _ZN7S5830C82v2Ev();
extern void ABISELECT(_ZTv0_n24_N7S5830C1D1Ev,_ZTv0_n12_N7S5830C1D1Ev)();
extern void ABISELECT(_ZThn256_N7S5830C1D1Ev,_ZThn156_N7S5830C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5830C1D0Ev,_ZTv0_n12_N7S5830C1D0Ev)();
extern void ABISELECT(_ZThn256_N7S5830C1D0Ev,_ZThn156_N7S5830C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5830C1D1Ev,_ZTv0_n20_N7S5830C1D1Ev)();
extern void ABISELECT(_ZThn1056_N7S5830C1D1Ev,_ZThn676_N7S5830C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5830C1D0Ev,_ZTv0_n20_N7S5830C1D0Ev)();
extern void ABISELECT(_ZThn1056_N7S5830C1D0Ev,_ZThn676_N7S5830C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5830C1[] = {
  ABISELECT(1232,800),
  ABISELECT(1056,676),
  ABISELECT(464,288),
  0,
  0,
  ABISELECT(256,156),
  ABISELECT(232,148),
  0,
  (VTBL_ENTRY)&(_ZTI7S5830C1[0]),
  (VTBL_ENTRY)&_ZN7S5830C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5830C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5830C12v1Ev,
  ABISELECT(256,156),
  ABISELECT(-208,-132),
  ABISELECT(-208,-132),
  ABISELECT(48,24),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S5830C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N7S5830C1D1Ev,_ZThn132_N7S5830C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N7S5830C1D0Ev,_ZThn132_N7S5830C1D0Ev),
  0,
  ABISELECT(-232,-148),
  (VTBL_ENTRY)&(_ZTI7S5830C1[0]),
  (VTBL_ENTRY)&_ZN7S5830C82v2Ev,
  ABISELECT(-256,-156),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI7S5830C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5830C1D1Ev,_ZTv0_n12_N7S5830C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5830C1D0Ev,_ZTv0_n12_N7S5830C1D0Ev),
  ABISELECT(-1056,-676),
  ABISELECT(176,124),
  ABISELECT(-1056,-676),
  ABISELECT(-1056,-676),
  (VTBL_ENTRY)&(_ZTI7S5830C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5830C1D1Ev,_ZTv0_n20_N7S5830C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5830C1D0Ev,_ZTv0_n20_N7S5830C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S5830C1[];
extern void _ZN7S5830C3D1Ev();
extern void _ZN7S5830C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5830C3__7S5830C1[] = {
  ABISELECT(1232,800),
  ABISELECT(1056,676),
  ABISELECT(464,288),
  0,
  0,
  ABISELECT(256,156),
  ABISELECT(232,148),
  0,
  (VTBL_ENTRY)&(_ZTI7S5830C3[0]),
  (VTBL_ENTRY)&_ZN7S5830C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5830C3D0Ev,
};
extern void _ZN8S5830C10D1Ev();
extern void _ZN8S5830C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5830C107S5830C3__7S5830C1[] = {
  ABISELECT(256,156),
  ABISELECT(-208,-132),
  ABISELECT(-208,-132),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S5830C10[0]),
  (VTBL_ENTRY)&_ZN8S5830C10D1Ev,
  (VTBL_ENTRY)&_ZN8S5830C10D0Ev,
};
extern void _ZN8S5830C11D1Ev();
extern void _ZN8S5830C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5830C118S5830C107S5830C3__7S5830C1[] = {
  ABISELECT(-208,-132),
  ABISELECT(-208,-132),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S5830C11[0]),
  (VTBL_ENTRY)&_ZN8S5830C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5830C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S5830C11D1Ev,_ZTv0_n12_N8S5830C11D1Ev)();
extern void ABISELECT(_ZThn48_N8S5830C11D1Ev,_ZThn24_N8S5830C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5830C11D0Ev,_ZTv0_n12_N8S5830C11D0Ev)();
extern void ABISELECT(_ZThn48_N8S5830C11D0Ev,_ZThn24_N8S5830C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S5830C118S5830C107S5830C3__7S5830C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S5830C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C11D1Ev,_ZTv0_n12_N8S5830C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C11D0Ev,_ZTv0_n12_N8S5830C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S5830C10D1Ev,_ZTv0_n12_N8S5830C10D1Ev)();
extern void ABISELECT(_ZThn48_N8S5830C10D1Ev,_ZThn24_N8S5830C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5830C10D0Ev,_ZTv0_n12_N8S5830C10D0Ev)();
extern void ABISELECT(_ZThn48_N8S5830C10D0Ev,_ZThn24_N8S5830C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S5830C107S5830C3__7S5830C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S5830C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C10D1Ev,_ZTv0_n12_N8S5830C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5830C10D0Ev,_ZTv0_n12_N8S5830C10D0Ev),
};
extern void _ZN7S5830C82v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5830C8__7S5830C3__7S5830C1[] = {
  0,
  ABISELECT(-232,-148),
  (VTBL_ENTRY)&(_ZTI7S5830C3[0]),
  (VTBL_ENTRY)&_ZN7S5830C82v2Ev,
};
extern void ABISELECT(_ZThn208_N7S5830C3D1Ev,_ZThn132_N7S5830C3D1Ev)();
extern void ABISELECT(_ZThn208_N7S5830C3D0Ev,_ZThn132_N7S5830C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5830C10__7S5830C3__7S5830C1[] = {
  ABISELECT(256,156),
  ABISELECT(-208,-132),
  ABISELECT(-208,-132),
  ABISELECT(48,24),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S5830C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N7S5830C3D1Ev,_ZThn132_N7S5830C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N7S5830C3D0Ev,_ZThn132_N7S5830C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S5830C3D1Ev,_ZTv0_n12_N7S5830C3D1Ev)();
extern void ABISELECT(_ZThn256_N7S5830C3D1Ev,_ZThn156_N7S5830C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5830C3D0Ev,_ZTv0_n12_N7S5830C3D0Ev)();
extern void ABISELECT(_ZThn256_N7S5830C3D0Ev,_ZThn156_N7S5830C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__A1__7S5830C3__7S5830C1[] = {
  ABISELECT(-256,-156),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI7S5830C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5830C3D1Ev,_ZTv0_n12_N7S5830C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5830C3D0Ev,_ZTv0_n12_N7S5830C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S5830C3D1Ev,_ZTv0_n20_N7S5830C3D1Ev)();
extern void ABISELECT(_ZThn1056_N7S5830C3D1Ev,_ZThn676_N7S5830C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5830C3D0Ev,_ZTv0_n20_N7S5830C3D0Ev)();
extern void ABISELECT(_ZThn1056_N7S5830C3D0Ev,_ZThn676_N7S5830C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5830C5__7S5830C3__7S5830C1[] = {
  ABISELECT(-1056,-676),
  ABISELECT(176,124),
  ABISELECT(-1056,-676),
  ABISELECT(-1056,-676),
  (VTBL_ENTRY)&(_ZTI7S5830C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5830C3D1Ev,_ZTv0_n20_N7S5830C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5830C3D0Ev,_ZTv0_n20_N7S5830C3D0Ev),
};
extern void _ZN7S5830C5D1Ev();
extern void _ZN7S5830C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5830C5__7S5830C1[] = {
  ABISELECT(176,124),
  ABISELECT(-1056,-676),
  0,
  (VTBL_ENTRY)&(_ZTI7S5830C5[0]),
  (VTBL_ENTRY)&_ZN7S5830C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5830C5D0Ev,
};
static  VTT_ENTRY vtt_S5830C1[] = {
  {&(_ZTV7S5830C1[9]),  9,36},
  {&(_tg__ZTV7S5830C3__7S5830C1[9]),  9,11},
  {&(_tg__ZTV8S5830C107S5830C3__7S5830C1[6]),  6,8},
  {&(_tg__ZTV8S5830C118S5830C107S5830C3__7S5830C1[5]),  5,7},
  {&(_tg__ZTV8S19863C6__8S5830C118S5830C107S5830C3__7S5830C1[3]),  3,5},
  {&(_tg__ZTV8S19863C6__8S5830C107S5830C3__7S5830C1[3]),  3,5},
  {&(_tg__ZTV7S5830C8__7S5830C3__7S5830C1[3]),  3,4},
  {&(_tg__ZTV8S5830C10__7S5830C3__7S5830C1[6]),  6,8},
  {&(_tg__ZTV8S19863C6__A1__7S5830C3__7S5830C1[3]),  3,5},
  {&(_tg__ZTV7S5830C5__7S5830C3__7S5830C1[5]),  5,7},
  {&(_ZTV7S5830C1[23]),  23,36},
  {&(_ZTV7S5830C1[18]),  18,36},
  {&(_ZTV7S5830C1[27]),  27,36},
  {&(_ZTV7S5830C1[34]),  34,36},
  {&(_tg__ZTV7S5830C5__7S5830C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5830C1[];
extern  VTBL_ENTRY _ZTV7S5830C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5830C1[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5830C3D0Ev,_ZTv0_n20_N7S5830C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N7S5830C3D0Ev,_ZThn676_N7S5830C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5830C3D1Ev,_ZTv0_n20_N7S5830C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N7S5830C3D1Ev,_ZThn676_N7S5830C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5830C3D0Ev,_ZTv0_n12_N7S5830C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S5830C3D0Ev,_ZThn156_N7S5830C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5830C3D1Ev,_ZTv0_n12_N7S5830C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S5830C3D1Ev,_ZThn156_N7S5830C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C10D0Ev,_ZTv0_n12_N8S5830C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S5830C10D0Ev,_ZThn24_N8S5830C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C10D1Ev,_ZTv0_n12_N8S5830C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S5830C10D1Ev,_ZThn24_N8S5830C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C11D0Ev,_ZTv0_n12_N8S5830C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S5830C11D0Ev,_ZThn24_N8S5830C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5830C11D1Ev,_ZTv0_n12_N8S5830C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S5830C11D1Ev,_ZThn24_N8S5830C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5830C1D0Ev,_ZTv0_n20_N7S5830C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N7S5830C1D0Ev,_ZThn676_N7S5830C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5830C1D1Ev,_ZTv0_n20_N7S5830C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N7S5830C1D1Ev,_ZThn676_N7S5830C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5830C1D0Ev,_ZTv0_n12_N7S5830C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S5830C1D0Ev,_ZThn156_N7S5830C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5830C1D1Ev,_ZTv0_n12_N7S5830C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S5830C1D1Ev,_ZThn156_N7S5830C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5830C1 = {  "S5830C1", // class name
  bases_S5830C1, 13,
  &(vtc_S5830C1[0]), // expected_vtbl_contents
  &(vtt_S5830C1[0]), // expected_vtt_contents
  ABISELECT(1248,804), // object size
  NSPAIRA(_ZTI7S5830C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5830C1),36, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5830C1),15, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3956C2  : S1766C4_nt {
  int s3956c2f0;
  void *s3956c2f1[2];
  int s3956c2f2;
  virtual  ~S3956C2(); // _ZN7S3956C2D1Ev
  virtual void  v11(); // _ZN7S3956C23v11Ev
  virtual void  v12(); // _ZN7S3956C23v12Ev
  virtual void  v13(); // _ZN7S3956C23v13Ev
  virtual void  v14(); // _ZN7S3956C23v14Ev
  virtual void  v15(); // _ZN7S3956C23v15Ev
  virtual void  v16(); // _ZN7S3956C23v16Ev
  virtual void  v17(); // _ZN7S3956C23v17Ev
  virtual void  v18(); // _ZN7S3956C23v18Ev
  virtual void  v19(); // _ZN7S3956C23v19Ev
  virtual void  v20(); // _ZN7S3956C23v20Ev
  virtual void  v21(); // _ZN7S3956C23v21Ev
  S3956C2(); // tgen
};
//SIG(-1 S3956C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S3956C2 ::~S3956C2(){ note_dtor("S3956C2", this);}
void  S3956C2 ::v11(){vfunc_called(this, "_ZN7S3956C23v11Ev");}
void  S3956C2 ::v12(){vfunc_called(this, "_ZN7S3956C23v12Ev");}
void  S3956C2 ::v13(){vfunc_called(this, "_ZN7S3956C23v13Ev");}
void  S3956C2 ::v14(){vfunc_called(this, "_ZN7S3956C23v14Ev");}
void  S3956C2 ::v15(){vfunc_called(this, "_ZN7S3956C23v15Ev");}
void  S3956C2 ::v16(){vfunc_called(this, "_ZN7S3956C23v16Ev");}
void  S3956C2 ::v17(){vfunc_called(this, "_ZN7S3956C23v17Ev");}
void  S3956C2 ::v18(){vfunc_called(this, "_ZN7S3956C23v18Ev");}
void  S3956C2 ::v19(){vfunc_called(this, "_ZN7S3956C23v19Ev");}
void  S3956C2 ::v20(){vfunc_called(this, "_ZN7S3956C23v20Ev");}
void  S3956C2 ::v21(){vfunc_called(this, "_ZN7S3956C23v21Ev");}
S3956C2 ::S3956C2(){ note_ctor("S3956C2", this);} // tgen

static void Test_S3956C2()
{
  extern Class_Descriptor cd_S3956C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3956C2, buf);
    S3956C2 *dp, &lv = *(dp=new (buf) S3956C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3956C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3956C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3956C2");
    check_field_offset(lv, s3956c2f0, ABISELECT(16,12), "S3956C2.s3956c2f0");
    check_field_offset(lv, s3956c2f1, ABISELECT(24,16), "S3956C2.s3956c2f1");
    check_field_offset(lv, s3956c2f2, ABISELECT(40,24), "S3956C2.s3956c2f2");
    test_class_info(&lv, &cd_S3956C2);
    dp->~S3956C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3956C2(Test_S3956C2, "S3956C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3956C2C1Ev();
extern void _ZN7S3956C2D1Ev();
Name_Map name_map_S3956C2[] = {
  NSPAIR(_ZN7S3956C2C1Ev),
  NSPAIR(_ZN7S3956C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3956C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3956C2[];
extern void _ZN7S3956C2D1Ev();
extern void _ZN7S3956C2D0Ev();
extern void _ZN7S3956C23v11Ev();
extern void _ZN7S3956C23v12Ev();
extern void _ZN7S3956C23v13Ev();
extern void _ZN7S3956C23v14Ev();
extern void _ZN7S3956C23v15Ev();
extern void _ZN7S3956C23v16Ev();
extern void _ZN7S3956C23v17Ev();
extern void _ZN7S3956C23v18Ev();
extern void _ZN7S3956C23v19Ev();
extern void _ZN7S3956C23v20Ev();
extern void _ZN7S3956C23v21Ev();
static  VTBL_ENTRY vtc_S3956C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3956C2[0]),
  (VTBL_ENTRY)&_ZN7S3956C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3956C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S3956C2[];
extern  VTBL_ENTRY _ZTV7S3956C2[];
Class_Descriptor cd_S3956C2 = {  "S3956C2", // class name
  bases_S3956C2, 1,
  &(vtc_S3956C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3956C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3956C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3956C1  : S3956C2 {
  void *s3956c1f0[3];
  __tsi64 s3956c1f1;
  char s3956c1f2[2];
  int s3956c1f3;
  void *s3956c1f4;
  int s3956c1f5;
  virtual  ~S3956C1(); // _ZN7S3956C1D1Ev
  virtual void  v1(); // _ZN7S3956C12v1Ev
  virtual void  v2(); // _ZN7S3956C12v2Ev
  virtual void  v3(); // _ZN7S3956C12v3Ev
  virtual void  v4(); // _ZN7S3956C12v4Ev
  virtual void  v5(); // _ZN7S3956C12v5Ev
  virtual void  v6(); // _ZN7S3956C12v6Ev
  virtual void  v7(); // _ZN7S3956C12v7Ev
  virtual void  v8(); // _ZN7S3956C12v8Ev
  virtual void  v9(); // _ZN7S3956C12v9Ev
  virtual void  v10(); // _ZN7S3956C13v10Ev
  S3956C1(); // tgen
};
//SIG(1 S3956C1) C1{ BC2{ BC3{ vd m FL} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fi Fp[2] Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp[3] FL Fc[2] Fi Fp Fi}


 S3956C1 ::~S3956C1(){ note_dtor("S3956C1", this);}
void  S3956C1 ::v1(){vfunc_called(this, "_ZN7S3956C12v1Ev");}
void  S3956C1 ::v2(){vfunc_called(this, "_ZN7S3956C12v2Ev");}
void  S3956C1 ::v3(){vfunc_called(this, "_ZN7S3956C12v3Ev");}
void  S3956C1 ::v4(){vfunc_called(this, "_ZN7S3956C12v4Ev");}
void  S3956C1 ::v5(){vfunc_called(this, "_ZN7S3956C12v5Ev");}
void  S3956C1 ::v6(){vfunc_called(this, "_ZN7S3956C12v6Ev");}
void  S3956C1 ::v7(){vfunc_called(this, "_ZN7S3956C12v7Ev");}
void  S3956C1 ::v8(){vfunc_called(this, "_ZN7S3956C12v8Ev");}
void  S3956C1 ::v9(){vfunc_called(this, "_ZN7S3956C12v9Ev");}
void  S3956C1 ::v10(){vfunc_called(this, "_ZN7S3956C13v10Ev");}
S3956C1 ::S3956C1(){ note_ctor("S3956C1", this);} // tgen

static void Test_S3956C1()
{
  extern Class_Descriptor cd_S3956C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S3956C1, buf);
    S3956C1 *dp, &lv = *(dp=new (buf) S3956C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S3956C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3956C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3956C2*), 0, "S3956C1");
    check_base_class_offset(lv, (S3956C2*), 0, "S3956C1");
    check_field_offset(lv, s3956c1f0, ABISELECT(48,28), "S3956C1.s3956c1f0");
    check_field_offset(lv, s3956c1f1, ABISELECT(72,40), "S3956C1.s3956c1f1");
    check_field_offset(lv, s3956c1f2, ABISELECT(80,48), "S3956C1.s3956c1f2");
    check_field_offset(lv, s3956c1f3, ABISELECT(84,52), "S3956C1.s3956c1f3");
    check_field_offset(lv, s3956c1f4, ABISELECT(88,56), "S3956C1.s3956c1f4");
    check_field_offset(lv, s3956c1f5, ABISELECT(96,60), "S3956C1.s3956c1f5");
    test_class_info(&lv, &cd_S3956C1);
    dp->~S3956C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3956C1(Test_S3956C1, "S3956C1", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S3956C1C1Ev();
extern void _ZN7S3956C1D1Ev();
Name_Map name_map_S3956C1[] = {
  NSPAIR(_ZN7S3956C1C1Ev),
  NSPAIR(_ZN7S3956C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3956C2;
extern VTBL_ENTRY _ZTI7S3956C2[];
extern  VTBL_ENTRY _ZTV7S3956C2[];
static Base_Class bases_S3956C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3956C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3956C1[];
extern void _ZN7S3956C1D1Ev();
extern void _ZN7S3956C1D0Ev();
extern void _ZN7S3956C23v11Ev();
extern void _ZN7S3956C23v12Ev();
extern void _ZN7S3956C23v13Ev();
extern void _ZN7S3956C23v14Ev();
extern void _ZN7S3956C23v15Ev();
extern void _ZN7S3956C23v16Ev();
extern void _ZN7S3956C23v17Ev();
extern void _ZN7S3956C23v18Ev();
extern void _ZN7S3956C23v19Ev();
extern void _ZN7S3956C23v20Ev();
extern void _ZN7S3956C23v21Ev();
extern void _ZN7S3956C12v1Ev();
extern void _ZN7S3956C12v2Ev();
extern void _ZN7S3956C12v3Ev();
extern void _ZN7S3956C12v4Ev();
extern void _ZN7S3956C12v5Ev();
extern void _ZN7S3956C12v6Ev();
extern void _ZN7S3956C12v7Ev();
extern void _ZN7S3956C12v8Ev();
extern void _ZN7S3956C12v9Ev();
extern void _ZN7S3956C13v10Ev();
static  VTBL_ENTRY vtc_S3956C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3956C1[0]),
  (VTBL_ENTRY)&_ZN7S3956C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3956C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3956C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3956C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3956C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3956C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3956C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3956C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3956C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3956C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3956C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3956C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3956C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S3956C1[];
extern  VTBL_ENTRY _ZTV7S3956C1[];
Class_Descriptor cd_S3956C1 = {  "S3956C1", // class name
  bases_S3956C1, 2,
  &(vtc_S3956C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S3956C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3956C1),25, //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  S14915C1  {
  short s14915c1f0[2];
  ::S14865C7 s14915c1f1;
};
//SIG(1 S14915C1) C1{ Fs[2] FU2{ FU3{ FC4{ Fc Fc Fc} FC5{ Fs Fs Fs} FC6{ Fi Fi Fi} FC7{ Fp Fp Fp}} FC8{ Fs Fs FU9{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp}} Fp Fp Fi}}



static void Test_S14915C1()
{
  {
    init_simple_test("S14915C1");
    S14915C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S14915C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14915C1)");
    check_field_offset(lv, s14915c1f0, 0, "S14915C1.s14915c1f0");
    check_field_offset(lv, s14915c1f1, ABISELECT(8,4), "S14915C1.s14915c1f1");
  }
}
static Arrange_To_Call_Me vS14915C1(Test_S14915C1, "S14915C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3955C2  : S1766C4_nt {
  int s3955c2f0;
  void *s3955c2f1[2];
  int s3955c2f2;
  virtual  ~S3955C2(); // _ZN7S3955C2D1Ev
  virtual void  v11(); // _ZN7S3955C23v11Ev
  virtual void  v12(); // _ZN7S3955C23v12Ev
  virtual void  v13(); // _ZN7S3955C23v13Ev
  virtual void  v14(); // _ZN7S3955C23v14Ev
  virtual void  v15(); // _ZN7S3955C23v15Ev
  virtual void  v16(); // _ZN7S3955C23v16Ev
  virtual void  v17(); // _ZN7S3955C23v17Ev
  virtual void  v18(); // _ZN7S3955C23v18Ev
  virtual void  v19(); // _ZN7S3955C23v19Ev
  virtual void  v20(); // _ZN7S3955C23v20Ev
  virtual void  v21(); // _ZN7S3955C23v21Ev
  S3955C2(); // tgen
};
//SIG(-1 S3955C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S3955C2 ::~S3955C2(){ note_dtor("S3955C2", this);}
void  S3955C2 ::v11(){vfunc_called(this, "_ZN7S3955C23v11Ev");}
void  S3955C2 ::v12(){vfunc_called(this, "_ZN7S3955C23v12Ev");}
void  S3955C2 ::v13(){vfunc_called(this, "_ZN7S3955C23v13Ev");}
void  S3955C2 ::v14(){vfunc_called(this, "_ZN7S3955C23v14Ev");}
void  S3955C2 ::v15(){vfunc_called(this, "_ZN7S3955C23v15Ev");}
void  S3955C2 ::v16(){vfunc_called(this, "_ZN7S3955C23v16Ev");}
void  S3955C2 ::v17(){vfunc_called(this, "_ZN7S3955C23v17Ev");}
void  S3955C2 ::v18(){vfunc_called(this, "_ZN7S3955C23v18Ev");}
void  S3955C2 ::v19(){vfunc_called(this, "_ZN7S3955C23v19Ev");}
void  S3955C2 ::v20(){vfunc_called(this, "_ZN7S3955C23v20Ev");}
void  S3955C2 ::v21(){vfunc_called(this, "_ZN7S3955C23v21Ev");}
S3955C2 ::S3955C2(){ note_ctor("S3955C2", this);} // tgen

static void Test_S3955C2()
{
  extern Class_Descriptor cd_S3955C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3955C2, buf);
    S3955C2 *dp, &lv = *(dp=new (buf) S3955C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3955C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3955C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3955C2");
    check_field_offset(lv, s3955c2f0, ABISELECT(16,12), "S3955C2.s3955c2f0");
    check_field_offset(lv, s3955c2f1, ABISELECT(24,16), "S3955C2.s3955c2f1");
    check_field_offset(lv, s3955c2f2, ABISELECT(40,24), "S3955C2.s3955c2f2");
    test_class_info(&lv, &cd_S3955C2);
    dp->~S3955C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3955C2(Test_S3955C2, "S3955C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3955C2C1Ev();
extern void _ZN7S3955C2D1Ev();
Name_Map name_map_S3955C2[] = {
  NSPAIR(_ZN7S3955C2C1Ev),
  NSPAIR(_ZN7S3955C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3955C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3955C2[];
extern void _ZN7S3955C2D1Ev();
extern void _ZN7S3955C2D0Ev();
extern void _ZN7S3955C23v11Ev();
extern void _ZN7S3955C23v12Ev();
extern void _ZN7S3955C23v13Ev();
extern void _ZN7S3955C23v14Ev();
extern void _ZN7S3955C23v15Ev();
extern void _ZN7S3955C23v16Ev();
extern void _ZN7S3955C23v17Ev();
extern void _ZN7S3955C23v18Ev();
extern void _ZN7S3955C23v19Ev();
extern void _ZN7S3955C23v20Ev();
extern void _ZN7S3955C23v21Ev();
static  VTBL_ENTRY vtc_S3955C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3955C2[0]),
  (VTBL_ENTRY)&_ZN7S3955C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3955C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S3955C2[];
extern  VTBL_ENTRY _ZTV7S3955C2[];
Class_Descriptor cd_S3955C2 = {  "S3955C2", // class name
  bases_S3955C2, 1,
  &(vtc_S3955C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3955C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3955C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3955C1  : S3955C2 {
  int s3955c1f0;
  void *s3955c1f1[2];
  int s3955c1f2[5];
  void *s3955c1f3;
  __tsi64 s3955c1f4;
  virtual  ~S3955C1(); // _ZN7S3955C1D1Ev
  virtual void  v1(); // _ZN7S3955C12v1Ev
  virtual void  v2(); // _ZN7S3955C12v2Ev
  virtual void  v3(); // _ZN7S3955C12v3Ev
  virtual void  v4(); // _ZN7S3955C12v4Ev
  virtual void  v5(); // _ZN7S3955C12v5Ev
  virtual void  v6(); // _ZN7S3955C12v6Ev
  virtual void  v7(); // _ZN7S3955C12v7Ev
  virtual void  v8(); // _ZN7S3955C12v8Ev
  virtual void  v9(); // _ZN7S3955C12v9Ev
  virtual void  v10(); // _ZN7S3955C13v10Ev
  S3955C1(); // tgen
};
//SIG(1 S3955C1) C1{ BC2{ BC3{ vd m FL} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fi Fp[2] Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi Fp[2] Fi[5] Fp FL}


 S3955C1 ::~S3955C1(){ note_dtor("S3955C1", this);}
void  S3955C1 ::v1(){vfunc_called(this, "_ZN7S3955C12v1Ev");}
void  S3955C1 ::v2(){vfunc_called(this, "_ZN7S3955C12v2Ev");}
void  S3955C1 ::v3(){vfunc_called(this, "_ZN7S3955C12v3Ev");}
void  S3955C1 ::v4(){vfunc_called(this, "_ZN7S3955C12v4Ev");}
void  S3955C1 ::v5(){vfunc_called(this, "_ZN7S3955C12v5Ev");}
void  S3955C1 ::v6(){vfunc_called(this, "_ZN7S3955C12v6Ev");}
void  S3955C1 ::v7(){vfunc_called(this, "_ZN7S3955C12v7Ev");}
void  S3955C1 ::v8(){vfunc_called(this, "_ZN7S3955C12v8Ev");}
void  S3955C1 ::v9(){vfunc_called(this, "_ZN7S3955C12v9Ev");}
void  S3955C1 ::v10(){vfunc_called(this, "_ZN7S3955C13v10Ev");}
S3955C1 ::S3955C1(){ note_ctor("S3955C1", this);} // tgen

static void Test_S3955C1()
{
  extern Class_Descriptor cd_S3955C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S3955C1, buf);
    S3955C1 *dp, &lv = *(dp=new (buf) S3955C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S3955C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3955C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3955C2*), 0, "S3955C1");
    check_base_class_offset(lv, (S3955C2*), 0, "S3955C1");
    check_field_offset(lv, s3955c1f0, ABISELECT(44,28), "S3955C1.s3955c1f0");
    check_field_offset(lv, s3955c1f1, ABISELECT(48,32), "S3955C1.s3955c1f1");
    check_field_offset(lv, s3955c1f2, ABISELECT(64,40), "S3955C1.s3955c1f2");
    check_field_offset(lv, s3955c1f3, ABISELECT(88,60), "S3955C1.s3955c1f3");
    check_field_offset(lv, s3955c1f4, ABISELECT(96,64), "S3955C1.s3955c1f4");
    test_class_info(&lv, &cd_S3955C1);
    dp->~S3955C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3955C1(Test_S3955C1, "S3955C1", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN7S3955C1C1Ev();
extern void _ZN7S3955C1D1Ev();
Name_Map name_map_S3955C1[] = {
  NSPAIR(_ZN7S3955C1C1Ev),
  NSPAIR(_ZN7S3955C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3955C2;
extern VTBL_ENTRY _ZTI7S3955C2[];
extern  VTBL_ENTRY _ZTV7S3955C2[];
static Base_Class bases_S3955C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3955C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3955C1[];
extern void _ZN7S3955C1D1Ev();
extern void _ZN7S3955C1D0Ev();
extern void _ZN7S3955C23v11Ev();
extern void _ZN7S3955C23v12Ev();
extern void _ZN7S3955C23v13Ev();
extern void _ZN7S3955C23v14Ev();
extern void _ZN7S3955C23v15Ev();
extern void _ZN7S3955C23v16Ev();
extern void _ZN7S3955C23v17Ev();
extern void _ZN7S3955C23v18Ev();
extern void _ZN7S3955C23v19Ev();
extern void _ZN7S3955C23v20Ev();
extern void _ZN7S3955C23v21Ev();
extern void _ZN7S3955C12v1Ev();
extern void _ZN7S3955C12v2Ev();
extern void _ZN7S3955C12v3Ev();
extern void _ZN7S3955C12v4Ev();
extern void _ZN7S3955C12v5Ev();
extern void _ZN7S3955C12v6Ev();
extern void _ZN7S3955C12v7Ev();
extern void _ZN7S3955C12v8Ev();
extern void _ZN7S3955C12v9Ev();
extern void _ZN7S3955C13v10Ev();
static  VTBL_ENTRY vtc_S3955C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3955C1[0]),
  (VTBL_ENTRY)&_ZN7S3955C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3955C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3955C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3955C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3955C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3955C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3955C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3955C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3955C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3955C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3955C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3955C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3955C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S3955C1[];
extern  VTBL_ENTRY _ZTV7S3955C1[];
Class_Descriptor cd_S3955C1 = {  "S3955C1", // class name
  bases_S3955C1, 2,
  &(vtc_S3955C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI7S3955C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3955C1),25, //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  S3953C2  : S1766C4_nt {
  int s3953c2f0;
  void *s3953c2f1[2];
  int s3953c2f2;
  virtual  ~S3953C2(); // _ZN7S3953C2D1Ev
  virtual void  v10(); // _ZN7S3953C23v10Ev
  virtual void  v11(); // _ZN7S3953C23v11Ev
  virtual void  v12(); // _ZN7S3953C23v12Ev
  virtual void  v13(); // _ZN7S3953C23v13Ev
  virtual void  v14(); // _ZN7S3953C23v14Ev
  virtual void  v15(); // _ZN7S3953C23v15Ev
  virtual void  v16(); // _ZN7S3953C23v16Ev
  virtual void  v17(); // _ZN7S3953C23v17Ev
  virtual void  v18(); // _ZN7S3953C23v18Ev
  virtual void  v19(); // _ZN7S3953C23v19Ev
  virtual void  v20(); // _ZN7S3953C23v20Ev
  S3953C2(); // tgen
};
//SIG(-1 S3953C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S3953C2 ::~S3953C2(){ note_dtor("S3953C2", this);}
void  S3953C2 ::v10(){vfunc_called(this, "_ZN7S3953C23v10Ev");}
void  S3953C2 ::v11(){vfunc_called(this, "_ZN7S3953C23v11Ev");}
void  S3953C2 ::v12(){vfunc_called(this, "_ZN7S3953C23v12Ev");}
void  S3953C2 ::v13(){vfunc_called(this, "_ZN7S3953C23v13Ev");}
void  S3953C2 ::v14(){vfunc_called(this, "_ZN7S3953C23v14Ev");}
void  S3953C2 ::v15(){vfunc_called(this, "_ZN7S3953C23v15Ev");}
void  S3953C2 ::v16(){vfunc_called(this, "_ZN7S3953C23v16Ev");}
void  S3953C2 ::v17(){vfunc_called(this, "_ZN7S3953C23v17Ev");}
void  S3953C2 ::v18(){vfunc_called(this, "_ZN7S3953C23v18Ev");}
void  S3953C2 ::v19(){vfunc_called(this, "_ZN7S3953C23v19Ev");}
void  S3953C2 ::v20(){vfunc_called(this, "_ZN7S3953C23v20Ev");}
S3953C2 ::S3953C2(){ note_ctor("S3953C2", this);} // tgen

static void Test_S3953C2()
{
  extern Class_Descriptor cd_S3953C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3953C2, buf);
    S3953C2 *dp, &lv = *(dp=new (buf) S3953C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3953C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3953C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3953C2");
    check_field_offset(lv, s3953c2f0, ABISELECT(16,12), "S3953C2.s3953c2f0");
    check_field_offset(lv, s3953c2f1, ABISELECT(24,16), "S3953C2.s3953c2f1");
    check_field_offset(lv, s3953c2f2, ABISELECT(40,24), "S3953C2.s3953c2f2");
    test_class_info(&lv, &cd_S3953C2);
    dp->~S3953C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3953C2(Test_S3953C2, "S3953C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3953C2C1Ev();
extern void _ZN7S3953C2D1Ev();
Name_Map name_map_S3953C2[] = {
  NSPAIR(_ZN7S3953C2C1Ev),
  NSPAIR(_ZN7S3953C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3953C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3953C2[];
extern void _ZN7S3953C2D1Ev();
extern void _ZN7S3953C2D0Ev();
extern void _ZN7S3953C23v10Ev();
extern void _ZN7S3953C23v11Ev();
extern void _ZN7S3953C23v12Ev();
extern void _ZN7S3953C23v13Ev();
extern void _ZN7S3953C23v14Ev();
extern void _ZN7S3953C23v15Ev();
extern void _ZN7S3953C23v16Ev();
extern void _ZN7S3953C23v17Ev();
extern void _ZN7S3953C23v18Ev();
extern void _ZN7S3953C23v19Ev();
extern void _ZN7S3953C23v20Ev();
static  VTBL_ENTRY vtc_S3953C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3953C2[0]),
  (VTBL_ENTRY)&_ZN7S3953C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3953C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S3953C2[];
extern  VTBL_ENTRY _ZTV7S3953C2[];
Class_Descriptor cd_S3953C2 = {  "S3953C2", // class name
  bases_S3953C2, 1,
  &(vtc_S3953C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3953C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3953C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3953C1  : S3953C2 {
  void *s3953c1f0[2];
  int s3953c1f1;
  __tsi64 s3953c1f2;
  char s3953c1f3;
  int s3953c1f4;
  virtual  ~S3953C1(); // _ZN7S3953C1D1Ev
  virtual void  v1(); // _ZN7S3953C12v1Ev
  virtual void  v2(); // _ZN7S3953C12v2Ev
  virtual void  v3(); // _ZN7S3953C12v3Ev
  virtual void  v4(); // _ZN7S3953C12v4Ev
  virtual void  v5(); // _ZN7S3953C12v5Ev
  virtual void  v6(); // _ZN7S3953C12v6Ev
  virtual void  v7(); // _ZN7S3953C12v7Ev
  virtual void  v8(); // _ZN7S3953C12v8Ev
  virtual void  v9(); // _ZN7S3953C12v9Ev
  S3953C1(); // tgen
};
//SIG(1 S3953C1) C1{ BC2{ BC3{ vd m FL} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi Fp[2] Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[2] Fi FL Fc Fi}


 S3953C1 ::~S3953C1(){ note_dtor("S3953C1", this);}
void  S3953C1 ::v1(){vfunc_called(this, "_ZN7S3953C12v1Ev");}
void  S3953C1 ::v2(){vfunc_called(this, "_ZN7S3953C12v2Ev");}
void  S3953C1 ::v3(){vfunc_called(this, "_ZN7S3953C12v3Ev");}
void  S3953C1 ::v4(){vfunc_called(this, "_ZN7S3953C12v4Ev");}
void  S3953C1 ::v5(){vfunc_called(this, "_ZN7S3953C12v5Ev");}
void  S3953C1 ::v6(){vfunc_called(this, "_ZN7S3953C12v6Ev");}
void  S3953C1 ::v7(){vfunc_called(this, "_ZN7S3953C12v7Ev");}
void  S3953C1 ::v8(){vfunc_called(this, "_ZN7S3953C12v8Ev");}
void  S3953C1 ::v9(){vfunc_called(this, "_ZN7S3953C12v9Ev");}
S3953C1 ::S3953C1(){ note_ctor("S3953C1", this);} // tgen

static void Test_S3953C1()
{
  extern Class_Descriptor cd_S3953C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S3953C1, buf);
    S3953C1 *dp, &lv = *(dp=new (buf) S3953C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S3953C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3953C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3953C2*), 0, "S3953C1");
    check_base_class_offset(lv, (S3953C2*), 0, "S3953C1");
    check_field_offset(lv, s3953c1f0, ABISELECT(48,28), "S3953C1.s3953c1f0");
    check_field_offset(lv, s3953c1f1, ABISELECT(64,36), "S3953C1.s3953c1f1");
    check_field_offset(lv, s3953c1f2, ABISELECT(72,40), "S3953C1.s3953c1f2");
    check_field_offset(lv, s3953c1f3, ABISELECT(80,48), "S3953C1.s3953c1f3");
    check_field_offset(lv, s3953c1f4, ABISELECT(84,52), "S3953C1.s3953c1f4");
    test_class_info(&lv, &cd_S3953C1);
    dp->~S3953C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3953C1(Test_S3953C1, "S3953C1", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S3953C1C1Ev();
extern void _ZN7S3953C1D1Ev();
Name_Map name_map_S3953C1[] = {
  NSPAIR(_ZN7S3953C1C1Ev),
  NSPAIR(_ZN7S3953C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3953C2;
extern VTBL_ENTRY _ZTI7S3953C2[];
extern  VTBL_ENTRY _ZTV7S3953C2[];
static Base_Class bases_S3953C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3953C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3953C1[];
extern void _ZN7S3953C1D1Ev();
extern void _ZN7S3953C1D0Ev();
extern void _ZN7S3953C23v10Ev();
extern void _ZN7S3953C23v11Ev();
extern void _ZN7S3953C23v12Ev();
extern void _ZN7S3953C23v13Ev();
extern void _ZN7S3953C23v14Ev();
extern void _ZN7S3953C23v15Ev();
extern void _ZN7S3953C23v16Ev();
extern void _ZN7S3953C23v17Ev();
extern void _ZN7S3953C23v18Ev();
extern void _ZN7S3953C23v19Ev();
extern void _ZN7S3953C23v20Ev();
extern void _ZN7S3953C12v1Ev();
extern void _ZN7S3953C12v2Ev();
extern void _ZN7S3953C12v3Ev();
extern void _ZN7S3953C12v4Ev();
extern void _ZN7S3953C12v5Ev();
extern void _ZN7S3953C12v6Ev();
extern void _ZN7S3953C12v7Ev();
extern void _ZN7S3953C12v8Ev();
extern void _ZN7S3953C12v9Ev();
static  VTBL_ENTRY vtc_S3953C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3953C1[0]),
  (VTBL_ENTRY)&_ZN7S3953C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3953C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3953C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3953C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3953C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3953C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3953C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3953C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3953C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3953C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3953C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3953C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S3953C1[];
extern  VTBL_ENTRY _ZTV7S3953C1[];
Class_Descriptor cd_S3953C1 = {  "S3953C1", // class name
  bases_S3953C1, 2,
  &(vtc_S3953C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S3953C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3953C1),24, //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  S6310C3_nt  {
  void *s6310c3f0;
  int s6310c3f1[3];
  virtual  ~S6310C3_nt(); // _ZN10S6310C3_ntD1Ev
  virtual void  v1(); // _ZN10S6310C3_nt2v1Ev
  S6310C3_nt(); // tgen
};
//SIG(-1 S6310C3_nt) C1{ vd v1 Fp Fi[3]}


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

//skip512 S6310C3_nt

#else // __cplusplus

extern void _ZN10S6310C3_ntC1Ev();
extern void _ZN10S6310C3_ntD1Ev();
Name_Map name_map_S6310C3_nt[] = {
  NSPAIR(_ZN10S6310C3_ntC1Ev),
  NSPAIR(_ZN10S6310C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6310C3_nt[];
extern void _ZN10S6310C3_ntD1Ev();
extern void _ZN10S6310C3_ntD0Ev();
extern void _ZN10S6310C3_nt2v1Ev();
static  VTBL_ENTRY vtc_S6310C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6310C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S6310C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6310C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S6310C3_nt2v1Ev,
};
extern VTBL_ENTRY _ZTI10S6310C3_nt[];
VTBL_ENTRY *P__ZTI10S6310C3_nt = _ZTI10S6310C3_nt; 
extern  VTBL_ENTRY _ZTV10S6310C3_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6310C1  : S19863C10 {
  ::S6310C3_nt s6310c1f0;
  ::S8455C8 s6310c1f1;
  virtual  ~S6310C1(); // _ZN7S6310C1D1Ev
  S6310C1(); // tgen
};
//SIG(1 S6310C1) C1{ BC2{ m} vd FC3{ vd v1 Fp Fi[3]} FC4{ vd m Fi FC5{ BC6{ vd v3 v4 v5 v6 v7 v8 Fi[3]} vd v2} FC5 FC7{ BC6 vd v9} Fi[2]}}


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

static void Test_S6310C1()
{
  extern Class_Descriptor cd_S6310C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S6310C1, buf);
    S6310C1 *dp, &lv = *(dp=new (buf) S6310C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S6310C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6310C1)");
    check_base_class_offset(lv, (S19863C10*), 0, "S6310C1");
    check_field_offset(lv, s6310c1f0, ABISELECT(8,4), "S6310C1.s6310c1f0");
    check_field_offset(lv, s6310c1f1, ABISELECT(40,24), "S6310C1.s6310c1f1");
    test_class_info(&lv, &cd_S6310C1);
    dp->~S6310C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6310C1(Test_S6310C1, "S6310C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S6310C1C1Ev();
extern void _ZN7S6310C1D1Ev();
Name_Map name_map_S6310C1[] = {
  NSPAIR(_ZN7S6310C1C1Ev),
  NSPAIR(_ZN7S6310C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S6310C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6310C1[];
extern void _ZN7S6310C1D1Ev();
extern void _ZN7S6310C1D0Ev();
static  VTBL_ENTRY vtc_S6310C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6310C1[0]),
  (VTBL_ENTRY)&_ZN7S6310C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6310C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S6310C1[];
extern  VTBL_ENTRY _ZTV7S6310C1[];
Class_Descriptor cd_S6310C1 = {  "S6310C1", // class name
  bases_S6310C1, 1,
  &(vtc_S6310C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S6310C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6310C1),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  S3952C2  : S1766C4_nt {
  int s3952c2f0;
  void *s3952c2f1[2];
  int s3952c2f2;
  virtual  ~S3952C2(); // _ZN7S3952C2D1Ev
  virtual void  v10(); // _ZN7S3952C23v10Ev
  virtual void  v11(); // _ZN7S3952C23v11Ev
  virtual void  v12(); // _ZN7S3952C23v12Ev
  virtual void  v13(); // _ZN7S3952C23v13Ev
  virtual void  v14(); // _ZN7S3952C23v14Ev
  virtual void  v15(); // _ZN7S3952C23v15Ev
  virtual void  v16(); // _ZN7S3952C23v16Ev
  virtual void  v17(); // _ZN7S3952C23v17Ev
  virtual void  v18(); // _ZN7S3952C23v18Ev
  virtual void  v19(); // _ZN7S3952C23v19Ev
  virtual void  v20(); // _ZN7S3952C23v20Ev
  S3952C2(); // tgen
};
//SIG(-1 S3952C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S3952C2 ::~S3952C2(){ note_dtor("S3952C2", this);}
void  S3952C2 ::v10(){vfunc_called(this, "_ZN7S3952C23v10Ev");}
void  S3952C2 ::v11(){vfunc_called(this, "_ZN7S3952C23v11Ev");}
void  S3952C2 ::v12(){vfunc_called(this, "_ZN7S3952C23v12Ev");}
void  S3952C2 ::v13(){vfunc_called(this, "_ZN7S3952C23v13Ev");}
void  S3952C2 ::v14(){vfunc_called(this, "_ZN7S3952C23v14Ev");}
void  S3952C2 ::v15(){vfunc_called(this, "_ZN7S3952C23v15Ev");}
void  S3952C2 ::v16(){vfunc_called(this, "_ZN7S3952C23v16Ev");}
void  S3952C2 ::v17(){vfunc_called(this, "_ZN7S3952C23v17Ev");}
void  S3952C2 ::v18(){vfunc_called(this, "_ZN7S3952C23v18Ev");}
void  S3952C2 ::v19(){vfunc_called(this, "_ZN7S3952C23v19Ev");}
void  S3952C2 ::v20(){vfunc_called(this, "_ZN7S3952C23v20Ev");}
S3952C2 ::S3952C2(){ note_ctor("S3952C2", this);} // tgen

static void Test_S3952C2()
{
  extern Class_Descriptor cd_S3952C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3952C2, buf);
    S3952C2 *dp, &lv = *(dp=new (buf) S3952C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3952C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3952C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3952C2");
    check_field_offset(lv, s3952c2f0, ABISELECT(16,12), "S3952C2.s3952c2f0");
    check_field_offset(lv, s3952c2f1, ABISELECT(24,16), "S3952C2.s3952c2f1");
    check_field_offset(lv, s3952c2f2, ABISELECT(40,24), "S3952C2.s3952c2f2");
    test_class_info(&lv, &cd_S3952C2);
    dp->~S3952C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3952C2(Test_S3952C2, "S3952C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3952C2C1Ev();
extern void _ZN7S3952C2D1Ev();
Name_Map name_map_S3952C2[] = {
  NSPAIR(_ZN7S3952C2C1Ev),
  NSPAIR(_ZN7S3952C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3952C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3952C2[];
extern void _ZN7S3952C2D1Ev();
extern void _ZN7S3952C2D0Ev();
extern void _ZN7S3952C23v10Ev();
extern void _ZN7S3952C23v11Ev();
extern void _ZN7S3952C23v12Ev();
extern void _ZN7S3952C23v13Ev();
extern void _ZN7S3952C23v14Ev();
extern void _ZN7S3952C23v15Ev();
extern void _ZN7S3952C23v16Ev();
extern void _ZN7S3952C23v17Ev();
extern void _ZN7S3952C23v18Ev();
extern void _ZN7S3952C23v19Ev();
extern void _ZN7S3952C23v20Ev();
static  VTBL_ENTRY vtc_S3952C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3952C2[0]),
  (VTBL_ENTRY)&_ZN7S3952C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3952C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S3952C2[];
extern  VTBL_ENTRY _ZTV7S3952C2[];
Class_Descriptor cd_S3952C2 = {  "S3952C2", // class name
  bases_S3952C2, 1,
  &(vtc_S3952C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3952C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3952C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3952C1  : S3952C2 {
  void *s3952c1f0[2];
  char s3952c1f1;
  virtual  ~S3952C1(); // _ZN7S3952C1D1Ev
  virtual void  v1(); // _ZN7S3952C12v1Ev
  virtual void  v2(); // _ZN7S3952C12v2Ev
  virtual void  v3(); // _ZN7S3952C12v3Ev
  virtual void  v4(); // _ZN7S3952C12v4Ev
  virtual void  v5(); // _ZN7S3952C12v5Ev
  virtual void  v6(); // _ZN7S3952C12v6Ev
  virtual void  v7(); // _ZN7S3952C12v7Ev
  virtual void  v8(); // _ZN7S3952C12v8Ev
  virtual void  v9(); // _ZN7S3952C12v9Ev
  S3952C1(); // tgen
};
//SIG(1 S3952C1) C1{ BC2{ BC3{ vd m FL} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi Fp[2] Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[2] Fc}


 S3952C1 ::~S3952C1(){ note_dtor("S3952C1", this);}
void  S3952C1 ::v1(){vfunc_called(this, "_ZN7S3952C12v1Ev");}
void  S3952C1 ::v2(){vfunc_called(this, "_ZN7S3952C12v2Ev");}
void  S3952C1 ::v3(){vfunc_called(this, "_ZN7S3952C12v3Ev");}
void  S3952C1 ::v4(){vfunc_called(this, "_ZN7S3952C12v4Ev");}
void  S3952C1 ::v5(){vfunc_called(this, "_ZN7S3952C12v5Ev");}
void  S3952C1 ::v6(){vfunc_called(this, "_ZN7S3952C12v6Ev");}
void  S3952C1 ::v7(){vfunc_called(this, "_ZN7S3952C12v7Ev");}
void  S3952C1 ::v8(){vfunc_called(this, "_ZN7S3952C12v8Ev");}
void  S3952C1 ::v9(){vfunc_called(this, "_ZN7S3952C12v9Ev");}
S3952C1 ::S3952C1(){ note_ctor("S3952C1", this);} // tgen

static void Test_S3952C1()
{
  extern Class_Descriptor cd_S3952C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S3952C1, buf);
    S3952C1 *dp, &lv = *(dp=new (buf) S3952C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S3952C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3952C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3952C2*), 0, "S3952C1");
    check_base_class_offset(lv, (S3952C2*), 0, "S3952C1");
    check_field_offset(lv, s3952c1f0, ABISELECT(48,28), "S3952C1.s3952c1f0");
    check_field_offset(lv, s3952c1f1, ABISELECT(64,36), "S3952C1.s3952c1f1");
    test_class_info(&lv, &cd_S3952C1);
    dp->~S3952C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3952C1(Test_S3952C1, "S3952C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S3952C1C1Ev();
extern void _ZN7S3952C1D1Ev();
Name_Map name_map_S3952C1[] = {
  NSPAIR(_ZN7S3952C1C1Ev),
  NSPAIR(_ZN7S3952C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3952C2;
extern VTBL_ENTRY _ZTI7S3952C2[];
extern  VTBL_ENTRY _ZTV7S3952C2[];
static Base_Class bases_S3952C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3952C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3952C1[];
extern void _ZN7S3952C1D1Ev();
extern void _ZN7S3952C1D0Ev();
extern void _ZN7S3952C23v10Ev();
extern void _ZN7S3952C23v11Ev();
extern void _ZN7S3952C23v12Ev();
extern void _ZN7S3952C23v13Ev();
extern void _ZN7S3952C23v14Ev();
extern void _ZN7S3952C23v15Ev();
extern void _ZN7S3952C23v16Ev();
extern void _ZN7S3952C23v17Ev();
extern void _ZN7S3952C23v18Ev();
extern void _ZN7S3952C23v19Ev();
extern void _ZN7S3952C23v20Ev();
extern void _ZN7S3952C12v1Ev();
extern void _ZN7S3952C12v2Ev();
extern void _ZN7S3952C12v3Ev();
extern void _ZN7S3952C12v4Ev();
extern void _ZN7S3952C12v5Ev();
extern void _ZN7S3952C12v6Ev();
extern void _ZN7S3952C12v7Ev();
extern void _ZN7S3952C12v8Ev();
extern void _ZN7S3952C12v9Ev();
static  VTBL_ENTRY vtc_S3952C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3952C1[0]),
  (VTBL_ENTRY)&_ZN7S3952C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3952C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3952C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3952C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3952C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3952C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3952C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3952C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3952C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3952C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3952C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3952C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S3952C1[];
extern  VTBL_ENTRY _ZTV7S3952C1[];
Class_Descriptor cd_S3952C1 = {  "S3952C1", // class name
  bases_S3952C1, 2,
  &(vtc_S3952C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S3952C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3952C1),24, //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  S3951C2  : S1766C4_nt {
  int s3951c2f0;
  void *s3951c2f1[2];
  int s3951c2f2;
  virtual  ~S3951C2(); // _ZN7S3951C2D1Ev
  virtual void  v10(); // _ZN7S3951C23v10Ev
  virtual void  v11(); // _ZN7S3951C23v11Ev
  virtual void  v12(); // _ZN7S3951C23v12Ev
  virtual void  v13(); // _ZN7S3951C23v13Ev
  virtual void  v14(); // _ZN7S3951C23v14Ev
  virtual void  v15(); // _ZN7S3951C23v15Ev
  virtual void  v16(); // _ZN7S3951C23v16Ev
  virtual void  v17(); // _ZN7S3951C23v17Ev
  virtual void  v18(); // _ZN7S3951C23v18Ev
  virtual void  v19(); // _ZN7S3951C23v19Ev
  virtual void  v20(); // _ZN7S3951C23v20Ev
  S3951C2(); // tgen
};
//SIG(-1 S3951C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2] Fi}


 S3951C2 ::~S3951C2(){ note_dtor("S3951C2", this);}
void  S3951C2 ::v10(){vfunc_called(this, "_ZN7S3951C23v10Ev");}
void  S3951C2 ::v11(){vfunc_called(this, "_ZN7S3951C23v11Ev");}
void  S3951C2 ::v12(){vfunc_called(this, "_ZN7S3951C23v12Ev");}
void  S3951C2 ::v13(){vfunc_called(this, "_ZN7S3951C23v13Ev");}
void  S3951C2 ::v14(){vfunc_called(this, "_ZN7S3951C23v14Ev");}
void  S3951C2 ::v15(){vfunc_called(this, "_ZN7S3951C23v15Ev");}
void  S3951C2 ::v16(){vfunc_called(this, "_ZN7S3951C23v16Ev");}
void  S3951C2 ::v17(){vfunc_called(this, "_ZN7S3951C23v17Ev");}
void  S3951C2 ::v18(){vfunc_called(this, "_ZN7S3951C23v18Ev");}
void  S3951C2 ::v19(){vfunc_called(this, "_ZN7S3951C23v19Ev");}
void  S3951C2 ::v20(){vfunc_called(this, "_ZN7S3951C23v20Ev");}
S3951C2 ::S3951C2(){ note_ctor("S3951C2", this);} // tgen

static void Test_S3951C2()
{
  extern Class_Descriptor cd_S3951C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3951C2, buf);
    S3951C2 *dp, &lv = *(dp=new (buf) S3951C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3951C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3951C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3951C2");
    check_field_offset(lv, s3951c2f0, ABISELECT(16,12), "S3951C2.s3951c2f0");
    check_field_offset(lv, s3951c2f1, ABISELECT(24,16), "S3951C2.s3951c2f1");
    check_field_offset(lv, s3951c2f2, ABISELECT(40,24), "S3951C2.s3951c2f2");
    test_class_info(&lv, &cd_S3951C2);
    dp->~S3951C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3951C2(Test_S3951C2, "S3951C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3951C2C1Ev();
extern void _ZN7S3951C2D1Ev();
Name_Map name_map_S3951C2[] = {
  NSPAIR(_ZN7S3951C2C1Ev),
  NSPAIR(_ZN7S3951C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3951C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3951C2[];
extern void _ZN7S3951C2D1Ev();
extern void _ZN7S3951C2D0Ev();
extern void _ZN7S3951C23v10Ev();
extern void _ZN7S3951C23v11Ev();
extern void _ZN7S3951C23v12Ev();
extern void _ZN7S3951C23v13Ev();
extern void _ZN7S3951C23v14Ev();
extern void _ZN7S3951C23v15Ev();
extern void _ZN7S3951C23v16Ev();
extern void _ZN7S3951C23v17Ev();
extern void _ZN7S3951C23v18Ev();
extern void _ZN7S3951C23v19Ev();
extern void _ZN7S3951C23v20Ev();
static  VTBL_ENTRY vtc_S3951C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3951C2[0]),
  (VTBL_ENTRY)&_ZN7S3951C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3951C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S3951C2[];
extern  VTBL_ENTRY _ZTV7S3951C2[];
Class_Descriptor cd_S3951C2 = {  "S3951C2", // class name
  bases_S3951C2, 1,
  &(vtc_S3951C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3951C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3951C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3951C1  : S3951C2 {
  void *s3951c1f0;
  short s3951c1f1;
  void *s3951c1f2;
  virtual  ~S3951C1(); // _ZN7S3951C1D1Ev
  virtual void  v1(); // _ZN7S3951C12v1Ev
  virtual void  v2(); // _ZN7S3951C12v2Ev
  virtual void  v3(); // _ZN7S3951C12v3Ev
  virtual void  v4(); // _ZN7S3951C12v4Ev
  virtual void  v5(); // _ZN7S3951C12v5Ev
  virtual void  v6(); // _ZN7S3951C12v6Ev
  virtual void  v7(); // _ZN7S3951C12v7Ev
  virtual void  v8(); // _ZN7S3951C12v8Ev
  virtual void  v9(); // _ZN7S3951C12v9Ev
  S3951C1(); // tgen
};
//SIG(1 S3951C1) C1{ BC2{ BC3{ vd m FL} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi Fp[2] Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp Fs Fp}


 S3951C1 ::~S3951C1(){ note_dtor("S3951C1", this);}
void  S3951C1 ::v1(){vfunc_called(this, "_ZN7S3951C12v1Ev");}
void  S3951C1 ::v2(){vfunc_called(this, "_ZN7S3951C12v2Ev");}
void  S3951C1 ::v3(){vfunc_called(this, "_ZN7S3951C12v3Ev");}
void  S3951C1 ::v4(){vfunc_called(this, "_ZN7S3951C12v4Ev");}
void  S3951C1 ::v5(){vfunc_called(this, "_ZN7S3951C12v5Ev");}
void  S3951C1 ::v6(){vfunc_called(this, "_ZN7S3951C12v6Ev");}
void  S3951C1 ::v7(){vfunc_called(this, "_ZN7S3951C12v7Ev");}
void  S3951C1 ::v8(){vfunc_called(this, "_ZN7S3951C12v8Ev");}
void  S3951C1 ::v9(){vfunc_called(this, "_ZN7S3951C12v9Ev");}
S3951C1 ::S3951C1(){ note_ctor("S3951C1", this);} // tgen

static void Test_S3951C1()
{
  extern Class_Descriptor cd_S3951C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S3951C1, buf);
    S3951C1 *dp, &lv = *(dp=new (buf) S3951C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S3951C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3951C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3951C2*), 0, "S3951C1");
    check_base_class_offset(lv, (S3951C2*), 0, "S3951C1");
    check_field_offset(lv, s3951c1f0, ABISELECT(48,28), "S3951C1.s3951c1f0");
    check_field_offset(lv, s3951c1f1, ABISELECT(56,32), "S3951C1.s3951c1f1");
    check_field_offset(lv, s3951c1f2, ABISELECT(64,36), "S3951C1.s3951c1f2");
    test_class_info(&lv, &cd_S3951C1);
    dp->~S3951C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3951C1(Test_S3951C1, "S3951C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S3951C1C1Ev();
extern void _ZN7S3951C1D1Ev();
Name_Map name_map_S3951C1[] = {
  NSPAIR(_ZN7S3951C1C1Ev),
  NSPAIR(_ZN7S3951C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3951C2;
extern VTBL_ENTRY _ZTI7S3951C2[];
extern  VTBL_ENTRY _ZTV7S3951C2[];
static Base_Class bases_S3951C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3951C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3951C1[];
extern void _ZN7S3951C1D1Ev();
extern void _ZN7S3951C1D0Ev();
extern void _ZN7S3951C23v10Ev();
extern void _ZN7S3951C23v11Ev();
extern void _ZN7S3951C23v12Ev();
extern void _ZN7S3951C23v13Ev();
extern void _ZN7S3951C23v14Ev();
extern void _ZN7S3951C23v15Ev();
extern void _ZN7S3951C23v16Ev();
extern void _ZN7S3951C23v17Ev();
extern void _ZN7S3951C23v18Ev();
extern void _ZN7S3951C23v19Ev();
extern void _ZN7S3951C23v20Ev();
extern void _ZN7S3951C12v1Ev();
extern void _ZN7S3951C12v2Ev();
extern void _ZN7S3951C12v3Ev();
extern void _ZN7S3951C12v4Ev();
extern void _ZN7S3951C12v5Ev();
extern void _ZN7S3951C12v6Ev();
extern void _ZN7S3951C12v7Ev();
extern void _ZN7S3951C12v8Ev();
extern void _ZN7S3951C12v9Ev();
static  VTBL_ENTRY vtc_S3951C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3951C1[0]),
  (VTBL_ENTRY)&_ZN7S3951C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3951C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3951C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3951C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3951C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3951C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3951C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3951C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3951C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3951C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3951C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3951C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S3951C1[];
extern  VTBL_ENTRY _ZTV7S3951C1[];
Class_Descriptor cd_S3951C1 = {  "S3951C1", // class name
  bases_S3951C1, 2,
  &(vtc_S3951C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S3951C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3951C1),24, //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  S20138C2  {
  ::S20508C4 s20138c2f0;
  __tsi64 s20138c2f1;
  long double s20138c2f2;
  virtual void  v3(); // _ZN8S20138C22v3Ev
  virtual void  v4(); // _ZN8S20138C22v4Ev
  virtual void  v5(); // _ZN8S20138C22v5Ev
  virtual void  v6(); // _ZN8S20138C22v6Ev
  virtual void  v7(); // _ZN8S20138C22v7Ev
  virtual void  v8(); // _ZN8S20138C22v8Ev
  ~S20138C2(); // tgen
  S20138C2(); // tgen
};
//SIG(-1 S20138C2) C1{ v1 v2 v3 v4 v5 v6 FC2{ v7 v8 v9} FL FD}


void  S20138C2 ::v3(){vfunc_called(this, "_ZN8S20138C22v3Ev");}
void  S20138C2 ::v4(){vfunc_called(this, "_ZN8S20138C22v4Ev");}
void  S20138C2 ::v5(){vfunc_called(this, "_ZN8S20138C22v5Ev");}
void  S20138C2 ::v6(){vfunc_called(this, "_ZN8S20138C22v6Ev");}
void  S20138C2 ::v7(){vfunc_called(this, "_ZN8S20138C22v7Ev");}
void  S20138C2 ::v8(){vfunc_called(this, "_ZN8S20138C22v8Ev");}
S20138C2 ::~S20138C2(){ note_dtor("S20138C2", this);} // tgen
S20138C2 ::S20138C2(){ note_ctor("S20138C2", this);} // tgen

static void Test_S20138C2()
{
  extern Class_Descriptor cd_S20138C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S20138C2, buf);
    S20138C2 *dp, &lv = *(dp=new (buf) S20138C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S20138C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20138C2)");
    check_field_offset(lv, s20138c2f0, ABISELECT(8,4), "S20138C2.s20138c2f0");
    check_field_offset(lv, s20138c2f1, ABISELECT(16,8), "S20138C2.s20138c2f1");
    check_field_offset(lv, s20138c2f2, ABISELECT(32,16), "S20138C2.s20138c2f2");
    test_class_info(&lv, &cd_S20138C2);
    dp->~S20138C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20138C2(Test_S20138C2, "S20138C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S20138C2C1Ev();
extern void _ZN8S20138C2D1Ev();
Name_Map name_map_S20138C2[] = {
  NSPAIR(_ZN8S20138C2C1Ev),
  NSPAIR(_ZN8S20138C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20138C2[];
extern void _ZN8S20138C22v3Ev();
extern void _ZN8S20138C22v4Ev();
extern void _ZN8S20138C22v5Ev();
extern void _ZN8S20138C22v6Ev();
extern void _ZN8S20138C22v7Ev();
extern void _ZN8S20138C22v8Ev();
static  VTBL_ENTRY vtc_S20138C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20138C2[0]),
  (VTBL_ENTRY)&_ZN8S20138C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v8Ev,
};
extern VTBL_ENTRY _ZTI8S20138C2[];
extern  VTBL_ENTRY _ZTV8S20138C2[];
Class_Descriptor cd_S20138C2 = {  "S20138C2", // class name
  0,0,//no base classes
  &(vtc_S20138C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S20138C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20138C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20138C4  : S20138C2 {
  int s20138c4f0;
  ::S20508C6 s20138c4f1;
  char s20138c4f2[7];
  virtual void  v9(); // _ZN8S20138C42v9Ev
  virtual void  v10(); // _ZN8S20138C43v10Ev
  virtual void  v11(); // _ZN8S20138C43v11Ev
  virtual void  v12(); // _ZN8S20138C43v12Ev
  ~S20138C4(); // tgen
  S20138C4(); // tgen
};
//SIG(-1 S20138C4) C1{ BC2{ v5 v6 v7 v8 v9 v10 FC3{ v11 v12 v13} FL FD} v1 v2 v3 v4 Fi FC4{ vd v14 v15 v16 Fp[10] FC3} Fc[7]}


void  S20138C4 ::v9(){vfunc_called(this, "_ZN8S20138C42v9Ev");}
void  S20138C4 ::v10(){vfunc_called(this, "_ZN8S20138C43v10Ev");}
void  S20138C4 ::v11(){vfunc_called(this, "_ZN8S20138C43v11Ev");}
void  S20138C4 ::v12(){vfunc_called(this, "_ZN8S20138C43v12Ev");}
S20138C4 ::~S20138C4(){ note_dtor("S20138C4", this);} // tgen
S20138C4 ::S20138C4(){ note_ctor("S20138C4", this);} // tgen

static void Test_S20138C4()
{
  extern Class_Descriptor cd_S20138C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,23)];
    init_test(&cd_S20138C4, buf);
    S20138C4 *dp, &lv = *(dp=new (buf) S20138C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,88), "sizeof(S20138C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20138C4)");
    check_base_class_offset(lv, (S20138C2*), 0, "S20138C4");
    check_field_offset(lv, s20138c4f0, ABISELECT(48,28), "S20138C4.s20138c4f0");
    check_field_offset(lv, s20138c4f1, ABISELECT(56,32), "S20138C4.s20138c4f1");
    check_field_offset(lv, s20138c4f2, ABISELECT(152,80), "S20138C4.s20138c4f2");
    test_class_info(&lv, &cd_S20138C4);
    dp->~S20138C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20138C4(Test_S20138C4, "S20138C4", ABISELECT(160,88));

#else // __cplusplus

extern void _ZN8S20138C4C1Ev();
extern void _ZN8S20138C4D1Ev();
Name_Map name_map_S20138C4[] = {
  NSPAIR(_ZN8S20138C4C1Ev),
  NSPAIR(_ZN8S20138C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20138C2;
extern VTBL_ENTRY _ZTI8S20138C2[];
extern  VTBL_ENTRY _ZTV8S20138C2[];
static Base_Class bases_S20138C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20138C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20138C4[];
extern void _ZN8S20138C22v3Ev();
extern void _ZN8S20138C22v4Ev();
extern void _ZN8S20138C22v5Ev();
extern void _ZN8S20138C22v6Ev();
extern void _ZN8S20138C22v7Ev();
extern void _ZN8S20138C22v8Ev();
extern void _ZN8S20138C42v9Ev();
extern void _ZN8S20138C43v10Ev();
extern void _ZN8S20138C43v11Ev();
extern void _ZN8S20138C43v12Ev();
static  VTBL_ENTRY vtc_S20138C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20138C4[0]),
  (VTBL_ENTRY)&_ZN8S20138C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20138C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20138C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20138C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20138C43v12Ev,
};
extern VTBL_ENTRY _ZTI8S20138C4[];
extern  VTBL_ENTRY _ZTV8S20138C4[];
Class_Descriptor cd_S20138C4 = {  "S20138C4", // class name
  bases_S20138C4, 1,
  &(vtc_S20138C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,88), // object size
  NSPAIRA(_ZTI8S20138C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20138C4),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20138C1  : virtual S20138C2 , S20138C4 {
  virtual void  v1(); // _ZN8S20138C12v1Ev
  virtual void  v2(); // _ZN8S20138C12v2Ev
  ~S20138C1(); // tgen
  S20138C1(); // tgen
};
//SIG(1 S20138C1) C1{ VBC2{ v3 v4 v5 v6 v7 v8 FC3{ v13 v14 v15} FL FD} BC4{ BC2 v9 v10 v11 v12 Fi FC5{ vd v16 v17 v18 Fp[10] FC3} Fc[7]} v1 v2}


void  S20138C1 ::v1(){vfunc_called(this, "_ZN8S20138C12v1Ev");}
void  S20138C1 ::v2(){vfunc_called(this, "_ZN8S20138C12v2Ev");}
S20138C1 ::~S20138C1(){ note_dtor("S20138C1", this);} // tgen
S20138C1 ::S20138C1(){ note_ctor("S20138C1", this);} // tgen

static void Test_S20138C1()
{
  extern Class_Descriptor cd_S20138C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,30)];
    init_test(&cd_S20138C1, buf);
    S20138C1 *dp, &lv = *(dp=new (buf) S20138C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,116), "sizeof(S20138C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20138C1)");
    /*is_ambiguous_... S20138C1::S20138C2 */ AMB_check_base_class_offset(lv, (S20138C2*), ABISELECT(160,88), "S20138C1");
    check_base_class_offset(lv, (S20138C2*)(S20138C4*), 0, "S20138C1");
    check_base_class_offset(lv, (S20138C4*), 0, "S20138C1");
    test_class_info(&lv, &cd_S20138C1);
    dp->~S20138C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20138C1(Test_S20138C1, "S20138C1", ABISELECT(208,116));

#else // __cplusplus

extern void _ZN8S20138C1C1Ev();
extern void _ZN8S20138C1D1Ev();
Name_Map name_map_S20138C1[] = {
  NSPAIR(_ZN8S20138C1C1Ev),
  NSPAIR(_ZN8S20138C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20138C2;
extern VTBL_ENTRY _ZTI8S20138C2[];
extern  VTBL_ENTRY _ZTV8S20138C2[];
extern Class_Descriptor cd_S20138C2;
extern VTBL_ENTRY _ZTI8S20138C2[];
extern  VTBL_ENTRY _ZTV8S20138C2[];
extern Class_Descriptor cd_S20138C4;
extern VTBL_ENTRY _ZTI8S20138C4[];
extern  VTBL_ENTRY _ZTV8S20138C4[];
static Base_Class bases_S20138C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20138C2,    ABISELECT(160,88), //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_S20138C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20138C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20138C1[];
extern void _ZN8S20138C22v3Ev();
extern void _ZN8S20138C22v4Ev();
extern void _ZN8S20138C22v5Ev();
extern void _ZN8S20138C22v6Ev();
extern void _ZN8S20138C22v7Ev();
extern void _ZN8S20138C22v8Ev();
extern void _ZN8S20138C42v9Ev();
extern void _ZN8S20138C43v10Ev();
extern void _ZN8S20138C43v11Ev();
extern void _ZN8S20138C43v12Ev();
extern void _ZN8S20138C12v1Ev();
extern void _ZN8S20138C12v2Ev();
extern void _ZN8S20138C22v3Ev();
extern void _ZN8S20138C22v4Ev();
extern void _ZN8S20138C22v5Ev();
extern void _ZN8S20138C22v6Ev();
extern void _ZN8S20138C22v7Ev();
extern void _ZN8S20138C22v8Ev();
static  VTBL_ENTRY vtc_S20138C1[] = {
  ABISELECT(160,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20138C1[0]),
  (VTBL_ENTRY)&_ZN8S20138C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20138C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20138C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20138C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20138C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20138C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20138C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S20138C1[0]),
  (VTBL_ENTRY)&_ZN8S20138C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20138C22v8Ev,
};
extern VTBL_ENTRY _ZTV8S20138C1[];
static  VTT_ENTRY vtt_S20138C1[] = {
  {&(_ZTV8S20138C1[3]),  3,29},
  {&(_ZTV8S20138C1[23]),  23,29},
};
extern VTBL_ENTRY _ZTI8S20138C1[];
extern  VTBL_ENTRY _ZTV8S20138C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20138C1[];
Class_Descriptor cd_S20138C1 = {  "S20138C1", // class name
  bases_S20138C1, 3,
  &(vtc_S20138C1[0]), // expected_vtbl_contents
  &(vtt_S20138C1[0]), // expected_vtt_contents
  ABISELECT(208,116), // object size
  NSPAIRA(_ZTI8S20138C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20138C1),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20138C1),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1338C4  {
  virtual void  v2(); // _ZN7S1338C42v2Ev
  virtual void  v3(); // _ZN7S1338C42v3Ev
  virtual void  v4(); // _ZN7S1338C42v4Ev
  ~S1338C4(); // tgen
  S1338C4(); // tgen
};
//SIG(-1 S1338C4) C1{ v1 v2 v3}


void  S1338C4 ::v2(){vfunc_called(this, "_ZN7S1338C42v2Ev");}
void  S1338C4 ::v3(){vfunc_called(this, "_ZN7S1338C42v3Ev");}
void  S1338C4 ::v4(){vfunc_called(this, "_ZN7S1338C42v4Ev");}
S1338C4 ::~S1338C4(){ note_dtor("S1338C4", this);} // tgen
S1338C4 ::S1338C4(){ note_ctor("S1338C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1338C4C1Ev();
extern void _ZN7S1338C4D1Ev();
Name_Map name_map_S1338C4[] = {
  NSPAIR(_ZN7S1338C4C1Ev),
  NSPAIR(_ZN7S1338C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1338C4[];
extern void _ZN7S1338C42v2Ev();
extern void _ZN7S1338C42v3Ev();
extern void _ZN7S1338C42v4Ev();
static  VTBL_ENTRY vtc_S1338C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1338C4[0]),
  (VTBL_ENTRY)&_ZN7S1338C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1338C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1338C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S1338C4[];
extern  VTBL_ENTRY _ZTV7S1338C4[];
Class_Descriptor cd_S1338C4 = {  "S1338C4", // class name
  0,0,//no base classes
  &(vtc_S1338C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1338C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1338C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1338C3  : S1338C4 {
  void *s1338c3f0;
  virtual  ~S1338C3(); // _ZN7S1338C3D1Ev
  virtual void  v5(); // _ZN7S1338C32v5Ev
  virtual void  v6(); // _ZN7S1338C32v6Ev
  virtual void  v7(); // _ZN7S1338C32v7Ev
  virtual void  v8(); // _ZN7S1338C32v8Ev
  virtual void  v9(); // _ZN7S1338C32v9Ev
  S1338C3(); // tgen
};
//SIG(-1 S1338C3) C1{ BC2{ v6 v7 v8} vd v1 v2 v3 v4 v5 Fp}


 S1338C3 ::~S1338C3(){ note_dtor("S1338C3", this);}
void  S1338C3 ::v5(){vfunc_called(this, "_ZN7S1338C32v5Ev");}
void  S1338C3 ::v6(){vfunc_called(this, "_ZN7S1338C32v6Ev");}
void  S1338C3 ::v7(){vfunc_called(this, "_ZN7S1338C32v7Ev");}
void  S1338C3 ::v8(){vfunc_called(this, "_ZN7S1338C32v8Ev");}
void  S1338C3 ::v9(){vfunc_called(this, "_ZN7S1338C32v9Ev");}
S1338C3 ::S1338C3(){ note_ctor("S1338C3", this);} // tgen

static void Test_S1338C3()
{
  extern Class_Descriptor cd_S1338C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1338C3, buf);
    S1338C3 *dp, &lv = *(dp=new (buf) S1338C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1338C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1338C3)");
    check_base_class_offset(lv, (S1338C4*), 0, "S1338C3");
    check_field_offset(lv, s1338c3f0, ABISELECT(8,4), "S1338C3.s1338c3f0");
    test_class_info(&lv, &cd_S1338C3);
    dp->~S1338C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1338C3(Test_S1338C3, "S1338C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1338C3C1Ev();
extern void _ZN7S1338C3D1Ev();
Name_Map name_map_S1338C3[] = {
  NSPAIR(_ZN7S1338C3C1Ev),
  NSPAIR(_ZN7S1338C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1338C4;
extern VTBL_ENTRY _ZTI7S1338C4[];
extern  VTBL_ENTRY _ZTV7S1338C4[];
static Base_Class bases_S1338C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1338C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1338C3[];
extern void _ZN7S1338C42v2Ev();
extern void _ZN7S1338C42v3Ev();
extern void _ZN7S1338C42v4Ev();
extern void _ZN7S1338C3D1Ev();
extern void _ZN7S1338C3D0Ev();
extern void _ZN7S1338C32v5Ev();
extern void _ZN7S1338C32v6Ev();
extern void _ZN7S1338C32v7Ev();
extern void _ZN7S1338C32v8Ev();
extern void _ZN7S1338C32v9Ev();
static  VTBL_ENTRY vtc_S1338C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1338C3[0]),
  (VTBL_ENTRY)&_ZN7S1338C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1338C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1338C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1338C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1338C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S1338C3[];
extern  VTBL_ENTRY _ZTV7S1338C3[];
Class_Descriptor cd_S1338C3 = {  "S1338C3", // class name
  bases_S1338C3, 1,
  &(vtc_S1338C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1338C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1338C3),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  S1338C5  {
  ::S1338C4 s1338c5f0;
  __tsi64 s1338c5f1;
  long double s1338c5f2;
  virtual void  v10(); // _ZN7S1338C53v10Ev
  virtual void  v11(); // _ZN7S1338C53v11Ev
  virtual void  v12(); // _ZN7S1338C53v12Ev
  virtual void  v13(); // _ZN7S1338C53v13Ev
  virtual void  v14(); // _ZN7S1338C53v14Ev
  virtual void  v15(); // _ZN7S1338C53v15Ev
  ~S1338C5(); // tgen
  S1338C5(); // tgen
};
//SIG(-1 S1338C5) C1{ v1 v2 v3 v4 v5 v6 FC2{ v7 v8 v9} FL FD}


void  S1338C5 ::v10(){vfunc_called(this, "_ZN7S1338C53v10Ev");}
void  S1338C5 ::v11(){vfunc_called(this, "_ZN7S1338C53v11Ev");}
void  S1338C5 ::v12(){vfunc_called(this, "_ZN7S1338C53v12Ev");}
void  S1338C5 ::v13(){vfunc_called(this, "_ZN7S1338C53v13Ev");}
void  S1338C5 ::v14(){vfunc_called(this, "_ZN7S1338C53v14Ev");}
void  S1338C5 ::v15(){vfunc_called(this, "_ZN7S1338C53v15Ev");}
S1338C5 ::~S1338C5(){ note_dtor("S1338C5", this);} // tgen
S1338C5 ::S1338C5(){ note_ctor("S1338C5", this);} // tgen

static void Test_S1338C5()
{
  extern Class_Descriptor cd_S1338C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S1338C5, buf);
    S1338C5 *dp, &lv = *(dp=new (buf) S1338C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1338C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1338C5)");
    check_field_offset(lv, s1338c5f0, ABISELECT(8,4), "S1338C5.s1338c5f0");
    check_field_offset(lv, s1338c5f1, ABISELECT(16,8), "S1338C5.s1338c5f1");
    check_field_offset(lv, s1338c5f2, ABISELECT(32,16), "S1338C5.s1338c5f2");
    test_class_info(&lv, &cd_S1338C5);
    dp->~S1338C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1338C5(Test_S1338C5, "S1338C5", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1338C5C1Ev();
extern void _ZN7S1338C5D1Ev();
Name_Map name_map_S1338C5[] = {
  NSPAIR(_ZN7S1338C5C1Ev),
  NSPAIR(_ZN7S1338C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1338C5[];
extern void _ZN7S1338C53v10Ev();
extern void _ZN7S1338C53v11Ev();
extern void _ZN7S1338C53v12Ev();
extern void _ZN7S1338C53v13Ev();
extern void _ZN7S1338C53v14Ev();
extern void _ZN7S1338C53v15Ev();
static  VTBL_ENTRY vtc_S1338C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1338C5[0]),
  (VTBL_ENTRY)&_ZN7S1338C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v15Ev,
};
extern VTBL_ENTRY _ZTI7S1338C5[];
extern  VTBL_ENTRY _ZTV7S1338C5[];
Class_Descriptor cd_S1338C5 = {  "S1338C5", // class name
  0,0,//no base classes
  &(vtc_S1338C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1338C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1338C5),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1338C2  : S1338C3 , S1338C5 {
  void *s1338c2f0;
  virtual  ~S1338C2(); // _ZN7S1338C2D1Ev
  virtual void  v16(); // _ZN7S1338C23v16Ev
  virtual void  v17(); // _ZN7S1338C23v17Ev
  virtual void  v18(); // _ZN7S1338C23v18Ev
  virtual void  v19(); // _ZN7S1338C23v19Ev
  virtual void  v20(); // _ZN7S1338C23v20Ev
  S1338C2(); // tgen
};
//SIG(-1 S1338C2) C1{ BC2{ BC3{ v6 v7 v8} vd v9 v10 v11 v12 v13 Fp} BC4{ v14 v15 v16 v17 v18 v19 FC3 FL FD} vd v1 v2 v3 v4 v5 Fp}


 S1338C2 ::~S1338C2(){ note_dtor("S1338C2", this);}
void  S1338C2 ::v16(){vfunc_called(this, "_ZN7S1338C23v16Ev");}
void  S1338C2 ::v17(){vfunc_called(this, "_ZN7S1338C23v17Ev");}
void  S1338C2 ::v18(){vfunc_called(this, "_ZN7S1338C23v18Ev");}
void  S1338C2 ::v19(){vfunc_called(this, "_ZN7S1338C23v19Ev");}
void  S1338C2 ::v20(){vfunc_called(this, "_ZN7S1338C23v20Ev");}
S1338C2 ::S1338C2(){ note_ctor("S1338C2", this);} // tgen

static void Test_S1338C2()
{
  extern Class_Descriptor cd_S1338C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,11)];
    init_test(&cd_S1338C2, buf);
    S1338C2 *dp, &lv = *(dp=new (buf) S1338C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S1338C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1338C2)");
    check_base_class_offset(lv, (S1338C4*)(S1338C3*), 0, "S1338C2");
    check_base_class_offset(lv, (S1338C3*), 0, "S1338C2");
    check_base_class_offset(lv, (S1338C5*), ABISELECT(16,8), "S1338C2");
    check_field_offset(lv, s1338c2f0, ABISELECT(64,36), "S1338C2.s1338c2f0");
    test_class_info(&lv, &cd_S1338C2);
    dp->~S1338C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1338C2(Test_S1338C2, "S1338C2", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN7S1338C2C1Ev();
extern void _ZN7S1338C2D1Ev();
Name_Map name_map_S1338C2[] = {
  NSPAIR(_ZN7S1338C2C1Ev),
  NSPAIR(_ZN7S1338C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1338C4;
extern VTBL_ENTRY _ZTI7S1338C4[];
extern  VTBL_ENTRY _ZTV7S1338C4[];
extern Class_Descriptor cd_S1338C3;
extern VTBL_ENTRY _ZTI7S1338C3[];
extern  VTBL_ENTRY _ZTV7S1338C3[];
extern Class_Descriptor cd_S1338C5;
extern VTBL_ENTRY _ZTI7S1338C5[];
extern  VTBL_ENTRY _ZTV7S1338C5[];
static Base_Class bases_S1338C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1338C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1338C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1338C5,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_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 _ZTI7S1338C2[];
extern void _ZN7S1338C42v2Ev();
extern void _ZN7S1338C42v3Ev();
extern void _ZN7S1338C42v4Ev();
extern void _ZN7S1338C2D1Ev();
extern void _ZN7S1338C2D0Ev();
extern void _ZN7S1338C32v5Ev();
extern void _ZN7S1338C32v6Ev();
extern void _ZN7S1338C32v7Ev();
extern void _ZN7S1338C32v8Ev();
extern void _ZN7S1338C32v9Ev();
extern void _ZN7S1338C23v16Ev();
extern void _ZN7S1338C23v17Ev();
extern void _ZN7S1338C23v18Ev();
extern void _ZN7S1338C23v19Ev();
extern void _ZN7S1338C23v20Ev();
extern void _ZN7S1338C53v10Ev();
extern void _ZN7S1338C53v11Ev();
extern void _ZN7S1338C53v12Ev();
extern void _ZN7S1338C53v13Ev();
extern void _ZN7S1338C53v14Ev();
extern void _ZN7S1338C53v15Ev();
static  VTBL_ENTRY vtc_S1338C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1338C2[0]),
  (VTBL_ENTRY)&_ZN7S1338C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1338C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1338C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1338C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1338C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1338C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1338C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1338C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1338C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1338C23v20Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1338C2[0]),
  (VTBL_ENTRY)&_ZN7S1338C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v15Ev,
};
extern VTBL_ENTRY _ZTI7S1338C2[];
extern  VTBL_ENTRY _ZTV7S1338C2[];
Class_Descriptor cd_S1338C2 = {  "S1338C2", // class name
  bases_S1338C2, 3,
  &(vtc_S1338C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI7S1338C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1338C2),25, //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  S1338C1  : S1338C2 {
  virtual  ~S1338C1(); // _ZN7S1338C1D1Ev
  virtual void  v1(); // _ZN7S1338C12v1Ev
  S1338C1(); // tgen
};
//SIG(1 S1338C1) C1{ BC2{ BC3{ BC4{ v2 v3 v4} vd v5 v6 v7 v8 v9 Fp} BC5{ v10 v11 v12 v13 v14 v15 FC4 FL FD} vd v16 v17 v18 v19 v20 Fp} vd v1}


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

static void Test_S1338C1()
{
  extern Class_Descriptor cd_S1338C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,11)];
    init_test(&cd_S1338C1, buf);
    S1338C1 *dp, &lv = *(dp=new (buf) S1338C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S1338C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1338C1)");
    check_base_class_offset(lv, (S1338C4*)(S1338C3*)(S1338C2*), 0, "S1338C1");
    check_base_class_offset(lv, (S1338C3*)(S1338C2*), 0, "S1338C1");
    check_base_class_offset(lv, (S1338C5*)(S1338C2*), ABISELECT(16,8), "S1338C1");
    check_base_class_offset(lv, (S1338C2*), 0, "S1338C1");
    test_class_info(&lv, &cd_S1338C1);
    dp->~S1338C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1338C1(Test_S1338C1, "S1338C1", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN7S1338C1C1Ev();
extern void _ZN7S1338C1D1Ev();
Name_Map name_map_S1338C1[] = {
  NSPAIR(_ZN7S1338C1C1Ev),
  NSPAIR(_ZN7S1338C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1338C4;
extern VTBL_ENTRY _ZTI7S1338C4[];
extern  VTBL_ENTRY _ZTV7S1338C4[];
extern Class_Descriptor cd_S1338C3;
extern VTBL_ENTRY _ZTI7S1338C3[];
extern  VTBL_ENTRY _ZTV7S1338C3[];
extern Class_Descriptor cd_S1338C5;
extern VTBL_ENTRY _ZTI7S1338C5[];
extern  VTBL_ENTRY _ZTV7S1338C5[];
extern Class_Descriptor cd_S1338C2;
extern VTBL_ENTRY _ZTI7S1338C2[];
extern  VTBL_ENTRY _ZTV7S1338C2[];
static Base_Class bases_S1338C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1338C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1338C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1338C5,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_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_S1338C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1338C1[];
extern void _ZN7S1338C42v2Ev();
extern void _ZN7S1338C42v3Ev();
extern void _ZN7S1338C42v4Ev();
extern void _ZN7S1338C1D1Ev();
extern void _ZN7S1338C1D0Ev();
extern void _ZN7S1338C32v5Ev();
extern void _ZN7S1338C32v6Ev();
extern void _ZN7S1338C32v7Ev();
extern void _ZN7S1338C32v8Ev();
extern void _ZN7S1338C32v9Ev();
extern void _ZN7S1338C23v16Ev();
extern void _ZN7S1338C23v17Ev();
extern void _ZN7S1338C23v18Ev();
extern void _ZN7S1338C23v19Ev();
extern void _ZN7S1338C23v20Ev();
extern void _ZN7S1338C12v1Ev();
extern void _ZN7S1338C53v10Ev();
extern void _ZN7S1338C53v11Ev();
extern void _ZN7S1338C53v12Ev();
extern void _ZN7S1338C53v13Ev();
extern void _ZN7S1338C53v14Ev();
extern void _ZN7S1338C53v15Ev();
static  VTBL_ENTRY vtc_S1338C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1338C1[0]),
  (VTBL_ENTRY)&_ZN7S1338C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1338C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1338C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1338C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1338C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1338C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1338C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1338C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1338C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1338C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1338C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1338C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1338C1[0]),
  (VTBL_ENTRY)&_ZN7S1338C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1338C53v15Ev,
};
extern VTBL_ENTRY _ZTI7S1338C1[];
extern  VTBL_ENTRY _ZTV7S1338C1[];
Class_Descriptor cd_S1338C1 = {  "S1338C1", // class name
  bases_S1338C1, 4,
  &(vtc_S1338C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI7S1338C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1338C1),26, //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  S19202C9  : virtual S19863C6 , virtual S19863C8 , virtual S19863C2_nt {
  void *s19202c9f0;
  ~S19202C9(); // tgen
  S19202C9(); // tgen
};
//SIG(-1 S19202C9) C1{ VBC2{ vd m FC3{ VBC4{ m} VBC5{ m Fi} vd FD[10]}} VBC4 VBC6{ m} Fp}


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

static void Test_S19202C9()
{
  extern Class_Descriptor cd_S19202C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,36)];
    init_test(&cd_S19202C9, buf);
    S19202C9 *dp, &lv = *(dp=new (buf) S19202C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S19202C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19202C9)");
    check_base_class_offset(lv, (S19863C6*), ABISELECT(16,8), "S19202C9");
    check_base_class_offset(lv, (S19863C8*), 0, "S19202C9");
    check_base_class_offset(lv, (S19863C2_nt*), 0, "S19202C9");
    check_field_offset(lv, s19202c9f0, ABISELECT(8,4), "S19202C9.s19202c9f0");
    test_class_info(&lv, &cd_S19202C9);
    dp->~S19202C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19202C9(Test_S19202C9, "S19202C9", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN8S19202C9C1Ev();
extern void _ZN8S19202C9D1Ev();
Name_Map name_map_S19202C9[] = {
  NSPAIR(_ZN8S19202C9C1Ev),
  NSPAIR(_ZN8S19202C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
static Base_Class bases_S19202C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C6,    ABISELECT(16,8), //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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C2_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19202C9[];
extern void _ZN8S19202C9D1Ev();
extern void _ZN8S19202C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19202C9D1Ev,_ZTv0_n12_N8S19202C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19202C9D1Ev,_ZThn8_N8S19202C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19202C9D0Ev,_ZTv0_n12_N8S19202C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19202C9D0Ev,_ZThn8_N8S19202C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19202C9[] = {
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19202C9[0]),
  (VTBL_ENTRY)&_ZN8S19202C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19202C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19202C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19202C9D1Ev,_ZTv0_n12_N8S19202C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19202C9D0Ev,_ZTv0_n12_N8S19202C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19202C9[];
static  VTT_ENTRY vtt_S19202C9[] = {
  {&(_ZTV8S19202C9[5]),  5,12},
  {&(_ZTV8S19202C9[10]),  10,12},
};
extern VTBL_ENTRY _ZTI8S19202C9[];
extern  VTBL_ENTRY _ZTV8S19202C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19202C9[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19202C9D0Ev,_ZTv0_n12_N8S19202C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19202C9D0Ev,_ZThn8_N8S19202C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19202C9D1Ev,_ZTv0_n12_N8S19202C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19202C9D1Ev,_ZThn8_N8S19202C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19202C9 = {  "S19202C9", // class name
  bases_S19202C9, 3,
  &(vtc_S19202C9[0]), // expected_vtbl_contents
  &(vtt_S19202C9[0]), // expected_vtt_contents
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI8S19202C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19202C9),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19202C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19202C2  : S19863C10 , S19863C20 , virtual S19863C8 , virtual S19202C9 {
  ::S19863C9_nt s19202c2f0;
  ~S19202C2(); // tgen
  S19202C2(); // tgen
};
//SIG(-1 S19202C2) C1{ BC2{ m} BC3{ m FC4{ VBC5{ m} VBC6{ m Fi} vd FD[10]}[3] Fp} VBC5 VBC7{ VBC8{ vd m FC4} VBC5 VBC9{ m} Fp} FC6}


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

static void Test_S19202C2()
{
  extern Class_Descriptor cd_S19202C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,135)];
    init_test(&cd_S19202C2, buf);
    S19202C2 *dp, &lv = *(dp=new (buf) S19202C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,536), "sizeof(S19202C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19202C2)");
    check_base_class_offset(lv, (S19863C10*), 0, "S19202C2");
    check_base_class_offset(lv, (S19863C20*), ABISELECT(16,4), "S19202C2");
    check_base_class_offset(lv, (S19863C8*), 0, "S19202C2");
    check_base_class_offset(lv, (S19863C8*)(S19202C9*), 0, "S19202C2");
    check_base_class_offset(lv, (S19863C6*)(S19202C9*), ABISELECT(624,404), "S19202C2");
    check_base_class_offset(lv, (S19863C2_nt*)(S19202C9*), 0, "S19202C2");
    check_base_class_offset(lv, (S19202C9*), ABISELECT(608,396), "S19202C2");
    check_field_offset(lv, s19202c2f0, ABISELECT(600,392), "S19202C2.s19202c2f0");
    test_class_info(&lv, &cd_S19202C2);
    dp->~S19202C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19202C2(Test_S19202C2, "S19202C2", ABISELECT(832,536));

#else // __cplusplus

extern void _ZN8S19202C2C1Ev();
extern void _ZN8S19202C2D1Ev();
Name_Map name_map_S19202C2[] = {
  NSPAIR(_ZN8S19202C2C1Ev),
  NSPAIR(_ZN8S19202C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19202C9;
extern VTBL_ENTRY _ZTI8S19202C9[];
extern  VTBL_ENTRY _ZTV8S19202C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19202C9[];
static Base_Class bases_S19202C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C20,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C6,    ABISELECT(624,404), //bcp->offset
    16, //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
    5, //immediately_derived
  0, 1},
  {&cd_S19863C2_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
    5, //immediately_derived
  0, 1},
  {&cd_S19202C9,    ABISELECT(608,396), //bcp->offset
    8, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19202C2[];
extern void _ZN8S19202C2D1Ev();
extern void _ZN8S19202C2D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S19202C2D1Ev,_ZTv0_n24_N8S19202C2D1Ev)();
extern void ABISELECT(_ZThn608_N8S19202C2D1Ev,_ZThn396_N8S19202C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19202C2D0Ev,_ZTv0_n24_N8S19202C2D0Ev)();
extern void ABISELECT(_ZThn608_N8S19202C2D0Ev,_ZThn396_N8S19202C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19202C2D1Ev,_ZTv0_n12_N8S19202C2D1Ev)();
extern void ABISELECT(_ZThn624_N8S19202C2D1Ev,_ZThn404_N8S19202C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19202C2D0Ev,_ZTv0_n12_N8S19202C2D0Ev)();
extern void ABISELECT(_ZThn624_N8S19202C2D0Ev,_ZThn404_N8S19202C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19202C2[] = {
  0,
  ABISELECT(624,404),
  ABISELECT(608,396),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19202C2[0]),
  (VTBL_ENTRY)&_ZN8S19202C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19202C2D0Ev,
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(16,8),
  ABISELECT(-608,-396),
  (VTBL_ENTRY)&(_ZTI8S19202C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19202C2D1Ev,_ZTv0_n24_N8S19202C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19202C2D0Ev,_ZTv0_n24_N8S19202C2D0Ev),
  ABISELECT(-624,-404),
  ABISELECT(-624,-404),
  (VTBL_ENTRY)&(_ZTI8S19202C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19202C2D1Ev,_ZTv0_n12_N8S19202C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19202C2D0Ev,_ZTv0_n12_N8S19202C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19202C2[];
extern void _ZN8S19202C9D1Ev();
extern void _ZN8S19202C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19202C9__8S19202C2[] = {
  ABISELECT(-608,-396),
  ABISELECT(-608,-396),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19202C9[0]),
  (VTBL_ENTRY)&_ZN8S19202C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19202C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19202C9D1Ev,_ZTv0_n12_N8S19202C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19202C9D1Ev,_ZThn8_N8S19202C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19202C9D0Ev,_ZTv0_n12_N8S19202C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19202C9D0Ev,_ZThn8_N8S19202C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S19202C9__8S19202C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19202C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19202C9D1Ev,_ZTv0_n12_N8S19202C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19202C9D0Ev,_ZTv0_n12_N8S19202C9D0Ev),
};
static  VTT_ENTRY vtt_S19202C2[] = {
  {&(_ZTV8S19202C2[6]),  6,21},
  {&(_ZTV8S19202C2[14]),  14,21},
  {&(_ZTV8S19202C2[19]),  19,21},
  {&(_tg__ZTV8S19202C9__8S19202C2[5]),  5,7},
  {&(_tg__ZTV8S19863C6__8S19202C9__8S19202C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19202C2[];
extern  VTBL_ENTRY _ZTV8S19202C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19202C2[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19202C9D0Ev,_ZTv0_n12_N8S19202C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19202C9D0Ev,_ZThn8_N8S19202C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19202C9D1Ev,_ZTv0_n12_N8S19202C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19202C9D1Ev,_ZThn8_N8S19202C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19202C2D0Ev,_ZTv0_n12_N8S19202C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19202C2D0Ev,_ZThn404_N8S19202C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19202C2D1Ev,_ZTv0_n12_N8S19202C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19202C2D1Ev,_ZThn404_N8S19202C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19202C2D0Ev,_ZTv0_n24_N8S19202C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19202C2D0Ev,_ZThn396_N8S19202C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19202C2D1Ev,_ZTv0_n24_N8S19202C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19202C2D1Ev,_ZThn396_N8S19202C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19202C2 = {  "S19202C2", // class name
  bases_S19202C2, 6,
  &(vtc_S19202C2[0]), // expected_vtbl_contents
  &(vtt_S19202C2[0]), // expected_vtt_contents
  ABISELECT(832,536), // object size
  NSPAIRA(_ZTI8S19202C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19202C2),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19202C2),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19202C1  : virtual S19202C2 {
  virtual  ~S19202C1(); // _ZN8S19202C1D2Ev
  S19202C1(); // tgen
};
//SIG(1 S19202C1) C1{ VBC2{ BC3{ m} BC4{ m FC5{ VBC6{ m} VBC7{ m Fi} vd FD[10]}[3] Fp} VBC6 VBC8{ VBC9{ vd m FC5} VBC6 VBC10{ m} Fp} FC7} vd}


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

static void Test_S19202C1()
{
  extern Class_Descriptor cd_S19202C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,136)];
    init_test(&cd_S19202C1, buf);
    S19202C1 *dp, &lv = *(dp=new (buf) S19202C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,540), "sizeof(S19202C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19202C1)");
    check_base_class_offset(lv, (S19863C10*)(S19202C2*), ABISELECT(16,4), "S19202C1");
    check_base_class_offset(lv, (S19863C20*)(S19202C2*), ABISELECT(32,8), "S19202C1");
    check_base_class_offset(lv, (S19863C8*)(S19202C2*), 0, "S19202C1");
    check_base_class_offset(lv, (S19863C8*)(S19202C9*), 0, "S19202C1");
    check_base_class_offset(lv, (S19863C6*)(S19202C9*), ABISELECT(640,408), "S19202C1");
    check_base_class_offset(lv, (S19863C2_nt*)(S19202C9*), 0, "S19202C1");
    check_base_class_offset(lv, (S19202C9*)(S19202C2*), ABISELECT(624,400), "S19202C1");
    check_base_class_offset(lv, (S19202C2*), ABISELECT(16,4), "S19202C1");
    test_class_info(&lv, &cd_S19202C1);
    dp->~S19202C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19202C1(Test_S19202C1, "S19202C1", ABISELECT(848,540));

#else // __cplusplus

extern void _ZN8S19202C1C1Ev();
extern void _ZN8S19202C1D2Ev();
Name_Map name_map_S19202C1[] = {
  NSPAIR(_ZN8S19202C1C1Ev),
  NSPAIR(_ZN8S19202C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C20;
extern VTBL_ENTRY _ZTI9S19863C20[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C6;
extern VTBL_ENTRY _ZTI8S19863C6[];
extern  VTBL_ENTRY _ZTV8S19863C6[];
extern Class_Descriptor cd_S19863C2_nt;
extern VTBL_ENTRY _ZTI11S19863C2_nt[];
extern Class_Descriptor cd_S19202C9;
extern VTBL_ENTRY _ZTI8S19202C9[];
extern  VTBL_ENTRY _ZTV8S19202C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19202C9[];
extern Class_Descriptor cd_S19202C2;
extern VTBL_ENTRY _ZTI8S19202C2[];
extern  VTBL_ENTRY _ZTV8S19202C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19202C2[];
static Base_Class bases_S19202C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19863C20,    ABISELECT(32,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C6,    ABISELECT(640,408), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19863C2_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
    5, //immediately_derived
  0, 1},
  {&cd_S19202C9,    ABISELECT(624,400), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19202C2,    ABISELECT(16,4), //bcp->offset
    9, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19202C1[];
extern void _ZN8S19202C1D1Ev();
extern void _ZN8S19202C1D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S19202C1D1Ev,_ZTv0_n28_N8S19202C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19202C1D1Ev,_ZThn4_N8S19202C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19202C1D0Ev,_ZTv0_n28_N8S19202C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19202C1D0Ev,_ZThn4_N8S19202C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19202C1D1Ev,_ZTv0_n24_N8S19202C1D1Ev)();
extern void ABISELECT(_ZThn624_N8S19202C1D1Ev,_ZThn400_N8S19202C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19202C1D0Ev,_ZTv0_n24_N8S19202C1D0Ev)();
extern void ABISELECT(_ZThn624_N8S19202C1D0Ev,_ZThn400_N8S19202C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19202C1D1Ev,_ZTv0_n12_N8S19202C1D1Ev)();
extern void ABISELECT(_ZThn640_N8S19202C1D1Ev,_ZThn408_N8S19202C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19202C1D0Ev,_ZTv0_n12_N8S19202C1D0Ev)();
extern void ABISELECT(_ZThn640_N8S19202C1D0Ev,_ZThn408_N8S19202C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19202C1[] = {
  0,
  ABISELECT(640,408),
  ABISELECT(624,400),
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19202C1[0]),
  (VTBL_ENTRY)&_ZN8S19202C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19202C1D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(624,404),
  ABISELECT(608,396),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19202C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19202C1D1Ev,_ZTv0_n28_N8S19202C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19202C1D0Ev,_ZTv0_n28_N8S19202C1D0Ev),
  ABISELECT(-624,-400),
  ABISELECT(-624,-400),
  ABISELECT(-624,-400),
  ABISELECT(16,8),
  ABISELECT(-624,-400),
  (VTBL_ENTRY)&(_ZTI8S19202C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19202C1D1Ev,_ZTv0_n24_N8S19202C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19202C1D0Ev,_ZTv0_n24_N8S19202C1D0Ev),
  ABISELECT(-640,-408),
  ABISELECT(-640,-408),
  (VTBL_ENTRY)&(_ZTI8S19202C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19202C1D1Ev,_ZTv0_n12_N8S19202C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19202C1D0Ev,_ZTv0_n12_N8S19202C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19202C1[];
extern void _ZN8S19202C2D1Ev();
extern void _ZN8S19202C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19202C2__8S19202C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(624,404),
  ABISELECT(608,396),
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19202C2[0]),
  (VTBL_ENTRY)&_ZN8S19202C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19202C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19202C2D1Ev,_ZTv0_n24_N8S19202C2D1Ev)();
extern void ABISELECT(_ZThn608_N8S19202C2D1Ev,_ZThn396_N8S19202C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19202C2D0Ev,_ZTv0_n24_N8S19202C2D0Ev)();
extern void ABISELECT(_ZThn608_N8S19202C2D0Ev,_ZThn396_N8S19202C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19202C9__8S19202C2__8S19202C1[] = {
  ABISELECT(-608,-396),
  ABISELECT(-624,-400),
  ABISELECT(-624,-400),
  ABISELECT(16,8),
  ABISELECT(-608,-396),
  (VTBL_ENTRY)&(_ZTI8S19202C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19202C2D1Ev,_ZTv0_n24_N8S19202C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19202C2D0Ev,_ZTv0_n24_N8S19202C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19202C2D1Ev,_ZTv0_n12_N8S19202C2D1Ev)();
extern void ABISELECT(_ZThn624_N8S19202C2D1Ev,_ZThn404_N8S19202C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19202C2D0Ev,_ZTv0_n12_N8S19202C2D0Ev)();
extern void ABISELECT(_ZThn624_N8S19202C2D0Ev,_ZThn404_N8S19202C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S19202C2__8S19202C1[] = {
  ABISELECT(-624,-404),
  ABISELECT(-624,-404),
  (VTBL_ENTRY)&(_ZTI8S19202C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19202C2D1Ev,_ZTv0_n12_N8S19202C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19202C2D0Ev,_ZTv0_n12_N8S19202C2D0Ev),
};
extern void _ZN8S19202C9D1Ev();
extern void _ZN8S19202C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19202C9__8S19202C1[] = {
  ABISELECT(-624,-400),
  ABISELECT(-624,-400),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19202C9[0]),
  (VTBL_ENTRY)&_ZN8S19202C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19202C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19202C9D1Ev,_ZTv0_n12_N8S19202C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19202C9D1Ev,_ZThn8_N8S19202C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19202C9D0Ev,_ZTv0_n12_N8S19202C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19202C9D0Ev,_ZThn8_N8S19202C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19863C6__8S19202C9__8S19202C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19202C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19202C9D1Ev,_ZTv0_n12_N8S19202C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19202C9D0Ev,_ZTv0_n12_N8S19202C9D0Ev),
};
static  VTT_ENTRY vtt_S19202C1[] = {
  {&(_ZTV8S19202C1[7]),  7,31},
  {&(_ZTV8S19202C1[16]),  16,31},
  {&(_ZTV8S19202C1[24]),  24,31},
  {&(_ZTV8S19202C1[29]),  29,31},
  {&(_tg__ZTV8S19202C2__8S19202C1[6]),  6,8},
  {&(_tg__ZTV8S19202C9__8S19202C2__8S19202C1[6]),  6,8},
  {&(_tg__ZTV8S19863C6__8S19202C2__8S19202C1[3]),  3,5},
  {&(_tg__ZTV8S19202C9__8S19202C1[5]),  5,7},
  {&(_tg__ZTV8S19863C6__8S19202C9__8S19202C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19202C1[];
extern  VTBL_ENTRY _ZTV8S19202C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19202C1[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19202C9D0Ev,_ZTv0_n12_N8S19202C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19202C9D0Ev,_ZThn8_N8S19202C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19202C9D1Ev,_ZTv0_n12_N8S19202C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19202C9D1Ev,_ZThn8_N8S19202C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19202C2D0Ev,_ZTv0_n12_N8S19202C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19202C2D0Ev,_ZThn404_N8S19202C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19202C2D1Ev,_ZTv0_n12_N8S19202C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19202C2D1Ev,_ZThn404_N8S19202C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19202C2D0Ev,_ZTv0_n24_N8S19202C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19202C2D0Ev,_ZThn396_N8S19202C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19202C2D1Ev,_ZTv0_n24_N8S19202C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19202C2D1Ev,_ZThn396_N8S19202C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19202C1D0Ev,_ZTv0_n12_N8S19202C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19202C1D0Ev,_ZThn408_N8S19202C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19202C1D1Ev,_ZTv0_n12_N8S19202C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19202C1D1Ev,_ZThn408_N8S19202C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19202C1D0Ev,_ZTv0_n24_N8S19202C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19202C1D0Ev,_ZThn400_N8S19202C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19202C1D1Ev,_ZTv0_n24_N8S19202C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19202C1D1Ev,_ZThn400_N8S19202C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19202C1D0Ev,_ZTv0_n28_N8S19202C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19202C1D0Ev,_ZThn4_N8S19202C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19202C1D1Ev,_ZTv0_n28_N8S19202C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19202C1D1Ev,_ZThn4_N8S19202C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19202C1 = {  "S19202C1", // class name
  bases_S19202C1, 7,
  &(vtc_S19202C1[0]), // expected_vtbl_contents
  &(vtt_S19202C1[0]), // expected_vtt_contents
  ABISELECT(848,540), // object size
  NSPAIRA(_ZTI8S19202C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19202C1),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19202C1),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2318C4_nt  {
  char s2318c4f0;
  int s2318c4f1;
  virtual  ~S2318C4_nt(); // _ZN10S2318C4_ntD1Ev
  virtual void  v5(); // _ZN10S2318C4_nt2v5Ev
  S2318C4_nt(); // tgen
};
//SIG(-1 S2318C4_nt) C1{ vd v1 Fc Fi}


 S2318C4_nt ::~S2318C4_nt(){ note_dtor("S2318C4_nt", this);}
void  S2318C4_nt ::v5(){vfunc_called(this, "_ZN10S2318C4_nt2v5Ev");}
S2318C4_nt ::S2318C4_nt(){ note_ctor("S2318C4_nt", this);} // tgen

//skip512 S2318C4_nt

#else // __cplusplus

extern void _ZN10S2318C4_ntC1Ev();
extern void _ZN10S2318C4_ntD1Ev();
Name_Map name_map_S2318C4_nt[] = {
  NSPAIR(_ZN10S2318C4_ntC1Ev),
  NSPAIR(_ZN10S2318C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2318C4_nt[];
extern void _ZN10S2318C4_ntD1Ev();
extern void _ZN10S2318C4_ntD0Ev();
extern void _ZN10S2318C4_nt2v5Ev();
static  VTBL_ENTRY vtc_S2318C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2318C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2318C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2318C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2318C4_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S2318C4_nt[];
VTBL_ENTRY *P__ZTI10S2318C4_nt = _ZTI10S2318C4_nt; 
extern  VTBL_ENTRY _ZTV10S2318C4_nt[];
Class_Descriptor cd_S2318C4_nt = {  "S2318C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2318C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S2318C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2318C4_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2318C3_nt  : S2318C4_nt {
  void *s2318c3f0;
  char s2318c3f1[2];
  virtual  ~S2318C3_nt(); // _ZN10S2318C3_ntD1Ev
  virtual void  v6(); // _ZN10S2318C3_nt2v6Ev
  S2318C3_nt(); // tgen
};
//SIG(-1 S2318C3_nt) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2318C3_nt ::~S2318C3_nt(){ note_dtor("S2318C3_nt", this);}
void  S2318C3_nt ::v6(){vfunc_called(this, "_ZN10S2318C3_nt2v6Ev");}
S2318C3_nt ::S2318C3_nt(){ note_ctor("S2318C3_nt", this);} // tgen

//skip512 S2318C3_nt

#else // __cplusplus

extern void _ZN10S2318C3_ntC1Ev();
extern void _ZN10S2318C3_ntD1Ev();
Name_Map name_map_S2318C3_nt[] = {
  NSPAIR(_ZN10S2318C3_ntC1Ev),
  NSPAIR(_ZN10S2318C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2318C4_nt;
extern VTBL_ENTRY _ZTI10S2318C4_nt[];
extern  VTBL_ENTRY _ZTV10S2318C4_nt[];
static Base_Class bases_S2318C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2318C4_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 _ZTI10S2318C3_nt[];
extern void _ZN10S2318C3_ntD1Ev();
extern void _ZN10S2318C3_ntD0Ev();
extern void _ZN10S2318C4_nt2v5Ev();
extern void _ZN10S2318C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S2318C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2318C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2318C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2318C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2318C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2318C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S2318C3_nt[];
VTBL_ENTRY *P__ZTI10S2318C3_nt = _ZTI10S2318C3_nt; 
extern  VTBL_ENTRY _ZTV10S2318C3_nt[];
Class_Descriptor cd_S2318C3_nt = {  "S2318C3_nt", // class name
  bases_S2318C3_nt, 1,
  &(vtc_S2318C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI10S2318C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2318C3_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2318C2_nt  : S2318C3_nt {
  void *s2318c2f0[2];
  int s2318c2f1[3];
  char s2318c2f2[2];
  void *s2318c2f3;
  virtual  ~S2318C2_nt(); // _ZN10S2318C2_ntD1Ev
  virtual void  v7(); // _ZN10S2318C2_nt2v7Ev
  virtual void  v8(); // _ZN10S2318C2_nt2v8Ev
  virtual void  v9(); // _ZN10S2318C2_nt2v9Ev
  virtual void  v10(); // _ZN10S2318C2_nt3v10Ev
  S2318C2_nt(); // tgen
};
//SIG(-1 S2318C2_nt) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2318C2_nt ::~S2318C2_nt(){ note_dtor("S2318C2_nt", this);}
void  S2318C2_nt ::v7(){vfunc_called(this, "_ZN10S2318C2_nt2v7Ev");}
void  S2318C2_nt ::v8(){vfunc_called(this, "_ZN10S2318C2_nt2v8Ev");}
void  S2318C2_nt ::v9(){vfunc_called(this, "_ZN10S2318C2_nt2v9Ev");}
void  S2318C2_nt ::v10(){vfunc_called(this, "_ZN10S2318C2_nt3v10Ev");}
S2318C2_nt ::S2318C2_nt(){ note_ctor("S2318C2_nt", this);} // tgen

//skip512 S2318C2_nt

#else // __cplusplus

extern void _ZN10S2318C2_ntC1Ev();
extern void _ZN10S2318C2_ntD1Ev();
Name_Map name_map_S2318C2_nt[] = {
  NSPAIR(_ZN10S2318C2_ntC1Ev),
  NSPAIR(_ZN10S2318C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2318C4_nt;
extern VTBL_ENTRY _ZTI10S2318C4_nt[];
extern  VTBL_ENTRY _ZTV10S2318C4_nt[];
extern Class_Descriptor cd_S2318C3_nt;
extern VTBL_ENTRY _ZTI10S2318C3_nt[];
extern  VTBL_ENTRY _ZTV10S2318C3_nt[];
static Base_Class bases_S2318C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2318C4_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_S2318C3_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 _ZTI10S2318C2_nt[];
extern void _ZN10S2318C2_ntD1Ev();
extern void _ZN10S2318C2_ntD0Ev();
extern void _ZN10S2318C4_nt2v5Ev();
extern void _ZN10S2318C3_nt2v6Ev();
extern void _ZN10S2318C2_nt2v7Ev();
extern void _ZN10S2318C2_nt2v8Ev();
extern void _ZN10S2318C2_nt2v9Ev();
extern void _ZN10S2318C2_nt3v10Ev();
static  VTBL_ENTRY vtc_S2318C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2318C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2318C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2318C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2318C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2318C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2318C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2318C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2318C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2318C2_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S2318C2_nt[];
VTBL_ENTRY *P__ZTI10S2318C2_nt = _ZTI10S2318C2_nt; 
extern  VTBL_ENTRY _ZTV10S2318C2_nt[];
Class_Descriptor cd_S2318C2_nt = {  "S2318C2_nt", // class name
  bases_S2318C2_nt, 2,
  &(vtc_S2318C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI10S2318C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2318C2_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2318C1  : S2318C2_nt {
  void *s2318c1f0;
  int s2318c1f1[2];
  virtual  ~S2318C1(); // _ZN7S2318C1D1Ev
  virtual void  v1(); // _ZN7S2318C12v1Ev
  virtual void  v2(); // _ZN7S2318C12v2Ev
  virtual void  v3(); // _ZN7S2318C12v3Ev
  virtual void  v4(); // _ZN7S2318C12v4Ev
  S2318C1(); // tgen
};
//SIG(1 S2318C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fp Fi[2]}


 S2318C1 ::~S2318C1(){ note_dtor("S2318C1", this);}
void  S2318C1 ::v1(){vfunc_called(this, "_ZN7S2318C12v1Ev");}
void  S2318C1 ::v2(){vfunc_called(this, "_ZN7S2318C12v2Ev");}
void  S2318C1 ::v3(){vfunc_called(this, "_ZN7S2318C12v3Ev");}
void  S2318C1 ::v4(){vfunc_called(this, "_ZN7S2318C12v4Ev");}
S2318C1 ::S2318C1(){ note_ctor("S2318C1", this);} // tgen

static void Test_S2318C1()
{
  extern Class_Descriptor cd_S2318C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S2318C1, buf);
    S2318C1 *dp, &lv = *(dp=new (buf) S2318C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S2318C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2318C1)");
    check_base_class_offset(lv, (S2318C4_nt*)(S2318C3_nt*)(S2318C2_nt*), 0, "S2318C1");
    check_base_class_offset(lv, (S2318C3_nt*)(S2318C2_nt*), 0, "S2318C1");
    check_base_class_offset(lv, (S2318C2_nt*), 0, "S2318C1");
    check_field_offset(lv, s2318c1f0, ABISELECT(72,48), "S2318C1.s2318c1f0");
    check_field_offset(lv, s2318c1f1, ABISELECT(80,52), "S2318C1.s2318c1f1");
    test_class_info(&lv, &cd_S2318C1);
    dp->~S2318C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2318C1(Test_S2318C1, "S2318C1", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN7S2318C1C1Ev();
extern void _ZN7S2318C1D1Ev();
Name_Map name_map_S2318C1[] = {
  NSPAIR(_ZN7S2318C1C1Ev),
  NSPAIR(_ZN7S2318C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2318C4_nt;
extern VTBL_ENTRY _ZTI10S2318C4_nt[];
extern  VTBL_ENTRY _ZTV10S2318C4_nt[];
extern Class_Descriptor cd_S2318C3_nt;
extern VTBL_ENTRY _ZTI10S2318C3_nt[];
extern  VTBL_ENTRY _ZTV10S2318C3_nt[];
extern Class_Descriptor cd_S2318C2_nt;
extern VTBL_ENTRY _ZTI10S2318C2_nt[];
extern  VTBL_ENTRY _ZTV10S2318C2_nt[];
static Base_Class bases_S2318C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2318C4_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_S2318C3_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_S2318C2_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 _ZTI7S2318C1[];
extern void _ZN7S2318C1D1Ev();
extern void _ZN7S2318C1D0Ev();
extern void _ZN10S2318C4_nt2v5Ev();
extern void _ZN10S2318C3_nt2v6Ev();
extern void _ZN10S2318C2_nt2v7Ev();
extern void _ZN10S2318C2_nt2v8Ev();
extern void _ZN10S2318C2_nt2v9Ev();
extern void _ZN10S2318C2_nt3v10Ev();
extern void _ZN7S2318C12v1Ev();
extern void _ZN7S2318C12v2Ev();
extern void _ZN7S2318C12v3Ev();
extern void _ZN7S2318C12v4Ev();
static  VTBL_ENTRY vtc_S2318C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2318C1[0]),
  (VTBL_ENTRY)&_ZN7S2318C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2318C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2318C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2318C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2318C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2318C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2318C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2318C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN7S2318C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2318C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2318C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2318C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2318C1[];
extern  VTBL_ENTRY _ZTV7S2318C1[];
Class_Descriptor cd_S2318C1 = {  "S2318C1", // class name
  bases_S2318C1, 3,
  &(vtc_S2318C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI7S2318C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2318C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9657C2  {
  ::S12560C14_nt s9657c2f0;
  int s9657c2f1[2];
  char s9657c2f2;
  virtual  ~S9657C2(); // _ZN7S9657C2D1Ev
  virtual void  v4(); // _ZN7S9657C22v4Ev
  virtual void  v5(); // _ZN7S9657C22v5Ev
  virtual void  v6(); // _ZN7S9657C22v6Ev
  S9657C2(); // tgen
};
//SIG(-1 S9657C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9657C2 ::~S9657C2(){ note_dtor("S9657C2", this);}
void  S9657C2 ::v4(){vfunc_called(this, "_ZN7S9657C22v4Ev");}
void  S9657C2 ::v5(){vfunc_called(this, "_ZN7S9657C22v5Ev");}
void  S9657C2 ::v6(){vfunc_called(this, "_ZN7S9657C22v6Ev");}
S9657C2 ::S9657C2(){ note_ctor("S9657C2", this);} // tgen

static void Test_S9657C2()
{
  extern Class_Descriptor cd_S9657C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9657C2, buf);
    S9657C2 *dp, &lv = *(dp=new (buf) S9657C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9657C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9657C2)");
    check_field_offset(lv, s9657c2f0, ABISELECT(8,4), "S9657C2.s9657c2f0");
    check_field_offset(lv, s9657c2f1, ABISELECT(24,16), "S9657C2.s9657c2f1");
    check_field_offset(lv, s9657c2f2, ABISELECT(32,24), "S9657C2.s9657c2f2");
    test_class_info(&lv, &cd_S9657C2);
    dp->~S9657C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9657C2(Test_S9657C2, "S9657C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9657C2C1Ev();
extern void _ZN7S9657C2D1Ev();
Name_Map name_map_S9657C2[] = {
  NSPAIR(_ZN7S9657C2C1Ev),
  NSPAIR(_ZN7S9657C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9657C2[];
extern void _ZN7S9657C2D1Ev();
extern void _ZN7S9657C2D0Ev();
extern void _ZN7S9657C22v4Ev();
extern void _ZN7S9657C22v5Ev();
extern void _ZN7S9657C22v6Ev();
static  VTBL_ENTRY vtc_S9657C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9657C2[0]),
  (VTBL_ENTRY)&_ZN7S9657C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9657C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9657C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9657C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9657C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9657C2[];
extern  VTBL_ENTRY _ZTV7S9657C2[];
Class_Descriptor cd_S9657C2 = {  "S9657C2", // class name
  0,0,//no base classes
  &(vtc_S9657C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9657C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9657C2),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  S9657C1  : S9657C2 {
  ::S12560C14_nt s9657c1f0;
  ::S12560C14_nt s9657c1f1;
  char s9657c1f2[3];
  int s9657c1f3;
  ::S12560C16_nt s9657c1f4;
  void *s9657c1f5[3];
  ::S12560C14_nt s9657c1f6;
  int s9657c1f7;
  virtual  ~S9657C1(); // _ZN7S9657C1D1Ev
  virtual void  v1(); // _ZN7S9657C12v1Ev
  virtual void  v2(); // _ZN7S9657C12v2Ev
  virtual void  v3(); // _ZN7S9657C12v3Ev
  S9657C1(); // tgen
};
//SIG(1 S9657C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 FC3 FC3 Fc[3] Fi FC5{ m Fp[2]} Fp[3] FC3 Fi}


 S9657C1 ::~S9657C1(){ note_dtor("S9657C1", this);}
void  S9657C1 ::v1(){vfunc_called(this, "_ZN7S9657C12v1Ev");}
void  S9657C1 ::v2(){vfunc_called(this, "_ZN7S9657C12v2Ev");}
void  S9657C1 ::v3(){vfunc_called(this, "_ZN7S9657C12v3Ev");}
S9657C1 ::S9657C1(){ note_ctor("S9657C1", this);} // tgen

static void Test_S9657C1()
{
  extern Class_Descriptor cd_S9657C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S9657C1, buf);
    S9657C1 *dp, &lv = *(dp=new (buf) S9657C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S9657C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9657C1)");
    check_base_class_offset(lv, (S9657C2*), 0, "S9657C1");
    check_field_offset(lv, s9657c1f0, ABISELECT(40,28), "S9657C1.s9657c1f0");
    check_field_offset(lv, s9657c1f1, ABISELECT(56,40), "S9657C1.s9657c1f1");
    check_field_offset(lv, s9657c1f2, ABISELECT(72,52), "S9657C1.s9657c1f2");
    check_field_offset(lv, s9657c1f3, ABISELECT(76,56), "S9657C1.s9657c1f3");
    check_field_offset(lv, s9657c1f4, ABISELECT(80,60), "S9657C1.s9657c1f4");
    check_field_offset(lv, s9657c1f5, ABISELECT(96,68), "S9657C1.s9657c1f5");
    check_field_offset(lv, s9657c1f6, ABISELECT(120,80), "S9657C1.s9657c1f6");
    check_field_offset(lv, s9657c1f7, ABISELECT(136,92), "S9657C1.s9657c1f7");
    test_class_info(&lv, &cd_S9657C1);
    dp->~S9657C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9657C1(Test_S9657C1, "S9657C1", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN7S9657C1C1Ev();
extern void _ZN7S9657C1D1Ev();
Name_Map name_map_S9657C1[] = {
  NSPAIR(_ZN7S9657C1C1Ev),
  NSPAIR(_ZN7S9657C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9657C2;
extern VTBL_ENTRY _ZTI7S9657C2[];
extern  VTBL_ENTRY _ZTV7S9657C2[];
static Base_Class bases_S9657C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9657C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9657C1[];
extern void _ZN7S9657C1D1Ev();
extern void _ZN7S9657C1D0Ev();
extern void _ZN7S9657C22v4Ev();
extern void _ZN7S9657C22v5Ev();
extern void _ZN7S9657C22v6Ev();
extern void _ZN7S9657C12v1Ev();
extern void _ZN7S9657C12v2Ev();
extern void _ZN7S9657C12v3Ev();
static  VTBL_ENTRY vtc_S9657C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9657C1[0]),
  (VTBL_ENTRY)&_ZN7S9657C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9657C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9657C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9657C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9657C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9657C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9657C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9657C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9657C1[];
extern  VTBL_ENTRY _ZTV7S9657C1[];
Class_Descriptor cd_S9657C1 = {  "S9657C1", // class name
  bases_S9657C1, 1,
  &(vtc_S9657C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI7S9657C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9657C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6309C3  {
  void *s6309c3f0;
  int s6309c3f1[3];
  virtual  ~S6309C3(); // _ZN7S6309C3D1Ev
  virtual void  v1(); // _ZN7S6309C32v1Ev
  S6309C3(); // tgen
};
//SIG(-1 S6309C3) C1{ vd v1 Fp Fi[3]}


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

static void Test_S6309C3()
{
  extern Class_Descriptor cd_S6309C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S6309C3, buf);
    S6309C3 *dp, &lv = *(dp=new (buf) S6309C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6309C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6309C3)");
    check_field_offset(lv, s6309c3f0, ABISELECT(8,4), "S6309C3.s6309c3f0");
    check_field_offset(lv, s6309c3f1, ABISELECT(16,8), "S6309C3.s6309c3f1");
    test_class_info(&lv, &cd_S6309C3);
    dp->~S6309C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6309C3(Test_S6309C3, "S6309C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S6309C3C1Ev();
extern void _ZN7S6309C3D1Ev();
Name_Map name_map_S6309C3[] = {
  NSPAIR(_ZN7S6309C3C1Ev),
  NSPAIR(_ZN7S6309C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6309C3[];
extern void _ZN7S6309C3D1Ev();
extern void _ZN7S6309C3D0Ev();
extern void _ZN7S6309C32v1Ev();
static  VTBL_ENTRY vtc_S6309C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6309C3[0]),
  (VTBL_ENTRY)&_ZN7S6309C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6309C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6309C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S6309C3[];
extern  VTBL_ENTRY _ZTV7S6309C3[];
Class_Descriptor cd_S6309C3 = {  "S6309C3", // class name
  0,0,//no base classes
  &(vtc_S6309C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S6309C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6309C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S6309C4  {
  int s6309c4f0;
  char s6309c4f1[4];
  void  mf6309c4(); // _ZN7S6309C48mf6309c4Ev
};
//SIG(1 S6309C4) U1{ m Fi Fc[4]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S6309C5  : S6309C3 {
  int s6309c5f0;
  int s6309c5f1;
  int s6309c5f2;
  virtual  ~S6309C5(); // _ZN7S6309C5D1Ev
  virtual void  v2(); // _ZN7S6309C52v2Ev
  S6309C5(); // tgen
};
//SIG(-1 S6309C5) C1{ BC2{ vd v2 Fp Fi[3]} vd v1 Fi[3]}


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

static void Test_S6309C5()
{
  extern Class_Descriptor cd_S6309C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S6309C5, buf);
    S6309C5 *dp, &lv = *(dp=new (buf) S6309C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S6309C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6309C5)");
    check_base_class_offset(lv, (S6309C3*), 0, "S6309C5");
    check_field_offset(lv, s6309c5f0, ABISELECT(28,20), "S6309C5.s6309c5f0");
    check_field_offset(lv, s6309c5f1, ABISELECT(32,24), "S6309C5.s6309c5f1");
    check_field_offset(lv, s6309c5f2, ABISELECT(36,28), "S6309C5.s6309c5f2");
    test_class_info(&lv, &cd_S6309C5);
    dp->~S6309C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6309C5(Test_S6309C5, "S6309C5", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S6309C5C1Ev();
extern void _ZN7S6309C5D1Ev();
Name_Map name_map_S6309C5[] = {
  NSPAIR(_ZN7S6309C5C1Ev),
  NSPAIR(_ZN7S6309C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6309C3;
extern VTBL_ENTRY _ZTI7S6309C3[];
extern  VTBL_ENTRY _ZTV7S6309C3[];
static Base_Class bases_S6309C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6309C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6309C5[];
extern void _ZN7S6309C5D1Ev();
extern void _ZN7S6309C5D0Ev();
extern void _ZN7S6309C32v1Ev();
extern void _ZN7S6309C52v2Ev();
static  VTBL_ENTRY vtc_S6309C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6309C5[0]),
  (VTBL_ENTRY)&_ZN7S6309C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6309C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6309C32v1Ev,
  (VTBL_ENTRY)&_ZN7S6309C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S6309C5[];
extern  VTBL_ENTRY _ZTV7S6309C5[];
Class_Descriptor cd_S6309C5 = {  "S6309C5", // class name
  bases_S6309C5, 1,
  &(vtc_S6309C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S6309C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6309C5),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  S6309C6  : S6309C3 {
  int s6309c6f0;
  int s6309c6f1;
  virtual  ~S6309C6(); // _ZN7S6309C6D1Ev
  virtual void  v3(); // _ZN7S6309C62v3Ev
  S6309C6(); // tgen
};
//SIG(-1 S6309C6) C1{ BC2{ vd v2 Fp Fi[3]} vd v1 Fi[2]}


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

static void Test_S6309C6()
{
  extern Class_Descriptor cd_S6309C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S6309C6, buf);
    S6309C6 *dp, &lv = *(dp=new (buf) S6309C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S6309C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6309C6)");
    check_base_class_offset(lv, (S6309C3*), 0, "S6309C6");
    check_field_offset(lv, s6309c6f0, ABISELECT(28,20), "S6309C6.s6309c6f0");
    check_field_offset(lv, s6309c6f1, ABISELECT(32,24), "S6309C6.s6309c6f1");
    test_class_info(&lv, &cd_S6309C6);
    dp->~S6309C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6309C6(Test_S6309C6, "S6309C6", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S6309C6C1Ev();
extern void _ZN7S6309C6D1Ev();
Name_Map name_map_S6309C6[] = {
  NSPAIR(_ZN7S6309C6C1Ev),
  NSPAIR(_ZN7S6309C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6309C3;
extern VTBL_ENTRY _ZTI7S6309C3[];
extern  VTBL_ENTRY _ZTV7S6309C3[];
static Base_Class bases_S6309C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6309C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6309C6[];
extern void _ZN7S6309C6D1Ev();
extern void _ZN7S6309C6D0Ev();
extern void _ZN7S6309C32v1Ev();
extern void _ZN7S6309C62v3Ev();
static  VTBL_ENTRY vtc_S6309C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6309C6[0]),
  (VTBL_ENTRY)&_ZN7S6309C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6309C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6309C32v1Ev,
  (VTBL_ENTRY)&_ZN7S6309C62v3Ev,
};
extern VTBL_ENTRY _ZTI7S6309C6[];
extern  VTBL_ENTRY _ZTV7S6309C6[];
Class_Descriptor cd_S6309C6 = {  "S6309C6", // class name
  bases_S6309C6, 1,
  &(vtc_S6309C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S6309C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6309C6),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  S6309C1  : S19863C10 {
  ::S6309C3 s6309c1f0;
  ::S6309C3 s6309c1f1;
  ::S6309C3 s6309c1f2;
  __tsi64 s6309c1f3;
  ::S6309C4 s6309c1f4;
  ::S6309C5 s6309c1f5;
  ::S6309C6 s6309c1f6;
  virtual  ~S6309C1(); // _ZN7S6309C1D1Ev
  S6309C1(); // tgen
};
//SIG(1 S6309C1) C1{ BC2{ m} vd FC3{ vd v1 Fp Fi[3]} FC3 FC3 FL FU4{ m Fi Fc[4]} FC5{ BC3 vd v2 Fi Fi Fi} FC6{ BC3 vd v3 Fi Fi}}


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

static void Test_S6309C1()
{
  extern Class_Descriptor cd_S6309C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,35)];
    init_test(&cd_S6309C1, buf);
    S6309C1 *dp, &lv = *(dp=new (buf) S6309C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,136), "sizeof(S6309C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6309C1)");
    check_base_class_offset(lv, (S19863C10*), 0, "S6309C1");
    check_field_offset(lv, s6309c1f0, ABISELECT(8,4), "S6309C1.s6309c1f0");
    check_field_offset(lv, s6309c1f1, ABISELECT(40,24), "S6309C1.s6309c1f1");
    check_field_offset(lv, s6309c1f2, ABISELECT(72,44), "S6309C1.s6309c1f2");
    check_field_offset(lv, s6309c1f3, ABISELECT(104,64), "S6309C1.s6309c1f3");
    check_field_offset(lv, s6309c1f4, ABISELECT(112,72), "S6309C1.s6309c1f4");
    check_field_offset(lv, s6309c1f5, ABISELECT(120,76), "S6309C1.s6309c1f5");
    check_field_offset(lv, s6309c1f6, ABISELECT(160,108), "S6309C1.s6309c1f6");
    test_class_info(&lv, &cd_S6309C1);
    dp->~S6309C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6309C1(Test_S6309C1, "S6309C1", ABISELECT(200,136));

#else // __cplusplus

extern void _ZN7S6309C1C1Ev();
extern void _ZN7S6309C1D1Ev();
Name_Map name_map_S6309C1[] = {
  NSPAIR(_ZN7S6309C1C1Ev),
  NSPAIR(_ZN7S6309C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S6309C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6309C1[];
extern void _ZN7S6309C1D1Ev();
extern void _ZN7S6309C1D0Ev();
static  VTBL_ENTRY vtc_S6309C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6309C1[0]),
  (VTBL_ENTRY)&_ZN7S6309C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6309C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S6309C1[];
extern  VTBL_ENTRY _ZTV7S6309C1[];
Class_Descriptor cd_S6309C1 = {  "S6309C1", // class name
  bases_S6309C1, 1,
  &(vtc_S6309C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,136), // object size
  NSPAIRA(_ZTI7S6309C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6309C1),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  S5018C3  {
  char s5018c3f0;
  int s5018c3f1;
  virtual  ~S5018C3(); // _ZN7S5018C3D1Ev
  virtual void  v4(); // _ZN7S5018C32v4Ev
  S5018C3(); // tgen
};
//SIG(-1 S5018C3) C1{ vd v1 Fc Fi}


 S5018C3 ::~S5018C3(){ note_dtor("S5018C3", this);}
void  S5018C3 ::v4(){vfunc_called(this, "_ZN7S5018C32v4Ev");}
S5018C3 ::S5018C3(){ note_ctor("S5018C3", this);} // tgen

static void Test_S5018C3()
{
  extern Class_Descriptor cd_S5018C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S5018C3, buf);
    S5018C3 *dp, &lv = *(dp=new (buf) S5018C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5018C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5018C3)");
    check_field_offset(lv, s5018c3f0, ABISELECT(8,4), "S5018C3.s5018c3f0");
    check_field_offset(lv, s5018c3f1, ABISELECT(12,8), "S5018C3.s5018c3f1");
    test_class_info(&lv, &cd_S5018C3);
    dp->~S5018C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5018C3(Test_S5018C3, "S5018C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S5018C3C1Ev();
extern void _ZN7S5018C3D1Ev();
Name_Map name_map_S5018C3[] = {
  NSPAIR(_ZN7S5018C3C1Ev),
  NSPAIR(_ZN7S5018C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5018C3[];
extern void _ZN7S5018C3D1Ev();
extern void _ZN7S5018C3D0Ev();
extern void _ZN7S5018C32v4Ev();
static  VTBL_ENTRY vtc_S5018C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5018C3[0]),
  (VTBL_ENTRY)&_ZN7S5018C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5018C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5018C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S5018C3[];
extern  VTBL_ENTRY _ZTV7S5018C3[];
Class_Descriptor cd_S5018C3 = {  "S5018C3", // class name
  0,0,//no base classes
  &(vtc_S5018C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S5018C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5018C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5018C2  : S5018C3 {
  void *s5018c2f0;
  int s5018c2f1[2];
  char s5018c2f2;
  int s5018c2f3[4];
  void *s5018c2f4;
  int s5018c2f5;
  char s5018c2f6;
  void *s5018c2f7[3];
  int s5018c2f8;
  char s5018c2f9;
  virtual  ~S5018C2(); // _ZN7S5018C2D1Ev
  virtual void  v5(); // _ZN7S5018C22v5Ev
  virtual void  v6(); // _ZN7S5018C22v6Ev
  virtual void  v7(); // _ZN7S5018C22v7Ev
  virtual void  v8(); // _ZN7S5018C22v8Ev
  virtual void  v9(); // _ZN7S5018C22v9Ev
  S5018C2(); // tgen
};
//SIG(-1 S5018C2) C1{ BC2{ vd v6 Fc Fi} vd v1 v2 v3 v4 v5 Fp Fi[2] Fc Fi[4] Fp Fi Fc Fp[3] Fi Fc}


 S5018C2 ::~S5018C2(){ note_dtor("S5018C2", this);}
void  S5018C2 ::v5(){vfunc_called(this, "_ZN7S5018C22v5Ev");}
void  S5018C2 ::v6(){vfunc_called(this, "_ZN7S5018C22v6Ev");}
void  S5018C2 ::v7(){vfunc_called(this, "_ZN7S5018C22v7Ev");}
void  S5018C2 ::v8(){vfunc_called(this, "_ZN7S5018C22v8Ev");}
void  S5018C2 ::v9(){vfunc_called(this, "_ZN7S5018C22v9Ev");}
S5018C2 ::S5018C2(){ note_ctor("S5018C2", this);} // tgen

static void Test_S5018C2()
{
  extern Class_Descriptor cd_S5018C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,20)];
    init_test(&cd_S5018C2, buf);
    S5018C2 *dp, &lv = *(dp=new (buf) S5018C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,76), "sizeof(S5018C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5018C2)");
    check_base_class_offset(lv, (S5018C3*), 0, "S5018C2");
    check_field_offset(lv, s5018c2f0, ABISELECT(16,12), "S5018C2.s5018c2f0");
    check_field_offset(lv, s5018c2f1, ABISELECT(24,16), "S5018C2.s5018c2f1");
    check_field_offset(lv, s5018c2f2, ABISELECT(32,24), "S5018C2.s5018c2f2");
    check_field_offset(lv, s5018c2f3, ABISELECT(36,28), "S5018C2.s5018c2f3");
    check_field_offset(lv, s5018c2f4, ABISELECT(56,44), "S5018C2.s5018c2f4");
    check_field_offset(lv, s5018c2f5, ABISELECT(64,48), "S5018C2.s5018c2f5");
    check_field_offset(lv, s5018c2f6, ABISELECT(68,52), "S5018C2.s5018c2f6");
    check_field_offset(lv, s5018c2f7, ABISELECT(72,56), "S5018C2.s5018c2f7");
    check_field_offset(lv, s5018c2f8, ABISELECT(96,68), "S5018C2.s5018c2f8");
    check_field_offset(lv, s5018c2f9, ABISELECT(100,72), "S5018C2.s5018c2f9");
    test_class_info(&lv, &cd_S5018C2);
    dp->~S5018C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5018C2(Test_S5018C2, "S5018C2", ABISELECT(104,76));

#else // __cplusplus

extern void _ZN7S5018C2C1Ev();
extern void _ZN7S5018C2D1Ev();
Name_Map name_map_S5018C2[] = {
  NSPAIR(_ZN7S5018C2C1Ev),
  NSPAIR(_ZN7S5018C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5018C3;
extern VTBL_ENTRY _ZTI7S5018C3[];
extern  VTBL_ENTRY _ZTV7S5018C3[];
static Base_Class bases_S5018C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5018C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5018C2[];
extern void _ZN7S5018C2D1Ev();
extern void _ZN7S5018C2D0Ev();
extern void _ZN7S5018C32v4Ev();
extern void _ZN7S5018C22v5Ev();
extern void _ZN7S5018C22v6Ev();
extern void _ZN7S5018C22v7Ev();
extern void _ZN7S5018C22v8Ev();
extern void _ZN7S5018C22v9Ev();
static  VTBL_ENTRY vtc_S5018C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5018C2[0]),
  (VTBL_ENTRY)&_ZN7S5018C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5018C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5018C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5018C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5018C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5018C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5018C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5018C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S5018C2[];
extern  VTBL_ENTRY _ZTV7S5018C2[];
Class_Descriptor cd_S5018C2 = {  "S5018C2", // class name
  bases_S5018C2, 1,
  &(vtc_S5018C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,76), // object size
  NSPAIRA(_ZTI7S5018C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5018C2),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  S5018C1  : S5018C2 {
  void *s5018c1f0[2];
  virtual  ~S5018C1(); // _ZN7S5018C1D1Ev
  virtual void  v1(); // _ZN7S5018C12v1Ev
  virtual void  v2(); // _ZN7S5018C12v2Ev
  virtual void  v3(); // _ZN7S5018C12v3Ev
  S5018C1(); // tgen
};
//SIG(1 S5018C1) C1{ BC2{ BC3{ vd v4 Fc Fi} vd v5 v6 v7 v8 v9 Fp Fi[2] Fc Fi[4] Fp Fi Fc Fp[3] Fi Fc} vd v1 v2 v3 Fp[2]}


 S5018C1 ::~S5018C1(){ note_dtor("S5018C1", this);}
void  S5018C1 ::v1(){vfunc_called(this, "_ZN7S5018C12v1Ev");}
void  S5018C1 ::v2(){vfunc_called(this, "_ZN7S5018C12v2Ev");}
void  S5018C1 ::v3(){vfunc_called(this, "_ZN7S5018C12v3Ev");}
S5018C1 ::S5018C1(){ note_ctor("S5018C1", this);} // tgen

static void Test_S5018C1()
{
  extern Class_Descriptor cd_S5018C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,22)];
    init_test(&cd_S5018C1, buf);
    S5018C1 *dp, &lv = *(dp=new (buf) S5018C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S5018C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5018C1)");
    check_base_class_offset(lv, (S5018C3*)(S5018C2*), 0, "S5018C1");
    check_base_class_offset(lv, (S5018C2*), 0, "S5018C1");
    check_field_offset(lv, s5018c1f0, ABISELECT(104,76), "S5018C1.s5018c1f0");
    test_class_info(&lv, &cd_S5018C1);
    dp->~S5018C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5018C1(Test_S5018C1, "S5018C1", ABISELECT(120,84));

#else // __cplusplus

extern void _ZN7S5018C1C1Ev();
extern void _ZN7S5018C1D1Ev();
Name_Map name_map_S5018C1[] = {
  NSPAIR(_ZN7S5018C1C1Ev),
  NSPAIR(_ZN7S5018C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5018C3;
extern VTBL_ENTRY _ZTI7S5018C3[];
extern  VTBL_ENTRY _ZTV7S5018C3[];
extern Class_Descriptor cd_S5018C2;
extern VTBL_ENTRY _ZTI7S5018C2[];
extern  VTBL_ENTRY _ZTV7S5018C2[];
static Base_Class bases_S5018C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5018C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5018C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5018C1[];
extern void _ZN7S5018C1D1Ev();
extern void _ZN7S5018C1D0Ev();
extern void _ZN7S5018C32v4Ev();
extern void _ZN7S5018C22v5Ev();
extern void _ZN7S5018C22v6Ev();
extern void _ZN7S5018C22v7Ev();
extern void _ZN7S5018C22v8Ev();
extern void _ZN7S5018C22v9Ev();
extern void _ZN7S5018C12v1Ev();
extern void _ZN7S5018C12v2Ev();
extern void _ZN7S5018C12v3Ev();
static  VTBL_ENTRY vtc_S5018C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5018C1[0]),
  (VTBL_ENTRY)&_ZN7S5018C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5018C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5018C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5018C22v5Ev,
  (VTBL_ENTRY)&_ZN7S5018C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5018C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5018C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5018C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5018C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5018C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5018C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5018C1[];
extern  VTBL_ENTRY _ZTV7S5018C1[];
Class_Descriptor cd_S5018C1 = {  "S5018C1", // class name
  bases_S5018C1, 2,
  &(vtc_S5018C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,84), // object size
  NSPAIRA(_ZTI7S5018C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5018C1),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  S9463C2  {
  void *s9463c2f0;
  __tsi64 s9463c2f1;
  void *s9463c2f2;
  ::S165C33_nt s9463c2f3;
  void *s9463c2f4;
  int s9463c2f5;
  void *s9463c2f6;
  int s9463c2f7[4];
  virtual  ~S9463C2(); // _ZN7S9463C2D1Ev
  virtual void  v3(); // _ZN7S9463C22v3Ev
  virtual void  v4(); // _ZN7S9463C22v4Ev
  virtual void  v5(); // _ZN7S9463C22v5Ev
  virtual void  v6(); // _ZN7S9463C22v6Ev
  virtual void  v7(); // _ZN7S9463C22v7Ev
  S9463C2(); // tgen
};
//SIG(-1 S9463C2) C1{ vd v1 v2 v3 v4 v5 Fp FL Fp FC2{ m Fi[4]} Fp Fi Fp Fi[4]}


 S9463C2 ::~S9463C2(){ note_dtor("S9463C2", this);}
void  S9463C2 ::v3(){vfunc_called(this, "_ZN7S9463C22v3Ev");}
void  S9463C2 ::v4(){vfunc_called(this, "_ZN7S9463C22v4Ev");}
void  S9463C2 ::v5(){vfunc_called(this, "_ZN7S9463C22v5Ev");}
void  S9463C2 ::v6(){vfunc_called(this, "_ZN7S9463C22v6Ev");}
void  S9463C2 ::v7(){vfunc_called(this, "_ZN7S9463C22v7Ev");}
S9463C2 ::S9463C2(){ note_ctor("S9463C2", this);} // tgen

static void Test_S9463C2()
{
  extern Class_Descriptor cd_S9463C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S9463C2, buf);
    S9463C2 *dp, &lv = *(dp=new (buf) S9463C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S9463C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9463C2)");
    check_field_offset(lv, s9463c2f0, ABISELECT(8,4), "S9463C2.s9463c2f0");
    check_field_offset(lv, s9463c2f1, ABISELECT(16,8), "S9463C2.s9463c2f1");
    check_field_offset(lv, s9463c2f2, ABISELECT(24,16), "S9463C2.s9463c2f2");
    check_field_offset(lv, s9463c2f3, ABISELECT(32,20), "S9463C2.s9463c2f3");
    check_field_offset(lv, s9463c2f4, ABISELECT(48,36), "S9463C2.s9463c2f4");
    check_field_offset(lv, s9463c2f5, ABISELECT(56,40), "S9463C2.s9463c2f5");
    check_field_offset(lv, s9463c2f6, ABISELECT(64,44), "S9463C2.s9463c2f6");
    check_field_offset(lv, s9463c2f7, ABISELECT(72,48), "S9463C2.s9463c2f7");
    test_class_info(&lv, &cd_S9463C2);
    dp->~S9463C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9463C2(Test_S9463C2, "S9463C2", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN7S9463C2C1Ev();
extern void _ZN7S9463C2D1Ev();
Name_Map name_map_S9463C2[] = {
  NSPAIR(_ZN7S9463C2C1Ev),
  NSPAIR(_ZN7S9463C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9463C2[];
extern void _ZN7S9463C2D1Ev();
extern void _ZN7S9463C2D0Ev();
extern void _ZN7S9463C22v3Ev();
extern void _ZN7S9463C22v4Ev();
extern void _ZN7S9463C22v5Ev();
extern void _ZN7S9463C22v6Ev();
extern void _ZN7S9463C22v7Ev();
static  VTBL_ENTRY vtc_S9463C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9463C2[0]),
  (VTBL_ENTRY)&_ZN7S9463C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9463C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9463C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9463C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9463C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9463C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9463C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9463C2[];
extern  VTBL_ENTRY _ZTV7S9463C2[];
Class_Descriptor cd_S9463C2 = {  "S9463C2", // class name
  0,0,//no base classes
  &(vtc_S9463C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI7S9463C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9463C2),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  S9463C5_nt  : S1542C30_nt {
  int s9463c5f0;
};
//SIG(-1 S9463C5_nt) C1{ BC2{ m Fi[3]} Fi}



//skip512 S9463C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S1542C30_nt;
static Base_Class bases_S9463C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1542C30_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  S9463C1  : S9463C2 {
  ::S19863C10 s9463c1f0;
  void *s9463c1f1;
  ::S9463C5_nt s9463c1f2;
  virtual void  v1(); // _ZN7S9463C12v1Ev
  virtual void  v2(); // _ZN7S9463C12v2Ev
  ~S9463C1(); // tgen
  S9463C1(); // tgen
};
//SIG(1 S9463C1) C1{ BC2{ vd v3 v4 v5 v6 v7 Fp FL Fp FC3{ m Fi[4]} Fp Fi Fp Fi[4]} v1 v2 FC4{ m} Fp FC5{ BC6{ m Fi[3]} Fi}}


void  S9463C1 ::v1(){vfunc_called(this, "_ZN7S9463C12v1Ev");}
void  S9463C1 ::v2(){vfunc_called(this, "_ZN7S9463C12v2Ev");}
S9463C1 ::~S9463C1(){ note_dtor("S9463C1", this);} // tgen
S9463C1 ::S9463C1(){ note_ctor("S9463C1", this);} // tgen

static void Test_S9463C1()
{
  extern Class_Descriptor cd_S9463C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,23)];
    init_test(&cd_S9463C1, buf);
    S9463C1 *dp, &lv = *(dp=new (buf) S9463C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,88), "sizeof(S9463C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9463C1)");
    check_base_class_offset(lv, (S9463C2*), 0, "S9463C1");
    check_field_offset(lv, s9463c1f0, ABISELECT(88,64), "S9463C1.s9463c1f0");
    check_field_offset(lv, s9463c1f1, ABISELECT(96,68), "S9463C1.s9463c1f1");
    check_field_offset(lv, s9463c1f2, ABISELECT(104,72), "S9463C1.s9463c1f2");
    test_class_info(&lv, &cd_S9463C1);
    dp->~S9463C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9463C1(Test_S9463C1, "S9463C1", ABISELECT(120,88));

#else // __cplusplus

extern void _ZN7S9463C1C1Ev();
extern void _ZN7S9463C1D1Ev();
Name_Map name_map_S9463C1[] = {
  NSPAIR(_ZN7S9463C1C1Ev),
  NSPAIR(_ZN7S9463C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9463C2;
extern VTBL_ENTRY _ZTI7S9463C2[];
extern  VTBL_ENTRY _ZTV7S9463C2[];
static Base_Class bases_S9463C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9463C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9463C1[];
extern void _ZN7S9463C1D1Ev();
extern void _ZN7S9463C1D0Ev();
extern void _ZN7S9463C22v3Ev();
extern void _ZN7S9463C22v4Ev();
extern void _ZN7S9463C22v5Ev();
extern void _ZN7S9463C22v6Ev();
extern void _ZN7S9463C22v7Ev();
extern void _ZN7S9463C12v1Ev();
extern void _ZN7S9463C12v2Ev();
static  VTBL_ENTRY vtc_S9463C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9463C1[0]),
  (VTBL_ENTRY)&_ZN7S9463C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9463C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9463C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9463C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9463C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9463C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9463C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9463C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9463C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9463C1[];
extern  VTBL_ENTRY _ZTV7S9463C1[];
Class_Descriptor cd_S9463C1 = {  "S9463C1", // class name
  bases_S9463C1, 1,
  &(vtc_S9463C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,88), // object size
  NSPAIRA(_ZTI7S9463C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9463C1),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  S9317C2  {
  ::S12560C14_nt s9317c2f0;
  int s9317c2f1[2];
  char s9317c2f2;
  virtual  ~S9317C2(); // _ZN7S9317C2D1Ev
  virtual void  v3(); // _ZN7S9317C22v3Ev
  virtual void  v4(); // _ZN7S9317C22v4Ev
  virtual void  v5(); // _ZN7S9317C22v5Ev
  S9317C2(); // tgen
};
//SIG(-1 S9317C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9317C2 ::~S9317C2(){ note_dtor("S9317C2", this);}
void  S9317C2 ::v3(){vfunc_called(this, "_ZN7S9317C22v3Ev");}
void  S9317C2 ::v4(){vfunc_called(this, "_ZN7S9317C22v4Ev");}
void  S9317C2 ::v5(){vfunc_called(this, "_ZN7S9317C22v5Ev");}
S9317C2 ::S9317C2(){ note_ctor("S9317C2", this);} // tgen

static void Test_S9317C2()
{
  extern Class_Descriptor cd_S9317C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9317C2, buf);
    S9317C2 *dp, &lv = *(dp=new (buf) S9317C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9317C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9317C2)");
    check_field_offset(lv, s9317c2f0, ABISELECT(8,4), "S9317C2.s9317c2f0");
    check_field_offset(lv, s9317c2f1, ABISELECT(24,16), "S9317C2.s9317c2f1");
    check_field_offset(lv, s9317c2f2, ABISELECT(32,24), "S9317C2.s9317c2f2");
    test_class_info(&lv, &cd_S9317C2);
    dp->~S9317C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9317C2(Test_S9317C2, "S9317C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9317C2C1Ev();
extern void _ZN7S9317C2D1Ev();
Name_Map name_map_S9317C2[] = {
  NSPAIR(_ZN7S9317C2C1Ev),
  NSPAIR(_ZN7S9317C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9317C2[];
extern void _ZN7S9317C2D1Ev();
extern void _ZN7S9317C2D0Ev();
extern void _ZN7S9317C22v3Ev();
extern void _ZN7S9317C22v4Ev();
extern void _ZN7S9317C22v5Ev();
static  VTBL_ENTRY vtc_S9317C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9317C2[0]),
  (VTBL_ENTRY)&_ZN7S9317C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9317C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9317C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9317C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9317C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9317C2[];
extern  VTBL_ENTRY _ZTV7S9317C2[];
Class_Descriptor cd_S9317C2 = {  "S9317C2", // class name
  0,0,//no base classes
  &(vtc_S9317C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9317C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9317C2),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  S9317C5_nt  {
  char s9317c5f0[16];
};
//SIG(-1 S9317C5_nt) C1{ Fc[16]}



//skip512 S9317C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9317C1  : S9317C2 {
  int s9317c1f0;
  ::S12560C14_nt s9317c1f1;
  ::S12560C14_nt s9317c1f2;
  ::S12560C14_nt s9317c1f3;
  char s9317c1f4[3];
  void *s9317c1f5[2];
  ::S9317C5_nt s9317c1f6;
  virtual  ~S9317C1(); // _ZN7S9317C1D1Ev
  virtual void  v1(); // _ZN7S9317C12v1Ev
  virtual void  v2(); // _ZN7S9317C12v2Ev
  S9317C1(); // tgen
};
//SIG(1 S9317C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fi FC3 FC3 FC3 Fc[3] Fp[2] FC5{ Fc[16]}}


 S9317C1 ::~S9317C1(){ note_dtor("S9317C1", this);}
void  S9317C1 ::v1(){vfunc_called(this, "_ZN7S9317C12v1Ev");}
void  S9317C1 ::v2(){vfunc_called(this, "_ZN7S9317C12v2Ev");}
S9317C1 ::S9317C1(){ note_ctor("S9317C1", this);} // tgen

static void Test_S9317C1()
{
  extern Class_Descriptor cd_S9317C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,25)];
    init_test(&cd_S9317C1, buf);
    S9317C1 *dp, &lv = *(dp=new (buf) S9317C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,96), "sizeof(S9317C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9317C1)");
    check_base_class_offset(lv, (S9317C2*), 0, "S9317C1");
    check_field_offset(lv, s9317c1f0, ABISELECT(36,28), "S9317C1.s9317c1f0");
    check_field_offset(lv, s9317c1f1, ABISELECT(40,32), "S9317C1.s9317c1f1");
    check_field_offset(lv, s9317c1f2, ABISELECT(56,44), "S9317C1.s9317c1f2");
    check_field_offset(lv, s9317c1f3, ABISELECT(72,56), "S9317C1.s9317c1f3");
    check_field_offset(lv, s9317c1f4, ABISELECT(88,68), "S9317C1.s9317c1f4");
    check_field_offset(lv, s9317c1f5, ABISELECT(96,72), "S9317C1.s9317c1f5");
    check_field_offset(lv, s9317c1f6, ABISELECT(112,80), "S9317C1.s9317c1f6");
    test_class_info(&lv, &cd_S9317C1);
    dp->~S9317C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9317C1(Test_S9317C1, "S9317C1", ABISELECT(128,96));

#else // __cplusplus

extern void _ZN7S9317C1C1Ev();
extern void _ZN7S9317C1D1Ev();
Name_Map name_map_S9317C1[] = {
  NSPAIR(_ZN7S9317C1C1Ev),
  NSPAIR(_ZN7S9317C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9317C2;
extern VTBL_ENTRY _ZTI7S9317C2[];
extern  VTBL_ENTRY _ZTV7S9317C2[];
static Base_Class bases_S9317C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9317C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9317C1[];
extern void _ZN7S9317C1D1Ev();
extern void _ZN7S9317C1D0Ev();
extern void _ZN7S9317C22v3Ev();
extern void _ZN7S9317C22v4Ev();
extern void _ZN7S9317C22v5Ev();
extern void _ZN7S9317C12v1Ev();
extern void _ZN7S9317C12v2Ev();
static  VTBL_ENTRY vtc_S9317C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9317C1[0]),
  (VTBL_ENTRY)&_ZN7S9317C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9317C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9317C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9317C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9317C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9317C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9317C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9317C1[];
extern  VTBL_ENTRY _ZTV7S9317C1[];
Class_Descriptor cd_S9317C1 = {  "S9317C1", // class name
  bases_S9317C1, 1,
  &(vtc_S9317C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,96), // object size
  NSPAIRA(_ZTI7S9317C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9317C1),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  S8735C2_nt  {
  int s8735c2f0;
  char s8735c2f1[3];
  virtual  ~S8735C2_nt(); // _ZN10S8735C2_ntD1Ev
  virtual void  v2(); // _ZN10S8735C2_nt2v2Ev
  S8735C2_nt(); // tgen
};
//SIG(-1 S8735C2_nt) C1{ vd v1 Fi Fc[3]}


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

//skip512 S8735C2_nt

#else // __cplusplus

extern void _ZN10S8735C2_ntC1Ev();
extern void _ZN10S8735C2_ntD1Ev();
Name_Map name_map_S8735C2_nt[] = {
  NSPAIR(_ZN10S8735C2_ntC1Ev),
  NSPAIR(_ZN10S8735C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8735C2_nt[];
extern void _ZN10S8735C2_ntD1Ev();
extern void _ZN10S8735C2_ntD0Ev();
extern void _ZN10S8735C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8735C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8735C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8735C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8735C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8735C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8735C2_nt[];
VTBL_ENTRY *P__ZTI10S8735C2_nt = _ZTI10S8735C2_nt; 
extern  VTBL_ENTRY _ZTV10S8735C2_nt[];
Class_Descriptor cd_S8735C2_nt = {  "S8735C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8735C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S8735C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8735C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8735C3  {
  void *s8735c3f0[3];
  int s8735c3f1;
  void *s8735c3f2;
};
//SIG(-1 S8735C3) C1{ Fp[3] Fi Fp}



static void Test_S8735C3()
{
  {
    init_simple_test("S8735C3");
    S8735C3 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8735C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8735C3)");
    check_field_offset(lv, s8735c3f0, 0, "S8735C3.s8735c3f0");
    check_field_offset(lv, s8735c3f1, ABISELECT(24,12), "S8735C3.s8735c3f1");
    check_field_offset(lv, s8735c3f2, ABISELECT(32,16), "S8735C3.s8735c3f2");
  }
}
static Arrange_To_Call_Me vS8735C3(Test_S8735C3, "S8735C3", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8735C1  : S8735C2_nt {
  int s8735c1f0[3];
  ::S8735C3 s8735c1f1;
  ::S1768C5_nt s8735c1f2;
  char s8735c1f3[4];
  short s8735c1f4;
  char s8735c1f5[4];
  virtual  ~S8735C1(); // _ZN7S8735C1D1Ev
  virtual void  v1(); // _ZN7S8735C12v1Ev
  S8735C1(); // tgen
};
//SIG(1 S8735C1) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 Fi[3] FC3{ Fp[3] Fi Fp} FC4{ Fc[2] Fs FC5{ Fi} Fs Fc[6]} Fc[4] Fs Fc[4]}


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

static void Test_S8735C1()
{
  extern Class_Descriptor cd_S8735C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S8735C1, buf);
    S8735C1 *dp, &lv = *(dp=new (buf) S8735C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S8735C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8735C1)");
    check_base_class_offset(lv, (S8735C2_nt*), 0, "S8735C1");
    check_field_offset(lv, s8735c1f0, ABISELECT(16,12), "S8735C1.s8735c1f0");
    check_field_offset(lv, s8735c1f1, ABISELECT(32,24), "S8735C1.s8735c1f1");
    check_field_offset(lv, s8735c1f2, ABISELECT(72,44), "S8735C1.s8735c1f2");
    check_field_offset(lv, s8735c1f3, ABISELECT(88,60), "S8735C1.s8735c1f3");
    check_field_offset(lv, s8735c1f4, ABISELECT(92,64), "S8735C1.s8735c1f4");
    check_field_offset(lv, s8735c1f5, ABISELECT(94,66), "S8735C1.s8735c1f5");
    test_class_info(&lv, &cd_S8735C1);
    dp->~S8735C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8735C1(Test_S8735C1, "S8735C1", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN7S8735C1C1Ev();
extern void _ZN7S8735C1D1Ev();
Name_Map name_map_S8735C1[] = {
  NSPAIR(_ZN7S8735C1C1Ev),
  NSPAIR(_ZN7S8735C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8735C2_nt;
extern VTBL_ENTRY _ZTI10S8735C2_nt[];
extern  VTBL_ENTRY _ZTV10S8735C2_nt[];
static Base_Class bases_S8735C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8735C2_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 _ZTI7S8735C1[];
extern void _ZN7S8735C1D1Ev();
extern void _ZN7S8735C1D0Ev();
extern void _ZN10S8735C2_nt2v2Ev();
extern void _ZN7S8735C12v1Ev();
static  VTBL_ENTRY vtc_S8735C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8735C1[0]),
  (VTBL_ENTRY)&_ZN7S8735C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8735C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8735C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8735C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8735C1[];
extern  VTBL_ENTRY _ZTV7S8735C1[];
Class_Descriptor cd_S8735C1 = {  "S8735C1", // class name
  bases_S8735C1, 1,
  &(vtc_S8735C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI7S8735C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8735C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4462C3  {
  ::S12560C14_nt s4462c3f0;
  int s4462c3f1[2];
  char s4462c3f2;
  virtual  ~S4462C3(); // _ZN7S4462C3D1Ev
  virtual void  v2(); // _ZN7S4462C32v2Ev
  virtual void  v3(); // _ZN7S4462C32v3Ev
  virtual void  v4(); // _ZN7S4462C32v4Ev
  S4462C3(); // tgen
};
//SIG(-1 S4462C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4462C3 ::~S4462C3(){ note_dtor("S4462C3", this);}
void  S4462C3 ::v2(){vfunc_called(this, "_ZN7S4462C32v2Ev");}
void  S4462C3 ::v3(){vfunc_called(this, "_ZN7S4462C32v3Ev");}
void  S4462C3 ::v4(){vfunc_called(this, "_ZN7S4462C32v4Ev");}
S4462C3 ::S4462C3(){ note_ctor("S4462C3", this);} // tgen

static void Test_S4462C3()
{
  extern Class_Descriptor cd_S4462C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4462C3, buf);
    S4462C3 *dp, &lv = *(dp=new (buf) S4462C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4462C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4462C3)");
    check_field_offset(lv, s4462c3f0, ABISELECT(8,4), "S4462C3.s4462c3f0");
    check_field_offset(lv, s4462c3f1, ABISELECT(24,16), "S4462C3.s4462c3f1");
    check_field_offset(lv, s4462c3f2, ABISELECT(32,24), "S4462C3.s4462c3f2");
    test_class_info(&lv, &cd_S4462C3);
    dp->~S4462C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4462C3(Test_S4462C3, "S4462C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4462C3C1Ev();
extern void _ZN7S4462C3D1Ev();
Name_Map name_map_S4462C3[] = {
  NSPAIR(_ZN7S4462C3C1Ev),
  NSPAIR(_ZN7S4462C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4462C3[];
extern void _ZN7S4462C3D1Ev();
extern void _ZN7S4462C3D0Ev();
extern void _ZN7S4462C32v2Ev();
extern void _ZN7S4462C32v3Ev();
extern void _ZN7S4462C32v4Ev();
static  VTBL_ENTRY vtc_S4462C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4462C3[0]),
  (VTBL_ENTRY)&_ZN7S4462C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4462C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4462C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4462C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4462C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4462C3[];
extern  VTBL_ENTRY _ZTV7S4462C3[];
Class_Descriptor cd_S4462C3 = {  "S4462C3", // class name
  0,0,//no base classes
  &(vtc_S4462C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4462C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4462C3),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  S4462C2  : S4462C3 {
  void *s4462c2f0[2];
  virtual  ~S4462C2(); // _ZN7S4462C2D1Ev
  virtual void  v5(); // _ZN7S4462C22v5Ev
  virtual void  v6(); // _ZN7S4462C22v6Ev
  virtual void  v7(); // _ZN7S4462C22v7Ev
  virtual void  v8(); // _ZN7S4462C22v8Ev
  virtual void  v9(); // _ZN7S4462C22v9Ev
  virtual void  v10(); // _ZN7S4462C23v10Ev
  virtual void  v11(); // _ZN7S4462C23v11Ev
  S4462C2(); // tgen
};
//SIG(-1 S4462C2) C1{ BC2{ vd v8 v9 v10 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S4462C2 ::~S4462C2(){ note_dtor("S4462C2", this);}
void  S4462C2 ::v5(){vfunc_called(this, "_ZN7S4462C22v5Ev");}
void  S4462C2 ::v6(){vfunc_called(this, "_ZN7S4462C22v6Ev");}
void  S4462C2 ::v7(){vfunc_called(this, "_ZN7S4462C22v7Ev");}
void  S4462C2 ::v8(){vfunc_called(this, "_ZN7S4462C22v8Ev");}
void  S4462C2 ::v9(){vfunc_called(this, "_ZN7S4462C22v9Ev");}
void  S4462C2 ::v10(){vfunc_called(this, "_ZN7S4462C23v10Ev");}
void  S4462C2 ::v11(){vfunc_called(this, "_ZN7S4462C23v11Ev");}
S4462C2 ::S4462C2(){ note_ctor("S4462C2", this);} // tgen

static void Test_S4462C2()
{
  extern Class_Descriptor cd_S4462C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4462C2, buf);
    S4462C2 *dp, &lv = *(dp=new (buf) S4462C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4462C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4462C2)");
    check_base_class_offset(lv, (S4462C3*), 0, "S4462C2");
    check_field_offset(lv, s4462c2f0, ABISELECT(40,28), "S4462C2.s4462c2f0");
    test_class_info(&lv, &cd_S4462C2);
    dp->~S4462C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4462C2(Test_S4462C2, "S4462C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4462C2C1Ev();
extern void _ZN7S4462C2D1Ev();
Name_Map name_map_S4462C2[] = {
  NSPAIR(_ZN7S4462C2C1Ev),
  NSPAIR(_ZN7S4462C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4462C3;
extern VTBL_ENTRY _ZTI7S4462C3[];
extern  VTBL_ENTRY _ZTV7S4462C3[];
static Base_Class bases_S4462C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4462C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4462C2[];
extern void _ZN7S4462C2D1Ev();
extern void _ZN7S4462C2D0Ev();
extern void _ZN7S4462C32v2Ev();
extern void _ZN7S4462C32v3Ev();
extern void _ZN7S4462C32v4Ev();
extern void _ZN7S4462C22v5Ev();
extern void _ZN7S4462C22v6Ev();
extern void _ZN7S4462C22v7Ev();
extern void _ZN7S4462C22v8Ev();
extern void _ZN7S4462C22v9Ev();
extern void _ZN7S4462C23v10Ev();
extern void _ZN7S4462C23v11Ev();
static  VTBL_ENTRY vtc_S4462C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4462C2[0]),
  (VTBL_ENTRY)&_ZN7S4462C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4462C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4462C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4462C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4462C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4462C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4462C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4462C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4462C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4462C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4462C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4462C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S4462C2[];
extern  VTBL_ENTRY _ZTV7S4462C2[];
Class_Descriptor cd_S4462C2 = {  "S4462C2", // class name
  bases_S4462C2, 1,
  &(vtc_S4462C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4462C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4462C2),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  S4462C1  : S4462C2 {
  void *s4462c1f0;
  virtual  ~S4462C1(); // _ZN7S4462C1D1Ev
  virtual void  v1(); // _ZN7S4462C12v1Ev
  S4462C1(); // tgen
};
//SIG(1 S4462C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 v6 v7 v8 v9 v10 v11 Fp[2]} vd v1 Fp}


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

static void Test_S4462C1()
{
  extern Class_Descriptor cd_S4462C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S4462C1, buf);
    S4462C1 *dp, &lv = *(dp=new (buf) S4462C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S4462C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4462C1)");
    check_base_class_offset(lv, (S4462C3*)(S4462C2*), 0, "S4462C1");
    check_base_class_offset(lv, (S4462C2*), 0, "S4462C1");
    check_field_offset(lv, s4462c1f0, ABISELECT(56,36), "S4462C1.s4462c1f0");
    test_class_info(&lv, &cd_S4462C1);
    dp->~S4462C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4462C1(Test_S4462C1, "S4462C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S4462C1C1Ev();
extern void _ZN7S4462C1D1Ev();
Name_Map name_map_S4462C1[] = {
  NSPAIR(_ZN7S4462C1C1Ev),
  NSPAIR(_ZN7S4462C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4462C3;
extern VTBL_ENTRY _ZTI7S4462C3[];
extern  VTBL_ENTRY _ZTV7S4462C3[];
extern Class_Descriptor cd_S4462C2;
extern VTBL_ENTRY _ZTI7S4462C2[];
extern  VTBL_ENTRY _ZTV7S4462C2[];
static Base_Class bases_S4462C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4462C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4462C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4462C1[];
extern void _ZN7S4462C1D1Ev();
extern void _ZN7S4462C1D0Ev();
extern void _ZN7S4462C32v2Ev();
extern void _ZN7S4462C32v3Ev();
extern void _ZN7S4462C32v4Ev();
extern void _ZN7S4462C22v5Ev();
extern void _ZN7S4462C22v6Ev();
extern void _ZN7S4462C22v7Ev();
extern void _ZN7S4462C22v8Ev();
extern void _ZN7S4462C22v9Ev();
extern void _ZN7S4462C23v10Ev();
extern void _ZN7S4462C23v11Ev();
extern void _ZN7S4462C12v1Ev();
static  VTBL_ENTRY vtc_S4462C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4462C1[0]),
  (VTBL_ENTRY)&_ZN7S4462C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4462C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4462C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4462C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4462C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4462C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4462C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4462C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4462C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4462C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4462C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4462C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4462C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4462C1[];
extern  VTBL_ENTRY _ZTV7S4462C1[];
Class_Descriptor cd_S4462C1 = {  "S4462C1", // class name
  bases_S4462C1, 2,
  &(vtc_S4462C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S4462C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4462C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4748C3  {
  ::S12560C14_nt s4748c3f0;
  int s4748c3f1[2];
  char s4748c3f2;
  virtual  ~S4748C3(); // _ZN7S4748C3D1Ev
  virtual void  v3(); // _ZN7S4748C32v3Ev
  virtual void  v4(); // _ZN7S4748C32v4Ev
  virtual void  v5(); // _ZN7S4748C32v5Ev
  S4748C3(); // tgen
};
//SIG(-1 S4748C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4748C3 ::~S4748C3(){ note_dtor("S4748C3", this);}
void  S4748C3 ::v3(){vfunc_called(this, "_ZN7S4748C32v3Ev");}
void  S4748C3 ::v4(){vfunc_called(this, "_ZN7S4748C32v4Ev");}
void  S4748C3 ::v5(){vfunc_called(this, "_ZN7S4748C32v5Ev");}
S4748C3 ::S4748C3(){ note_ctor("S4748C3", this);} // tgen

static void Test_S4748C3()
{
  extern Class_Descriptor cd_S4748C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4748C3, buf);
    S4748C3 *dp, &lv = *(dp=new (buf) S4748C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4748C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4748C3)");
    check_field_offset(lv, s4748c3f0, ABISELECT(8,4), "S4748C3.s4748c3f0");
    check_field_offset(lv, s4748c3f1, ABISELECT(24,16), "S4748C3.s4748c3f1");
    check_field_offset(lv, s4748c3f2, ABISELECT(32,24), "S4748C3.s4748c3f2");
    test_class_info(&lv, &cd_S4748C3);
    dp->~S4748C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4748C3(Test_S4748C3, "S4748C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4748C3C1Ev();
extern void _ZN7S4748C3D1Ev();
Name_Map name_map_S4748C3[] = {
  NSPAIR(_ZN7S4748C3C1Ev),
  NSPAIR(_ZN7S4748C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4748C3[];
extern void _ZN7S4748C3D1Ev();
extern void _ZN7S4748C3D0Ev();
extern void _ZN7S4748C32v3Ev();
extern void _ZN7S4748C32v4Ev();
extern void _ZN7S4748C32v5Ev();
static  VTBL_ENTRY vtc_S4748C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4748C3[0]),
  (VTBL_ENTRY)&_ZN7S4748C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4748C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4748C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4748C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4748C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4748C3[];
extern  VTBL_ENTRY _ZTV7S4748C3[];
Class_Descriptor cd_S4748C3 = {  "S4748C3", // class name
  0,0,//no base classes
  &(vtc_S4748C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4748C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4748C3),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  S4748C2  : S4748C3 {
  void *s4748c2f0;
  virtual void  v6(); // _ZN7S4748C22v6Ev
  virtual void  v7(); // _ZN7S4748C22v7Ev
  ~S4748C2(); // tgen
  S4748C2(); // tgen
};
//SIG(-1 S4748C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4748C2 ::v6(){vfunc_called(this, "_ZN7S4748C22v6Ev");}
void  S4748C2 ::v7(){vfunc_called(this, "_ZN7S4748C22v7Ev");}
S4748C2 ::~S4748C2(){ note_dtor("S4748C2", this);} // tgen
S4748C2 ::S4748C2(){ note_ctor("S4748C2", this);} // tgen

static void Test_S4748C2()
{
  extern Class_Descriptor cd_S4748C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4748C2, buf);
    S4748C2 *dp, &lv = *(dp=new (buf) S4748C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4748C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4748C2)");
    check_base_class_offset(lv, (S4748C3*), 0, "S4748C2");
    check_field_offset(lv, s4748c2f0, ABISELECT(40,28), "S4748C2.s4748c2f0");
    test_class_info(&lv, &cd_S4748C2);
    dp->~S4748C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4748C2(Test_S4748C2, "S4748C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4748C2C1Ev();
extern void _ZN7S4748C2D1Ev();
Name_Map name_map_S4748C2[] = {
  NSPAIR(_ZN7S4748C2C1Ev),
  NSPAIR(_ZN7S4748C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4748C3;
extern VTBL_ENTRY _ZTI7S4748C3[];
extern  VTBL_ENTRY _ZTV7S4748C3[];
static Base_Class bases_S4748C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4748C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4748C2[];
extern void _ZN7S4748C2D1Ev();
extern void _ZN7S4748C2D0Ev();
extern void _ZN7S4748C32v3Ev();
extern void _ZN7S4748C32v4Ev();
extern void _ZN7S4748C32v5Ev();
extern void _ZN7S4748C22v6Ev();
extern void _ZN7S4748C22v7Ev();
static  VTBL_ENTRY vtc_S4748C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4748C2[0]),
  (VTBL_ENTRY)&_ZN7S4748C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4748C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4748C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4748C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4748C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4748C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4748C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4748C2[];
extern  VTBL_ENTRY _ZTV7S4748C2[];
Class_Descriptor cd_S4748C2 = {  "S4748C2", // class name
  bases_S4748C2, 1,
  &(vtc_S4748C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4748C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4748C2),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  S4748C1  : S4748C2 {
  ::S12560C14_nt s4748c1f0;
  ::S5066C7_nt s4748c1f1;
  char s4748c1f2;
  int s4748c1f3[2];
  virtual  ~S4748C1(); // _ZN7S4748C1D1Ev
  virtual void  v1(); // _ZN7S4748C12v1Ev
  virtual void  v2(); // _ZN7S4748C12v2Ev
  S4748C1(); // tgen
};
//SIG(1 S4748C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC4 FC6{ m Fp} Fc Fi[2]}


 S4748C1 ::~S4748C1(){ note_dtor("S4748C1", this);}
void  S4748C1 ::v1(){vfunc_called(this, "_ZN7S4748C12v1Ev");}
void  S4748C1 ::v2(){vfunc_called(this, "_ZN7S4748C12v2Ev");}
S4748C1 ::S4748C1(){ note_ctor("S4748C1", this);} // tgen

static void Test_S4748C1()
{
  extern Class_Descriptor cd_S4748C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S4748C1, buf);
    S4748C1 *dp, &lv = *(dp=new (buf) S4748C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S4748C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4748C1)");
    check_base_class_offset(lv, (S4748C3*)(S4748C2*), 0, "S4748C1");
    check_base_class_offset(lv, (S4748C2*), 0, "S4748C1");
    check_field_offset(lv, s4748c1f0, ABISELECT(48,32), "S4748C1.s4748c1f0");
    check_field_offset(lv, s4748c1f1, ABISELECT(64,44), "S4748C1.s4748c1f1");
    check_field_offset(lv, s4748c1f2, ABISELECT(72,48), "S4748C1.s4748c1f2");
    check_field_offset(lv, s4748c1f3, ABISELECT(76,52), "S4748C1.s4748c1f3");
    test_class_info(&lv, &cd_S4748C1);
    dp->~S4748C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4748C1(Test_S4748C1, "S4748C1", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN7S4748C1C1Ev();
extern void _ZN7S4748C1D1Ev();
Name_Map name_map_S4748C1[] = {
  NSPAIR(_ZN7S4748C1C1Ev),
  NSPAIR(_ZN7S4748C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4748C3;
extern VTBL_ENTRY _ZTI7S4748C3[];
extern  VTBL_ENTRY _ZTV7S4748C3[];
extern Class_Descriptor cd_S4748C2;
extern VTBL_ENTRY _ZTI7S4748C2[];
extern  VTBL_ENTRY _ZTV7S4748C2[];
static Base_Class bases_S4748C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4748C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4748C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4748C1[];
extern void _ZN7S4748C1D1Ev();
extern void _ZN7S4748C1D0Ev();
extern void _ZN7S4748C32v3Ev();
extern void _ZN7S4748C32v4Ev();
extern void _ZN7S4748C32v5Ev();
extern void _ZN7S4748C22v6Ev();
extern void _ZN7S4748C22v7Ev();
extern void _ZN7S4748C12v1Ev();
extern void _ZN7S4748C12v2Ev();
static  VTBL_ENTRY vtc_S4748C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4748C1[0]),
  (VTBL_ENTRY)&_ZN7S4748C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4748C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4748C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4748C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4748C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4748C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4748C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4748C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4748C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4748C1[];
extern  VTBL_ENTRY _ZTV7S4748C1[];
Class_Descriptor cd_S4748C1 = {  "S4748C1", // class name
  bases_S4748C1, 2,
  &(vtc_S4748C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI7S4748C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4748C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12147C6_nt  {
  void *s12147c6f0;
  int s12147c6f1[2];
  ::S19863C10 s12147c6f2;
  void  mf12147c6(); // _ZN11S12147C6_nt9mf12147c6Ev
};
//SIG(-1 S12147C6_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S12147C6_nt ::mf12147c6(){}

//skip512 S12147C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12147C1  {
  ::S12560C14_nt s12147c1f0;
  ::S5066C13_nt s12147c1f1;
  ::S12147C6_nt s12147c1f2;
  ::S12147C6_nt s12147c1f3;
};
//SIG(1 S12147C1) C1{ FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi[2] FC5{ m}} FC6{ m Fp Fi[2] FC3} FC6}



static void Test_S12147C1()
{
  {
    init_simple_test("S12147C1");
    S12147C1 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S12147C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12147C1)");
    check_field_offset(lv, s12147c1f0, 0, "S12147C1.s12147c1f0");
    check_field_offset(lv, s12147c1f1, ABISELECT(16,12), "S12147C1.s12147c1f1");
    check_field_offset(lv, s12147c1f2, ABISELECT(40,28), "S12147C1.s12147c1f2");
    check_field_offset(lv, s12147c1f3, ABISELECT(64,44), "S12147C1.s12147c1f3");
  }
}
static Arrange_To_Call_Me vS12147C1(Test_S12147C1, "S12147C1", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1725C4_nt  {
  int s1725c4f0;
  void  mf1725c4(); // _ZN10S1725C4_nt8mf1725c4Ev
  virtual  ~S1725C4_nt(); // _ZN10S1725C4_ntD1Ev
  S1725C4_nt(); // tgen
};
//SIG(-1 S1725C4_nt) C1{ vd m Fi}


void  S1725C4_nt ::mf1725c4(){}
 S1725C4_nt ::~S1725C4_nt(){ note_dtor("S1725C4_nt", this);}
S1725C4_nt ::S1725C4_nt(){ note_ctor("S1725C4_nt", this);} // tgen

//skip512 S1725C4_nt

#else // __cplusplus

extern void _ZN10S1725C4_ntC1Ev();
extern void _ZN10S1725C4_ntD1Ev();
Name_Map name_map_S1725C4_nt[] = {
  NSPAIR(_ZN10S1725C4_ntC1Ev),
  NSPAIR(_ZN10S1725C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1725C4_nt[];
extern void _ZN10S1725C4_ntD1Ev();
extern void _ZN10S1725C4_ntD0Ev();
static  VTBL_ENTRY vtc_S1725C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1725C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1725C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1725C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S1725C4_nt[];
VTBL_ENTRY *P__ZTI10S1725C4_nt = _ZTI10S1725C4_nt; 
extern  VTBL_ENTRY _ZTV10S1725C4_nt[];
Class_Descriptor cd_S1725C4_nt = {  "S1725C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1725C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1725C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1725C4_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  S1725C3_nt  : S1725C4_nt {
  int s1725c3f0;
  virtual  ~S1725C3_nt(); // _ZN10S1725C3_ntD1Ev
  S1725C3_nt(); // tgen
};
//SIG(-1 S1725C3_nt) C1{ BC2{ vd m Fi} vd Fi}


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

//skip512 S1725C3_nt

#else // __cplusplus

extern void _ZN10S1725C3_ntC1Ev();
extern void _ZN10S1725C3_ntD1Ev();
Name_Map name_map_S1725C3_nt[] = {
  NSPAIR(_ZN10S1725C3_ntC1Ev),
  NSPAIR(_ZN10S1725C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1725C4_nt;
extern VTBL_ENTRY _ZTI10S1725C4_nt[];
extern  VTBL_ENTRY _ZTV10S1725C4_nt[];
static Base_Class bases_S1725C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1725C4_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 _ZTI10S1725C3_nt[];
extern void _ZN10S1725C3_ntD1Ev();
extern void _ZN10S1725C3_ntD0Ev();
static  VTBL_ENTRY vtc_S1725C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1725C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1725C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1725C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S1725C3_nt[];
VTBL_ENTRY *P__ZTI10S1725C3_nt = _ZTI10S1725C3_nt; 
extern  VTBL_ENTRY _ZTV10S1725C3_nt[];
Class_Descriptor cd_S1725C3_nt = {  "S1725C3_nt", // class name
  bases_S1725C3_nt, 1,
  &(vtc_S1725C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S1725C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1725C3_nt),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  S1725C2_nt  : S1725C3_nt {
  virtual void  v2(); // _ZN10S1725C2_nt2v2Ev
  ~S1725C2_nt(); // tgen
  S1725C2_nt(); // tgen
};
//SIG(-1 S1725C2_nt) C1{ BC2{ BC3{ vd m Fi} vd Fi} v1}


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

//skip512 S1725C2_nt

#else // __cplusplus

extern void _ZN10S1725C2_ntC1Ev();
extern void _ZN10S1725C2_ntD1Ev();
Name_Map name_map_S1725C2_nt[] = {
  NSPAIR(_ZN10S1725C2_ntC1Ev),
  NSPAIR(_ZN10S1725C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1725C4_nt;
extern VTBL_ENTRY _ZTI10S1725C4_nt[];
extern  VTBL_ENTRY _ZTV10S1725C4_nt[];
extern Class_Descriptor cd_S1725C3_nt;
extern VTBL_ENTRY _ZTI10S1725C3_nt[];
extern  VTBL_ENTRY _ZTV10S1725C3_nt[];
static Base_Class bases_S1725C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1725C4_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_S1725C3_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 _ZTI10S1725C2_nt[];
extern void _ZN10S1725C2_ntD1Ev();
extern void _ZN10S1725C2_ntD0Ev();
extern void _ZN10S1725C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S1725C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1725C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1725C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1725C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1725C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S1725C2_nt[];
VTBL_ENTRY *P__ZTI10S1725C2_nt = _ZTI10S1725C2_nt; 
extern  VTBL_ENTRY _ZTV10S1725C2_nt[];
Class_Descriptor cd_S1725C2_nt = {  "S1725C2_nt", // class name
  bases_S1725C2_nt, 2,
  &(vtc_S1725C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S1725C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1725C2_nt),5, //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  S1725C6_nt  {
  void *s1725c6f0;
  int s1725c6f1;
  ::S19863C10 s1725c6f2;
  ::S19863C8 s1725c6f3;
  void  mf1725c6(); // _ZN10S1725C6_nt8mf1725c6Ev
};
//SIG(-1 S1725C6_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S1725C6_nt ::mf1725c6(){}

//skip512 S1725C6_nt

#else // __cplusplus

Class_Descriptor cd_S1725C6_nt = {  "S1725C6_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  S1725C5_nt  : S1725C6_nt {
};
//SIG(-1 S1725C5_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S1725C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S1725C6_nt;
static Base_Class bases_S1725C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1725C6_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  S1725C1  : S1725C2_nt {
  ::S1725C5_nt s1725c1f0;
  ::S5066C10_nt s1725c1f1;
  virtual  ~S1725C1(); // _ZN7S1725C1D1Ev
  virtual void  v1(); // _ZN7S1725C12v1Ev
  S1725C1(); // tgen
};
//SIG(1 S1725C1) C1{ BC2{ BC3{ BC4{ vd m Fi} vd Fi} v2} vd v1 FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC9{ m FC10{ Fl[4]}}}


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

static void Test_S1725C1()
{
  extern Class_Descriptor cd_S1725C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S1725C1, buf);
    S1725C1 *dp, &lv = *(dp=new (buf) S1725C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S1725C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1725C1)");
    check_base_class_offset(lv, (S1725C4_nt*)(S1725C3_nt*)(S1725C2_nt*), 0, "S1725C1");
    check_base_class_offset(lv, (S1725C3_nt*)(S1725C2_nt*), 0, "S1725C1");
    check_base_class_offset(lv, (S1725C2_nt*), 0, "S1725C1");
    check_field_offset(lv, s1725c1f0, ABISELECT(16,12), "S1725C1.s1725c1f0");
    check_field_offset(lv, s1725c1f1, ABISELECT(32,24), "S1725C1.s1725c1f1");
    test_class_info(&lv, &cd_S1725C1);
    dp->~S1725C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1725C1(Test_S1725C1, "S1725C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S1725C1C1Ev();
extern void _ZN7S1725C1D1Ev();
Name_Map name_map_S1725C1[] = {
  NSPAIR(_ZN7S1725C1C1Ev),
  NSPAIR(_ZN7S1725C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1725C4_nt;
extern VTBL_ENTRY _ZTI10S1725C4_nt[];
extern  VTBL_ENTRY _ZTV10S1725C4_nt[];
extern Class_Descriptor cd_S1725C3_nt;
extern VTBL_ENTRY _ZTI10S1725C3_nt[];
extern  VTBL_ENTRY _ZTV10S1725C3_nt[];
extern Class_Descriptor cd_S1725C2_nt;
extern VTBL_ENTRY _ZTI10S1725C2_nt[];
extern  VTBL_ENTRY _ZTV10S1725C2_nt[];
static Base_Class bases_S1725C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1725C4_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_S1725C3_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_S1725C2_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 _ZTI7S1725C1[];
extern void _ZN7S1725C1D1Ev();
extern void _ZN7S1725C1D0Ev();
extern void _ZN10S1725C2_nt2v2Ev();
extern void _ZN7S1725C12v1Ev();
static  VTBL_ENTRY vtc_S1725C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1725C1[0]),
  (VTBL_ENTRY)&_ZN7S1725C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1725C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1725C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S1725C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1725C1[];
extern  VTBL_ENTRY _ZTV7S1725C1[];
Class_Descriptor cd_S1725C1 = {  "S1725C1", // class name
  bases_S1725C1, 3,
  &(vtc_S1725C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S1725C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1725C1),6, //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  S4363C3  {
  ::S12560C14_nt s4363c3f0;
  int s4363c3f1[2];
  char s4363c3f2;
  virtual  ~S4363C3(); // _ZN7S4363C3D1Ev
  virtual void  v2(); // _ZN7S4363C32v2Ev
  virtual void  v3(); // _ZN7S4363C32v3Ev
  virtual void  v4(); // _ZN7S4363C32v4Ev
  S4363C3(); // tgen
};
//SIG(-1 S4363C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4363C3 ::~S4363C3(){ note_dtor("S4363C3", this);}
void  S4363C3 ::v2(){vfunc_called(this, "_ZN7S4363C32v2Ev");}
void  S4363C3 ::v3(){vfunc_called(this, "_ZN7S4363C32v3Ev");}
void  S4363C3 ::v4(){vfunc_called(this, "_ZN7S4363C32v4Ev");}
S4363C3 ::S4363C3(){ note_ctor("S4363C3", this);} // tgen

static void Test_S4363C3()
{
  extern Class_Descriptor cd_S4363C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4363C3, buf);
    S4363C3 *dp, &lv = *(dp=new (buf) S4363C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4363C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4363C3)");
    check_field_offset(lv, s4363c3f0, ABISELECT(8,4), "S4363C3.s4363c3f0");
    check_field_offset(lv, s4363c3f1, ABISELECT(24,16), "S4363C3.s4363c3f1");
    check_field_offset(lv, s4363c3f2, ABISELECT(32,24), "S4363C3.s4363c3f2");
    test_class_info(&lv, &cd_S4363C3);
    dp->~S4363C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4363C3(Test_S4363C3, "S4363C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4363C3C1Ev();
extern void _ZN7S4363C3D1Ev();
Name_Map name_map_S4363C3[] = {
  NSPAIR(_ZN7S4363C3C1Ev),
  NSPAIR(_ZN7S4363C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4363C3[];
extern void _ZN7S4363C3D1Ev();
extern void _ZN7S4363C3D0Ev();
extern void _ZN7S4363C32v2Ev();
extern void _ZN7S4363C32v3Ev();
extern void _ZN7S4363C32v4Ev();
static  VTBL_ENTRY vtc_S4363C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4363C3[0]),
  (VTBL_ENTRY)&_ZN7S4363C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4363C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4363C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4363C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4363C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4363C3[];
extern  VTBL_ENTRY _ZTV7S4363C3[];
Class_Descriptor cd_S4363C3 = {  "S4363C3", // class name
  0,0,//no base classes
  &(vtc_S4363C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4363C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4363C3),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  S4363C2  : S4363C3 {
  void *s4363c2f0;
  virtual void  v5(); // _ZN7S4363C22v5Ev
  virtual void  v6(); // _ZN7S4363C22v6Ev
  ~S4363C2(); // tgen
  S4363C2(); // tgen
};
//SIG(-1 S4363C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4363C2 ::v5(){vfunc_called(this, "_ZN7S4363C22v5Ev");}
void  S4363C2 ::v6(){vfunc_called(this, "_ZN7S4363C22v6Ev");}
S4363C2 ::~S4363C2(){ note_dtor("S4363C2", this);} // tgen
S4363C2 ::S4363C2(){ note_ctor("S4363C2", this);} // tgen

static void Test_S4363C2()
{
  extern Class_Descriptor cd_S4363C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4363C2, buf);
    S4363C2 *dp, &lv = *(dp=new (buf) S4363C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4363C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4363C2)");
    check_base_class_offset(lv, (S4363C3*), 0, "S4363C2");
    check_field_offset(lv, s4363c2f0, ABISELECT(40,28), "S4363C2.s4363c2f0");
    test_class_info(&lv, &cd_S4363C2);
    dp->~S4363C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4363C2(Test_S4363C2, "S4363C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4363C2C1Ev();
extern void _ZN7S4363C2D1Ev();
Name_Map name_map_S4363C2[] = {
  NSPAIR(_ZN7S4363C2C1Ev),
  NSPAIR(_ZN7S4363C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4363C3;
extern VTBL_ENTRY _ZTI7S4363C3[];
extern  VTBL_ENTRY _ZTV7S4363C3[];
static Base_Class bases_S4363C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4363C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4363C2[];
extern void _ZN7S4363C2D1Ev();
extern void _ZN7S4363C2D0Ev();
extern void _ZN7S4363C32v2Ev();
extern void _ZN7S4363C32v3Ev();
extern void _ZN7S4363C32v4Ev();
extern void _ZN7S4363C22v5Ev();
extern void _ZN7S4363C22v6Ev();
static  VTBL_ENTRY vtc_S4363C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4363C2[0]),
  (VTBL_ENTRY)&_ZN7S4363C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4363C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4363C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4363C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4363C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4363C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4363C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4363C2[];
extern  VTBL_ENTRY _ZTV7S4363C2[];
Class_Descriptor cd_S4363C2 = {  "S4363C2", // class name
  bases_S4363C2, 1,
  &(vtc_S4363C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4363C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4363C2),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  S4363C1  : S4363C2 {
  ::S12560C14_nt s4363c1f0;
  ::S12560C14_nt s4363c1f1;
  ::S5066C7_nt s4363c1f2;
  void *s4363c1f3;
  int s4363c1f4;
  virtual void  v1(); // _ZN7S4363C12v1Ev
  ~S4363C1(); // tgen
  S4363C1(); // tgen
};
//SIG(1 S4363C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC4 FC4 FC6{ m Fp} Fp Fi}


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

static void Test_S4363C1()
{
  extern Class_Descriptor cd_S4363C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4363C1, buf);
    S4363C1 *dp, &lv = *(dp=new (buf) S4363C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4363C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4363C1)");
    check_base_class_offset(lv, (S4363C3*)(S4363C2*), 0, "S4363C1");
    check_base_class_offset(lv, (S4363C2*), 0, "S4363C1");
    check_field_offset(lv, s4363c1f0, ABISELECT(48,32), "S4363C1.s4363c1f0");
    check_field_offset(lv, s4363c1f1, ABISELECT(64,44), "S4363C1.s4363c1f1");
    check_field_offset(lv, s4363c1f2, ABISELECT(80,56), "S4363C1.s4363c1f2");
    check_field_offset(lv, s4363c1f3, ABISELECT(88,60), "S4363C1.s4363c1f3");
    check_field_offset(lv, s4363c1f4, ABISELECT(96,64), "S4363C1.s4363c1f4");
    test_class_info(&lv, &cd_S4363C1);
    dp->~S4363C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4363C1(Test_S4363C1, "S4363C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4363C1C1Ev();
extern void _ZN7S4363C1D1Ev();
Name_Map name_map_S4363C1[] = {
  NSPAIR(_ZN7S4363C1C1Ev),
  NSPAIR(_ZN7S4363C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4363C3;
extern VTBL_ENTRY _ZTI7S4363C3[];
extern  VTBL_ENTRY _ZTV7S4363C3[];
extern Class_Descriptor cd_S4363C2;
extern VTBL_ENTRY _ZTI7S4363C2[];
extern  VTBL_ENTRY _ZTV7S4363C2[];
static Base_Class bases_S4363C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4363C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4363C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4363C1[];
extern void _ZN7S4363C1D1Ev();
extern void _ZN7S4363C1D0Ev();
extern void _ZN7S4363C32v2Ev();
extern void _ZN7S4363C32v3Ev();
extern void _ZN7S4363C32v4Ev();
extern void _ZN7S4363C22v5Ev();
extern void _ZN7S4363C22v6Ev();
extern void _ZN7S4363C12v1Ev();
static  VTBL_ENTRY vtc_S4363C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4363C1[0]),
  (VTBL_ENTRY)&_ZN7S4363C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4363C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4363C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4363C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4363C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4363C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4363C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4363C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4363C1[];
extern  VTBL_ENTRY _ZTV7S4363C1[];
Class_Descriptor cd_S4363C1 = {  "S4363C1", // class name
  bases_S4363C1, 2,
  &(vtc_S4363C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4363C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4363C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8959C2  {
  void *s8959c2f0;
  __tsi64 s8959c2f1;
  void *s8959c2f2;
  ::S165C33_nt s8959c2f3;
  void *s8959c2f4;
  int s8959c2f5;
  void *s8959c2f6;
  int s8959c2f7[4];
  virtual  ~S8959C2(); // _ZN7S8959C2D1Ev
  virtual void  v2(); // _ZN7S8959C22v2Ev
  virtual void  v3(); // _ZN7S8959C22v3Ev
  virtual void  v4(); // _ZN7S8959C22v4Ev
  virtual void  v5(); // _ZN7S8959C22v5Ev
  virtual void  v6(); // _ZN7S8959C22v6Ev
  S8959C2(); // tgen
};
//SIG(-1 S8959C2) C1{ vd v1 v2 v3 v4 v5 Fp FL Fp FC2{ m Fi[4]} Fp Fi Fp Fi[4]}


 S8959C2 ::~S8959C2(){ note_dtor("S8959C2", this);}
void  S8959C2 ::v2(){vfunc_called(this, "_ZN7S8959C22v2Ev");}
void  S8959C2 ::v3(){vfunc_called(this, "_ZN7S8959C22v3Ev");}
void  S8959C2 ::v4(){vfunc_called(this, "_ZN7S8959C22v4Ev");}
void  S8959C2 ::v5(){vfunc_called(this, "_ZN7S8959C22v5Ev");}
void  S8959C2 ::v6(){vfunc_called(this, "_ZN7S8959C22v6Ev");}
S8959C2 ::S8959C2(){ note_ctor("S8959C2", this);} // tgen

static void Test_S8959C2()
{
  extern Class_Descriptor cd_S8959C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S8959C2, buf);
    S8959C2 *dp, &lv = *(dp=new (buf) S8959C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S8959C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8959C2)");
    check_field_offset(lv, s8959c2f0, ABISELECT(8,4), "S8959C2.s8959c2f0");
    check_field_offset(lv, s8959c2f1, ABISELECT(16,8), "S8959C2.s8959c2f1");
    check_field_offset(lv, s8959c2f2, ABISELECT(24,16), "S8959C2.s8959c2f2");
    check_field_offset(lv, s8959c2f3, ABISELECT(32,20), "S8959C2.s8959c2f3");
    check_field_offset(lv, s8959c2f4, ABISELECT(48,36), "S8959C2.s8959c2f4");
    check_field_offset(lv, s8959c2f5, ABISELECT(56,40), "S8959C2.s8959c2f5");
    check_field_offset(lv, s8959c2f6, ABISELECT(64,44), "S8959C2.s8959c2f6");
    check_field_offset(lv, s8959c2f7, ABISELECT(72,48), "S8959C2.s8959c2f7");
    test_class_info(&lv, &cd_S8959C2);
    dp->~S8959C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8959C2(Test_S8959C2, "S8959C2", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN7S8959C2C1Ev();
extern void _ZN7S8959C2D1Ev();
Name_Map name_map_S8959C2[] = {
  NSPAIR(_ZN7S8959C2C1Ev),
  NSPAIR(_ZN7S8959C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8959C2[];
extern void _ZN7S8959C2D1Ev();
extern void _ZN7S8959C2D0Ev();
extern void _ZN7S8959C22v2Ev();
extern void _ZN7S8959C22v3Ev();
extern void _ZN7S8959C22v4Ev();
extern void _ZN7S8959C22v5Ev();
extern void _ZN7S8959C22v6Ev();
static  VTBL_ENTRY vtc_S8959C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8959C2[0]),
  (VTBL_ENTRY)&_ZN7S8959C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8959C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8959C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8959C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8959C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8959C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8959C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S8959C2[];
extern  VTBL_ENTRY _ZTV7S8959C2[];
Class_Descriptor cd_S8959C2 = {  "S8959C2", // class name
  0,0,//no base classes
  &(vtc_S8959C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI7S8959C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8959C2),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  S8959C1  : S8959C2 {
  ::S9463C5_nt s8959c1f0;
  virtual void  v1(); // _ZN7S8959C12v1Ev
  ~S8959C1(); // tgen
  S8959C1(); // tgen
};
//SIG(1 S8959C1) C1{ BC2{ vd v2 v3 v4 v5 v6 Fp FL Fp FC3{ m Fi[4]} Fp Fi Fp Fi[4]} v1 FC4{ BC5{ m Fi[3]} Fi}}


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

static void Test_S8959C1()
{
  extern Class_Descriptor cd_S8959C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,21)];
    init_test(&cd_S8959C1, buf);
    S8959C1 *dp, &lv = *(dp=new (buf) S8959C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,80), "sizeof(S8959C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8959C1)");
    check_base_class_offset(lv, (S8959C2*), 0, "S8959C1");
    check_field_offset(lv, s8959c1f0, ABISELECT(88,64), "S8959C1.s8959c1f0");
    test_class_info(&lv, &cd_S8959C1);
    dp->~S8959C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8959C1(Test_S8959C1, "S8959C1", ABISELECT(104,80));

#else // __cplusplus

extern void _ZN7S8959C1C1Ev();
extern void _ZN7S8959C1D1Ev();
Name_Map name_map_S8959C1[] = {
  NSPAIR(_ZN7S8959C1C1Ev),
  NSPAIR(_ZN7S8959C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8959C2;
extern VTBL_ENTRY _ZTI7S8959C2[];
extern  VTBL_ENTRY _ZTV7S8959C2[];
static Base_Class bases_S8959C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8959C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8959C1[];
extern void _ZN7S8959C1D1Ev();
extern void _ZN7S8959C1D0Ev();
extern void _ZN7S8959C22v2Ev();
extern void _ZN7S8959C22v3Ev();
extern void _ZN7S8959C22v4Ev();
extern void _ZN7S8959C22v5Ev();
extern void _ZN7S8959C22v6Ev();
extern void _ZN7S8959C12v1Ev();
static  VTBL_ENTRY vtc_S8959C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8959C1[0]),
  (VTBL_ENTRY)&_ZN7S8959C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8959C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8959C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8959C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8959C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8959C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8959C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8959C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8959C1[];
extern  VTBL_ENTRY _ZTV7S8959C1[];
Class_Descriptor cd_S8959C1 = {  "S8959C1", // class name
  bases_S8959C1, 1,
  &(vtc_S8959C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,80), // object size
  NSPAIRA(_ZTI7S8959C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8959C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9653C2  {
  ::S8455C3_nt s9653c2f0;
  int s9653c2f1;
  void *s9653c2f2[3];
  virtual  ~S9653C2(); // _ZN7S9653C2D1Ev
  virtual void  v4(); // _ZN7S9653C22v4Ev
  virtual void  v5(); // _ZN7S9653C22v5Ev
  virtual void  v6(); // _ZN7S9653C22v6Ev
  S9653C2(); // tgen
};
//SIG(-1 S9653C2) C1{ vd v1 v2 v3 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi Fp[3]}


 S9653C2 ::~S9653C2(){ note_dtor("S9653C2", this);}
void  S9653C2 ::v4(){vfunc_called(this, "_ZN7S9653C22v4Ev");}
void  S9653C2 ::v5(){vfunc_called(this, "_ZN7S9653C22v5Ev");}
void  S9653C2 ::v6(){vfunc_called(this, "_ZN7S9653C22v6Ev");}
S9653C2 ::S9653C2(){ note_ctor("S9653C2", this);} // tgen

static void Test_S9653C2()
{
  extern Class_Descriptor cd_S9653C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S9653C2, buf);
    S9653C2 *dp, &lv = *(dp=new (buf) S9653C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S9653C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9653C2)");
    check_field_offset(lv, s9653c2f0, ABISELECT(8,4), "S9653C2.s9653c2f0");
    check_field_offset(lv, s9653c2f1, ABISELECT(32,20), "S9653C2.s9653c2f1");
    check_field_offset(lv, s9653c2f2, ABISELECT(40,24), "S9653C2.s9653c2f2");
    test_class_info(&lv, &cd_S9653C2);
    dp->~S9653C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9653C2(Test_S9653C2, "S9653C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S9653C2C1Ev();
extern void _ZN7S9653C2D1Ev();
Name_Map name_map_S9653C2[] = {
  NSPAIR(_ZN7S9653C2C1Ev),
  NSPAIR(_ZN7S9653C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9653C2[];
extern void _ZN7S9653C2D1Ev();
extern void _ZN7S9653C2D0Ev();
extern void _ZN7S9653C22v4Ev();
extern void _ZN7S9653C22v5Ev();
extern void _ZN7S9653C22v6Ev();
static  VTBL_ENTRY vtc_S9653C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9653C2[0]),
  (VTBL_ENTRY)&_ZN7S9653C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9653C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9653C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9653C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9653C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9653C2[];
extern  VTBL_ENTRY _ZTV7S9653C2[];
Class_Descriptor cd_S9653C2 = {  "S9653C2", // class name
  0,0,//no base classes
  &(vtc_S9653C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S9653C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9653C2),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  S9653C6_nt  {
  char s9653c6f0;
  void  mf9653c6(); // _ZN10S9653C6_nt8mf9653c6Ev
  virtual  ~S9653C6_nt(); // _ZN10S9653C6_ntD1Ev
  S9653C6_nt(); // tgen
};
//SIG(-1 S9653C6_nt) C1{ vd m Fc}


void  S9653C6_nt ::mf9653c6(){}
 S9653C6_nt ::~S9653C6_nt(){ note_dtor("S9653C6_nt", this);}
S9653C6_nt ::S9653C6_nt(){ note_ctor("S9653C6_nt", this);} // tgen

//skip512 S9653C6_nt

#else // __cplusplus

extern void _ZN10S9653C6_ntC1Ev();
extern void _ZN10S9653C6_ntD1Ev();
Name_Map name_map_S9653C6_nt[] = {
  NSPAIR(_ZN10S9653C6_ntC1Ev),
  NSPAIR(_ZN10S9653C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9653C6_nt[];
extern void _ZN10S9653C6_ntD1Ev();
extern void _ZN10S9653C6_ntD0Ev();
static  VTBL_ENTRY vtc_S9653C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9653C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S9653C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9653C6_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S9653C6_nt[];
VTBL_ENTRY *P__ZTI10S9653C6_nt = _ZTI10S9653C6_nt; 
extern  VTBL_ENTRY _ZTV10S9653C6_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9653C1  : S9653C2 {
  void *s9653c1f0;
  ::S9653C6_nt s9653c1f1;
  virtual  ~S9653C1(); // _ZN7S9653C1D1Ev
  virtual void  v1(); // _ZN7S9653C12v1Ev
  virtual void  v2(); // _ZN7S9653C12v2Ev
  virtual void  v3(); // _ZN7S9653C12v3Ev
  S9653C1(); // tgen
};
//SIG(1 S9653C1) C1{ BC2{ vd v4 v5 v6 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fi Fp[3]} vd v1 v2 v3 Fp FC6{ vd m Fc}}


 S9653C1 ::~S9653C1(){ note_dtor("S9653C1", this);}
void  S9653C1 ::v1(){vfunc_called(this, "_ZN7S9653C12v1Ev");}
void  S9653C1 ::v2(){vfunc_called(this, "_ZN7S9653C12v2Ev");}
void  S9653C1 ::v3(){vfunc_called(this, "_ZN7S9653C12v3Ev");}
S9653C1 ::S9653C1(){ note_ctor("S9653C1", this);} // tgen

static void Test_S9653C1()
{
  extern Class_Descriptor cd_S9653C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S9653C1, buf);
    S9653C1 *dp, &lv = *(dp=new (buf) S9653C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S9653C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9653C1)");
    check_base_class_offset(lv, (S9653C2*), 0, "S9653C1");
    check_field_offset(lv, s9653c1f0, ABISELECT(64,36), "S9653C1.s9653c1f0");
    check_field_offset(lv, s9653c1f1, ABISELECT(72,40), "S9653C1.s9653c1f1");
    test_class_info(&lv, &cd_S9653C1);
    dp->~S9653C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9653C1(Test_S9653C1, "S9653C1", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S9653C1C1Ev();
extern void _ZN7S9653C1D1Ev();
Name_Map name_map_S9653C1[] = {
  NSPAIR(_ZN7S9653C1C1Ev),
  NSPAIR(_ZN7S9653C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9653C2;
extern VTBL_ENTRY _ZTI7S9653C2[];
extern  VTBL_ENTRY _ZTV7S9653C2[];
static Base_Class bases_S9653C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9653C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9653C1[];
extern void _ZN7S9653C1D1Ev();
extern void _ZN7S9653C1D0Ev();
extern void _ZN7S9653C22v4Ev();
extern void _ZN7S9653C22v5Ev();
extern void _ZN7S9653C22v6Ev();
extern void _ZN7S9653C12v1Ev();
extern void _ZN7S9653C12v2Ev();
extern void _ZN7S9653C12v3Ev();
static  VTBL_ENTRY vtc_S9653C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9653C1[0]),
  (VTBL_ENTRY)&_ZN7S9653C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9653C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9653C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9653C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9653C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9653C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9653C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9653C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9653C1[];
extern  VTBL_ENTRY _ZTV7S9653C1[];
Class_Descriptor cd_S9653C1 = {  "S9653C1", // class name
  bases_S9653C1, 1,
  &(vtc_S9653C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S9653C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9653C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8960C2  {
  void *s8960c2f0;
  __tsi64 s8960c2f1;
  void *s8960c2f2;
  ::S165C33_nt s8960c2f3;
  void *s8960c2f4;
  int s8960c2f5;
  void *s8960c2f6;
  int s8960c2f7[4];
  virtual  ~S8960C2(); // _ZN7S8960C2D1Ev
  virtual void  v2(); // _ZN7S8960C22v2Ev
  virtual void  v3(); // _ZN7S8960C22v3Ev
  virtual void  v4(); // _ZN7S8960C22v4Ev
  virtual void  v5(); // _ZN7S8960C22v5Ev
  virtual void  v6(); // _ZN7S8960C22v6Ev
  S8960C2(); // tgen
};
//SIG(-1 S8960C2) C1{ vd v1 v2 v3 v4 v5 Fp FL Fp FC2{ m Fi[4]} Fp Fi Fp Fi[4]}


 S8960C2 ::~S8960C2(){ note_dtor("S8960C2", this);}
void  S8960C2 ::v2(){vfunc_called(this, "_ZN7S8960C22v2Ev");}
void  S8960C2 ::v3(){vfunc_called(this, "_ZN7S8960C22v3Ev");}
void  S8960C2 ::v4(){vfunc_called(this, "_ZN7S8960C22v4Ev");}
void  S8960C2 ::v5(){vfunc_called(this, "_ZN7S8960C22v5Ev");}
void  S8960C2 ::v6(){vfunc_called(this, "_ZN7S8960C22v6Ev");}
S8960C2 ::S8960C2(){ note_ctor("S8960C2", this);} // tgen

static void Test_S8960C2()
{
  extern Class_Descriptor cd_S8960C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S8960C2, buf);
    S8960C2 *dp, &lv = *(dp=new (buf) S8960C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S8960C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8960C2)");
    check_field_offset(lv, s8960c2f0, ABISELECT(8,4), "S8960C2.s8960c2f0");
    check_field_offset(lv, s8960c2f1, ABISELECT(16,8), "S8960C2.s8960c2f1");
    check_field_offset(lv, s8960c2f2, ABISELECT(24,16), "S8960C2.s8960c2f2");
    check_field_offset(lv, s8960c2f3, ABISELECT(32,20), "S8960C2.s8960c2f3");
    check_field_offset(lv, s8960c2f4, ABISELECT(48,36), "S8960C2.s8960c2f4");
    check_field_offset(lv, s8960c2f5, ABISELECT(56,40), "S8960C2.s8960c2f5");
    check_field_offset(lv, s8960c2f6, ABISELECT(64,44), "S8960C2.s8960c2f6");
    check_field_offset(lv, s8960c2f7, ABISELECT(72,48), "S8960C2.s8960c2f7");
    test_class_info(&lv, &cd_S8960C2);
    dp->~S8960C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8960C2(Test_S8960C2, "S8960C2", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN7S8960C2C1Ev();
extern void _ZN7S8960C2D1Ev();
Name_Map name_map_S8960C2[] = {
  NSPAIR(_ZN7S8960C2C1Ev),
  NSPAIR(_ZN7S8960C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8960C2[];
extern void _ZN7S8960C2D1Ev();
extern void _ZN7S8960C2D0Ev();
extern void _ZN7S8960C22v2Ev();
extern void _ZN7S8960C22v3Ev();
extern void _ZN7S8960C22v4Ev();
extern void _ZN7S8960C22v5Ev();
extern void _ZN7S8960C22v6Ev();
static  VTBL_ENTRY vtc_S8960C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8960C2[0]),
  (VTBL_ENTRY)&_ZN7S8960C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8960C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8960C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8960C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8960C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8960C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8960C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S8960C2[];
extern  VTBL_ENTRY _ZTV7S8960C2[];
Class_Descriptor cd_S8960C2 = {  "S8960C2", // class name
  0,0,//no base classes
  &(vtc_S8960C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI7S8960C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8960C2),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  S8960C1  : S8960C2 {
  ::S1542C30_nt s8960c1f0;
  int s8960c1f1[2];
  virtual void  v1(); // _ZN7S8960C12v1Ev
  ~S8960C1(); // tgen
  S8960C1(); // tgen
};
//SIG(1 S8960C1) C1{ BC2{ vd v2 v3 v4 v5 v6 Fp FL Fp FC3{ m Fi[4]} Fp Fi Fp Fi[4]} v1 FC4{ m Fi[3]} Fi[2]}


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

static void Test_S8960C1()
{
  extern Class_Descriptor cd_S8960C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,22)];
    init_test(&cd_S8960C1, buf);
    S8960C1 *dp, &lv = *(dp=new (buf) S8960C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,84), "sizeof(S8960C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8960C1)");
    check_base_class_offset(lv, (S8960C2*), 0, "S8960C1");
    check_field_offset(lv, s8960c1f0, ABISELECT(88,64), "S8960C1.s8960c1f0");
    check_field_offset(lv, s8960c1f1, ABISELECT(100,76), "S8960C1.s8960c1f1");
    test_class_info(&lv, &cd_S8960C1);
    dp->~S8960C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8960C1(Test_S8960C1, "S8960C1", ABISELECT(112,84));

#else // __cplusplus

extern void _ZN7S8960C1C1Ev();
extern void _ZN7S8960C1D1Ev();
Name_Map name_map_S8960C1[] = {
  NSPAIR(_ZN7S8960C1C1Ev),
  NSPAIR(_ZN7S8960C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8960C2;
extern VTBL_ENTRY _ZTI7S8960C2[];
extern  VTBL_ENTRY _ZTV7S8960C2[];
static Base_Class bases_S8960C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8960C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8960C1[];
extern void _ZN7S8960C1D1Ev();
extern void _ZN7S8960C1D0Ev();
extern void _ZN7S8960C22v2Ev();
extern void _ZN7S8960C22v3Ev();
extern void _ZN7S8960C22v4Ev();
extern void _ZN7S8960C22v5Ev();
extern void _ZN7S8960C22v6Ev();
extern void _ZN7S8960C12v1Ev();
static  VTBL_ENTRY vtc_S8960C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8960C1[0]),
  (VTBL_ENTRY)&_ZN7S8960C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8960C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8960C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8960C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8960C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8960C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8960C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8960C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8960C1[];
extern  VTBL_ENTRY _ZTV7S8960C1[];
Class_Descriptor cd_S8960C1 = {  "S8960C1", // class name
  bases_S8960C1, 1,
  &(vtc_S8960C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,84), // object size
  NSPAIRA(_ZTI7S8960C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8960C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9523C2_nt  {
  virtual  ~S9523C2_nt(); // _ZN10S9523C2_ntD1Ev
  virtual void  v3(); // _ZN10S9523C2_nt2v3Ev
  virtual void  v4(); // _ZN10S9523C2_nt2v4Ev
  virtual void  v5(); // _ZN10S9523C2_nt2v5Ev
  virtual void  v6(); // _ZN10S9523C2_nt2v6Ev
  S9523C2_nt(); // tgen
};
//SIG(-1 S9523C2_nt) C1{ vd v1 v2 v3 v4}


 S9523C2_nt ::~S9523C2_nt(){ note_dtor("S9523C2_nt", this);}
void  S9523C2_nt ::v3(){vfunc_called(this, "_ZN10S9523C2_nt2v3Ev");}
void  S9523C2_nt ::v4(){vfunc_called(this, "_ZN10S9523C2_nt2v4Ev");}
void  S9523C2_nt ::v5(){vfunc_called(this, "_ZN10S9523C2_nt2v5Ev");}
void  S9523C2_nt ::v6(){vfunc_called(this, "_ZN10S9523C2_nt2v6Ev");}
S9523C2_nt ::S9523C2_nt(){ note_ctor("S9523C2_nt", this);} // tgen

//skip512 S9523C2_nt

#else // __cplusplus

extern void _ZN10S9523C2_ntC1Ev();
extern void _ZN10S9523C2_ntD1Ev();
Name_Map name_map_S9523C2_nt[] = {
  NSPAIR(_ZN10S9523C2_ntC1Ev),
  NSPAIR(_ZN10S9523C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9523C2_nt[];
extern void _ZN10S9523C2_ntD1Ev();
extern void _ZN10S9523C2_ntD0Ev();
extern void _ZN10S9523C2_nt2v3Ev();
extern void _ZN10S9523C2_nt2v4Ev();
extern void _ZN10S9523C2_nt2v5Ev();
extern void _ZN10S9523C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S9523C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9523C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9523C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9523C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9523C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9523C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9523C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9523C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S9523C2_nt[];
VTBL_ENTRY *P__ZTI10S9523C2_nt = _ZTI10S9523C2_nt; 
extern  VTBL_ENTRY _ZTV10S9523C2_nt[];
Class_Descriptor cd_S9523C2_nt = {  "S9523C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9523C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9523C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9523C2_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  S9523C5_nt  {
  __tsi64 s9523c5f0;
  void  mf9523c5(); // _ZN10S9523C5_nt8mf9523c5Ev
};
//SIG(-1 S9523C5_nt) C1{ m FL}


void  S9523C5_nt ::mf9523c5(){}

//skip512 S9523C5_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S9523C4_nt  {
  ::S9523C5_nt s9523c4f0;
  void  mf9523c4(); // _ZN10S9523C4_nt8mf9523c4Ev
};
//SIG(-1 S9523C4_nt) C1{ m FC2{ m FL}}


void  S9523C4_nt ::mf9523c4(){}

//skip512 S9523C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9523C3  {
  void *s9523c3f0[2];
  int s9523c3f1;
  void *s9523c3f2;
  int s9523c3f3[2];
  ::S9523C4_nt s9523c3f4;
  int s9523c3f5;
  void *s9523c3f6[4];
};
//SIG(-1 S9523C3) C1{ Fp[2] Fi Fp Fi[2] FC2{ m FC3{ m FL}} Fi Fp[4]}



static void Test_S9523C3()
{
  {
    init_simple_test("S9523C3");
    S9523C3 lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S9523C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9523C3)");
    check_field_offset(lv, s9523c3f0, 0, "S9523C3.s9523c3f0");
    check_field_offset(lv, s9523c3f1, ABISELECT(16,8), "S9523C3.s9523c3f1");
    check_field_offset(lv, s9523c3f2, ABISELECT(24,12), "S9523C3.s9523c3f2");
    check_field_offset(lv, s9523c3f3, ABISELECT(32,16), "S9523C3.s9523c3f3");
    check_field_offset(lv, s9523c3f4, ABISELECT(40,24), "S9523C3.s9523c3f4");
    check_field_offset(lv, s9523c3f5, ABISELECT(48,32), "S9523C3.s9523c3f5");
    check_field_offset(lv, s9523c3f6, ABISELECT(56,36), "S9523C3.s9523c3f6");
  }
}
static Arrange_To_Call_Me vS9523C3(Test_S9523C3, "S9523C3", ABISELECT(88,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9523C1  : S9523C2_nt {
  ::S9523C3 s9523c1f0;
  virtual  ~S9523C1(); // _ZN7S9523C1D1Ev
  virtual void  v1(); // _ZN7S9523C12v1Ev
  virtual void  v2(); // _ZN7S9523C12v2Ev
  S9523C1(); // tgen
};
//SIG(1 S9523C1) C1{ BC2{ vd v3 v4 v5 v6} vd v1 v2 FC3{ Fp[2] Fi Fp Fi[2] FC4{ m FC5{ m FL}} Fi Fp[4]}}


 S9523C1 ::~S9523C1(){ note_dtor("S9523C1", this);}
void  S9523C1 ::v1(){vfunc_called(this, "_ZN7S9523C12v1Ev");}
void  S9523C1 ::v2(){vfunc_called(this, "_ZN7S9523C12v2Ev");}
S9523C1 ::S9523C1(){ note_ctor("S9523C1", this);} // tgen

static void Test_S9523C1()
{
  extern Class_Descriptor cd_S9523C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,15)];
    init_test(&cd_S9523C1, buf);
    S9523C1 *dp, &lv = *(dp=new (buf) S9523C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S9523C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9523C1)");
    check_base_class_offset(lv, (S9523C2_nt*), 0, "S9523C1");
    check_field_offset(lv, s9523c1f0, ABISELECT(8,4), "S9523C1.s9523c1f0");
    test_class_info(&lv, &cd_S9523C1);
    dp->~S9523C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9523C1(Test_S9523C1, "S9523C1", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S9523C1C1Ev();
extern void _ZN7S9523C1D1Ev();
Name_Map name_map_S9523C1[] = {
  NSPAIR(_ZN7S9523C1C1Ev),
  NSPAIR(_ZN7S9523C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9523C2_nt;
extern VTBL_ENTRY _ZTI10S9523C2_nt[];
extern  VTBL_ENTRY _ZTV10S9523C2_nt[];
static Base_Class bases_S9523C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9523C2_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 _ZTI7S9523C1[];
extern void _ZN7S9523C1D1Ev();
extern void _ZN7S9523C1D0Ev();
extern void _ZN10S9523C2_nt2v3Ev();
extern void _ZN10S9523C2_nt2v4Ev();
extern void _ZN10S9523C2_nt2v5Ev();
extern void _ZN10S9523C2_nt2v6Ev();
extern void _ZN7S9523C12v1Ev();
extern void _ZN7S9523C12v2Ev();
static  VTBL_ENTRY vtc_S9523C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9523C1[0]),
  (VTBL_ENTRY)&_ZN7S9523C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9523C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9523C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9523C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9523C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9523C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S9523C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9523C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9523C1[];
extern  VTBL_ENTRY _ZTV7S9523C1[];
Class_Descriptor cd_S9523C1 = {  "S9523C1", // class name
  bases_S9523C1, 1,
  &(vtc_S9523C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S9523C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9523C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6702C4  {
  virtual void  v6(); // _ZN7S6702C42v6Ev
  virtual void  v7(); // _ZN7S6702C42v7Ev
  virtual void  v8(); // _ZN7S6702C42v8Ev
  ~S6702C4(); // tgen
  S6702C4(); // tgen
};
//SIG(-1 S6702C4) C1{ v1 v2 v3}


void  S6702C4 ::v6(){vfunc_called(this, "_ZN7S6702C42v6Ev");}
void  S6702C4 ::v7(){vfunc_called(this, "_ZN7S6702C42v7Ev");}
void  S6702C4 ::v8(){vfunc_called(this, "_ZN7S6702C42v8Ev");}
S6702C4 ::~S6702C4(){ note_dtor("S6702C4", this);} // tgen
S6702C4 ::S6702C4(){ note_ctor("S6702C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6702C4C1Ev();
extern void _ZN7S6702C4D1Ev();
Name_Map name_map_S6702C4[] = {
  NSPAIR(_ZN7S6702C4C1Ev),
  NSPAIR(_ZN7S6702C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6702C4[];
extern void _ZN7S6702C42v6Ev();
extern void _ZN7S6702C42v7Ev();
extern void _ZN7S6702C42v8Ev();
static  VTBL_ENTRY vtc_S6702C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6702C4[0]),
  (VTBL_ENTRY)&_ZN7S6702C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6702C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6702C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S6702C4[];
extern  VTBL_ENTRY _ZTV7S6702C4[];
Class_Descriptor cd_S6702C4 = {  "S6702C4", // class name
  0,0,//no base classes
  &(vtc_S6702C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6702C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6702C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6702C3  : S6702C4 {
  void *s6702c3f0;
  virtual  ~S6702C3(); // _ZN7S6702C3D1Ev
  virtual void  v9(); // _ZN7S6702C32v9Ev
  virtual void  v10(); // _ZN7S6702C33v10Ev
  virtual void  v11(); // _ZN7S6702C33v11Ev
  virtual void  v12(); // _ZN7S6702C33v12Ev
  virtual void  v13(); // _ZN7S6702C33v13Ev
  S6702C3(); // tgen
};
//SIG(-1 S6702C3) C1{ BC2{ v6 v7 v8} vd v1 v2 v3 v4 v5 Fp}


 S6702C3 ::~S6702C3(){ note_dtor("S6702C3", this);}
void  S6702C3 ::v9(){vfunc_called(this, "_ZN7S6702C32v9Ev");}
void  S6702C3 ::v10(){vfunc_called(this, "_ZN7S6702C33v10Ev");}
void  S6702C3 ::v11(){vfunc_called(this, "_ZN7S6702C33v11Ev");}
void  S6702C3 ::v12(){vfunc_called(this, "_ZN7S6702C33v12Ev");}
void  S6702C3 ::v13(){vfunc_called(this, "_ZN7S6702C33v13Ev");}
S6702C3 ::S6702C3(){ note_ctor("S6702C3", this);} // tgen

static void Test_S6702C3()
{
  extern Class_Descriptor cd_S6702C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6702C3, buf);
    S6702C3 *dp, &lv = *(dp=new (buf) S6702C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6702C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6702C3)");
    check_base_class_offset(lv, (S6702C4*), 0, "S6702C3");
    check_field_offset(lv, s6702c3f0, ABISELECT(8,4), "S6702C3.s6702c3f0");
    test_class_info(&lv, &cd_S6702C3);
    dp->~S6702C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6702C3(Test_S6702C3, "S6702C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6702C3C1Ev();
extern void _ZN7S6702C3D1Ev();
Name_Map name_map_S6702C3[] = {
  NSPAIR(_ZN7S6702C3C1Ev),
  NSPAIR(_ZN7S6702C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6702C4;
extern VTBL_ENTRY _ZTI7S6702C4[];
extern  VTBL_ENTRY _ZTV7S6702C4[];
static Base_Class bases_S6702C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6702C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6702C3[];
extern void _ZN7S6702C42v6Ev();
extern void _ZN7S6702C42v7Ev();
extern void _ZN7S6702C42v8Ev();
extern void _ZN7S6702C3D1Ev();
extern void _ZN7S6702C3D0Ev();
extern void _ZN7S6702C32v9Ev();
extern void _ZN7S6702C33v10Ev();
extern void _ZN7S6702C33v11Ev();
extern void _ZN7S6702C33v12Ev();
extern void _ZN7S6702C33v13Ev();
static  VTBL_ENTRY vtc_S6702C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6702C3[0]),
  (VTBL_ENTRY)&_ZN7S6702C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6702C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6702C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6702C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6702C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6702C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6702C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6702C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6702C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6702C33v13Ev,
};
extern VTBL_ENTRY _ZTI7S6702C3[];
extern  VTBL_ENTRY _ZTV7S6702C3[];
Class_Descriptor cd_S6702C3 = {  "S6702C3", // class name
  bases_S6702C3, 1,
  &(vtc_S6702C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6702C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6702C3),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  S6702C2  {
  ::S6702C3 s6702c2f0;
  virtual  ~S6702C2(); // _ZN7S6702C2D1Ev
  virtual void  v3(); // _ZN7S6702C22v3Ev
  virtual void  v4(); // _ZN7S6702C22v4Ev
  virtual void  v5(); // _ZN7S6702C22v5Ev
  S6702C2(); // tgen
};
//SIG(-1 S6702C2) C1{ vd v1 v2 v3 FC2{ BC3{ v9 v10 v11} vd v4 v5 v6 v7 v8 Fp}}


 S6702C2 ::~S6702C2(){ note_dtor("S6702C2", this);}
void  S6702C2 ::v3(){vfunc_called(this, "_ZN7S6702C22v3Ev");}
void  S6702C2 ::v4(){vfunc_called(this, "_ZN7S6702C22v4Ev");}
void  S6702C2 ::v5(){vfunc_called(this, "_ZN7S6702C22v5Ev");}
S6702C2 ::S6702C2(){ note_ctor("S6702C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6702C2C1Ev();
extern void _ZN7S6702C2D1Ev();
Name_Map name_map_S6702C2[] = {
  NSPAIR(_ZN7S6702C2C1Ev),
  NSPAIR(_ZN7S6702C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6702C2[];
extern void _ZN7S6702C2D1Ev();
extern void _ZN7S6702C2D0Ev();
extern void _ZN7S6702C22v3Ev();
extern void _ZN7S6702C22v4Ev();
extern void _ZN7S6702C22v5Ev();
static  VTBL_ENTRY vtc_S6702C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6702C2[0]),
  (VTBL_ENTRY)&_ZN7S6702C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6702C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6702C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6702C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6702C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S6702C2[];
extern  VTBL_ENTRY _ZTV7S6702C2[];
Class_Descriptor cd_S6702C2 = {  "S6702C2", // class name
  0,0,//no base classes
  &(vtc_S6702C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6702C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6702C2),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  S6702C1  : S6702C2 , S6702C3 {
  ::S6702C2 s6702c1f0;
  virtual  ~S6702C1(); // _ZN7S6702C1D1Ev
  virtual void  v1(); // _ZN7S6702C12v1Ev
  virtual void  v2(); // _ZN7S6702C12v2Ev
  S6702C1(); // tgen
};
//SIG(1 S6702C1) C1{ BC2{ vd v3 v4 v5 FC3{ BC4{ v6 v7 v8} vd v9 v10 v11 v12 v13 Fp}} BC3 vd v1 v2 FC2}


 S6702C1 ::~S6702C1(){ note_dtor("S6702C1", this);}
void  S6702C1 ::v1(){vfunc_called(this, "_ZN7S6702C12v1Ev");}
void  S6702C1 ::v2(){vfunc_called(this, "_ZN7S6702C12v2Ev");}
S6702C1 ::S6702C1(){ note_ctor("S6702C1", this);} // tgen

static void Test_S6702C1()
{
  extern Class_Descriptor cd_S6702C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S6702C1, buf);
    S6702C1 *dp, &lv = *(dp=new (buf) S6702C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S6702C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6702C1)");
    check_base_class_offset(lv, (S6702C2*), 0, "S6702C1");
    check_base_class_offset(lv, (S6702C4*)(S6702C3*), ABISELECT(24,12), "S6702C1");
    check_base_class_offset(lv, (S6702C3*), ABISELECT(24,12), "S6702C1");
    check_field_offset(lv, s6702c1f0, ABISELECT(40,20), "S6702C1.s6702c1f0");
    test_class_info(&lv, &cd_S6702C1);
    dp->~S6702C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6702C1(Test_S6702C1, "S6702C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S6702C1C1Ev();
extern void _ZN7S6702C1D1Ev();
Name_Map name_map_S6702C1[] = {
  NSPAIR(_ZN7S6702C1C1Ev),
  NSPAIR(_ZN7S6702C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6702C2;
extern VTBL_ENTRY _ZTI7S6702C2[];
extern  VTBL_ENTRY _ZTV7S6702C2[];
extern Class_Descriptor cd_S6702C4;
extern VTBL_ENTRY _ZTI7S6702C4[];
extern  VTBL_ENTRY _ZTV7S6702C4[];
extern Class_Descriptor cd_S6702C3;
extern VTBL_ENTRY _ZTI7S6702C3[];
extern  VTBL_ENTRY _ZTV7S6702C3[];
static Base_Class bases_S6702C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6702C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6702C4,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6702C3,    ABISELECT(24,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6702C1[];
extern void _ZN7S6702C1D1Ev();
extern void _ZN7S6702C1D0Ev();
extern void _ZN7S6702C22v3Ev();
extern void _ZN7S6702C22v4Ev();
extern void _ZN7S6702C22v5Ev();
extern void _ZN7S6702C12v1Ev();
extern void _ZN7S6702C12v2Ev();
extern void _ZN7S6702C42v6Ev();
extern void _ZN7S6702C42v7Ev();
extern void _ZN7S6702C42v8Ev();
extern void ABISELECT(_ZThn24_N7S6702C1D1Ev,_ZThn12_N7S6702C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S6702C1D0Ev,_ZThn12_N7S6702C1D0Ev)();
extern void _ZN7S6702C32v9Ev();
extern void _ZN7S6702C33v10Ev();
extern void _ZN7S6702C33v11Ev();
extern void _ZN7S6702C33v12Ev();
extern void _ZN7S6702C33v13Ev();
static  VTBL_ENTRY vtc_S6702C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6702C1[0]),
  (VTBL_ENTRY)&_ZN7S6702C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6702C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6702C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6702C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6702C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6702C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6702C12v2Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6702C1[0]),
  (VTBL_ENTRY)&_ZN7S6702C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6702C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6702C42v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S6702C1D1Ev,_ZThn12_N7S6702C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S6702C1D0Ev,_ZThn12_N7S6702C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6702C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6702C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6702C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6702C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6702C33v13Ev,
};
extern VTBL_ENTRY _ZTI7S6702C1[];
extern  VTBL_ENTRY _ZTV7S6702C1[];
Class_Descriptor cd_S6702C1 = {  "S6702C1", // class name
  bases_S6702C1, 3,
  &(vtc_S6702C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S6702C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6702C1),21, //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  S3891C2  : S1766C4_nt {
  void *s3891c2f0;
  char s3891c2f1;
  ::S3961C7_nt s3891c2f2;
  virtual  ~S3891C2(); // _ZN7S3891C2D1Ev
  virtual void  v3(); // _ZN7S3891C22v3Ev
  virtual void  v4(); // _ZN7S3891C22v4Ev
  virtual void  v5(); // _ZN7S3891C22v5Ev
  virtual void  v6(); // _ZN7S3891C22v6Ev
  virtual void  v7(); // _ZN7S3891C22v7Ev
  virtual void  v8(); // _ZN7S3891C22v8Ev
  S3891C2(); // tgen
};
//SIG(-1 S3891C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 Fp Fc FC3{ BC2 vd Fp Fi[4] Fp}}


 S3891C2 ::~S3891C2(){ note_dtor("S3891C2", this);}
void  S3891C2 ::v3(){vfunc_called(this, "_ZN7S3891C22v3Ev");}
void  S3891C2 ::v4(){vfunc_called(this, "_ZN7S3891C22v4Ev");}
void  S3891C2 ::v5(){vfunc_called(this, "_ZN7S3891C22v5Ev");}
void  S3891C2 ::v6(){vfunc_called(this, "_ZN7S3891C22v6Ev");}
void  S3891C2 ::v7(){vfunc_called(this, "_ZN7S3891C22v7Ev");}
void  S3891C2 ::v8(){vfunc_called(this, "_ZN7S3891C22v8Ev");}
S3891C2 ::S3891C2(){ note_ctor("S3891C2", this);} // tgen

static void Test_S3891C2()
{
  extern Class_Descriptor cd_S3891C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S3891C2, buf);
    S3891C2 *dp, &lv = *(dp=new (buf) S3891C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S3891C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3891C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3891C2");
    check_field_offset(lv, s3891c2f0, ABISELECT(16,12), "S3891C2.s3891c2f0");
    check_field_offset(lv, s3891c2f1, ABISELECT(24,16), "S3891C2.s3891c2f1");
    check_field_offset(lv, s3891c2f2, ABISELECT(32,20), "S3891C2.s3891c2f2");
    test_class_info(&lv, &cd_S3891C2);
    dp->~S3891C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3891C2(Test_S3891C2, "S3891C2", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S3891C2C1Ev();
extern void _ZN7S3891C2D1Ev();
Name_Map name_map_S3891C2[] = {
  NSPAIR(_ZN7S3891C2C1Ev),
  NSPAIR(_ZN7S3891C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3891C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3891C2[];
extern void _ZN7S3891C2D1Ev();
extern void _ZN7S3891C2D0Ev();
extern void _ZN7S3891C22v3Ev();
extern void _ZN7S3891C22v4Ev();
extern void _ZN7S3891C22v5Ev();
extern void _ZN7S3891C22v6Ev();
extern void _ZN7S3891C22v7Ev();
extern void _ZN7S3891C22v8Ev();
static  VTBL_ENTRY vtc_S3891C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3891C2[0]),
  (VTBL_ENTRY)&_ZN7S3891C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3891C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3891C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3891C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3891C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3891C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3891C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3891C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S3891C2[];
extern  VTBL_ENTRY _ZTV7S3891C2[];
Class_Descriptor cd_S3891C2 = {  "S3891C2", // class name
  bases_S3891C2, 1,
  &(vtc_S3891C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S3891C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3891C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3891C1  : S3891C2 {
  virtual  ~S3891C1(); // _ZN7S3891C1D1Ev
  virtual void  v1(); // _ZN7S3891C12v1Ev
  virtual void  v2(); // _ZN7S3891C12v2Ev
  S3891C1(); // tgen
};
//SIG(1 S3891C1) C1{ BC2{ BC3{ vd m FL} vd v3 v4 v5 v6 v7 v8 Fp Fc FC4{ BC3 vd Fp Fi[4] Fp}} vd v1 v2}


 S3891C1 ::~S3891C1(){ note_dtor("S3891C1", this);}
void  S3891C1 ::v1(){vfunc_called(this, "_ZN7S3891C12v1Ev");}
void  S3891C1 ::v2(){vfunc_called(this, "_ZN7S3891C12v2Ev");}
S3891C1 ::S3891C1(){ note_ctor("S3891C1", this);} // tgen

static void Test_S3891C1()
{
  extern Class_Descriptor cd_S3891C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S3891C1, buf);
    S3891C1 *dp, &lv = *(dp=new (buf) S3891C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S3891C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3891C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3891C2*), 0, "S3891C1");
    check_base_class_offset(lv, (S3891C2*), 0, "S3891C1");
    test_class_info(&lv, &cd_S3891C1);
    dp->~S3891C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3891C1(Test_S3891C1, "S3891C1", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S3891C1C1Ev();
extern void _ZN7S3891C1D1Ev();
Name_Map name_map_S3891C1[] = {
  NSPAIR(_ZN7S3891C1C1Ev),
  NSPAIR(_ZN7S3891C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3891C2;
extern VTBL_ENTRY _ZTI7S3891C2[];
extern  VTBL_ENTRY _ZTV7S3891C2[];
static Base_Class bases_S3891C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3891C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3891C1[];
extern void _ZN7S3891C1D1Ev();
extern void _ZN7S3891C1D0Ev();
extern void _ZN7S3891C22v3Ev();
extern void _ZN7S3891C22v4Ev();
extern void _ZN7S3891C22v5Ev();
extern void _ZN7S3891C22v6Ev();
extern void _ZN7S3891C22v7Ev();
extern void _ZN7S3891C22v8Ev();
extern void _ZN7S3891C12v1Ev();
extern void _ZN7S3891C12v2Ev();
static  VTBL_ENTRY vtc_S3891C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3891C1[0]),
  (VTBL_ENTRY)&_ZN7S3891C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3891C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3891C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3891C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3891C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3891C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3891C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3891C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3891C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3891C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S3891C1[];
extern  VTBL_ENTRY _ZTV7S3891C1[];
Class_Descriptor cd_S3891C1 = {  "S3891C1", // class name
  bases_S3891C1, 2,
  &(vtc_S3891C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S3891C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3891C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8912C2  {
  ::S8455C3_nt s8912c2f0;
  int s8912c2f1;
  void *s8912c2f2[3];
  virtual  ~S8912C2(); // _ZN7S8912C2D1Ev
  virtual void  v2(); // _ZN7S8912C22v2Ev
  virtual void  v3(); // _ZN7S8912C22v3Ev
  virtual void  v4(); // _ZN7S8912C22v4Ev
  S8912C2(); // tgen
};
//SIG(-1 S8912C2) C1{ vd v1 v2 v3 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi Fp[3]}


 S8912C2 ::~S8912C2(){ note_dtor("S8912C2", this);}
void  S8912C2 ::v2(){vfunc_called(this, "_ZN7S8912C22v2Ev");}
void  S8912C2 ::v3(){vfunc_called(this, "_ZN7S8912C22v3Ev");}
void  S8912C2 ::v4(){vfunc_called(this, "_ZN7S8912C22v4Ev");}
S8912C2 ::S8912C2(){ note_ctor("S8912C2", this);} // tgen

static void Test_S8912C2()
{
  extern Class_Descriptor cd_S8912C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S8912C2, buf);
    S8912C2 *dp, &lv = *(dp=new (buf) S8912C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S8912C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8912C2)");
    check_field_offset(lv, s8912c2f0, ABISELECT(8,4), "S8912C2.s8912c2f0");
    check_field_offset(lv, s8912c2f1, ABISELECT(32,20), "S8912C2.s8912c2f1");
    check_field_offset(lv, s8912c2f2, ABISELECT(40,24), "S8912C2.s8912c2f2");
    test_class_info(&lv, &cd_S8912C2);
    dp->~S8912C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8912C2(Test_S8912C2, "S8912C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S8912C2C1Ev();
extern void _ZN7S8912C2D1Ev();
Name_Map name_map_S8912C2[] = {
  NSPAIR(_ZN7S8912C2C1Ev),
  NSPAIR(_ZN7S8912C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8912C2[];
extern void _ZN7S8912C2D1Ev();
extern void _ZN7S8912C2D0Ev();
extern void _ZN7S8912C22v2Ev();
extern void _ZN7S8912C22v3Ev();
extern void _ZN7S8912C22v4Ev();
static  VTBL_ENTRY vtc_S8912C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8912C2[0]),
  (VTBL_ENTRY)&_ZN7S8912C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8912C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8912C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8912C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8912C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S8912C2[];
extern  VTBL_ENTRY _ZTV7S8912C2[];
Class_Descriptor cd_S8912C2 = {  "S8912C2", // class name
  0,0,//no base classes
  &(vtc_S8912C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S8912C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8912C2),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  S8912C1  : S8912C2 {
  ::S8455C7_nt s8912c1f0;
  void *s8912c1f1;
  virtual  ~S8912C1(); // _ZN7S8912C1D1Ev
  virtual void  v1(); // _ZN7S8912C12v1Ev
  S8912C1(); // tgen
};
//SIG(1 S8912C1) C1{ BC2{ vd v2 v3 v4 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fi Fp[3]} vd v1 FC6{ vd m Fp} Fp}


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

static void Test_S8912C1()
{
  extern Class_Descriptor cd_S8912C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S8912C1, buf);
    S8912C1 *dp, &lv = *(dp=new (buf) S8912C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S8912C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8912C1)");
    check_base_class_offset(lv, (S8912C2*), 0, "S8912C1");
    check_field_offset(lv, s8912c1f0, ABISELECT(64,36), "S8912C1.s8912c1f0");
    check_field_offset(lv, s8912c1f1, ABISELECT(80,44), "S8912C1.s8912c1f1");
    test_class_info(&lv, &cd_S8912C1);
    dp->~S8912C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8912C1(Test_S8912C1, "S8912C1", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S8912C1C1Ev();
extern void _ZN7S8912C1D1Ev();
Name_Map name_map_S8912C1[] = {
  NSPAIR(_ZN7S8912C1C1Ev),
  NSPAIR(_ZN7S8912C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8912C2;
extern VTBL_ENTRY _ZTI7S8912C2[];
extern  VTBL_ENTRY _ZTV7S8912C2[];
static Base_Class bases_S8912C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8912C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8912C1[];
extern void _ZN7S8912C1D1Ev();
extern void _ZN7S8912C1D0Ev();
extern void _ZN7S8912C22v2Ev();
extern void _ZN7S8912C22v3Ev();
extern void _ZN7S8912C22v4Ev();
extern void _ZN7S8912C12v1Ev();
static  VTBL_ENTRY vtc_S8912C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8912C1[0]),
  (VTBL_ENTRY)&_ZN7S8912C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8912C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8912C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8912C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8912C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8912C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8912C1[];
extern  VTBL_ENTRY _ZTV7S8912C1[];
Class_Descriptor cd_S8912C1 = {  "S8912C1", // class name
  bases_S8912C1, 1,
  &(vtc_S8912C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S8912C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8912C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3890C2  : S1766C4_nt {
  void *s3890c2f0;
  char s3890c2f1;
  ::S3961C7_nt s3890c2f2;
  virtual  ~S3890C2(); // _ZN7S3890C2D1Ev
  virtual void  v2(); // _ZN7S3890C22v2Ev
  virtual void  v3(); // _ZN7S3890C22v3Ev
  virtual void  v4(); // _ZN7S3890C22v4Ev
  virtual void  v5(); // _ZN7S3890C22v5Ev
  virtual void  v6(); // _ZN7S3890C22v6Ev
  virtual void  v7(); // _ZN7S3890C22v7Ev
  S3890C2(); // tgen
};
//SIG(-1 S3890C2) C1{ BC2{ vd m FL} vd v1 v2 v3 v4 v5 v6 Fp Fc FC3{ BC2 vd Fp Fi[4] Fp}}


 S3890C2 ::~S3890C2(){ note_dtor("S3890C2", this);}
void  S3890C2 ::v2(){vfunc_called(this, "_ZN7S3890C22v2Ev");}
void  S3890C2 ::v3(){vfunc_called(this, "_ZN7S3890C22v3Ev");}
void  S3890C2 ::v4(){vfunc_called(this, "_ZN7S3890C22v4Ev");}
void  S3890C2 ::v5(){vfunc_called(this, "_ZN7S3890C22v5Ev");}
void  S3890C2 ::v6(){vfunc_called(this, "_ZN7S3890C22v6Ev");}
void  S3890C2 ::v7(){vfunc_called(this, "_ZN7S3890C22v7Ev");}
S3890C2 ::S3890C2(){ note_ctor("S3890C2", this);} // tgen

static void Test_S3890C2()
{
  extern Class_Descriptor cd_S3890C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S3890C2, buf);
    S3890C2 *dp, &lv = *(dp=new (buf) S3890C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S3890C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3890C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3890C2");
    check_field_offset(lv, s3890c2f0, ABISELECT(16,12), "S3890C2.s3890c2f0");
    check_field_offset(lv, s3890c2f1, ABISELECT(24,16), "S3890C2.s3890c2f1");
    check_field_offset(lv, s3890c2f2, ABISELECT(32,20), "S3890C2.s3890c2f2");
    test_class_info(&lv, &cd_S3890C2);
    dp->~S3890C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3890C2(Test_S3890C2, "S3890C2", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S3890C2C1Ev();
extern void _ZN7S3890C2D1Ev();
Name_Map name_map_S3890C2[] = {
  NSPAIR(_ZN7S3890C2C1Ev),
  NSPAIR(_ZN7S3890C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3890C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3890C2[];
extern void _ZN7S3890C2D1Ev();
extern void _ZN7S3890C2D0Ev();
extern void _ZN7S3890C22v2Ev();
extern void _ZN7S3890C22v3Ev();
extern void _ZN7S3890C22v4Ev();
extern void _ZN7S3890C22v5Ev();
extern void _ZN7S3890C22v6Ev();
extern void _ZN7S3890C22v7Ev();
static  VTBL_ENTRY vtc_S3890C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3890C2[0]),
  (VTBL_ENTRY)&_ZN7S3890C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3890C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3890C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3890C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3890C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3890C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3890C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3890C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S3890C2[];
extern  VTBL_ENTRY _ZTV7S3890C2[];
Class_Descriptor cd_S3890C2 = {  "S3890C2", // class name
  bases_S3890C2, 1,
  &(vtc_S3890C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S3890C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3890C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3890C1  : S3890C2 {
  virtual  ~S3890C1(); // _ZN7S3890C1D1Ev
  virtual void  v1(); // _ZN7S3890C12v1Ev
  S3890C1(); // tgen
};
//SIG(1 S3890C1) C1{ BC2{ BC3{ vd m FL} vd v2 v3 v4 v5 v6 v7 Fp Fc FC4{ BC3 vd Fp Fi[4] Fp}} vd v1}


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

static void Test_S3890C1()
{
  extern Class_Descriptor cd_S3890C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S3890C1, buf);
    S3890C1 *dp, &lv = *(dp=new (buf) S3890C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S3890C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3890C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3890C2*), 0, "S3890C1");
    check_base_class_offset(lv, (S3890C2*), 0, "S3890C1");
    test_class_info(&lv, &cd_S3890C1);
    dp->~S3890C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3890C1(Test_S3890C1, "S3890C1", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S3890C1C1Ev();
extern void _ZN7S3890C1D1Ev();
Name_Map name_map_S3890C1[] = {
  NSPAIR(_ZN7S3890C1C1Ev),
  NSPAIR(_ZN7S3890C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3890C2;
extern VTBL_ENTRY _ZTI7S3890C2[];
extern  VTBL_ENTRY _ZTV7S3890C2[];
static Base_Class bases_S3890C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3890C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3890C1[];
extern void _ZN7S3890C1D1Ev();
extern void _ZN7S3890C1D0Ev();
extern void _ZN7S3890C22v2Ev();
extern void _ZN7S3890C22v3Ev();
extern void _ZN7S3890C22v4Ev();
extern void _ZN7S3890C22v5Ev();
extern void _ZN7S3890C22v6Ev();
extern void _ZN7S3890C22v7Ev();
extern void _ZN7S3890C12v1Ev();
static  VTBL_ENTRY vtc_S3890C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3890C1[0]),
  (VTBL_ENTRY)&_ZN7S3890C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3890C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3890C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3890C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3890C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3890C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3890C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3890C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3890C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3890C1[];
extern  VTBL_ENTRY _ZTV7S3890C1[];
Class_Descriptor cd_S3890C1 = {  "S3890C1", // class name
  bases_S3890C1, 2,
  &(vtc_S3890C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S3890C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3890C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13265C4_nt  {
  int s13265c4f0;
  int s13265c4f1;
};
//SIG(1 S13265C4_nt) C1{ Fi[2]}



//skip512 S13265C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13265C6  {
  int s13265c6f0;
  int s13265c6f1;
};
//SIG(1 S13265C6) C1{ Fi[2]}



static void Test_S13265C6()
{
  {
    init_simple_test("S13265C6");
    S13265C6 lv;
    check2(sizeof(lv), 8, "sizeof(S13265C6)");
    check2(__alignof__(lv), 4, "__alignof__(S13265C6)");
    check_field_offset(lv, s13265c6f0, 0, "S13265C6.s13265c6f0");
    check_field_offset(lv, s13265c6f1, 4, "S13265C6.s13265c6f1");
  }
}
static Arrange_To_Call_Me vS13265C6(Test_S13265C6, "S13265C6", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S13265C2  {
  ::S3954C7_nt s13265c2f0;
  ::S13265C4_nt s13265c2f1;
  ::S13265C4_nt s13265c2f2;
  ::S13265C6 s13265c2f3;
  ::S17132C9_nt s13265c2f4;
  ::S1768C6_nt s13265c2f5;
};
//SIG(1 S13265C2) U1{ FC2{ Fi Fi} FC3{ Fi Fi} FC3 FC4{ Fi Fi} FC5{ Fi Fi Fi} FC6{ Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13265C1  {
  int s13265c1f0[2];
  ::S13265C2 s13265c1f1;
};
//SIG(1 S13265C1) C1{ Fi[2] FU2{ FC3{ Fi Fi} FC4{ Fi Fi} FC4 FC5{ Fi Fi} FC6{ Fi Fi Fi} FC7{ Fi}}}



static void Test_S13265C1()
{
  {
    init_simple_test("S13265C1");
    S13265C1 lv;
    check2(sizeof(lv), 20, "sizeof(S13265C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13265C1)");
    check_field_offset(lv, s13265c1f0, 0, "S13265C1.s13265c1f0");
    check_field_offset(lv, s13265c1f1, 8, "S13265C1.s13265c1f1");
  }
}
static Arrange_To_Call_Me vS13265C1(Test_S13265C1, "S13265C1", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8457C2  {
  ::S8455C3_nt s8457c2f0;
  int s8457c2f1;
  void *s8457c2f2[3];
  virtual  ~S8457C2(); // _ZN7S8457C2D1Ev
  virtual void  v1(); // _ZN7S8457C22v1Ev
  virtual void  v2(); // _ZN7S8457C22v2Ev
  virtual void  v3(); // _ZN7S8457C22v3Ev
  S8457C2(); // tgen
};
//SIG(-1 S8457C2) C1{ vd v1 v2 v3 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi Fp[3]}


 S8457C2 ::~S8457C2(){ note_dtor("S8457C2", this);}
void  S8457C2 ::v1(){vfunc_called(this, "_ZN7S8457C22v1Ev");}
void  S8457C2 ::v2(){vfunc_called(this, "_ZN7S8457C22v2Ev");}
void  S8457C2 ::v3(){vfunc_called(this, "_ZN7S8457C22v3Ev");}
S8457C2 ::S8457C2(){ note_ctor("S8457C2", this);} // tgen

static void Test_S8457C2()
{
  extern Class_Descriptor cd_S8457C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S8457C2, buf);
    S8457C2 *dp, &lv = *(dp=new (buf) S8457C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S8457C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8457C2)");
    check_field_offset(lv, s8457c2f0, ABISELECT(8,4), "S8457C2.s8457c2f0");
    check_field_offset(lv, s8457c2f1, ABISELECT(32,20), "S8457C2.s8457c2f1");
    check_field_offset(lv, s8457c2f2, ABISELECT(40,24), "S8457C2.s8457c2f2");
    test_class_info(&lv, &cd_S8457C2);
    dp->~S8457C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8457C2(Test_S8457C2, "S8457C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S8457C2C1Ev();
extern void _ZN7S8457C2D1Ev();
Name_Map name_map_S8457C2[] = {
  NSPAIR(_ZN7S8457C2C1Ev),
  NSPAIR(_ZN7S8457C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8457C2[];
extern void _ZN7S8457C2D1Ev();
extern void _ZN7S8457C2D0Ev();
extern void _ZN7S8457C22v1Ev();
extern void _ZN7S8457C22v2Ev();
extern void _ZN7S8457C22v3Ev();
static  VTBL_ENTRY vtc_S8457C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8457C2[0]),
  (VTBL_ENTRY)&_ZN7S8457C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8457C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8457C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8457C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8457C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S8457C2[];
extern  VTBL_ENTRY _ZTV7S8457C2[];
Class_Descriptor cd_S8457C2 = {  "S8457C2", // class name
  0,0,//no base classes
  &(vtc_S8457C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S8457C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8457C2),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  S8457C1  : S8457C2 {
  int s8457c1f0;
  ::S8455C7_nt s8457c1f1;
  virtual  ~S8457C1(); // _ZN7S8457C1D1Ev
  S8457C1(); // tgen
};
//SIG(1 S8457C1) C1{ BC2{ vd v1 v2 v3 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fi Fp[3]} vd Fi FC6{ vd m Fp}}


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

static void Test_S8457C1()
{
  extern Class_Descriptor cd_S8457C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S8457C1, buf);
    S8457C1 *dp, &lv = *(dp=new (buf) S8457C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S8457C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8457C1)");
    check_base_class_offset(lv, (S8457C2*), 0, "S8457C1");
    check_field_offset(lv, s8457c1f0, ABISELECT(64,36), "S8457C1.s8457c1f0");
    check_field_offset(lv, s8457c1f1, ABISELECT(72,40), "S8457C1.s8457c1f1");
    test_class_info(&lv, &cd_S8457C1);
    dp->~S8457C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8457C1(Test_S8457C1, "S8457C1", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S8457C1C1Ev();
extern void _ZN7S8457C1D1Ev();
Name_Map name_map_S8457C1[] = {
  NSPAIR(_ZN7S8457C1C1Ev),
  NSPAIR(_ZN7S8457C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8457C2;
extern VTBL_ENTRY _ZTI7S8457C2[];
extern  VTBL_ENTRY _ZTV7S8457C2[];
static Base_Class bases_S8457C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8457C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8457C1[];
extern void _ZN7S8457C1D1Ev();
extern void _ZN7S8457C1D0Ev();
extern void _ZN7S8457C22v1Ev();
extern void _ZN7S8457C22v2Ev();
extern void _ZN7S8457C22v3Ev();
static  VTBL_ENTRY vtc_S8457C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8457C1[0]),
  (VTBL_ENTRY)&_ZN7S8457C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8457C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8457C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8457C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8457C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S8457C1[];
extern  VTBL_ENTRY _ZTV7S8457C1[];
Class_Descriptor cd_S8457C1 = {  "S8457C1", // class name
  bases_S8457C1, 1,
  &(vtc_S8457C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S8457C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8457C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8961C2  {
  void *s8961c2f0;
  __tsi64 s8961c2f1;
  void *s8961c2f2;
  ::S165C33_nt s8961c2f3;
  void *s8961c2f4;
  int s8961c2f5;
  void *s8961c2f6;
  int s8961c2f7[4];
  virtual  ~S8961C2(); // _ZN7S8961C2D1Ev
  virtual void  v2(); // _ZN7S8961C22v2Ev
  virtual void  v3(); // _ZN7S8961C22v3Ev
  virtual void  v4(); // _ZN7S8961C22v4Ev
  virtual void  v5(); // _ZN7S8961C22v5Ev
  virtual void  v6(); // _ZN7S8961C22v6Ev
  S8961C2(); // tgen
};
//SIG(-1 S8961C2) C1{ vd v1 v2 v3 v4 v5 Fp FL Fp FC2{ m Fi[4]} Fp Fi Fp Fi[4]}


 S8961C2 ::~S8961C2(){ note_dtor("S8961C2", this);}
void  S8961C2 ::v2(){vfunc_called(this, "_ZN7S8961C22v2Ev");}
void  S8961C2 ::v3(){vfunc_called(this, "_ZN7S8961C22v3Ev");}
void  S8961C2 ::v4(){vfunc_called(this, "_ZN7S8961C22v4Ev");}
void  S8961C2 ::v5(){vfunc_called(this, "_ZN7S8961C22v5Ev");}
void  S8961C2 ::v6(){vfunc_called(this, "_ZN7S8961C22v6Ev");}
S8961C2 ::S8961C2(){ note_ctor("S8961C2", this);} // tgen

static void Test_S8961C2()
{
  extern Class_Descriptor cd_S8961C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S8961C2, buf);
    S8961C2 *dp, &lv = *(dp=new (buf) S8961C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S8961C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8961C2)");
    check_field_offset(lv, s8961c2f0, ABISELECT(8,4), "S8961C2.s8961c2f0");
    check_field_offset(lv, s8961c2f1, ABISELECT(16,8), "S8961C2.s8961c2f1");
    check_field_offset(lv, s8961c2f2, ABISELECT(24,16), "S8961C2.s8961c2f2");
    check_field_offset(lv, s8961c2f3, ABISELECT(32,20), "S8961C2.s8961c2f3");
    check_field_offset(lv, s8961c2f4, ABISELECT(48,36), "S8961C2.s8961c2f4");
    check_field_offset(lv, s8961c2f5, ABISELECT(56,40), "S8961C2.s8961c2f5");
    check_field_offset(lv, s8961c2f6, ABISELECT(64,44), "S8961C2.s8961c2f6");
    check_field_offset(lv, s8961c2f7, ABISELECT(72,48), "S8961C2.s8961c2f7");
    test_class_info(&lv, &cd_S8961C2);
    dp->~S8961C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8961C2(Test_S8961C2, "S8961C2", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN7S8961C2C1Ev();
extern void _ZN7S8961C2D1Ev();
Name_Map name_map_S8961C2[] = {
  NSPAIR(_ZN7S8961C2C1Ev),
  NSPAIR(_ZN7S8961C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8961C2[];
extern void _ZN7S8961C2D1Ev();
extern void _ZN7S8961C2D0Ev();
extern void _ZN7S8961C22v2Ev();
extern void _ZN7S8961C22v3Ev();
extern void _ZN7S8961C22v4Ev();
extern void _ZN7S8961C22v5Ev();
extern void _ZN7S8961C22v6Ev();
static  VTBL_ENTRY vtc_S8961C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8961C2[0]),
  (VTBL_ENTRY)&_ZN7S8961C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8961C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8961C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8961C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8961C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8961C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8961C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S8961C2[];
extern  VTBL_ENTRY _ZTV7S8961C2[];
Class_Descriptor cd_S8961C2 = {  "S8961C2", // class name
  0,0,//no base classes
  &(vtc_S8961C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI7S8961C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8961C2),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  S8961C1  : S8961C2 {
  ::S19863C10 s8961c1f0;
  ::S19863C10 s8961c1f1;
  virtual void  v1(); // _ZN7S8961C12v1Ev
  ~S8961C1(); // tgen
  S8961C1(); // tgen
};
//SIG(1 S8961C1) C1{ BC2{ vd v2 v3 v4 v5 v6 Fp FL Fp FC3{ m Fi[4]} Fp Fi Fp Fi[4]} v1 FC4{ m} FC4}


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

static void Test_S8961C1()
{
  extern Class_Descriptor cd_S8961C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S8961C1, buf);
    S8961C1 *dp, &lv = *(dp=new (buf) S8961C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S8961C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8961C1)");
    check_base_class_offset(lv, (S8961C2*), 0, "S8961C1");
    check_field_offset(lv, s8961c1f0, ABISELECT(88,64), "S8961C1.s8961c1f0");
    check_field_offset(lv, s8961c1f1, ABISELECT(89,65), "S8961C1.s8961c1f1");
    test_class_info(&lv, &cd_S8961C1);
    dp->~S8961C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8961C1(Test_S8961C1, "S8961C1", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S8961C1C1Ev();
extern void _ZN7S8961C1D1Ev();
Name_Map name_map_S8961C1[] = {
  NSPAIR(_ZN7S8961C1C1Ev),
  NSPAIR(_ZN7S8961C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8961C2;
extern VTBL_ENTRY _ZTI7S8961C2[];
extern  VTBL_ENTRY _ZTV7S8961C2[];
static Base_Class bases_S8961C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8961C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8961C1[];
extern void _ZN7S8961C1D1Ev();
extern void _ZN7S8961C1D0Ev();
extern void _ZN7S8961C22v2Ev();
extern void _ZN7S8961C22v3Ev();
extern void _ZN7S8961C22v4Ev();
extern void _ZN7S8961C22v5Ev();
extern void _ZN7S8961C22v6Ev();
extern void _ZN7S8961C12v1Ev();
static  VTBL_ENTRY vtc_S8961C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8961C1[0]),
  (VTBL_ENTRY)&_ZN7S8961C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8961C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8961C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8961C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8961C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8961C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8961C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8961C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8961C1[];
extern  VTBL_ENTRY _ZTV7S8961C1[];
Class_Descriptor cd_S8961C1 = {  "S8961C1", // class name
  bases_S8961C1, 1,
  &(vtc_S8961C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S8961C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8961C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8456C2  {
  ::S8455C3_nt s8456c2f0;
  int s8456c2f1;
  void *s8456c2f2[3];
  virtual  ~S8456C2(); // _ZN7S8456C2D1Ev
  virtual void  v1(); // _ZN7S8456C22v1Ev
  virtual void  v2(); // _ZN7S8456C22v2Ev
  virtual void  v3(); // _ZN7S8456C22v3Ev
  S8456C2(); // tgen
};
//SIG(-1 S8456C2) C1{ vd v1 v2 v3 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi Fp[3]}


 S8456C2 ::~S8456C2(){ note_dtor("S8456C2", this);}
void  S8456C2 ::v1(){vfunc_called(this, "_ZN7S8456C22v1Ev");}
void  S8456C2 ::v2(){vfunc_called(this, "_ZN7S8456C22v2Ev");}
void  S8456C2 ::v3(){vfunc_called(this, "_ZN7S8456C22v3Ev");}
S8456C2 ::S8456C2(){ note_ctor("S8456C2", this);} // tgen

static void Test_S8456C2()
{
  extern Class_Descriptor cd_S8456C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S8456C2, buf);
    S8456C2 *dp, &lv = *(dp=new (buf) S8456C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S8456C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8456C2)");
    check_field_offset(lv, s8456c2f0, ABISELECT(8,4), "S8456C2.s8456c2f0");
    check_field_offset(lv, s8456c2f1, ABISELECT(32,20), "S8456C2.s8456c2f1");
    check_field_offset(lv, s8456c2f2, ABISELECT(40,24), "S8456C2.s8456c2f2");
    test_class_info(&lv, &cd_S8456C2);
    dp->~S8456C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8456C2(Test_S8456C2, "S8456C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S8456C2C1Ev();
extern void _ZN7S8456C2D1Ev();
Name_Map name_map_S8456C2[] = {
  NSPAIR(_ZN7S8456C2C1Ev),
  NSPAIR(_ZN7S8456C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8456C2[];
extern void _ZN7S8456C2D1Ev();
extern void _ZN7S8456C2D0Ev();
extern void _ZN7S8456C22v1Ev();
extern void _ZN7S8456C22v2Ev();
extern void _ZN7S8456C22v3Ev();
static  VTBL_ENTRY vtc_S8456C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8456C2[0]),
  (VTBL_ENTRY)&_ZN7S8456C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8456C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8456C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8456C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8456C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S8456C2[];
extern  VTBL_ENTRY _ZTV7S8456C2[];
Class_Descriptor cd_S8456C2 = {  "S8456C2", // class name
  0,0,//no base classes
  &(vtc_S8456C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S8456C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8456C2),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  S8456C1  : S8456C2 {
  ::S8455C7_nt s8456c1f0;
  virtual  ~S8456C1(); // _ZN7S8456C1D1Ev
  S8456C1(); // tgen
};
//SIG(1 S8456C1) C1{ BC2{ vd v1 v2 v3 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fi Fp[3]} vd FC6{ vd m Fp}}


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

static void Test_S8456C1()
{
  extern Class_Descriptor cd_S8456C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S8456C1, buf);
    S8456C1 *dp, &lv = *(dp=new (buf) S8456C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S8456C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8456C1)");
    check_base_class_offset(lv, (S8456C2*), 0, "S8456C1");
    check_field_offset(lv, s8456c1f0, ABISELECT(64,36), "S8456C1.s8456c1f0");
    test_class_info(&lv, &cd_S8456C1);
    dp->~S8456C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8456C1(Test_S8456C1, "S8456C1", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S8456C1C1Ev();
extern void _ZN7S8456C1D1Ev();
Name_Map name_map_S8456C1[] = {
  NSPAIR(_ZN7S8456C1C1Ev),
  NSPAIR(_ZN7S8456C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8456C2;
extern VTBL_ENTRY _ZTI7S8456C2[];
extern  VTBL_ENTRY _ZTV7S8456C2[];
static Base_Class bases_S8456C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8456C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8456C1[];
extern void _ZN7S8456C1D1Ev();
extern void _ZN7S8456C1D0Ev();
extern void _ZN7S8456C22v1Ev();
extern void _ZN7S8456C22v2Ev();
extern void _ZN7S8456C22v3Ev();
static  VTBL_ENTRY vtc_S8456C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8456C1[0]),
  (VTBL_ENTRY)&_ZN7S8456C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8456C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8456C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8456C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8456C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S8456C1[];
extern  VTBL_ENTRY _ZTV7S8456C1[];
Class_Descriptor cd_S8456C1 = {  "S8456C1", // class name
  bases_S8456C1, 1,
  &(vtc_S8456C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S8456C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8456C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8164C4  : S1766C4_nt {
  void *s8164c4f0[2];
  int s8164c4f1;
  void *s8164c4f2;
  int s8164c4f3;
  virtual  ~S8164C4(); // _ZN7S8164C4D1Ev
  S8164C4(); // tgen
};
//SIG(-1 S8164C4) C1{ BC2{ vd m FL} vd Fp[2] Fi Fp Fi}


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

static void Test_S8164C4()
{
  extern Class_Descriptor cd_S8164C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S8164C4, buf);
    S8164C4 *dp, &lv = *(dp=new (buf) S8164C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S8164C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8164C4)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S8164C4");
    check_field_offset(lv, s8164c4f0, ABISELECT(16,12), "S8164C4.s8164c4f0");
    check_field_offset(lv, s8164c4f1, ABISELECT(32,20), "S8164C4.s8164c4f1");
    check_field_offset(lv, s8164c4f2, ABISELECT(40,24), "S8164C4.s8164c4f2");
    check_field_offset(lv, s8164c4f3, ABISELECT(48,28), "S8164C4.s8164c4f3");
    test_class_info(&lv, &cd_S8164C4);
    dp->~S8164C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8164C4(Test_S8164C4, "S8164C4", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S8164C4C1Ev();
extern void _ZN7S8164C4D1Ev();
Name_Map name_map_S8164C4[] = {
  NSPAIR(_ZN7S8164C4C1Ev),
  NSPAIR(_ZN7S8164C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S8164C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S8164C4[];
extern void _ZN7S8164C4D1Ev();
extern void _ZN7S8164C4D0Ev();
static  VTBL_ENTRY vtc_S8164C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8164C4[0]),
  (VTBL_ENTRY)&_ZN7S8164C4D1Ev,
  (VTBL_ENTRY)&_ZN7S8164C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S8164C4[];
extern  VTBL_ENTRY _ZTV7S8164C4[];
Class_Descriptor cd_S8164C4 = {  "S8164C4", // class name
  bases_S8164C4, 1,
  &(vtc_S8164C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S8164C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8164C4),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  S8164C1  : S1766C4_nt {
  ::S3961C7_nt s8164c1f0;
  ::S8164C4 s8164c1f1;
  void *s8164c1f2;
  virtual  ~S8164C1(); // _ZN7S8164C1D1Ev
  S8164C1(); // tgen
};
//SIG(1 S8164C1) C1{ BC2{ vd m FL} vd FC3{ BC2 vd Fp Fi[4] Fp} FC4{ BC2 vd Fp[2] Fi Fp Fi} Fp}


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

static void Test_S8164C1()
{
  extern Class_Descriptor cd_S8164C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S8164C1, buf);
    S8164C1 *dp, &lv = *(dp=new (buf) S8164C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S8164C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8164C1)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S8164C1");
    check_field_offset(lv, s8164c1f0, ABISELECT(16,12), "S8164C1.s8164c1f0");
    check_field_offset(lv, s8164c1f1, ABISELECT(64,48), "S8164C1.s8164c1f1");
    check_field_offset(lv, s8164c1f2, ABISELECT(120,80), "S8164C1.s8164c1f2");
    test_class_info(&lv, &cd_S8164C1);
    dp->~S8164C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8164C1(Test_S8164C1, "S8164C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S8164C1C1Ev();
extern void _ZN7S8164C1D1Ev();
Name_Map name_map_S8164C1[] = {
  NSPAIR(_ZN7S8164C1C1Ev),
  NSPAIR(_ZN7S8164C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S8164C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S8164C1[];
extern void _ZN7S8164C1D1Ev();
extern void _ZN7S8164C1D0Ev();
static  VTBL_ENTRY vtc_S8164C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8164C1[0]),
  (VTBL_ENTRY)&_ZN7S8164C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8164C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8164C1[];
extern  VTBL_ENTRY _ZTV7S8164C1[];
Class_Descriptor cd_S8164C1 = {  "S8164C1", // class name
  bases_S8164C1, 1,
  &(vtc_S8164C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S8164C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8164C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17437C1  {
  void *s17437c1f0;
  char s17437c1f1;
  ::S1768C5_nt s17437c1f2;
  void *s17437c1f3[4];
  int s17437c1f4[3];
  void *s17437c1f5;
  int s17437c1f6;
  void *s17437c1f7;
  int s17437c1f8;
  void *s17437c1f9;
  int s17437c1f10;
  void  mf17437c1(); // _ZN8S17437C19mf17437c1Ev
};
//SIG(1 S17437C1) C1{ m Fp Fc FC2{ Fc[2] Fs FC3{ Fi} Fs Fc[6]} Fp[4] Fi[3] Fp Fi Fp Fi Fp Fi}


void  S17437C1 ::mf17437c1(){}

static void Test_S17437C1()
{
  {
    init_simple_test("S17437C1");
    S17437C1 lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S17437C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17437C1)");
    check_field_offset(lv, s17437c1f0, 0, "S17437C1.s17437c1f0");
    check_field_offset(lv, s17437c1f1, ABISELECT(8,4), "S17437C1.s17437c1f1");
    check_field_offset(lv, s17437c1f2, ABISELECT(12,8), "S17437C1.s17437c1f2");
    check_field_offset(lv, s17437c1f3, ABISELECT(32,24), "S17437C1.s17437c1f3");
    check_field_offset(lv, s17437c1f4, ABISELECT(64,40), "S17437C1.s17437c1f4");
    check_field_offset(lv, s17437c1f5, ABISELECT(80,52), "S17437C1.s17437c1f5");
    check_field_offset(lv, s17437c1f6, ABISELECT(88,56), "S17437C1.s17437c1f6");
    check_field_offset(lv, s17437c1f7, ABISELECT(96,60), "S17437C1.s17437c1f7");
    check_field_offset(lv, s17437c1f8, ABISELECT(104,64), "S17437C1.s17437c1f8");
    check_field_offset(lv, s17437c1f9, ABISELECT(112,68), "S17437C1.s17437c1f9");
    check_field_offset(lv, s17437c1f10, ABISELECT(120,72), "S17437C1.s17437c1f10");
  }
}
static Arrange_To_Call_Me vS17437C1(Test_S17437C1, "S17437C1", ABISELECT(128,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13085C2_nt  {
  int s13085c2f0;
  void *s13085c2f1;
  int s13085c2f2;
};
//SIG(-1 S13085C2_nt) C1{ Fi Fp Fi}



//skip512 S13085C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13085C5_nt  {
  void *s13085c5f0;
};
//SIG(1 S13085C5_nt) C1{ Fp}



//skip512 S13085C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13085C6_nt  {
  int s13085c6f0;
};
//SIG(-1 S13085C6_nt) C1{ Fi}



//skip512 S13085C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S13085C3  {
  ::S1768C6_nt s13085c3f0;
  ::S13085C5_nt s13085c3f1;
  ::S13085C6_nt s13085c3f2;
  ::S17132C9_nt s13085c3f3;
  ::S13085C6_nt s13085c3f4;
};
//SIG(1 S13085C3) U1{ FC2{ Fi} FC3{ Fp} FC4{ Fi} FC5{ Fi Fi Fi} FC4}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13085C1  {
  int s13085c1f0[2];
  ::S13085C2_nt s13085c1f1;
  ::S13085C3 s13085c1f2;
};
//SIG(1 S13085C1) C1{ Fi[2] FC2{ Fi Fp Fi} FU3{ FC4{ Fi} FC5{ Fp} FC6{ Fi} FC7{ Fi Fi Fi} FC6}}



static void Test_S13085C1()
{
  {
    init_simple_test("S13085C1");
    S13085C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S13085C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13085C1)");
    check_field_offset(lv, s13085c1f0, 0, "S13085C1.s13085c1f0");
    check_field_offset(lv, s13085c1f1, 8, "S13085C1.s13085c1f1");
    check_field_offset(lv, s13085c1f2, ABISELECT(32,20), "S13085C1.s13085c1f2");
  }
}
static Arrange_To_Call_Me vS13085C1(Test_S13085C1, "S13085C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3944C2  : S1766C4_nt {
  int s3944c2f0;
  virtual  ~S3944C2(); // _ZN7S3944C2D1Ev
  S3944C2(); // tgen
};
//SIG(-1 S3944C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3944C2()
{
  extern Class_Descriptor cd_S3944C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3944C2, buf);
    S3944C2 *dp, &lv = *(dp=new (buf) S3944C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3944C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3944C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3944C2");
    check_field_offset(lv, s3944c2f0, ABISELECT(16,12), "S3944C2.s3944c2f0");
    test_class_info(&lv, &cd_S3944C2);
    dp->~S3944C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3944C2(Test_S3944C2, "S3944C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3944C2C1Ev();
extern void _ZN7S3944C2D1Ev();
Name_Map name_map_S3944C2[] = {
  NSPAIR(_ZN7S3944C2C1Ev),
  NSPAIR(_ZN7S3944C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3944C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3944C2[];
extern void _ZN7S3944C2D1Ev();
extern void _ZN7S3944C2D0Ev();
static  VTBL_ENTRY vtc_S3944C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3944C2[0]),
  (VTBL_ENTRY)&_ZN7S3944C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3944C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3944C2[];
extern  VTBL_ENTRY _ZTV7S3944C2[];
Class_Descriptor cd_S3944C2 = {  "S3944C2", // class name
  bases_S3944C2, 1,
  &(vtc_S3944C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3944C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3944C2),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  S3944C4  {
  short s3944c4f0[2];
  ::S3961C7_nt s3944c4f1;
  void  mf3944c4(); // _ZN7S3944C48mf3944c4Ev
  virtual  ~S3944C4(); // _ZN7S3944C4D1Ev
  S3944C4(); // tgen
};
//SIG(-1 S3944C4) C1{ vd m Fs[2] FC2{ BC3{ vd m FL} vd Fp Fi[4] Fp}}


void  S3944C4 ::mf3944c4(){}
 S3944C4 ::~S3944C4(){ note_dtor("S3944C4", this);}
S3944C4 ::S3944C4(){ note_ctor("S3944C4", this);} // tgen

static void Test_S3944C4()
{
  extern Class_Descriptor cd_S3944C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S3944C4, buf);
    S3944C4 *dp, &lv = *(dp=new (buf) S3944C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S3944C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3944C4)");
    check_field_offset(lv, s3944c4f0, ABISELECT(8,4), "S3944C4.s3944c4f0");
    check_field_offset(lv, s3944c4f1, ABISELECT(16,8), "S3944C4.s3944c4f1");
    test_class_info(&lv, &cd_S3944C4);
    dp->~S3944C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3944C4(Test_S3944C4, "S3944C4", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S3944C4C1Ev();
extern void _ZN7S3944C4D1Ev();
Name_Map name_map_S3944C4[] = {
  NSPAIR(_ZN7S3944C4C1Ev),
  NSPAIR(_ZN7S3944C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3944C4[];
extern void _ZN7S3944C4D1Ev();
extern void _ZN7S3944C4D0Ev();
static  VTBL_ENTRY vtc_S3944C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3944C4[0]),
  (VTBL_ENTRY)&_ZN7S3944C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3944C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S3944C4[];
extern  VTBL_ENTRY _ZTV7S3944C4[];
Class_Descriptor cd_S3944C4 = {  "S3944C4", // class name
  0,0,//no base classes
  &(vtc_S3944C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S3944C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3944C4),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  S3944C1  : S3944C2 {
  ::S3944C4 s3944c1f0;
  virtual  ~S3944C1(); // _ZN7S3944C1D1Ev
  S3944C1(); // tgen
};
//SIG(1 S3944C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m Fs[2] FC5{ BC3 vd Fp Fi[4] Fp}}}


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

static void Test_S3944C1()
{
  extern Class_Descriptor cd_S3944C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S3944C1, buf);
    S3944C1 *dp, &lv = *(dp=new (buf) S3944C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S3944C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3944C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3944C2*), 0, "S3944C1");
    check_base_class_offset(lv, (S3944C2*), 0, "S3944C1");
    check_field_offset(lv, s3944c1f0, ABISELECT(24,16), "S3944C1.s3944c1f0");
    test_class_info(&lv, &cd_S3944C1);
    dp->~S3944C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3944C1(Test_S3944C1, "S3944C1", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN7S3944C1C1Ev();
extern void _ZN7S3944C1D1Ev();
Name_Map name_map_S3944C1[] = {
  NSPAIR(_ZN7S3944C1C1Ev),
  NSPAIR(_ZN7S3944C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3944C2;
extern VTBL_ENTRY _ZTI7S3944C2[];
extern  VTBL_ENTRY _ZTV7S3944C2[];
static Base_Class bases_S3944C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3944C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3944C1[];
extern void _ZN7S3944C1D1Ev();
extern void _ZN7S3944C1D0Ev();
static  VTBL_ENTRY vtc_S3944C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3944C1[0]),
  (VTBL_ENTRY)&_ZN7S3944C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3944C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3944C1[];
extern  VTBL_ENTRY _ZTV7S3944C1[];
Class_Descriptor cd_S3944C1 = {  "S3944C1", // class name
  bases_S3944C1, 2,
  &(vtc_S3944C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI7S3944C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3944C1),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  S3936C2  : S1766C4_nt {
  int s3936c2f0;
  virtual  ~S3936C2(); // _ZN7S3936C2D1Ev
  S3936C2(); // tgen
};
//SIG(-1 S3936C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3936C2()
{
  extern Class_Descriptor cd_S3936C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3936C2, buf);
    S3936C2 *dp, &lv = *(dp=new (buf) S3936C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3936C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3936C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3936C2");
    check_field_offset(lv, s3936c2f0, ABISELECT(16,12), "S3936C2.s3936c2f0");
    test_class_info(&lv, &cd_S3936C2);
    dp->~S3936C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3936C2(Test_S3936C2, "S3936C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3936C2C1Ev();
extern void _ZN7S3936C2D1Ev();
Name_Map name_map_S3936C2[] = {
  NSPAIR(_ZN7S3936C2C1Ev),
  NSPAIR(_ZN7S3936C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3936C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3936C2[];
extern void _ZN7S3936C2D1Ev();
extern void _ZN7S3936C2D0Ev();
static  VTBL_ENTRY vtc_S3936C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3936C2[0]),
  (VTBL_ENTRY)&_ZN7S3936C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3936C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3936C2[];
extern  VTBL_ENTRY _ZTV7S3936C2[];
Class_Descriptor cd_S3936C2 = {  "S3936C2", // class name
  bases_S3936C2, 1,
  &(vtc_S3936C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3936C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3936C2),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  S3936C4  {
  int s3936c4f0;
  __tsi64 s3936c4f1;
  ::S3961C7_nt s3936c4f2;
  void  mf3936c4(); // _ZN7S3936C48mf3936c4Ev
  virtual  ~S3936C4(); // _ZN7S3936C4D1Ev
  S3936C4(); // tgen
};
//SIG(-1 S3936C4) C1{ vd m Fi FL FC2{ BC3{ vd m FL} vd Fp Fi[4] Fp}}


void  S3936C4 ::mf3936c4(){}
 S3936C4 ::~S3936C4(){ note_dtor("S3936C4", this);}
S3936C4 ::S3936C4(){ note_ctor("S3936C4", this);} // tgen

static void Test_S3936C4()
{
  extern Class_Descriptor cd_S3936C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S3936C4, buf);
    S3936C4 *dp, &lv = *(dp=new (buf) S3936C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S3936C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3936C4)");
    check_field_offset(lv, s3936c4f0, ABISELECT(8,4), "S3936C4.s3936c4f0");
    check_field_offset(lv, s3936c4f1, ABISELECT(16,8), "S3936C4.s3936c4f1");
    check_field_offset(lv, s3936c4f2, ABISELECT(24,16), "S3936C4.s3936c4f2");
    test_class_info(&lv, &cd_S3936C4);
    dp->~S3936C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3936C4(Test_S3936C4, "S3936C4", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S3936C4C1Ev();
extern void _ZN7S3936C4D1Ev();
Name_Map name_map_S3936C4[] = {
  NSPAIR(_ZN7S3936C4C1Ev),
  NSPAIR(_ZN7S3936C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3936C4[];
extern void _ZN7S3936C4D1Ev();
extern void _ZN7S3936C4D0Ev();
static  VTBL_ENTRY vtc_S3936C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3936C4[0]),
  (VTBL_ENTRY)&_ZN7S3936C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3936C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S3936C4[];
extern  VTBL_ENTRY _ZTV7S3936C4[];
Class_Descriptor cd_S3936C4 = {  "S3936C4", // class name
  0,0,//no base classes
  &(vtc_S3936C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S3936C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3936C4),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  S3936C1  : S3936C2 {
  ::S3936C4 s3936c1f0;
  virtual  ~S3936C1(); // _ZN7S3936C1D1Ev
  S3936C1(); // tgen
};
//SIG(1 S3936C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m Fi FL FC5{ BC3 vd Fp Fi[4] Fp}}}


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

static void Test_S3936C1()
{
  extern Class_Descriptor cd_S3936C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S3936C1, buf);
    S3936C1 *dp, &lv = *(dp=new (buf) S3936C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S3936C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3936C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3936C2*), 0, "S3936C1");
    check_base_class_offset(lv, (S3936C2*), 0, "S3936C1");
    check_field_offset(lv, s3936c1f0, ABISELECT(24,16), "S3936C1.s3936c1f0");
    test_class_info(&lv, &cd_S3936C1);
    dp->~S3936C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3936C1(Test_S3936C1, "S3936C1", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S3936C1C1Ev();
extern void _ZN7S3936C1D1Ev();
Name_Map name_map_S3936C1[] = {
  NSPAIR(_ZN7S3936C1C1Ev),
  NSPAIR(_ZN7S3936C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3936C2;
extern VTBL_ENTRY _ZTI7S3936C2[];
extern  VTBL_ENTRY _ZTV7S3936C2[];
static Base_Class bases_S3936C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3936C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3936C1[];
extern void _ZN7S3936C1D1Ev();
extern void _ZN7S3936C1D0Ev();
static  VTBL_ENTRY vtc_S3936C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3936C1[0]),
  (VTBL_ENTRY)&_ZN7S3936C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3936C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3936C1[];
extern  VTBL_ENTRY _ZTV7S3936C1[];
Class_Descriptor cd_S3936C1 = {  "S3936C1", // class name
  bases_S3936C1, 2,
  &(vtc_S3936C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S3936C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3936C1),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  S11605C2  {
  int s11605c2f0[3];
  ::S1768C5_nt s11605c2f1;
};
//SIG(-1 S11605C2) C1{ Fi[3] FC2{ Fc[2] Fs FC3{ Fi} Fs Fc[6]}}



static void Test_S11605C2()
{
  {
    init_simple_test("S11605C2");
    S11605C2 lv;
    check2(sizeof(lv), 28, "sizeof(S11605C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11605C2)");
    check_field_offset(lv, s11605c2f0, 0, "S11605C2.s11605c2f0");
    check_field_offset(lv, s11605c2f1, 12, "S11605C2.s11605c2f1");
  }
}
static Arrange_To_Call_Me vS11605C2(Test_S11605C2, "S11605C2", 28);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11605C1  {
  ::S11605C2 s11605c1f0;
  ::S17132C13_nt s11605c1f1;
  int s11605c1f2;
  void *s11605c1f3[3];
  int s11605c1f4[4];
};
//SIG(1 S11605C1) C1{ FC2{ Fi[3] FC3{ Fc[2] Fs FC4{ Fi} Fs Fc[6]}} FC5{ FL[4]} Fi Fp[3] Fi[4]}



static void Test_S11605C1()
{
  {
    init_simple_test("S11605C1");
    S11605C1 lv;
    check2(sizeof(lv), ABISELECT(112,92), "sizeof(S11605C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11605C1)");
    check_field_offset(lv, s11605c1f0, 0, "S11605C1.s11605c1f0");
    check_field_offset(lv, s11605c1f1, ABISELECT(32,28), "S11605C1.s11605c1f1");
    check_field_offset(lv, s11605c1f2, ABISELECT(64,60), "S11605C1.s11605c1f2");
    check_field_offset(lv, s11605c1f3, ABISELECT(72,64), "S11605C1.s11605c1f3");
    check_field_offset(lv, s11605c1f4, ABISELECT(96,76), "S11605C1.s11605c1f4");
  }
}
static Arrange_To_Call_Me vS11605C1(Test_S11605C1, "S11605C1", ABISELECT(112,92));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11604C1  {
  ::S11605C2 s11604c1f0;
  ::S5066C11_nt s11604c1f1;
  int s11604c1f2;
  void *s11604c1f3[3];
  int s11604c1f4[4];
};
//SIG(1 S11604C1) C1{ FC2{ Fi[3] FC3{ Fc[2] Fs FC4{ Fi} Fs Fc[6]}} FC5{ Fl[4]} Fi Fp[3] Fi[4]}



static void Test_S11604C1()
{
  {
    init_simple_test("S11604C1");
    S11604C1 lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S11604C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11604C1)");
    check_field_offset(lv, s11604c1f0, 0, "S11604C1.s11604c1f0");
    check_field_offset(lv, s11604c1f1, ABISELECT(32,28), "S11604C1.s11604c1f1");
    check_field_offset(lv, s11604c1f2, ABISELECT(64,44), "S11604C1.s11604c1f2");
    check_field_offset(lv, s11604c1f3, ABISELECT(72,48), "S11604C1.s11604c1f3");
    check_field_offset(lv, s11604c1f4, ABISELECT(96,60), "S11604C1.s11604c1f4");
  }
}
static Arrange_To_Call_Me vS11604C1(Test_S11604C1, "S11604C1", ABISELECT(112,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16022C1  {
  ::S615C17_nt s16022c1f0;
  void *s16022c1f1;
  int s16022c1f2[3];
  ::S615C12_nt s16022c1f3;
  unsigned int s16022c1f4:1;
  int s16022c1f5;
  void  mf16022c1(); // _ZN8S16022C19mf16022c1Ev
};
//SIG(1 S16022C1) C1{ m FC2{ m Fi[2]} Fp Fi[3] FC3{ m FC4{ m Fi[4]} FC5{ m Fi[3]} Fi} Fi:1 Fi}


void  S16022C1 ::mf16022c1(){}

static void Test_S16022C1()
{
  {
    init_simple_test("S16022C1");
    static S16022C1 lv;
    check2(sizeof(lv), ABISELECT(72,64), "sizeof(S16022C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16022C1)");
    check_field_offset(lv, s16022c1f0, 0, "S16022C1.s16022c1f0");
    check_field_offset(lv, s16022c1f1, 8, "S16022C1.s16022c1f1");
    check_field_offset(lv, s16022c1f2, ABISELECT(16,12), "S16022C1.s16022c1f2");
    check_field_offset(lv, s16022c1f3, ABISELECT(28,24), "S16022C1.s16022c1f3");
    set_bf_and_test(lv, s16022c1f4, ABISELECT(60,56), 0, 1, 1, "S16022C1");
    check_field_offset(lv, s16022c1f5, ABISELECT(64,60), "S16022C1.s16022c1f5");
  }
}
static Arrange_To_Call_Me vS16022C1(Test_S16022C1, "S16022C1", ABISELECT(72,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16665C1  {
  int s16665c1f0;
  ::S1768C5_nt s16665c1f1;
  ::S5066C7_nt s16665c1f2;
  char s16665c1f3[1000];
  int s16665c1f4[2];
  void *s16665c1f5;
  int s16665c1f6;
  void  mf16665c1(); // _ZN8S16665C19mf16665c1Ev
};
//SIG(1 S16665C1) C1{ m Fi FC2{ Fc[2] Fs FC3{ Fi} Fs Fc[6]} FC4{ m Fp} Fc[1000] Fi[2] Fp Fi}


void  S16665C1 ::mf16665c1(){}

static void Test_S16665C1()
{
  {
    init_simple_test("S16665C1");
    S16665C1 lv;
    check2(sizeof(lv), ABISELECT(1056,1040), "sizeof(S16665C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16665C1)");
    check_field_offset(lv, s16665c1f0, 0, "S16665C1.s16665c1f0");
    check_field_offset(lv, s16665c1f1, 4, "S16665C1.s16665c1f1");
    check_field_offset(lv, s16665c1f2, ABISELECT(24,20), "S16665C1.s16665c1f2");
    check_field_offset(lv, s16665c1f3, ABISELECT(32,24), "S16665C1.s16665c1f3");
    check_field_offset(lv, s16665c1f4, ABISELECT(1032,1024), "S16665C1.s16665c1f4");
    check_field_offset(lv, s16665c1f5, ABISELECT(1040,1032), "S16665C1.s16665c1f5");
    check_field_offset(lv, s16665c1f6, ABISELECT(1048,1036), "S16665C1.s16665c1f6");
  }
}
static Arrange_To_Call_Me vS16665C1(Test_S16665C1, "S16665C1", ABISELECT(1056,1040));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3935C2  : S1766C4_nt {
  int s3935c2f0;
  virtual  ~S3935C2(); // _ZN7S3935C2D1Ev
  S3935C2(); // tgen
};
//SIG(-1 S3935C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3935C2()
{
  extern Class_Descriptor cd_S3935C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3935C2, buf);
    S3935C2 *dp, &lv = *(dp=new (buf) S3935C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3935C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3935C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3935C2");
    check_field_offset(lv, s3935c2f0, ABISELECT(16,12), "S3935C2.s3935c2f0");
    test_class_info(&lv, &cd_S3935C2);
    dp->~S3935C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3935C2(Test_S3935C2, "S3935C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3935C2C1Ev();
extern void _ZN7S3935C2D1Ev();
Name_Map name_map_S3935C2[] = {
  NSPAIR(_ZN7S3935C2C1Ev),
  NSPAIR(_ZN7S3935C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3935C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3935C2[];
extern void _ZN7S3935C2D1Ev();
extern void _ZN7S3935C2D0Ev();
static  VTBL_ENTRY vtc_S3935C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3935C2[0]),
  (VTBL_ENTRY)&_ZN7S3935C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3935C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3935C2[];
extern  VTBL_ENTRY _ZTV7S3935C2[];
Class_Descriptor cd_S3935C2 = {  "S3935C2", // class name
  bases_S3935C2, 1,
  &(vtc_S3935C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3935C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3935C2),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  S3935C4  {
  int s3935c4f0;
  ::S3961C7_nt s3935c4f1;
  void  mf3935c4(); // _ZN7S3935C48mf3935c4Ev
  virtual  ~S3935C4(); // _ZN7S3935C4D1Ev
  S3935C4(); // tgen
};
//SIG(-1 S3935C4) C1{ vd m Fi FC2{ BC3{ vd m FL} vd Fp Fi[4] Fp}}


void  S3935C4 ::mf3935c4(){}
 S3935C4 ::~S3935C4(){ note_dtor("S3935C4", this);}
S3935C4 ::S3935C4(){ note_ctor("S3935C4", this);} // tgen

static void Test_S3935C4()
{
  extern Class_Descriptor cd_S3935C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S3935C4, buf);
    S3935C4 *dp, &lv = *(dp=new (buf) S3935C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S3935C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3935C4)");
    check_field_offset(lv, s3935c4f0, ABISELECT(8,4), "S3935C4.s3935c4f0");
    check_field_offset(lv, s3935c4f1, ABISELECT(16,8), "S3935C4.s3935c4f1");
    test_class_info(&lv, &cd_S3935C4);
    dp->~S3935C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3935C4(Test_S3935C4, "S3935C4", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S3935C4C1Ev();
extern void _ZN7S3935C4D1Ev();
Name_Map name_map_S3935C4[] = {
  NSPAIR(_ZN7S3935C4C1Ev),
  NSPAIR(_ZN7S3935C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3935C4[];
extern void _ZN7S3935C4D1Ev();
extern void _ZN7S3935C4D0Ev();
static  VTBL_ENTRY vtc_S3935C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3935C4[0]),
  (VTBL_ENTRY)&_ZN7S3935C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3935C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S3935C4[];
extern  VTBL_ENTRY _ZTV7S3935C4[];
Class_Descriptor cd_S3935C4 = {  "S3935C4", // class name
  0,0,//no base classes
  &(vtc_S3935C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S3935C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3935C4),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  S3935C1  : S3935C2 {
  ::S3935C4 s3935c1f0;
  virtual  ~S3935C1(); // _ZN7S3935C1D1Ev
  S3935C1(); // tgen
};
//SIG(1 S3935C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m Fi FC5{ BC3 vd Fp Fi[4] Fp}}}


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

static void Test_S3935C1()
{
  extern Class_Descriptor cd_S3935C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S3935C1, buf);
    S3935C1 *dp, &lv = *(dp=new (buf) S3935C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S3935C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3935C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3935C2*), 0, "S3935C1");
    check_base_class_offset(lv, (S3935C2*), 0, "S3935C1");
    check_field_offset(lv, s3935c1f0, ABISELECT(24,16), "S3935C1.s3935c1f0");
    test_class_info(&lv, &cd_S3935C1);
    dp->~S3935C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3935C1(Test_S3935C1, "S3935C1", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN7S3935C1C1Ev();
extern void _ZN7S3935C1D1Ev();
Name_Map name_map_S3935C1[] = {
  NSPAIR(_ZN7S3935C1C1Ev),
  NSPAIR(_ZN7S3935C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3935C2;
extern VTBL_ENTRY _ZTI7S3935C2[];
extern  VTBL_ENTRY _ZTV7S3935C2[];
static Base_Class bases_S3935C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3935C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3935C1[];
extern void _ZN7S3935C1D1Ev();
extern void _ZN7S3935C1D0Ev();
static  VTBL_ENTRY vtc_S3935C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3935C1[0]),
  (VTBL_ENTRY)&_ZN7S3935C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3935C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3935C1[];
extern  VTBL_ENTRY _ZTV7S3935C1[];
Class_Descriptor cd_S3935C1 = {  "S3935C1", // class name
  bases_S3935C1, 2,
  &(vtc_S3935C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI7S3935C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3935C1),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  S1729C3  : S1725C4_nt {
  int s1729c3f0;
  virtual  ~S1729C3(); // _ZN7S1729C3D1Ev
  S1729C3(); // tgen
};
//SIG(-1 S1729C3) C1{ BC2{ vd m Fi} vd Fi}


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

static void Test_S1729C3()
{
  extern Class_Descriptor cd_S1729C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1729C3, buf);
    S1729C3 *dp, &lv = *(dp=new (buf) S1729C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1729C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1729C3)");
    check_base_class_offset(lv, (S1725C4_nt*), 0, "S1729C3");
    check_field_offset(lv, s1729c3f0, ABISELECT(12,8), "S1729C3.s1729c3f0");
    test_class_info(&lv, &cd_S1729C3);
    dp->~S1729C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1729C3(Test_S1729C3, "S1729C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1729C3C1Ev();
extern void _ZN7S1729C3D1Ev();
Name_Map name_map_S1729C3[] = {
  NSPAIR(_ZN7S1729C3C1Ev),
  NSPAIR(_ZN7S1729C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1725C4_nt;
extern VTBL_ENTRY _ZTI10S1725C4_nt[];
extern  VTBL_ENTRY _ZTV10S1725C4_nt[];
static Base_Class bases_S1729C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1725C4_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 _ZTI7S1729C3[];
extern void _ZN7S1729C3D1Ev();
extern void _ZN7S1729C3D0Ev();
static  VTBL_ENTRY vtc_S1729C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1729C3[0]),
  (VTBL_ENTRY)&_ZN7S1729C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1729C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1729C3[];
extern  VTBL_ENTRY _ZTV7S1729C3[];
Class_Descriptor cd_S1729C3 = {  "S1729C3", // class name
  bases_S1729C3, 1,
  &(vtc_S1729C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1729C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1729C3),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  S1729C2  : S1729C3 {
  virtual void  v2(); // _ZN7S1729C22v2Ev
  ~S1729C2(); // tgen
  S1729C2(); // tgen
};
//SIG(-1 S1729C2) C1{ BC2{ BC3{ vd m Fi} vd Fi} v1}


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

static void Test_S1729C2()
{
  extern Class_Descriptor cd_S1729C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1729C2, buf);
    S1729C2 *dp, &lv = *(dp=new (buf) S1729C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1729C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1729C2)");
    check_base_class_offset(lv, (S1725C4_nt*)(S1729C3*), 0, "S1729C2");
    check_base_class_offset(lv, (S1729C3*), 0, "S1729C2");
    test_class_info(&lv, &cd_S1729C2);
    dp->~S1729C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1729C2(Test_S1729C2, "S1729C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1729C2C1Ev();
extern void _ZN7S1729C2D1Ev();
Name_Map name_map_S1729C2[] = {
  NSPAIR(_ZN7S1729C2C1Ev),
  NSPAIR(_ZN7S1729C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1725C4_nt;
extern VTBL_ENTRY _ZTI10S1725C4_nt[];
extern  VTBL_ENTRY _ZTV10S1725C4_nt[];
extern Class_Descriptor cd_S1729C3;
extern VTBL_ENTRY _ZTI7S1729C3[];
extern  VTBL_ENTRY _ZTV7S1729C3[];
static Base_Class bases_S1729C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1725C4_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_S1729C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1729C2[];
extern void _ZN7S1729C2D1Ev();
extern void _ZN7S1729C2D0Ev();
extern void _ZN7S1729C22v2Ev();
static  VTBL_ENTRY vtc_S1729C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1729C2[0]),
  (VTBL_ENTRY)&_ZN7S1729C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1729C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1729C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1729C2[];
extern  VTBL_ENTRY _ZTV7S1729C2[];
Class_Descriptor cd_S1729C2 = {  "S1729C2", // class name
  bases_S1729C2, 2,
  &(vtc_S1729C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1729C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1729C2),5, //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  S1729C6_nt  {
  void *s1729c6f0;
  void  mf1729c6(); // _ZN10S1729C6_nt8mf1729c6Ev
};
//SIG(-1 S1729C6_nt) C1{ m Fp}


void  S1729C6_nt ::mf1729c6(){}

//skip512 S1729C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1729C1  : S1729C2 {
  ::S5066C7_nt s1729c1f0;
  ::S5066C7_nt s1729c1f1;
  ::S5066C7_nt s1729c1f2;
  ::S1729C6_nt s1729c1f3;
  virtual  ~S1729C1(); // _ZN7S1729C1D1Ev
  virtual void  v1(); // _ZN7S1729C12v1Ev
  S1729C1(); // tgen
};
//SIG(1 S1729C1) C1{ BC2{ BC3{ BC4{ vd m Fi} vd Fi} v2} vd v1 FC5{ m Fp} FC5 FC5 FC6{ m Fp}}


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

static void Test_S1729C1()
{
  extern Class_Descriptor cd_S1729C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1729C1, buf);
    S1729C1 *dp, &lv = *(dp=new (buf) S1729C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1729C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1729C1)");
    check_base_class_offset(lv, (S1725C4_nt*)(S1729C3*)(S1729C2*), 0, "S1729C1");
    check_base_class_offset(lv, (S1729C3*)(S1729C2*), 0, "S1729C1");
    check_base_class_offset(lv, (S1729C2*), 0, "S1729C1");
    check_field_offset(lv, s1729c1f0, ABISELECT(16,12), "S1729C1.s1729c1f0");
    check_field_offset(lv, s1729c1f1, ABISELECT(24,16), "S1729C1.s1729c1f1");
    check_field_offset(lv, s1729c1f2, ABISELECT(32,20), "S1729C1.s1729c1f2");
    check_field_offset(lv, s1729c1f3, ABISELECT(40,24), "S1729C1.s1729c1f3");
    test_class_info(&lv, &cd_S1729C1);
    dp->~S1729C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1729C1(Test_S1729C1, "S1729C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1729C1C1Ev();
extern void _ZN7S1729C1D1Ev();
Name_Map name_map_S1729C1[] = {
  NSPAIR(_ZN7S1729C1C1Ev),
  NSPAIR(_ZN7S1729C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1725C4_nt;
extern VTBL_ENTRY _ZTI10S1725C4_nt[];
extern  VTBL_ENTRY _ZTV10S1725C4_nt[];
extern Class_Descriptor cd_S1729C3;
extern VTBL_ENTRY _ZTI7S1729C3[];
extern  VTBL_ENTRY _ZTV7S1729C3[];
extern Class_Descriptor cd_S1729C2;
extern VTBL_ENTRY _ZTI7S1729C2[];
extern  VTBL_ENTRY _ZTV7S1729C2[];
static Base_Class bases_S1729C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1725C4_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_S1729C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1729C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1729C1[];
extern void _ZN7S1729C1D1Ev();
extern void _ZN7S1729C1D0Ev();
extern void _ZN7S1729C22v2Ev();
extern void _ZN7S1729C12v1Ev();
static  VTBL_ENTRY vtc_S1729C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1729C1[0]),
  (VTBL_ENTRY)&_ZN7S1729C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1729C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1729C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1729C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1729C1[];
extern  VTBL_ENTRY _ZTV7S1729C1[];
Class_Descriptor cd_S1729C1 = {  "S1729C1", // class name
  bases_S1729C1, 3,
  &(vtc_S1729C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1729C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1729C1),6, //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  S15515C4_nt  {
  char s15515c4f0[2];
  void  mf15515c4(); // _ZN11S15515C4_nt9mf15515c4Ev
};
//SIG(-1 S15515C4_nt) C1{ m Fc[2]}


void  S15515C4_nt ::mf15515c4(){}

//skip512 S15515C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15515C1  {
  ::S1768C5_nt s15515c1f0;
  int s15515c1f1[4];
  ::S15515C4_nt s15515c1f2;
  __tsi64 s15515c1f3;
  short s15515c1f4[3];
  char s15515c1f5;
  void  mf15515c1(); // _ZN8S15515C19mf15515c1Ev
};
//SIG(1 S15515C1) C1{ m FC2{ Fc[2] Fs FC3{ Fi} Fs Fc[6]} Fi[4] FC4{ m Fc[2]} FL Fs[3] Fc}


void  S15515C1 ::mf15515c1(){}

static void Test_S15515C1()
{
  {
    init_simple_test("S15515C1");
    S15515C1 lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S15515C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15515C1)");
    check_field_offset(lv, s15515c1f0, 0, "S15515C1.s15515c1f0");
    check_field_offset(lv, s15515c1f1, 16, "S15515C1.s15515c1f1");
    check_field_offset(lv, s15515c1f2, 32, "S15515C1.s15515c1f2");
    check_field_offset(lv, s15515c1f3, ABISELECT(40,36), "S15515C1.s15515c1f3");
    check_field_offset(lv, s15515c1f4, ABISELECT(48,44), "S15515C1.s15515c1f4");
    check_field_offset(lv, s15515c1f5, ABISELECT(54,50), "S15515C1.s15515c1f5");
  }
}
static Arrange_To_Call_Me vS15515C1(Test_S15515C1, "S15515C1", ABISELECT(56,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18421C1  {
  short s18421c1f0;
  ::S1768C5_nt s18421c1f1;
  int s18421c1f2[4];
  ::S13085C6_nt s18421c1f3;
  void *s18421c1f4;
  int s18421c1f5[2];
  char s18421c1f6[17];
  void  mf18421c1(); // _ZN8S18421C19mf18421c1Ev
};
//SIG(1 S18421C1) C1{ m Fs FC2{ Fc[2] Fs FC3{ Fi} Fs Fc[6]} Fi[4] FC4{ Fi} Fp Fi[2] Fc[17]}


void  S18421C1 ::mf18421c1(){}

static void Test_S18421C1()
{
  {
    init_simple_test("S18421C1");
    S18421C1 lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S18421C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18421C1)");
    check_field_offset(lv, s18421c1f0, 0, "S18421C1.s18421c1f0");
    check_field_offset(lv, s18421c1f1, 4, "S18421C1.s18421c1f1");
    check_field_offset(lv, s18421c1f2, 20, "S18421C1.s18421c1f2");
    check_field_offset(lv, s18421c1f3, 36, "S18421C1.s18421c1f3");
    check_field_offset(lv, s18421c1f4, 40, "S18421C1.s18421c1f4");
    check_field_offset(lv, s18421c1f5, ABISELECT(48,44), "S18421C1.s18421c1f5");
    check_field_offset(lv, s18421c1f6, ABISELECT(56,52), "S18421C1.s18421c1f6");
  }
}
static Arrange_To_Call_Me vS18421C1(Test_S18421C1, "S18421C1", ABISELECT(80,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3934C2  : S1766C4_nt {
  int s3934c2f0;
  virtual  ~S3934C2(); // _ZN7S3934C2D1Ev
  S3934C2(); // tgen
};
//SIG(-1 S3934C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3934C2()
{
  extern Class_Descriptor cd_S3934C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3934C2, buf);
    S3934C2 *dp, &lv = *(dp=new (buf) S3934C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3934C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3934C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3934C2");
    check_field_offset(lv, s3934c2f0, ABISELECT(16,12), "S3934C2.s3934c2f0");
    test_class_info(&lv, &cd_S3934C2);
    dp->~S3934C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3934C2(Test_S3934C2, "S3934C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3934C2C1Ev();
extern void _ZN7S3934C2D1Ev();
Name_Map name_map_S3934C2[] = {
  NSPAIR(_ZN7S3934C2C1Ev),
  NSPAIR(_ZN7S3934C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3934C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3934C2[];
extern void _ZN7S3934C2D1Ev();
extern void _ZN7S3934C2D0Ev();
static  VTBL_ENTRY vtc_S3934C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3934C2[0]),
  (VTBL_ENTRY)&_ZN7S3934C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3934C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3934C2[];
extern  VTBL_ENTRY _ZTV7S3934C2[];
Class_Descriptor cd_S3934C2 = {  "S3934C2", // class name
  bases_S3934C2, 1,
  &(vtc_S3934C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3934C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3934C2),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  S3934C4  {
  ::S3961C7_nt s3934c4f0;
  void  mf3934c4(); // _ZN7S3934C48mf3934c4Ev
  virtual  ~S3934C4(); // _ZN7S3934C4D1Ev
  S3934C4(); // tgen
};
//SIG(-1 S3934C4) C1{ vd m FC2{ BC3{ vd m FL} vd Fp Fi[4] Fp}}


void  S3934C4 ::mf3934c4(){}
 S3934C4 ::~S3934C4(){ note_dtor("S3934C4", this);}
S3934C4 ::S3934C4(){ note_ctor("S3934C4", this);} // tgen

static void Test_S3934C4()
{
  extern Class_Descriptor cd_S3934C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S3934C4, buf);
    S3934C4 *dp, &lv = *(dp=new (buf) S3934C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S3934C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3934C4)");
    check_field_offset(lv, s3934c4f0, ABISELECT(8,4), "S3934C4.s3934c4f0");
    test_class_info(&lv, &cd_S3934C4);
    dp->~S3934C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3934C4(Test_S3934C4, "S3934C4", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S3934C4C1Ev();
extern void _ZN7S3934C4D1Ev();
Name_Map name_map_S3934C4[] = {
  NSPAIR(_ZN7S3934C4C1Ev),
  NSPAIR(_ZN7S3934C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3934C4[];
extern void _ZN7S3934C4D1Ev();
extern void _ZN7S3934C4D0Ev();
static  VTBL_ENTRY vtc_S3934C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3934C4[0]),
  (VTBL_ENTRY)&_ZN7S3934C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3934C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S3934C4[];
extern  VTBL_ENTRY _ZTV7S3934C4[];
Class_Descriptor cd_S3934C4 = {  "S3934C4", // class name
  0,0,//no base classes
  &(vtc_S3934C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S3934C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3934C4),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  S3934C1  : S3934C2 {
  ::S3934C4 s3934c1f0;
  virtual  ~S3934C1(); // _ZN7S3934C1D1Ev
  S3934C1(); // tgen
};
//SIG(1 S3934C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m FC5{ BC3 vd Fp Fi[4] Fp}}}


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

static void Test_S3934C1()
{
  extern Class_Descriptor cd_S3934C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S3934C1, buf);
    S3934C1 *dp, &lv = *(dp=new (buf) S3934C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S3934C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3934C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3934C2*), 0, "S3934C1");
    check_base_class_offset(lv, (S3934C2*), 0, "S3934C1");
    check_field_offset(lv, s3934c1f0, ABISELECT(24,16), "S3934C1.s3934c1f0");
    test_class_info(&lv, &cd_S3934C1);
    dp->~S3934C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3934C1(Test_S3934C1, "S3934C1", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S3934C1C1Ev();
extern void _ZN7S3934C1D1Ev();
Name_Map name_map_S3934C1[] = {
  NSPAIR(_ZN7S3934C1C1Ev),
  NSPAIR(_ZN7S3934C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3934C2;
extern VTBL_ENTRY _ZTI7S3934C2[];
extern  VTBL_ENTRY _ZTV7S3934C2[];
static Base_Class bases_S3934C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3934C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3934C1[];
extern void _ZN7S3934C1D1Ev();
extern void _ZN7S3934C1D0Ev();
static  VTBL_ENTRY vtc_S3934C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3934C1[0]),
  (VTBL_ENTRY)&_ZN7S3934C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3934C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3934C1[];
extern  VTBL_ENTRY _ZTV7S3934C1[];
Class_Descriptor cd_S3934C1 = {  "S3934C1", // class name
  bases_S3934C1, 2,
  &(vtc_S3934C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S3934C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3934C1),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  S2822C5  : S19863C8 {
};
//SIG(-1 S2822C5) C1{ BC2{ m}}



static void Test_S2822C5()
{
  extern Class_Descriptor cd_S2822C5;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S2822C5, buf);
    S2822C5 &lv = *(new (buf) S2822C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S2822C5)");
    check2(__alignof__(lv), 1, "__alignof__(S2822C5)");
    check_base_class_offset(lv, (S19863C8*), 0, "S2822C5");
    test_class_info(&lv, &cd_S2822C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2822C5(Test_S2822C5, "S2822C5", 1);

#else // __cplusplus

extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
static Base_Class bases_S2822C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2822C5[];
Class_Descriptor cd_S2822C5 = {  "S2822C5", // class name
  bases_S2822C5, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI7S2822C5),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  S2822C2  : S19863C10 , S19863C8 , virtual S2822C5 , virtual S19863C9_nt {
  ~S2822C2(); // tgen
  S2822C2(); // tgen
};
//SIG(-1 S2822C2) C1{ BC2{ m} BC3{ m} VBC4{ BC3} VBC5{ m Fi}}


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

static void Test_S2822C2()
{
  extern Class_Descriptor cd_S2822C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2822C2, buf);
    S2822C2 *dp, &lv = *(dp=new (buf) S2822C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2822C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2822C2)");
    check_base_class_offset(lv, (S19863C10*), 0, "S2822C2");
    /*is_ambiguous_... S2822C2::S19863C8 */ AMB_check_base_class_offset(lv, (S19863C8*), 0, "S2822C2");
    check_base_class_offset(lv, (S19863C8*)(S2822C5*), ABISELECT(8,4), "S2822C2");
    check_base_class_offset(lv, (S2822C5*), ABISELECT(8,4), "S2822C2");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(8,4), "S2822C2");
    test_class_info(&lv, &cd_S2822C2);
    dp->~S2822C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2822C2(Test_S2822C2, "S2822C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2822C2C1Ev();
extern void _ZN7S2822C2D1Ev();
Name_Map name_map_S2822C2[] = {
  NSPAIR(_ZN7S2822C2C1Ev),
  NSPAIR(_ZN7S2822C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S2822C5;
extern VTBL_ENTRY _ZTI7S2822C5[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S2822C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19863C8,    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_S2822C5,    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},
  {&cd_S19863C9_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2822C2[];
static  VTBL_ENTRY vtc_S2822C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2822C2[0]),
};
extern VTBL_ENTRY _ZTV7S2822C2[];
static  VTT_ENTRY vtt_S2822C2[] = {
  {&(_ZTV7S2822C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S2822C2[];
extern  VTBL_ENTRY _ZTV7S2822C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2822C2[];
Class_Descriptor cd_S2822C2 = {  "S2822C2", // class name
  bases_S2822C2, 5,
  &(vtc_S2822C2[0]), // expected_vtbl_contents
  &(vtt_S2822C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2822C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2822C2),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2822C2),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  S2822C7_nt  {
  void  mf2822c7(); // _ZN10S2822C7_nt8mf2822c7Ev
  virtual  ~S2822C7_nt(); // _ZN10S2822C7_ntD1Ev
  S2822C7_nt(); // tgen
};
//SIG(-1 S2822C7_nt) C1{ vd m}


void  S2822C7_nt ::mf2822c7(){}
 S2822C7_nt ::~S2822C7_nt(){ note_dtor("S2822C7_nt", this);}
S2822C7_nt ::S2822C7_nt(){ note_ctor("S2822C7_nt", this);} // tgen

//skip512 S2822C7_nt

#else // __cplusplus

extern void _ZN10S2822C7_ntC1Ev();
extern void _ZN10S2822C7_ntD1Ev();
Name_Map name_map_S2822C7_nt[] = {
  NSPAIR(_ZN10S2822C7_ntC1Ev),
  NSPAIR(_ZN10S2822C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2822C7_nt[];
extern void _ZN10S2822C7_ntD1Ev();
extern void _ZN10S2822C7_ntD0Ev();
static  VTBL_ENTRY vtc_S2822C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2822C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S2822C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2822C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S2822C7_nt[];
VTBL_ENTRY *P__ZTI10S2822C7_nt = _ZTI10S2822C7_nt; 
extern  VTBL_ENTRY _ZTV10S2822C7_nt[];
Class_Descriptor cd_S2822C7_nt = {  "S2822C7_nt", // class name
  0,0,//no base classes
  &(vtc_S2822C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S2822C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2822C7_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  S2822C1  : S2822C2 , S2822C7_nt , virtual S21028C14_nt {
  virtual  ~S2822C1(); // _ZN7S2822C1D2Ev
  S2822C1(); // tgen
};
//SIG(1 S2822C1) C1{ BC2{ BC3{ m} BC4{ m} VBC5{ BC4} VBC6{ m Fi}} BC7{ vd m} VBC8{ m FC6} vd}


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

static void Test_S2822C1()
{
  extern Class_Descriptor cd_S2822C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2822C1, buf);
    S2822C1 *dp, &lv = *(dp=new (buf) S2822C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2822C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2822C1)");
    check_base_class_offset(lv, (S19863C10*)(S2822C2*), 0, "S2822C1");
    /*is_ambiguous_... S2822C2::S19863C8 */ AMB_check_base_class_offset(lv, (S19863C8*)(S2822C2*), 0, "S2822C1");
    check_base_class_offset(lv, (S19863C8*)(S2822C5*), ABISELECT(16,8), "S2822C1");
    check_base_class_offset(lv, (S2822C5*)(S2822C2*), ABISELECT(16,8), "S2822C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S2822C2*), ABISELECT(16,8), "S2822C1");
    check_base_class_offset(lv, (S2822C2*), 0, "S2822C1");
    check_base_class_offset(lv, (S2822C7_nt*), ABISELECT(8,4), "S2822C1");
    check_base_class_offset(lv, (S21028C14_nt*), ABISELECT(20,12), "S2822C1");
    test_class_info(&lv, &cd_S2822C1);
    dp->~S2822C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2822C1(Test_S2822C1, "S2822C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S2822C1C1Ev();
extern void _ZN7S2822C1D2Ev();
Name_Map name_map_S2822C1[] = {
  NSPAIR(_ZN7S2822C1C1Ev),
  NSPAIR(_ZN7S2822C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S19863C8;
extern VTBL_ENTRY _ZTI8S19863C8[];
extern Class_Descriptor cd_S2822C5;
extern VTBL_ENTRY _ZTI7S2822C5[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S2822C2;
extern VTBL_ENTRY _ZTI7S2822C2[];
extern  VTBL_ENTRY _ZTV7S2822C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2822C2[];
extern Class_Descriptor cd_S2822C7_nt;
extern VTBL_ENTRY _ZTI10S2822C7_nt[];
extern  VTBL_ENTRY _ZTV10S2822C7_nt[];
extern Class_Descriptor cd_S21028C14_nt;
extern VTBL_ENTRY _ZTI12S21028C14_nt[];
static Base_Class bases_S2822C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C8,    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_S2822C5,    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, 1},
  {&cd_S19863C9_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
    5, //immediately_derived
  0, 1},
  {&cd_S2822C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2822C7_nt,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21028C14_nt,    ABISELECT(20,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2822C1[];
extern void _ZN7S2822C1D1Ev();
extern void _ZN7S2822C1D0Ev();
extern void ABISELECT(_ZThn8_N7S2822C1D1Ev,_ZThn4_N7S2822C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S2822C1D0Ev,_ZThn4_N7S2822C1D0Ev)();
static  VTBL_ENTRY vtc_S2822C1[] = {
  ABISELECT(20,12),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2822C1[0]),
  (VTBL_ENTRY)&_ZN7S2822C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2822C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2822C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2822C1D1Ev,_ZThn4_N7S2822C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2822C1D0Ev,_ZThn4_N7S2822C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S2822C1[];
static  VTBL_ENTRY _tg__ZTV7S2822C2__7S2822C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2822C2[0]),
};
static  VTT_ENTRY vtt_S2822C1[] = {
  {&(_ZTV7S2822C1[5]),  5,11},
  {&(_tg__ZTV7S2822C2__7S2822C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S2822C1[];
extern  VTBL_ENTRY _ZTV7S2822C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2822C1[];
Class_Descriptor cd_S2822C1 = {  "S2822C1", // class name
  bases_S2822C1, 8,
  &(vtc_S2822C1[0]), // expected_vtbl_contents
  &(vtt_S2822C1[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S2822C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2822C1),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2822C1),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5661C5  : virtual S19863C10 , virtual S19863C9_nt {
  long double s5661c5f0[10];
  virtual  ~S5661C5(); // _ZN7S5661C5D2Ev
  S5661C5(); // tgen
};
//SIG(-1 S5661C5) C1{ VBC2{ m} VBC3{ m Fi} vd FD[10]}


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

static void Test_S5661C5()
{
  extern Class_Descriptor cd_S5661C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S5661C5, buf);
    S5661C5 *dp, &lv = *(dp=new (buf) S5661C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S5661C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5661C5)");
    check_base_class_offset(lv, (S19863C10*), 0, "S5661C5");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(176,124), "S5661C5");
    check_field_offset(lv, s5661c5f0, ABISELECT(16,4), "S5661C5.s5661c5f0");
    test_class_info(&lv, &cd_S5661C5);
    dp->~S5661C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5661C5(Test_S5661C5, "S5661C5", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN7S5661C5C1Ev();
extern void _ZN7S5661C5D2Ev();
Name_Map name_map_S5661C5[] = {
  NSPAIR(_ZN7S5661C5C1Ev),
  NSPAIR(_ZN7S5661C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S5661C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C9_nt,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5661C5[];
extern void _ZN7S5661C5D1Ev();
extern void _ZN7S5661C5D0Ev();
static  VTBL_ENTRY vtc_S5661C5[] = {
  ABISELECT(176,124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5661C5[0]),
  (VTBL_ENTRY)&_ZN7S5661C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5661C5D0Ev,
};
extern VTBL_ENTRY _ZTV7S5661C5[];
static  VTT_ENTRY vtt_S5661C5[] = {
  {&(_ZTV7S5661C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5661C5[];
extern  VTBL_ENTRY _ZTV7S5661C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5661C5[];
Class_Descriptor cd_S5661C5 = {  "S5661C5", // class name
  bases_S5661C5, 2,
  &(vtc_S5661C5[0]), // expected_vtbl_contents
  &(vtt_S5661C5[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI7S5661C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5661C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5661C5),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  S5661C4  : S5661C5 {
  __tsi64 s5661c4f0;
  ~S5661C4(); // tgen
  S5661C4(); // tgen
};
//SIG(-1 S5661C4) C1{ BC2{ VBC3{ m} VBC4{ m Fi} vd FD[10]} FL}


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

static void Test_S5661C4()
{
  extern Class_Descriptor cd_S5661C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,35)];
    init_test(&cd_S5661C4, buf);
    S5661C4 *dp, &lv = *(dp=new (buf) S5661C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,136), "sizeof(S5661C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5661C4)");
    check_base_class_offset(lv, (S19863C10*)(S5661C5*), 0, "S5661C4");
    check_base_class_offset(lv, (S19863C9_nt*)(S5661C5*), ABISELECT(184,132), "S5661C4");
    check_base_class_offset(lv, (S5661C5*), 0, "S5661C4");
    check_field_offset(lv, s5661c4f0, ABISELECT(176,124), "S5661C4.s5661c4f0");
    test_class_info(&lv, &cd_S5661C4);
    dp->~S5661C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5661C4(Test_S5661C4, "S5661C4", ABISELECT(192,136));

#else // __cplusplus

extern void _ZN7S5661C4C1Ev();
extern void _ZN7S5661C4D1Ev();
Name_Map name_map_S5661C4[] = {
  NSPAIR(_ZN7S5661C4C1Ev),
  NSPAIR(_ZN7S5661C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S5661C5;
extern VTBL_ENTRY _ZTI7S5661C5[];
extern  VTBL_ENTRY _ZTV7S5661C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5661C5[];
static Base_Class bases_S5661C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5661C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5661C4[];
extern void _ZN7S5661C4D1Ev();
extern void _ZN7S5661C4D0Ev();
static  VTBL_ENTRY vtc_S5661C4[] = {
  ABISELECT(184,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5661C4[0]),
  (VTBL_ENTRY)&_ZN7S5661C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5661C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S5661C4[];
extern void _ZN7S5661C5D1Ev();
extern void _ZN7S5661C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5661C5__7S5661C4[] = {
  ABISELECT(184,132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5661C5[0]),
  (VTBL_ENTRY)&_ZN7S5661C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5661C5D0Ev,
};
static  VTT_ENTRY vtt_S5661C4[] = {
  {&(_ZTV7S5661C4[4]),  4,6},
  {&(_tg__ZTV7S5661C5__7S5661C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5661C4[];
extern  VTBL_ENTRY _ZTV7S5661C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5661C4[];
Class_Descriptor cd_S5661C4 = {  "S5661C4", // class name
  bases_S5661C4, 3,
  &(vtc_S5661C4[0]), // expected_vtbl_contents
  &(vtt_S5661C4[0]), // expected_vtt_contents
  ABISELECT(192,136), // object size
  NSPAIRA(_ZTI7S5661C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5661C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5661C4),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  S5661C1  : S21028C14_nt , virtual S5661C4 {
  virtual  ~S5661C1(); // _ZN7S5661C1D2Ev
  virtual void  v1(); // _ZN7S5661C12v1Ev
  S5661C1(); // tgen
};
//SIG(1 S5661C1) C1{ BC2{ m FC3{ m Fi}} VBC4{ BC5{ VBC6{ m} VBC3 vd FD[10]} FL} vd v1}


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

static void Test_S5661C1()
{
  extern Class_Descriptor cd_S5661C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,37)];
    init_test(&cd_S5661C1, buf);
    S5661C1 *dp, &lv = *(dp=new (buf) S5661C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S5661C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5661C1)");
    check_base_class_offset(lv, (S21028C14_nt*), ABISELECT(8,4), "S5661C1");
    check_base_class_offset(lv, (S19863C10*)(S5661C5*)(S5661C4*), 0, "S5661C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S5661C5*)(S5661C4*), ABISELECT(200,140), "S5661C1");
    check_base_class_offset(lv, (S5661C5*)(S5661C4*), ABISELECT(16,8), "S5661C1");
    check_base_class_offset(lv, (S5661C4*), ABISELECT(16,8), "S5661C1");
    test_class_info(&lv, &cd_S5661C1);
    dp->~S5661C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5661C1(Test_S5661C1, "S5661C1", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN7S5661C1C1Ev();
extern void _ZN7S5661C1D2Ev();
Name_Map name_map_S5661C1[] = {
  NSPAIR(_ZN7S5661C1C1Ev),
  NSPAIR(_ZN7S5661C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21028C14_nt;
extern VTBL_ENTRY _ZTI12S21028C14_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S5661C5;
extern VTBL_ENTRY _ZTI7S5661C5[];
extern  VTBL_ENTRY _ZTV7S5661C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5661C5[];
extern Class_Descriptor cd_S5661C4;
extern VTBL_ENTRY _ZTI7S5661C4[];
extern  VTBL_ENTRY _ZTV7S5661C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5661C4[];
static Base_Class bases_S5661C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21028C14_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C9_nt,    ABISELECT(200,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
    3, //immediately_derived
  0, 1},
  {&cd_S5661C5,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5661C4,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5661C1[];
extern void _ZN7S5661C1D1Ev();
extern void _ZN7S5661C1D0Ev();
extern void _ZN7S5661C12v1Ev();
extern void ABISELECT(_ZTv0_n40_N7S5661C1D1Ev,_ZTv0_n20_N7S5661C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S5661C1D1Ev,_ZThn8_N7S5661C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5661C1D0Ev,_ZTv0_n20_N7S5661C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S5661C1D0Ev,_ZThn8_N7S5661C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5661C1[] = {
  ABISELECT(200,140),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5661C1[0]),
  (VTBL_ENTRY)&_ZN7S5661C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5661C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5661C12v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(184,132),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5661C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5661C1D1Ev,_ZTv0_n20_N7S5661C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5661C1D0Ev,_ZTv0_n20_N7S5661C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S5661C1[];
extern void _ZN7S5661C4D1Ev();
extern void _ZN7S5661C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5661C4__7S5661C1[] = {
  ABISELECT(184,132),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5661C4[0]),
  (VTBL_ENTRY)&_ZN7S5661C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5661C4D0Ev,
};
extern void _ZN7S5661C5D1Ev();
extern void _ZN7S5661C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5661C57S5661C4__7S5661C1[] = {
  ABISELECT(184,132),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5661C5[0]),
  (VTBL_ENTRY)&_ZN7S5661C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5661C5D0Ev,
};
static  VTT_ENTRY vtt_S5661C1[] = {
  {&(_ZTV7S5661C1[5]),  5,15},
  {&(_ZTV7S5661C1[13]),  13,15},
  {&(_tg__ZTV7S5661C4__7S5661C1[4]),  4,6},
  {&(_tg__ZTV7S5661C57S5661C4__7S5661C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5661C1[];
extern  VTBL_ENTRY _ZTV7S5661C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5661C1[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5661C1D0Ev,_ZTv0_n20_N7S5661C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5661C1D0Ev,_ZThn8_N7S5661C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5661C1D1Ev,_ZTv0_n20_N7S5661C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5661C1D1Ev,_ZThn8_N7S5661C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5661C1 = {  "S5661C1", // class name
  bases_S5661C1, 5,
  &(vtc_S5661C1[0]), // expected_vtbl_contents
  &(vtt_S5661C1[0]), // expected_vtt_contents
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI7S5661C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5661C1),15, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5661C1),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5660C5  : virtual S19863C10 , virtual S19863C9_nt {
  long double s5660c5f0[10];
  virtual  ~S5660C5(); // _ZN7S5660C5D2Ev
  S5660C5(); // tgen
};
//SIG(-1 S5660C5) C1{ VBC2{ m} VBC3{ m Fi} vd FD[10]}


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

static void Test_S5660C5()
{
  extern Class_Descriptor cd_S5660C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S5660C5, buf);
    S5660C5 *dp, &lv = *(dp=new (buf) S5660C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S5660C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5660C5)");
    check_base_class_offset(lv, (S19863C10*), 0, "S5660C5");
    check_base_class_offset(lv, (S19863C9_nt*), ABISELECT(176,124), "S5660C5");
    check_field_offset(lv, s5660c5f0, ABISELECT(16,4), "S5660C5.s5660c5f0");
    test_class_info(&lv, &cd_S5660C5);
    dp->~S5660C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5660C5(Test_S5660C5, "S5660C5", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN7S5660C5C1Ev();
extern void _ZN7S5660C5D2Ev();
Name_Map name_map_S5660C5[] = {
  NSPAIR(_ZN7S5660C5C1Ev),
  NSPAIR(_ZN7S5660C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
static Base_Class bases_S5660C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19863C9_nt,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5660C5[];
extern void _ZN7S5660C5D1Ev();
extern void _ZN7S5660C5D0Ev();
static  VTBL_ENTRY vtc_S5660C5[] = {
  ABISELECT(176,124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5660C5[0]),
  (VTBL_ENTRY)&_ZN7S5660C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5660C5D0Ev,
};
extern VTBL_ENTRY _ZTV7S5660C5[];
static  VTT_ENTRY vtt_S5660C5[] = {
  {&(_ZTV7S5660C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5660C5[];
extern  VTBL_ENTRY _ZTV7S5660C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5660C5[];
Class_Descriptor cd_S5660C5 = {  "S5660C5", // class name
  bases_S5660C5, 2,
  &(vtc_S5660C5[0]), // expected_vtbl_contents
  &(vtt_S5660C5[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI7S5660C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5660C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5660C5),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  S5660C4  : S5660C5 {
  long s5660c4f0;
  ~S5660C4(); // tgen
  S5660C4(); // tgen
};
//SIG(-1 S5660C4) C1{ BC2{ VBC3{ m} VBC4{ m Fi} vd FD[10]} Fl}


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

static void Test_S5660C4()
{
  extern Class_Descriptor cd_S5660C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,34)];
    init_test(&cd_S5660C4, buf);
    S5660C4 *dp, &lv = *(dp=new (buf) S5660C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S5660C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5660C4)");
    check_base_class_offset(lv, (S19863C10*)(S5660C5*), 0, "S5660C4");
    check_base_class_offset(lv, (S19863C9_nt*)(S5660C5*), ABISELECT(184,128), "S5660C4");
    check_base_class_offset(lv, (S5660C5*), 0, "S5660C4");
    check_field_offset(lv, s5660c4f0, ABISELECT(176,124), "S5660C4.s5660c4f0");
    test_class_info(&lv, &cd_S5660C4);
    dp->~S5660C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5660C4(Test_S5660C4, "S5660C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN7S5660C4C1Ev();
extern void _ZN7S5660C4D1Ev();
Name_Map name_map_S5660C4[] = {
  NSPAIR(_ZN7S5660C4C1Ev),
  NSPAIR(_ZN7S5660C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S5660C5;
extern VTBL_ENTRY _ZTI7S5660C5[];
extern  VTBL_ENTRY _ZTV7S5660C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5660C5[];
static Base_Class bases_S5660C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19863C9_nt,    ABISELECT(184,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5660C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5660C4[];
extern void _ZN7S5660C4D1Ev();
extern void _ZN7S5660C4D0Ev();
static  VTBL_ENTRY vtc_S5660C4[] = {
  ABISELECT(184,128),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5660C4[0]),
  (VTBL_ENTRY)&_ZN7S5660C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5660C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S5660C4[];
extern void _ZN7S5660C5D1Ev();
extern void _ZN7S5660C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5660C5__7S5660C4[] = {
  ABISELECT(184,128),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5660C5[0]),
  (VTBL_ENTRY)&_ZN7S5660C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5660C5D0Ev,
};
static  VTT_ENTRY vtt_S5660C4[] = {
  {&(_ZTV7S5660C4[4]),  4,6},
  {&(_tg__ZTV7S5660C5__7S5660C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5660C4[];
extern  VTBL_ENTRY _ZTV7S5660C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5660C4[];
Class_Descriptor cd_S5660C4 = {  "S5660C4", // class name
  bases_S5660C4, 3,
  &(vtc_S5660C4[0]), // expected_vtbl_contents
  &(vtt_S5660C4[0]), // expected_vtt_contents
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI7S5660C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5660C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5660C4),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  S5660C1  : S21028C14_nt , virtual S5660C4 {
  virtual  ~S5660C1(); // _ZN7S5660C1D2Ev
  virtual void  v1(); // _ZN7S5660C12v1Ev
  S5660C1(); // tgen
};
//SIG(1 S5660C1) C1{ BC2{ m FC3{ m Fi}} VBC4{ BC5{ VBC6{ m} VBC3 vd FD[10]} Fl} vd v1}


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

static void Test_S5660C1()
{
  extern Class_Descriptor cd_S5660C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,36)];
    init_test(&cd_S5660C1, buf);
    S5660C1 *dp, &lv = *(dp=new (buf) S5660C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,140), "sizeof(S5660C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5660C1)");
    check_base_class_offset(lv, (S21028C14_nt*), ABISELECT(8,4), "S5660C1");
    check_base_class_offset(lv, (S19863C10*)(S5660C5*)(S5660C4*), 0, "S5660C1");
    check_base_class_offset(lv, (S19863C9_nt*)(S5660C5*)(S5660C4*), ABISELECT(200,136), "S5660C1");
    check_base_class_offset(lv, (S5660C5*)(S5660C4*), ABISELECT(16,8), "S5660C1");
    check_base_class_offset(lv, (S5660C4*), ABISELECT(16,8), "S5660C1");
    test_class_info(&lv, &cd_S5660C1);
    dp->~S5660C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5660C1(Test_S5660C1, "S5660C1", ABISELECT(208,140));

#else // __cplusplus

extern void _ZN7S5660C1C1Ev();
extern void _ZN7S5660C1D2Ev();
Name_Map name_map_S5660C1[] = {
  NSPAIR(_ZN7S5660C1C1Ev),
  NSPAIR(_ZN7S5660C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21028C14_nt;
extern VTBL_ENTRY _ZTI12S21028C14_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S5660C5;
extern VTBL_ENTRY _ZTI7S5660C5[];
extern  VTBL_ENTRY _ZTV7S5660C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5660C5[];
extern Class_Descriptor cd_S5660C4;
extern VTBL_ENTRY _ZTI7S5660C4[];
extern  VTBL_ENTRY _ZTV7S5660C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5660C4[];
static Base_Class bases_S5660C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21028C14_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19863C9_nt,    ABISELECT(200,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
    3, //immediately_derived
  0, 1},
  {&cd_S5660C5,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5660C4,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5660C1[];
extern void _ZN7S5660C1D1Ev();
extern void _ZN7S5660C1D0Ev();
extern void _ZN7S5660C12v1Ev();
extern void ABISELECT(_ZTv0_n40_N7S5660C1D1Ev,_ZTv0_n20_N7S5660C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S5660C1D1Ev,_ZThn8_N7S5660C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5660C1D0Ev,_ZTv0_n20_N7S5660C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S5660C1D0Ev,_ZThn8_N7S5660C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5660C1[] = {
  ABISELECT(200,136),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5660C1[0]),
  (VTBL_ENTRY)&_ZN7S5660C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5660C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5660C12v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(184,128),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5660C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5660C1D1Ev,_ZTv0_n20_N7S5660C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5660C1D0Ev,_ZTv0_n20_N7S5660C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S5660C1[];
extern void _ZN7S5660C4D1Ev();
extern void _ZN7S5660C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5660C4__7S5660C1[] = {
  ABISELECT(184,128),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5660C4[0]),
  (VTBL_ENTRY)&_ZN7S5660C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5660C4D0Ev,
};
extern void _ZN7S5660C5D1Ev();
extern void _ZN7S5660C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5660C57S5660C4__7S5660C1[] = {
  ABISELECT(184,128),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5660C5[0]),
  (VTBL_ENTRY)&_ZN7S5660C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5660C5D0Ev,
};
static  VTT_ENTRY vtt_S5660C1[] = {
  {&(_ZTV7S5660C1[5]),  5,15},
  {&(_ZTV7S5660C1[13]),  13,15},
  {&(_tg__ZTV7S5660C4__7S5660C1[4]),  4,6},
  {&(_tg__ZTV7S5660C57S5660C4__7S5660C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S5660C1[];
extern  VTBL_ENTRY _ZTV7S5660C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5660C1[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5660C1D0Ev,_ZTv0_n20_N7S5660C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5660C1D0Ev,_ZThn8_N7S5660C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5660C1D1Ev,_ZTv0_n20_N7S5660C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S5660C1D1Ev,_ZThn8_N7S5660C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5660C1 = {  "S5660C1", // class name
  bases_S5660C1, 5,
  &(vtc_S5660C1[0]), // expected_vtbl_contents
  &(vtt_S5660C1[0]), // expected_vtt_contents
  ABISELECT(208,140), // object size
  NSPAIRA(_ZTI7S5660C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5660C1),15, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5660C1),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20139C2  {
  ::S20508C4 s20139c2f0;
  __tsi64 s20139c2f1;
  long double s20139c2f2;
  virtual void  v3(); // _ZN8S20139C22v3Ev
  virtual void  v4(); // _ZN8S20139C22v4Ev
  virtual void  v5(); // _ZN8S20139C22v5Ev
  virtual void  v6(); // _ZN8S20139C22v6Ev
  virtual void  v7(); // _ZN8S20139C22v7Ev
  virtual void  v8(); // _ZN8S20139C22v8Ev
  ~S20139C2(); // tgen
  S20139C2(); // tgen
};
//SIG(-1 S20139C2) C1{ v1 v2 v3 v4 v5 v6 FC2{ v7 v8 v9} FL FD}


void  S20139C2 ::v3(){vfunc_called(this, "_ZN8S20139C22v3Ev");}
void  S20139C2 ::v4(){vfunc_called(this, "_ZN8S20139C22v4Ev");}
void  S20139C2 ::v5(){vfunc_called(this, "_ZN8S20139C22v5Ev");}
void  S20139C2 ::v6(){vfunc_called(this, "_ZN8S20139C22v6Ev");}
void  S20139C2 ::v7(){vfunc_called(this, "_ZN8S20139C22v7Ev");}
void  S20139C2 ::v8(){vfunc_called(this, "_ZN8S20139C22v8Ev");}
S20139C2 ::~S20139C2(){ note_dtor("S20139C2", this);} // tgen
S20139C2 ::S20139C2(){ note_ctor("S20139C2", this);} // tgen

static void Test_S20139C2()
{
  extern Class_Descriptor cd_S20139C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S20139C2, buf);
    S20139C2 *dp, &lv = *(dp=new (buf) S20139C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S20139C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20139C2)");
    check_field_offset(lv, s20139c2f0, ABISELECT(8,4), "S20139C2.s20139c2f0");
    check_field_offset(lv, s20139c2f1, ABISELECT(16,8), "S20139C2.s20139c2f1");
    check_field_offset(lv, s20139c2f2, ABISELECT(32,16), "S20139C2.s20139c2f2");
    test_class_info(&lv, &cd_S20139C2);
    dp->~S20139C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20139C2(Test_S20139C2, "S20139C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S20139C2C1Ev();
extern void _ZN8S20139C2D1Ev();
Name_Map name_map_S20139C2[] = {
  NSPAIR(_ZN8S20139C2C1Ev),
  NSPAIR(_ZN8S20139C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20139C2[];
extern void _ZN8S20139C22v3Ev();
extern void _ZN8S20139C22v4Ev();
extern void _ZN8S20139C22v5Ev();
extern void _ZN8S20139C22v6Ev();
extern void _ZN8S20139C22v7Ev();
extern void _ZN8S20139C22v8Ev();
static  VTBL_ENTRY vtc_S20139C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20139C2[0]),
  (VTBL_ENTRY)&_ZN8S20139C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20139C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20139C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20139C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20139C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20139C22v8Ev,
};
extern VTBL_ENTRY _ZTI8S20139C2[];
extern  VTBL_ENTRY _ZTV8S20139C2[];
Class_Descriptor cd_S20139C2 = {  "S20139C2", // class name
  0,0,//no base classes
  &(vtc_S20139C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S20139C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20139C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20139C1  : virtual S20139C2 {
  int s20139c1f0;
  virtual void  v1(); // _ZN8S20139C12v1Ev
  virtual void  v2(); // _ZN8S20139C12v2Ev
  ~S20139C1(); // tgen
  S20139C1(); // tgen
};
//SIG(1 S20139C1) C1{ VBC2{ v3 v4 v5 v6 v7 v8 FC3{ v9 v10 v11} FL FD} v1 v2 Fi}


void  S20139C1 ::v1(){vfunc_called(this, "_ZN8S20139C12v1Ev");}
void  S20139C1 ::v2(){vfunc_called(this, "_ZN8S20139C12v2Ev");}
S20139C1 ::~S20139C1(){ note_dtor("S20139C1", this);} // tgen
S20139C1 ::S20139C1(){ note_ctor("S20139C1", this);} // tgen

static void Test_S20139C1()
{
  extern Class_Descriptor cd_S20139C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,10)];
    init_test(&cd_S20139C1, buf);
    S20139C1 *dp, &lv = *(dp=new (buf) S20139C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S20139C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20139C1)");
    check_base_class_offset(lv, (S20139C2*), ABISELECT(16,8), "S20139C1");
    check_field_offset(lv, s20139c1f0, ABISELECT(8,4), "S20139C1.s20139c1f0");
    test_class_info(&lv, &cd_S20139C1);
    dp->~S20139C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20139C1(Test_S20139C1, "S20139C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S20139C1C1Ev();
extern void _ZN8S20139C1D1Ev();
Name_Map name_map_S20139C1[] = {
  NSPAIR(_ZN8S20139C1C1Ev),
  NSPAIR(_ZN8S20139C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20139C2;
extern VTBL_ENTRY _ZTI8S20139C2[];
extern  VTBL_ENTRY _ZTV8S20139C2[];
static Base_Class bases_S20139C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20139C2,    ABISELECT(16,8), //bcp->offset
    5, //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 _ZTI8S20139C1[];
extern void _ZN8S20139C12v1Ev();
extern void _ZN8S20139C12v2Ev();
extern void _ZN8S20139C22v3Ev();
extern void _ZN8S20139C22v4Ev();
extern void _ZN8S20139C22v5Ev();
extern void _ZN8S20139C22v6Ev();
extern void _ZN8S20139C22v7Ev();
extern void _ZN8S20139C22v8Ev();
static  VTBL_ENTRY vtc_S20139C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20139C1[0]),
  (VTBL_ENTRY)&_ZN8S20139C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20139C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20139C1[0]),
  (VTBL_ENTRY)&_ZN8S20139C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20139C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20139C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20139C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20139C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20139C22v8Ev,
};
extern VTBL_ENTRY _ZTV8S20139C1[];
static  VTT_ENTRY vtt_S20139C1[] = {
  {&(_ZTV8S20139C1[3]),  3,19},
  {&(_ZTV8S20139C1[13]),  13,19},
};
extern VTBL_ENTRY _ZTI8S20139C1[];
extern  VTBL_ENTRY _ZTV8S20139C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20139C1[];
Class_Descriptor cd_S20139C1 = {  "S20139C1", // class name
  bases_S20139C1, 1,
  &(vtc_S20139C1[0]), // expected_vtbl_contents
  &(vtt_S20139C1[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S20139C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20139C1),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20139C1),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  S14914C1  {
  short s14914c1f0[2];
  ::S14865C14 s14914c1f1;
};
//SIG(1 S14914C1) C1{ Fs[2] FU2{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp}}



static void Test_S14914C1()
{
  {
    init_simple_test("S14914C1");
    S14914C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S14914C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14914C1)");
    check_field_offset(lv, s14914c1f0, 0, "S14914C1.s14914c1f0");
    check_field_offset(lv, s14914c1f1, ABISELECT(8,4), "S14914C1.s14914c1f1");
  }
}
static Arrange_To_Call_Me vS14914C1(Test_S14914C1, "S14914C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18907C1  {
  ::S20508C6 s18907c1f0;
  virtual  ~S18907C1(); // _ZN8S18907C1D1Ev
  virtual void  v1(); // _ZN8S18907C12v1Ev
  virtual void  v2(); // _ZN8S18907C12v2Ev
  virtual void  v3(); // _ZN8S18907C12v3Ev
  S18907C1(); // tgen
};
//SIG(1 S18907C1) C1{ vd v1 v2 v3 FC2{ vd v4 v5 v6 Fp[10] FC3{ v7 v8 v9}}}


 S18907C1 ::~S18907C1(){ note_dtor("S18907C1", this);}
void  S18907C1 ::v1(){vfunc_called(this, "_ZN8S18907C12v1Ev");}
void  S18907C1 ::v2(){vfunc_called(this, "_ZN8S18907C12v2Ev");}
void  S18907C1 ::v3(){vfunc_called(this, "_ZN8S18907C12v3Ev");}
S18907C1 ::S18907C1(){ note_ctor("S18907C1", this);} // tgen

static void Test_S18907C1()
{
  extern Class_Descriptor cd_S18907C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[14];
    init_test(&cd_S18907C1, buf);
    S18907C1 *dp, &lv = *(dp=new (buf) S18907C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S18907C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18907C1)");
    check_field_offset(lv, s18907c1f0, ABISELECT(8,4), "S18907C1.s18907c1f0");
    test_class_info(&lv, &cd_S18907C1);
    dp->~S18907C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18907C1(Test_S18907C1, "S18907C1", ABISELECT(104,52));

#else // __cplusplus

extern void _ZN8S18907C1C1Ev();
extern void _ZN8S18907C1D1Ev();
Name_Map name_map_S18907C1[] = {
  NSPAIR(_ZN8S18907C1C1Ev),
  NSPAIR(_ZN8S18907C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18907C1[];
extern void _ZN8S18907C1D1Ev();
extern void _ZN8S18907C1D0Ev();
extern void _ZN8S18907C12v1Ev();
extern void _ZN8S18907C12v2Ev();
extern void _ZN8S18907C12v3Ev();
static  VTBL_ENTRY vtc_S18907C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18907C1[0]),
  (VTBL_ENTRY)&_ZN8S18907C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18907C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18907C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18907C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18907C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18907C1[];
extern  VTBL_ENTRY _ZTV8S18907C1[];
Class_Descriptor cd_S18907C1 = {  "S18907C1", // class name
  0,0,//no base classes
  &(vtc_S18907C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI8S18907C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18907C1),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  S3931C2  : S1766C4_nt {
  int s3931c2f0;
  virtual  ~S3931C2(); // _ZN7S3931C2D1Ev
  S3931C2(); // tgen
};
//SIG(-1 S3931C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3931C2()
{
  extern Class_Descriptor cd_S3931C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3931C2, buf);
    S3931C2 *dp, &lv = *(dp=new (buf) S3931C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3931C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3931C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3931C2");
    check_field_offset(lv, s3931c2f0, ABISELECT(16,12), "S3931C2.s3931c2f0");
    test_class_info(&lv, &cd_S3931C2);
    dp->~S3931C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3931C2(Test_S3931C2, "S3931C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3931C2C1Ev();
extern void _ZN7S3931C2D1Ev();
Name_Map name_map_S3931C2[] = {
  NSPAIR(_ZN7S3931C2C1Ev),
  NSPAIR(_ZN7S3931C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3931C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3931C2[];
extern void _ZN7S3931C2D1Ev();
extern void _ZN7S3931C2D0Ev();
static  VTBL_ENTRY vtc_S3931C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3931C2[0]),
  (VTBL_ENTRY)&_ZN7S3931C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3931C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3931C2[];
extern  VTBL_ENTRY _ZTV7S3931C2[];
Class_Descriptor cd_S3931C2 = {  "S3931C2", // class name
  bases_S3931C2, 1,
  &(vtc_S3931C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3931C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3931C2),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  S3931C4  {
  char s3931c4f0;
  int s3931c4f1;
  short s3931c4f2;
  void *s3931c4f3;
  int s3931c4f4;
  void  mf3931c4(); // _ZN7S3931C48mf3931c4Ev
  virtual  ~S3931C4(); // _ZN7S3931C4D1Ev
  S3931C4(); // tgen
};
//SIG(-1 S3931C4) C1{ vd m Fc Fi Fs Fp Fi}


void  S3931C4 ::mf3931c4(){}
 S3931C4 ::~S3931C4(){ note_dtor("S3931C4", this);}
S3931C4 ::S3931C4(){ note_ctor("S3931C4", this);} // tgen

static void Test_S3931C4()
{
  extern Class_Descriptor cd_S3931C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S3931C4, buf);
    S3931C4 *dp, &lv = *(dp=new (buf) S3931C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S3931C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3931C4)");
    check_field_offset(lv, s3931c4f0, ABISELECT(8,4), "S3931C4.s3931c4f0");
    check_field_offset(lv, s3931c4f1, ABISELECT(12,8), "S3931C4.s3931c4f1");
    check_field_offset(lv, s3931c4f2, ABISELECT(16,12), "S3931C4.s3931c4f2");
    check_field_offset(lv, s3931c4f3, ABISELECT(24,16), "S3931C4.s3931c4f3");
    check_field_offset(lv, s3931c4f4, ABISELECT(32,20), "S3931C4.s3931c4f4");
    test_class_info(&lv, &cd_S3931C4);
    dp->~S3931C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3931C4(Test_S3931C4, "S3931C4", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S3931C4C1Ev();
extern void _ZN7S3931C4D1Ev();
Name_Map name_map_S3931C4[] = {
  NSPAIR(_ZN7S3931C4C1Ev),
  NSPAIR(_ZN7S3931C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3931C4[];
extern void _ZN7S3931C4D1Ev();
extern void _ZN7S3931C4D0Ev();
static  VTBL_ENTRY vtc_S3931C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3931C4[0]),
  (VTBL_ENTRY)&_ZN7S3931C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3931C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S3931C4[];
extern  VTBL_ENTRY _ZTV7S3931C4[];
Class_Descriptor cd_S3931C4 = {  "S3931C4", // class name
  0,0,//no base classes
  &(vtc_S3931C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S3931C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3931C4),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  S3931C1  : S3931C2 {
  ::S3931C4 s3931c1f0;
  virtual  ~S3931C1(); // _ZN7S3931C1D1Ev
  S3931C1(); // tgen
};
//SIG(1 S3931C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m Fc Fi Fs Fp Fi}}


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

static void Test_S3931C1()
{
  extern Class_Descriptor cd_S3931C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S3931C1, buf);
    S3931C1 *dp, &lv = *(dp=new (buf) S3931C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S3931C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3931C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3931C2*), 0, "S3931C1");
    check_base_class_offset(lv, (S3931C2*), 0, "S3931C1");
    check_field_offset(lv, s3931c1f0, ABISELECT(24,16), "S3931C1.s3931c1f0");
    test_class_info(&lv, &cd_S3931C1);
    dp->~S3931C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3931C1(Test_S3931C1, "S3931C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S3931C1C1Ev();
extern void _ZN7S3931C1D1Ev();
Name_Map name_map_S3931C1[] = {
  NSPAIR(_ZN7S3931C1C1Ev),
  NSPAIR(_ZN7S3931C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3931C2;
extern VTBL_ENTRY _ZTI7S3931C2[];
extern  VTBL_ENTRY _ZTV7S3931C2[];
static Base_Class bases_S3931C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3931C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3931C1[];
extern void _ZN7S3931C1D1Ev();
extern void _ZN7S3931C1D0Ev();
static  VTBL_ENTRY vtc_S3931C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3931C1[0]),
  (VTBL_ENTRY)&_ZN7S3931C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3931C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3931C1[];
extern  VTBL_ENTRY _ZTV7S3931C1[];
Class_Descriptor cd_S3931C1 = {  "S3931C1", // class name
  bases_S3931C1, 2,
  &(vtc_S3931C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S3931C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3931C1),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  S11163C1  {
  ::S1768C5_nt s11163c1f0;
  char s11163c1f1[16];
  short s11163c1f2;
  char s11163c1f3[2];
};
//SIG(1 S11163C1) C1{ FC2{ Fc[2] Fs FC3{ Fi} Fs Fc[6]} Fc[16] Fs Fc[2]}



static void Test_S11163C1()
{
  {
    init_simple_test("S11163C1");
    S11163C1 lv;
    check2(sizeof(lv), 36, "sizeof(S11163C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11163C1)");
    check_field_offset(lv, s11163c1f0, 0, "S11163C1.s11163c1f0");
    check_field_offset(lv, s11163c1f1, 16, "S11163C1.s11163c1f1");
    check_field_offset(lv, s11163c1f2, 32, "S11163C1.s11163c1f2");
    check_field_offset(lv, s11163c1f3, 34, "S11163C1.s11163c1f3");
  }
}
static Arrange_To_Call_Me vS11163C1(Test_S11163C1, "S11163C1", 36);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10615C1  {
  char s10615c1f0[16];
  ::S1768C5_nt s10615c1f1;
  ::S1768C5_nt s10615c1f2;
  ::S1768C5_nt s10615c1f3;
};
//SIG(1 S10615C1) C1{ Fc[16] FC2{ Fc[2] Fs FC3{ Fi} Fs Fc[6]} FC2 FC2}



static void Test_S10615C1()
{
  {
    init_simple_test("S10615C1");
    S10615C1 lv;
    check2(sizeof(lv), 64, "sizeof(S10615C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10615C1)");
    check_field_offset(lv, s10615c1f0, 0, "S10615C1.s10615c1f0");
    check_field_offset(lv, s10615c1f1, 16, "S10615C1.s10615c1f1");
    check_field_offset(lv, s10615c1f2, 32, "S10615C1.s10615c1f2");
    check_field_offset(lv, s10615c1f3, 48, "S10615C1.s10615c1f3");
  }
}
static Arrange_To_Call_Me vS10615C1(Test_S10615C1, "S10615C1", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3943C2  : S1766C4_nt {
  int s3943c2f0;
  virtual  ~S3943C2(); // _ZN7S3943C2D1Ev
  S3943C2(); // tgen
};
//SIG(-1 S3943C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3943C2()
{
  extern Class_Descriptor cd_S3943C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3943C2, buf);
    S3943C2 *dp, &lv = *(dp=new (buf) S3943C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3943C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3943C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3943C2");
    check_field_offset(lv, s3943c2f0, ABISELECT(16,12), "S3943C2.s3943c2f0");
    test_class_info(&lv, &cd_S3943C2);
    dp->~S3943C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3943C2(Test_S3943C2, "S3943C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3943C2C1Ev();
extern void _ZN7S3943C2D1Ev();
Name_Map name_map_S3943C2[] = {
  NSPAIR(_ZN7S3943C2C1Ev),
  NSPAIR(_ZN7S3943C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3943C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3943C2[];
extern void _ZN7S3943C2D1Ev();
extern void _ZN7S3943C2D0Ev();
static  VTBL_ENTRY vtc_S3943C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3943C2[0]),
  (VTBL_ENTRY)&_ZN7S3943C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3943C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3943C2[];
extern  VTBL_ENTRY _ZTV7S3943C2[];
Class_Descriptor cd_S3943C2 = {  "S3943C2", // class name
  bases_S3943C2, 1,
  &(vtc_S3943C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3943C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3943C2),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  S3943C4_nt  {
  short s3943c4f0;
  void *s3943c4f1;
  short s3943c4f2;
  void  mf3943c4(); // _ZN10S3943C4_nt8mf3943c4Ev
  virtual  ~S3943C4_nt(); // _ZN10S3943C4_ntD1Ev
  S3943C4_nt(); // tgen
};
//SIG(-1 S3943C4_nt) C1{ vd m Fs Fp Fs}


void  S3943C4_nt ::mf3943c4(){}
 S3943C4_nt ::~S3943C4_nt(){ note_dtor("S3943C4_nt", this);}
S3943C4_nt ::S3943C4_nt(){ note_ctor("S3943C4_nt", this);} // tgen

//skip512 S3943C4_nt

#else // __cplusplus

extern void _ZN10S3943C4_ntC1Ev();
extern void _ZN10S3943C4_ntD1Ev();
Name_Map name_map_S3943C4_nt[] = {
  NSPAIR(_ZN10S3943C4_ntC1Ev),
  NSPAIR(_ZN10S3943C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3943C4_nt[];
extern void _ZN10S3943C4_ntD1Ev();
extern void _ZN10S3943C4_ntD0Ev();
static  VTBL_ENTRY vtc_S3943C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3943C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S3943C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3943C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3943C4_nt[];
VTBL_ENTRY *P__ZTI10S3943C4_nt = _ZTI10S3943C4_nt; 
extern  VTBL_ENTRY _ZTV10S3943C4_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3943C1  : S3943C2 {
  ::S3943C4_nt s3943c1f0;
  virtual  ~S3943C1(); // _ZN7S3943C1D1Ev
  S3943C1(); // tgen
};
//SIG(1 S3943C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m Fs Fp Fs}}


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

static void Test_S3943C1()
{
  extern Class_Descriptor cd_S3943C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S3943C1, buf);
    S3943C1 *dp, &lv = *(dp=new (buf) S3943C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S3943C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3943C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3943C2*), 0, "S3943C1");
    check_base_class_offset(lv, (S3943C2*), 0, "S3943C1");
    check_field_offset(lv, s3943c1f0, ABISELECT(24,16), "S3943C1.s3943c1f0");
    test_class_info(&lv, &cd_S3943C1);
    dp->~S3943C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3943C1(Test_S3943C1, "S3943C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S3943C1C1Ev();
extern void _ZN7S3943C1D1Ev();
Name_Map name_map_S3943C1[] = {
  NSPAIR(_ZN7S3943C1C1Ev),
  NSPAIR(_ZN7S3943C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3943C2;
extern VTBL_ENTRY _ZTI7S3943C2[];
extern  VTBL_ENTRY _ZTV7S3943C2[];
static Base_Class bases_S3943C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3943C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3943C1[];
extern void _ZN7S3943C1D1Ev();
extern void _ZN7S3943C1D0Ev();
static  VTBL_ENTRY vtc_S3943C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3943C1[0]),
  (VTBL_ENTRY)&_ZN7S3943C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3943C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3943C1[];
extern  VTBL_ENTRY _ZTV7S3943C1[];
Class_Descriptor cd_S3943C1 = {  "S3943C1", // class name
  bases_S3943C1, 2,
  &(vtc_S3943C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S3943C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3943C1),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  S3941C2  : S1766C4_nt {
  int s3941c2f0;
  virtual  ~S3941C2(); // _ZN7S3941C2D1Ev
  S3941C2(); // tgen
};
//SIG(-1 S3941C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3941C2()
{
  extern Class_Descriptor cd_S3941C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3941C2, buf);
    S3941C2 *dp, &lv = *(dp=new (buf) S3941C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3941C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3941C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3941C2");
    check_field_offset(lv, s3941c2f0, ABISELECT(16,12), "S3941C2.s3941c2f0");
    test_class_info(&lv, &cd_S3941C2);
    dp->~S3941C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3941C2(Test_S3941C2, "S3941C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3941C2C1Ev();
extern void _ZN7S3941C2D1Ev();
Name_Map name_map_S3941C2[] = {
  NSPAIR(_ZN7S3941C2C1Ev),
  NSPAIR(_ZN7S3941C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3941C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3941C2[];
extern void _ZN7S3941C2D1Ev();
extern void _ZN7S3941C2D0Ev();
static  VTBL_ENTRY vtc_S3941C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3941C2[0]),
  (VTBL_ENTRY)&_ZN7S3941C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3941C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3941C2[];
extern  VTBL_ENTRY _ZTV7S3941C2[];
Class_Descriptor cd_S3941C2 = {  "S3941C2", // class name
  bases_S3941C2, 1,
  &(vtc_S3941C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3941C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3941C2),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  S3941C4  {
  void *s3941c4f0[3];
  char s3941c4f1;
  void  mf3941c4(); // _ZN7S3941C48mf3941c4Ev
  virtual  ~S3941C4(); // _ZN7S3941C4D1Ev
  S3941C4(); // tgen
};
//SIG(-1 S3941C4) C1{ vd m Fp[3] Fc}


void  S3941C4 ::mf3941c4(){}
 S3941C4 ::~S3941C4(){ note_dtor("S3941C4", this);}
S3941C4 ::S3941C4(){ note_ctor("S3941C4", this);} // tgen

static void Test_S3941C4()
{
  extern Class_Descriptor cd_S3941C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3941C4, buf);
    S3941C4 *dp, &lv = *(dp=new (buf) S3941C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3941C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3941C4)");
    check_field_offset(lv, s3941c4f0, ABISELECT(8,4), "S3941C4.s3941c4f0");
    check_field_offset(lv, s3941c4f1, ABISELECT(32,16), "S3941C4.s3941c4f1");
    test_class_info(&lv, &cd_S3941C4);
    dp->~S3941C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3941C4(Test_S3941C4, "S3941C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3941C4C1Ev();
extern void _ZN7S3941C4D1Ev();
Name_Map name_map_S3941C4[] = {
  NSPAIR(_ZN7S3941C4C1Ev),
  NSPAIR(_ZN7S3941C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3941C4[];
extern void _ZN7S3941C4D1Ev();
extern void _ZN7S3941C4D0Ev();
static  VTBL_ENTRY vtc_S3941C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3941C4[0]),
  (VTBL_ENTRY)&_ZN7S3941C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3941C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S3941C4[];
extern  VTBL_ENTRY _ZTV7S3941C4[];
Class_Descriptor cd_S3941C4 = {  "S3941C4", // class name
  0,0,//no base classes
  &(vtc_S3941C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3941C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3941C4),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  S3941C1  : S3941C2 {
  ::S3941C4 s3941c1f0;
  virtual  ~S3941C1(); // _ZN7S3941C1D1Ev
  S3941C1(); // tgen
};
//SIG(1 S3941C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m Fp[3] Fc}}


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

static void Test_S3941C1()
{
  extern Class_Descriptor cd_S3941C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S3941C1, buf);
    S3941C1 *dp, &lv = *(dp=new (buf) S3941C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S3941C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3941C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3941C2*), 0, "S3941C1");
    check_base_class_offset(lv, (S3941C2*), 0, "S3941C1");
    check_field_offset(lv, s3941c1f0, ABISELECT(24,16), "S3941C1.s3941c1f0");
    test_class_info(&lv, &cd_S3941C1);
    dp->~S3941C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3941C1(Test_S3941C1, "S3941C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S3941C1C1Ev();
extern void _ZN7S3941C1D1Ev();
Name_Map name_map_S3941C1[] = {
  NSPAIR(_ZN7S3941C1C1Ev),
  NSPAIR(_ZN7S3941C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3941C2;
extern VTBL_ENTRY _ZTI7S3941C2[];
extern  VTBL_ENTRY _ZTV7S3941C2[];
static Base_Class bases_S3941C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3941C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3941C1[];
extern void _ZN7S3941C1D1Ev();
extern void _ZN7S3941C1D0Ev();
static  VTBL_ENTRY vtc_S3941C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3941C1[0]),
  (VTBL_ENTRY)&_ZN7S3941C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3941C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3941C1[];
extern  VTBL_ENTRY _ZTV7S3941C1[];
Class_Descriptor cd_S3941C1 = {  "S3941C1", // class name
  bases_S3941C1, 2,
  &(vtc_S3941C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S3941C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3941C1),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  S3937C2  : S1766C4_nt {
  int s3937c2f0;
  virtual  ~S3937C2(); // _ZN7S3937C2D1Ev
  S3937C2(); // tgen
};
//SIG(-1 S3937C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3937C2()
{
  extern Class_Descriptor cd_S3937C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3937C2, buf);
    S3937C2 *dp, &lv = *(dp=new (buf) S3937C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3937C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3937C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3937C2");
    check_field_offset(lv, s3937c2f0, ABISELECT(16,12), "S3937C2.s3937c2f0");
    test_class_info(&lv, &cd_S3937C2);
    dp->~S3937C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3937C2(Test_S3937C2, "S3937C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3937C2C1Ev();
extern void _ZN7S3937C2D1Ev();
Name_Map name_map_S3937C2[] = {
  NSPAIR(_ZN7S3937C2C1Ev),
  NSPAIR(_ZN7S3937C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3937C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3937C2[];
extern void _ZN7S3937C2D1Ev();
extern void _ZN7S3937C2D0Ev();
static  VTBL_ENTRY vtc_S3937C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3937C2[0]),
  (VTBL_ENTRY)&_ZN7S3937C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3937C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3937C2[];
extern  VTBL_ENTRY _ZTV7S3937C2[];
Class_Descriptor cd_S3937C2 = {  "S3937C2", // class name
  bases_S3937C2, 1,
  &(vtc_S3937C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3937C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3937C2),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  S3937C4_nt  {
  int s3937c4f0[2];
  void *s3937c4f1;
  void  mf3937c4(); // _ZN10S3937C4_nt8mf3937c4Ev
  virtual  ~S3937C4_nt(); // _ZN10S3937C4_ntD1Ev
  S3937C4_nt(); // tgen
};
//SIG(-1 S3937C4_nt) C1{ vd m Fi[2] Fp}


void  S3937C4_nt ::mf3937c4(){}
 S3937C4_nt ::~S3937C4_nt(){ note_dtor("S3937C4_nt", this);}
S3937C4_nt ::S3937C4_nt(){ note_ctor("S3937C4_nt", this);} // tgen

//skip512 S3937C4_nt

#else // __cplusplus

extern void _ZN10S3937C4_ntC1Ev();
extern void _ZN10S3937C4_ntD1Ev();
Name_Map name_map_S3937C4_nt[] = {
  NSPAIR(_ZN10S3937C4_ntC1Ev),
  NSPAIR(_ZN10S3937C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3937C4_nt[];
extern void _ZN10S3937C4_ntD1Ev();
extern void _ZN10S3937C4_ntD0Ev();
static  VTBL_ENTRY vtc_S3937C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3937C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S3937C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3937C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3937C4_nt[];
VTBL_ENTRY *P__ZTI10S3937C4_nt = _ZTI10S3937C4_nt; 
extern  VTBL_ENTRY _ZTV10S3937C4_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3937C1  : S3937C2 {
  ::S3937C4_nt s3937c1f0;
  virtual  ~S3937C1(); // _ZN7S3937C1D1Ev
  S3937C1(); // tgen
};
//SIG(1 S3937C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m Fi[2] Fp}}


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

static void Test_S3937C1()
{
  extern Class_Descriptor cd_S3937C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S3937C1, buf);
    S3937C1 *dp, &lv = *(dp=new (buf) S3937C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S3937C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3937C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3937C2*), 0, "S3937C1");
    check_base_class_offset(lv, (S3937C2*), 0, "S3937C1");
    check_field_offset(lv, s3937c1f0, ABISELECT(24,16), "S3937C1.s3937c1f0");
    test_class_info(&lv, &cd_S3937C1);
    dp->~S3937C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3937C1(Test_S3937C1, "S3937C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S3937C1C1Ev();
extern void _ZN7S3937C1D1Ev();
Name_Map name_map_S3937C1[] = {
  NSPAIR(_ZN7S3937C1C1Ev),
  NSPAIR(_ZN7S3937C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3937C2;
extern VTBL_ENTRY _ZTI7S3937C2[];
extern  VTBL_ENTRY _ZTV7S3937C2[];
static Base_Class bases_S3937C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3937C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3937C1[];
extern void _ZN7S3937C1D1Ev();
extern void _ZN7S3937C1D0Ev();
static  VTBL_ENTRY vtc_S3937C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3937C1[0]),
  (VTBL_ENTRY)&_ZN7S3937C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3937C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3937C1[];
extern  VTBL_ENTRY _ZTV7S3937C1[];
Class_Descriptor cd_S3937C1 = {  "S3937C1", // class name
  bases_S3937C1, 2,
  &(vtc_S3937C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S3937C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3937C1),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  S3942C2  : S1766C4_nt {
  int s3942c2f0;
  virtual  ~S3942C2(); // _ZN7S3942C2D1Ev
  S3942C2(); // tgen
};
//SIG(-1 S3942C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3942C2()
{
  extern Class_Descriptor cd_S3942C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3942C2, buf);
    S3942C2 *dp, &lv = *(dp=new (buf) S3942C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3942C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3942C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3942C2");
    check_field_offset(lv, s3942c2f0, ABISELECT(16,12), "S3942C2.s3942c2f0");
    test_class_info(&lv, &cd_S3942C2);
    dp->~S3942C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3942C2(Test_S3942C2, "S3942C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3942C2C1Ev();
extern void _ZN7S3942C2D1Ev();
Name_Map name_map_S3942C2[] = {
  NSPAIR(_ZN7S3942C2C1Ev),
  NSPAIR(_ZN7S3942C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3942C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3942C2[];
extern void _ZN7S3942C2D1Ev();
extern void _ZN7S3942C2D0Ev();
static  VTBL_ENTRY vtc_S3942C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3942C2[0]),
  (VTBL_ENTRY)&_ZN7S3942C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3942C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3942C2[];
extern  VTBL_ENTRY _ZTV7S3942C2[];
Class_Descriptor cd_S3942C2 = {  "S3942C2", // class name
  bases_S3942C2, 1,
  &(vtc_S3942C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3942C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3942C2),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  S3942C1  : S3942C2 {
  ::S8455C6_nt s3942c1f0;
  virtual  ~S3942C1(); // _ZN7S3942C1D1Ev
  S3942C1(); // tgen
};
//SIG(1 S3942C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m Fp[3]}}


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

static void Test_S3942C1()
{
  extern Class_Descriptor cd_S3942C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S3942C1, buf);
    S3942C1 *dp, &lv = *(dp=new (buf) S3942C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S3942C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3942C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3942C2*), 0, "S3942C1");
    check_base_class_offset(lv, (S3942C2*), 0, "S3942C1");
    check_field_offset(lv, s3942c1f0, ABISELECT(24,16), "S3942C1.s3942c1f0");
    test_class_info(&lv, &cd_S3942C1);
    dp->~S3942C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3942C1(Test_S3942C1, "S3942C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S3942C1C1Ev();
extern void _ZN7S3942C1D1Ev();
Name_Map name_map_S3942C1[] = {
  NSPAIR(_ZN7S3942C1C1Ev),
  NSPAIR(_ZN7S3942C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3942C2;
extern VTBL_ENTRY _ZTI7S3942C2[];
extern  VTBL_ENTRY _ZTV7S3942C2[];
static Base_Class bases_S3942C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3942C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3942C1[];
extern void _ZN7S3942C1D1Ev();
extern void _ZN7S3942C1D0Ev();
static  VTBL_ENTRY vtc_S3942C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3942C1[0]),
  (VTBL_ENTRY)&_ZN7S3942C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3942C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3942C1[];
extern  VTBL_ENTRY _ZTV7S3942C1[];
Class_Descriptor cd_S3942C1 = {  "S3942C1", // class name
  bases_S3942C1, 2,
  &(vtc_S3942C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S3942C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3942C1),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  S3938C2  : S1766C4_nt {
  int s3938c2f0;
  virtual  ~S3938C2(); // _ZN7S3938C2D1Ev
  S3938C2(); // tgen
};
//SIG(-1 S3938C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3938C2()
{
  extern Class_Descriptor cd_S3938C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3938C2, buf);
    S3938C2 *dp, &lv = *(dp=new (buf) S3938C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3938C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3938C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3938C2");
    check_field_offset(lv, s3938c2f0, ABISELECT(16,12), "S3938C2.s3938c2f0");
    test_class_info(&lv, &cd_S3938C2);
    dp->~S3938C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3938C2(Test_S3938C2, "S3938C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3938C2C1Ev();
extern void _ZN7S3938C2D1Ev();
Name_Map name_map_S3938C2[] = {
  NSPAIR(_ZN7S3938C2C1Ev),
  NSPAIR(_ZN7S3938C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3938C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3938C2[];
extern void _ZN7S3938C2D1Ev();
extern void _ZN7S3938C2D0Ev();
static  VTBL_ENTRY vtc_S3938C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3938C2[0]),
  (VTBL_ENTRY)&_ZN7S3938C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3938C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3938C2[];
extern  VTBL_ENTRY _ZTV7S3938C2[];
Class_Descriptor cd_S3938C2 = {  "S3938C2", // class name
  bases_S3938C2, 1,
  &(vtc_S3938C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3938C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3938C2),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  S3938C4_nt  {
  int s3938c4f0[2];
  void  mf3938c4(); // _ZN10S3938C4_nt8mf3938c4Ev
  virtual  ~S3938C4_nt(); // _ZN10S3938C4_ntD1Ev
  S3938C4_nt(); // tgen
};
//SIG(-1 S3938C4_nt) C1{ vd m Fi[2]}


void  S3938C4_nt ::mf3938c4(){}
 S3938C4_nt ::~S3938C4_nt(){ note_dtor("S3938C4_nt", this);}
S3938C4_nt ::S3938C4_nt(){ note_ctor("S3938C4_nt", this);} // tgen

//skip512 S3938C4_nt

#else // __cplusplus

extern void _ZN10S3938C4_ntC1Ev();
extern void _ZN10S3938C4_ntD1Ev();
Name_Map name_map_S3938C4_nt[] = {
  NSPAIR(_ZN10S3938C4_ntC1Ev),
  NSPAIR(_ZN10S3938C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3938C4_nt[];
extern void _ZN10S3938C4_ntD1Ev();
extern void _ZN10S3938C4_ntD0Ev();
static  VTBL_ENTRY vtc_S3938C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3938C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S3938C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3938C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3938C4_nt[];
VTBL_ENTRY *P__ZTI10S3938C4_nt = _ZTI10S3938C4_nt; 
extern  VTBL_ENTRY _ZTV10S3938C4_nt[];
Class_Descriptor cd_S3938C4_nt = {  "S3938C4_nt", // class name
  0,0,//no base classes
  &(vtc_S3938C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S3938C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3938C4_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  S3938C1  : S3938C2 {
  ::S3938C4_nt s3938c1f0;
  virtual  ~S3938C1(); // _ZN7S3938C1D1Ev
  S3938C1(); // tgen
};
//SIG(1 S3938C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m Fi[2]}}


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

static void Test_S3938C1()
{
  extern Class_Descriptor cd_S3938C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S3938C1, buf);
    S3938C1 *dp, &lv = *(dp=new (buf) S3938C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S3938C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3938C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3938C2*), 0, "S3938C1");
    check_base_class_offset(lv, (S3938C2*), 0, "S3938C1");
    check_field_offset(lv, s3938c1f0, ABISELECT(24,16), "S3938C1.s3938c1f0");
    test_class_info(&lv, &cd_S3938C1);
    dp->~S3938C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3938C1(Test_S3938C1, "S3938C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S3938C1C1Ev();
extern void _ZN7S3938C1D1Ev();
Name_Map name_map_S3938C1[] = {
  NSPAIR(_ZN7S3938C1C1Ev),
  NSPAIR(_ZN7S3938C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3938C2;
extern VTBL_ENTRY _ZTI7S3938C2[];
extern  VTBL_ENTRY _ZTV7S3938C2[];
static Base_Class bases_S3938C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3938C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3938C1[];
extern void _ZN7S3938C1D1Ev();
extern void _ZN7S3938C1D0Ev();
static  VTBL_ENTRY vtc_S3938C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3938C1[0]),
  (VTBL_ENTRY)&_ZN7S3938C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3938C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3938C1[];
extern  VTBL_ENTRY _ZTV7S3938C1[];
Class_Descriptor cd_S3938C1 = {  "S3938C1", // class name
  bases_S3938C1, 2,
  &(vtc_S3938C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S3938C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3938C1),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  S3932C2  : S1766C4_nt {
  int s3932c2f0;
  virtual  ~S3932C2(); // _ZN7S3932C2D1Ev
  S3932C2(); // tgen
};
//SIG(-1 S3932C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3932C2()
{
  extern Class_Descriptor cd_S3932C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3932C2, buf);
    S3932C2 *dp, &lv = *(dp=new (buf) S3932C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3932C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3932C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3932C2");
    check_field_offset(lv, s3932c2f0, ABISELECT(16,12), "S3932C2.s3932c2f0");
    test_class_info(&lv, &cd_S3932C2);
    dp->~S3932C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3932C2(Test_S3932C2, "S3932C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3932C2C1Ev();
extern void _ZN7S3932C2D1Ev();
Name_Map name_map_S3932C2[] = {
  NSPAIR(_ZN7S3932C2C1Ev),
  NSPAIR(_ZN7S3932C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3932C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3932C2[];
extern void _ZN7S3932C2D1Ev();
extern void _ZN7S3932C2D0Ev();
static  VTBL_ENTRY vtc_S3932C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3932C2[0]),
  (VTBL_ENTRY)&_ZN7S3932C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3932C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3932C2[];
extern  VTBL_ENTRY _ZTV7S3932C2[];
Class_Descriptor cd_S3932C2 = {  "S3932C2", // class name
  bases_S3932C2, 1,
  &(vtc_S3932C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3932C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3932C2),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  S3932C4_nt  {
  char s3932c4f0;
  int s3932c4f1;
  void  mf3932c4(); // _ZN10S3932C4_nt8mf3932c4Ev
  virtual  ~S3932C4_nt(); // _ZN10S3932C4_ntD1Ev
  S3932C4_nt(); // tgen
};
//SIG(-1 S3932C4_nt) C1{ vd m Fc Fi}


void  S3932C4_nt ::mf3932c4(){}
 S3932C4_nt ::~S3932C4_nt(){ note_dtor("S3932C4_nt", this);}
S3932C4_nt ::S3932C4_nt(){ note_ctor("S3932C4_nt", this);} // tgen

//skip512 S3932C4_nt

#else // __cplusplus

extern void _ZN10S3932C4_ntC1Ev();
extern void _ZN10S3932C4_ntD1Ev();
Name_Map name_map_S3932C4_nt[] = {
  NSPAIR(_ZN10S3932C4_ntC1Ev),
  NSPAIR(_ZN10S3932C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3932C4_nt[];
extern void _ZN10S3932C4_ntD1Ev();
extern void _ZN10S3932C4_ntD0Ev();
static  VTBL_ENTRY vtc_S3932C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3932C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S3932C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3932C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3932C4_nt[];
VTBL_ENTRY *P__ZTI10S3932C4_nt = _ZTI10S3932C4_nt; 
extern  VTBL_ENTRY _ZTV10S3932C4_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3932C1  : S3932C2 {
  ::S3932C4_nt s3932c1f0;
  virtual  ~S3932C1(); // _ZN7S3932C1D1Ev
  S3932C1(); // tgen
};
//SIG(1 S3932C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m Fc Fi}}


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

static void Test_S3932C1()
{
  extern Class_Descriptor cd_S3932C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S3932C1, buf);
    S3932C1 *dp, &lv = *(dp=new (buf) S3932C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S3932C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3932C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3932C2*), 0, "S3932C1");
    check_base_class_offset(lv, (S3932C2*), 0, "S3932C1");
    check_field_offset(lv, s3932c1f0, ABISELECT(24,16), "S3932C1.s3932c1f0");
    test_class_info(&lv, &cd_S3932C1);
    dp->~S3932C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3932C1(Test_S3932C1, "S3932C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S3932C1C1Ev();
extern void _ZN7S3932C1D1Ev();
Name_Map name_map_S3932C1[] = {
  NSPAIR(_ZN7S3932C1C1Ev),
  NSPAIR(_ZN7S3932C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3932C2;
extern VTBL_ENTRY _ZTI7S3932C2[];
extern  VTBL_ENTRY _ZTV7S3932C2[];
static Base_Class bases_S3932C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3932C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3932C1[];
extern void _ZN7S3932C1D1Ev();
extern void _ZN7S3932C1D0Ev();
static  VTBL_ENTRY vtc_S3932C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3932C1[0]),
  (VTBL_ENTRY)&_ZN7S3932C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3932C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3932C1[];
extern  VTBL_ENTRY _ZTV7S3932C1[];
Class_Descriptor cd_S3932C1 = {  "S3932C1", // class name
  bases_S3932C1, 2,
  &(vtc_S3932C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S3932C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3932C1),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  S17563C1  {
  void *s17563c1f0;
  ::S615C12_nt s17563c1f1;
  void  mf17563c1(); // _ZN8S17563C19mf17563c1Ev
};
//SIG(1 S17563C1) C1{ m Fp FC2{ m FC3{ m Fi[4]} FC4{ m Fi[3]} Fi}}


void  S17563C1 ::mf17563c1(){}

static void Test_S17563C1()
{
  {
    init_simple_test("S17563C1");
    S17563C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S17563C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17563C1)");
    check_field_offset(lv, s17563c1f0, 0, "S17563C1.s17563c1f0");
    check_field_offset(lv, s17563c1f1, ABISELECT(8,4), "S17563C1.s17563c1f1");
  }
}
static Arrange_To_Call_Me vS17563C1(Test_S17563C1, "S17563C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8165C1  : S1766C4_nt {
  ::S3961C7_nt s8165c1f0;
  virtual  ~S8165C1(); // _ZN7S8165C1D1Ev
  S8165C1(); // tgen
};
//SIG(1 S8165C1) C1{ BC2{ vd m FL} vd FC3{ BC2 vd Fp Fi[4] Fp}}


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

static void Test_S8165C1()
{
  extern Class_Descriptor cd_S8165C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S8165C1, buf);
    S8165C1 *dp, &lv = *(dp=new (buf) S8165C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S8165C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8165C1)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S8165C1");
    check_field_offset(lv, s8165c1f0, ABISELECT(16,12), "S8165C1.s8165c1f0");
    test_class_info(&lv, &cd_S8165C1);
    dp->~S8165C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8165C1(Test_S8165C1, "S8165C1", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S8165C1C1Ev();
extern void _ZN7S8165C1D1Ev();
Name_Map name_map_S8165C1[] = {
  NSPAIR(_ZN7S8165C1C1Ev),
  NSPAIR(_ZN7S8165C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S8165C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S8165C1[];
extern void _ZN7S8165C1D1Ev();
extern void _ZN7S8165C1D0Ev();
static  VTBL_ENTRY vtc_S8165C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8165C1[0]),
  (VTBL_ENTRY)&_ZN7S8165C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8165C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8165C1[];
extern  VTBL_ENTRY _ZTV7S8165C1[];
Class_Descriptor cd_S8165C1 = {  "S8165C1", // class name
  bases_S8165C1, 1,
  &(vtc_S8165C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S8165C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8165C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3939C2  : S1766C4_nt {
  int s3939c2f0;
  virtual  ~S3939C2(); // _ZN7S3939C2D1Ev
  S3939C2(); // tgen
};
//SIG(-1 S3939C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3939C2()
{
  extern Class_Descriptor cd_S3939C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3939C2, buf);
    S3939C2 *dp, &lv = *(dp=new (buf) S3939C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3939C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3939C2)");
    check_base_class_offset(lv, (S1766C4_nt*), 0, "S3939C2");
    check_field_offset(lv, s3939c2f0, ABISELECT(16,12), "S3939C2.s3939c2f0");
    test_class_info(&lv, &cd_S3939C2);
    dp->~S3939C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3939C2(Test_S3939C2, "S3939C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3939C2C1Ev();
extern void _ZN7S3939C2D1Ev();
Name_Map name_map_S3939C2[] = {
  NSPAIR(_ZN7S3939C2C1Ev),
  NSPAIR(_ZN7S3939C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
static Base_Class bases_S3939C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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 _ZTI7S3939C2[];
extern void _ZN7S3939C2D1Ev();
extern void _ZN7S3939C2D0Ev();
static  VTBL_ENTRY vtc_S3939C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3939C2[0]),
  (VTBL_ENTRY)&_ZN7S3939C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3939C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3939C2[];
extern  VTBL_ENTRY _ZTV7S3939C2[];
Class_Descriptor cd_S3939C2 = {  "S3939C2", // class name
  bases_S3939C2, 1,
  &(vtc_S3939C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3939C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3939C2),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  S3939C4_nt  {
  __tsi64 s3939c4f0;
  void  mf3939c4(); // _ZN10S3939C4_nt8mf3939c4Ev
  virtual  ~S3939C4_nt(); // _ZN10S3939C4_ntD1Ev
  S3939C4_nt(); // tgen
};
//SIG(-1 S3939C4_nt) C1{ vd m FL}


void  S3939C4_nt ::mf3939c4(){}
 S3939C4_nt ::~S3939C4_nt(){ note_dtor("S3939C4_nt", this);}
S3939C4_nt ::S3939C4_nt(){ note_ctor("S3939C4_nt", this);} // tgen

//skip512 S3939C4_nt

#else // __cplusplus

extern void _ZN10S3939C4_ntC1Ev();
extern void _ZN10S3939C4_ntD1Ev();
Name_Map name_map_S3939C4_nt[] = {
  NSPAIR(_ZN10S3939C4_ntC1Ev),
  NSPAIR(_ZN10S3939C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3939C4_nt[];
extern void _ZN10S3939C4_ntD1Ev();
extern void _ZN10S3939C4_ntD0Ev();
static  VTBL_ENTRY vtc_S3939C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3939C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S3939C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3939C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3939C4_nt[];
VTBL_ENTRY *P__ZTI10S3939C4_nt = _ZTI10S3939C4_nt; 
extern  VTBL_ENTRY _ZTV10S3939C4_nt[];
Class_Descriptor cd_S3939C4_nt = {  "S3939C4_nt", // class name
  0,0,//no base classes
  &(vtc_S3939C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S3939C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3939C4_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  S3939C1  : S3939C2 {
  ::S3939C4_nt s3939c1f0;
  virtual  ~S3939C1(); // _ZN7S3939C1D1Ev
  S3939C1(); // tgen
};
//SIG(1 S3939C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m FL}}


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

static void Test_S3939C1()
{
  extern Class_Descriptor cd_S3939C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S3939C1, buf);
    S3939C1 *dp, &lv = *(dp=new (buf) S3939C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S3939C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3939C1)");
    check_base_class_offset(lv, (S1766C4_nt*)(S3939C2*), 0, "S3939C1");
    check_base_class_offset(lv, (S3939C2*), 0, "S3939C1");
    check_field_offset(lv, s3939c1f0, ABISELECT(24,16), "S3939C1.s3939c1f0");
    test_class_info(&lv, &cd_S3939C1);
    dp->~S3939C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3939C1(Test_S3939C1, "S3939C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S3939C1C1Ev();
extern void _ZN7S3939C1D1Ev();
Name_Map name_map_S3939C1[] = {
  NSPAIR(_ZN7S3939C1C1Ev),
  NSPAIR(_ZN7S3939C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1766C4_nt;
extern VTBL_ENTRY _ZTI10S1766C4_nt[];
extern  VTBL_ENTRY _ZTV10S1766C4_nt[];
extern Class_Descriptor cd_S3939C2;
extern VTBL_ENTRY _ZTI7S3939C2[];
extern  VTBL_ENTRY _ZTV7S3939C2[];
static Base_Class bases_S3939C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1766C4_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_S3939C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3939C1[];
extern void _ZN7S3939C1D1Ev();
extern void _ZN7S3939C1D0Ev();
static  VTBL_ENTRY vtc_S3939C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3939C1[0]),
  (VTBL_ENTRY)&_ZN7S3939C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3939C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3939C1[];
extern  VTBL_ENTRY _ZTV7S3939C1[];
Class_Descriptor cd_S3939C1 = {  "S3939C1", // class name
  bases_S3939C1, 2,
  &(vtc_S3939C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S3939C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3939C1),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  S5197C3  {
  virtual  ~S5197C3(); // _ZN7S5197C3D1Ev
  virtual void  v4(); // _ZN7S5197C32v4Ev
  virtual void  v5(); // _ZN7S5197C32v5Ev
  S5197C3(); // tgen
};
//SIG(-1 S5197C3) C1{ vd v1 v2}


 S5197C3 ::~S5197C3(){ note_dtor("S5197C3", this);}
void  S5197C3 ::v4(){vfunc_called(this, "_ZN7S5197C32v4Ev");}
void  S5197C3 ::v5(){vfunc_called(this, "_ZN7S5197C32v5Ev");}
S5197C3 ::S5197C3(){ note_ctor("S5197C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5197C3C1Ev();
extern void _ZN7S5197C3D1Ev();
Name_Map name_map_S5197C3[] = {
  NSPAIR(_ZN7S5197C3C1Ev),
  NSPAIR(_ZN7S5197C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5197C3[];
extern void _ZN7S5197C3D1Ev();
extern void _ZN7S5197C3D0Ev();
extern void _ZN7S5197C32v4Ev();
extern void _ZN7S5197C32v5Ev();
static  VTBL_ENTRY vtc_S5197C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5197C3[0]),
  (VTBL_ENTRY)&_ZN7S5197C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5197C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5197C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5197C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S5197C3[];
extern  VTBL_ENTRY _ZTV7S5197C3[];
Class_Descriptor cd_S5197C3 = {  "S5197C3", // class name
  0,0,//no base classes
  &(vtc_S5197C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5197C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5197C3),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  S5197C2  : S5197C3 {
  virtual  ~S5197C2(); // _ZN7S5197C2D1Ev
  virtual void  v6(); // _ZN7S5197C22v6Ev
  S5197C2(); // tgen
};
//SIG(-1 S5197C2) C1{ BC2{ vd v2 v3} vd v1}


 S5197C2 ::~S5197C2(){ note_dtor("S5197C2", this);}
void  S5197C2 ::v6(){vfunc_called(this, "_ZN7S5197C22v6Ev");}
S5197C2 ::S5197C2(){ note_ctor("S5197C2", this);} // tgen

static void Test_S5197C2()
{
  extern Class_Descriptor cd_S5197C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5197C2, buf);
    S5197C2 *dp, &lv = *(dp=new (buf) S5197C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5197C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5197C2)");
    check_base_class_offset(lv, (S5197C3*), 0, "S5197C2");
    test_class_info(&lv, &cd_S5197C2);
    dp->~S5197C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5197C2(Test_S5197C2, "S5197C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5197C2C1Ev();
extern void _ZN7S5197C2D1Ev();
Name_Map name_map_S5197C2[] = {
  NSPAIR(_ZN7S5197C2C1Ev),
  NSPAIR(_ZN7S5197C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5197C3;
extern VTBL_ENTRY _ZTI7S5197C3[];
extern  VTBL_ENTRY _ZTV7S5197C3[];
static Base_Class bases_S5197C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5197C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5197C2[];
extern void _ZN7S5197C2D1Ev();
extern void _ZN7S5197C2D0Ev();
extern void _ZN7S5197C32v4Ev();
extern void _ZN7S5197C32v5Ev();
extern void _ZN7S5197C22v6Ev();
static  VTBL_ENTRY vtc_S5197C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5197C2[0]),
  (VTBL_ENTRY)&_ZN7S5197C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5197C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5197C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5197C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5197C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S5197C2[];
extern  VTBL_ENTRY _ZTV7S5197C2[];
Class_Descriptor cd_S5197C2 = {  "S5197C2", // class name
  bases_S5197C2, 1,
  &(vtc_S5197C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5197C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5197C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5197C1  : S5197C2 {
  int s5197c1f0;
  virtual  ~S5197C1(); // _ZN7S5197C1D1Ev
  virtual void  v1(); // _ZN7S5197C12v1Ev
  virtual void  v2(); // _ZN7S5197C12v2Ev
  virtual void  v3(); // _ZN7S5197C12v3Ev
  S5197C1(); // tgen
};
//SIG(1 S5197C1) C1{ BC2{ BC3{ vd v4 v5} vd v6} vd v1 v2 v3 Fi}


 S5197C1 ::~S5197C1(){ note_dtor("S5197C1", this);}
void  S5197C1 ::v1(){vfunc_called(this, "_ZN7S5197C12v1Ev");}
void  S5197C1 ::v2(){vfunc_called(this, "_ZN7S5197C12v2Ev");}
void  S5197C1 ::v3(){vfunc_called(this, "_ZN7S5197C12v3Ev");}
S5197C1 ::S5197C1(){ note_ctor("S5197C1", this);} // tgen

static void Test_S5197C1()
{
  extern Class_Descriptor cd_S5197C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S5197C1, buf);
    S5197C1 *dp, &lv = *(dp=new (buf) S5197C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S5197C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5197C1)");
    check_base_class_offset(lv, (S5197C3*)(S5197C2*), 0, "S5197C1");
    check_base_class_offset(lv, (S5197C2*), 0, "S5197C1");
    check_field_offset(lv, s5197c1f0, ABISELECT(8,4), "S5197C1.s5197c1f0");
    test_class_info(&lv, &cd_S5197C1);
    dp->~S5197C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5197C1(Test_S5197C1, "S5197C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S5197C1C1Ev();
extern void _ZN7S5197C1D1Ev();
Name_Map name_map_S5197C1[] = {
  NSPAIR(_ZN7S5197C1C1Ev),
  NSPAIR(_ZN7S5197C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5197C3;
extern VTBL_ENTRY _ZTI7S5197C3[];
extern  VTBL_ENTRY _ZTV7S5197C3[];
extern Class_Descriptor cd_S5197C2;
extern VTBL_ENTRY _ZTI7S5197C2[];
extern  VTBL_ENTRY _ZTV7S5197C2[];
static Base_Class bases_S5197C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5197C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5197C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5197C1[];
extern void _ZN7S5197C1D1Ev();
extern void _ZN7S5197C1D0Ev();
extern void _ZN7S5197C32v4Ev();
extern void _ZN7S5197C32v5Ev();
extern void _ZN7S5197C22v6Ev();
extern void _ZN7S5197C12v1Ev();
extern void _ZN7S5197C12v2Ev();
extern void _ZN7S5197C12v3Ev();
static  VTBL_ENTRY vtc_S5197C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5197C1[0]),
  (VTBL_ENTRY)&_ZN7S5197C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5197C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5197C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5197C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5197C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5197C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5197C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5197C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5197C1[];
extern  VTBL_ENTRY _ZTV7S5197C1[];
Class_Descriptor cd_S5197C1 = {  "S5197C1", // class name
  bases_S5197C1, 2,
  &(vtc_S5197C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S5197C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5197C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3945C2  : S3939C4_nt {
  int s3945c2f0;
  virtual  ~S3945C2(); // _ZN7S3945C2D1Ev
  S3945C2(); // tgen
};
//SIG(-1 S3945C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3945C2()
{
  extern Class_Descriptor cd_S3945C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3945C2, buf);
    S3945C2 *dp, &lv = *(dp=new (buf) S3945C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3945C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3945C2)");
    check_base_class_offset(lv, (S3939C4_nt*), 0, "S3945C2");
    check_field_offset(lv, s3945c2f0, ABISELECT(16,12), "S3945C2.s3945c2f0");
    test_class_info(&lv, &cd_S3945C2);
    dp->~S3945C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3945C2(Test_S3945C2, "S3945C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3945C2C1Ev();
extern void _ZN7S3945C2D1Ev();
Name_Map name_map_S3945C2[] = {
  NSPAIR(_ZN7S3945C2C1Ev),
  NSPAIR(_ZN7S3945C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3939C4_nt;
extern VTBL_ENTRY _ZTI10S3939C4_nt[];
extern  VTBL_ENTRY _ZTV10S3939C4_nt[];
static Base_Class bases_S3945C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3939C4_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 _ZTI7S3945C2[];
extern void _ZN7S3945C2D1Ev();
extern void _ZN7S3945C2D0Ev();
static  VTBL_ENTRY vtc_S3945C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3945C2[0]),
  (VTBL_ENTRY)&_ZN7S3945C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3945C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3945C2[];
extern  VTBL_ENTRY _ZTV7S3945C2[];
Class_Descriptor cd_S3945C2 = {  "S3945C2", // class name
  bases_S3945C2, 1,
  &(vtc_S3945C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3945C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3945C2),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  S3945C1  : S3945C2 {
  int s3945c1f0[2];
  __tsi64 s3945c1f1[4];
  virtual  ~S3945C1(); // _ZN7S3945C1D1Ev
  S3945C1(); // tgen
};
//SIG(1 S3945C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd Fi[2] FL[4]}


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

static void Test_S3945C1()
{
  extern Class_Descriptor cd_S3945C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,15)];
    init_test(&cd_S3945C1, buf);
    S3945C1 *dp, &lv = *(dp=new (buf) S3945C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S3945C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3945C1)");
    check_base_class_offset(lv, (S3939C4_nt*)(S3945C2*), 0, "S3945C1");
    check_base_class_offset(lv, (S3945C2*), 0, "S3945C1");
    check_field_offset(lv, s3945c1f0, ABISELECT(20,16), "S3945C1.s3945c1f0");
    check_field_offset(lv, s3945c1f1, ABISELECT(32,24), "S3945C1.s3945c1f1");
    test_class_info(&lv, &cd_S3945C1);
    dp->~S3945C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3945C1(Test_S3945C1, "S3945C1", ABISELECT(64,56));

#else // __cplusplus

extern void _ZN7S3945C1C1Ev();
extern void _ZN7S3945C1D1Ev();
Name_Map name_map_S3945C1[] = {
  NSPAIR(_ZN7S3945C1C1Ev),
  NSPAIR(_ZN7S3945C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3939C4_nt;
extern VTBL_ENTRY _ZTI10S3939C4_nt[];
extern  VTBL_ENTRY _ZTV10S3939C4_nt[];
extern Class_Descriptor cd_S3945C2;
extern VTBL_ENTRY _ZTI7S3945C2[];
extern  VTBL_ENTRY _ZTV7S3945C2[];
static Base_Class bases_S3945C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3939C4_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_S3945C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3945C1[];
extern void _ZN7S3945C1D1Ev();
extern void _ZN7S3945C1D0Ev();
static  VTBL_ENTRY vtc_S3945C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3945C1[0]),
  (VTBL_ENTRY)&_ZN7S3945C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3945C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3945C1[];
extern  VTBL_ENTRY _ZTV7S3945C1[];
Class_Descriptor cd_S3945C1 = {  "S3945C1", // class name
  bases_S3945C1, 2,
  &(vtc_S3945C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,56), // object size
  NSPAIRA(_ZTI7S3945C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3945C1),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  S16658C3_nt  {
  void *s16658c3f0;
  int s16658c3f1;
  void  mf16658c3(); // _ZN11S16658C3_nt9mf16658c3Ev
};
//SIG(-1 S16658C3_nt) C1{ m Fp Fi}


void  S16658C3_nt ::mf16658c3(){}

//skip512 S16658C3_nt

#else // __cplusplus

Class_Descriptor cd_S16658C3_nt = {  "S16658C3_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  S16658C4  {
  short s16658c4f0[512];
};
//SIG(-1 S16658C4) C1{ Fs[512]}



static void Test_S16658C4()
{
  {
    init_simple_test("S16658C4");
    S16658C4 lv;
    check2(sizeof(lv), 1024, "sizeof(S16658C4)");
    check2(__alignof__(lv), 2, "__alignof__(S16658C4)");
    check_field_offset(lv, s16658c4f0, 0, "S16658C4.s16658c4f0");
  }
}
static Arrange_To_Call_Me vS16658C4(Test_S16658C4, "S16658C4", 1024);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16658C2  : S16658C3_nt {
  ::S16658C4 s16658c2f0;
};
//SIG(-1 S16658C2) C1{ BC2{ m Fp Fi} FC3{ Fs[512]}}



static void Test_S16658C2()
{
  extern Class_Descriptor cd_S16658C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(131,259)];
    init_test(&cd_S16658C2, buf);
    S16658C2 &lv = *(new (buf) S16658C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1040,1032), "sizeof(S16658C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16658C2)");
    check_base_class_offset(lv, (S16658C3_nt*), 0, "S16658C2");
    check_field_offset(lv, s16658c2f0, ABISELECT(16,8), "S16658C2.s16658c2f0");
    test_class_info(&lv, &cd_S16658C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16658C2(Test_S16658C2, "S16658C2", ABISELECT(1040,1032));

#else // __cplusplus

extern Class_Descriptor cd_S16658C3_nt;
static Base_Class bases_S16658C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16658C3_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_S16658C2 = {  "S16658C2", // class name
  bases_S16658C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(1040,1032), // 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  S16658C1  {
  int s16658c1f0;
  ::S16658C2 s16658c1f1;
  void  mf16658c1(); // _ZN8S16658C19mf16658c1Ev
};
//SIG(1 S16658C1) C1{ m Fi FC2{ BC3{ m Fp Fi} FC4{ Fs[512]}}}


void  S16658C1 ::mf16658c1(){}

static void Test_S16658C1()
{
  {
    init_simple_test("S16658C1");
    S16658C1 lv;
    check2(sizeof(lv), ABISELECT(1048,1036), "sizeof(S16658C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16658C1)");
    check_field_offset(lv, s16658c1f0, 0, "S16658C1.s16658c1f0");
    check_field_offset(lv, s16658c1f1, ABISELECT(8,4), "S16658C1.s16658c1f1");
  }
}
static Arrange_To_Call_Me vS16658C1(Test_S16658C1, "S16658C1", ABISELECT(1048,1036));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21631C1  {
  int s21631c1f0;
  void *s21631c1f1[2];
  int s21631c1f2[2];
  void *s21631c1f3;
  int s21631c1f4;
  void *s21631c1f5[2];
  int s21631c1f6;
  void  mf21631c1(); // _ZN8S21631C19mf21631c1Ev
  virtual  ~S21631C1(); // _ZN8S21631C1D1Ev
  S21631C1(); // tgen
};
//SIG(1 S21631C1) C1{ vd m Fi Fp[2] Fi[2] Fp Fi Fp[2] Fi}


void  S21631C1 ::mf21631c1(){}
 S21631C1 ::~S21631C1(){ note_dtor("S21631C1", this);}
S21631C1 ::S21631C1(){ note_ctor("S21631C1", this);} // tgen

static void Test_S21631C1()
{
  extern Class_Descriptor cd_S21631C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S21631C1, buf);
    S21631C1 *dp, &lv = *(dp=new (buf) S21631C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S21631C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21631C1)");
    check_field_offset(lv, s21631c1f0, ABISELECT(8,4), "S21631C1.s21631c1f0");
    check_field_offset(lv, s21631c1f1, ABISELECT(16,8), "S21631C1.s21631c1f1");
    check_field_offset(lv, s21631c1f2, ABISELECT(32,16), "S21631C1.s21631c1f2");
    check_field_offset(lv, s21631c1f3, ABISELECT(40,24), "S21631C1.s21631c1f3");
    check_field_offset(lv, s21631c1f4, ABISELECT(48,28), "S21631C1.s21631c1f4");
    check_field_offset(lv, s21631c1f5, ABISELECT(56,32), "S21631C1.s21631c1f5");
    check_field_offset(lv, s21631c1f6, ABISELECT(72,40), "S21631C1.s21631c1f6");
    test_class_info(&lv, &cd_S21631C1);
    dp->~S21631C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21631C1(Test_S21631C1, "S21631C1", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S21631C1C1Ev();
extern void _ZN8S21631C1D1Ev();
Name_Map name_map_S21631C1[] = {
  NSPAIR(_ZN8S21631C1C1Ev),
  NSPAIR(_ZN8S21631C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21631C1[];
extern void _ZN8S21631C1D1Ev();
extern void _ZN8S21631C1D0Ev();
static  VTBL_ENTRY vtc_S21631C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21631C1[0]),
  (VTBL_ENTRY)&_ZN8S21631C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21631C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21631C1[];
extern  VTBL_ENTRY _ZTV8S21631C1[];
Class_Descriptor cd_S21631C1 = {  "S21631C1", // class name
  0,0,//no base classes
  &(vtc_S21631C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S21631C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21631C1),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  S16836C2  {
  long double s16836c2f0[2];
  int s16836c2f1[9];
  void *s16836c2f2;
  virtual void  v1(); // _ZN8S16836C22v1Ev
  ~S16836C2(); // tgen
  S16836C2(); // tgen
};
//SIG(-1 S16836C2) C1{ v1 FD[2] Fi[9] Fp}


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

static void Test_S16836C2()
{
  extern Class_Descriptor cd_S16836C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,18)];
    init_test(&cd_S16836C2, buf);
    S16836C2 *dp, &lv = *(dp=new (buf) S16836C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S16836C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16836C2)");
    check_field_offset(lv, s16836c2f0, ABISELECT(16,4), "S16836C2.s16836c2f0");
    check_field_offset(lv, s16836c2f1, ABISELECT(48,28), "S16836C2.s16836c2f1");
    check_field_offset(lv, s16836c2f2, ABISELECT(88,64), "S16836C2.s16836c2f2");
    test_class_info(&lv, &cd_S16836C2);
    dp->~S16836C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16836C2(Test_S16836C2, "S16836C2", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN8S16836C2C1Ev();
extern void _ZN8S16836C2D1Ev();
Name_Map name_map_S16836C2[] = {
  NSPAIR(_ZN8S16836C2C1Ev),
  NSPAIR(_ZN8S16836C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S16836C2[];
extern void _ZN8S16836C22v1Ev();
static  VTBL_ENTRY vtc_S16836C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S16836C2[0]),
  (VTBL_ENTRY)&_ZN8S16836C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S16836C2[];
extern  VTBL_ENTRY _ZTV8S16836C2[];
Class_Descriptor cd_S16836C2 = {  "S16836C2", // class name
  0,0,//no base classes
  &(vtc_S16836C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI8S16836C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S16836C2),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  S16836C1  {
  int s16836c1f0;
  ::S16836C2 s16836c1f1;
  ::S16836C2 s16836c1f2;
  short s16836c1f3;
  void  mf16836c1(); // _ZN8S16836C19mf16836c1Ev
};
//SIG(1 S16836C1) C1{ m Fi FC2{ v1 FD[2] Fi[9] Fp} FC2 Fs}


void  S16836C1 ::mf16836c1(){}

static void Test_S16836C1()
{
  {
    init_simple_test("S16836C1");
    S16836C1 lv;
    check2(sizeof(lv), ABISELECT(224,144), "sizeof(S16836C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16836C1)");
    check_field_offset(lv, s16836c1f0, 0, "S16836C1.s16836c1f0");
    check_field_offset(lv, s16836c1f1, ABISELECT(16,4), "S16836C1.s16836c1f1");
    check_field_offset(lv, s16836c1f2, ABISELECT(112,72), "S16836C1.s16836c1f2");
    check_field_offset(lv, s16836c1f3, ABISELECT(208,140), "S16836C1.s16836c1f3");
  }
}
static Arrange_To_Call_Me vS16836C1(Test_S16836C1, "S16836C1", ABISELECT(224,144));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8050C1  : S3938C4_nt {
  short s8050c1f0[2];
  char s8050c1f1[2];
  int s8050c1f2;
  virtual  ~S8050C1(); // _ZN7S8050C1D1Ev
  S8050C1(); // tgen
};
//SIG(1 S8050C1) C1{ BC2{ vd m Fi[2]} vd Fs[2] Fc[2] Fi}


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

static void Test_S8050C1()
{
  extern Class_Descriptor cd_S8050C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S8050C1, buf);
    S8050C1 *dp, &lv = *(dp=new (buf) S8050C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S8050C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8050C1)");
    check_base_class_offset(lv, (S3938C4_nt*), 0, "S8050C1");
    check_field_offset(lv, s8050c1f0, ABISELECT(16,12), "S8050C1.s8050c1f0");
    check_field_offset(lv, s8050c1f1, ABISELECT(20,16), "S8050C1.s8050c1f1");
    check_field_offset(lv, s8050c1f2, ABISELECT(24,20), "S8050C1.s8050c1f2");
    test_class_info(&lv, &cd_S8050C1);
    dp->~S8050C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8050C1(Test_S8050C1, "S8050C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S8050C1C1Ev();
extern void _ZN7S8050C1D1Ev();
Name_Map name_map_S8050C1[] = {
  NSPAIR(_ZN7S8050C1C1Ev),
  NSPAIR(_ZN7S8050C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3938C4_nt;
extern VTBL_ENTRY _ZTI10S3938C4_nt[];
extern  VTBL_ENTRY _ZTV10S3938C4_nt[];
static Base_Class bases_S8050C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3938C4_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 _ZTI7S8050C1[];
extern void _ZN7S8050C1D1Ev();
extern void _ZN7S8050C1D0Ev();
static  VTBL_ENTRY vtc_S8050C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8050C1[0]),
  (VTBL_ENTRY)&_ZN7S8050C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8050C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8050C1[];
extern  VTBL_ENTRY _ZTV7S8050C1[];
Class_Descriptor cd_S8050C1 = {  "S8050C1", // class name
  bases_S8050C1, 1,
  &(vtc_S8050C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S8050C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8050C1),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  S16633C1  {
  int s16633c1f0;
  ::S1542C26 s16633c1f1;
  void *s16633c1f2;
  void  mf16633c1(); // _ZN8S16633C19mf16633c1Ev
};
//SIG(1 S16633C1) C1{ m Fi FC2{ BC3{ BC4{ m Fp Fi[2]}}} Fp}


void  S16633C1 ::mf16633c1(){}

static void Test_S16633C1()
{
  {
    init_simple_test("S16633C1");
    S16633C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S16633C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16633C1)");
    check_field_offset(lv, s16633c1f0, 0, "S16633C1.s16633c1f0");
    check_field_offset(lv, s16633c1f1, ABISELECT(8,4), "S16633C1.s16633c1f1");
    check_field_offset(lv, s16633c1f2, ABISELECT(24,16), "S16633C1.s16633c1f2");
  }
}
static Arrange_To_Call_Me vS16633C1(Test_S16633C1, "S16633C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10701C1  {
  char s10701c1f0[2];
  short s10701c1f1[3];
  char s10701c1f2[2];
  short s10701c1f3;
  ::S13085C6_nt s10701c1f4;
  ::S13085C6_nt s10701c1f5;
};
//SIG(1 S10701C1) C1{ Fc[2] Fs[3] Fc[2] Fs FC2{ Fi} FC2}



static void Test_S10701C1()
{
  {
    init_simple_test("S10701C1");
    S10701C1 lv;
    check2(sizeof(lv), 20, "sizeof(S10701C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10701C1)");
    check_field_offset(lv, s10701c1f0, 0, "S10701C1.s10701c1f0");
    check_field_offset(lv, s10701c1f1, 2, "S10701C1.s10701c1f1");
    check_field_offset(lv, s10701c1f2, 8, "S10701C1.s10701c1f2");
    check_field_offset(lv, s10701c1f3, 10, "S10701C1.s10701c1f3");
    check_field_offset(lv, s10701c1f4, 12, "S10701C1.s10701c1f4");
    check_field_offset(lv, s10701c1f5, 16, "S10701C1.s10701c1f5");
  }
}
static Arrange_To_Call_Me vS10701C1(Test_S10701C1, "S10701C1", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11411C2_nt  {
  int s11411c2f0;
  void *s11411c2f1[3];
  int s11411c2f2;
  void *s11411c2f3;
  int s11411c2f4[17];
};
//SIG(-1 S11411C2_nt) C1{ Fi Fp[3] Fi Fp Fi[17]}



//skip512 S11411C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11411C1  {
  ::S11411C2_nt s11411c1f0;
  int s11411c1f1[2];
};
//SIG(1 S11411C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fi[2]}



static void Test_S11411C1()
{
  {
    init_simple_test("S11411C1");
    S11411C1 lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S11411C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11411C1)");
    check_field_offset(lv, s11411c1f0, 0, "S11411C1.s11411c1f0");
    check_field_offset(lv, s11411c1f1, ABISELECT(120,92), "S11411C1.s11411c1f1");
  }
}
static Arrange_To_Call_Me vS11411C1(Test_S11411C1, "S11411C1", ABISELECT(128,100));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14283C2  {
  int s14283c2f0;
  ::S13085C6_nt s14283c2f1;
  ::S13085C6_nt s14283c2f2;
  int s14283c2f3;
};
//SIG(-1 S14283C2) C1{ Fi FC2{ Fi} FC2 Fi}



static void Test_S14283C2()
{
  {
    init_simple_test("S14283C2");
    S14283C2 lv;
    check2(sizeof(lv), 16, "sizeof(S14283C2)");
    check2(__alignof__(lv), 4, "__alignof__(S14283C2)");
    check_field_offset(lv, s14283c2f0, 0, "S14283C2.s14283c2f0");
    check_field_offset(lv, s14283c2f1, 4, "S14283C2.s14283c2f1");
    check_field_offset(lv, s14283c2f2, 8, "S14283C2.s14283c2f2");
    check_field_offset(lv, s14283c2f3, 12, "S14283C2.s14283c2f3");
  }
}
static Arrange_To_Call_Me vS14283C2(Test_S14283C2, "S14283C2", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14283C1  {
  void *s14283c1f0;
  int s14283c1f1[2];
  ::S14283C2 s14283c1f2;
};
//SIG(1 S14283C1) C1{ Fp Fi[2] FC2{ Fi FC3{ Fi} FC3 Fi}}



static void Test_S14283C1()
{
  {
    init_simple_test("S14283C1");
    S14283C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S14283C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14283C1)");
    check_field_offset(lv, s14283c1f0, 0, "S14283C1.s14283c1f0");
    check_field_offset(lv, s14283c1f1, ABISELECT(8,4), "S14283C1.s14283c1f1");
    check_field_offset(lv, s14283c1f2, ABISELECT(16,12), "S14283C1.s14283c1f2");
  }
}
static Arrange_To_Call_Me vS14283C1(Test_S14283C1, "S14283C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3947C2  : S3939C4_nt {
  int s3947c2f0;
  virtual  ~S3947C2(); // _ZN7S3947C2D1Ev
  S3947C2(); // tgen
};
//SIG(-1 S3947C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3947C2()
{
  extern Class_Descriptor cd_S3947C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3947C2, buf);
    S3947C2 *dp, &lv = *(dp=new (buf) S3947C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3947C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3947C2)");
    check_base_class_offset(lv, (S3939C4_nt*), 0, "S3947C2");
    check_field_offset(lv, s3947c2f0, ABISELECT(16,12), "S3947C2.s3947c2f0");
    test_class_info(&lv, &cd_S3947C2);
    dp->~S3947C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3947C2(Test_S3947C2, "S3947C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3947C2C1Ev();
extern void _ZN7S3947C2D1Ev();
Name_Map name_map_S3947C2[] = {
  NSPAIR(_ZN7S3947C2C1Ev),
  NSPAIR(_ZN7S3947C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3939C4_nt;
extern VTBL_ENTRY _ZTI10S3939C4_nt[];
extern  VTBL_ENTRY _ZTV10S3939C4_nt[];
static Base_Class bases_S3947C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3939C4_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 _ZTI7S3947C2[];
extern void _ZN7S3947C2D1Ev();
extern void _ZN7S3947C2D0Ev();
static  VTBL_ENTRY vtc_S3947C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3947C2[0]),
  (VTBL_ENTRY)&_ZN7S3947C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3947C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3947C2[];
extern  VTBL_ENTRY _ZTV7S3947C2[];
Class_Descriptor cd_S3947C2 = {  "S3947C2", // class name
  bases_S3947C2, 1,
  &(vtc_S3947C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3947C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3947C2),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  S3947C1  : S3947C2 {
  __tsi64 s3947c1f0;
  int s3947c1f1;
  virtual  ~S3947C1(); // _ZN7S3947C1D1Ev
  S3947C1(); // tgen
};
//SIG(1 S3947C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FL Fi}


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

static void Test_S3947C1()
{
  extern Class_Descriptor cd_S3947C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S3947C1, buf);
    S3947C1 *dp, &lv = *(dp=new (buf) S3947C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S3947C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3947C1)");
    check_base_class_offset(lv, (S3939C4_nt*)(S3947C2*), 0, "S3947C1");
    check_base_class_offset(lv, (S3947C2*), 0, "S3947C1");
    check_field_offset(lv, s3947c1f0, ABISELECT(24,16), "S3947C1.s3947c1f0");
    check_field_offset(lv, s3947c1f1, ABISELECT(32,24), "S3947C1.s3947c1f1");
    test_class_info(&lv, &cd_S3947C1);
    dp->~S3947C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3947C1(Test_S3947C1, "S3947C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S3947C1C1Ev();
extern void _ZN7S3947C1D1Ev();
Name_Map name_map_S3947C1[] = {
  NSPAIR(_ZN7S3947C1C1Ev),
  NSPAIR(_ZN7S3947C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3939C4_nt;
extern VTBL_ENTRY _ZTI10S3939C4_nt[];
extern  VTBL_ENTRY _ZTV10S3939C4_nt[];
extern Class_Descriptor cd_S3947C2;
extern VTBL_ENTRY _ZTI7S3947C2[];
extern  VTBL_ENTRY _ZTV7S3947C2[];
static Base_Class bases_S3947C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3939C4_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_S3947C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3947C1[];
extern void _ZN7S3947C1D1Ev();
extern void _ZN7S3947C1D0Ev();
static  VTBL_ENTRY vtc_S3947C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3947C1[0]),
  (VTBL_ENTRY)&_ZN7S3947C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3947C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3947C1[];
extern  VTBL_ENTRY _ZTV7S3947C1[];
Class_Descriptor cd_S3947C1 = {  "S3947C1", // class name
  bases_S3947C1, 2,
  &(vtc_S3947C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S3947C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3947C1),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  S3946C2  : S3939C4_nt {
  int s3946c2f0;
  virtual  ~S3946C2(); // _ZN7S3946C2D1Ev
  S3946C2(); // tgen
};
//SIG(-1 S3946C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3946C2()
{
  extern Class_Descriptor cd_S3946C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3946C2, buf);
    S3946C2 *dp, &lv = *(dp=new (buf) S3946C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3946C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3946C2)");
    check_base_class_offset(lv, (S3939C4_nt*), 0, "S3946C2");
    check_field_offset(lv, s3946c2f0, ABISELECT(16,12), "S3946C2.s3946c2f0");
    test_class_info(&lv, &cd_S3946C2);
    dp->~S3946C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3946C2(Test_S3946C2, "S3946C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3946C2C1Ev();
extern void _ZN7S3946C2D1Ev();
Name_Map name_map_S3946C2[] = {
  NSPAIR(_ZN7S3946C2C1Ev),
  NSPAIR(_ZN7S3946C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3939C4_nt;
extern VTBL_ENTRY _ZTI10S3939C4_nt[];
extern  VTBL_ENTRY _ZTV10S3939C4_nt[];
static Base_Class bases_S3946C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3939C4_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 _ZTI7S3946C2[];
extern void _ZN7S3946C2D1Ev();
extern void _ZN7S3946C2D0Ev();
static  VTBL_ENTRY vtc_S3946C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3946C2[0]),
  (VTBL_ENTRY)&_ZN7S3946C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3946C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3946C2[];
extern  VTBL_ENTRY _ZTV7S3946C2[];
Class_Descriptor cd_S3946C2 = {  "S3946C2", // class name
  bases_S3946C2, 1,
  &(vtc_S3946C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3946C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3946C2),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  S3946C1  : S3946C2 {
  int s3946c1f0[5];
  virtual  ~S3946C1(); // _ZN7S3946C1D1Ev
  S3946C1(); // tgen
};
//SIG(1 S3946C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd Fi[5]}


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

static void Test_S3946C1()
{
  extern Class_Descriptor cd_S3946C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S3946C1, buf);
    S3946C1 *dp, &lv = *(dp=new (buf) S3946C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S3946C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3946C1)");
    check_base_class_offset(lv, (S3939C4_nt*)(S3946C2*), 0, "S3946C1");
    check_base_class_offset(lv, (S3946C2*), 0, "S3946C1");
    check_field_offset(lv, s3946c1f0, ABISELECT(20,16), "S3946C1.s3946c1f0");
    test_class_info(&lv, &cd_S3946C1);
    dp->~S3946C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3946C1(Test_S3946C1, "S3946C1", ABISELECT(40,36));

#else // __cplusplus

extern void _ZN7S3946C1C1Ev();
extern void _ZN7S3946C1D1Ev();
Name_Map name_map_S3946C1[] = {
  NSPAIR(_ZN7S3946C1C1Ev),
  NSPAIR(_ZN7S3946C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3939C4_nt;
extern VTBL_ENTRY _ZTI10S3939C4_nt[];
extern  VTBL_ENTRY _ZTV10S3939C4_nt[];
extern Class_Descriptor cd_S3946C2;
extern VTBL_ENTRY _ZTI7S3946C2[];
extern  VTBL_ENTRY _ZTV7S3946C2[];
static Base_Class bases_S3946C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3939C4_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_S3946C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3946C1[];
extern void _ZN7S3946C1D1Ev();
extern void _ZN7S3946C1D0Ev();
static  VTBL_ENTRY vtc_S3946C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3946C1[0]),
  (VTBL_ENTRY)&_ZN7S3946C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3946C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3946C1[];
extern  VTBL_ENTRY _ZTV7S3946C1[];
Class_Descriptor cd_S3946C1 = {  "S3946C1", // class name
  bases_S3946C1, 2,
  &(vtc_S3946C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,36), // object size
  NSPAIRA(_ZTI7S3946C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3946C1),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  S17360C1  {
  __tsi64 s17360c1f0;
  int s17360c1f1[2];
  ::S9523C4_nt s17360c1f2;
  int s17360c1f3;
  void  mf17360c1(); // _ZN8S17360C19mf17360c1Ev
};
//SIG(1 S17360C1) C1{ m FL Fi[2] FC2{ m FC3{ m FL}} Fi}


void  S17360C1 ::mf17360c1(){}

static void Test_S17360C1()
{
  {
    init_simple_test("S17360C1");
    S17360C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S17360C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17360C1)");
    check_field_offset(lv, s17360c1f0, 0, "S17360C1.s17360c1f0");
    check_field_offset(lv, s17360c1f1, 8, "S17360C1.s17360c1f1");
    check_field_offset(lv, s17360c1f2, 16, "S17360C1.s17360c1f2");
    check_field_offset(lv, s17360c1f3, 24, "S17360C1.s17360c1f3");
  }
}
static Arrange_To_Call_Me vS17360C1(Test_S17360C1, "S17360C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12318C1  {
  int s12318c1f0;
  char s12318c1f1[601];
  int s12318c1f2[2];
  __tsi64 s12318c1f3;
  int s12318c1f4[2];
  char s12318c1f5;
};
//SIG(1 S12318C1) C1{ Fi Fc[601] Fi[2] FL Fi[2] Fc}



static void Test_S12318C1()
{
  {
    init_simple_test("S12318C1");
    S12318C1 lv;
    check2(sizeof(lv), ABISELECT(640,636), "sizeof(S12318C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12318C1)");
    check_field_offset(lv, s12318c1f0, 0, "S12318C1.s12318c1f0");
    check_field_offset(lv, s12318c1f1, 4, "S12318C1.s12318c1f1");
    check_field_offset(lv, s12318c1f2, 608, "S12318C1.s12318c1f2");
    check_field_offset(lv, s12318c1f3, 616, "S12318C1.s12318c1f3");
    check_field_offset(lv, s12318c1f4, 624, "S12318C1.s12318c1f4");
    check_field_offset(lv, s12318c1f5, 632, "S12318C1.s12318c1f5");
  }
}
static Arrange_To_Call_Me vS12318C1(Test_S12318C1, "S12318C1", ABISELECT(640,636));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13846C1  {
  __tsi64 s13846c1f0;
  void *s13846c1f1[2];
  int s13846c1f2:8;
  int s13846c1f3:24;
  int s13846c1f4;
  void *s13846c1f5[2];
};
//SIG(1 S13846C1) C1{ FL Fp[2] Fi:8 Fi:24 Fi Fp[2]}



static void Test_S13846C1()
{
  {
    init_simple_test("S13846C1");
    static S13846C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S13846C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13846C1)");
    check_field_offset(lv, s13846c1f0, 0, "S13846C1.s13846c1f0");
    check_field_offset(lv, s13846c1f1, 8, "S13846C1.s13846c1f1");
    set_bf_and_test(lv, s13846c1f2, ABISELECT(24,16), 0, 8, 1, "S13846C1");
    set_bf_and_test(lv, s13846c1f2, ABISELECT(24,16), 0, 8, hide_sll(1LL<<7), "S13846C1");
    set_bf_and_test(lv, s13846c1f3, ABISELECT(25,17), 0, 24, 1, "S13846C1");
    set_bf_and_test(lv, s13846c1f3, ABISELECT(25,17), 0, 24, hide_sll(1LL<<23), "S13846C1");
    check_field_offset(lv, s13846c1f4, ABISELECT(28,20), "S13846C1.s13846c1f4");
    check_field_offset(lv, s13846c1f5, ABISELECT(32,24), "S13846C1.s13846c1f5");
  }
}
static Arrange_To_Call_Me vS13846C1(Test_S13846C1, "S13846C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14366C1  {
  void *s14366c1f0;
  int s14366c1f1[6];
  ::S1765C6_nt s14366c1f2;
};
//SIG(1 S14366C1) C1{ Fp Fi[6] FC2{ Fi FC3{ Fp Fi}}}



static void Test_S14366C1()
{
  {
    init_simple_test("S14366C1");
    S14366C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S14366C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14366C1)");
    check_field_offset(lv, s14366c1f0, 0, "S14366C1.s14366c1f0");
    check_field_offset(lv, s14366c1f1, ABISELECT(8,4), "S14366C1.s14366c1f1");
    check_field_offset(lv, s14366c1f2, ABISELECT(32,28), "S14366C1.s14366c1f2");
  }
}
static Arrange_To_Call_Me vS14366C1(Test_S14366C1, "S14366C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11726C2_nt  {
  __tsi64 s11726c2f0[2];
};
//SIG(-1 S11726C2_nt) C1{ FL[2]}



//skip512 S11726C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11726C1  {
  ::S11726C2_nt s11726c1f0;
  ::S11726C2_nt s11726c1f1;
  char s11726c1f2[16];
  ::S11726C2_nt s11726c1f3;
  void *s11726c1f4;
};
//SIG(1 S11726C1) C1{ FC2{ FL[2]} FC2 Fc[16] FC2 Fp}



static void Test_S11726C1()
{
  {
    init_simple_test("S11726C1");
    S11726C1 lv;
    check2(sizeof(lv), ABISELECT(72,68), "sizeof(S11726C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11726C1)");
    check_field_offset(lv, s11726c1f0, 0, "S11726C1.s11726c1f0");
    check_field_offset(lv, s11726c1f1, 16, "S11726C1.s11726c1f1");
    check_field_offset(lv, s11726c1f2, 32, "S11726C1.s11726c1f2");
    check_field_offset(lv, s11726c1f3, 48, "S11726C1.s11726c1f3");
    check_field_offset(lv, s11726c1f4, 64, "S11726C1.s11726c1f4");
  }
}
static Arrange_To_Call_Me vS11726C1(Test_S11726C1, "S11726C1", ABISELECT(72,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3948C2  : S3939C4_nt {
  int s3948c2f0;
  virtual  ~S3948C2(); // _ZN7S3948C2D1Ev
  S3948C2(); // tgen
};
//SIG(-1 S3948C2) C1{ BC2{ vd m FL} vd Fi}


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

static void Test_S3948C2()
{
  extern Class_Descriptor cd_S3948C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3948C2, buf);
    S3948C2 *dp, &lv = *(dp=new (buf) S3948C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3948C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3948C2)");
    check_base_class_offset(lv, (S3939C4_nt*), 0, "S3948C2");
    check_field_offset(lv, s3948c2f0, ABISELECT(16,12), "S3948C2.s3948c2f0");
    test_class_info(&lv, &cd_S3948C2);
    dp->~S3948C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3948C2(Test_S3948C2, "S3948C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3948C2C1Ev();
extern void _ZN7S3948C2D1Ev();
Name_Map name_map_S3948C2[] = {
  NSPAIR(_ZN7S3948C2C1Ev),
  NSPAIR(_ZN7S3948C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3939C4_nt;
extern VTBL_ENTRY _ZTI10S3939C4_nt[];
extern  VTBL_ENTRY _ZTV10S3939C4_nt[];
static Base_Class bases_S3948C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3939C4_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 _ZTI7S3948C2[];
extern void _ZN7S3948C2D1Ev();
extern void _ZN7S3948C2D0Ev();
static  VTBL_ENTRY vtc_S3948C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3948C2[0]),
  (VTBL_ENTRY)&_ZN7S3948C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3948C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3948C2[];
extern  VTBL_ENTRY _ZTV7S3948C2[];
Class_Descriptor cd_S3948C2 = {  "S3948C2", // class name
  bases_S3948C2, 1,
  &(vtc_S3948C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3948C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3948C2),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  S3948C1  : S3948C2 {
  __tsi64 s3948c1f0;
  virtual  ~S3948C1(); // _ZN7S3948C1D1Ev
  S3948C1(); // tgen
};
//SIG(1 S3948C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FL}


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

static void Test_S3948C1()
{
  extern Class_Descriptor cd_S3948C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S3948C1, buf);
    S3948C1 *dp, &lv = *(dp=new (buf) S3948C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S3948C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3948C1)");
    check_base_class_offset(lv, (S3939C4_nt*)(S3948C2*), 0, "S3948C1");
    check_base_class_offset(lv, (S3948C2*), 0, "S3948C1");
    check_field_offset(lv, s3948c1f0, ABISELECT(24,16), "S3948C1.s3948c1f0");
    test_class_info(&lv, &cd_S3948C1);
    dp->~S3948C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3948C1(Test_S3948C1, "S3948C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S3948C1C1Ev();
extern void _ZN7S3948C1D1Ev();
Name_Map name_map_S3948C1[] = {
  NSPAIR(_ZN7S3948C1C1Ev),
  NSPAIR(_ZN7S3948C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3939C4_nt;
extern VTBL_ENTRY _ZTI10S3939C4_nt[];
extern  VTBL_ENTRY _ZTV10S3939C4_nt[];
extern Class_Descriptor cd_S3948C2;
extern VTBL_ENTRY _ZTI7S3948C2[];
extern  VTBL_ENTRY _ZTV7S3948C2[];
static Base_Class bases_S3948C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3939C4_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_S3948C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3948C1[];
extern void _ZN7S3948C1D1Ev();
extern void _ZN7S3948C1D0Ev();
static  VTBL_ENTRY vtc_S3948C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3948C1[0]),
  (VTBL_ENTRY)&_ZN7S3948C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3948C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3948C1[];
extern  VTBL_ENTRY _ZTV7S3948C1[];
Class_Descriptor cd_S3948C1 = {  "S3948C1", // class name
  bases_S3948C1, 2,
  &(vtc_S3948C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S3948C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3948C1),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  S15982C1  {
  ::S615C17_nt s15982c1f0;
  ::S615C17_nt s15982c1f1;
  void *s15982c1f2;
  int s15982c1f3[2];
  void  mf15982c1(); // _ZN8S15982C19mf15982c1Ev
};
//SIG(1 S15982C1) C1{ m FC2{ m Fi[2]} FC2 Fp Fi[2]}


void  S15982C1 ::mf15982c1(){}

static void Test_S15982C1()
{
  {
    init_simple_test("S15982C1");
    S15982C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S15982C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15982C1)");
    check_field_offset(lv, s15982c1f0, 0, "S15982C1.s15982c1f0");
    check_field_offset(lv, s15982c1f1, 8, "S15982C1.s15982c1f1");
    check_field_offset(lv, s15982c1f2, 16, "S15982C1.s15982c1f2");
    check_field_offset(lv, s15982c1f3, ABISELECT(24,20), "S15982C1.s15982c1f3");
  }
}
static Arrange_To_Call_Me vS15982C1(Test_S15982C1, "S15982C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10508C1  {
  char s10508c1f0;
  short s10508c1f1;
  void *s10508c1f2[3];
  int s10508c1f3;
  ::S17132C13_nt s10508c1f4;
};
//SIG(1 S10508C1) C1{ Fc Fs Fp[3] Fi FC2{ FL[4]}}



static void Test_S10508C1()
{
  {
    init_simple_test("S10508C1");
    S10508C1 lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S10508C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10508C1)");
    check_field_offset(lv, s10508c1f0, 0, "S10508C1.s10508c1f0");
    check_field_offset(lv, s10508c1f1, 2, "S10508C1.s10508c1f1");
    check_field_offset(lv, s10508c1f2, ABISELECT(8,4), "S10508C1.s10508c1f2");
    check_field_offset(lv, s10508c1f3, ABISELECT(32,16), "S10508C1.s10508c1f3");
    check_field_offset(lv, s10508c1f4, ABISELECT(40,20), "S10508C1.s10508c1f4");
  }
}
static Arrange_To_Call_Me vS10508C1(Test_S10508C1, "S10508C1", ABISELECT(72,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18087C1  {
  void *s18087c1f0[2];
  int s18087c1f1[2];
  char s18087c1f2[2];
  int s18087c1f3[2];
  void  mf18087c1(); // _ZN8S18087C19mf18087c1Ev
};
//SIG(1 S18087C1) C1{ m Fp[2] Fi[2] Fc[2] Fi[2]}


void  S18087C1 ::mf18087c1(){}

static void Test_S18087C1()
{
  {
    init_simple_test("S18087C1");
    S18087C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S18087C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18087C1)");
    check_field_offset(lv, s18087c1f0, 0, "S18087C1.s18087c1f0");
    check_field_offset(lv, s18087c1f1, ABISELECT(16,8), "S18087C1.s18087c1f1");
    check_field_offset(lv, s18087c1f2, ABISELECT(24,16), "S18087C1.s18087c1f2");
    check_field_offset(lv, s18087c1f3, ABISELECT(28,20), "S18087C1.s18087c1f3");
  }
}
static Arrange_To_Call_Me vS18087C1(Test_S18087C1, "S18087C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5836C1  : S19863C9_nt , S165C11_nt , S19863C10 {
};
//SIG(1 S5836C1) C1{ BC2{ m Fi} BC3{ m Fi} BC4{ m}}



static void Test_S5836C1()
{
  extern Class_Descriptor cd_S5836C1;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S5836C1, buf);
    S5836C1 &lv = *(new (buf) S5836C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S5836C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5836C1)");
    check_base_class_offset(lv, (S19863C9_nt*), 0, "S5836C1");
    check_base_class_offset(lv, (S165C11_nt*), 4, "S5836C1");
    check_base_class_offset(lv, (S19863C10*), 0, "S5836C1");
    test_class_info(&lv, &cd_S5836C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5836C1(Test_S5836C1, "S5836C1", 8);

#else // __cplusplus

extern Class_Descriptor cd_S19863C9_nt;
extern VTBL_ENTRY _ZTI11S19863C9_nt[];
extern Class_Descriptor cd_S165C11_nt;
extern VTBL_ENTRY _ZTI10S165C11_nt[];
extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S5836C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C9_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_S165C11_nt,    4, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5836C1 = {  "S5836C1", // class name
  bases_S5836C1, 3,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5944C1  : S9523C5_nt {
  void *s5944c1f0[5];
  ::S9523C5_nt s5944c1f1[4];
  int s5944c1f2;
};
//SIG(1 S5944C1) C1{ BC2{ m FL} Fp[5] FC2[4] Fi}



static void Test_S5944C1()
{
  extern Class_Descriptor cd_S5944C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S5944C1, buf);
    S5944C1 &lv = *(new (buf) S5944C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S5944C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5944C1)");
    check_base_class_offset(lv, (S9523C5_nt*), 0, "S5944C1");
    check_field_offset(lv, s5944c1f0, 8, "S5944C1.s5944c1f0");
    check_field_offset(lv, s5944c1f1, ABISELECT(48,28), "S5944C1.s5944c1f1");
    check_field_offset(lv, s5944c1f2, ABISELECT(80,60), "S5944C1.s5944c1f2");
    test_class_info(&lv, &cd_S5944C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5944C1(Test_S5944C1, "S5944C1", ABISELECT(88,64));

#else // __cplusplus

extern Class_Descriptor cd_S9523C5_nt;
static Base_Class bases_S5944C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9523C5_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_S5944C1 = {  "S5944C1", // class name
  bases_S5944C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(88,64), // 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  S13421C2  {
  ::S17133C11_nt s13421c2f0;
  void *s13421c2f1;
};
//SIG(1 S13421C2) U1{ FC2{ Fp Fi} Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13421C1  {
  int s13421c1f0[3];
  ::S13421C2 s13421c1f1;
};
//SIG(1 S13421C1) C1{ Fi[3] FU2{ FC3{ Fp Fi} Fp}}



static void Test_S13421C1()
{
  {
    init_simple_test("S13421C1");
    S13421C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S13421C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13421C1)");
    check_field_offset(lv, s13421c1f0, 0, "S13421C1.s13421c1f0");
    check_field_offset(lv, s13421c1f1, ABISELECT(16,12), "S13421C1.s13421c1f1");
  }
}
static Arrange_To_Call_Me vS13421C1(Test_S13421C1, "S13421C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8200C1  : S8455C6_nt {
  void *s8200c1f0[7];
  virtual  ~S8200C1(); // _ZN7S8200C1D1Ev
  S8200C1(); // tgen
};
//SIG(1 S8200C1) C1{ BC2{ vd m Fp[3]} vd Fp[7]}


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

static void Test_S8200C1()
{
  extern Class_Descriptor cd_S8200C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S8200C1, buf);
    S8200C1 *dp, &lv = *(dp=new (buf) S8200C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S8200C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8200C1)");
    check_base_class_offset(lv, (S8455C6_nt*), 0, "S8200C1");
    check_field_offset(lv, s8200c1f0, ABISELECT(32,16), "S8200C1.s8200c1f0");
    test_class_info(&lv, &cd_S8200C1);
    dp->~S8200C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8200C1(Test_S8200C1, "S8200C1", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN7S8200C1C1Ev();
extern void _ZN7S8200C1D1Ev();
Name_Map name_map_S8200C1[] = {
  NSPAIR(_ZN7S8200C1C1Ev),
  NSPAIR(_ZN7S8200C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8455C6_nt;
extern VTBL_ENTRY _ZTI10S8455C6_nt[];
extern  VTBL_ENTRY _ZTV10S8455C6_nt[];
static Base_Class bases_S8200C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8455C6_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 _ZTI7S8200C1[];
extern void _ZN7S8200C1D1Ev();
extern void _ZN7S8200C1D0Ev();
static  VTBL_ENTRY vtc_S8200C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8200C1[0]),
  (VTBL_ENTRY)&_ZN7S8200C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8200C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8200C1[];
extern  VTBL_ENTRY _ZTV7S8200C1[];
Class_Descriptor cd_S8200C1 = {  "S8200C1", // class name
  bases_S8200C1, 1,
  &(vtc_S8200C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI7S8200C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8200C1),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  S13175C1  {
  int s13175c1f0[2];
  __tsi64 s13175c1f1[4];
  int s13175c1f2[2];
  __tsi64 s13175c1f3[2];
};
//SIG(1 S13175C1) C1{ Fi[2] FL[4] Fi[2] FL[2]}



static void Test_S13175C1()
{
  {
    init_simple_test("S13175C1");
    S13175C1 lv;
    check2(sizeof(lv), 64, "sizeof(S13175C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13175C1)");
    check_field_offset(lv, s13175c1f0, 0, "S13175C1.s13175c1f0");
    check_field_offset(lv, s13175c1f1, 8, "S13175C1.s13175c1f1");
    check_field_offset(lv, s13175c1f2, 40, "S13175C1.s13175c1f2");
    check_field_offset(lv, s13175c1f3, 48, "S13175C1.s13175c1f3");
  }
}
static Arrange_To_Call_Me vS13175C1(Test_S13175C1, "S13175C1", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17889C2_nt  {
  char s17889c2f0[33];
  int s17889c2f1;
};
//SIG(-1 S17889C2_nt) C1{ Fc[33] Fi}



//skip512 S17889C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17889C1  {
  void *s17889c1f0[2];
  ::S17889C2_nt s17889c1f1;
  void  mf17889c1(); // _ZN8S17889C19mf17889c1Ev
};
//SIG(1 S17889C1) C1{ m Fp[2] FC2{ Fc[33] Fi}}


void  S17889C1 ::mf17889c1(){}

static void Test_S17889C1()
{
  {
    init_simple_test("S17889C1");
    S17889C1 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S17889C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17889C1)");
    check_field_offset(lv, s17889c1f0, 0, "S17889C1.s17889c1f0");
    check_field_offset(lv, s17889c1f1, ABISELECT(16,8), "S17889C1.s17889c1f1");
  }
}
static Arrange_To_Call_Me vS17889C1(Test_S17889C1, "S17889C1", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12044C1  {
  ::S615C17_nt s12044c1f0;
  ::S615C17_nt s12044c1f1;
  int s12044c1f2[2];
};
//SIG(1 S12044C1) C1{ FC2{ m Fi[2]} FC2 Fi[2]}



static void Test_S12044C1()
{
  {
    init_simple_test("S12044C1");
    S12044C1 lv;
    check2(sizeof(lv), 24, "sizeof(S12044C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12044C1)");
    check_field_offset(lv, s12044c1f0, 0, "S12044C1.s12044c1f0");
    check_field_offset(lv, s12044c1f1, 8, "S12044C1.s12044c1f1");
    check_field_offset(lv, s12044c1f2, 16, "S12044C1.s12044c1f2");
  }
}
static Arrange_To_Call_Me vS12044C1(Test_S12044C1, "S12044C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16957C1  {
  int s16957c1f0;
  void *s16957c1f1[2];
  ::S17132C13_nt s16957c1f2;
  void  mf16957c1(); // _ZN8S16957C19mf16957c1Ev
};
//SIG(1 S16957C1) C1{ m Fi Fp[2] FC2{ FL[4]}}


void  S16957C1 ::mf16957c1(){}

static void Test_S16957C1()
{
  {
    init_simple_test("S16957C1");
    S16957C1 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S16957C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16957C1)");
    check_field_offset(lv, s16957c1f0, 0, "S16957C1.s16957c1f0");
    check_field_offset(lv, s16957c1f1, ABISELECT(8,4), "S16957C1.s16957c1f1");
    check_field_offset(lv, s16957c1f2, ABISELECT(24,12), "S16957C1.s16957c1f2");
  }
}
static Arrange_To_Call_Me vS16957C1(Test_S16957C1, "S16957C1", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2500C2  : S21028C14_nt {
};
//SIG(-1 S2500C2) C1{ BC2{ m FC3{ m Fi}}}



static void Test_S2500C2()
{
  extern Class_Descriptor cd_S2500C2;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2500C2, buf);
    S2500C2 &lv = *(new (buf) S2500C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2500C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2500C2)");
    check_base_class_offset(lv, (S21028C14_nt*), 0, "S2500C2");
    test_class_info(&lv, &cd_S2500C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2500C2(Test_S2500C2, "S2500C2", 4);

#else // __cplusplus

extern Class_Descriptor cd_S21028C14_nt;
extern VTBL_ENTRY _ZTI12S21028C14_nt[];
static Base_Class bases_S2500C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21028C14_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_S2500C2 = {  "S2500C2", // class name
  bases_S2500C2, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2500C1  : S2500C2 {
};
//SIG(1 S2500C1) C1{ BC2{ BC3{ m FC4{ m Fi}}}}



static void Test_S2500C1()
{
  extern Class_Descriptor cd_S2500C1;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2500C1, buf);
    S2500C1 &lv = *(new (buf) S2500C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2500C1)");
    check2(__alignof__(lv), 4, "__alignof__(S2500C1)");
    check_base_class_offset(lv, (S21028C14_nt*)(S2500C2*), 0, "S2500C1");
    check_base_class_offset(lv, (S2500C2*), 0, "S2500C1");
    test_class_info(&lv, &cd_S2500C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2500C1(Test_S2500C1, "S2500C1", 4);

#else // __cplusplus

extern Class_Descriptor cd_S21028C14_nt;
extern VTBL_ENTRY _ZTI12S21028C14_nt[];
extern Class_Descriptor cd_S2500C2;
static Base_Class bases_S2500C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21028C14_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_S2500C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2500C1 = {  "S2500C1", // class name
  bases_S2500C1, 2,
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14545C1  {
  void *s14545c1f0[2];
  int s14545c1f1[3];
  void *s14545c1f2;
  int s14545c1f3[2];
};
//SIG(1 S14545C1) C1{ Fp[2] Fi[3] Fp Fi[2]}



static void Test_S14545C1()
{
  {
    init_simple_test("S14545C1");
    S14545C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S14545C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14545C1)");
    check_field_offset(lv, s14545c1f0, 0, "S14545C1.s14545c1f0");
    check_field_offset(lv, s14545c1f1, ABISELECT(16,8), "S14545C1.s14545c1f1");
    check_field_offset(lv, s14545c1f2, ABISELECT(32,20), "S14545C1.s14545c1f2");
    check_field_offset(lv, s14545c1f3, ABISELECT(40,24), "S14545C1.s14545c1f3");
  }
}
static Arrange_To_Call_Me vS14545C1(Test_S14545C1, "S14545C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12700C1  {
  int s12700c1f0;
  void *s12700c1f1;
  int s12700c1f2[2];
  long s12700c1f3;
  int s12700c1f4[3];
};
//SIG(1 S12700C1) C1{ Fi Fp Fi[2] Fl Fi[3]}



static void Test_S12700C1()
{
  {
    init_simple_test("S12700C1");
    S12700C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S12700C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12700C1)");
    check_field_offset(lv, s12700c1f0, 0, "S12700C1.s12700c1f0");
    check_field_offset(lv, s12700c1f1, ABISELECT(8,4), "S12700C1.s12700c1f1");
    check_field_offset(lv, s12700c1f2, ABISELECT(16,8), "S12700C1.s12700c1f2");
    check_field_offset(lv, s12700c1f3, ABISELECT(24,16), "S12700C1.s12700c1f3");
    check_field_offset(lv, s12700c1f4, ABISELECT(32,20), "S12700C1.s12700c1f4");
  }
}
static Arrange_To_Call_Me vS12700C1(Test_S12700C1, "S12700C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10757C1  {
  char s10757c1f0[21];
  int s10757c1f1[3];
  char s10757c1f2[16];
};
//SIG(1 S10757C1) C1{ Fc[21] Fi[3] Fc[16]}



static void Test_S10757C1()
{
  {
    init_simple_test("S10757C1");
    S10757C1 lv;
    check2(sizeof(lv), 52, "sizeof(S10757C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10757C1)");
    check_field_offset(lv, s10757c1f0, 0, "S10757C1.s10757c1f0");
    check_field_offset(lv, s10757c1f1, 24, "S10757C1.s10757c1f1");
    check_field_offset(lv, s10757c1f2, 36, "S10757C1.s10757c1f2");
  }
}
static Arrange_To_Call_Me vS10757C1(Test_S10757C1, "S10757C1", 52);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19666C1  : virtual S21028C14_nt {
  virtual  ~S19666C1(); // _ZN8S19666C1D2Ev
  S19666C1(); // tgen
};
//SIG(1 S19666C1) C1{ VBC2{ m FC3{ m Fi}} vd}


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

static void Test_S19666C1()
{
  extern Class_Descriptor cd_S19666C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19666C1, buf);
    S19666C1 *dp, &lv = *(dp=new (buf) S19666C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19666C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19666C1)");
    check_base_class_offset(lv, (S21028C14_nt*), ABISELECT(8,4), "S19666C1");
    test_class_info(&lv, &cd_S19666C1);
    dp->~S19666C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19666C1(Test_S19666C1, "S19666C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19666C1C1Ev();
extern void _ZN8S19666C1D2Ev();
Name_Map name_map_S19666C1[] = {
  NSPAIR(_ZN8S19666C1C1Ev),
  NSPAIR(_ZN8S19666C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21028C14_nt;
extern VTBL_ENTRY _ZTI12S21028C14_nt[];
static Base_Class bases_S19666C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21028C14_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19666C1[];
extern void _ZN8S19666C1D1Ev();
extern void _ZN8S19666C1D0Ev();
static  VTBL_ENTRY vtc_S19666C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19666C1[0]),
  (VTBL_ENTRY)&_ZN8S19666C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19666C1D0Ev,
};
extern VTBL_ENTRY _ZTV8S19666C1[];
static  VTT_ENTRY vtt_S19666C1[] = {
  {&(_ZTV8S19666C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19666C1[];
extern  VTBL_ENTRY _ZTV8S19666C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19666C1[];
Class_Descriptor cd_S19666C1 = {  "S19666C1", // class name
  bases_S19666C1, 1,
  &(vtc_S19666C1[0]), // expected_vtbl_contents
  &(vtt_S19666C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19666C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19666C1),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19666C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5658C1  : S21028C14_nt {
  ::S19863C9_nt s5658c1f0;
};
//SIG(1 S5658C1) C1{ BC2{ m FC3{ m Fi}} FC3}



static void Test_S5658C1()
{
  extern Class_Descriptor cd_S5658C1;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S5658C1, buf);
    S5658C1 &lv = *(new (buf) S5658C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S5658C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5658C1)");
    check_base_class_offset(lv, (S21028C14_nt*), 0, "S5658C1");
    check_field_offset(lv, s5658c1f0, 4, "S5658C1.s5658c1f0");
    test_class_info(&lv, &cd_S5658C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5658C1(Test_S5658C1, "S5658C1", 8);

#else // __cplusplus

extern Class_Descriptor cd_S21028C14_nt;
extern VTBL_ENTRY _ZTI12S21028C14_nt[];
static Base_Class bases_S5658C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21028C14_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_S5658C1 = {  "S5658C1", // class name
  bases_S5658C1, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15800C1  {
  ::S21028C14_nt s15800c1f0;
  void  mf15800c1(); // _ZN8S15800C19mf15800c1Ev
};
//SIG(1 S15800C1) C1{ m FC2{ m FC3{ m Fi}}}


void  S15800C1 ::mf15800c1(){}

static void Test_S15800C1()
{
  {
    init_simple_test("S15800C1");
    S15800C1 lv;
    check2(sizeof(lv), 4, "sizeof(S15800C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15800C1)");
    check_field_offset(lv, s15800c1f0, 0, "S15800C1.s15800c1f0");
  }
}
static Arrange_To_Call_Me vS15800C1(Test_S15800C1, "S15800C1", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5659C1  : S21028C14_nt {
  int s5659c1f0;
};
//SIG(1 S5659C1) C1{ BC2{ m FC3{ m Fi}} Fi}



static void Test_S5659C1()
{
  extern Class_Descriptor cd_S5659C1;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S5659C1, buf);
    S5659C1 &lv = *(new (buf) S5659C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S5659C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5659C1)");
    check_base_class_offset(lv, (S21028C14_nt*), 0, "S5659C1");
    check_field_offset(lv, s5659c1f0, 4, "S5659C1.s5659c1f0");
    test_class_info(&lv, &cd_S5659C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5659C1(Test_S5659C1, "S5659C1", 8);

#else // __cplusplus

extern Class_Descriptor cd_S21028C14_nt;
extern VTBL_ENTRY _ZTI12S21028C14_nt[];
static Base_Class bases_S5659C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21028C14_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_S5659C1 = {  "S5659C1", // class name
  bases_S5659C1, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8201C1  : S8455C6_nt {
  virtual  ~S8201C1(); // _ZN7S8201C1D1Ev
  S8201C1(); // tgen
};
//SIG(1 S8201C1) C1{ BC2{ vd m Fp[3]} vd}


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

static void Test_S8201C1()
{
  extern Class_Descriptor cd_S8201C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8201C1, buf);
    S8201C1 *dp, &lv = *(dp=new (buf) S8201C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8201C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8201C1)");
    check_base_class_offset(lv, (S8455C6_nt*), 0, "S8201C1");
    test_class_info(&lv, &cd_S8201C1);
    dp->~S8201C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8201C1(Test_S8201C1, "S8201C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8201C1C1Ev();
extern void _ZN7S8201C1D1Ev();
Name_Map name_map_S8201C1[] = {
  NSPAIR(_ZN7S8201C1C1Ev),
  NSPAIR(_ZN7S8201C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8455C6_nt;
extern VTBL_ENTRY _ZTI10S8455C6_nt[];
extern  VTBL_ENTRY _ZTV10S8455C6_nt[];
static Base_Class bases_S8201C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8455C6_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 _ZTI7S8201C1[];
extern void _ZN7S8201C1D1Ev();
extern void _ZN7S8201C1D0Ev();
static  VTBL_ENTRY vtc_S8201C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8201C1[0]),
  (VTBL_ENTRY)&_ZN7S8201C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8201C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8201C1[];
extern  VTBL_ENTRY _ZTV7S8201C1[];
Class_Descriptor cd_S8201C1 = {  "S8201C1", // class name
  bases_S8201C1, 1,
  &(vtc_S8201C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8201C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8201C1),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  S12796C1  {
  int s12796c1f0;
  void *s12796c1f1[5];
  int s12796c1f2[2];
  void *s12796c1f3;
};
//SIG(1 S12796C1) C1{ Fi Fp[5] Fi[2] Fp}



static void Test_S12796C1()
{
  {
    init_simple_test("S12796C1");
    S12796C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S12796C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12796C1)");
    check_field_offset(lv, s12796c1f0, 0, "S12796C1.s12796c1f0");
    check_field_offset(lv, s12796c1f1, ABISELECT(8,4), "S12796C1.s12796c1f1");
    check_field_offset(lv, s12796c1f2, ABISELECT(48,24), "S12796C1.s12796c1f2");
    check_field_offset(lv, s12796c1f3, ABISELECT(56,32), "S12796C1.s12796c1f3");
  }
}
static Arrange_To_Call_Me vS12796C1(Test_S12796C1, "S12796C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12451C2_nt  {
  int s12451c2f0[2];
};
//SIG(1 S12451C2_nt) C1{ Fi[2]}



//skip512 S12451C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12451C1  {
  int s12451c1f0;
  ::S12451C2_nt s12451c1f1[2];
};
//SIG(1 S12451C1) C1{ Fi FC2{ Fi[2]}[2]}



static void Test_S12451C1()
{
  {
    init_simple_test("S12451C1");
    S12451C1 lv;
    check2(sizeof(lv), 20, "sizeof(S12451C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12451C1)");
    check_field_offset(lv, s12451c1f0, 0, "S12451C1.s12451c1f0");
    check_field_offset(lv, s12451c1f1, 4, "S12451C1.s12451c1f1");
  }
}
static Arrange_To_Call_Me vS12451C1(Test_S12451C1, "S12451C1", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21642C1  {
  int s21642c1f0[2];
  char s21642c1f1;
  short s21642c1f2;
  void  mf21642c1(); // _ZN8S21642C19mf21642c1Ev
  virtual  ~S21642C1(); // _ZN8S21642C1D1Ev
  S21642C1(); // tgen
};
//SIG(1 S21642C1) C1{ vd m Fi[2] Fc Fs}


void  S21642C1 ::mf21642c1(){}
 S21642C1 ::~S21642C1(){ note_dtor("S21642C1", this);}
S21642C1 ::S21642C1(){ note_ctor("S21642C1", this);} // tgen

static void Test_S21642C1()
{
  extern Class_Descriptor cd_S21642C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S21642C1, buf);
    S21642C1 *dp, &lv = *(dp=new (buf) S21642C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S21642C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21642C1)");
    check_field_offset(lv, s21642c1f0, ABISELECT(8,4), "S21642C1.s21642c1f0");
    check_field_offset(lv, s21642c1f1, ABISELECT(16,12), "S21642C1.s21642c1f1");
    check_field_offset(lv, s21642c1f2, ABISELECT(18,14), "S21642C1.s21642c1f2");
    test_class_info(&lv, &cd_S21642C1);
    dp->~S21642C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21642C1(Test_S21642C1, "S21642C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S21642C1C1Ev();
extern void _ZN8S21642C1D1Ev();
Name_Map name_map_S21642C1[] = {
  NSPAIR(_ZN8S21642C1C1Ev),
  NSPAIR(_ZN8S21642C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21642C1[];
extern void _ZN8S21642C1D1Ev();
extern void _ZN8S21642C1D0Ev();
static  VTBL_ENTRY vtc_S21642C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21642C1[0]),
  (VTBL_ENTRY)&_ZN8S21642C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21642C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21642C1[];
extern  VTBL_ENTRY _ZTV8S21642C1[];
Class_Descriptor cd_S21642C1 = {  "S21642C1", // class name
  0,0,//no base classes
  &(vtc_S21642C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S21642C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21642C1),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  S14187C2_nt  {
  void *s14187c2f0[2];
};
//SIG(-1 S14187C2_nt) C1{ Fp[2]}



//skip512 S14187C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14187C1  {
  void *s14187c1f0;
  int s14187c1f1;
  ::S14187C2_nt s14187c1f2;
};
//SIG(1 S14187C1) C1{ Fp Fi FC2{ Fp[2]}}



static void Test_S14187C1()
{
  {
    init_simple_test("S14187C1");
    S14187C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S14187C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14187C1)");
    check_field_offset(lv, s14187c1f0, 0, "S14187C1.s14187c1f0");
    check_field_offset(lv, s14187c1f1, ABISELECT(8,4), "S14187C1.s14187c1f1");
    check_field_offset(lv, s14187c1f2, ABISELECT(16,8), "S14187C1.s14187c1f2");
  }
}
static Arrange_To_Call_Me vS14187C1(Test_S14187C1, "S14187C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14948C1  {
  short s14948c1f0[52];
  char s14948c1f1[1025];
};
//SIG(1 S14948C1) C1{ Fs[52] Fc[1025]}



static void Test_S14948C1()
{
  {
    init_simple_test("S14948C1");
    S14948C1 lv;
    check2(sizeof(lv), 1130, "sizeof(S14948C1)");
    check2(__alignof__(lv), 2, "__alignof__(S14948C1)");
    check_field_offset(lv, s14948c1f0, 0, "S14948C1.s14948c1f0");
    check_field_offset(lv, s14948c1f1, 104, "S14948C1.s14948c1f1");
  }
}
static Arrange_To_Call_Me vS14948C1(Test_S14948C1, "S14948C1", 1130);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13246C1  {
  int s13246c1f0[2];
  void *s13246c1f1[5];
  int s13246c1f2;
};
//SIG(1 S13246C1) C1{ Fi[2] Fp[5] Fi}



static void Test_S13246C1()
{
  {
    init_simple_test("S13246C1");
    S13246C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S13246C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13246C1)");
    check_field_offset(lv, s13246c1f0, 0, "S13246C1.s13246c1f0");
    check_field_offset(lv, s13246c1f1, 8, "S13246C1.s13246c1f1");
    check_field_offset(lv, s13246c1f2, ABISELECT(48,28), "S13246C1.s13246c1f2");
  }
}
static Arrange_To_Call_Me vS13246C1(Test_S13246C1, "S13246C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13925C1  {
  long s13925c1f0[2];
  int s13925c1f1;
  long s13925c1f2[2];
};
//SIG(1 S13925C1) C1{ Fl[2] Fi Fl[2]}



static void Test_S13925C1()
{
  {
    init_simple_test("S13925C1");
    S13925C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S13925C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13925C1)");
    check_field_offset(lv, s13925c1f0, 0, "S13925C1.s13925c1f0");
    check_field_offset(lv, s13925c1f1, ABISELECT(16,8), "S13925C1.s13925c1f1");
    check_field_offset(lv, s13925c1f2, ABISELECT(24,12), "S13925C1.s13925c1f2");
  }
}
static Arrange_To_Call_Me vS13925C1(Test_S13925C1, "S13925C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14536C1  {
  void *s14536c1f0[2];
  int s14536c1f1[2];
  long s14536c1f2;
};
//SIG(1 S14536C1) C1{ Fp[2] Fi[2] Fl}



static void Test_S14536C1()
{
  {
    init_simple_test("S14536C1");
    S14536C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S14536C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14536C1)");
    check_field_offset(lv, s14536c1f0, 0, "S14536C1.s14536c1f0");
    check_field_offset(lv, s14536c1f1, ABISELECT(16,8), "S14536C1.s14536c1f1");
    check_field_offset(lv, s14536c1f2, ABISELECT(24,16), "S14536C1.s14536c1f2");
  }
}
static Arrange_To_Call_Me vS14536C1(Test_S14536C1, "S14536C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14434C1  {
  void *s14434c1f0[102];
  int s14434c1f1;
  void *s14434c1f2;
};
//SIG(1 S14434C1) C1{ Fp[102] Fi Fp}



static void Test_S14434C1()
{
  {
    init_simple_test("S14434C1");
    S14434C1 lv;
    check2(sizeof(lv), ABISELECT(832,416), "sizeof(S14434C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14434C1)");
    check_field_offset(lv, s14434c1f0, 0, "S14434C1.s14434c1f0");
    check_field_offset(lv, s14434c1f1, ABISELECT(816,408), "S14434C1.s14434c1f1");
    check_field_offset(lv, s14434c1f2, ABISELECT(824,412), "S14434C1.s14434c1f2");
  }
}
static Arrange_To_Call_Me vS14434C1(Test_S14434C1, "S14434C1", ABISELECT(832,416));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S13140C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13140C1  {
  int s13140c1f0[2];
  ::S13140C2_nt s13140c1f1;
  void *s13140c1f2;
};
//SIG(1 S13140C1) C1{ Fi[2] FC2{} Fp}



static void Test_S13140C1()
{
  {
    init_simple_test("S13140C1");
    S13140C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S13140C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13140C1)");
    check_field_offset(lv, s13140c1f0, 0, "S13140C1.s13140c1f0");
    check_field_offset(lv, s13140c1f1, 8, "S13140C1.s13140c1f1");
    check_field_offset(lv, s13140c1f2, ABISELECT(16,12), "S13140C1.s13140c1f2");
  }
}
static Arrange_To_Call_Me vS13140C1(Test_S13140C1, "S13140C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6201C1  : S19863C10 {
  int s6201c1f0[17];
};
//SIG(1 S6201C1) C1{ BC2{ m} Fi[17]}



static void Test_S6201C1()
{
  extern Class_Descriptor cd_S6201C1;
  void *lvp;
  {
    int buf[18];
    init_test(&cd_S6201C1, buf);
    S6201C1 &lv = *(new (buf) S6201C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 68, "sizeof(S6201C1)");
    check2(__alignof__(lv), 4, "__alignof__(S6201C1)");
    check_base_class_offset(lv, (S19863C10*), 0, "S6201C1");
    check_field_offset(lv, s6201c1f0, 0, "S6201C1.s6201c1f0");
    test_class_info(&lv, &cd_S6201C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6201C1(Test_S6201C1, "S6201C1", 68);

#else // __cplusplus

extern Class_Descriptor cd_S19863C10;
extern VTBL_ENTRY _ZTI9S19863C10[];
static Base_Class bases_S6201C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19863C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6201C1 = {  "S6201C1", // class name
  bases_S6201C1, 1,
  0, // no vftv
  0, //no vtt
  68, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13054C1  {
  int s13054c1f0[2];
  char s13054c1f1[56];
};
//SIG(1 S13054C1) C1{ Fi[2] Fc[56]}



static void Test_S13054C1()
{
  {
    init_simple_test("S13054C1");
    S13054C1 lv;
    check2(sizeof(lv), 64, "sizeof(S13054C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13054C1)");
    check_field_offset(lv, s13054c1f0, 0, "S13054C1.s13054c1f0");
    check_field_offset(lv, s13054c1f1, 8, "S13054C1.s13054c1f1");
  }
}
static Arrange_To_Call_Me vS13054C1(Test_S13054C1, "S13054C1", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18473C1  {
  char s18473c1f0[2];
  int s18473c1f1;
  virtual void  v1(); // _ZN8S18473C12v1Ev
  ~S18473C1(); // tgen
  S18473C1(); // tgen
};
//SIG(1 S18473C1) C1{ v1 Fc[2] Fi}


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

static void Test_S18473C1()
{
  extern Class_Descriptor cd_S18473C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S18473C1, buf);
    S18473C1 *dp, &lv = *(dp=new (buf) S18473C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S18473C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18473C1)");
    check_field_offset(lv, s18473c1f0, ABISELECT(8,4), "S18473C1.s18473c1f0");
    check_field_offset(lv, s18473c1f1, ABISELECT(12,8), "S18473C1.s18473c1f1");
    test_class_info(&lv, &cd_S18473C1);
    dp->~S18473C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18473C1(Test_S18473C1, "S18473C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S18473C1C1Ev();
extern void _ZN8S18473C1D1Ev();
Name_Map name_map_S18473C1[] = {
  NSPAIR(_ZN8S18473C1C1Ev),
  NSPAIR(_ZN8S18473C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18473C1[];
extern void _ZN8S18473C12v1Ev();
static  VTBL_ENTRY vtc_S18473C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18473C1[0]),
  (VTBL_ENTRY)&_ZN8S18473C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18473C1[];
extern  VTBL_ENTRY _ZTV8S18473C1[];
Class_Descriptor cd_S18473C1 = {  "S18473C1", // class name
  0,0,//no base classes
  &(vtc_S18473C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S18473C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18473C1),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  S10899C1  {
  char s10899c1f0[4];
  int s10899c1f1;
  __tsi64 s10899c1f2;
};
//SIG(1 S10899C1) C1{ Fc[4] Fi FL}



static void Test_S10899C1()
{
  {
    init_simple_test("S10899C1");
    S10899C1 lv;
    check2(sizeof(lv), 16, "sizeof(S10899C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10899C1)");
    check_field_offset(lv, s10899c1f0, 0, "S10899C1.s10899c1f0");
    check_field_offset(lv, s10899c1f1, 4, "S10899C1.s10899c1f1");
    check_field_offset(lv, s10899c1f2, 8, "S10899C1.s10899c1f2");
  }
}
static Arrange_To_Call_Me vS10899C1(Test_S10899C1, "S10899C1", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14553C1  {
  void *s14553c1f0[2];
  int s14553c1f1[5];
};
//SIG(1 S14553C1) C1{ Fp[2] Fi[5]}



static void Test_S14553C1()
{
  {
    init_simple_test("S14553C1");
    S14553C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S14553C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14553C1)");
    check_field_offset(lv, s14553c1f0, 0, "S14553C1.s14553c1f0");
    check_field_offset(lv, s14553c1f1, ABISELECT(16,8), "S14553C1.s14553c1f1");
  }
}
static Arrange_To_Call_Me vS14553C1(Test_S14553C1, "S14553C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17372C1  {
  __tsi64 s17372c1f0;
  void *s17372c1f1;
  char s17372c1f2;
  void  mf17372c1(); // _ZN8S17372C19mf17372c1Ev
};
//SIG(1 S17372C1) C1{ m FL Fp Fc}


void  S17372C1 ::mf17372c1(){}

static void Test_S17372C1()
{
  {
    init_simple_test("S17372C1");
    S17372C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S17372C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17372C1)");
    check_field_offset(lv, s17372c1f0, 0, "S17372C1.s17372c1f0");
    check_field_offset(lv, s17372c1f1, 8, "S17372C1.s17372c1f1");
    check_field_offset(lv, s17372c1f2, ABISELECT(16,12), "S17372C1.s17372c1f2");
  }
}
static Arrange_To_Call_Me vS17372C1(Test_S17372C1, "S17372C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12942C1  {
  int s12942c1f0:8;
  int s12942c1f1:8;
};
//SIG(1 S12942C1) C1{ Fi:8 Fi:8}



static void Test_S12942C1()
{
  {
    init_simple_test("S12942C1");
    static S12942C1 lv;
    check2(sizeof(lv), 4, "sizeof(S12942C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12942C1)");
    set_bf_and_test(lv, s12942c1f0, 0, 0, 8, 1, "S12942C1");
    set_bf_and_test(lv, s12942c1f0, 0, 0, 8, hide_sll(1LL<<7), "S12942C1");
    set_bf_and_test(lv, s12942c1f1, 1, 0, 8, 1, "S12942C1");
    set_bf_and_test(lv, s12942c1f1, 1, 0, 8, hide_sll(1LL<<7), "S12942C1");
  }
}
static Arrange_To_Call_Me vS12942C1(Test_S12942C1, "S12942C1", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12646C1  {
  int s12646c1f0;
  long s12646c1f1[4];
};
//SIG(1 S12646C1) C1{ Fi Fl[4]}



static void Test_S12646C1()
{
  {
    init_simple_test("S12646C1");
    S12646C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S12646C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12646C1)");
    check_field_offset(lv, s12646c1f0, 0, "S12646C1.s12646c1f0");
    check_field_offset(lv, s12646c1f1, ABISELECT(8,4), "S12646C1.s12646c1f1");
  }
}
static Arrange_To_Call_Me vS12646C1(Test_S12646C1, "S12646C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17850C1  {
  void *s17850c1f0[15];
  void  mf17850c1(); // _ZN8S17850C19mf17850c1Ev
};
//SIG(1 S17850C1) C1{ m Fp[15]}


void  S17850C1 ::mf17850c1(){}

static void Test_S17850C1()
{
  {
    init_simple_test("S17850C1");
    S17850C1 lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S17850C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17850C1)");
    check_field_offset(lv, s17850c1f0, 0, "S17850C1.s17850c1f0");
  }
}
static Arrange_To_Call_Me vS17850C1(Test_S17850C1, "S17850C1", ABISELECT(120,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14442C1  {
  void *s14442c1f0[17];
};
//SIG(1 S14442C1) C1{ Fp[17]}



static void Test_S14442C1()
{
  {
    init_simple_test("S14442C1");
    S14442C1 lv;
    check2(sizeof(lv), ABISELECT(136,68), "sizeof(S14442C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14442C1)");
    check_field_offset(lv, s14442c1f0, 0, "S14442C1.s14442c1f0");
  }
}
static Arrange_To_Call_Me vS14442C1(Test_S14442C1, "S14442C1", ABISELECT(136,68));

#else // __cplusplus

#endif // __cplusplus

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

