// 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  S281C7_nt  {
  int s281c7f0[2];
  void  mf281c7(); // _ZN9S281C7_nt7mf281c7Ev
};
//SIG(-1 S281C7_nt) C1{ m Fi[2]}


void  S281C7_nt ::mf281c7(){}

//skip512 S281C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S281C6_nt  {
  int s281c6f0;
  __tsi64 s281c6f1;
  void *s281c6f2[4];
  int s281c6f3[2];
  void *s281c6f4;
  ::S281C7_nt s281c6f5;
  void *s281c6f6[2];
  virtual  ~S281C6_nt(); // _ZN9S281C6_ntD1Ev
  virtual void  v8(); // _ZN9S281C6_nt2v8Ev
  virtual void  v9(); // _ZN9S281C6_nt2v9Ev
  virtual void  v10(); // _ZN9S281C6_nt3v10Ev
  virtual void  v11(); // _ZN9S281C6_nt3v11Ev
  virtual void  v12(); // _ZN9S281C6_nt3v12Ev
  virtual void  v13(); // _ZN9S281C6_nt3v13Ev
  virtual void  v14(); // _ZN9S281C6_nt3v14Ev
  virtual void  v15(); // _ZN9S281C6_nt3v15Ev
  virtual void  v16(); // _ZN9S281C6_nt3v16Ev
  virtual void  v17(); // _ZN9S281C6_nt3v17Ev
  virtual void  v18(); // _ZN9S281C6_nt3v18Ev
  virtual void  v19(); // _ZN9S281C6_nt3v19Ev
  virtual void  v20(); // _ZN9S281C6_nt3v20Ev
  virtual void  v21(); // _ZN9S281C6_nt3v21Ev
  virtual void  v22(); // _ZN9S281C6_nt3v22Ev
  virtual void  v23(); // _ZN9S281C6_nt3v23Ev
  virtual void  v24(); // _ZN9S281C6_nt3v24Ev
  virtual void  v25(); // _ZN9S281C6_nt3v25Ev
  virtual void  v26(); // _ZN9S281C6_nt3v26Ev
  virtual void  v27(); // _ZN9S281C6_nt3v27Ev
  virtual void  v28(); // _ZN9S281C6_nt3v28Ev
  virtual void  v29(); // _ZN9S281C6_nt3v29Ev
  virtual void  v30(); // _ZN9S281C6_nt3v30Ev
  virtual void  v31(); // _ZN9S281C6_nt3v31Ev
  virtual void  v32(); // _ZN9S281C6_nt3v32Ev
  virtual void  v33(); // _ZN9S281C6_nt3v33Ev
  virtual void  v34(); // _ZN9S281C6_nt3v34Ev
  virtual void  v35(); // _ZN9S281C6_nt3v35Ev
  virtual void  v36(); // _ZN9S281C6_nt3v36Ev
  virtual void  v37(); // _ZN9S281C6_nt3v37Ev
  virtual void  v38(); // _ZN9S281C6_nt3v38Ev
  virtual void  v39(); // _ZN9S281C6_nt3v39Ev
  virtual void  v40(); // _ZN9S281C6_nt3v40Ev
  virtual void  v41(); // _ZN9S281C6_nt3v41Ev
  virtual void  v42(); // _ZN9S281C6_nt3v42Ev
  virtual void  v43(); // _ZN9S281C6_nt3v43Ev
  virtual void  v44(); // _ZN9S281C6_nt3v44Ev
  virtual void  v45(); // _ZN9S281C6_nt3v45Ev
  virtual void  v46(); // _ZN9S281C6_nt3v46Ev
  virtual void  v47(); // _ZN9S281C6_nt3v47Ev
  virtual void  v48(); // _ZN9S281C6_nt3v48Ev
  virtual void  v49(); // _ZN9S281C6_nt3v49Ev
  virtual void  v50(); // _ZN9S281C6_nt3v50Ev
  virtual void  v51(); // _ZN9S281C6_nt3v51Ev
  virtual void  v52(); // _ZN9S281C6_nt3v52Ev
  virtual void  v53(); // _ZN9S281C6_nt3v53Ev
  virtual void  v54(); // _ZN9S281C6_nt3v54Ev
  virtual void  v55(); // _ZN9S281C6_nt3v55Ev
  virtual void  v56(); // _ZN9S281C6_nt3v56Ev
  virtual void  v57(); // _ZN9S281C6_nt3v57Ev
  virtual void  v58(); // _ZN9S281C6_nt3v58Ev
  virtual void  v59(); // _ZN9S281C6_nt3v59Ev
  virtual void  v60(); // _ZN9S281C6_nt3v60Ev
  virtual void  v61(); // _ZN9S281C6_nt3v61Ev
  virtual void  v62(); // _ZN9S281C6_nt3v62Ev
  virtual void  v63(); // _ZN9S281C6_nt3v63Ev
  virtual void  v64(); // _ZN9S281C6_nt3v64Ev
  virtual void  v65(); // _ZN9S281C6_nt3v65Ev
  virtual void  v66(); // _ZN9S281C6_nt3v66Ev
  virtual void  v67(); // _ZN9S281C6_nt3v67Ev
  virtual void  v68(); // _ZN9S281C6_nt3v68Ev
  virtual void  v69(); // _ZN9S281C6_nt3v69Ev
  virtual void  v70(); // _ZN9S281C6_nt3v70Ev
  virtual void  v71(); // _ZN9S281C6_nt3v71Ev
  S281C6_nt(); // tgen
};
//SIG(-1 S281C6_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]}


 S281C6_nt ::~S281C6_nt(){ note_dtor("S281C6_nt", this);}
void  S281C6_nt ::v8(){vfunc_called(this, "_ZN9S281C6_nt2v8Ev");}
void  S281C6_nt ::v9(){vfunc_called(this, "_ZN9S281C6_nt2v9Ev");}
void  S281C6_nt ::v10(){vfunc_called(this, "_ZN9S281C6_nt3v10Ev");}
void  S281C6_nt ::v11(){vfunc_called(this, "_ZN9S281C6_nt3v11Ev");}
void  S281C6_nt ::v12(){vfunc_called(this, "_ZN9S281C6_nt3v12Ev");}
void  S281C6_nt ::v13(){vfunc_called(this, "_ZN9S281C6_nt3v13Ev");}
void  S281C6_nt ::v14(){vfunc_called(this, "_ZN9S281C6_nt3v14Ev");}
void  S281C6_nt ::v15(){vfunc_called(this, "_ZN9S281C6_nt3v15Ev");}
void  S281C6_nt ::v16(){vfunc_called(this, "_ZN9S281C6_nt3v16Ev");}
void  S281C6_nt ::v17(){vfunc_called(this, "_ZN9S281C6_nt3v17Ev");}
void  S281C6_nt ::v18(){vfunc_called(this, "_ZN9S281C6_nt3v18Ev");}
void  S281C6_nt ::v19(){vfunc_called(this, "_ZN9S281C6_nt3v19Ev");}
void  S281C6_nt ::v20(){vfunc_called(this, "_ZN9S281C6_nt3v20Ev");}
void  S281C6_nt ::v21(){vfunc_called(this, "_ZN9S281C6_nt3v21Ev");}
void  S281C6_nt ::v22(){vfunc_called(this, "_ZN9S281C6_nt3v22Ev");}
void  S281C6_nt ::v23(){vfunc_called(this, "_ZN9S281C6_nt3v23Ev");}
void  S281C6_nt ::v24(){vfunc_called(this, "_ZN9S281C6_nt3v24Ev");}
void  S281C6_nt ::v25(){vfunc_called(this, "_ZN9S281C6_nt3v25Ev");}
void  S281C6_nt ::v26(){vfunc_called(this, "_ZN9S281C6_nt3v26Ev");}
void  S281C6_nt ::v27(){vfunc_called(this, "_ZN9S281C6_nt3v27Ev");}
void  S281C6_nt ::v28(){vfunc_called(this, "_ZN9S281C6_nt3v28Ev");}
void  S281C6_nt ::v29(){vfunc_called(this, "_ZN9S281C6_nt3v29Ev");}
void  S281C6_nt ::v30(){vfunc_called(this, "_ZN9S281C6_nt3v30Ev");}
void  S281C6_nt ::v31(){vfunc_called(this, "_ZN9S281C6_nt3v31Ev");}
void  S281C6_nt ::v32(){vfunc_called(this, "_ZN9S281C6_nt3v32Ev");}
void  S281C6_nt ::v33(){vfunc_called(this, "_ZN9S281C6_nt3v33Ev");}
void  S281C6_nt ::v34(){vfunc_called(this, "_ZN9S281C6_nt3v34Ev");}
void  S281C6_nt ::v35(){vfunc_called(this, "_ZN9S281C6_nt3v35Ev");}
void  S281C6_nt ::v36(){vfunc_called(this, "_ZN9S281C6_nt3v36Ev");}
void  S281C6_nt ::v37(){vfunc_called(this, "_ZN9S281C6_nt3v37Ev");}
void  S281C6_nt ::v38(){vfunc_called(this, "_ZN9S281C6_nt3v38Ev");}
void  S281C6_nt ::v39(){vfunc_called(this, "_ZN9S281C6_nt3v39Ev");}
void  S281C6_nt ::v40(){vfunc_called(this, "_ZN9S281C6_nt3v40Ev");}
void  S281C6_nt ::v41(){vfunc_called(this, "_ZN9S281C6_nt3v41Ev");}
void  S281C6_nt ::v42(){vfunc_called(this, "_ZN9S281C6_nt3v42Ev");}
void  S281C6_nt ::v43(){vfunc_called(this, "_ZN9S281C6_nt3v43Ev");}
void  S281C6_nt ::v44(){vfunc_called(this, "_ZN9S281C6_nt3v44Ev");}
void  S281C6_nt ::v45(){vfunc_called(this, "_ZN9S281C6_nt3v45Ev");}
void  S281C6_nt ::v46(){vfunc_called(this, "_ZN9S281C6_nt3v46Ev");}
void  S281C6_nt ::v47(){vfunc_called(this, "_ZN9S281C6_nt3v47Ev");}
void  S281C6_nt ::v48(){vfunc_called(this, "_ZN9S281C6_nt3v48Ev");}
void  S281C6_nt ::v49(){vfunc_called(this, "_ZN9S281C6_nt3v49Ev");}
void  S281C6_nt ::v50(){vfunc_called(this, "_ZN9S281C6_nt3v50Ev");}
void  S281C6_nt ::v51(){vfunc_called(this, "_ZN9S281C6_nt3v51Ev");}
void  S281C6_nt ::v52(){vfunc_called(this, "_ZN9S281C6_nt3v52Ev");}
void  S281C6_nt ::v53(){vfunc_called(this, "_ZN9S281C6_nt3v53Ev");}
void  S281C6_nt ::v54(){vfunc_called(this, "_ZN9S281C6_nt3v54Ev");}
void  S281C6_nt ::v55(){vfunc_called(this, "_ZN9S281C6_nt3v55Ev");}
void  S281C6_nt ::v56(){vfunc_called(this, "_ZN9S281C6_nt3v56Ev");}
void  S281C6_nt ::v57(){vfunc_called(this, "_ZN9S281C6_nt3v57Ev");}
void  S281C6_nt ::v58(){vfunc_called(this, "_ZN9S281C6_nt3v58Ev");}
void  S281C6_nt ::v59(){vfunc_called(this, "_ZN9S281C6_nt3v59Ev");}
void  S281C6_nt ::v60(){vfunc_called(this, "_ZN9S281C6_nt3v60Ev");}
void  S281C6_nt ::v61(){vfunc_called(this, "_ZN9S281C6_nt3v61Ev");}
void  S281C6_nt ::v62(){vfunc_called(this, "_ZN9S281C6_nt3v62Ev");}
void  S281C6_nt ::v63(){vfunc_called(this, "_ZN9S281C6_nt3v63Ev");}
void  S281C6_nt ::v64(){vfunc_called(this, "_ZN9S281C6_nt3v64Ev");}
void  S281C6_nt ::v65(){vfunc_called(this, "_ZN9S281C6_nt3v65Ev");}
void  S281C6_nt ::v66(){vfunc_called(this, "_ZN9S281C6_nt3v66Ev");}
void  S281C6_nt ::v67(){vfunc_called(this, "_ZN9S281C6_nt3v67Ev");}
void  S281C6_nt ::v68(){vfunc_called(this, "_ZN9S281C6_nt3v68Ev");}
void  S281C6_nt ::v69(){vfunc_called(this, "_ZN9S281C6_nt3v69Ev");}
void  S281C6_nt ::v70(){vfunc_called(this, "_ZN9S281C6_nt3v70Ev");}
void  S281C6_nt ::v71(){vfunc_called(this, "_ZN9S281C6_nt3v71Ev");}
S281C6_nt ::S281C6_nt(){ note_ctor("S281C6_nt", this);} // tgen

//skip512 S281C6_nt

#else // __cplusplus

extern void _ZN9S281C6_ntC1Ev();
extern void _ZN9S281C6_ntD1Ev();
Name_Map name_map_S281C6_nt[] = {
  NSPAIR(_ZN9S281C6_ntC1Ev),
  NSPAIR(_ZN9S281C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S281C6_nt[];
extern void _ZN9S281C6_ntD1Ev();
extern void _ZN9S281C6_ntD0Ev();
extern void _ZN9S281C6_nt2v8Ev();
extern void _ZN9S281C6_nt2v9Ev();
extern void _ZN9S281C6_nt3v10Ev();
extern void _ZN9S281C6_nt3v11Ev();
extern void _ZN9S281C6_nt3v12Ev();
extern void _ZN9S281C6_nt3v13Ev();
extern void _ZN9S281C6_nt3v14Ev();
extern void _ZN9S281C6_nt3v15Ev();
extern void _ZN9S281C6_nt3v16Ev();
extern void _ZN9S281C6_nt3v17Ev();
extern void _ZN9S281C6_nt3v18Ev();
extern void _ZN9S281C6_nt3v19Ev();
extern void _ZN9S281C6_nt3v20Ev();
extern void _ZN9S281C6_nt3v21Ev();
extern void _ZN9S281C6_nt3v22Ev();
extern void _ZN9S281C6_nt3v23Ev();
extern void _ZN9S281C6_nt3v24Ev();
extern void _ZN9S281C6_nt3v25Ev();
extern void _ZN9S281C6_nt3v26Ev();
extern void _ZN9S281C6_nt3v27Ev();
extern void _ZN9S281C6_nt3v28Ev();
extern void _ZN9S281C6_nt3v29Ev();
extern void _ZN9S281C6_nt3v30Ev();
extern void _ZN9S281C6_nt3v31Ev();
extern void _ZN9S281C6_nt3v32Ev();
extern void _ZN9S281C6_nt3v33Ev();
extern void _ZN9S281C6_nt3v34Ev();
extern void _ZN9S281C6_nt3v35Ev();
extern void _ZN9S281C6_nt3v36Ev();
extern void _ZN9S281C6_nt3v37Ev();
extern void _ZN9S281C6_nt3v38Ev();
extern void _ZN9S281C6_nt3v39Ev();
extern void _ZN9S281C6_nt3v40Ev();
extern void _ZN9S281C6_nt3v41Ev();
extern void _ZN9S281C6_nt3v42Ev();
extern void _ZN9S281C6_nt3v43Ev();
extern void _ZN9S281C6_nt3v44Ev();
extern void _ZN9S281C6_nt3v45Ev();
extern void _ZN9S281C6_nt3v46Ev();
extern void _ZN9S281C6_nt3v47Ev();
extern void _ZN9S281C6_nt3v48Ev();
extern void _ZN9S281C6_nt3v49Ev();
extern void _ZN9S281C6_nt3v50Ev();
extern void _ZN9S281C6_nt3v51Ev();
extern void _ZN9S281C6_nt3v52Ev();
extern void _ZN9S281C6_nt3v53Ev();
extern void _ZN9S281C6_nt3v54Ev();
extern void _ZN9S281C6_nt3v55Ev();
extern void _ZN9S281C6_nt3v56Ev();
extern void _ZN9S281C6_nt3v57Ev();
extern void _ZN9S281C6_nt3v58Ev();
extern void _ZN9S281C6_nt3v59Ev();
extern void _ZN9S281C6_nt3v60Ev();
extern void _ZN9S281C6_nt3v61Ev();
extern void _ZN9S281C6_nt3v62Ev();
extern void _ZN9S281C6_nt3v63Ev();
extern void _ZN9S281C6_nt3v64Ev();
extern void _ZN9S281C6_nt3v65Ev();
extern void _ZN9S281C6_nt3v66Ev();
extern void _ZN9S281C6_nt3v67Ev();
extern void _ZN9S281C6_nt3v68Ev();
extern void _ZN9S281C6_nt3v69Ev();
extern void _ZN9S281C6_nt3v70Ev();
extern void _ZN9S281C6_nt3v71Ev();
static  VTBL_ENTRY vtc_S281C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S281C6_nt[0]),
  (VTBL_ENTRY)&_ZN9S281C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S281C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v71Ev,
};
extern VTBL_ENTRY _ZTI9S281C6_nt[];
VTBL_ENTRY *P__ZTI9S281C6_nt = _ZTI9S281C6_nt; 
extern  VTBL_ENTRY _ZTV9S281C6_nt[];
Class_Descriptor cd_S281C6_nt = {  "S281C6_nt", // class name
  0,0,//no base classes
  &(vtc_S281C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S281C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S281C6_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  S281C5_nt  : S281C6_nt {
  virtual  ~S281C5_nt(); // _ZN9S281C5_ntD1Ev
  virtual void  v72(); // _ZN9S281C5_nt3v72Ev
  virtual void  v73(); // _ZN9S281C5_nt3v73Ev
  S281C5_nt(); // tgen
};
//SIG(-1 S281C5_nt) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2}


 S281C5_nt ::~S281C5_nt(){ note_dtor("S281C5_nt", this);}
void  S281C5_nt ::v72(){vfunc_called(this, "_ZN9S281C5_nt3v72Ev");}
void  S281C5_nt ::v73(){vfunc_called(this, "_ZN9S281C5_nt3v73Ev");}
S281C5_nt ::S281C5_nt(){ note_ctor("S281C5_nt", this);} // tgen

//skip512 S281C5_nt

#else // __cplusplus

extern void _ZN9S281C5_ntC1Ev();
extern void _ZN9S281C5_ntD1Ev();
Name_Map name_map_S281C5_nt[] = {
  NSPAIR(_ZN9S281C5_ntC1Ev),
  NSPAIR(_ZN9S281C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S281C6_nt;
extern VTBL_ENTRY _ZTI9S281C6_nt[];
extern  VTBL_ENTRY _ZTV9S281C6_nt[];
static Base_Class bases_S281C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S281C5_nt[];
extern void _ZN9S281C5_ntD1Ev();
extern void _ZN9S281C5_ntD0Ev();
extern void _ZN9S281C6_nt2v8Ev();
extern void _ZN9S281C6_nt2v9Ev();
extern void _ZN9S281C6_nt3v10Ev();
extern void _ZN9S281C6_nt3v11Ev();
extern void _ZN9S281C6_nt3v12Ev();
extern void _ZN9S281C6_nt3v13Ev();
extern void _ZN9S281C6_nt3v14Ev();
extern void _ZN9S281C6_nt3v15Ev();
extern void _ZN9S281C6_nt3v16Ev();
extern void _ZN9S281C6_nt3v17Ev();
extern void _ZN9S281C6_nt3v18Ev();
extern void _ZN9S281C6_nt3v19Ev();
extern void _ZN9S281C6_nt3v20Ev();
extern void _ZN9S281C6_nt3v21Ev();
extern void _ZN9S281C6_nt3v22Ev();
extern void _ZN9S281C6_nt3v23Ev();
extern void _ZN9S281C6_nt3v24Ev();
extern void _ZN9S281C6_nt3v25Ev();
extern void _ZN9S281C6_nt3v26Ev();
extern void _ZN9S281C6_nt3v27Ev();
extern void _ZN9S281C6_nt3v28Ev();
extern void _ZN9S281C6_nt3v29Ev();
extern void _ZN9S281C6_nt3v30Ev();
extern void _ZN9S281C6_nt3v31Ev();
extern void _ZN9S281C6_nt3v32Ev();
extern void _ZN9S281C6_nt3v33Ev();
extern void _ZN9S281C6_nt3v34Ev();
extern void _ZN9S281C6_nt3v35Ev();
extern void _ZN9S281C6_nt3v36Ev();
extern void _ZN9S281C6_nt3v37Ev();
extern void _ZN9S281C6_nt3v38Ev();
extern void _ZN9S281C6_nt3v39Ev();
extern void _ZN9S281C6_nt3v40Ev();
extern void _ZN9S281C6_nt3v41Ev();
extern void _ZN9S281C6_nt3v42Ev();
extern void _ZN9S281C6_nt3v43Ev();
extern void _ZN9S281C6_nt3v44Ev();
extern void _ZN9S281C6_nt3v45Ev();
extern void _ZN9S281C6_nt3v46Ev();
extern void _ZN9S281C6_nt3v47Ev();
extern void _ZN9S281C6_nt3v48Ev();
extern void _ZN9S281C6_nt3v49Ev();
extern void _ZN9S281C6_nt3v50Ev();
extern void _ZN9S281C6_nt3v51Ev();
extern void _ZN9S281C6_nt3v52Ev();
extern void _ZN9S281C6_nt3v53Ev();
extern void _ZN9S281C6_nt3v54Ev();
extern void _ZN9S281C6_nt3v55Ev();
extern void _ZN9S281C6_nt3v56Ev();
extern void _ZN9S281C6_nt3v57Ev();
extern void _ZN9S281C6_nt3v58Ev();
extern void _ZN9S281C6_nt3v59Ev();
extern void _ZN9S281C6_nt3v60Ev();
extern void _ZN9S281C6_nt3v61Ev();
extern void _ZN9S281C6_nt3v62Ev();
extern void _ZN9S281C6_nt3v63Ev();
extern void _ZN9S281C6_nt3v64Ev();
extern void _ZN9S281C6_nt3v65Ev();
extern void _ZN9S281C6_nt3v66Ev();
extern void _ZN9S281C6_nt3v67Ev();
extern void _ZN9S281C6_nt3v68Ev();
extern void _ZN9S281C6_nt3v69Ev();
extern void _ZN9S281C6_nt3v70Ev();
extern void _ZN9S281C6_nt3v71Ev();
extern void _ZN9S281C5_nt3v72Ev();
extern void _ZN9S281C5_nt3v73Ev();
static  VTBL_ENTRY vtc_S281C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S281C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S281C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S281C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S281C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S281C5_nt3v73Ev,
};
extern VTBL_ENTRY _ZTI9S281C5_nt[];
VTBL_ENTRY *P__ZTI9S281C5_nt = _ZTI9S281C5_nt; 
extern  VTBL_ENTRY _ZTV9S281C5_nt[];
Class_Descriptor cd_S281C5_nt = {  "S281C5_nt", // class name
  bases_S281C5_nt, 1,
  &(vtc_S281C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S281C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S281C5_nt),70, //virtual function table var
  2, // 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  S281C8_nt  {
  int s281c8f0[4];
  char s281c8f1[9];
  void  mf281c8(); // _ZN9S281C8_nt7mf281c8Ev
};
//SIG(-1 S281C8_nt) C1{ m Fi[4] Fc[9]}


void  S281C8_nt ::mf281c8(){}

//skip512 S281C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S281C11_nt  {
  void *s281c11f0;
  int s281c11f1[2];
  void  mf281c11(); // _ZN10S281C11_nt8mf281c11Ev
};
//SIG(-1 S281C11_nt) C1{ m Fp Fi[2]}


void  S281C11_nt ::mf281c11(){}

//skip512 S281C11_nt

#else // __cplusplus

Class_Descriptor cd_S281C11_nt = {  "S281C11_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  S281C10_nt  : S281C11_nt {
};
//SIG(-1 S281C10_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S281C10_nt

#else // __cplusplus

extern Class_Descriptor cd_S281C11_nt;
static Base_Class bases_S281C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S281C10_nt = {  "S281C10_nt", // class name
  bases_S281C10_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  S281C9_nt  : S281C10_nt {
};
//SIG(-1 S281C9_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S281C9_nt

#else // __cplusplus

extern Class_Descriptor cd_S281C11_nt;
extern Class_Descriptor cd_S281C10_nt;
static Base_Class bases_S281C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S281C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S281C15  : S281C11_nt {
};
//SIG(-1 S281C15) C1{ BC2{ m Fp Fi[2]}}



static void Test_S281C15()
{
  extern Class_Descriptor cd_S281C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S281C15, buf);
    S281C15 &lv = *(new (buf) S281C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S281C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S281C15)");
    check_base_class_offset(lv, (S281C11_nt*), 0, "S281C15");
    test_class_info(&lv, &cd_S281C15);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS281C15(Test_S281C15, "S281C15", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S281C11_nt;
static Base_Class bases_S281C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S281C15 = {  "S281C15", // class name
  bases_S281C15, 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  S281C14  : S281C15 {
};
//SIG(-1 S281C14) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S281C14()
{
  extern Class_Descriptor cd_S281C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S281C14, buf);
    S281C14 &lv = *(new (buf) S281C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S281C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S281C14)");
    check_base_class_offset(lv, (S281C11_nt*)(S281C15*), 0, "S281C14");
    check_base_class_offset(lv, (S281C15*), 0, "S281C14");
    test_class_info(&lv, &cd_S281C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS281C14(Test_S281C14, "S281C14", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S281C11_nt;
extern Class_Descriptor cd_S281C15;
static Base_Class bases_S281C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S281C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S281C14 = {  "S281C14", // class name
  bases_S281C14, 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  S281C19  : S281C11_nt {
};
//SIG(-1 S281C19) C1{ BC2{ m Fp Fi[2]}}



static void Test_S281C19()
{
  extern Class_Descriptor cd_S281C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S281C19, buf);
    S281C19 &lv = *(new (buf) S281C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S281C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S281C19)");
    check_base_class_offset(lv, (S281C11_nt*), 0, "S281C19");
    test_class_info(&lv, &cd_S281C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS281C19(Test_S281C19, "S281C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S281C11_nt;
static Base_Class bases_S281C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S281C19 = {  "S281C19", // class name
  bases_S281C19, 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  S281C18  : S281C19 {
};
//SIG(-1 S281C18) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S281C18()
{
  extern Class_Descriptor cd_S281C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S281C18, buf);
    S281C18 &lv = *(new (buf) S281C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S281C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S281C18)");
    check_base_class_offset(lv, (S281C11_nt*)(S281C19*), 0, "S281C18");
    check_base_class_offset(lv, (S281C19*), 0, "S281C18");
    test_class_info(&lv, &cd_S281C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS281C18(Test_S281C18, "S281C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S281C11_nt;
extern Class_Descriptor cd_S281C19;
static Base_Class bases_S281C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S281C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S281C18 = {  "S281C18", // class name
  bases_S281C18, 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  S281C20_nt  {
  void *s281c20f0;
  ::S281C7_nt s281c20f1;
  void  mf281c20(); // _ZN10S281C20_nt8mf281c20Ev
};
//SIG(-1 S281C20_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S281C20_nt ::mf281c20(){}

//skip512 S281C20_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S281C4_nt  : S281C5_nt {
  ::S281C8_nt s281c4f0;
  int s281c4f1;
  unsigned int s281c4f2:1;
  unsigned int s281c4f3:1;
  unsigned int s281c4f4:1;
  unsigned int s281c4f5:1;
  ::S281C9_nt s281c4f6;
  ::S281C9_nt s281c4f7;
  void *s281c4f8;
  ::S281C14 s281c4f9;
  ::S281C14 s281c4f10;
  ::S281C14 s281c4f11;
  ::S281C18 s281c4f12;
  char s281c4f13;
  int s281c4f14;
  void *s281c4f15;
  ::S281C7_nt s281c4f16;
  ::S281C7_nt s281c4f17;
  ::S281C7_nt s281c4f18;
  ::S281C7_nt s281c4f19;
  ::S281C7_nt s281c4f20;
  ::S281C7_nt s281c4f21;
  ::S281C20_nt s281c4f22;
  ::S281C20_nt s281c4f23;
  ::S281C20_nt s281c4f24;
  ::S281C20_nt s281c4f25;
  ::S281C20_nt s281c4f26;
  ::S281C20_nt s281c4f27;
  ::S281C20_nt s281c4f28;
  ::S281C20_nt s281c4f29;
  ::S281C20_nt s281c4f30;
  ::S281C20_nt s281c4f31;
  virtual  ~S281C4_nt(); // _ZN9S281C4_ntD1Ev
  virtual void  v74(); // _ZN9S281C4_nt3v74Ev
  virtual void  v75(); // _ZN9S281C4_nt3v75Ev
  virtual void  v76(); // _ZN9S281C4_nt3v76Ev
  virtual void  v77(); // _ZN9S281C4_nt3v77Ev
  virtual void  v78(); // _ZN9S281C4_nt3v78Ev
  virtual void  v79(); // _ZN9S281C4_nt3v79Ev
  virtual void  v80(); // _ZN9S281C4_nt3v80Ev
  virtual void  v81(); // _ZN9S281C4_nt3v81Ev
  virtual void  v82(); // _ZN9S281C4_nt3v82Ev
  virtual void  v83(); // _ZN9S281C4_nt3v83Ev
  virtual void  v84(); // _ZN9S281C4_nt3v84Ev
  virtual void  v85(); // _ZN9S281C4_nt3v85Ev
  virtual void  v86(); // _ZN9S281C4_nt3v86Ev
  virtual void  v87(); // _ZN9S281C4_nt3v87Ev
  virtual void  v88(); // _ZN9S281C4_nt3v88Ev
  virtual void  v89(); // _ZN9S281C4_nt3v89Ev
  virtual void  v90(); // _ZN9S281C4_nt3v90Ev
  virtual void  v91(); // _ZN9S281C4_nt3v91Ev
  virtual void  v92(); // _ZN9S281C4_nt3v92Ev
  virtual void  v93(); // _ZN9S281C4_nt3v93Ev
  virtual void  v94(); // _ZN9S281C4_nt3v94Ev
  virtual void  v95(); // _ZN9S281C4_nt3v95Ev
  virtual void  v96(); // _ZN9S281C4_nt3v96Ev
  virtual void  v97(); // _ZN9S281C4_nt3v97Ev
  virtual void  v98(); // _ZN9S281C4_nt3v98Ev
  virtual void  v99(); // _ZN9S281C4_nt3v99Ev
  virtual void  v100(); // _ZN9S281C4_nt4v100Ev
  virtual void  v101(); // _ZN9S281C4_nt4v101Ev
  virtual void  v102(); // _ZN9S281C4_nt4v102Ev
  virtual void  v103(); // _ZN9S281C4_nt4v103Ev
  virtual void  v104(); // _ZN9S281C4_nt4v104Ev
  virtual void  v105(); // _ZN9S281C4_nt4v105Ev
  virtual void  v106(); // _ZN9S281C4_nt4v106Ev
  virtual void  v107(); // _ZN9S281C4_nt4v107Ev
  virtual void  v108(); // _ZN9S281C4_nt4v108Ev
  virtual void  v109(); // _ZN9S281C4_nt4v109Ev
  virtual void  v110(); // _ZN9S281C4_nt4v110Ev
  virtual void  v111(); // _ZN9S281C4_nt4v111Ev
  virtual void  v112(); // _ZN9S281C4_nt4v112Ev
  virtual void  v113(); // _ZN9S281C4_nt4v113Ev
  virtual void  v114(); // _ZN9S281C4_nt4v114Ev
  virtual void  v115(); // _ZN9S281C4_nt4v115Ev
  virtual void  v116(); // _ZN9S281C4_nt4v116Ev
  virtual void  v117(); // _ZN9S281C4_nt4v117Ev
  virtual void  v118(); // _ZN9S281C4_nt4v118Ev
  virtual void  v119(); // _ZN9S281C4_nt4v119Ev
  virtual void  v120(); // _ZN9S281C4_nt4v120Ev
  virtual void  v121(); // _ZN9S281C4_nt4v121Ev
  virtual void  v122(); // _ZN9S281C4_nt4v122Ev
  virtual void  v123(); // _ZN9S281C4_nt4v123Ev
  virtual void  v124(); // _ZN9S281C4_nt4v124Ev
  virtual void  v125(); // _ZN9S281C4_nt4v125Ev
  virtual void  v126(); // _ZN9S281C4_nt4v126Ev
  virtual void  v127(); // _ZN9S281C4_nt4v127Ev
  virtual void  v128(); // _ZN9S281C4_nt4v128Ev
  virtual void  v129(); // _ZN9S281C4_nt4v129Ev
  virtual void  v130(); // _ZN9S281C4_nt4v130Ev
  virtual void  v131(); // _ZN9S281C4_nt4v131Ev
  virtual void  v132(); // _ZN9S281C4_nt4v132Ev
  virtual void  v133(); // _ZN9S281C4_nt4v133Ev
  virtual void  v134(); // _ZN9S281C4_nt4v134Ev
  virtual void  v135(); // _ZN9S281C4_nt4v135Ev
  virtual void  v136(); // _ZN9S281C4_nt4v136Ev
  virtual void  v137(); // _ZN9S281C4_nt4v137Ev
  virtual void  v138(); // _ZN9S281C4_nt4v138Ev
  virtual void  v139(); // _ZN9S281C4_nt4v139Ev
  virtual void  v140(); // _ZN9S281C4_nt4v140Ev
  virtual void  v141(); // _ZN9S281C4_nt4v141Ev
  virtual void  v142(); // _ZN9S281C4_nt4v142Ev
  virtual void  v143(); // _ZN9S281C4_nt4v143Ev
  virtual void  v144(); // _ZN9S281C4_nt4v144Ev
  virtual void  v145(); // _ZN9S281C4_nt4v145Ev
  virtual void  v146(); // _ZN9S281C4_nt4v146Ev
  virtual void  v147(); // _ZN9S281C4_nt4v147Ev
  virtual void  v148(); // _ZN9S281C4_nt4v148Ev
  virtual void  v149(); // _ZN9S281C4_nt4v149Ev
  S281C4_nt(); // tgen
};
//SIG(-1 S281C4_nt) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v141 v142} 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 FC5{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC6 Fp FC9{ BC10{ BC8}} FC9 FC9 FC11{ BC12{ BC8}} Fc Fi Fp FC4 FC4 FC4 FC4 FC4 FC4 FC13{ m Fp FC4} FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13}


 S281C4_nt ::~S281C4_nt(){ note_dtor("S281C4_nt", this);}
void  S281C4_nt ::v74(){vfunc_called(this, "_ZN9S281C4_nt3v74Ev");}
void  S281C4_nt ::v75(){vfunc_called(this, "_ZN9S281C4_nt3v75Ev");}
void  S281C4_nt ::v76(){vfunc_called(this, "_ZN9S281C4_nt3v76Ev");}
void  S281C4_nt ::v77(){vfunc_called(this, "_ZN9S281C4_nt3v77Ev");}
void  S281C4_nt ::v78(){vfunc_called(this, "_ZN9S281C4_nt3v78Ev");}
void  S281C4_nt ::v79(){vfunc_called(this, "_ZN9S281C4_nt3v79Ev");}
void  S281C4_nt ::v80(){vfunc_called(this, "_ZN9S281C4_nt3v80Ev");}
void  S281C4_nt ::v81(){vfunc_called(this, "_ZN9S281C4_nt3v81Ev");}
void  S281C4_nt ::v82(){vfunc_called(this, "_ZN9S281C4_nt3v82Ev");}
void  S281C4_nt ::v83(){vfunc_called(this, "_ZN9S281C4_nt3v83Ev");}
void  S281C4_nt ::v84(){vfunc_called(this, "_ZN9S281C4_nt3v84Ev");}
void  S281C4_nt ::v85(){vfunc_called(this, "_ZN9S281C4_nt3v85Ev");}
void  S281C4_nt ::v86(){vfunc_called(this, "_ZN9S281C4_nt3v86Ev");}
void  S281C4_nt ::v87(){vfunc_called(this, "_ZN9S281C4_nt3v87Ev");}
void  S281C4_nt ::v88(){vfunc_called(this, "_ZN9S281C4_nt3v88Ev");}
void  S281C4_nt ::v89(){vfunc_called(this, "_ZN9S281C4_nt3v89Ev");}
void  S281C4_nt ::v90(){vfunc_called(this, "_ZN9S281C4_nt3v90Ev");}
void  S281C4_nt ::v91(){vfunc_called(this, "_ZN9S281C4_nt3v91Ev");}
void  S281C4_nt ::v92(){vfunc_called(this, "_ZN9S281C4_nt3v92Ev");}
void  S281C4_nt ::v93(){vfunc_called(this, "_ZN9S281C4_nt3v93Ev");}
void  S281C4_nt ::v94(){vfunc_called(this, "_ZN9S281C4_nt3v94Ev");}
void  S281C4_nt ::v95(){vfunc_called(this, "_ZN9S281C4_nt3v95Ev");}
void  S281C4_nt ::v96(){vfunc_called(this, "_ZN9S281C4_nt3v96Ev");}
void  S281C4_nt ::v97(){vfunc_called(this, "_ZN9S281C4_nt3v97Ev");}
void  S281C4_nt ::v98(){vfunc_called(this, "_ZN9S281C4_nt3v98Ev");}
void  S281C4_nt ::v99(){vfunc_called(this, "_ZN9S281C4_nt3v99Ev");}
void  S281C4_nt ::v100(){vfunc_called(this, "_ZN9S281C4_nt4v100Ev");}
void  S281C4_nt ::v101(){vfunc_called(this, "_ZN9S281C4_nt4v101Ev");}
void  S281C4_nt ::v102(){vfunc_called(this, "_ZN9S281C4_nt4v102Ev");}
void  S281C4_nt ::v103(){vfunc_called(this, "_ZN9S281C4_nt4v103Ev");}
void  S281C4_nt ::v104(){vfunc_called(this, "_ZN9S281C4_nt4v104Ev");}
void  S281C4_nt ::v105(){vfunc_called(this, "_ZN9S281C4_nt4v105Ev");}
void  S281C4_nt ::v106(){vfunc_called(this, "_ZN9S281C4_nt4v106Ev");}
void  S281C4_nt ::v107(){vfunc_called(this, "_ZN9S281C4_nt4v107Ev");}
void  S281C4_nt ::v108(){vfunc_called(this, "_ZN9S281C4_nt4v108Ev");}
void  S281C4_nt ::v109(){vfunc_called(this, "_ZN9S281C4_nt4v109Ev");}
void  S281C4_nt ::v110(){vfunc_called(this, "_ZN9S281C4_nt4v110Ev");}
void  S281C4_nt ::v111(){vfunc_called(this, "_ZN9S281C4_nt4v111Ev");}
void  S281C4_nt ::v112(){vfunc_called(this, "_ZN9S281C4_nt4v112Ev");}
void  S281C4_nt ::v113(){vfunc_called(this, "_ZN9S281C4_nt4v113Ev");}
void  S281C4_nt ::v114(){vfunc_called(this, "_ZN9S281C4_nt4v114Ev");}
void  S281C4_nt ::v115(){vfunc_called(this, "_ZN9S281C4_nt4v115Ev");}
void  S281C4_nt ::v116(){vfunc_called(this, "_ZN9S281C4_nt4v116Ev");}
void  S281C4_nt ::v117(){vfunc_called(this, "_ZN9S281C4_nt4v117Ev");}
void  S281C4_nt ::v118(){vfunc_called(this, "_ZN9S281C4_nt4v118Ev");}
void  S281C4_nt ::v119(){vfunc_called(this, "_ZN9S281C4_nt4v119Ev");}
void  S281C4_nt ::v120(){vfunc_called(this, "_ZN9S281C4_nt4v120Ev");}
void  S281C4_nt ::v121(){vfunc_called(this, "_ZN9S281C4_nt4v121Ev");}
void  S281C4_nt ::v122(){vfunc_called(this, "_ZN9S281C4_nt4v122Ev");}
void  S281C4_nt ::v123(){vfunc_called(this, "_ZN9S281C4_nt4v123Ev");}
void  S281C4_nt ::v124(){vfunc_called(this, "_ZN9S281C4_nt4v124Ev");}
void  S281C4_nt ::v125(){vfunc_called(this, "_ZN9S281C4_nt4v125Ev");}
void  S281C4_nt ::v126(){vfunc_called(this, "_ZN9S281C4_nt4v126Ev");}
void  S281C4_nt ::v127(){vfunc_called(this, "_ZN9S281C4_nt4v127Ev");}
void  S281C4_nt ::v128(){vfunc_called(this, "_ZN9S281C4_nt4v128Ev");}
void  S281C4_nt ::v129(){vfunc_called(this, "_ZN9S281C4_nt4v129Ev");}
void  S281C4_nt ::v130(){vfunc_called(this, "_ZN9S281C4_nt4v130Ev");}
void  S281C4_nt ::v131(){vfunc_called(this, "_ZN9S281C4_nt4v131Ev");}
void  S281C4_nt ::v132(){vfunc_called(this, "_ZN9S281C4_nt4v132Ev");}
void  S281C4_nt ::v133(){vfunc_called(this, "_ZN9S281C4_nt4v133Ev");}
void  S281C4_nt ::v134(){vfunc_called(this, "_ZN9S281C4_nt4v134Ev");}
void  S281C4_nt ::v135(){vfunc_called(this, "_ZN9S281C4_nt4v135Ev");}
void  S281C4_nt ::v136(){vfunc_called(this, "_ZN9S281C4_nt4v136Ev");}
void  S281C4_nt ::v137(){vfunc_called(this, "_ZN9S281C4_nt4v137Ev");}
void  S281C4_nt ::v138(){vfunc_called(this, "_ZN9S281C4_nt4v138Ev");}
void  S281C4_nt ::v139(){vfunc_called(this, "_ZN9S281C4_nt4v139Ev");}
void  S281C4_nt ::v140(){vfunc_called(this, "_ZN9S281C4_nt4v140Ev");}
void  S281C4_nt ::v141(){vfunc_called(this, "_ZN9S281C4_nt4v141Ev");}
void  S281C4_nt ::v142(){vfunc_called(this, "_ZN9S281C4_nt4v142Ev");}
void  S281C4_nt ::v143(){vfunc_called(this, "_ZN9S281C4_nt4v143Ev");}
void  S281C4_nt ::v144(){vfunc_called(this, "_ZN9S281C4_nt4v144Ev");}
void  S281C4_nt ::v145(){vfunc_called(this, "_ZN9S281C4_nt4v145Ev");}
void  S281C4_nt ::v146(){vfunc_called(this, "_ZN9S281C4_nt4v146Ev");}
void  S281C4_nt ::v147(){vfunc_called(this, "_ZN9S281C4_nt4v147Ev");}
void  S281C4_nt ::v148(){vfunc_called(this, "_ZN9S281C4_nt4v148Ev");}
void  S281C4_nt ::v149(){vfunc_called(this, "_ZN9S281C4_nt4v149Ev");}
S281C4_nt ::S281C4_nt(){ note_ctor("S281C4_nt", this);} // tgen

//skip512 S281C4_nt

#else // __cplusplus

extern void _ZN9S281C4_ntC1Ev();
extern void _ZN9S281C4_ntD1Ev();
Name_Map name_map_S281C4_nt[] = {
  NSPAIR(_ZN9S281C4_ntC1Ev),
  NSPAIR(_ZN9S281C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S281C6_nt;
extern VTBL_ENTRY _ZTI9S281C6_nt[];
extern  VTBL_ENTRY _ZTV9S281C6_nt[];
extern Class_Descriptor cd_S281C5_nt;
extern VTBL_ENTRY _ZTI9S281C5_nt[];
extern  VTBL_ENTRY _ZTV9S281C5_nt[];
static Base_Class bases_S281C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S281C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S281C4_nt[];
extern void _ZN9S281C4_ntD1Ev();
extern void _ZN9S281C4_ntD0Ev();
extern void _ZN9S281C6_nt2v8Ev();
extern void _ZN9S281C6_nt2v9Ev();
extern void _ZN9S281C6_nt3v10Ev();
extern void _ZN9S281C6_nt3v11Ev();
extern void _ZN9S281C6_nt3v12Ev();
extern void _ZN9S281C6_nt3v13Ev();
extern void _ZN9S281C6_nt3v14Ev();
extern void _ZN9S281C6_nt3v15Ev();
extern void _ZN9S281C6_nt3v16Ev();
extern void _ZN9S281C6_nt3v17Ev();
extern void _ZN9S281C6_nt3v18Ev();
extern void _ZN9S281C6_nt3v19Ev();
extern void _ZN9S281C6_nt3v20Ev();
extern void _ZN9S281C6_nt3v21Ev();
extern void _ZN9S281C6_nt3v22Ev();
extern void _ZN9S281C6_nt3v23Ev();
extern void _ZN9S281C6_nt3v24Ev();
extern void _ZN9S281C6_nt3v25Ev();
extern void _ZN9S281C6_nt3v26Ev();
extern void _ZN9S281C6_nt3v27Ev();
extern void _ZN9S281C6_nt3v28Ev();
extern void _ZN9S281C6_nt3v29Ev();
extern void _ZN9S281C6_nt3v30Ev();
extern void _ZN9S281C6_nt3v31Ev();
extern void _ZN9S281C6_nt3v32Ev();
extern void _ZN9S281C6_nt3v33Ev();
extern void _ZN9S281C6_nt3v34Ev();
extern void _ZN9S281C6_nt3v35Ev();
extern void _ZN9S281C6_nt3v36Ev();
extern void _ZN9S281C6_nt3v37Ev();
extern void _ZN9S281C6_nt3v38Ev();
extern void _ZN9S281C6_nt3v39Ev();
extern void _ZN9S281C6_nt3v40Ev();
extern void _ZN9S281C6_nt3v41Ev();
extern void _ZN9S281C6_nt3v42Ev();
extern void _ZN9S281C6_nt3v43Ev();
extern void _ZN9S281C6_nt3v44Ev();
extern void _ZN9S281C6_nt3v45Ev();
extern void _ZN9S281C6_nt3v46Ev();
extern void _ZN9S281C6_nt3v47Ev();
extern void _ZN9S281C6_nt3v48Ev();
extern void _ZN9S281C6_nt3v49Ev();
extern void _ZN9S281C6_nt3v50Ev();
extern void _ZN9S281C6_nt3v51Ev();
extern void _ZN9S281C6_nt3v52Ev();
extern void _ZN9S281C6_nt3v53Ev();
extern void _ZN9S281C6_nt3v54Ev();
extern void _ZN9S281C6_nt3v55Ev();
extern void _ZN9S281C6_nt3v56Ev();
extern void _ZN9S281C6_nt3v57Ev();
extern void _ZN9S281C6_nt3v58Ev();
extern void _ZN9S281C6_nt3v59Ev();
extern void _ZN9S281C6_nt3v60Ev();
extern void _ZN9S281C6_nt3v61Ev();
extern void _ZN9S281C6_nt3v62Ev();
extern void _ZN9S281C6_nt3v63Ev();
extern void _ZN9S281C6_nt3v64Ev();
extern void _ZN9S281C6_nt3v65Ev();
extern void _ZN9S281C6_nt3v66Ev();
extern void _ZN9S281C6_nt3v67Ev();
extern void _ZN9S281C6_nt3v68Ev();
extern void _ZN9S281C6_nt3v69Ev();
extern void _ZN9S281C6_nt3v70Ev();
extern void _ZN9S281C6_nt3v71Ev();
extern void _ZN9S281C5_nt3v72Ev();
extern void _ZN9S281C5_nt3v73Ev();
extern void _ZN9S281C4_nt3v74Ev();
extern void _ZN9S281C4_nt3v75Ev();
extern void _ZN9S281C4_nt3v76Ev();
extern void _ZN9S281C4_nt3v77Ev();
extern void _ZN9S281C4_nt3v78Ev();
extern void _ZN9S281C4_nt3v79Ev();
extern void _ZN9S281C4_nt3v80Ev();
extern void _ZN9S281C4_nt3v81Ev();
extern void _ZN9S281C4_nt3v82Ev();
extern void _ZN9S281C4_nt3v83Ev();
extern void _ZN9S281C4_nt3v84Ev();
extern void _ZN9S281C4_nt3v85Ev();
extern void _ZN9S281C4_nt3v86Ev();
extern void _ZN9S281C4_nt3v87Ev();
extern void _ZN9S281C4_nt3v88Ev();
extern void _ZN9S281C4_nt3v89Ev();
extern void _ZN9S281C4_nt3v90Ev();
extern void _ZN9S281C4_nt3v91Ev();
extern void _ZN9S281C4_nt3v92Ev();
extern void _ZN9S281C4_nt3v93Ev();
extern void _ZN9S281C4_nt3v94Ev();
extern void _ZN9S281C4_nt3v95Ev();
extern void _ZN9S281C4_nt3v96Ev();
extern void _ZN9S281C4_nt3v97Ev();
extern void _ZN9S281C4_nt3v98Ev();
extern void _ZN9S281C4_nt3v99Ev();
extern void _ZN9S281C4_nt4v100Ev();
extern void _ZN9S281C4_nt4v101Ev();
extern void _ZN9S281C4_nt4v102Ev();
extern void _ZN9S281C4_nt4v103Ev();
extern void _ZN9S281C4_nt4v104Ev();
extern void _ZN9S281C4_nt4v105Ev();
extern void _ZN9S281C4_nt4v106Ev();
extern void _ZN9S281C4_nt4v107Ev();
extern void _ZN9S281C4_nt4v108Ev();
extern void _ZN9S281C4_nt4v109Ev();
extern void _ZN9S281C4_nt4v110Ev();
extern void _ZN9S281C4_nt4v111Ev();
extern void _ZN9S281C4_nt4v112Ev();
extern void _ZN9S281C4_nt4v113Ev();
extern void _ZN9S281C4_nt4v114Ev();
extern void _ZN9S281C4_nt4v115Ev();
extern void _ZN9S281C4_nt4v116Ev();
extern void _ZN9S281C4_nt4v117Ev();
extern void _ZN9S281C4_nt4v118Ev();
extern void _ZN9S281C4_nt4v119Ev();
extern void _ZN9S281C4_nt4v120Ev();
extern void _ZN9S281C4_nt4v121Ev();
extern void _ZN9S281C4_nt4v122Ev();
extern void _ZN9S281C4_nt4v123Ev();
extern void _ZN9S281C4_nt4v124Ev();
extern void _ZN9S281C4_nt4v125Ev();
extern void _ZN9S281C4_nt4v126Ev();
extern void _ZN9S281C4_nt4v127Ev();
extern void _ZN9S281C4_nt4v128Ev();
extern void _ZN9S281C4_nt4v129Ev();
extern void _ZN9S281C4_nt4v130Ev();
extern void _ZN9S281C4_nt4v131Ev();
extern void _ZN9S281C4_nt4v132Ev();
extern void _ZN9S281C4_nt4v133Ev();
extern void _ZN9S281C4_nt4v134Ev();
extern void _ZN9S281C4_nt4v135Ev();
extern void _ZN9S281C4_nt4v136Ev();
extern void _ZN9S281C4_nt4v137Ev();
extern void _ZN9S281C4_nt4v138Ev();
extern void _ZN9S281C4_nt4v139Ev();
extern void _ZN9S281C4_nt4v140Ev();
extern void _ZN9S281C4_nt4v141Ev();
extern void _ZN9S281C4_nt4v142Ev();
extern void _ZN9S281C4_nt4v143Ev();
extern void _ZN9S281C4_nt4v144Ev();
extern void _ZN9S281C4_nt4v145Ev();
extern void _ZN9S281C4_nt4v146Ev();
extern void _ZN9S281C4_nt4v147Ev();
extern void _ZN9S281C4_nt4v148Ev();
extern void _ZN9S281C4_nt4v149Ev();
static  VTBL_ENTRY vtc_S281C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S281C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S281C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S281C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S281C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S281C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v149Ev,
};
extern VTBL_ENTRY _ZTI9S281C4_nt[];
VTBL_ENTRY *P__ZTI9S281C4_nt = _ZTI9S281C4_nt; 
extern  VTBL_ENTRY _ZTV9S281C4_nt[];
Class_Descriptor cd_S281C4_nt = {  "S281C4_nt", // class name
  bases_S281C4_nt, 2,
  &(vtc_S281C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(464,352), // object size
  NSPAIRA(_ZTI9S281C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S281C4_nt),146, //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  S281C22_nt  {
  int s281c22f0[4];
  void  mf281c22(); // _ZN10S281C22_nt8mf281c22Ev
};
//SIG(-1 S281C22_nt) C1{ m Fi[4]}


void  S281C22_nt ::mf281c22(){}

//skip512 S281C22_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S281C21_nt  : S281C22_nt {
};
//SIG(-1 S281C21_nt) C1{ BC2{ m Fi[4]}}



//skip512 S281C21_nt

#else // __cplusplus

extern Class_Descriptor cd_S281C22_nt;
static Base_Class bases_S281C21_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S281C23_nt  {
  ::S281C7_nt s281c23f0;
  void *s281c23f1;
  ::S281C21_nt s281c23f2;
  void *s281c23f3;
  void  mf281c23(); // _ZN10S281C23_nt8mf281c23Ev
};
//SIG(-1 S281C23_nt) C1{ m FC2{ m Fi[2]} Fp FC3{ BC4{ m Fi[4]}} Fp}


void  S281C23_nt ::mf281c23(){}

//skip512 S281C23_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S281C25_nt  {
  void *s281c25f0[8];
  char s281c25f1[4];
  void  mf281c25(); // _ZN10S281C25_nt8mf281c25Ev
};
//SIG(-1 S281C25_nt) C1{ m Fp[8] Fc[4]}


void  S281C25_nt ::mf281c25(){}

//skip512 S281C25_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S281C27_nt  {
  int s281c27f0[4];
  char s281c27f1[4];
  void  mf281c27(); // _ZN10S281C27_nt8mf281c27Ev
};
//SIG(-1 S281C27_nt) C1{ m Fi[4] Fc[4]}


void  S281C27_nt ::mf281c27(){}

//skip512 S281C27_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S281C26_nt  {
  void *s281c26f0[5];
  ::S281C27_nt s281c26f1;
  unsigned int s281c26f2:1;
  unsigned int s281c26f3:1;
  int s281c26f4;
  char s281c26f5[8];
  void  mf281c26(); // _ZN10S281C26_nt8mf281c26Ev
};
//SIG(-1 S281C26_nt) C1{ m Fp[5] FC2{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]}


void  S281C26_nt ::mf281c26(){}

//skip512 S281C26_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S281C30_nt  {
  int s281c30f0[3];
  void  mf281c30(); // _ZN10S281C30_nt8mf281c30Ev
};
//SIG(-1 S281C30_nt) C1{ m Fi[3]}


void  S281C30_nt ::mf281c30(){}

//skip512 S281C30_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S281C31_nt  {
  void  mf281c31(); // _ZN10S281C31_nt8mf281c31Ev
};
//SIG(-1 S281C31_nt) C1{ m}


void  S281C31_nt ::mf281c31(){}

//skip512 S281C31_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S281C33_nt  {
  int s281c33f0[2];
  char s281c33f1[2];
  void  mf281c33(); // _ZN10S281C33_nt8mf281c33Ev
};
//SIG(-1 S281C33_nt) C1{ m Fi[2] Fc[2]}


void  S281C33_nt ::mf281c33(){}

//skip512 S281C33_nt

#else // __cplusplus

Class_Descriptor cd_S281C33_nt = {  "S281C33_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  S281C32_nt  : S281C33_nt {
  int s281c32f0;
};
//SIG(-1 S281C32_nt) C1{ BC2{ m Fi[2] Fc[2]} Fi}



//skip512 S281C32_nt

#else // __cplusplus

extern Class_Descriptor cd_S281C33_nt;
static Base_Class bases_S281C32_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C33_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S281C29_nt  {
  ::S281C30_nt s281c29f0;
  ::S281C31_nt s281c29f1;
  ::S281C32_nt s281c29f2;
  char s281c29f3;
  void  mf281c29(); // _ZN10S281C29_nt8mf281c29Ev
};
//SIG(-1 S281C29_nt) C1{ m FC2{ m Fi[3]} FC3{ m} FC4{ BC5{ m Fi[2] Fc[2]} Fi} Fc}


void  S281C29_nt ::mf281c29(){}

//skip512 S281C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S281C37_nt  {
  void *s281c37f0[2];
  void  mf281c37(); // _ZN10S281C37_nt8mf281c37Ev
};
//SIG(-1 S281C37_nt) C1{ m Fp[2]}


void  S281C37_nt ::mf281c37(){}

//skip512 S281C37_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S281C37_nt[];
VTBL_ENTRY *P__ZTI10S281C37_nt = _ZTI10S281C37_nt; 
Class_Descriptor cd_S281C37_nt = {  "S281C37_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S281C37_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  S281C36_nt  : S281C37_nt {
};
//SIG(-1 S281C36_nt) C1{ BC2{ m Fp[2]}}



//skip512 S281C36_nt

#else // __cplusplus

extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S281C36_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C37_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S281C40  : S281C11_nt {
};
//SIG(-1 S281C40) C1{ BC2{ m Fp Fi[2]}}



static void Test_S281C40()
{
  extern Class_Descriptor cd_S281C40;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S281C40, buf);
    S281C40 &lv = *(new (buf) S281C40());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S281C40)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S281C40)");
    check_base_class_offset(lv, (S281C11_nt*), 0, "S281C40");
    test_class_info(&lv, &cd_S281C40);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS281C40(Test_S281C40, "S281C40", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S281C11_nt;
static Base_Class bases_S281C40[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S281C40 = {  "S281C40", // class name
  bases_S281C40, 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  S281C39  : S281C40 {
};
//SIG(-1 S281C39) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S281C39()
{
  extern Class_Descriptor cd_S281C39;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S281C39, buf);
    S281C39 &lv = *(new (buf) S281C39());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S281C39)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S281C39)");
    check_base_class_offset(lv, (S281C11_nt*)(S281C40*), 0, "S281C39");
    check_base_class_offset(lv, (S281C40*), 0, "S281C39");
    test_class_info(&lv, &cd_S281C39);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS281C39(Test_S281C39, "S281C39", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S281C11_nt;
extern Class_Descriptor cd_S281C40;
static Base_Class bases_S281C39[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S281C40,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S281C39 = {  "S281C39", // class name
  bases_S281C39, 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  S281C38_nt  : S281C39 {
};
//SIG(-1 S281C38_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S281C38_nt

#else // __cplusplus

extern Class_Descriptor cd_S281C11_nt;
extern Class_Descriptor cd_S281C40;
extern Class_Descriptor cd_S281C39;
static Base_Class bases_S281C38_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S281C40,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S281C35_nt  {
  ::S281C36_nt s281c35f0;
  char s281c35f1;
  ::S281C38_nt s281c35f2;
  int s281c35f3;
  ::S281C7_nt s281c35f4;
  ::S281C7_nt s281c35f5;
  void *s281c35f6;
  void  mf281c35(); // _ZN10S281C35_nt8mf281c35Ev
};
//SIG(-1 S281C35_nt) C1{ m FC2{ BC3{ m Fp[2]}} Fc FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} Fi FC8{ m Fi[2]} FC8 Fp}


void  S281C35_nt ::mf281c35(){}

//skip512 S281C35_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S281C44()
{
  extern Class_Descriptor cd_S281C44;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S281C44, buf);
    S281C44 &lv = *(new (buf) S281C44());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S281C44)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S281C44)");
    check_base_class_offset(lv, (S281C11_nt*), 0, "S281C44");
    test_class_info(&lv, &cd_S281C44);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS281C44(Test_S281C44, "S281C44", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S281C11_nt;
static Base_Class bases_S281C44[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S281C44 = {  "S281C44", // class name
  bases_S281C44, 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  S281C43  : S281C44 {
};
//SIG(-1 S281C43) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S281C43()
{
  extern Class_Descriptor cd_S281C43;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S281C43, buf);
    S281C43 &lv = *(new (buf) S281C43());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S281C43)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S281C43)");
    check_base_class_offset(lv, (S281C11_nt*)(S281C44*), 0, "S281C43");
    check_base_class_offset(lv, (S281C44*), 0, "S281C43");
    test_class_info(&lv, &cd_S281C43);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS281C43(Test_S281C43, "S281C43", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S281C11_nt;
extern Class_Descriptor cd_S281C44;
static Base_Class bases_S281C43[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S281C44,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S281C43 = {  "S281C43", // class name
  bases_S281C43, 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  S281C3_nt  : S281C4_nt {
  ::S281C21_nt s281c3f0;
  ::S281C7_nt s281c3f1;
  void *s281c3f2[2];
  ::S281C23_nt s281c3f3;
  ::S281C25_nt s281c3f4;
  int s281c3f5;
  ::S281C26_nt s281c3f6;
  int s281c3f7[4];
  ::S281C7_nt s281c3f8[4];
  ::S281C29_nt s281c3f9;
  ::S281C30_nt s281c3f10;
  int s281c3f11;
  ::S281C35_nt s281c3f12;
  ::S281C35_nt s281c3f13;
  void *s281c3f14;
  ::S281C30_nt s281c3f15;
  ::S281C18 s281c3f16;
  ::S281C43 s281c3f17;
  unsigned int s281c3f18:1;
  unsigned int s281c3f19:1;
  unsigned int s281c3f20:1;
  ::S281C31_nt s281c3f21;
  ::S281C20_nt s281c3f22;
  ::S281C20_nt s281c3f23;
  ::S281C20_nt s281c3f24;
  ::S281C20_nt s281c3f25;
  ::S281C20_nt s281c3f26;
  ::S281C20_nt s281c3f27;
  ::S281C20_nt s281c3f28;
  ::S281C20_nt s281c3f29;
  ::S281C20_nt s281c3f30;
  ::S281C20_nt s281c3f31;
  ::S281C20_nt s281c3f32;
  ::S281C20_nt s281c3f33;
  ::S281C20_nt s281c3f34;
  virtual  ~S281C3_nt(); // _ZN9S281C3_ntD1Ev
  virtual void  v150(); // _ZN9S281C3_nt4v150Ev
  virtual void  v151(); // _ZN9S281C3_nt4v151Ev
  virtual void  v152(); // _ZN9S281C3_nt4v152Ev
  virtual void  v153(); // _ZN9S281C3_nt4v153Ev
  virtual void  v154(); // _ZN9S281C3_nt4v154Ev
  virtual void  v155(); // _ZN9S281C3_nt4v155Ev
  virtual void  v156(); // _ZN9S281C3_nt4v156Ev
  virtual void  v157(); // _ZN9S281C3_nt4v157Ev
  virtual void  v158(); // _ZN9S281C3_nt4v158Ev
  virtual void  v159(); // _ZN9S281C3_nt4v159Ev
  virtual void  v160(); // _ZN9S281C3_nt4v160Ev
  virtual void  v161(); // _ZN9S281C3_nt4v161Ev
  virtual void  v162(); // _ZN9S281C3_nt4v162Ev
  virtual void  v163(); // _ZN9S281C3_nt4v163Ev
  virtual void  v164(); // _ZN9S281C3_nt4v164Ev
  virtual void  v165(); // _ZN9S281C3_nt4v165Ev
  virtual void  v166(); // _ZN9S281C3_nt4v166Ev
  virtual void  v167(); // _ZN9S281C3_nt4v167Ev
  virtual void  v168(); // _ZN9S281C3_nt4v168Ev
  virtual void  v169(); // _ZN9S281C3_nt4v169Ev
  virtual void  v170(); // _ZN9S281C3_nt4v170Ev
  virtual void  v171(); // _ZN9S281C3_nt4v171Ev
  virtual void  v172(); // _ZN9S281C3_nt4v172Ev
  virtual void  v173(); // _ZN9S281C3_nt4v173Ev
  virtual void  v174(); // _ZN9S281C3_nt4v174Ev
  virtual void  v175(); // _ZN9S281C3_nt4v175Ev
  virtual void  v176(); // _ZN9S281C3_nt4v176Ev
  virtual void  v177(); // _ZN9S281C3_nt4v177Ev
  virtual void  v178(); // _ZN9S281C3_nt4v178Ev
  virtual void  v179(); // _ZN9S281C3_nt4v179Ev
  virtual void  v180(); // _ZN9S281C3_nt4v180Ev
  virtual void  v181(); // _ZN9S281C3_nt4v181Ev
  virtual void  v182(); // _ZN9S281C3_nt4v182Ev
  virtual void  v183(); // _ZN9S281C3_nt4v183Ev
  virtual void  v184(); // _ZN9S281C3_nt4v184Ev
  virtual void  v185(); // _ZN9S281C3_nt4v185Ev
  virtual void  v186(); // _ZN9S281C3_nt4v186Ev
  virtual void  v187(); // _ZN9S281C3_nt4v187Ev
  virtual void  v188(); // _ZN9S281C3_nt4v188Ev
  virtual void  v189(); // _ZN9S281C3_nt4v189Ev
  virtual void  v190(); // _ZN9S281C3_nt4v190Ev
  virtual void  v191(); // _ZN9S281C3_nt4v191Ev
  virtual void  v192(); // _ZN9S281C3_nt4v192Ev
  virtual void  v193(); // _ZN9S281C3_nt4v193Ev
  virtual void  v194(); // _ZN9S281C3_nt4v194Ev
  virtual void  v195(); // _ZN9S281C3_nt4v195Ev
  virtual void  v196(); // _ZN9S281C3_nt4v196Ev
  virtual void  v197(); // _ZN9S281C3_nt4v197Ev
  virtual void  v198(); // _ZN9S281C3_nt4v198Ev
  virtual void  v199(); // _ZN9S281C3_nt4v199Ev
  virtual void  v200(); // _ZN9S281C3_nt4v200Ev
  virtual void  v201(); // _ZN9S281C3_nt4v201Ev
  virtual void  v202(); // _ZN9S281C3_nt4v202Ev
  virtual void  v203(); // _ZN9S281C3_nt4v203Ev
  virtual void  v204(); // _ZN9S281C3_nt4v204Ev
  virtual void  v205(); // _ZN9S281C3_nt4v205Ev
  virtual void  v206(); // _ZN9S281C3_nt4v206Ev
  virtual void  v207(); // _ZN9S281C3_nt4v207Ev
  virtual void  v208(); // _ZN9S281C3_nt4v208Ev
  virtual void  v209(); // _ZN9S281C3_nt4v209Ev
  virtual void  v210(); // _ZN9S281C3_nt4v210Ev
  virtual void  v211(); // _ZN9S281C3_nt4v211Ev
  virtual void  v212(); // _ZN9S281C3_nt4v212Ev
  virtual void  v213(); // _ZN9S281C3_nt4v213Ev
  virtual void  v214(); // _ZN9S281C3_nt4v214Ev
  virtual void  v215(); // _ZN9S281C3_nt4v215Ev
  virtual void  v216(); // _ZN9S281C3_nt4v216Ev
  virtual void  v217(); // _ZN9S281C3_nt4v217Ev
  virtual void  v218(); // _ZN9S281C3_nt4v218Ev
  S281C3_nt(); // tgen
};
//SIG(-1 S281C3_nt) C1{ BC2{ BC3{ BC4{ vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v134 v135} vd 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 FC6{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC7 Fp FC10{ BC11{ BC9}} FC10 FC10 FC12{ BC13{ BC9}} Fc Fi Fp FC5 FC5 FC5 FC5 FC5 FC5 FC14{ m Fp FC5} FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14} 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 FC15{ BC16{ m Fi[4]}} FC5 Fp[2] FC17{ m FC5 Fp FC15 Fp} FC18{ m Fp[8] Fc[4]} Fi FC19{ m Fp[5] FC20{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC5[4] FC21{ m FC22{ m Fi[3]} FC23{ m} FC24{ BC25{ m Fi[2] Fc[2]} Fi} Fc} FC22 Fi FC26{ m FC27{ BC28{ m Fp[2]}} Fc FC29{ BC30{ BC31{ BC9}}} Fi FC5 FC5 Fp} FC26 Fp FC22 FC12 FC32{ BC33{ BC9}} Fi:1 Fi:1 Fi:1 FC23 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14}


 S281C3_nt ::~S281C3_nt(){ note_dtor("S281C3_nt", this);}
void  S281C3_nt ::v150(){vfunc_called(this, "_ZN9S281C3_nt4v150Ev");}
void  S281C3_nt ::v151(){vfunc_called(this, "_ZN9S281C3_nt4v151Ev");}
void  S281C3_nt ::v152(){vfunc_called(this, "_ZN9S281C3_nt4v152Ev");}
void  S281C3_nt ::v153(){vfunc_called(this, "_ZN9S281C3_nt4v153Ev");}
void  S281C3_nt ::v154(){vfunc_called(this, "_ZN9S281C3_nt4v154Ev");}
void  S281C3_nt ::v155(){vfunc_called(this, "_ZN9S281C3_nt4v155Ev");}
void  S281C3_nt ::v156(){vfunc_called(this, "_ZN9S281C3_nt4v156Ev");}
void  S281C3_nt ::v157(){vfunc_called(this, "_ZN9S281C3_nt4v157Ev");}
void  S281C3_nt ::v158(){vfunc_called(this, "_ZN9S281C3_nt4v158Ev");}
void  S281C3_nt ::v159(){vfunc_called(this, "_ZN9S281C3_nt4v159Ev");}
void  S281C3_nt ::v160(){vfunc_called(this, "_ZN9S281C3_nt4v160Ev");}
void  S281C3_nt ::v161(){vfunc_called(this, "_ZN9S281C3_nt4v161Ev");}
void  S281C3_nt ::v162(){vfunc_called(this, "_ZN9S281C3_nt4v162Ev");}
void  S281C3_nt ::v163(){vfunc_called(this, "_ZN9S281C3_nt4v163Ev");}
void  S281C3_nt ::v164(){vfunc_called(this, "_ZN9S281C3_nt4v164Ev");}
void  S281C3_nt ::v165(){vfunc_called(this, "_ZN9S281C3_nt4v165Ev");}
void  S281C3_nt ::v166(){vfunc_called(this, "_ZN9S281C3_nt4v166Ev");}
void  S281C3_nt ::v167(){vfunc_called(this, "_ZN9S281C3_nt4v167Ev");}
void  S281C3_nt ::v168(){vfunc_called(this, "_ZN9S281C3_nt4v168Ev");}
void  S281C3_nt ::v169(){vfunc_called(this, "_ZN9S281C3_nt4v169Ev");}
void  S281C3_nt ::v170(){vfunc_called(this, "_ZN9S281C3_nt4v170Ev");}
void  S281C3_nt ::v171(){vfunc_called(this, "_ZN9S281C3_nt4v171Ev");}
void  S281C3_nt ::v172(){vfunc_called(this, "_ZN9S281C3_nt4v172Ev");}
void  S281C3_nt ::v173(){vfunc_called(this, "_ZN9S281C3_nt4v173Ev");}
void  S281C3_nt ::v174(){vfunc_called(this, "_ZN9S281C3_nt4v174Ev");}
void  S281C3_nt ::v175(){vfunc_called(this, "_ZN9S281C3_nt4v175Ev");}
void  S281C3_nt ::v176(){vfunc_called(this, "_ZN9S281C3_nt4v176Ev");}
void  S281C3_nt ::v177(){vfunc_called(this, "_ZN9S281C3_nt4v177Ev");}
void  S281C3_nt ::v178(){vfunc_called(this, "_ZN9S281C3_nt4v178Ev");}
void  S281C3_nt ::v179(){vfunc_called(this, "_ZN9S281C3_nt4v179Ev");}
void  S281C3_nt ::v180(){vfunc_called(this, "_ZN9S281C3_nt4v180Ev");}
void  S281C3_nt ::v181(){vfunc_called(this, "_ZN9S281C3_nt4v181Ev");}
void  S281C3_nt ::v182(){vfunc_called(this, "_ZN9S281C3_nt4v182Ev");}
void  S281C3_nt ::v183(){vfunc_called(this, "_ZN9S281C3_nt4v183Ev");}
void  S281C3_nt ::v184(){vfunc_called(this, "_ZN9S281C3_nt4v184Ev");}
void  S281C3_nt ::v185(){vfunc_called(this, "_ZN9S281C3_nt4v185Ev");}
void  S281C3_nt ::v186(){vfunc_called(this, "_ZN9S281C3_nt4v186Ev");}
void  S281C3_nt ::v187(){vfunc_called(this, "_ZN9S281C3_nt4v187Ev");}
void  S281C3_nt ::v188(){vfunc_called(this, "_ZN9S281C3_nt4v188Ev");}
void  S281C3_nt ::v189(){vfunc_called(this, "_ZN9S281C3_nt4v189Ev");}
void  S281C3_nt ::v190(){vfunc_called(this, "_ZN9S281C3_nt4v190Ev");}
void  S281C3_nt ::v191(){vfunc_called(this, "_ZN9S281C3_nt4v191Ev");}
void  S281C3_nt ::v192(){vfunc_called(this, "_ZN9S281C3_nt4v192Ev");}
void  S281C3_nt ::v193(){vfunc_called(this, "_ZN9S281C3_nt4v193Ev");}
void  S281C3_nt ::v194(){vfunc_called(this, "_ZN9S281C3_nt4v194Ev");}
void  S281C3_nt ::v195(){vfunc_called(this, "_ZN9S281C3_nt4v195Ev");}
void  S281C3_nt ::v196(){vfunc_called(this, "_ZN9S281C3_nt4v196Ev");}
void  S281C3_nt ::v197(){vfunc_called(this, "_ZN9S281C3_nt4v197Ev");}
void  S281C3_nt ::v198(){vfunc_called(this, "_ZN9S281C3_nt4v198Ev");}
void  S281C3_nt ::v199(){vfunc_called(this, "_ZN9S281C3_nt4v199Ev");}
void  S281C3_nt ::v200(){vfunc_called(this, "_ZN9S281C3_nt4v200Ev");}
void  S281C3_nt ::v201(){vfunc_called(this, "_ZN9S281C3_nt4v201Ev");}
void  S281C3_nt ::v202(){vfunc_called(this, "_ZN9S281C3_nt4v202Ev");}
void  S281C3_nt ::v203(){vfunc_called(this, "_ZN9S281C3_nt4v203Ev");}
void  S281C3_nt ::v204(){vfunc_called(this, "_ZN9S281C3_nt4v204Ev");}
void  S281C3_nt ::v205(){vfunc_called(this, "_ZN9S281C3_nt4v205Ev");}
void  S281C3_nt ::v206(){vfunc_called(this, "_ZN9S281C3_nt4v206Ev");}
void  S281C3_nt ::v207(){vfunc_called(this, "_ZN9S281C3_nt4v207Ev");}
void  S281C3_nt ::v208(){vfunc_called(this, "_ZN9S281C3_nt4v208Ev");}
void  S281C3_nt ::v209(){vfunc_called(this, "_ZN9S281C3_nt4v209Ev");}
void  S281C3_nt ::v210(){vfunc_called(this, "_ZN9S281C3_nt4v210Ev");}
void  S281C3_nt ::v211(){vfunc_called(this, "_ZN9S281C3_nt4v211Ev");}
void  S281C3_nt ::v212(){vfunc_called(this, "_ZN9S281C3_nt4v212Ev");}
void  S281C3_nt ::v213(){vfunc_called(this, "_ZN9S281C3_nt4v213Ev");}
void  S281C3_nt ::v214(){vfunc_called(this, "_ZN9S281C3_nt4v214Ev");}
void  S281C3_nt ::v215(){vfunc_called(this, "_ZN9S281C3_nt4v215Ev");}
void  S281C3_nt ::v216(){vfunc_called(this, "_ZN9S281C3_nt4v216Ev");}
void  S281C3_nt ::v217(){vfunc_called(this, "_ZN9S281C3_nt4v217Ev");}
void  S281C3_nt ::v218(){vfunc_called(this, "_ZN9S281C3_nt4v218Ev");}
S281C3_nt ::S281C3_nt(){ note_ctor("S281C3_nt", this);} // tgen

//skip512 S281C3_nt

#else // __cplusplus

extern void _ZN9S281C3_ntC1Ev();
extern void _ZN9S281C3_ntD1Ev();
Name_Map name_map_S281C3_nt[] = {
  NSPAIR(_ZN9S281C3_ntC1Ev),
  NSPAIR(_ZN9S281C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S281C6_nt;
extern VTBL_ENTRY _ZTI9S281C6_nt[];
extern  VTBL_ENTRY _ZTV9S281C6_nt[];
extern Class_Descriptor cd_S281C5_nt;
extern VTBL_ENTRY _ZTI9S281C5_nt[];
extern  VTBL_ENTRY _ZTV9S281C5_nt[];
extern Class_Descriptor cd_S281C4_nt;
extern VTBL_ENTRY _ZTI9S281C4_nt[];
extern  VTBL_ENTRY _ZTV9S281C4_nt[];
static Base_Class bases_S281C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S281C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S281C3_nt[];
extern void _ZN9S281C3_ntD1Ev();
extern void _ZN9S281C3_ntD0Ev();
extern void _ZN9S281C6_nt2v8Ev();
extern void _ZN9S281C6_nt2v9Ev();
extern void _ZN9S281C6_nt3v10Ev();
extern void _ZN9S281C6_nt3v11Ev();
extern void _ZN9S281C6_nt3v12Ev();
extern void _ZN9S281C6_nt3v13Ev();
extern void _ZN9S281C6_nt3v14Ev();
extern void _ZN9S281C6_nt3v15Ev();
extern void _ZN9S281C6_nt3v16Ev();
extern void _ZN9S281C6_nt3v17Ev();
extern void _ZN9S281C6_nt3v18Ev();
extern void _ZN9S281C6_nt3v19Ev();
extern void _ZN9S281C6_nt3v20Ev();
extern void _ZN9S281C6_nt3v21Ev();
extern void _ZN9S281C6_nt3v22Ev();
extern void _ZN9S281C6_nt3v23Ev();
extern void _ZN9S281C6_nt3v24Ev();
extern void _ZN9S281C6_nt3v25Ev();
extern void _ZN9S281C6_nt3v26Ev();
extern void _ZN9S281C6_nt3v27Ev();
extern void _ZN9S281C6_nt3v28Ev();
extern void _ZN9S281C6_nt3v29Ev();
extern void _ZN9S281C6_nt3v30Ev();
extern void _ZN9S281C6_nt3v31Ev();
extern void _ZN9S281C6_nt3v32Ev();
extern void _ZN9S281C6_nt3v33Ev();
extern void _ZN9S281C6_nt3v34Ev();
extern void _ZN9S281C6_nt3v35Ev();
extern void _ZN9S281C6_nt3v36Ev();
extern void _ZN9S281C6_nt3v37Ev();
extern void _ZN9S281C6_nt3v38Ev();
extern void _ZN9S281C6_nt3v39Ev();
extern void _ZN9S281C6_nt3v40Ev();
extern void _ZN9S281C6_nt3v41Ev();
extern void _ZN9S281C6_nt3v42Ev();
extern void _ZN9S281C6_nt3v43Ev();
extern void _ZN9S281C6_nt3v44Ev();
extern void _ZN9S281C6_nt3v45Ev();
extern void _ZN9S281C6_nt3v46Ev();
extern void _ZN9S281C6_nt3v47Ev();
extern void _ZN9S281C6_nt3v48Ev();
extern void _ZN9S281C6_nt3v49Ev();
extern void _ZN9S281C6_nt3v50Ev();
extern void _ZN9S281C6_nt3v51Ev();
extern void _ZN9S281C6_nt3v52Ev();
extern void _ZN9S281C6_nt3v53Ev();
extern void _ZN9S281C6_nt3v54Ev();
extern void _ZN9S281C6_nt3v55Ev();
extern void _ZN9S281C6_nt3v56Ev();
extern void _ZN9S281C6_nt3v57Ev();
extern void _ZN9S281C6_nt3v58Ev();
extern void _ZN9S281C6_nt3v59Ev();
extern void _ZN9S281C6_nt3v60Ev();
extern void _ZN9S281C6_nt3v61Ev();
extern void _ZN9S281C6_nt3v62Ev();
extern void _ZN9S281C6_nt3v63Ev();
extern void _ZN9S281C6_nt3v64Ev();
extern void _ZN9S281C6_nt3v65Ev();
extern void _ZN9S281C6_nt3v66Ev();
extern void _ZN9S281C6_nt3v67Ev();
extern void _ZN9S281C6_nt3v68Ev();
extern void _ZN9S281C6_nt3v69Ev();
extern void _ZN9S281C6_nt3v70Ev();
extern void _ZN9S281C6_nt3v71Ev();
extern void _ZN9S281C5_nt3v72Ev();
extern void _ZN9S281C5_nt3v73Ev();
extern void _ZN9S281C4_nt3v74Ev();
extern void _ZN9S281C4_nt3v75Ev();
extern void _ZN9S281C4_nt3v76Ev();
extern void _ZN9S281C4_nt3v77Ev();
extern void _ZN9S281C4_nt3v78Ev();
extern void _ZN9S281C4_nt3v79Ev();
extern void _ZN9S281C4_nt3v80Ev();
extern void _ZN9S281C4_nt3v81Ev();
extern void _ZN9S281C4_nt3v82Ev();
extern void _ZN9S281C4_nt3v83Ev();
extern void _ZN9S281C4_nt3v84Ev();
extern void _ZN9S281C4_nt3v85Ev();
extern void _ZN9S281C4_nt3v86Ev();
extern void _ZN9S281C4_nt3v87Ev();
extern void _ZN9S281C4_nt3v88Ev();
extern void _ZN9S281C4_nt3v89Ev();
extern void _ZN9S281C4_nt3v90Ev();
extern void _ZN9S281C4_nt3v91Ev();
extern void _ZN9S281C4_nt3v92Ev();
extern void _ZN9S281C4_nt3v93Ev();
extern void _ZN9S281C4_nt3v94Ev();
extern void _ZN9S281C4_nt3v95Ev();
extern void _ZN9S281C4_nt3v96Ev();
extern void _ZN9S281C4_nt3v97Ev();
extern void _ZN9S281C4_nt3v98Ev();
extern void _ZN9S281C4_nt3v99Ev();
extern void _ZN9S281C4_nt4v100Ev();
extern void _ZN9S281C4_nt4v101Ev();
extern void _ZN9S281C4_nt4v102Ev();
extern void _ZN9S281C4_nt4v103Ev();
extern void _ZN9S281C4_nt4v104Ev();
extern void _ZN9S281C4_nt4v105Ev();
extern void _ZN9S281C4_nt4v106Ev();
extern void _ZN9S281C4_nt4v107Ev();
extern void _ZN9S281C4_nt4v108Ev();
extern void _ZN9S281C4_nt4v109Ev();
extern void _ZN9S281C4_nt4v110Ev();
extern void _ZN9S281C4_nt4v111Ev();
extern void _ZN9S281C4_nt4v112Ev();
extern void _ZN9S281C4_nt4v113Ev();
extern void _ZN9S281C4_nt4v114Ev();
extern void _ZN9S281C4_nt4v115Ev();
extern void _ZN9S281C4_nt4v116Ev();
extern void _ZN9S281C4_nt4v117Ev();
extern void _ZN9S281C4_nt4v118Ev();
extern void _ZN9S281C4_nt4v119Ev();
extern void _ZN9S281C4_nt4v120Ev();
extern void _ZN9S281C4_nt4v121Ev();
extern void _ZN9S281C4_nt4v122Ev();
extern void _ZN9S281C4_nt4v123Ev();
extern void _ZN9S281C4_nt4v124Ev();
extern void _ZN9S281C4_nt4v125Ev();
extern void _ZN9S281C4_nt4v126Ev();
extern void _ZN9S281C4_nt4v127Ev();
extern void _ZN9S281C4_nt4v128Ev();
extern void _ZN9S281C4_nt4v129Ev();
extern void _ZN9S281C4_nt4v130Ev();
extern void _ZN9S281C4_nt4v131Ev();
extern void _ZN9S281C4_nt4v132Ev();
extern void _ZN9S281C4_nt4v133Ev();
extern void _ZN9S281C4_nt4v134Ev();
extern void _ZN9S281C4_nt4v135Ev();
extern void _ZN9S281C4_nt4v136Ev();
extern void _ZN9S281C4_nt4v137Ev();
extern void _ZN9S281C4_nt4v138Ev();
extern void _ZN9S281C4_nt4v139Ev();
extern void _ZN9S281C4_nt4v140Ev();
extern void _ZN9S281C4_nt4v141Ev();
extern void _ZN9S281C4_nt4v142Ev();
extern void _ZN9S281C4_nt4v143Ev();
extern void _ZN9S281C4_nt4v144Ev();
extern void _ZN9S281C4_nt4v145Ev();
extern void _ZN9S281C4_nt4v146Ev();
extern void _ZN9S281C4_nt4v147Ev();
extern void _ZN9S281C4_nt4v148Ev();
extern void _ZN9S281C4_nt4v149Ev();
extern void _ZN9S281C3_nt4v150Ev();
extern void _ZN9S281C3_nt4v151Ev();
extern void _ZN9S281C3_nt4v152Ev();
extern void _ZN9S281C3_nt4v153Ev();
extern void _ZN9S281C3_nt4v154Ev();
extern void _ZN9S281C3_nt4v155Ev();
extern void _ZN9S281C3_nt4v156Ev();
extern void _ZN9S281C3_nt4v157Ev();
extern void _ZN9S281C3_nt4v158Ev();
extern void _ZN9S281C3_nt4v159Ev();
extern void _ZN9S281C3_nt4v160Ev();
extern void _ZN9S281C3_nt4v161Ev();
extern void _ZN9S281C3_nt4v162Ev();
extern void _ZN9S281C3_nt4v163Ev();
extern void _ZN9S281C3_nt4v164Ev();
extern void _ZN9S281C3_nt4v165Ev();
extern void _ZN9S281C3_nt4v166Ev();
extern void _ZN9S281C3_nt4v167Ev();
extern void _ZN9S281C3_nt4v168Ev();
extern void _ZN9S281C3_nt4v169Ev();
extern void _ZN9S281C3_nt4v170Ev();
extern void _ZN9S281C3_nt4v171Ev();
extern void _ZN9S281C3_nt4v172Ev();
extern void _ZN9S281C3_nt4v173Ev();
extern void _ZN9S281C3_nt4v174Ev();
extern void _ZN9S281C3_nt4v175Ev();
extern void _ZN9S281C3_nt4v176Ev();
extern void _ZN9S281C3_nt4v177Ev();
extern void _ZN9S281C3_nt4v178Ev();
extern void _ZN9S281C3_nt4v179Ev();
extern void _ZN9S281C3_nt4v180Ev();
extern void _ZN9S281C3_nt4v181Ev();
extern void _ZN9S281C3_nt4v182Ev();
extern void _ZN9S281C3_nt4v183Ev();
extern void _ZN9S281C3_nt4v184Ev();
extern void _ZN9S281C3_nt4v185Ev();
extern void _ZN9S281C3_nt4v186Ev();
extern void _ZN9S281C3_nt4v187Ev();
extern void _ZN9S281C3_nt4v188Ev();
extern void _ZN9S281C3_nt4v189Ev();
extern void _ZN9S281C3_nt4v190Ev();
extern void _ZN9S281C3_nt4v191Ev();
extern void _ZN9S281C3_nt4v192Ev();
extern void _ZN9S281C3_nt4v193Ev();
extern void _ZN9S281C3_nt4v194Ev();
extern void _ZN9S281C3_nt4v195Ev();
extern void _ZN9S281C3_nt4v196Ev();
extern void _ZN9S281C3_nt4v197Ev();
extern void _ZN9S281C3_nt4v198Ev();
extern void _ZN9S281C3_nt4v199Ev();
extern void _ZN9S281C3_nt4v200Ev();
extern void _ZN9S281C3_nt4v201Ev();
extern void _ZN9S281C3_nt4v202Ev();
extern void _ZN9S281C3_nt4v203Ev();
extern void _ZN9S281C3_nt4v204Ev();
extern void _ZN9S281C3_nt4v205Ev();
extern void _ZN9S281C3_nt4v206Ev();
extern void _ZN9S281C3_nt4v207Ev();
extern void _ZN9S281C3_nt4v208Ev();
extern void _ZN9S281C3_nt4v209Ev();
extern void _ZN9S281C3_nt4v210Ev();
extern void _ZN9S281C3_nt4v211Ev();
extern void _ZN9S281C3_nt4v212Ev();
extern void _ZN9S281C3_nt4v213Ev();
extern void _ZN9S281C3_nt4v214Ev();
extern void _ZN9S281C3_nt4v215Ev();
extern void _ZN9S281C3_nt4v216Ev();
extern void _ZN9S281C3_nt4v217Ev();
extern void _ZN9S281C3_nt4v218Ev();
static  VTBL_ENTRY vtc_S281C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S281C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S281C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S281C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S281C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S281C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v218Ev,
};
extern VTBL_ENTRY _ZTI9S281C3_nt[];
VTBL_ENTRY *P__ZTI9S281C3_nt = _ZTI9S281C3_nt; 
extern  VTBL_ENTRY _ZTV9S281C3_nt[];
Class_Descriptor cd_S281C3_nt = {  "S281C3_nt", // class name
  bases_S281C3_nt, 3,
  &(vtc_S281C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1224,908), // object size
  NSPAIRA(_ZTI9S281C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S281C3_nt),215, //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  S281C2_nt  : S281C3_nt {
  unsigned int s281c2f0:1;
  void *s281c2f1;
  virtual  ~S281C2_nt(); // _ZN9S281C2_ntD1Ev
  virtual void  v219(); // _ZN9S281C2_nt4v219Ev
  virtual void  v220(); // _ZN9S281C2_nt4v220Ev
  virtual void  v221(); // _ZN9S281C2_nt4v221Ev
  virtual void  v222(); // _ZN9S281C2_nt4v222Ev
  virtual void  v223(); // _ZN9S281C2_nt4v223Ev
  virtual void  v224(); // _ZN9S281C2_nt4v224Ev
  S281C2_nt(); // tgen
};
//SIG(-1 S281C2_nt) 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} vd 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 FC7{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC8 Fp FC11{ BC12{ BC10}} FC11 FC11 FC13{ BC14{ BC10}} Fc Fi Fp FC6 FC6 FC6 FC6 FC6 FC6 FC15{ m Fp FC6} FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15} vd 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 FC16{ BC17{ m Fi[4]}} FC6 Fp[2] FC18{ m FC6 Fp FC16 Fp} FC19{ m Fp[8] Fc[4]} Fi FC20{ m Fp[5] FC21{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC6[4] FC22{ m FC23{ m Fi[3]} FC24{ m} FC25{ BC26{ m Fi[2] Fc[2]} Fi} Fc} FC23 Fi FC27{ m FC28{ BC29{ m Fp[2]}} Fc FC30{ BC31{ BC32{ BC10}}} Fi FC6 FC6 Fp} FC27 Fp FC23 FC13 FC33{ BC34{ BC10}} Fi:1 Fi:1 Fi:1 FC24 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15 FC15} vd v1 v2 v3 v4 v5 v6 Fi:1 Fp}


 S281C2_nt ::~S281C2_nt(){ note_dtor("S281C2_nt", this);}
void  S281C2_nt ::v219(){vfunc_called(this, "_ZN9S281C2_nt4v219Ev");}
void  S281C2_nt ::v220(){vfunc_called(this, "_ZN9S281C2_nt4v220Ev");}
void  S281C2_nt ::v221(){vfunc_called(this, "_ZN9S281C2_nt4v221Ev");}
void  S281C2_nt ::v222(){vfunc_called(this, "_ZN9S281C2_nt4v222Ev");}
void  S281C2_nt ::v223(){vfunc_called(this, "_ZN9S281C2_nt4v223Ev");}
void  S281C2_nt ::v224(){vfunc_called(this, "_ZN9S281C2_nt4v224Ev");}
S281C2_nt ::S281C2_nt(){ note_ctor("S281C2_nt", this);} // tgen

//skip512 S281C2_nt

#else // __cplusplus

extern void _ZN9S281C2_ntC1Ev();
extern void _ZN9S281C2_ntD1Ev();
Name_Map name_map_S281C2_nt[] = {
  NSPAIR(_ZN9S281C2_ntC1Ev),
  NSPAIR(_ZN9S281C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S281C6_nt;
extern VTBL_ENTRY _ZTI9S281C6_nt[];
extern  VTBL_ENTRY _ZTV9S281C6_nt[];
extern Class_Descriptor cd_S281C5_nt;
extern VTBL_ENTRY _ZTI9S281C5_nt[];
extern  VTBL_ENTRY _ZTV9S281C5_nt[];
extern Class_Descriptor cd_S281C4_nt;
extern VTBL_ENTRY _ZTI9S281C4_nt[];
extern  VTBL_ENTRY _ZTV9S281C4_nt[];
extern Class_Descriptor cd_S281C3_nt;
extern VTBL_ENTRY _ZTI9S281C3_nt[];
extern  VTBL_ENTRY _ZTV9S281C3_nt[];
static Base_Class bases_S281C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S281C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S281C2_nt[];
extern void _ZN9S281C2_ntD1Ev();
extern void _ZN9S281C2_ntD0Ev();
extern void _ZN9S281C6_nt2v8Ev();
extern void _ZN9S281C6_nt2v9Ev();
extern void _ZN9S281C6_nt3v10Ev();
extern void _ZN9S281C6_nt3v11Ev();
extern void _ZN9S281C6_nt3v12Ev();
extern void _ZN9S281C6_nt3v13Ev();
extern void _ZN9S281C6_nt3v14Ev();
extern void _ZN9S281C6_nt3v15Ev();
extern void _ZN9S281C6_nt3v16Ev();
extern void _ZN9S281C6_nt3v17Ev();
extern void _ZN9S281C6_nt3v18Ev();
extern void _ZN9S281C6_nt3v19Ev();
extern void _ZN9S281C6_nt3v20Ev();
extern void _ZN9S281C6_nt3v21Ev();
extern void _ZN9S281C6_nt3v22Ev();
extern void _ZN9S281C6_nt3v23Ev();
extern void _ZN9S281C6_nt3v24Ev();
extern void _ZN9S281C6_nt3v25Ev();
extern void _ZN9S281C6_nt3v26Ev();
extern void _ZN9S281C6_nt3v27Ev();
extern void _ZN9S281C6_nt3v28Ev();
extern void _ZN9S281C6_nt3v29Ev();
extern void _ZN9S281C6_nt3v30Ev();
extern void _ZN9S281C6_nt3v31Ev();
extern void _ZN9S281C6_nt3v32Ev();
extern void _ZN9S281C6_nt3v33Ev();
extern void _ZN9S281C6_nt3v34Ev();
extern void _ZN9S281C6_nt3v35Ev();
extern void _ZN9S281C6_nt3v36Ev();
extern void _ZN9S281C6_nt3v37Ev();
extern void _ZN9S281C6_nt3v38Ev();
extern void _ZN9S281C6_nt3v39Ev();
extern void _ZN9S281C6_nt3v40Ev();
extern void _ZN9S281C6_nt3v41Ev();
extern void _ZN9S281C6_nt3v42Ev();
extern void _ZN9S281C6_nt3v43Ev();
extern void _ZN9S281C6_nt3v44Ev();
extern void _ZN9S281C6_nt3v45Ev();
extern void _ZN9S281C6_nt3v46Ev();
extern void _ZN9S281C6_nt3v47Ev();
extern void _ZN9S281C6_nt3v48Ev();
extern void _ZN9S281C6_nt3v49Ev();
extern void _ZN9S281C6_nt3v50Ev();
extern void _ZN9S281C6_nt3v51Ev();
extern void _ZN9S281C6_nt3v52Ev();
extern void _ZN9S281C6_nt3v53Ev();
extern void _ZN9S281C6_nt3v54Ev();
extern void _ZN9S281C6_nt3v55Ev();
extern void _ZN9S281C6_nt3v56Ev();
extern void _ZN9S281C6_nt3v57Ev();
extern void _ZN9S281C6_nt3v58Ev();
extern void _ZN9S281C6_nt3v59Ev();
extern void _ZN9S281C6_nt3v60Ev();
extern void _ZN9S281C6_nt3v61Ev();
extern void _ZN9S281C6_nt3v62Ev();
extern void _ZN9S281C6_nt3v63Ev();
extern void _ZN9S281C6_nt3v64Ev();
extern void _ZN9S281C6_nt3v65Ev();
extern void _ZN9S281C6_nt3v66Ev();
extern void _ZN9S281C6_nt3v67Ev();
extern void _ZN9S281C6_nt3v68Ev();
extern void _ZN9S281C6_nt3v69Ev();
extern void _ZN9S281C6_nt3v70Ev();
extern void _ZN9S281C6_nt3v71Ev();
extern void _ZN9S281C5_nt3v72Ev();
extern void _ZN9S281C5_nt3v73Ev();
extern void _ZN9S281C4_nt3v74Ev();
extern void _ZN9S281C4_nt3v75Ev();
extern void _ZN9S281C4_nt3v76Ev();
extern void _ZN9S281C4_nt3v77Ev();
extern void _ZN9S281C4_nt3v78Ev();
extern void _ZN9S281C4_nt3v79Ev();
extern void _ZN9S281C4_nt3v80Ev();
extern void _ZN9S281C4_nt3v81Ev();
extern void _ZN9S281C4_nt3v82Ev();
extern void _ZN9S281C4_nt3v83Ev();
extern void _ZN9S281C4_nt3v84Ev();
extern void _ZN9S281C4_nt3v85Ev();
extern void _ZN9S281C4_nt3v86Ev();
extern void _ZN9S281C4_nt3v87Ev();
extern void _ZN9S281C4_nt3v88Ev();
extern void _ZN9S281C4_nt3v89Ev();
extern void _ZN9S281C4_nt3v90Ev();
extern void _ZN9S281C4_nt3v91Ev();
extern void _ZN9S281C4_nt3v92Ev();
extern void _ZN9S281C4_nt3v93Ev();
extern void _ZN9S281C4_nt3v94Ev();
extern void _ZN9S281C4_nt3v95Ev();
extern void _ZN9S281C4_nt3v96Ev();
extern void _ZN9S281C4_nt3v97Ev();
extern void _ZN9S281C4_nt3v98Ev();
extern void _ZN9S281C4_nt3v99Ev();
extern void _ZN9S281C4_nt4v100Ev();
extern void _ZN9S281C4_nt4v101Ev();
extern void _ZN9S281C4_nt4v102Ev();
extern void _ZN9S281C4_nt4v103Ev();
extern void _ZN9S281C4_nt4v104Ev();
extern void _ZN9S281C4_nt4v105Ev();
extern void _ZN9S281C4_nt4v106Ev();
extern void _ZN9S281C4_nt4v107Ev();
extern void _ZN9S281C4_nt4v108Ev();
extern void _ZN9S281C4_nt4v109Ev();
extern void _ZN9S281C4_nt4v110Ev();
extern void _ZN9S281C4_nt4v111Ev();
extern void _ZN9S281C4_nt4v112Ev();
extern void _ZN9S281C4_nt4v113Ev();
extern void _ZN9S281C4_nt4v114Ev();
extern void _ZN9S281C4_nt4v115Ev();
extern void _ZN9S281C4_nt4v116Ev();
extern void _ZN9S281C4_nt4v117Ev();
extern void _ZN9S281C4_nt4v118Ev();
extern void _ZN9S281C4_nt4v119Ev();
extern void _ZN9S281C4_nt4v120Ev();
extern void _ZN9S281C4_nt4v121Ev();
extern void _ZN9S281C4_nt4v122Ev();
extern void _ZN9S281C4_nt4v123Ev();
extern void _ZN9S281C4_nt4v124Ev();
extern void _ZN9S281C4_nt4v125Ev();
extern void _ZN9S281C4_nt4v126Ev();
extern void _ZN9S281C4_nt4v127Ev();
extern void _ZN9S281C4_nt4v128Ev();
extern void _ZN9S281C4_nt4v129Ev();
extern void _ZN9S281C4_nt4v130Ev();
extern void _ZN9S281C4_nt4v131Ev();
extern void _ZN9S281C4_nt4v132Ev();
extern void _ZN9S281C4_nt4v133Ev();
extern void _ZN9S281C4_nt4v134Ev();
extern void _ZN9S281C4_nt4v135Ev();
extern void _ZN9S281C4_nt4v136Ev();
extern void _ZN9S281C4_nt4v137Ev();
extern void _ZN9S281C4_nt4v138Ev();
extern void _ZN9S281C4_nt4v139Ev();
extern void _ZN9S281C4_nt4v140Ev();
extern void _ZN9S281C4_nt4v141Ev();
extern void _ZN9S281C4_nt4v142Ev();
extern void _ZN9S281C4_nt4v143Ev();
extern void _ZN9S281C4_nt4v144Ev();
extern void _ZN9S281C4_nt4v145Ev();
extern void _ZN9S281C4_nt4v146Ev();
extern void _ZN9S281C4_nt4v147Ev();
extern void _ZN9S281C4_nt4v148Ev();
extern void _ZN9S281C4_nt4v149Ev();
extern void _ZN9S281C3_nt4v150Ev();
extern void _ZN9S281C3_nt4v151Ev();
extern void _ZN9S281C3_nt4v152Ev();
extern void _ZN9S281C3_nt4v153Ev();
extern void _ZN9S281C3_nt4v154Ev();
extern void _ZN9S281C3_nt4v155Ev();
extern void _ZN9S281C3_nt4v156Ev();
extern void _ZN9S281C3_nt4v157Ev();
extern void _ZN9S281C3_nt4v158Ev();
extern void _ZN9S281C3_nt4v159Ev();
extern void _ZN9S281C3_nt4v160Ev();
extern void _ZN9S281C3_nt4v161Ev();
extern void _ZN9S281C3_nt4v162Ev();
extern void _ZN9S281C3_nt4v163Ev();
extern void _ZN9S281C3_nt4v164Ev();
extern void _ZN9S281C3_nt4v165Ev();
extern void _ZN9S281C3_nt4v166Ev();
extern void _ZN9S281C3_nt4v167Ev();
extern void _ZN9S281C3_nt4v168Ev();
extern void _ZN9S281C3_nt4v169Ev();
extern void _ZN9S281C3_nt4v170Ev();
extern void _ZN9S281C3_nt4v171Ev();
extern void _ZN9S281C3_nt4v172Ev();
extern void _ZN9S281C3_nt4v173Ev();
extern void _ZN9S281C3_nt4v174Ev();
extern void _ZN9S281C3_nt4v175Ev();
extern void _ZN9S281C3_nt4v176Ev();
extern void _ZN9S281C3_nt4v177Ev();
extern void _ZN9S281C3_nt4v178Ev();
extern void _ZN9S281C3_nt4v179Ev();
extern void _ZN9S281C3_nt4v180Ev();
extern void _ZN9S281C3_nt4v181Ev();
extern void _ZN9S281C3_nt4v182Ev();
extern void _ZN9S281C3_nt4v183Ev();
extern void _ZN9S281C3_nt4v184Ev();
extern void _ZN9S281C3_nt4v185Ev();
extern void _ZN9S281C3_nt4v186Ev();
extern void _ZN9S281C3_nt4v187Ev();
extern void _ZN9S281C3_nt4v188Ev();
extern void _ZN9S281C3_nt4v189Ev();
extern void _ZN9S281C3_nt4v190Ev();
extern void _ZN9S281C3_nt4v191Ev();
extern void _ZN9S281C3_nt4v192Ev();
extern void _ZN9S281C3_nt4v193Ev();
extern void _ZN9S281C3_nt4v194Ev();
extern void _ZN9S281C3_nt4v195Ev();
extern void _ZN9S281C3_nt4v196Ev();
extern void _ZN9S281C3_nt4v197Ev();
extern void _ZN9S281C3_nt4v198Ev();
extern void _ZN9S281C3_nt4v199Ev();
extern void _ZN9S281C3_nt4v200Ev();
extern void _ZN9S281C3_nt4v201Ev();
extern void _ZN9S281C3_nt4v202Ev();
extern void _ZN9S281C3_nt4v203Ev();
extern void _ZN9S281C3_nt4v204Ev();
extern void _ZN9S281C3_nt4v205Ev();
extern void _ZN9S281C3_nt4v206Ev();
extern void _ZN9S281C3_nt4v207Ev();
extern void _ZN9S281C3_nt4v208Ev();
extern void _ZN9S281C3_nt4v209Ev();
extern void _ZN9S281C3_nt4v210Ev();
extern void _ZN9S281C3_nt4v211Ev();
extern void _ZN9S281C3_nt4v212Ev();
extern void _ZN9S281C3_nt4v213Ev();
extern void _ZN9S281C3_nt4v214Ev();
extern void _ZN9S281C3_nt4v215Ev();
extern void _ZN9S281C3_nt4v216Ev();
extern void _ZN9S281C3_nt4v217Ev();
extern void _ZN9S281C3_nt4v218Ev();
extern void _ZN9S281C2_nt4v219Ev();
extern void _ZN9S281C2_nt4v220Ev();
extern void _ZN9S281C2_nt4v221Ev();
extern void _ZN9S281C2_nt4v222Ev();
extern void _ZN9S281C2_nt4v223Ev();
extern void _ZN9S281C2_nt4v224Ev();
static  VTBL_ENTRY vtc_S281C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S281C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S281C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S281C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S281C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S281C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S281C2_nt4v219Ev,
  (VTBL_ENTRY)&_ZN9S281C2_nt4v220Ev,
  (VTBL_ENTRY)&_ZN9S281C2_nt4v221Ev,
  (VTBL_ENTRY)&_ZN9S281C2_nt4v222Ev,
  (VTBL_ENTRY)&_ZN9S281C2_nt4v223Ev,
  (VTBL_ENTRY)&_ZN9S281C2_nt4v224Ev,
};
extern VTBL_ENTRY _ZTI9S281C2_nt[];
VTBL_ENTRY *P__ZTI9S281C2_nt = _ZTI9S281C2_nt; 
extern  VTBL_ENTRY _ZTV9S281C2_nt[];
Class_Descriptor cd_S281C2_nt = {  "S281C2_nt", // class name
  bases_S281C2_nt, 4,
  &(vtc_S281C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1240,916), // object size
  NSPAIRA(_ZTI9S281C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S281C2_nt),221, //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  S281C1  : S281C2_nt {
  void *s281c1f0;
  int s281c1f1[2];
  unsigned int s281c1f2:1;
  unsigned int s281c1f3:1;
  unsigned int s281c1f4:1;
  unsigned int s281c1f5:1;
  unsigned int s281c1f6:1;
  ::S281C43 s281c1f7;
  virtual  ~S281C1(); // _ZN6S281C1D1Ev
  virtual void  v1(); // _ZN6S281C12v1Ev
  virtual void  v2(); // _ZN6S281C12v2Ev
  virtual void  v3(); // _ZN6S281C12v3Ev
  virtual void  v4(); // _ZN6S281C12v4Ev
  virtual void  v5(); // _ZN6S281C12v5Ev
  virtual void  v6(); // _ZN6S281C12v6Ev
  virtual void  v7(); // _ZN6S281C12v7Ev
  S281C1(); // tgen
};
//SIG(1 S281C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v72 v73} 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 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 FC8{ m Fi[4] Fc[9]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC9{ BC10{ BC11{ m Fp Fi[2]}}} FC9 Fp FC12{ BC13{ BC11}} FC12 FC12 FC14{ BC15{ BC11}} Fc Fi Fp FC7 FC7 FC7 FC7 FC7 FC7 FC16{ m Fp FC7} FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16} vd 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 FC17{ BC18{ m Fi[4]}} FC7 Fp[2] FC19{ m FC7 Fp FC17 Fp} FC20{ m Fp[8] Fc[4]} Fi FC21{ m Fp[5] FC22{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]} Fi[4] FC7[4] FC23{ m FC24{ m Fi[3]} FC25{ m} FC26{ BC27{ m Fi[2] Fc[2]} Fi} Fc} FC24 Fi FC28{ m FC29{ BC30{ m Fp[2]}} Fc FC31{ BC32{ BC33{ BC11}}} Fi FC7 FC7 Fp} FC28 Fp FC24 FC14 FC34{ BC35{ BC11}} Fi:1 Fi:1 Fi:1 FC25 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16 FC16} vd v219 v220 v221 v222 v223 v224 Fi:1 Fp} vd v1 v2 v3 v4 v5 v6 v7 Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC34}


 S281C1 ::~S281C1(){ note_dtor("S281C1", this);}
void  S281C1 ::v1(){vfunc_called(this, "_ZN6S281C12v1Ev");}
void  S281C1 ::v2(){vfunc_called(this, "_ZN6S281C12v2Ev");}
void  S281C1 ::v3(){vfunc_called(this, "_ZN6S281C12v3Ev");}
void  S281C1 ::v4(){vfunc_called(this, "_ZN6S281C12v4Ev");}
void  S281C1 ::v5(){vfunc_called(this, "_ZN6S281C12v5Ev");}
void  S281C1 ::v6(){vfunc_called(this, "_ZN6S281C12v6Ev");}
void  S281C1 ::v7(){vfunc_called(this, "_ZN6S281C12v7Ev");}
S281C1 ::S281C1(){ note_ctor("S281C1", this);} // tgen

static void Test_S281C1()
{
  extern Class_Descriptor cd_S281C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(161,237)];
    init_test(&cd_S281C1, buf);
    S281C1 *dp, &lv = *(dp=new (buf) S281C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1280,944), "sizeof(S281C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S281C1)");
    check_base_class_offset(lv, (S281C6_nt*)(S281C5_nt*)(S281C4_nt*)(S281C3_nt*)(S281C2_nt*), 0, "S281C1");
    check_base_class_offset(lv, (S281C5_nt*)(S281C4_nt*)(S281C3_nt*)(S281C2_nt*), 0, "S281C1");
    check_base_class_offset(lv, (S281C4_nt*)(S281C3_nt*)(S281C2_nt*), 0, "S281C1");
    check_base_class_offset(lv, (S281C3_nt*)(S281C2_nt*), 0, "S281C1");
    check_base_class_offset(lv, (S281C2_nt*), 0, "S281C1");
    check_field_offset(lv, s281c1f0, ABISELECT(1240,916), "S281C1.s281c1f0");
    check_field_offset(lv, s281c1f1, ABISELECT(1248,920), "S281C1.s281c1f1");
    set_bf_and_test(lv, s281c1f2, ABISELECT(1256,928), 0, 1, 1, "S281C1");
    set_bf_and_test(lv, s281c1f3, ABISELECT(1256,928), 1, 1, 1, "S281C1");
    set_bf_and_test(lv, s281c1f4, ABISELECT(1256,928), 2, 1, 1, "S281C1");
    set_bf_and_test(lv, s281c1f5, ABISELECT(1256,928), 3, 1, 1, "S281C1");
    set_bf_and_test(lv, s281c1f6, ABISELECT(1256,928), 4, 1, 1, "S281C1");
    check_field_offset(lv, s281c1f7, ABISELECT(1264,932), "S281C1.s281c1f7");
    test_class_info(&lv, &cd_S281C1);
    dp->~S281C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS281C1(Test_S281C1, "S281C1", ABISELECT(1280,944));

#else // __cplusplus

extern void _ZN6S281C1C1Ev();
extern void _ZN6S281C1D1Ev();
Name_Map name_map_S281C1[] = {
  NSPAIR(_ZN6S281C1C1Ev),
  NSPAIR(_ZN6S281C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S281C6_nt;
extern VTBL_ENTRY _ZTI9S281C6_nt[];
extern  VTBL_ENTRY _ZTV9S281C6_nt[];
extern Class_Descriptor cd_S281C5_nt;
extern VTBL_ENTRY _ZTI9S281C5_nt[];
extern  VTBL_ENTRY _ZTV9S281C5_nt[];
extern Class_Descriptor cd_S281C4_nt;
extern VTBL_ENTRY _ZTI9S281C4_nt[];
extern  VTBL_ENTRY _ZTV9S281C4_nt[];
extern Class_Descriptor cd_S281C3_nt;
extern VTBL_ENTRY _ZTI9S281C3_nt[];
extern  VTBL_ENTRY _ZTV9S281C3_nt[];
extern Class_Descriptor cd_S281C2_nt;
extern VTBL_ENTRY _ZTI9S281C2_nt[];
extern  VTBL_ENTRY _ZTV9S281C2_nt[];
static Base_Class bases_S281C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S281C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S281C1[];
extern void _ZN6S281C1D1Ev();
extern void _ZN6S281C1D0Ev();
extern void _ZN9S281C6_nt2v8Ev();
extern void _ZN9S281C6_nt2v9Ev();
extern void _ZN9S281C6_nt3v10Ev();
extern void _ZN9S281C6_nt3v11Ev();
extern void _ZN9S281C6_nt3v12Ev();
extern void _ZN9S281C6_nt3v13Ev();
extern void _ZN9S281C6_nt3v14Ev();
extern void _ZN9S281C6_nt3v15Ev();
extern void _ZN9S281C6_nt3v16Ev();
extern void _ZN9S281C6_nt3v17Ev();
extern void _ZN9S281C6_nt3v18Ev();
extern void _ZN9S281C6_nt3v19Ev();
extern void _ZN9S281C6_nt3v20Ev();
extern void _ZN9S281C6_nt3v21Ev();
extern void _ZN9S281C6_nt3v22Ev();
extern void _ZN9S281C6_nt3v23Ev();
extern void _ZN9S281C6_nt3v24Ev();
extern void _ZN9S281C6_nt3v25Ev();
extern void _ZN9S281C6_nt3v26Ev();
extern void _ZN9S281C6_nt3v27Ev();
extern void _ZN9S281C6_nt3v28Ev();
extern void _ZN9S281C6_nt3v29Ev();
extern void _ZN9S281C6_nt3v30Ev();
extern void _ZN9S281C6_nt3v31Ev();
extern void _ZN9S281C6_nt3v32Ev();
extern void _ZN9S281C6_nt3v33Ev();
extern void _ZN9S281C6_nt3v34Ev();
extern void _ZN9S281C6_nt3v35Ev();
extern void _ZN9S281C6_nt3v36Ev();
extern void _ZN9S281C6_nt3v37Ev();
extern void _ZN9S281C6_nt3v38Ev();
extern void _ZN9S281C6_nt3v39Ev();
extern void _ZN9S281C6_nt3v40Ev();
extern void _ZN9S281C6_nt3v41Ev();
extern void _ZN9S281C6_nt3v42Ev();
extern void _ZN9S281C6_nt3v43Ev();
extern void _ZN9S281C6_nt3v44Ev();
extern void _ZN9S281C6_nt3v45Ev();
extern void _ZN9S281C6_nt3v46Ev();
extern void _ZN9S281C6_nt3v47Ev();
extern void _ZN9S281C6_nt3v48Ev();
extern void _ZN9S281C6_nt3v49Ev();
extern void _ZN9S281C6_nt3v50Ev();
extern void _ZN9S281C6_nt3v51Ev();
extern void _ZN9S281C6_nt3v52Ev();
extern void _ZN9S281C6_nt3v53Ev();
extern void _ZN9S281C6_nt3v54Ev();
extern void _ZN9S281C6_nt3v55Ev();
extern void _ZN9S281C6_nt3v56Ev();
extern void _ZN9S281C6_nt3v57Ev();
extern void _ZN9S281C6_nt3v58Ev();
extern void _ZN9S281C6_nt3v59Ev();
extern void _ZN9S281C6_nt3v60Ev();
extern void _ZN9S281C6_nt3v61Ev();
extern void _ZN9S281C6_nt3v62Ev();
extern void _ZN9S281C6_nt3v63Ev();
extern void _ZN9S281C6_nt3v64Ev();
extern void _ZN9S281C6_nt3v65Ev();
extern void _ZN9S281C6_nt3v66Ev();
extern void _ZN9S281C6_nt3v67Ev();
extern void _ZN9S281C6_nt3v68Ev();
extern void _ZN9S281C6_nt3v69Ev();
extern void _ZN9S281C6_nt3v70Ev();
extern void _ZN9S281C6_nt3v71Ev();
extern void _ZN9S281C5_nt3v72Ev();
extern void _ZN9S281C5_nt3v73Ev();
extern void _ZN9S281C4_nt3v74Ev();
extern void _ZN9S281C4_nt3v75Ev();
extern void _ZN9S281C4_nt3v76Ev();
extern void _ZN9S281C4_nt3v77Ev();
extern void _ZN9S281C4_nt3v78Ev();
extern void _ZN9S281C4_nt3v79Ev();
extern void _ZN9S281C4_nt3v80Ev();
extern void _ZN9S281C4_nt3v81Ev();
extern void _ZN9S281C4_nt3v82Ev();
extern void _ZN9S281C4_nt3v83Ev();
extern void _ZN9S281C4_nt3v84Ev();
extern void _ZN9S281C4_nt3v85Ev();
extern void _ZN9S281C4_nt3v86Ev();
extern void _ZN9S281C4_nt3v87Ev();
extern void _ZN9S281C4_nt3v88Ev();
extern void _ZN9S281C4_nt3v89Ev();
extern void _ZN9S281C4_nt3v90Ev();
extern void _ZN9S281C4_nt3v91Ev();
extern void _ZN9S281C4_nt3v92Ev();
extern void _ZN9S281C4_nt3v93Ev();
extern void _ZN9S281C4_nt3v94Ev();
extern void _ZN9S281C4_nt3v95Ev();
extern void _ZN9S281C4_nt3v96Ev();
extern void _ZN9S281C4_nt3v97Ev();
extern void _ZN9S281C4_nt3v98Ev();
extern void _ZN9S281C4_nt3v99Ev();
extern void _ZN9S281C4_nt4v100Ev();
extern void _ZN9S281C4_nt4v101Ev();
extern void _ZN9S281C4_nt4v102Ev();
extern void _ZN9S281C4_nt4v103Ev();
extern void _ZN9S281C4_nt4v104Ev();
extern void _ZN9S281C4_nt4v105Ev();
extern void _ZN9S281C4_nt4v106Ev();
extern void _ZN9S281C4_nt4v107Ev();
extern void _ZN9S281C4_nt4v108Ev();
extern void _ZN9S281C4_nt4v109Ev();
extern void _ZN9S281C4_nt4v110Ev();
extern void _ZN9S281C4_nt4v111Ev();
extern void _ZN9S281C4_nt4v112Ev();
extern void _ZN9S281C4_nt4v113Ev();
extern void _ZN9S281C4_nt4v114Ev();
extern void _ZN9S281C4_nt4v115Ev();
extern void _ZN9S281C4_nt4v116Ev();
extern void _ZN9S281C4_nt4v117Ev();
extern void _ZN9S281C4_nt4v118Ev();
extern void _ZN9S281C4_nt4v119Ev();
extern void _ZN9S281C4_nt4v120Ev();
extern void _ZN9S281C4_nt4v121Ev();
extern void _ZN9S281C4_nt4v122Ev();
extern void _ZN9S281C4_nt4v123Ev();
extern void _ZN9S281C4_nt4v124Ev();
extern void _ZN9S281C4_nt4v125Ev();
extern void _ZN9S281C4_nt4v126Ev();
extern void _ZN9S281C4_nt4v127Ev();
extern void _ZN9S281C4_nt4v128Ev();
extern void _ZN9S281C4_nt4v129Ev();
extern void _ZN9S281C4_nt4v130Ev();
extern void _ZN9S281C4_nt4v131Ev();
extern void _ZN9S281C4_nt4v132Ev();
extern void _ZN9S281C4_nt4v133Ev();
extern void _ZN9S281C4_nt4v134Ev();
extern void _ZN9S281C4_nt4v135Ev();
extern void _ZN9S281C4_nt4v136Ev();
extern void _ZN9S281C4_nt4v137Ev();
extern void _ZN9S281C4_nt4v138Ev();
extern void _ZN9S281C4_nt4v139Ev();
extern void _ZN9S281C4_nt4v140Ev();
extern void _ZN9S281C4_nt4v141Ev();
extern void _ZN9S281C4_nt4v142Ev();
extern void _ZN9S281C4_nt4v143Ev();
extern void _ZN9S281C4_nt4v144Ev();
extern void _ZN9S281C4_nt4v145Ev();
extern void _ZN9S281C4_nt4v146Ev();
extern void _ZN9S281C4_nt4v147Ev();
extern void _ZN9S281C4_nt4v148Ev();
extern void _ZN9S281C4_nt4v149Ev();
extern void _ZN9S281C3_nt4v150Ev();
extern void _ZN9S281C3_nt4v151Ev();
extern void _ZN9S281C3_nt4v152Ev();
extern void _ZN9S281C3_nt4v153Ev();
extern void _ZN9S281C3_nt4v154Ev();
extern void _ZN9S281C3_nt4v155Ev();
extern void _ZN9S281C3_nt4v156Ev();
extern void _ZN9S281C3_nt4v157Ev();
extern void _ZN9S281C3_nt4v158Ev();
extern void _ZN9S281C3_nt4v159Ev();
extern void _ZN9S281C3_nt4v160Ev();
extern void _ZN9S281C3_nt4v161Ev();
extern void _ZN9S281C3_nt4v162Ev();
extern void _ZN9S281C3_nt4v163Ev();
extern void _ZN9S281C3_nt4v164Ev();
extern void _ZN9S281C3_nt4v165Ev();
extern void _ZN9S281C3_nt4v166Ev();
extern void _ZN9S281C3_nt4v167Ev();
extern void _ZN9S281C3_nt4v168Ev();
extern void _ZN9S281C3_nt4v169Ev();
extern void _ZN9S281C3_nt4v170Ev();
extern void _ZN9S281C3_nt4v171Ev();
extern void _ZN9S281C3_nt4v172Ev();
extern void _ZN9S281C3_nt4v173Ev();
extern void _ZN9S281C3_nt4v174Ev();
extern void _ZN9S281C3_nt4v175Ev();
extern void _ZN9S281C3_nt4v176Ev();
extern void _ZN9S281C3_nt4v177Ev();
extern void _ZN9S281C3_nt4v178Ev();
extern void _ZN9S281C3_nt4v179Ev();
extern void _ZN9S281C3_nt4v180Ev();
extern void _ZN9S281C3_nt4v181Ev();
extern void _ZN9S281C3_nt4v182Ev();
extern void _ZN9S281C3_nt4v183Ev();
extern void _ZN9S281C3_nt4v184Ev();
extern void _ZN9S281C3_nt4v185Ev();
extern void _ZN9S281C3_nt4v186Ev();
extern void _ZN9S281C3_nt4v187Ev();
extern void _ZN9S281C3_nt4v188Ev();
extern void _ZN9S281C3_nt4v189Ev();
extern void _ZN9S281C3_nt4v190Ev();
extern void _ZN9S281C3_nt4v191Ev();
extern void _ZN9S281C3_nt4v192Ev();
extern void _ZN9S281C3_nt4v193Ev();
extern void _ZN9S281C3_nt4v194Ev();
extern void _ZN9S281C3_nt4v195Ev();
extern void _ZN9S281C3_nt4v196Ev();
extern void _ZN9S281C3_nt4v197Ev();
extern void _ZN9S281C3_nt4v198Ev();
extern void _ZN9S281C3_nt4v199Ev();
extern void _ZN9S281C3_nt4v200Ev();
extern void _ZN9S281C3_nt4v201Ev();
extern void _ZN9S281C3_nt4v202Ev();
extern void _ZN9S281C3_nt4v203Ev();
extern void _ZN9S281C3_nt4v204Ev();
extern void _ZN9S281C3_nt4v205Ev();
extern void _ZN9S281C3_nt4v206Ev();
extern void _ZN9S281C3_nt4v207Ev();
extern void _ZN9S281C3_nt4v208Ev();
extern void _ZN9S281C3_nt4v209Ev();
extern void _ZN9S281C3_nt4v210Ev();
extern void _ZN9S281C3_nt4v211Ev();
extern void _ZN9S281C3_nt4v212Ev();
extern void _ZN9S281C3_nt4v213Ev();
extern void _ZN9S281C3_nt4v214Ev();
extern void _ZN9S281C3_nt4v215Ev();
extern void _ZN9S281C3_nt4v216Ev();
extern void _ZN9S281C3_nt4v217Ev();
extern void _ZN9S281C3_nt4v218Ev();
extern void _ZN9S281C2_nt4v219Ev();
extern void _ZN9S281C2_nt4v220Ev();
extern void _ZN9S281C2_nt4v221Ev();
extern void _ZN9S281C2_nt4v222Ev();
extern void _ZN9S281C2_nt4v223Ev();
extern void _ZN9S281C2_nt4v224Ev();
extern void _ZN6S281C12v1Ev();
extern void _ZN6S281C12v2Ev();
extern void _ZN6S281C12v3Ev();
extern void _ZN6S281C12v4Ev();
extern void _ZN6S281C12v5Ev();
extern void _ZN6S281C12v6Ev();
extern void _ZN6S281C12v7Ev();
static  VTBL_ENTRY vtc_S281C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S281C1[0]),
  (VTBL_ENTRY)&_ZN6S281C1D1Ev,
  (VTBL_ENTRY)&_ZN6S281C1D0Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S281C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S281C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S281C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S281C4_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S281C3_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S281C2_nt4v219Ev,
  (VTBL_ENTRY)&_ZN9S281C2_nt4v220Ev,
  (VTBL_ENTRY)&_ZN9S281C2_nt4v221Ev,
  (VTBL_ENTRY)&_ZN9S281C2_nt4v222Ev,
  (VTBL_ENTRY)&_ZN9S281C2_nt4v223Ev,
  (VTBL_ENTRY)&_ZN9S281C2_nt4v224Ev,
  (VTBL_ENTRY)&_ZN6S281C12v1Ev,
  (VTBL_ENTRY)&_ZN6S281C12v2Ev,
  (VTBL_ENTRY)&_ZN6S281C12v3Ev,
  (VTBL_ENTRY)&_ZN6S281C12v4Ev,
  (VTBL_ENTRY)&_ZN6S281C12v5Ev,
  (VTBL_ENTRY)&_ZN6S281C12v6Ev,
  (VTBL_ENTRY)&_ZN6S281C12v7Ev,
};
extern VTBL_ENTRY _ZTI6S281C1[];
extern  VTBL_ENTRY _ZTV6S281C1[];
Class_Descriptor cd_S281C1 = {  "S281C1", // class name
  bases_S281C1, 5,
  &(vtc_S281C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1280,944), // object size
  NSPAIRA(_ZTI6S281C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S281C1),228, //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  S2215C8_nt  {
  void  mf2215c8(); // _ZN10S2215C8_nt8mf2215c8Ev
};
//SIG(-1 S2215C8_nt) C1{ m}


void  S2215C8_nt ::mf2215c8(){}

//skip512 S2215C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C6_nt  {
  void *s2215c6f0;
  int s2215c6f1;
  ::S281C31_nt s2215c6f2;
  ::S2215C8_nt s2215c6f3;
  void  mf2215c6(); // _ZN10S2215C6_nt8mf2215c6Ev
};
//SIG(-1 S2215C6_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2215C6_nt ::mf2215c6(){}

//skip512 S2215C6_nt

#else // __cplusplus

Class_Descriptor cd_S2215C6_nt = {  "S2215C6_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  S2215C5_nt  : S2215C6_nt {
};
//SIG(-1 S2215C5_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S2215C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S2215C6_nt;
static Base_Class bases_S2215C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2215C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S2215C4_nt  {
  void *s2215c4f0;
  int s2215c4f1;
  ::S2215C5_nt s2215c4f2;
  ::S2215C5_nt s2215c4f3;
  int s2215c4f4;
  virtual  ~S2215C4_nt(); // _ZN10S2215C4_ntD1Ev
  virtual void  v3(); // _ZN10S2215C4_nt2v3Ev
  virtual void  v4(); // _ZN10S2215C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2215C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2215C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2215C4_nt2v7Ev
  virtual void  v8(); // _ZN10S2215C4_nt2v8Ev
  virtual void  v9(); // _ZN10S2215C4_nt2v9Ev
  virtual void  v10(); // _ZN10S2215C4_nt3v10Ev
  virtual void  v11(); // _ZN10S2215C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2215C4_nt3v12Ev
  virtual void  v13(); // _ZN10S2215C4_nt3v13Ev
  virtual void  v14(); // _ZN10S2215C4_nt3v14Ev
  virtual void  v15(); // _ZN10S2215C4_nt3v15Ev
  virtual void  v16(); // _ZN10S2215C4_nt3v16Ev
  virtual void  v17(); // _ZN10S2215C4_nt3v17Ev
  virtual void  v18(); // _ZN10S2215C4_nt3v18Ev
  virtual void  v19(); // _ZN10S2215C4_nt3v19Ev
  virtual void  v20(); // _ZN10S2215C4_nt3v20Ev
  virtual void  v21(); // _ZN10S2215C4_nt3v21Ev
  virtual void  v22(); // _ZN10S2215C4_nt3v22Ev
  virtual void  v23(); // _ZN10S2215C4_nt3v23Ev
  virtual void  v24(); // _ZN10S2215C4_nt3v24Ev
  virtual void  v25(); // _ZN10S2215C4_nt3v25Ev
  S2215C4_nt(); // tgen
};
//SIG(-1 S2215C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} FC2 Fi}


 S2215C4_nt ::~S2215C4_nt(){ note_dtor("S2215C4_nt", this);}
void  S2215C4_nt ::v3(){vfunc_called(this, "_ZN10S2215C4_nt2v3Ev");}
void  S2215C4_nt ::v4(){vfunc_called(this, "_ZN10S2215C4_nt2v4Ev");}
void  S2215C4_nt ::v5(){vfunc_called(this, "_ZN10S2215C4_nt2v5Ev");}
void  S2215C4_nt ::v6(){vfunc_called(this, "_ZN10S2215C4_nt2v6Ev");}
void  S2215C4_nt ::v7(){vfunc_called(this, "_ZN10S2215C4_nt2v7Ev");}
void  S2215C4_nt ::v8(){vfunc_called(this, "_ZN10S2215C4_nt2v8Ev");}
void  S2215C4_nt ::v9(){vfunc_called(this, "_ZN10S2215C4_nt2v9Ev");}
void  S2215C4_nt ::v10(){vfunc_called(this, "_ZN10S2215C4_nt3v10Ev");}
void  S2215C4_nt ::v11(){vfunc_called(this, "_ZN10S2215C4_nt3v11Ev");}
void  S2215C4_nt ::v12(){vfunc_called(this, "_ZN10S2215C4_nt3v12Ev");}
void  S2215C4_nt ::v13(){vfunc_called(this, "_ZN10S2215C4_nt3v13Ev");}
void  S2215C4_nt ::v14(){vfunc_called(this, "_ZN10S2215C4_nt3v14Ev");}
void  S2215C4_nt ::v15(){vfunc_called(this, "_ZN10S2215C4_nt3v15Ev");}
void  S2215C4_nt ::v16(){vfunc_called(this, "_ZN10S2215C4_nt3v16Ev");}
void  S2215C4_nt ::v17(){vfunc_called(this, "_ZN10S2215C4_nt3v17Ev");}
void  S2215C4_nt ::v18(){vfunc_called(this, "_ZN10S2215C4_nt3v18Ev");}
void  S2215C4_nt ::v19(){vfunc_called(this, "_ZN10S2215C4_nt3v19Ev");}
void  S2215C4_nt ::v20(){vfunc_called(this, "_ZN10S2215C4_nt3v20Ev");}
void  S2215C4_nt ::v21(){vfunc_called(this, "_ZN10S2215C4_nt3v21Ev");}
void  S2215C4_nt ::v22(){vfunc_called(this, "_ZN10S2215C4_nt3v22Ev");}
void  S2215C4_nt ::v23(){vfunc_called(this, "_ZN10S2215C4_nt3v23Ev");}
void  S2215C4_nt ::v24(){vfunc_called(this, "_ZN10S2215C4_nt3v24Ev");}
void  S2215C4_nt ::v25(){vfunc_called(this, "_ZN10S2215C4_nt3v25Ev");}
S2215C4_nt ::S2215C4_nt(){ note_ctor("S2215C4_nt", this);} // tgen

//skip512 S2215C4_nt

#else // __cplusplus

extern void _ZN10S2215C4_ntC1Ev();
extern void _ZN10S2215C4_ntD1Ev();
Name_Map name_map_S2215C4_nt[] = {
  NSPAIR(_ZN10S2215C4_ntC1Ev),
  NSPAIR(_ZN10S2215C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2215C4_nt[];
extern void _ZN10S2215C4_ntD1Ev();
extern void _ZN10S2215C4_ntD0Ev();
extern void _ZN10S2215C4_nt2v3Ev();
extern void _ZN10S2215C4_nt2v4Ev();
extern void _ZN10S2215C4_nt2v5Ev();
extern void _ZN10S2215C4_nt2v6Ev();
extern void _ZN10S2215C4_nt2v7Ev();
extern void _ZN10S2215C4_nt2v8Ev();
extern void _ZN10S2215C4_nt2v9Ev();
extern void _ZN10S2215C4_nt3v10Ev();
extern void _ZN10S2215C4_nt3v11Ev();
extern void _ZN10S2215C4_nt3v12Ev();
extern void _ZN10S2215C4_nt3v13Ev();
extern void _ZN10S2215C4_nt3v14Ev();
extern void _ZN10S2215C4_nt3v15Ev();
extern void _ZN10S2215C4_nt3v16Ev();
extern void _ZN10S2215C4_nt3v17Ev();
extern void _ZN10S2215C4_nt3v18Ev();
extern void _ZN10S2215C4_nt3v19Ev();
extern void _ZN10S2215C4_nt3v20Ev();
extern void _ZN10S2215C4_nt3v21Ev();
extern void _ZN10S2215C4_nt3v22Ev();
extern void _ZN10S2215C4_nt3v23Ev();
extern void _ZN10S2215C4_nt3v24Ev();
extern void _ZN10S2215C4_nt3v25Ev();
static  VTBL_ENTRY vtc_S2215C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2215C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2215C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v25Ev,
};
extern VTBL_ENTRY _ZTI10S2215C4_nt[];
VTBL_ENTRY *P__ZTI10S2215C4_nt = _ZTI10S2215C4_nt; 
extern  VTBL_ENTRY _ZTV10S2215C4_nt[];
Class_Descriptor cd_S2215C4_nt = {  "S2215C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2215C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S2215C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2215C4_nt),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C14_nt  {
  __tsi64 s2215c14f0[2];
  void  mf2215c14(); // _ZN11S2215C14_nt9mf2215c14Ev
};
//SIG(-1 S2215C14_nt) C1{ m FL[2]}


void  S2215C14_nt ::mf2215c14(){}

//skip512 S2215C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C13_nt  {
  ::S2215C14_nt s2215c13f0;
  void  mf2215c13(); // _ZN11S2215C13_nt9mf2215c13Ev
};
//SIG(-1 S2215C13_nt) C1{ m FC2{ m FL[2]}}


void  S2215C13_nt ::mf2215c13(){}

//skip512 S2215C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C17_nt  {
  ::S2215C13_nt s2215c17f0;
  void  mf2215c17(); // _ZN11S2215C17_nt9mf2215c17Ev
};
//SIG(-1 S2215C17_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S2215C17_nt ::mf2215c17(){}

//skip512 S2215C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C18_nt  {
  ::S2215C13_nt s2215c18f0;
  ::S2215C13_nt s2215c18f1;
  ::S2215C13_nt s2215c18f2;
  ::S2215C13_nt s2215c18f3;
  void  mf2215c18(); // _ZN11S2215C18_nt9mf2215c18Ev
};
//SIG(-1 S2215C18_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S2215C18_nt ::mf2215c18(){}

//skip512 S2215C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C20_nt  {
  void *s2215c20f0;
  int s2215c20f1;
  ::S2215C8_nt s2215c20f2;
  void  mf2215c20(); // _ZN11S2215C20_nt9mf2215c20Ev
};
//SIG(-1 S2215C20_nt) C1{ m Fp Fi FC2{ m}}


void  S2215C20_nt ::mf2215c20(){}

//skip512 S2215C20_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C19_nt  {
  ::S2215C20_nt s2215c19f0;
  int s2215c19f1;
  void  mf2215c19(); // _ZN11S2215C19_nt9mf2215c19Ev
};
//SIG(-1 S2215C19_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S2215C19_nt ::mf2215c19(){}

//skip512 S2215C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C23  {
  void  mf2215c23(); // _ZN8S2215C239mf2215c23Ev
};
//SIG(-1 S2215C23) C1{ m}


void  S2215C23 ::mf2215c23(){}

static void Test_S2215C23()
{
  {
    init_simple_test("S2215C23");
    S2215C23 lv;
    check2(sizeof(lv), 1, "sizeof(S2215C23)");
    check2(__alignof__(lv), 1, "__alignof__(S2215C23)");
  }
}
static Arrange_To_Call_Me vS2215C23(Test_S2215C23, "S2215C23", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C22  {
  void *s2215c22f0;
  int s2215c22f1;
  ::S2215C23 s2215c22f2;
  ::S2215C23 s2215c22f3;
  void  mf2215c22(); // _ZN8S2215C229mf2215c22Ev
};
//SIG(-1 S2215C22) C1{ m Fp Fi FC2{ m} FC2}


void  S2215C22 ::mf2215c22(){}

static void Test_S2215C22()
{
  {
    init_simple_test("S2215C22");
    S2215C22 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2215C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2215C22)");
    check_field_offset(lv, s2215c22f0, 0, "S2215C22.s2215c22f0");
    check_field_offset(lv, s2215c22f1, ABISELECT(8,4), "S2215C22.s2215c22f1");
    check_field_offset(lv, s2215c22f2, ABISELECT(12,8), "S2215C22.s2215c22f2");
    check_field_offset(lv, s2215c22f3, ABISELECT(13,9), "S2215C22.s2215c22f3");
  }
}
static Arrange_To_Call_Me vS2215C22(Test_S2215C22, "S2215C22", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C27  {
  void  mf2215c27(); // _ZN8S2215C279mf2215c27Ev
};
//SIG(-1 S2215C27) C1{ m}


void  S2215C27 ::mf2215c27(){}

static void Test_S2215C27()
{
  {
    init_simple_test("S2215C27");
    S2215C27 lv;
    check2(sizeof(lv), 1, "sizeof(S2215C27)");
    check2(__alignof__(lv), 1, "__alignof__(S2215C27)");
  }
}
static Arrange_To_Call_Me vS2215C27(Test_S2215C27, "S2215C27", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C26  {
  void *s2215c26f0;
  int s2215c26f1;
  ::S2215C27 s2215c26f2;
  ::S2215C27 s2215c26f3;
  void  mf2215c26(); // _ZN8S2215C269mf2215c26Ev
};
//SIG(-1 S2215C26) C1{ m Fp Fi FC2{ m} FC2}


void  S2215C26 ::mf2215c26(){}

static void Test_S2215C26()
{
  {
    init_simple_test("S2215C26");
    S2215C26 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2215C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2215C26)");
    check_field_offset(lv, s2215c26f0, 0, "S2215C26.s2215c26f0");
    check_field_offset(lv, s2215c26f1, ABISELECT(8,4), "S2215C26.s2215c26f1");
    check_field_offset(lv, s2215c26f2, ABISELECT(12,8), "S2215C26.s2215c26f2");
    check_field_offset(lv, s2215c26f3, ABISELECT(13,9), "S2215C26.s2215c26f3");
  }
}
static Arrange_To_Call_Me vS2215C26(Test_S2215C26, "S2215C26", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S2215C25()
{
  extern Class_Descriptor cd_S2215C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2215C25, buf);
    S2215C25 &lv = *(new (buf) S2215C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2215C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2215C25)");
    check_base_class_offset(lv, (S2215C26*), 0, "S2215C25");
    test_class_info(&lv, &cd_S2215C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2215C25(Test_S2215C25, "S2215C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2215C26;
static Base_Class bases_S2215C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2215C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2215C25 = {  "S2215C25", // class name
  bases_S2215C25, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C30  {
  void  mf2215c30(); // _ZN8S2215C309mf2215c30Ev
};
//SIG(-1 S2215C30) C1{ m}


void  S2215C30 ::mf2215c30(){}

static void Test_S2215C30()
{
  {
    init_simple_test("S2215C30");
    S2215C30 lv;
    check2(sizeof(lv), 1, "sizeof(S2215C30)");
    check2(__alignof__(lv), 1, "__alignof__(S2215C30)");
  }
}
static Arrange_To_Call_Me vS2215C30(Test_S2215C30, "S2215C30", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2215C30[];
VTBL_ENTRY *P__ZTI8S2215C30 = _ZTI8S2215C30; 
Class_Descriptor cd_S2215C30 = {  "S2215C30", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2215C30),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  S2215C29_nt  {
  void *s2215c29f0;
  int s2215c29f1[2];
  ::S2215C30 s2215c29f2;
  void  mf2215c29(); // _ZN11S2215C29_nt9mf2215c29Ev
};
//SIG(-1 S2215C29_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2215C29_nt ::mf2215c29(){}

//skip512 S2215C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C37  {
  void *s2215c37f0;
  int s2215c37f1[2];
  ::S2215C30 s2215c37f2;
  void  mf2215c37(); // _ZN8S2215C379mf2215c37Ev
};
//SIG(-1 S2215C37) C1{ m Fp Fi[2] FC2{ m}}


void  S2215C37 ::mf2215c37(){}

static void Test_S2215C37()
{
  {
    init_simple_test("S2215C37");
    S2215C37 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2215C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2215C37)");
    check_field_offset(lv, s2215c37f0, 0, "S2215C37.s2215c37f0");
    check_field_offset(lv, s2215c37f1, ABISELECT(8,4), "S2215C37.s2215c37f1");
    check_field_offset(lv, s2215c37f2, ABISELECT(16,12), "S2215C37.s2215c37f2");
  }
}
static Arrange_To_Call_Me vS2215C37(Test_S2215C37, "S2215C37", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C3_nt  : S2215C4_nt {
  ::S2215C13_nt s2215c3f0;
  ::S2215C13_nt s2215c3f1;
  ::S2215C13_nt s2215c3f2;
  ::S2215C13_nt s2215c3f3;
  ::S2215C17_nt s2215c3f4;
  ::S2215C18_nt s2215c3f5;
  ::S2215C18_nt s2215c3f6;
  ::S2215C13_nt s2215c3f7;
  ::S2215C13_nt s2215c3f8;
  ::S2215C13_nt s2215c3f9;
  void *s2215c3f10;
  ::S2215C17_nt s2215c3f11;
  ::S2215C19_nt s2215c3f12;
  int s2215c3f13;
  void *s2215c3f14[7];
  ::S2215C22 s2215c3f15;
  int s2215c3f16:8;
  int s2215c3f17:8;
  int s2215c3f18:16;
  int s2215c3f19:16;
  int s2215c3f20:8;
  int s2215c3f21:8;
  int s2215c3f22:8;
  int s2215c3f23:32;
  int s2215c3f24:8;
  int s2215c3f25:4;
  int s2215c3f26:4;
  int s2215c3f27:4;
  int s2215c3f28:4;
  int s2215c3f29:4;
  int s2215c3f30:4;
  int s2215c3f31:4;
  int s2215c3f32:4;
  int s2215c3f33:4;
  int s2215c3f34:4;
  unsigned char s2215c3f35:1;
  unsigned char s2215c3f36:1;
  unsigned char s2215c3f37:1;
  unsigned char s2215c3f38:1;
  unsigned char s2215c3f39:1;
  unsigned char s2215c3f40:1;
  unsigned char s2215c3f41:1;
  unsigned char s2215c3f42:1;
  unsigned char s2215c3f43:1;
  unsigned char s2215c3f44:1;
  unsigned char s2215c3f45:1;
  unsigned char s2215c3f46:1;
  unsigned char s2215c3f47:1;
  unsigned char s2215c3f48:1;
  unsigned char s2215c3f49:1;
  unsigned char s2215c3f50:1;
  unsigned char s2215c3f51:1;
  unsigned char s2215c3f52:1;
  unsigned char s2215c3f53:1;
  unsigned char s2215c3f54:1;
  unsigned char s2215c3f55:1;
  unsigned char s2215c3f56:1;
  unsigned char s2215c3f57:1;
  unsigned char s2215c3f58:1;
  unsigned char s2215c3f59:1;
  unsigned char s2215c3f60:1;
  unsigned char s2215c3f61:1;
  unsigned char s2215c3f62:1;
  unsigned char s2215c3f63:1;
  unsigned char s2215c3f64:1;
  unsigned char s2215c3f65:1;
  unsigned char s2215c3f66:1;
  unsigned char s2215c3f67:1;
  unsigned char s2215c3f68:1;
  unsigned char s2215c3f69:1;
  unsigned char s2215c3f70:1;
  unsigned char s2215c3f71:1;
  unsigned char s2215c3f72:1;
  unsigned char s2215c3f73:1;
  unsigned char s2215c3f74:1;
  unsigned char s2215c3f75:1;
  int s2215c3f76[7];
  void *s2215c3f77[6];
  int s2215c3f78:8;
  int s2215c3f79:8;
  int s2215c3f80:8;
  int s2215c3f81:8;
  int s2215c3f82:8;
  int s2215c3f83:8;
  ::S2215C25 s2215c3f84;
  void *s2215c3f85[4];
  int s2215c3f86:8;
  int s2215c3f87:8;
  int s2215c3f88:8;
  int s2215c3f89:8;
  int s2215c3f90:8;
  int s2215c3f91:16;
  int s2215c3f92:16;
  int s2215c3f93:16;
  int s2215c3f94:4;
  int s2215c3f95:4;
  int s2215c3f96:4;
  int s2215c3f97:4;
  int s2215c3f98:4;
  int s2215c3f99:4;
  int s2215c3f100:4;
  int s2215c3f101:4;
  int s2215c3f102:4;
  int s2215c3f103:4;
  int s2215c3f104:4;
  int s2215c3f105:4;
  int s2215c3f106:8;
  int s2215c3f107:8;
  int s2215c3f108:8;
  void *s2215c3f109[7];
  ::S2215C29_nt s2215c3f110;
  void *s2215c3f111[2];
  int s2215c3f112:16;
  int s2215c3f113:16;
  ::S2215C25 s2215c3f114;
  ::S2215C29_nt s2215c3f115;
  ::S2215C37 s2215c3f116;
  void *s2215c3f117[2];
  int s2215c3f118:24;
  int s2215c3f119:8;
  void *s2215c3f120;
  virtual  ~S2215C3_nt(); // _ZN10S2215C3_ntD1Ev
  virtual void  v26(); // _ZN10S2215C3_nt3v26Ev
  virtual void  v27(); // _ZN10S2215C3_nt3v27Ev
  virtual void  v28(); // _ZN10S2215C3_nt3v28Ev
  virtual void  v29(); // _ZN10S2215C3_nt3v29Ev
  virtual void  v30(); // _ZN10S2215C3_nt3v30Ev
  virtual void  v31(); // _ZN10S2215C3_nt3v31Ev
  virtual void  v32(); // _ZN10S2215C3_nt3v32Ev
  virtual void  v33(); // _ZN10S2215C3_nt3v33Ev
  virtual void  v34(); // _ZN10S2215C3_nt3v34Ev
  virtual void  v35(); // _ZN10S2215C3_nt3v35Ev
  virtual void  v36(); // _ZN10S2215C3_nt3v36Ev
  virtual void  v37(); // _ZN10S2215C3_nt3v37Ev
  virtual void  v38(); // _ZN10S2215C3_nt3v38Ev
  virtual void  v39(); // _ZN10S2215C3_nt3v39Ev
  virtual void  v40(); // _ZN10S2215C3_nt3v40Ev
  virtual void  v41(); // _ZN10S2215C3_nt3v41Ev
  virtual void  v42(); // _ZN10S2215C3_nt3v42Ev
  virtual void  v43(); // _ZN10S2215C3_nt3v43Ev
  virtual void  v44(); // _ZN10S2215C3_nt3v44Ev
  virtual void  v45(); // _ZN10S2215C3_nt3v45Ev
  virtual void  v46(); // _ZN10S2215C3_nt3v46Ev
  virtual void  v47(); // _ZN10S2215C3_nt3v47Ev
  virtual void  v48(); // _ZN10S2215C3_nt3v48Ev
  virtual void  v49(); // _ZN10S2215C3_nt3v49Ev
  virtual void  v50(); // _ZN10S2215C3_nt3v50Ev
  virtual void  v51(); // _ZN10S2215C3_nt3v51Ev
  virtual void  v52(); // _ZN10S2215C3_nt3v52Ev
  virtual void  v53(); // _ZN10S2215C3_nt3v53Ev
  virtual void  v54(); // _ZN10S2215C3_nt3v54Ev
  virtual void  v55(); // _ZN10S2215C3_nt3v55Ev
  virtual void  v56(); // _ZN10S2215C3_nt3v56Ev
  virtual void  v57(); // _ZN10S2215C3_nt3v57Ev
  virtual void  v58(); // _ZN10S2215C3_nt3v58Ev
  virtual void  v59(); // _ZN10S2215C3_nt3v59Ev
  virtual void  v60(); // _ZN10S2215C3_nt3v60Ev
  virtual void  v61(); // _ZN10S2215C3_nt3v61Ev
  virtual void  v62(); // _ZN10S2215C3_nt3v62Ev
  virtual void  v63(); // _ZN10S2215C3_nt3v63Ev
  virtual void  v64(); // _ZN10S2215C3_nt3v64Ev
  virtual void  v65(); // _ZN10S2215C3_nt3v65Ev
  virtual void  v66(); // _ZN10S2215C3_nt3v66Ev
  virtual void  v67(); // _ZN10S2215C3_nt3v67Ev
  virtual void  v68(); // _ZN10S2215C3_nt3v68Ev
  virtual void  v69(); // _ZN10S2215C3_nt3v69Ev
  virtual void  v70(); // _ZN10S2215C3_nt3v70Ev
  virtual void  v71(); // _ZN10S2215C3_nt3v71Ev
  virtual void  v72(); // _ZN10S2215C3_nt3v72Ev
  virtual void  v73(); // _ZN10S2215C3_nt3v73Ev
  virtual void  v74(); // _ZN10S2215C3_nt3v74Ev
  virtual void  v75(); // _ZN10S2215C3_nt3v75Ev
  virtual void  v76(); // _ZN10S2215C3_nt3v76Ev
  virtual void  v77(); // _ZN10S2215C3_nt3v77Ev
  virtual void  v78(); // _ZN10S2215C3_nt3v78Ev
  virtual void  v79(); // _ZN10S2215C3_nt3v79Ev
  virtual void  v80(); // _ZN10S2215C3_nt3v80Ev
  virtual void  v81(); // _ZN10S2215C3_nt3v81Ev
  virtual void  v82(); // _ZN10S2215C3_nt3v82Ev
  virtual void  v83(); // _ZN10S2215C3_nt3v83Ev
  virtual void  v84(); // _ZN10S2215C3_nt3v84Ev
  virtual void  v85(); // _ZN10S2215C3_nt3v85Ev
  virtual void  v86(); // _ZN10S2215C3_nt3v86Ev
  virtual void  v87(); // _ZN10S2215C3_nt3v87Ev
  virtual void  v88(); // _ZN10S2215C3_nt3v88Ev
  virtual void  v89(); // _ZN10S2215C3_nt3v89Ev
  virtual void  v90(); // _ZN10S2215C3_nt3v90Ev
  virtual void  v91(); // _ZN10S2215C3_nt3v91Ev
  virtual void  v92(); // _ZN10S2215C3_nt3v92Ev
  virtual void  v93(); // _ZN10S2215C3_nt3v93Ev
  virtual void  v94(); // _ZN10S2215C3_nt3v94Ev
  virtual void  v95(); // _ZN10S2215C3_nt3v95Ev
  virtual void  v96(); // _ZN10S2215C3_nt3v96Ev
  virtual void  v97(); // _ZN10S2215C3_nt3v97Ev
  virtual void  v98(); // _ZN10S2215C3_nt3v98Ev
  virtual void  v99(); // _ZN10S2215C3_nt3v99Ev
  virtual void  v100(); // _ZN10S2215C3_nt4v100Ev
  virtual void  v101(); // _ZN10S2215C3_nt4v101Ev
  virtual void  v102(); // _ZN10S2215C3_nt4v102Ev
  virtual void  v103(); // _ZN10S2215C3_nt4v103Ev
  S2215C3_nt(); // tgen
};
//SIG(-1 S2215C3_nt) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC3 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC7{ m FC8{ m FL[2]}} FC7 FC7 FC7 FC9{ m FC7} FC10{ m FC7 FC7 FC7 FC7} FC10 FC7 FC7 FC7 Fp FC9 FC11{ m FC12{ m Fp Fi FC6} Fi} Fi Fp[7] FC13{ m Fp Fi FC14{ m} FC14} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC15{ BC16{ m Fp Fi FC17{ m} FC17}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC18{ m Fp Fi[2] FC19{ m}} Fp[2] Fi:16 Fi:16 FC15 FC18 FC20{ m Fp Fi[2] FC19} Fp[2] Fi:24 Fi:8 Fp}


 S2215C3_nt ::~S2215C3_nt(){ note_dtor("S2215C3_nt", this);}
void  S2215C3_nt ::v26(){vfunc_called(this, "_ZN10S2215C3_nt3v26Ev");}
void  S2215C3_nt ::v27(){vfunc_called(this, "_ZN10S2215C3_nt3v27Ev");}
void  S2215C3_nt ::v28(){vfunc_called(this, "_ZN10S2215C3_nt3v28Ev");}
void  S2215C3_nt ::v29(){vfunc_called(this, "_ZN10S2215C3_nt3v29Ev");}
void  S2215C3_nt ::v30(){vfunc_called(this, "_ZN10S2215C3_nt3v30Ev");}
void  S2215C3_nt ::v31(){vfunc_called(this, "_ZN10S2215C3_nt3v31Ev");}
void  S2215C3_nt ::v32(){vfunc_called(this, "_ZN10S2215C3_nt3v32Ev");}
void  S2215C3_nt ::v33(){vfunc_called(this, "_ZN10S2215C3_nt3v33Ev");}
void  S2215C3_nt ::v34(){vfunc_called(this, "_ZN10S2215C3_nt3v34Ev");}
void  S2215C3_nt ::v35(){vfunc_called(this, "_ZN10S2215C3_nt3v35Ev");}
void  S2215C3_nt ::v36(){vfunc_called(this, "_ZN10S2215C3_nt3v36Ev");}
void  S2215C3_nt ::v37(){vfunc_called(this, "_ZN10S2215C3_nt3v37Ev");}
void  S2215C3_nt ::v38(){vfunc_called(this, "_ZN10S2215C3_nt3v38Ev");}
void  S2215C3_nt ::v39(){vfunc_called(this, "_ZN10S2215C3_nt3v39Ev");}
void  S2215C3_nt ::v40(){vfunc_called(this, "_ZN10S2215C3_nt3v40Ev");}
void  S2215C3_nt ::v41(){vfunc_called(this, "_ZN10S2215C3_nt3v41Ev");}
void  S2215C3_nt ::v42(){vfunc_called(this, "_ZN10S2215C3_nt3v42Ev");}
void  S2215C3_nt ::v43(){vfunc_called(this, "_ZN10S2215C3_nt3v43Ev");}
void  S2215C3_nt ::v44(){vfunc_called(this, "_ZN10S2215C3_nt3v44Ev");}
void  S2215C3_nt ::v45(){vfunc_called(this, "_ZN10S2215C3_nt3v45Ev");}
void  S2215C3_nt ::v46(){vfunc_called(this, "_ZN10S2215C3_nt3v46Ev");}
void  S2215C3_nt ::v47(){vfunc_called(this, "_ZN10S2215C3_nt3v47Ev");}
void  S2215C3_nt ::v48(){vfunc_called(this, "_ZN10S2215C3_nt3v48Ev");}
void  S2215C3_nt ::v49(){vfunc_called(this, "_ZN10S2215C3_nt3v49Ev");}
void  S2215C3_nt ::v50(){vfunc_called(this, "_ZN10S2215C3_nt3v50Ev");}
void  S2215C3_nt ::v51(){vfunc_called(this, "_ZN10S2215C3_nt3v51Ev");}
void  S2215C3_nt ::v52(){vfunc_called(this, "_ZN10S2215C3_nt3v52Ev");}
void  S2215C3_nt ::v53(){vfunc_called(this, "_ZN10S2215C3_nt3v53Ev");}
void  S2215C3_nt ::v54(){vfunc_called(this, "_ZN10S2215C3_nt3v54Ev");}
void  S2215C3_nt ::v55(){vfunc_called(this, "_ZN10S2215C3_nt3v55Ev");}
void  S2215C3_nt ::v56(){vfunc_called(this, "_ZN10S2215C3_nt3v56Ev");}
void  S2215C3_nt ::v57(){vfunc_called(this, "_ZN10S2215C3_nt3v57Ev");}
void  S2215C3_nt ::v58(){vfunc_called(this, "_ZN10S2215C3_nt3v58Ev");}
void  S2215C3_nt ::v59(){vfunc_called(this, "_ZN10S2215C3_nt3v59Ev");}
void  S2215C3_nt ::v60(){vfunc_called(this, "_ZN10S2215C3_nt3v60Ev");}
void  S2215C3_nt ::v61(){vfunc_called(this, "_ZN10S2215C3_nt3v61Ev");}
void  S2215C3_nt ::v62(){vfunc_called(this, "_ZN10S2215C3_nt3v62Ev");}
void  S2215C3_nt ::v63(){vfunc_called(this, "_ZN10S2215C3_nt3v63Ev");}
void  S2215C3_nt ::v64(){vfunc_called(this, "_ZN10S2215C3_nt3v64Ev");}
void  S2215C3_nt ::v65(){vfunc_called(this, "_ZN10S2215C3_nt3v65Ev");}
void  S2215C3_nt ::v66(){vfunc_called(this, "_ZN10S2215C3_nt3v66Ev");}
void  S2215C3_nt ::v67(){vfunc_called(this, "_ZN10S2215C3_nt3v67Ev");}
void  S2215C3_nt ::v68(){vfunc_called(this, "_ZN10S2215C3_nt3v68Ev");}
void  S2215C3_nt ::v69(){vfunc_called(this, "_ZN10S2215C3_nt3v69Ev");}
void  S2215C3_nt ::v70(){vfunc_called(this, "_ZN10S2215C3_nt3v70Ev");}
void  S2215C3_nt ::v71(){vfunc_called(this, "_ZN10S2215C3_nt3v71Ev");}
void  S2215C3_nt ::v72(){vfunc_called(this, "_ZN10S2215C3_nt3v72Ev");}
void  S2215C3_nt ::v73(){vfunc_called(this, "_ZN10S2215C3_nt3v73Ev");}
void  S2215C3_nt ::v74(){vfunc_called(this, "_ZN10S2215C3_nt3v74Ev");}
void  S2215C3_nt ::v75(){vfunc_called(this, "_ZN10S2215C3_nt3v75Ev");}
void  S2215C3_nt ::v76(){vfunc_called(this, "_ZN10S2215C3_nt3v76Ev");}
void  S2215C3_nt ::v77(){vfunc_called(this, "_ZN10S2215C3_nt3v77Ev");}
void  S2215C3_nt ::v78(){vfunc_called(this, "_ZN10S2215C3_nt3v78Ev");}
void  S2215C3_nt ::v79(){vfunc_called(this, "_ZN10S2215C3_nt3v79Ev");}
void  S2215C3_nt ::v80(){vfunc_called(this, "_ZN10S2215C3_nt3v80Ev");}
void  S2215C3_nt ::v81(){vfunc_called(this, "_ZN10S2215C3_nt3v81Ev");}
void  S2215C3_nt ::v82(){vfunc_called(this, "_ZN10S2215C3_nt3v82Ev");}
void  S2215C3_nt ::v83(){vfunc_called(this, "_ZN10S2215C3_nt3v83Ev");}
void  S2215C3_nt ::v84(){vfunc_called(this, "_ZN10S2215C3_nt3v84Ev");}
void  S2215C3_nt ::v85(){vfunc_called(this, "_ZN10S2215C3_nt3v85Ev");}
void  S2215C3_nt ::v86(){vfunc_called(this, "_ZN10S2215C3_nt3v86Ev");}
void  S2215C3_nt ::v87(){vfunc_called(this, "_ZN10S2215C3_nt3v87Ev");}
void  S2215C3_nt ::v88(){vfunc_called(this, "_ZN10S2215C3_nt3v88Ev");}
void  S2215C3_nt ::v89(){vfunc_called(this, "_ZN10S2215C3_nt3v89Ev");}
void  S2215C3_nt ::v90(){vfunc_called(this, "_ZN10S2215C3_nt3v90Ev");}
void  S2215C3_nt ::v91(){vfunc_called(this, "_ZN10S2215C3_nt3v91Ev");}
void  S2215C3_nt ::v92(){vfunc_called(this, "_ZN10S2215C3_nt3v92Ev");}
void  S2215C3_nt ::v93(){vfunc_called(this, "_ZN10S2215C3_nt3v93Ev");}
void  S2215C3_nt ::v94(){vfunc_called(this, "_ZN10S2215C3_nt3v94Ev");}
void  S2215C3_nt ::v95(){vfunc_called(this, "_ZN10S2215C3_nt3v95Ev");}
void  S2215C3_nt ::v96(){vfunc_called(this, "_ZN10S2215C3_nt3v96Ev");}
void  S2215C3_nt ::v97(){vfunc_called(this, "_ZN10S2215C3_nt3v97Ev");}
void  S2215C3_nt ::v98(){vfunc_called(this, "_ZN10S2215C3_nt3v98Ev");}
void  S2215C3_nt ::v99(){vfunc_called(this, "_ZN10S2215C3_nt3v99Ev");}
void  S2215C3_nt ::v100(){vfunc_called(this, "_ZN10S2215C3_nt4v100Ev");}
void  S2215C3_nt ::v101(){vfunc_called(this, "_ZN10S2215C3_nt4v101Ev");}
void  S2215C3_nt ::v102(){vfunc_called(this, "_ZN10S2215C3_nt4v102Ev");}
void  S2215C3_nt ::v103(){vfunc_called(this, "_ZN10S2215C3_nt4v103Ev");}
S2215C3_nt ::S2215C3_nt(){ note_ctor("S2215C3_nt", this);} // tgen

//skip512 S2215C3_nt

#else // __cplusplus

extern void _ZN10S2215C3_ntC1Ev();
extern void _ZN10S2215C3_ntD1Ev();
Name_Map name_map_S2215C3_nt[] = {
  NSPAIR(_ZN10S2215C3_ntC1Ev),
  NSPAIR(_ZN10S2215C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2215C4_nt;
extern VTBL_ENTRY _ZTI10S2215C4_nt[];
extern  VTBL_ENTRY _ZTV10S2215C4_nt[];
static Base_Class bases_S2215C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2215C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2215C3_nt[];
extern void _ZN10S2215C3_ntD1Ev();
extern void _ZN10S2215C3_ntD0Ev();
extern void _ZN10S2215C4_nt2v3Ev();
extern void _ZN10S2215C4_nt2v4Ev();
extern void _ZN10S2215C4_nt2v5Ev();
extern void _ZN10S2215C4_nt2v6Ev();
extern void _ZN10S2215C4_nt2v7Ev();
extern void _ZN10S2215C4_nt2v8Ev();
extern void _ZN10S2215C4_nt2v9Ev();
extern void _ZN10S2215C4_nt3v10Ev();
extern void _ZN10S2215C4_nt3v11Ev();
extern void _ZN10S2215C4_nt3v12Ev();
extern void _ZN10S2215C4_nt3v13Ev();
extern void _ZN10S2215C4_nt3v14Ev();
extern void _ZN10S2215C4_nt3v15Ev();
extern void _ZN10S2215C4_nt3v16Ev();
extern void _ZN10S2215C4_nt3v17Ev();
extern void _ZN10S2215C4_nt3v18Ev();
extern void _ZN10S2215C4_nt3v19Ev();
extern void _ZN10S2215C4_nt3v20Ev();
extern void _ZN10S2215C4_nt3v21Ev();
extern void _ZN10S2215C4_nt3v22Ev();
extern void _ZN10S2215C4_nt3v23Ev();
extern void _ZN10S2215C4_nt3v24Ev();
extern void _ZN10S2215C4_nt3v25Ev();
extern void _ZN10S2215C3_nt3v26Ev();
extern void _ZN10S2215C3_nt3v27Ev();
extern void _ZN10S2215C3_nt3v28Ev();
extern void _ZN10S2215C3_nt3v29Ev();
extern void _ZN10S2215C3_nt3v30Ev();
extern void _ZN10S2215C3_nt3v31Ev();
extern void _ZN10S2215C3_nt3v32Ev();
extern void _ZN10S2215C3_nt3v33Ev();
extern void _ZN10S2215C3_nt3v34Ev();
extern void _ZN10S2215C3_nt3v35Ev();
extern void _ZN10S2215C3_nt3v36Ev();
extern void _ZN10S2215C3_nt3v37Ev();
extern void _ZN10S2215C3_nt3v38Ev();
extern void _ZN10S2215C3_nt3v39Ev();
extern void _ZN10S2215C3_nt3v40Ev();
extern void _ZN10S2215C3_nt3v41Ev();
extern void _ZN10S2215C3_nt3v42Ev();
extern void _ZN10S2215C3_nt3v43Ev();
extern void _ZN10S2215C3_nt3v44Ev();
extern void _ZN10S2215C3_nt3v45Ev();
extern void _ZN10S2215C3_nt3v46Ev();
extern void _ZN10S2215C3_nt3v47Ev();
extern void _ZN10S2215C3_nt3v48Ev();
extern void _ZN10S2215C3_nt3v49Ev();
extern void _ZN10S2215C3_nt3v50Ev();
extern void _ZN10S2215C3_nt3v51Ev();
extern void _ZN10S2215C3_nt3v52Ev();
extern void _ZN10S2215C3_nt3v53Ev();
extern void _ZN10S2215C3_nt3v54Ev();
extern void _ZN10S2215C3_nt3v55Ev();
extern void _ZN10S2215C3_nt3v56Ev();
extern void _ZN10S2215C3_nt3v57Ev();
extern void _ZN10S2215C3_nt3v58Ev();
extern void _ZN10S2215C3_nt3v59Ev();
extern void _ZN10S2215C3_nt3v60Ev();
extern void _ZN10S2215C3_nt3v61Ev();
extern void _ZN10S2215C3_nt3v62Ev();
extern void _ZN10S2215C3_nt3v63Ev();
extern void _ZN10S2215C3_nt3v64Ev();
extern void _ZN10S2215C3_nt3v65Ev();
extern void _ZN10S2215C3_nt3v66Ev();
extern void _ZN10S2215C3_nt3v67Ev();
extern void _ZN10S2215C3_nt3v68Ev();
extern void _ZN10S2215C3_nt3v69Ev();
extern void _ZN10S2215C3_nt3v70Ev();
extern void _ZN10S2215C3_nt3v71Ev();
extern void _ZN10S2215C3_nt3v72Ev();
extern void _ZN10S2215C3_nt3v73Ev();
extern void _ZN10S2215C3_nt3v74Ev();
extern void _ZN10S2215C3_nt3v75Ev();
extern void _ZN10S2215C3_nt3v76Ev();
extern void _ZN10S2215C3_nt3v77Ev();
extern void _ZN10S2215C3_nt3v78Ev();
extern void _ZN10S2215C3_nt3v79Ev();
extern void _ZN10S2215C3_nt3v80Ev();
extern void _ZN10S2215C3_nt3v81Ev();
extern void _ZN10S2215C3_nt3v82Ev();
extern void _ZN10S2215C3_nt3v83Ev();
extern void _ZN10S2215C3_nt3v84Ev();
extern void _ZN10S2215C3_nt3v85Ev();
extern void _ZN10S2215C3_nt3v86Ev();
extern void _ZN10S2215C3_nt3v87Ev();
extern void _ZN10S2215C3_nt3v88Ev();
extern void _ZN10S2215C3_nt3v89Ev();
extern void _ZN10S2215C3_nt3v90Ev();
extern void _ZN10S2215C3_nt3v91Ev();
extern void _ZN10S2215C3_nt3v92Ev();
extern void _ZN10S2215C3_nt3v93Ev();
extern void _ZN10S2215C3_nt3v94Ev();
extern void _ZN10S2215C3_nt3v95Ev();
extern void _ZN10S2215C3_nt3v96Ev();
extern void _ZN10S2215C3_nt3v97Ev();
extern void _ZN10S2215C3_nt3v98Ev();
extern void _ZN10S2215C3_nt3v99Ev();
extern void _ZN10S2215C3_nt4v100Ev();
extern void _ZN10S2215C3_nt4v101Ev();
extern void _ZN10S2215C3_nt4v102Ev();
extern void _ZN10S2215C3_nt4v103Ev();
static  VTBL_ENTRY vtc_S2215C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2215C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2215C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt4v103Ev,
};
extern VTBL_ENTRY _ZTI10S2215C3_nt[];
VTBL_ENTRY *P__ZTI10S2215C3_nt = _ZTI10S2215C3_nt; 
extern  VTBL_ENTRY _ZTV10S2215C3_nt[];
Class_Descriptor cd_S2215C3_nt = {  "S2215C3_nt", // class name
  bases_S2215C3_nt, 1,
  &(vtc_S2215C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S2215C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2215C3_nt),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C2_nt  : S2215C3_nt {
  void *s2215c2f0;
  virtual  ~S2215C2_nt(); // _ZN10S2215C2_ntD1Ev
  virtual void  v104(); // _ZN10S2215C2_nt4v104Ev
  virtual void  v105(); // _ZN10S2215C2_nt4v105Ev
  virtual void  v106(); // _ZN10S2215C2_nt4v106Ev
  virtual void  v107(); // _ZN10S2215C2_nt4v107Ev
  virtual void  v108(); // _ZN10S2215C2_nt4v108Ev
  virtual void  v109(); // _ZN10S2215C2_nt4v109Ev
  virtual void  v110(); // _ZN10S2215C2_nt4v110Ev
  virtual void  v111(); // _ZN10S2215C2_nt4v111Ev
  virtual void  v112(); // _ZN10S2215C2_nt4v112Ev
  virtual void  v113(); // _ZN10S2215C2_nt4v113Ev
  S2215C2_nt(); // tgen
};
//SIG(-1 S2215C2_nt) C1{ BC2{ BC3{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC4 Fi} vd v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8 FC10{ m FC8} FC11{ m FC8 FC8 FC8 FC8} FC11 FC8 FC8 FC8 Fp FC10 FC12{ m FC13{ m Fp Fi FC7} Fi} Fi Fp[7] FC14{ m Fp Fi FC15{ m} FC15} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC16{ BC17{ m Fp Fi FC18{ m} FC18}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC19{ m Fp Fi[2] FC20{ m}} Fp[2] Fi:16 Fi:16 FC16 FC19 FC21{ m Fp Fi[2] FC20} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp}


 S2215C2_nt ::~S2215C2_nt(){ note_dtor("S2215C2_nt", this);}
void  S2215C2_nt ::v104(){vfunc_called(this, "_ZN10S2215C2_nt4v104Ev");}
void  S2215C2_nt ::v105(){vfunc_called(this, "_ZN10S2215C2_nt4v105Ev");}
void  S2215C2_nt ::v106(){vfunc_called(this, "_ZN10S2215C2_nt4v106Ev");}
void  S2215C2_nt ::v107(){vfunc_called(this, "_ZN10S2215C2_nt4v107Ev");}
void  S2215C2_nt ::v108(){vfunc_called(this, "_ZN10S2215C2_nt4v108Ev");}
void  S2215C2_nt ::v109(){vfunc_called(this, "_ZN10S2215C2_nt4v109Ev");}
void  S2215C2_nt ::v110(){vfunc_called(this, "_ZN10S2215C2_nt4v110Ev");}
void  S2215C2_nt ::v111(){vfunc_called(this, "_ZN10S2215C2_nt4v111Ev");}
void  S2215C2_nt ::v112(){vfunc_called(this, "_ZN10S2215C2_nt4v112Ev");}
void  S2215C2_nt ::v113(){vfunc_called(this, "_ZN10S2215C2_nt4v113Ev");}
S2215C2_nt ::S2215C2_nt(){ note_ctor("S2215C2_nt", this);} // tgen

//skip512 S2215C2_nt

#else // __cplusplus

extern void _ZN10S2215C2_ntC1Ev();
extern void _ZN10S2215C2_ntD1Ev();
Name_Map name_map_S2215C2_nt[] = {
  NSPAIR(_ZN10S2215C2_ntC1Ev),
  NSPAIR(_ZN10S2215C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2215C4_nt;
extern VTBL_ENTRY _ZTI10S2215C4_nt[];
extern  VTBL_ENTRY _ZTV10S2215C4_nt[];
extern Class_Descriptor cd_S2215C3_nt;
extern VTBL_ENTRY _ZTI10S2215C3_nt[];
extern  VTBL_ENTRY _ZTV10S2215C3_nt[];
static Base_Class bases_S2215C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2215C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2215C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI10S2215C2_nt[];
extern void _ZN10S2215C2_ntD1Ev();
extern void _ZN10S2215C2_ntD0Ev();
extern void _ZN10S2215C4_nt2v3Ev();
extern void _ZN10S2215C4_nt2v4Ev();
extern void _ZN10S2215C4_nt2v5Ev();
extern void _ZN10S2215C4_nt2v6Ev();
extern void _ZN10S2215C4_nt2v7Ev();
extern void _ZN10S2215C4_nt2v8Ev();
extern void _ZN10S2215C4_nt2v9Ev();
extern void _ZN10S2215C4_nt3v10Ev();
extern void _ZN10S2215C4_nt3v11Ev();
extern void _ZN10S2215C4_nt3v12Ev();
extern void _ZN10S2215C4_nt3v13Ev();
extern void _ZN10S2215C4_nt3v14Ev();
extern void _ZN10S2215C4_nt3v15Ev();
extern void _ZN10S2215C4_nt3v16Ev();
extern void _ZN10S2215C4_nt3v17Ev();
extern void _ZN10S2215C4_nt3v18Ev();
extern void _ZN10S2215C4_nt3v19Ev();
extern void _ZN10S2215C4_nt3v20Ev();
extern void _ZN10S2215C4_nt3v21Ev();
extern void _ZN10S2215C4_nt3v22Ev();
extern void _ZN10S2215C4_nt3v23Ev();
extern void _ZN10S2215C4_nt3v24Ev();
extern void _ZN10S2215C4_nt3v25Ev();
extern void _ZN10S2215C3_nt3v26Ev();
extern void _ZN10S2215C3_nt3v27Ev();
extern void _ZN10S2215C3_nt3v28Ev();
extern void _ZN10S2215C3_nt3v29Ev();
extern void _ZN10S2215C3_nt3v30Ev();
extern void _ZN10S2215C3_nt3v31Ev();
extern void _ZN10S2215C3_nt3v32Ev();
extern void _ZN10S2215C3_nt3v33Ev();
extern void _ZN10S2215C3_nt3v34Ev();
extern void _ZN10S2215C3_nt3v35Ev();
extern void _ZN10S2215C3_nt3v36Ev();
extern void _ZN10S2215C3_nt3v37Ev();
extern void _ZN10S2215C3_nt3v38Ev();
extern void _ZN10S2215C3_nt3v39Ev();
extern void _ZN10S2215C3_nt3v40Ev();
extern void _ZN10S2215C3_nt3v41Ev();
extern void _ZN10S2215C3_nt3v42Ev();
extern void _ZN10S2215C3_nt3v43Ev();
extern void _ZN10S2215C3_nt3v44Ev();
extern void _ZN10S2215C3_nt3v45Ev();
extern void _ZN10S2215C3_nt3v46Ev();
extern void _ZN10S2215C3_nt3v47Ev();
extern void _ZN10S2215C3_nt3v48Ev();
extern void _ZN10S2215C3_nt3v49Ev();
extern void _ZN10S2215C3_nt3v50Ev();
extern void _ZN10S2215C3_nt3v51Ev();
extern void _ZN10S2215C3_nt3v52Ev();
extern void _ZN10S2215C3_nt3v53Ev();
extern void _ZN10S2215C3_nt3v54Ev();
extern void _ZN10S2215C3_nt3v55Ev();
extern void _ZN10S2215C3_nt3v56Ev();
extern void _ZN10S2215C3_nt3v57Ev();
extern void _ZN10S2215C3_nt3v58Ev();
extern void _ZN10S2215C3_nt3v59Ev();
extern void _ZN10S2215C3_nt3v60Ev();
extern void _ZN10S2215C3_nt3v61Ev();
extern void _ZN10S2215C3_nt3v62Ev();
extern void _ZN10S2215C3_nt3v63Ev();
extern void _ZN10S2215C3_nt3v64Ev();
extern void _ZN10S2215C3_nt3v65Ev();
extern void _ZN10S2215C3_nt3v66Ev();
extern void _ZN10S2215C3_nt3v67Ev();
extern void _ZN10S2215C3_nt3v68Ev();
extern void _ZN10S2215C3_nt3v69Ev();
extern void _ZN10S2215C3_nt3v70Ev();
extern void _ZN10S2215C3_nt3v71Ev();
extern void _ZN10S2215C3_nt3v72Ev();
extern void _ZN10S2215C3_nt3v73Ev();
extern void _ZN10S2215C3_nt3v74Ev();
extern void _ZN10S2215C3_nt3v75Ev();
extern void _ZN10S2215C3_nt3v76Ev();
extern void _ZN10S2215C3_nt3v77Ev();
extern void _ZN10S2215C3_nt3v78Ev();
extern void _ZN10S2215C3_nt3v79Ev();
extern void _ZN10S2215C3_nt3v80Ev();
extern void _ZN10S2215C3_nt3v81Ev();
extern void _ZN10S2215C3_nt3v82Ev();
extern void _ZN10S2215C3_nt3v83Ev();
extern void _ZN10S2215C3_nt3v84Ev();
extern void _ZN10S2215C3_nt3v85Ev();
extern void _ZN10S2215C3_nt3v86Ev();
extern void _ZN10S2215C3_nt3v87Ev();
extern void _ZN10S2215C3_nt3v88Ev();
extern void _ZN10S2215C3_nt3v89Ev();
extern void _ZN10S2215C3_nt3v90Ev();
extern void _ZN10S2215C3_nt3v91Ev();
extern void _ZN10S2215C3_nt3v92Ev();
extern void _ZN10S2215C3_nt3v93Ev();
extern void _ZN10S2215C3_nt3v94Ev();
extern void _ZN10S2215C3_nt3v95Ev();
extern void _ZN10S2215C3_nt3v96Ev();
extern void _ZN10S2215C3_nt3v97Ev();
extern void _ZN10S2215C3_nt3v98Ev();
extern void _ZN10S2215C3_nt3v99Ev();
extern void _ZN10S2215C3_nt4v100Ev();
extern void _ZN10S2215C3_nt4v101Ev();
extern void _ZN10S2215C3_nt4v102Ev();
extern void _ZN10S2215C3_nt4v103Ev();
extern void _ZN10S2215C2_nt4v104Ev();
extern void _ZN10S2215C2_nt4v105Ev();
extern void _ZN10S2215C2_nt4v106Ev();
extern void _ZN10S2215C2_nt4v107Ev();
extern void _ZN10S2215C2_nt4v108Ev();
extern void _ZN10S2215C2_nt4v109Ev();
extern void _ZN10S2215C2_nt4v110Ev();
extern void _ZN10S2215C2_nt4v111Ev();
extern void _ZN10S2215C2_nt4v112Ev();
extern void _ZN10S2215C2_nt4v113Ev();
static  VTBL_ENTRY vtc_S2215C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2215C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2215C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v113Ev,
};
extern VTBL_ENTRY _ZTI10S2215C2_nt[];
VTBL_ENTRY *P__ZTI10S2215C2_nt = _ZTI10S2215C2_nt; 
extern  VTBL_ENTRY _ZTV10S2215C2_nt[];
Class_Descriptor cd_S2215C2_nt = {  "S2215C2_nt", // class name
  bases_S2215C2_nt, 2,
  &(vtc_S2215C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(840,636), // object size
  NSPAIRA(_ZTI10S2215C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2215C2_nt),115, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2215C1  : S2215C2_nt {
  void *s2215c1f0;
  virtual  ~S2215C1(); // _ZN7S2215C1D1Ev
  virtual void  v1(); // _ZN7S2215C12v1Ev
  virtual void  v2(); // _ZN7S2215C12v2Ev
  S2215C1(); // tgen
};
//SIG(1 S2215C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fp Fi FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC5 Fi} 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 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 FC9{ m FC10{ m FL[2]}} FC9 FC9 FC9 FC11{ m FC9} FC12{ m FC9 FC9 FC9 FC9} FC12 FC9 FC9 FC9 Fp FC11 FC13{ m FC14{ m Fp Fi FC8} Fi} Fi Fp[7] FC15{ m Fp Fi FC16{ m} FC16} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC17{ BC18{ m Fp Fi FC19{ m} FC19}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC20{ m Fp Fi[2] FC21{ m}} Fp[2] Fi:16 Fi:16 FC17 FC20 FC22{ m Fp Fi[2] FC21} Fp[2] Fi:24 Fi:8 Fp} vd v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fp} vd v1 v2 Fp}


 S2215C1 ::~S2215C1(){ note_dtor("S2215C1", this);}
void  S2215C1 ::v1(){vfunc_called(this, "_ZN7S2215C12v1Ev");}
void  S2215C1 ::v2(){vfunc_called(this, "_ZN7S2215C12v2Ev");}
S2215C1 ::S2215C1(){ note_ctor("S2215C1", this);} // tgen

static void Test_S2215C1()
{
  extern Class_Descriptor cd_S2215C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(107,161)];
    init_test(&cd_S2215C1, buf);
    S2215C1 *dp, &lv = *(dp=new (buf) S2215C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,640), "sizeof(S2215C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2215C1)");
    check_base_class_offset(lv, (S2215C4_nt*)(S2215C3_nt*)(S2215C2_nt*), 0, "S2215C1");
    check_base_class_offset(lv, (S2215C3_nt*)(S2215C2_nt*), 0, "S2215C1");
    check_base_class_offset(lv, (S2215C2_nt*), 0, "S2215C1");
    check_field_offset(lv, s2215c1f0, ABISELECT(840,636), "S2215C1.s2215c1f0");
    test_class_info(&lv, &cd_S2215C1);
    dp->~S2215C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2215C1(Test_S2215C1, "S2215C1", ABISELECT(848,640));

#else // __cplusplus

extern void _ZN7S2215C1C1Ev();
extern void _ZN7S2215C1D1Ev();
Name_Map name_map_S2215C1[] = {
  NSPAIR(_ZN7S2215C1C1Ev),
  NSPAIR(_ZN7S2215C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2215C4_nt;
extern VTBL_ENTRY _ZTI10S2215C4_nt[];
extern  VTBL_ENTRY _ZTV10S2215C4_nt[];
extern Class_Descriptor cd_S2215C3_nt;
extern VTBL_ENTRY _ZTI10S2215C3_nt[];
extern  VTBL_ENTRY _ZTV10S2215C3_nt[];
extern Class_Descriptor cd_S2215C2_nt;
extern VTBL_ENTRY _ZTI10S2215C2_nt[];
extern  VTBL_ENTRY _ZTV10S2215C2_nt[];
static Base_Class bases_S2215C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2215C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2215C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2215C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2215C1[];
extern void _ZN7S2215C1D1Ev();
extern void _ZN7S2215C1D0Ev();
extern void _ZN10S2215C4_nt2v3Ev();
extern void _ZN10S2215C4_nt2v4Ev();
extern void _ZN10S2215C4_nt2v5Ev();
extern void _ZN10S2215C4_nt2v6Ev();
extern void _ZN10S2215C4_nt2v7Ev();
extern void _ZN10S2215C4_nt2v8Ev();
extern void _ZN10S2215C4_nt2v9Ev();
extern void _ZN10S2215C4_nt3v10Ev();
extern void _ZN10S2215C4_nt3v11Ev();
extern void _ZN10S2215C4_nt3v12Ev();
extern void _ZN10S2215C4_nt3v13Ev();
extern void _ZN10S2215C4_nt3v14Ev();
extern void _ZN10S2215C4_nt3v15Ev();
extern void _ZN10S2215C4_nt3v16Ev();
extern void _ZN10S2215C4_nt3v17Ev();
extern void _ZN10S2215C4_nt3v18Ev();
extern void _ZN10S2215C4_nt3v19Ev();
extern void _ZN10S2215C4_nt3v20Ev();
extern void _ZN10S2215C4_nt3v21Ev();
extern void _ZN10S2215C4_nt3v22Ev();
extern void _ZN10S2215C4_nt3v23Ev();
extern void _ZN10S2215C4_nt3v24Ev();
extern void _ZN10S2215C4_nt3v25Ev();
extern void _ZN10S2215C3_nt3v26Ev();
extern void _ZN10S2215C3_nt3v27Ev();
extern void _ZN10S2215C3_nt3v28Ev();
extern void _ZN10S2215C3_nt3v29Ev();
extern void _ZN10S2215C3_nt3v30Ev();
extern void _ZN10S2215C3_nt3v31Ev();
extern void _ZN10S2215C3_nt3v32Ev();
extern void _ZN10S2215C3_nt3v33Ev();
extern void _ZN10S2215C3_nt3v34Ev();
extern void _ZN10S2215C3_nt3v35Ev();
extern void _ZN10S2215C3_nt3v36Ev();
extern void _ZN10S2215C3_nt3v37Ev();
extern void _ZN10S2215C3_nt3v38Ev();
extern void _ZN10S2215C3_nt3v39Ev();
extern void _ZN10S2215C3_nt3v40Ev();
extern void _ZN10S2215C3_nt3v41Ev();
extern void _ZN10S2215C3_nt3v42Ev();
extern void _ZN10S2215C3_nt3v43Ev();
extern void _ZN10S2215C3_nt3v44Ev();
extern void _ZN10S2215C3_nt3v45Ev();
extern void _ZN10S2215C3_nt3v46Ev();
extern void _ZN10S2215C3_nt3v47Ev();
extern void _ZN10S2215C3_nt3v48Ev();
extern void _ZN10S2215C3_nt3v49Ev();
extern void _ZN10S2215C3_nt3v50Ev();
extern void _ZN10S2215C3_nt3v51Ev();
extern void _ZN10S2215C3_nt3v52Ev();
extern void _ZN10S2215C3_nt3v53Ev();
extern void _ZN10S2215C3_nt3v54Ev();
extern void _ZN10S2215C3_nt3v55Ev();
extern void _ZN10S2215C3_nt3v56Ev();
extern void _ZN10S2215C3_nt3v57Ev();
extern void _ZN10S2215C3_nt3v58Ev();
extern void _ZN10S2215C3_nt3v59Ev();
extern void _ZN10S2215C3_nt3v60Ev();
extern void _ZN10S2215C3_nt3v61Ev();
extern void _ZN10S2215C3_nt3v62Ev();
extern void _ZN10S2215C3_nt3v63Ev();
extern void _ZN10S2215C3_nt3v64Ev();
extern void _ZN10S2215C3_nt3v65Ev();
extern void _ZN10S2215C3_nt3v66Ev();
extern void _ZN10S2215C3_nt3v67Ev();
extern void _ZN10S2215C3_nt3v68Ev();
extern void _ZN10S2215C3_nt3v69Ev();
extern void _ZN10S2215C3_nt3v70Ev();
extern void _ZN10S2215C3_nt3v71Ev();
extern void _ZN10S2215C3_nt3v72Ev();
extern void _ZN10S2215C3_nt3v73Ev();
extern void _ZN10S2215C3_nt3v74Ev();
extern void _ZN10S2215C3_nt3v75Ev();
extern void _ZN10S2215C3_nt3v76Ev();
extern void _ZN10S2215C3_nt3v77Ev();
extern void _ZN10S2215C3_nt3v78Ev();
extern void _ZN10S2215C3_nt3v79Ev();
extern void _ZN10S2215C3_nt3v80Ev();
extern void _ZN10S2215C3_nt3v81Ev();
extern void _ZN10S2215C3_nt3v82Ev();
extern void _ZN10S2215C3_nt3v83Ev();
extern void _ZN10S2215C3_nt3v84Ev();
extern void _ZN10S2215C3_nt3v85Ev();
extern void _ZN10S2215C3_nt3v86Ev();
extern void _ZN10S2215C3_nt3v87Ev();
extern void _ZN10S2215C3_nt3v88Ev();
extern void _ZN10S2215C3_nt3v89Ev();
extern void _ZN10S2215C3_nt3v90Ev();
extern void _ZN10S2215C3_nt3v91Ev();
extern void _ZN10S2215C3_nt3v92Ev();
extern void _ZN10S2215C3_nt3v93Ev();
extern void _ZN10S2215C3_nt3v94Ev();
extern void _ZN10S2215C3_nt3v95Ev();
extern void _ZN10S2215C3_nt3v96Ev();
extern void _ZN10S2215C3_nt3v97Ev();
extern void _ZN10S2215C3_nt3v98Ev();
extern void _ZN10S2215C3_nt3v99Ev();
extern void _ZN10S2215C3_nt4v100Ev();
extern void _ZN10S2215C3_nt4v101Ev();
extern void _ZN10S2215C3_nt4v102Ev();
extern void _ZN10S2215C3_nt4v103Ev();
extern void _ZN10S2215C2_nt4v104Ev();
extern void _ZN10S2215C2_nt4v105Ev();
extern void _ZN10S2215C2_nt4v106Ev();
extern void _ZN10S2215C2_nt4v107Ev();
extern void _ZN10S2215C2_nt4v108Ev();
extern void _ZN10S2215C2_nt4v109Ev();
extern void _ZN10S2215C2_nt4v110Ev();
extern void _ZN10S2215C2_nt4v111Ev();
extern void _ZN10S2215C2_nt4v112Ev();
extern void _ZN10S2215C2_nt4v113Ev();
extern void _ZN7S2215C12v1Ev();
extern void _ZN7S2215C12v2Ev();
static  VTBL_ENTRY vtc_S2215C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2215C1[0]),
  (VTBL_ENTRY)&_ZN7S2215C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2215C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2215C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2215C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S2215C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN7S2215C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2215C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2215C1[];
extern  VTBL_ENTRY _ZTV7S2215C1[];
Class_Descriptor cd_S2215C1 = {  "S2215C1", // class name
  bases_S2215C1, 3,
  &(vtc_S2215C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(848,640), // object size
  NSPAIRA(_ZTI7S2215C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2215C1),117, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S20176C3_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S20176C3_nt[];
VTBL_ENTRY *P__ZTI11S20176C3_nt = _ZTI11S20176C3_nt; 
Class_Descriptor cd_S20176C3_nt = {  "S20176C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S20176C3_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  S20176C5  {
  int s20176c5f0;
  void *s20176c5f1;
  ::S281C37_nt s20176c5f2;
  virtual void  v3(); // _ZN8S20176C52v3Ev
  ~S20176C5(); // tgen
  S20176C5(); // tgen
};
//SIG(-1 S20176C5) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S20176C5()
{
  extern Class_Descriptor cd_S20176C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20176C5, buf);
    S20176C5 *dp, &lv = *(dp=new (buf) S20176C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20176C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20176C5)");
    check_field_offset(lv, s20176c5f0, ABISELECT(8,4), "S20176C5.s20176c5f0");
    check_field_offset(lv, s20176c5f1, ABISELECT(16,8), "S20176C5.s20176c5f1");
    check_field_offset(lv, s20176c5f2, ABISELECT(24,12), "S20176C5.s20176c5f2");
    test_class_info(&lv, &cd_S20176C5);
    dp->~S20176C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C5(Test_S20176C5, "S20176C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20176C5C1Ev();
extern void _ZN8S20176C5D1Ev();
Name_Map name_map_S20176C5[] = {
  NSPAIR(_ZN8S20176C5C1Ev),
  NSPAIR(_ZN8S20176C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20176C5[];
extern void _ZN8S20176C52v3Ev();
static  VTBL_ENTRY vtc_S20176C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C5[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
};
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
Class_Descriptor cd_S20176C5 = {  "S20176C5", // class name
  0,0,//no base classes
  &(vtc_S20176C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20176C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20176C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C2  {
  int s20176c2f0[6];
  char s20176c2f1:2;
  long double s20176c2f2;
  void *s20176c2f3[2];
  int s20176c2f4;
  long double s20176c2f5;
  ::S20176C3_nt s20176c2f6;
  ::S281C37_nt s20176c2f7;
  ::S281C37_nt s20176c2f8[9];
  void *s20176c2f9;
  ::S20176C5 s20176c2f10;
  ::S20176C5 s20176c2f11;
  virtual void  v4(); // _ZN8S20176C22v4Ev
  ~S20176C2(); // tgen
  S20176C2(); // tgen
};
//SIG(-1 S20176C2) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


void  S20176C2 ::v4(){vfunc_called(this, "_ZN8S20176C22v4Ev");}
S20176C2 ::~S20176C2(){ note_dtor("S20176C2", this);} // tgen
S20176C2 ::S20176C2(){ note_ctor("S20176C2", this);} // tgen

static void Test_S20176C2()
{
  extern Class_Descriptor cd_S20176C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S20176C2, buf);
    S20176C2 *dp, &lv = *(dp=new (buf) S20176C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S20176C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C2)");
    check_field_offset(lv, s20176c2f0, ABISELECT(8,4), "S20176C2.s20176c2f0");
    set_bf_and_test(lv, s20176c2f1, ABISELECT(32,28), 0, 2, 1, "S20176C2");
    set_bf_and_test(lv, s20176c2f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S20176C2");
    check_field_offset(lv, s20176c2f2, ABISELECT(48,32), "S20176C2.s20176c2f2");
    check_field_offset(lv, s20176c2f3, ABISELECT(64,44), "S20176C2.s20176c2f3");
    check_field_offset(lv, s20176c2f4, ABISELECT(80,52), "S20176C2.s20176c2f4");
    check_field_offset(lv, s20176c2f5, ABISELECT(96,56), "S20176C2.s20176c2f5");
    check_field_offset(lv, s20176c2f6, ABISELECT(112,68), "S20176C2.s20176c2f6");
    check_field_offset(lv, s20176c2f7, ABISELECT(120,72), "S20176C2.s20176c2f7");
    check_field_offset(lv, s20176c2f8, ABISELECT(136,80), "S20176C2.s20176c2f8");
    check_field_offset(lv, s20176c2f9, ABISELECT(280,152), "S20176C2.s20176c2f9");
    check_field_offset(lv, s20176c2f10, ABISELECT(288,156), "S20176C2.s20176c2f10");
    check_field_offset(lv, s20176c2f11, ABISELECT(328,176), "S20176C2.s20176c2f11");
    test_class_info(&lv, &cd_S20176C2);
    dp->~S20176C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C2(Test_S20176C2, "S20176C2", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN8S20176C2C1Ev();
extern void _ZN8S20176C2D1Ev();
Name_Map name_map_S20176C2[] = {
  NSPAIR(_ZN8S20176C2C1Ev),
  NSPAIR(_ZN8S20176C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20176C2[];
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY vtc_S20176C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C2[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
Class_Descriptor cd_S20176C2 = {  "S20176C2", // class name
  0,0,//no base classes
  &(vtc_S20176C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI8S20176C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20176C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C8  : S20176C5 , virtual S20176C2 , virtual S281C37_nt {
  void *s20176c8f0;
  __tsi64 s20176c8f1;
  char s20176c8f2[2];
  ::S20176C2 s20176c8f3;
  short s20176c8f4[7];
  int s20176c8f5;
  char s20176c8f6;
  int s20176c8f7:20;
  virtual void  v5(); // _ZN8S20176C82v5Ev
  ~S20176C8(); // tgen
  S20176C8(); // tgen
};
//SIG(-1 S20176C8) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


void  S20176C8 ::v5(){vfunc_called(this, "_ZN8S20176C82v5Ev");}
S20176C8 ::~S20176C8(){ note_dtor("S20176C8", this);} // tgen
S20176C8 ::S20176C8(){ note_ctor("S20176C8", this);} // tgen

static void Test_S20176C8()
{
  extern Class_Descriptor cd_S20176C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S20176C8, buf);
    S20176C8 *dp, &lv = *(dp=new (buf) S20176C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S20176C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C8)");
    check_base_class_offset(lv, (S20176C5*), 0, "S20176C8");
    check_base_class_offset(lv, (S20176C2*), ABISELECT(464,256), "S20176C8");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S20176C8");
    check_field_offset(lv, s20176c8f0, ABISELECT(40,20), "S20176C8.s20176c8f0");
    check_field_offset(lv, s20176c8f1, ABISELECT(48,24), "S20176C8.s20176c8f1");
    check_field_offset(lv, s20176c8f2, ABISELECT(56,32), "S20176C8.s20176c8f2");
    check_field_offset(lv, s20176c8f3, ABISELECT(64,36), "S20176C8.s20176c8f3");
    check_field_offset(lv, s20176c8f4, ABISELECT(432,232), "S20176C8.s20176c8f4");
    check_field_offset(lv, s20176c8f5, ABISELECT(448,248), "S20176C8.s20176c8f5");
    check_field_offset(lv, s20176c8f6, ABISELECT(452,252), "S20176C8.s20176c8f6");
    set_bf_and_test(lv, s20176c8f7, ABISELECT(453,253), 0, 20, 1, "S20176C8");
    set_bf_and_test(lv, s20176c8f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S20176C8");
    test_class_info(&lv, &cd_S20176C8);
    dp->~S20176C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C8(Test_S20176C8, "S20176C8", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN8S20176C8C1Ev();
extern void _ZN8S20176C8D1Ev();
Name_Map name_map_S20176C8[] = {
  NSPAIR(_ZN8S20176C8C1Ev),
  NSPAIR(_ZN8S20176C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S20176C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20176C2,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20176C8[];
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY vtc_S20176C8[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern VTBL_ENTRY _ZTV8S20176C8[];
static  VTT_ENTRY vtt_S20176C8[] = {
  {&(_ZTV8S20176C8[4]),  4,10},
  {&(_ZTV8S20176C8[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
Class_Descriptor cd_S20176C8 = {  "S20176C8", // class name
  bases_S20176C8, 3,
  &(vtc_S20176C8[0]), // expected_vtbl_contents
  &(vtt_S20176C8[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI8S20176C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20176C8),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20176C8),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  S20176C7  : virtual S20176C8 {
  int s20176c7f0;
  char s20176c7f1;
  void *s20176c7f2[6];
  int s20176c7f3[2];
  void *s20176c7f4;
  ::S281C37_nt s20176c7f5;
  ~S20176C7(); // tgen
  S20176C7(); // tgen
};
//SIG(-1 S20176C7) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S20176C7()
{
  extern Class_Descriptor cd_S20176C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S20176C7, buf);
    S20176C7 *dp, &lv = *(dp=new (buf) S20176C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S20176C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C7)");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*), ABISELECT(96,56), "S20176C7");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(560,312), "S20176C7");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(928,508), "S20176C7");
    check_base_class_offset(lv, (S20176C8*), ABISELECT(96,56), "S20176C7");
    check_field_offset(lv, s20176c7f0, ABISELECT(8,4), "S20176C7.s20176c7f0");
    check_field_offset(lv, s20176c7f1, ABISELECT(12,8), "S20176C7.s20176c7f1");
    check_field_offset(lv, s20176c7f2, ABISELECT(16,12), "S20176C7.s20176c7f2");
    check_field_offset(lv, s20176c7f3, ABISELECT(64,36), "S20176C7.s20176c7f3");
    check_field_offset(lv, s20176c7f4, ABISELECT(72,44), "S20176C7.s20176c7f4");
    check_field_offset(lv, s20176c7f5, ABISELECT(80,48), "S20176C7.s20176c7f5");
    test_class_info(&lv, &cd_S20176C7);
    dp->~S20176C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C7(Test_S20176C7, "S20176C7", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN8S20176C7C1Ev();
extern void _ZN8S20176C7D1Ev();
Name_Map name_map_S20176C7[] = {
  NSPAIR(_ZN8S20176C7C1Ev),
  NSPAIR(_ZN8S20176C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
static Base_Class bases_S20176C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20176C2,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20176C8,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20176C7[];
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY vtc_S20176C7[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern VTBL_ENTRY _ZTV8S20176C7[];
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C7[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__8S20176C7[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C7[] = {
  {&(_ZTV8S20176C7[5]),  5,17},
  {&(_ZTV8S20176C7[11]),  11,17},
  {&(_ZTV8S20176C7[16]),  16,17},
  {&(_tg__ZTV8S20176C8__8S20176C7[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__8S20176C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20176C7[];
extern  VTBL_ENTRY _ZTV8S20176C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C7[];
Class_Descriptor cd_S20176C7 = {  "S20176C7", // class name
  bases_S20176C7, 4,
  &(vtc_S20176C7[0]), // expected_vtbl_contents
  &(vtt_S20176C7[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI8S20176C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20176C7),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20176C7),5, //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  S20176C6  : virtual S20176C7 , S20176C2 , S281C37_nt {
  char s20176c6f0;
  int s20176c6f1[2];
  long double s20176c6f2[2];
  short s20176c6f3;
  void *s20176c6f4;
  int s20176c6f5;
  __tsi64 s20176c6f6;
  int s20176c6f7;
  void *s20176c6f8;
  virtual  ~S20176C6(); // _ZN8S20176C6D2Ev
  virtual void  v6(); // _ZN8S20176C62v6Ev
  S20176C6(); // tgen
};
//SIG(-1 S20176C6) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S20176C6 ::~S20176C6(){ note_dtor("S20176C6", this);}
void  S20176C6 ::v6(){vfunc_called(this, "_ZN8S20176C62v6Ev");}
S20176C6 ::S20176C6(){ note_ctor("S20176C6", this);} // tgen

static void Test_S20176C6()
{
  extern Class_Descriptor cd_S20176C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S20176C6, buf);
    S20176C6 *dp, &lv = *(dp=new (buf) S20176C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S20176C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C6)");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*), ABISELECT(576,324), "S20176C6");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(1040,580), "S20176C6");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(1408,776), "S20176C6");
    check_base_class_offset(lv, (S20176C8*)(S20176C7*), ABISELECT(576,324), "S20176C6");
    check_base_class_offset(lv, (S20176C7*), ABISELECT(480,268), "S20176C6");
    /*is_ambiguous_... S20176C6::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*), 0, "S20176C6");
    /*is_ambiguous_... S20176C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S20176C6");
    check_field_offset(lv, s20176c6f0, ABISELECT(384,204), "S20176C6.s20176c6f0");
    check_field_offset(lv, s20176c6f1, ABISELECT(388,208), "S20176C6.s20176c6f1");
    check_field_offset(lv, s20176c6f2, ABISELECT(400,216), "S20176C6.s20176c6f2");
    check_field_offset(lv, s20176c6f3, ABISELECT(432,240), "S20176C6.s20176c6f3");
    check_field_offset(lv, s20176c6f4, ABISELECT(440,244), "S20176C6.s20176c6f4");
    check_field_offset(lv, s20176c6f5, ABISELECT(448,248), "S20176C6.s20176c6f5");
    check_field_offset(lv, s20176c6f6, ABISELECT(456,252), "S20176C6.s20176c6f6");
    check_field_offset(lv, s20176c6f7, ABISELECT(464,260), "S20176C6.s20176c6f7");
    check_field_offset(lv, s20176c6f8, ABISELECT(472,264), "S20176C6.s20176c6f8");
    test_class_info(&lv, &cd_S20176C6);
    dp->~S20176C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C6(Test_S20176C6, "S20176C6", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN8S20176C6C1Ev();
extern void _ZN8S20176C6D2Ev();
Name_Map name_map_S20176C6[] = {
  NSPAIR(_ZN8S20176C6C1Ev),
  NSPAIR(_ZN8S20176C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C7;
extern VTBL_ENTRY _ZTI8S20176C7[];
extern  VTBL_ENTRY _ZTV8S20176C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C7[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S20176C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20176C2,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C8,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20176C7,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20176C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20176C6[];
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY vtc_S20176C6[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern VTBL_ENTRY _ZTV8S20176C6[];
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C7__8S20176C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C7__8S20176C6[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__8S20176C6[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C6[] = {
  {&(_ZTV8S20176C6[6]),  6,27},
  {&(_ZTV8S20176C6[15]),  15,27},
  {&(_ZTV8S20176C6[21]),  21,27},
  {&(_ZTV8S20176C6[26]),  26,27},
  {&(_tg__ZTV8S20176C7__8S20176C6[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C7__8S20176C6[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C7__8S20176C6[3]),  3,4},
  {&(_tg__ZTV8S20176C8__8S20176C6[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__8S20176C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
Class_Descriptor cd_S20176C6 = {  "S20176C6", // class name
  bases_S20176C6, 7,
  &(vtc_S20176C6[0]), // expected_vtbl_contents
  &(vtt_S20176C6[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI8S20176C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20176C6),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20176C6),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C9  {
  void *s20176c9f0;
  ::S20176C7 s20176c9f1;
  char s20176c9f2;
  ::S20176C3_nt s20176c9f3;
  ::S20176C3_nt s20176c9f4;
  ::S20176C3_nt s20176c9f5;
  virtual void  v7(); // _ZN8S20176C92v7Ev
  ~S20176C9(); // tgen
  S20176C9(); // tgen
};
//SIG(-1 S20176C9) C1{ v1 Fp FC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} Fc FC7 FC7 FC7}


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

static void Test_S20176C9()
{
  extern Class_Descriptor cd_S20176C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(62,133)];
    init_test(&cd_S20176C9, buf);
    S20176C9 *dp, &lv = *(dp=new (buf) S20176C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(976,528), "sizeof(S20176C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C9)");
    check_field_offset(lv, s20176c9f0, ABISELECT(8,4), "S20176C9.s20176c9f0");
    check_field_offset(lv, s20176c9f1, ABISELECT(16,8), "S20176C9.s20176c9f1");
    check_field_offset(lv, s20176c9f2, ABISELECT(960,524), "S20176C9.s20176c9f2");
    check_field_offset(lv, s20176c9f3, ABISELECT(961,525), "S20176C9.s20176c9f3");
    check_field_offset(lv, s20176c9f4, ABISELECT(962,526), "S20176C9.s20176c9f4");
    check_field_offset(lv, s20176c9f5, ABISELECT(963,527), "S20176C9.s20176c9f5");
    test_class_info(&lv, &cd_S20176C9);
    dp->~S20176C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C9(Test_S20176C9, "S20176C9", ABISELECT(976,528));

#else // __cplusplus

extern void _ZN8S20176C9C1Ev();
extern void _ZN8S20176C9D1Ev();
Name_Map name_map_S20176C9[] = {
  NSPAIR(_ZN8S20176C9C1Ev),
  NSPAIR(_ZN8S20176C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20176C9[];
extern void _ZN8S20176C92v7Ev();
static  VTBL_ENTRY vtc_S20176C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C9[0]),
  (VTBL_ENTRY)&_ZN8S20176C92v7Ev,
};
extern VTBL_ENTRY _ZTI8S20176C9[];
extern  VTBL_ENTRY _ZTV8S20176C9[];
Class_Descriptor cd_S20176C9 = {  "S20176C9", // class name
  0,0,//no base classes
  &(vtc_S20176C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(976,528), // object size
  NSPAIRA(_ZTI8S20176C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20176C9),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C13  : virtual S20176C7 , virtual S20176C6 {
  long s20176c13f0;
  void *s20176c13f1;
  ::S20176C8 s20176c13f2;
  void *s20176c13f3;
  short s20176c13f4;
  __tsi64 s20176c13f5;
  int s20176c13f6;
  __tsi64 s20176c13f7;
  ::S20176C8 s20176c13f8[4];
  int s20176c13f9;
  virtual  ~S20176C13(); // _ZN9S20176C13D2Ev
  S20176C13(); // tgen
};
//SIG(-1 S20176C13) C1{ VBC2{ VBC3{ BC4{ v1 Fi Fp FC5{ m Fp[2]}} VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC8{ VBC2 BC6 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC3 Fp Fs FL Fi FL FC3[4] Fi}


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

static void Test_S20176C13()
{
  extern Class_Descriptor cd_S20176C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(361,783)];
    init_test(&cd_S20176C13, buf);
    S20176C13 *dp, &lv = *(dp=new (buf) S20176C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5760,3128), "sizeof(S20176C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C13)");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*), ABISELECT(4432,2400), "S20176C13");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(4896,2656), "S20176C13");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(5264,2852), "S20176C13");
    check_base_class_offset(lv, (S20176C8*)(S20176C7*), ABISELECT(4432,2400), "S20176C13");
    check_base_class_offset(lv, (S20176C7*), ABISELECT(4328,2344), "S20176C13");
    check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(4328,2344), "S20176C13");
    /*is_ambiguous_... S20176C6::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), ABISELECT(5280,2860), "S20176C13");
    /*is_ambiguous_... S20176C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(5648,3056), "S20176C13");
    check_base_class_offset(lv, (S20176C6*), ABISELECT(5280,2860), "S20176C13");
    check_field_offset(lv, s20176c13f0, ABISELECT(8,4), "S20176C13.s20176c13f0");
    check_field_offset(lv, s20176c13f1, ABISELECT(16,8), "S20176C13.s20176c13f1");
    check_field_offset(lv, s20176c13f2, ABISELECT(32,12), "S20176C13.s20176c13f2");
    check_field_offset(lv, s20176c13f3, ABISELECT(880,472), "S20176C13.s20176c13f3");
    check_field_offset(lv, s20176c13f4, ABISELECT(888,476), "S20176C13.s20176c13f4");
    check_field_offset(lv, s20176c13f5, ABISELECT(896,480), "S20176C13.s20176c13f5");
    check_field_offset(lv, s20176c13f6, ABISELECT(904,488), "S20176C13.s20176c13f6");
    check_field_offset(lv, s20176c13f7, ABISELECT(912,492), "S20176C13.s20176c13f7");
    check_field_offset(lv, s20176c13f8, ABISELECT(928,500), "S20176C13.s20176c13f8");
    check_field_offset(lv, s20176c13f9, ABISELECT(4320,2340), "S20176C13.s20176c13f9");
    test_class_info(&lv, &cd_S20176C13);
    dp->~S20176C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C13(Test_S20176C13, "S20176C13", ABISELECT(5760,3128));

#else // __cplusplus

extern void _ZN9S20176C13C1Ev();
extern void _ZN9S20176C13D2Ev();
Name_Map name_map_S20176C13[] = {
  NSPAIR(_ZN9S20176C13C1Ev),
  NSPAIR(_ZN9S20176C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C7;
extern VTBL_ENTRY _ZTI8S20176C7[];
extern  VTBL_ENTRY _ZTV8S20176C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C7[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
static Base_Class bases_S20176C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    ABISELECT(4432,2400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C2,    ABISELECT(4896,2656), //bcp->offset
    22, //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_S281C37_nt,    ABISELECT(5264,2852), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C8,    ABISELECT(4432,2400), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20176C7,    ABISELECT(4328,2344), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20176C2,    ABISELECT(5280,2860), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5648,3056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(5280,2860), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20176C13[];
extern void _ZN9S20176C13D1Ev();
extern void _ZN9S20176C13D0Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev)();
extern void ABISELECT(_ZThn5280_N9S20176C13D1Ev,_ZThn2860_N9S20176C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev)();
extern void ABISELECT(_ZThn5280_N9S20176C13D0Ev,_ZThn2860_N9S20176C13D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY vtc_S20176C13[] = {
  ABISELECT(5280,2860),
  ABISELECT(5264,2852),
  ABISELECT(4896,2656),
  ABISELECT(4432,2400),
  ABISELECT(4328,2344),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN9S20176C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C13D0Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4432,-2400),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  0,
  ABISELECT(-4896,-2656),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  0,
  ABISELECT(-5280,-2860),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5280,-2860),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
extern VTBL_ENTRY _ZTV9S20176C13[];
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C13[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C7__9S20176C13[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C7__9S20176C13[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C13[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__9S20176C13[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C13[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__9S20176C13[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__9S20176C13[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__9S20176C13[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C13[] = {
  {&(_ZTV9S20176C13[7]),  7,39},
  {&(_ZTV9S20176C13[14]),  14,39},
  {&(_ZTV9S20176C13[20]),  20,39},
  {&(_ZTV9S20176C13[25]),  25,39},
  {&(_ZTV9S20176C13[35]),  35,39},
  {&(_tg__ZTV8S20176C7__9S20176C13[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C7__9S20176C13[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C7__9S20176C13[3]),  3,4},
  {&(_tg__ZTV8S20176C8__9S20176C13[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__9S20176C13[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C13[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__9S20176C13[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__9S20176C13[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__9S20176C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20176C13[];
extern  VTBL_ENTRY _ZTV9S20176C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C13[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N9S20176C13D0Ev,_ZThn2860_N9S20176C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N9S20176C13D1Ev,_ZThn2860_N9S20176C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20176C13 = {  "S20176C13", // class name
  bases_S20176C13, 8,
  &(vtc_S20176C13[0]), // expected_vtbl_contents
  &(vtt_S20176C13[0]), // expected_vtt_contents
  ABISELECT(5760,3128), // object size
  NSPAIRA(_ZTI9S20176C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20176C13),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C13),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C14  : virtual S20176C2 {
  void *s20176c14f0;
  short s20176c14f1;
  __tsi64 s20176c14f2;
  int s20176c14f3:6;
  void *s20176c14f4[2];
  ~S20176C14(); // tgen
  S20176C14(); // tgen
};
//SIG(-1 S20176C14) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} Fp Fs FL Fi:6 Fp[2]}


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

static void Test_S20176C14()
{
  extern Class_Descriptor cd_S20176C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,58)];
    init_test(&cd_S20176C14, buf);
    S20176C14 *dp, &lv = *(dp=new (buf) S20176C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,228), "sizeof(S20176C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C14)");
    check_base_class_offset(lv, (S20176C2*), ABISELECT(64,32), "S20176C14");
    check_field_offset(lv, s20176c14f0, ABISELECT(8,4), "S20176C14.s20176c14f0");
    check_field_offset(lv, s20176c14f1, ABISELECT(16,8), "S20176C14.s20176c14f1");
    check_field_offset(lv, s20176c14f2, ABISELECT(24,12), "S20176C14.s20176c14f2");
    set_bf_and_test(lv, s20176c14f3, ABISELECT(32,20), 0, 6, 1, "S20176C14");
    set_bf_and_test(lv, s20176c14f3, ABISELECT(32,20), 0, 6, hide_sll(1LL<<5), "S20176C14");
    check_field_offset(lv, s20176c14f4, ABISELECT(40,24), "S20176C14.s20176c14f4");
    test_class_info(&lv, &cd_S20176C14);
    dp->~S20176C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C14(Test_S20176C14, "S20176C14", ABISELECT(432,228));

#else // __cplusplus

extern void _ZN9S20176C14C1Ev();
extern void _ZN9S20176C14D1Ev();
Name_Map name_map_S20176C14[] = {
  NSPAIR(_ZN9S20176C14C1Ev),
  NSPAIR(_ZN9S20176C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
static Base_Class bases_S20176C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C2,    ABISELECT(64,32), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20176C14[];
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY vtc_S20176C14[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern VTBL_ENTRY _ZTV9S20176C14[];
static  VTT_ENTRY vtt_S20176C14[] = {
  {&(_ZTV9S20176C14[3]),  3,7},
  {&(_ZTV9S20176C14[6]),  6,7},
};
extern VTBL_ENTRY _ZTI9S20176C14[];
extern  VTBL_ENTRY _ZTV9S20176C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C14[];
Class_Descriptor cd_S20176C14 = {  "S20176C14", // class name
  bases_S20176C14, 1,
  &(vtc_S20176C14[0]), // expected_vtbl_contents
  &(vtt_S20176C14[0]), // expected_vtt_contents
  ABISELECT(432,228), // object size
  NSPAIRA(_ZTI9S20176C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20176C14),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C14),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  S20176C12  : S20176C13 , S20176C14 {
  __tsi64 s20176c12f0;
  long double s20176c12f1;
  ::S20176C3_nt s20176c12f2;
  int s20176c12f3[9];
  short s20176c12f4;
  char s20176c12f5:5;
  virtual  ~S20176C12(); // _ZN9S20176C12D2Ev
  virtual void  v8(); // _ZN9S20176C122v8Ev
  S20176C12(); // tgen
};
//SIG(-1 S20176C12) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 Fi Fp FC6{ m Fp[2]}} VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} VBC9{ VBC3 BC7 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC4 Fp Fs FL Fi FL FC4[4] Fi} BC10{ VBC7 Fp Fs FL Fi:6 Fp[2]} vd v1 FL FD FC8 Fi[9] Fs Fc:5}


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

static void Test_S20176C12()
{
  extern Class_Descriptor cd_S20176C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(369,807)];
    init_test(&cd_S20176C12, buf);
    S20176C12 *dp, &lv = *(dp=new (buf) S20176C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5888,3224), "sizeof(S20176C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C12)");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*), ABISELECT(4560,2496), "S20176C12");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(5024,2752), "S20176C12");
    check_base_class_offset(lv, (S20176C2*)(S20176C14*), ABISELECT(5024,2752), "S20176C12");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(5392,2948), "S20176C12");
    check_base_class_offset(lv, (S20176C8*)(S20176C7*), ABISELECT(4560,2496), "S20176C12");
    check_base_class_offset(lv, (S20176C7*)(S20176C13*), ABISELECT(4464,2440), "S20176C12");
    check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(4464,2440), "S20176C12");
    /*is_ambiguous_... S20176C6::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), ABISELECT(5408,2956), "S20176C12");
    /*is_ambiguous_... S20176C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(5776,3152), "S20176C12");
    check_base_class_offset(lv, (S20176C6*)(S20176C13*), ABISELECT(5408,2956), "S20176C12");
    check_base_class_offset(lv, (S20176C13*), 0, "S20176C12");
    check_base_class_offset(lv, (S20176C14*), ABISELECT(4328,2344), "S20176C12");
    check_field_offset(lv, s20176c12f0, ABISELECT(4384,2376), "S20176C12.s20176c12f0");
    check_field_offset(lv, s20176c12f1, ABISELECT(4400,2384), "S20176C12.s20176c12f1");
    check_field_offset(lv, s20176c12f2, ABISELECT(4416,2396), "S20176C12.s20176c12f2");
    check_field_offset(lv, s20176c12f3, ABISELECT(4420,2400), "S20176C12.s20176c12f3");
    check_field_offset(lv, s20176c12f4, ABISELECT(4456,2436), "S20176C12.s20176c12f4");
    set_bf_and_test(lv, s20176c12f5, ABISELECT(4458,2438), 0, 5, 1, "S20176C12");
    set_bf_and_test(lv, s20176c12f5, ABISELECT(4458,2438), 0, 5, hide_sll(1LL<<4), "S20176C12");
    test_class_info(&lv, &cd_S20176C12);
    dp->~S20176C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C12(Test_S20176C12, "S20176C12", ABISELECT(5888,3224));

#else // __cplusplus

extern void _ZN9S20176C12C1Ev();
extern void _ZN9S20176C12D2Ev();
Name_Map name_map_S20176C12[] = {
  NSPAIR(_ZN9S20176C12C1Ev),
  NSPAIR(_ZN9S20176C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C7;
extern VTBL_ENTRY _ZTI8S20176C7[];
extern  VTBL_ENTRY _ZTV8S20176C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C7[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C13;
extern VTBL_ENTRY _ZTI9S20176C13[];
extern  VTBL_ENTRY _ZTV9S20176C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C13[];
extern Class_Descriptor cd_S20176C14;
extern VTBL_ENTRY _ZTI9S20176C14[];
extern  VTBL_ENTRY _ZTV9S20176C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C14[];
static Base_Class bases_S20176C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    ABISELECT(4560,2496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C2,    ABISELECT(5024,2752), //bcp->offset
    26, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5392,2948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C8,    ABISELECT(4560,2496), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20176C7,    ABISELECT(4464,2440), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20176C2,    ABISELECT(5408,2956), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5776,3152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(5408,2956), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20176C13,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C14,    ABISELECT(4328,2344), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20176C12[];
extern void _ZN9S20176C12D1Ev();
extern void _ZN9S20176C12D0Ev();
extern void _ZN9S20176C122v8Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev)();
extern void ABISELECT(_ZThn5408_N9S20176C12D1Ev,_ZThn2956_N9S20176C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev)();
extern void ABISELECT(_ZThn5408_N9S20176C12D0Ev,_ZThn2956_N9S20176C12D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY vtc_S20176C12[] = {
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN9S20176C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
  ABISELECT(696,408),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2496),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  0,
  ABISELECT(-5024,-2752),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  0,
  ABISELECT(-5408,-2956),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2956),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
extern VTBL_ENTRY _ZTV9S20176C12[];
extern void _ZN9S20176C13D1Ev();
extern void _ZN9S20176C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C13__9S20176C12[] = {
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN9S20176C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C13__9S20176C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C13__9S20176C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2496),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C13__9S20176C12[] = {
  0,
  ABISELECT(-5024,-2752),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev)();
extern void ABISELECT(_ZThn5408_N9S20176C13D1Ev,_ZThn2956_N9S20176C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev)();
extern void ABISELECT(_ZThn5408_N9S20176C13D0Ev,_ZThn2956_N9S20176C13D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C13__9S20176C12[] = {
  0,
  ABISELECT(-5408,-2956),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2956),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C14__9S20176C12[] = {
  ABISELECT(696,408),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C14__9S20176C12[] = {
  0,
  ABISELECT(-696,-408),
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C7__9S20176C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C7__9S20176C12[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C12[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__9S20176C12[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__9S20176C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__9S20176C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__9S20176C12[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C12[] = {
  {&(_ZTV9S20176C12[7]),  7,43},
  {&(_tg__ZTV9S20176C13__9S20176C12[7]),  7,9},
  {&(_tg__ZTV8S20176C7__9S20176C13__9S20176C12[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C13__9S20176C12[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C13__9S20176C12[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C13__9S20176C12[9]),  9,13},
  {&(_tg__ZTV9S20176C14__9S20176C12[3]),  3,3},
  {&(_tg__ZTV8S20176C2__9S20176C14__9S20176C12[3]),  3,4},
  {&(_ZTV9S20176C12[18]),  18,43},
  {&(_ZTV9S20176C12[24]),  24,43},
  {&(_ZTV9S20176C12[29]),  29,43},
  {&(_ZTV9S20176C12[39]),  39,43},
  {&(_ZTV9S20176C12[13]),  13,43},
  {&(_tg__ZTV8S20176C7__9S20176C12[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C7__9S20176C12[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C7__9S20176C12[3]),  3,4},
  {&(_tg__ZTV8S20176C8__9S20176C12[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__9S20176C12[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C12[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__9S20176C12[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__9S20176C12[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__9S20176C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20176C12[];
extern  VTBL_ENTRY _ZTV9S20176C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C12[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20176C13D0Ev,_ZThn2956_N9S20176C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20176C13D1Ev,_ZThn2956_N9S20176C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20176C12D0Ev,_ZThn2956_N9S20176C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20176C12D1Ev,_ZThn2956_N9S20176C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20176C12 = {  "S20176C12", // class name
  bases_S20176C12, 10,
  &(vtc_S20176C12[0]), // expected_vtbl_contents
  &(vtt_S20176C12[0]), // expected_vtt_contents
  ABISELECT(5888,3224), // object size
  NSPAIRA(_ZTI9S20176C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20176C12),43, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C12),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C15  {
  __tsi64 s20176c15f0;
  ::S281C37_nt s20176c15f1[8];
  int s20176c15f2;
  void *s20176c15f3[2];
  void  mf20176c15(); // _ZN9S20176C1510mf20176c15Ev
};
//SIG(-1 S20176C15) C1{ m FL FC2{ m Fp[2]}[8] Fi Fp[2]}


void  S20176C15 ::mf20176c15(){}

static void Test_S20176C15()
{
  {
    init_simple_test("S20176C15");
    S20176C15 lv;
    check2(sizeof(lv), ABISELECT(160,84), "sizeof(S20176C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20176C15)");
    check_field_offset(lv, s20176c15f0, 0, "S20176C15.s20176c15f0");
    check_field_offset(lv, s20176c15f1, 8, "S20176C15.s20176c15f1");
    check_field_offset(lv, s20176c15f2, ABISELECT(136,72), "S20176C15.s20176c15f2");
    check_field_offset(lv, s20176c15f3, ABISELECT(144,76), "S20176C15.s20176c15f3");
  }
}
static Arrange_To_Call_Me vS20176C15(Test_S20176C15, "S20176C15", ABISELECT(160,84));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S20176C15[];
VTBL_ENTRY *P__ZTI9S20176C15 = _ZTI9S20176C15; 
Class_Descriptor cd_S20176C15 = {  "S20176C15", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(160,84), // object size
  NSPAIRA(_ZTI9S20176C15),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  S20176C11  : S20176C6 , S20176C12 , virtual S20176C15 {
  int s20176c11f0;
  void *s20176c11f1;
  short s20176c11f2;
  void *s20176c11f3[2];
  char s20176c11f4[8];
  ~S20176C11(); // tgen
  S20176C11(); // tgen
};
//SIG(-1 S20176C11) C1{ BC2{ VBC3{ VBC4{ BC5{ v1 Fi Fp FC6{ m Fp[2]}} VBC7{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v3 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC7 BC6 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC9{ BC10{ VBC3 VBC2 vd Fl Fp FC4 Fp Fs FL Fi FL FC4[4] Fi} BC11{ VBC7 Fp Fs FL Fi:6 Fp[2]} vd v5 FL FD FC8 Fi[9] Fs Fc:5} VBC12{ m FL FC6[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]}


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

static void Test_S20176C11()
{
  extern Class_Descriptor cd_S20176C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(412,902)];
    init_test(&cd_S20176C11, buf);
    S20176C11 *dp, &lv = *(dp=new (buf) S20176C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6576,3604), "sizeof(S20176C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C11)");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*), ABISELECT(5088,2792), "S20176C11");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(5552,3048), "S20176C11");
    check_base_class_offset(lv, (S20176C2*)(S20176C14*)(S20176C12*), ABISELECT(5552,3048), "S20176C11");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(5920,3244), "S20176C11");
    check_base_class_offset(lv, (S20176C8*)(S20176C7*), ABISELECT(5088,2792), "S20176C11");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(4984,2736), "S20176C11");
    check_base_class_offset(lv, (S20176C7*)(S20176C13*)(S20176C12*), ABISELECT(4984,2736), "S20176C11");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(4984,2736), "S20176C11");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), 0, "S20176C11");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(368,196), "S20176C11");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C6*), 0, "S20176C11");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), ABISELECT(5936,3252), "S20176C11");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(6304,3448), "S20176C11");
    check_base_class_offset(lv, (S20176C6*)(S20176C13*)(S20176C12*), ABISELECT(5936,3252), "S20176C11");
    check_base_class_offset(lv, (S20176C13*)(S20176C12*), ABISELECT(480,268), "S20176C11");
    check_base_class_offset(lv, (S20176C14*)(S20176C12*), ABISELECT(4808,2612), "S20176C11");
    check_base_class_offset(lv, (S20176C12*), ABISELECT(480,268), "S20176C11");
    check_base_class_offset(lv, (S20176C15*), ABISELECT(6416,3520), "S20176C11");
    check_field_offset(lv, s20176c11f0, ABISELECT(4940,2708), "S20176C11.s20176c11f0");
    check_field_offset(lv, s20176c11f1, ABISELECT(4944,2712), "S20176C11.s20176c11f1");
    check_field_offset(lv, s20176c11f2, ABISELECT(4952,2716), "S20176C11.s20176c11f2");
    check_field_offset(lv, s20176c11f3, ABISELECT(4960,2720), "S20176C11.s20176c11f3");
    check_field_offset(lv, s20176c11f4, ABISELECT(4976,2728), "S20176C11.s20176c11f4");
    test_class_info(&lv, &cd_S20176C11);
    dp->~S20176C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C11(Test_S20176C11, "S20176C11", ABISELECT(6576,3604));

#else // __cplusplus

extern void _ZN9S20176C11C1Ev();
extern void _ZN9S20176C11D1Ev();
Name_Map name_map_S20176C11[] = {
  NSPAIR(_ZN9S20176C11C1Ev),
  NSPAIR(_ZN9S20176C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C7;
extern VTBL_ENTRY _ZTI8S20176C7[];
extern  VTBL_ENTRY _ZTV8S20176C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C7[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C13;
extern VTBL_ENTRY _ZTI9S20176C13[];
extern  VTBL_ENTRY _ZTV9S20176C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C13[];
extern Class_Descriptor cd_S20176C14;
extern VTBL_ENTRY _ZTI9S20176C14[];
extern  VTBL_ENTRY _ZTV9S20176C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C14[];
extern Class_Descriptor cd_S20176C12;
extern VTBL_ENTRY _ZTI9S20176C12[];
extern  VTBL_ENTRY _ZTV9S20176C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C12[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
static Base_Class bases_S20176C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    ABISELECT(5088,2792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C2,    ABISELECT(5552,3048), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5920,3244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C8,    ABISELECT(5088,2792), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20176C7,    ABISELECT(4984,2736), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20176C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C2,    ABISELECT(5936,3252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(6304,3448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(5936,3252), //bcp->offset
    42, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20176C13,    ABISELECT(480,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20176C14,    ABISELECT(4808,2612), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20176C12,    ABISELECT(480,268), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C15,    ABISELECT(6416,3520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20176C11[];
extern void _ZN8S20176C22v4Ev();
extern void _ZN9S20176C11D1Ev();
extern void _ZN9S20176C11D0Ev();
extern void _ZN8S20176C62v6Ev();
extern void ABISELECT(_ZThn480_N9S20176C11D1Ev,_ZThn268_N9S20176C11D1Ev)();
extern void ABISELECT(_ZThn480_N9S20176C11D0Ev,_ZThn268_N9S20176C11D0Ev)();
extern void _ZN9S20176C122v8Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C11D1Ev,_ZTv0_n32_N9S20176C11D1Ev)();
extern void ABISELECT(_ZThn5936_N9S20176C11D1Ev,_ZThn3252_N9S20176C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C11D0Ev,_ZTv0_n32_N9S20176C11D0Ev)();
extern void ABISELECT(_ZThn5936_N9S20176C11D0Ev,_ZThn3252_N9S20176C11D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY vtc_S20176C11[] = {
  ABISELECT(6416,3520),
  ABISELECT(5936,3252),
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20176C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C11D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20176C11D1Ev,_ZThn268_N9S20176C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20176C11D0Ev,_ZThn268_N9S20176C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
  ABISELECT(744,436),
  ABISELECT(-4808,-2612),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  0,
  ABISELECT(-5552,-3048),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  0,
  ABISELECT(-5936,-3252),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5936,-3252),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C11D1Ev,_ZTv0_n32_N9S20176C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C11D0Ev,_ZTv0_n32_N9S20176C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
extern VTBL_ENTRY _ZTV9S20176C11[];
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A__9S20176C11[] = {
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__A__9S20176C11[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__A__9S20176C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__A__9S20176C11[] = {
  0,
  ABISELECT(-5552,-3048),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN9S20176C12D1Ev();
extern void _ZN9S20176C12D0Ev();
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C12__9S20176C11[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN9S20176C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
extern void _ZN9S20176C13D1Ev();
extern void _ZN9S20176C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C139S20176C12__9S20176C11[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN9S20176C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C139S20176C12__9S20176C11[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C139S20176C12__9S20176C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C139S20176C12__9S20176C11[] = {
  0,
  ABISELECT(-5072,-2780),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev)();
extern void ABISELECT(_ZThn5456_N9S20176C13D1Ev,_ZThn2984_N9S20176C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev)();
extern void ABISELECT(_ZThn5456_N9S20176C13D0Ev,_ZThn2984_N9S20176C13D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C139S20176C12__9S20176C11[] = {
  0,
  ABISELECT(-5456,-2984),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2984),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C12__9S20176C11[] = {
  ABISELECT(744,436),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C149S20176C12__9S20176C11[] = {
  0,
  ABISELECT(-744,-436),
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C12__9S20176C11[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C12__9S20176C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C12__9S20176C11[] = {
  0,
  ABISELECT(-5072,-2780),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev)();
extern void ABISELECT(_ZThn5456_N9S20176C12D1Ev,_ZThn2984_N9S20176C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev)();
extern void ABISELECT(_ZThn5456_N9S20176C12D0Ev,_ZThn2984_N9S20176C12D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C12__9S20176C11[] = {
  0,
  ABISELECT(-5456,-2984),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2984),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C14__9S20176C12__9S20176C11[] = {
  ABISELECT(744,436),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C11[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C7__9S20176C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C7__9S20176C11[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C11[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__9S20176C11[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A1__9S20176C11[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__A1__9S20176C11[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__A1__9S20176C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__A1__9S20176C11[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C11[] = {
  {&(_ZTV9S20176C11[8]),  8,55},
  {&(_tg__ZTV8S20176C6__A__9S20176C11[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__A__9S20176C11[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__A__9S20176C11[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__A__9S20176C11[3]),  3,4},
  {&(_tg__ZTV9S20176C12__9S20176C11[7]),  7,10},
  {&(_tg__ZTV9S20176C139S20176C12__9S20176C11[7]),  7,9},
  {&(_tg__ZTV8S20176C7__9S20176C139S20176C12__9S20176C11[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C139S20176C12__9S20176C11[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C139S20176C12__9S20176C11[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C139S20176C12__9S20176C11[9]),  9,13},
  {&(_tg__ZTV9S20176C149S20176C12__9S20176C11[3]),  3,3},
  {&(_tg__ZTV8S20176C2__9S20176C149S20176C12__9S20176C11[3]),  3,4},
  {&(_tg__ZTV8S20176C7__9S20176C12__9S20176C11[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C12__9S20176C11[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C12__9S20176C11[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C12__9S20176C11[9]),  9,13},
  {&(_tg__ZTV9S20176C14__9S20176C12__9S20176C11[3]),  3,3},
  {&(_ZTV9S20176C11[30]),  30,55},
  {&(_ZTV9S20176C11[36]),  36,55},
  {&(_ZTV9S20176C11[41]),  41,55},
  {&(_ZTV9S20176C11[19]),  19,55},
  {&(_ZTV9S20176C11[51]),  51,55},
  {&(_ZTV9S20176C11[25]),  25,55},
  {&(_tg__ZTV8S20176C7__9S20176C11[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C7__9S20176C11[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C7__9S20176C11[3]),  3,4},
  {&(_tg__ZTV8S20176C8__9S20176C11[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__9S20176C11[3]),  3,4},
  {&(_tg__ZTV8S20176C6__A1__9S20176C11[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__A1__9S20176C11[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__A1__9S20176C11[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__A1__9S20176C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20176C11[];
extern  VTBL_ENTRY _ZTV9S20176C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C11[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20176C12D0Ev,_ZThn2984_N9S20176C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20176C12D1Ev,_ZThn2984_N9S20176C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20176C13D0Ev,_ZThn2984_N9S20176C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20176C13D1Ev,_ZThn2984_N9S20176C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C11D0Ev,_ZTv0_n32_N9S20176C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S20176C11D0Ev,_ZThn3252_N9S20176C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C11D1Ev,_ZTv0_n32_N9S20176C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S20176C11D1Ev,_ZThn3252_N9S20176C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20176C11 = {  "S20176C11", // class name
  bases_S20176C11, 15,
  &(vtc_S20176C11[0]), // expected_vtbl_contents
  &(vtt_S20176C11[0]), // expected_vtt_contents
  ABISELECT(6576,3604), // object size
  NSPAIRA(_ZTI9S20176C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20176C11),55, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C11),33, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C17  {
  long s20176c17f0;
  char s20176c17f1;
  short s20176c17f2[2];
  virtual void  v9(); // _ZN9S20176C172v9Ev
  ~S20176C17(); // tgen
  S20176C17(); // tgen
};
//SIG(-1 S20176C17) C1{ v1 Fl Fc Fs[2]}


void  S20176C17 ::v9(){vfunc_called(this, "_ZN9S20176C172v9Ev");}
S20176C17 ::~S20176C17(){ note_dtor("S20176C17", this);} // tgen
S20176C17 ::S20176C17(){ note_ctor("S20176C17", this);} // tgen

static void Test_S20176C17()
{
  extern Class_Descriptor cd_S20176C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20176C17, buf);
    S20176C17 *dp, &lv = *(dp=new (buf) S20176C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20176C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20176C17)");
    check_field_offset(lv, s20176c17f0, ABISELECT(8,4), "S20176C17.s20176c17f0");
    check_field_offset(lv, s20176c17f1, ABISELECT(16,8), "S20176C17.s20176c17f1");
    check_field_offset(lv, s20176c17f2, ABISELECT(18,10), "S20176C17.s20176c17f2");
    test_class_info(&lv, &cd_S20176C17);
    dp->~S20176C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C17(Test_S20176C17, "S20176C17", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S20176C17C1Ev();
extern void _ZN9S20176C17D1Ev();
Name_Map name_map_S20176C17[] = {
  NSPAIR(_ZN9S20176C17C1Ev),
  NSPAIR(_ZN9S20176C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20176C17[];
extern void _ZN9S20176C172v9Ev();
static  VTBL_ENTRY vtc_S20176C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C17[0]),
  (VTBL_ENTRY)&_ZN9S20176C172v9Ev,
};
extern VTBL_ENTRY _ZTI9S20176C17[];
extern  VTBL_ENTRY _ZTV9S20176C17[];
Class_Descriptor cd_S20176C17 = {  "S20176C17", // class name
  0,0,//no base classes
  &(vtc_S20176C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S20176C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20176C17),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  S20176C18  : S20176C6 {
  int s20176c18f0;
  ::S20176C3_nt s20176c18f1;
  void *s20176c18f2;
  int s20176c18f3;
  char s20176c18f4[8];
  short s20176c18f5;
  int s20176c18f6;
  virtual  ~S20176C18(); // _ZN9S20176C18D2Ev
  S20176C18(); // tgen
};
//SIG(-1 S20176C18) C1{ BC2{ VBC3{ VBC4{ BC5{ v1 Fi Fp FC6{ m Fp[2]}} VBC7{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v3 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC7 BC6 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC8 Fp Fi Fc[8] Fs Fi}


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

static void Test_S20176C18()
{
  extern Class_Descriptor cd_S20176C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,205)];
    init_test(&cd_S20176C18, buf);
    S20176C18 *dp, &lv = *(dp=new (buf) S20176C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,816), "sizeof(S20176C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C18)");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*), ABISELECT(624,356), "S20176C18");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(1088,612), "S20176C18");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(1456,808), "S20176C18");
    check_base_class_offset(lv, (S20176C8*)(S20176C7*), ABISELECT(624,356), "S20176C18");
    check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(520,300), "S20176C18");
    /*is_ambiguous_... S20176C6::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), 0, "S20176C18");
    /*is_ambiguous_... S20176C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(368,196), "S20176C18");
    check_base_class_offset(lv, (S20176C6*), 0, "S20176C18");
    check_field_offset(lv, s20176c18f0, ABISELECT(480,268), "S20176C18.s20176c18f0");
    check_field_offset(lv, s20176c18f1, ABISELECT(484,272), "S20176C18.s20176c18f1");
    check_field_offset(lv, s20176c18f2, ABISELECT(488,276), "S20176C18.s20176c18f2");
    check_field_offset(lv, s20176c18f3, ABISELECT(496,280), "S20176C18.s20176c18f3");
    check_field_offset(lv, s20176c18f4, ABISELECT(500,284), "S20176C18.s20176c18f4");
    check_field_offset(lv, s20176c18f5, ABISELECT(508,292), "S20176C18.s20176c18f5");
    check_field_offset(lv, s20176c18f6, ABISELECT(512,296), "S20176C18.s20176c18f6");
    test_class_info(&lv, &cd_S20176C18);
    dp->~S20176C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C18(Test_S20176C18, "S20176C18", ABISELECT(1472,816));

#else // __cplusplus

extern void _ZN9S20176C18C1Ev();
extern void _ZN9S20176C18D2Ev();
Name_Map name_map_S20176C18[] = {
  NSPAIR(_ZN9S20176C18C1Ev),
  NSPAIR(_ZN9S20176C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C7;
extern VTBL_ENTRY _ZTI8S20176C7[];
extern  VTBL_ENTRY _ZTV8S20176C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C7[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
static Base_Class bases_S20176C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    ABISELECT(624,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C2,    ABISELECT(1088,612), //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
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(1456,808), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C8,    ABISELECT(624,356), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20176C7,    ABISELECT(520,300), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20176C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20176C18[];
extern void _ZN8S20176C22v4Ev();
extern void _ZN9S20176C18D1Ev();
extern void _ZN9S20176C18D0Ev();
extern void _ZN8S20176C62v6Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY vtc_S20176C18[] = {
  ABISELECT(1456,808),
  ABISELECT(1088,612),
  ABISELECT(624,356),
  ABISELECT(520,300),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C18[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20176C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C18D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-520,-300),
  (VTBL_ENTRY)&(_ZTI9S20176C18[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-624,-356),
  (VTBL_ENTRY)&(_ZTI9S20176C18[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  0,
  ABISELECT(-1088,-612),
  (VTBL_ENTRY)&(_ZTI9S20176C18[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern VTBL_ENTRY _ZTV9S20176C18[];
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C18[] = {
  ABISELECT(1456,808),
  ABISELECT(1088,612),
  ABISELECT(624,356),
  ABISELECT(520,300),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__9S20176C18[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-520,-300),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__9S20176C18[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-624,-356),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__9S20176C18[] = {
  0,
  ABISELECT(-1088,-612),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C18[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C7__9S20176C18[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C7__9S20176C18[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C18[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__9S20176C18[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C18[] = {
  {&(_ZTV9S20176C18[6]),  6,27},
  {&(_tg__ZTV8S20176C6__9S20176C18[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__9S20176C18[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__9S20176C18[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__9S20176C18[3]),  3,4},
  {&(_ZTV9S20176C18[15]),  15,27},
  {&(_ZTV9S20176C18[21]),  21,27},
  {&(_ZTV9S20176C18[26]),  26,27},
  {&(_tg__ZTV8S20176C7__9S20176C18[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C7__9S20176C18[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C7__9S20176C18[3]),  3,4},
  {&(_tg__ZTV8S20176C8__9S20176C18[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__9S20176C18[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20176C18[];
extern  VTBL_ENTRY _ZTV9S20176C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C18[];
Class_Descriptor cd_S20176C18 = {  "S20176C18", // class name
  bases_S20176C18, 8,
  &(vtc_S20176C18[0]), // expected_vtbl_contents
  &(vtt_S20176C18[0]), // expected_vtt_contents
  ABISELECT(1472,816), // object size
  NSPAIRA(_ZTI9S20176C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20176C18),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C18),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C21  : virtual S20176C5 , virtual S281C37_nt , S20176C8 , S20176C2 {
  int s20176c21f0:25;
  void *s20176c21f1;
  int s20176c21f2[3];
  ::S281C37_nt s20176c21f3;
  virtual  ~S20176C21(); // _ZN9S20176C21D2Ev
  virtual void  v17(); // _ZN9S20176C213v17Ev
  S20176C21(); // tgen
};
//SIG(-1 S20176C21) C1{ VBC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC3 BC4{ BC2 VBC5{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC3 FC3[9] Fp FC2 FC2} VBC3 v4 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} BC5 vd v1 Fi:25 Fp Fi[3] FC3}


 S20176C21 ::~S20176C21(){ note_dtor("S20176C21", this);}
void  S20176C21 ::v17(){vfunc_called(this, "_ZN9S20176C213v17Ev");}
S20176C21 ::S20176C21(){ note_ctor("S20176C21", this);} // tgen

static void Test_S20176C21()
{
  extern Class_Descriptor cd_S20176C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(83,177)];
    init_test(&cd_S20176C21, buf);
    S20176C21 *dp, &lv = *(dp=new (buf) S20176C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1312,704), "sizeof(S20176C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C21)");
    /*is_ambiguous_... S20176C21::S20176C5 */ AMB_check_base_class_offset(lv, (S20176C5*), ABISELECT(880,480), "S20176C21");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(920,500), "S20176C21");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(920,500), "S20176C21");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*), 0, "S20176C21");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(944,508), "S20176C21");
    check_base_class_offset(lv, (S20176C8*), 0, "S20176C21");
    /*is_ambiguous_... S20176C21::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*), ABISELECT(464,256), "S20176C21");
    set_bf_and_test(lv, s20176c21f0, ABISELECT(832,452), 0, 25, 1, "S20176C21");
    set_bf_and_test(lv, s20176c21f0, ABISELECT(832,452), 0, 25, hide_sll(1LL<<24), "S20176C21");
    check_field_offset(lv, s20176c21f1, ABISELECT(840,456), "S20176C21.s20176c21f1");
    check_field_offset(lv, s20176c21f2, ABISELECT(848,460), "S20176C21.s20176c21f2");
    check_field_offset(lv, s20176c21f3, ABISELECT(864,472), "S20176C21.s20176c21f3");
    test_class_info(&lv, &cd_S20176C21);
    dp->~S20176C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C21(Test_S20176C21, "S20176C21", ABISELECT(1312,704));

#else // __cplusplus

extern void _ZN9S20176C21C1Ev();
extern void _ZN9S20176C21D2Ev();
Name_Map name_map_S20176C21[] = {
  NSPAIR(_ZN9S20176C21C1Ev),
  NSPAIR(_ZN9S20176C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
static Base_Class bases_S20176C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    ABISELECT(880,480), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(920,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20176C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C2,    ABISELECT(944,508), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20176C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C2,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20176C21[];
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN9S20176C21D1Ev();
extern void _ZN9S20176C21D0Ev();
extern void _ZN9S20176C213v17Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY vtc_S20176C21[] = {
  ABISELECT(880,480),
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20176C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C21D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C213v17Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  0,
  ABISELECT(-880,-480),
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern VTBL_ENTRY _ZTV9S20176C21[];
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C21[] = {
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__9S20176C21[] = {
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C21[] = {
  {&(_ZTV9S20176C21[5]),  5,21},
  {&(_tg__ZTV8S20176C8__9S20176C21[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__9S20176C21[3]),  3,4},
  {&(_ZTV9S20176C21[16]),  16,21},
  {&(_ZTV9S20176C21[20]),  20,21},
};
extern VTBL_ENTRY _ZTI9S20176C21[];
extern  VTBL_ENTRY _ZTV9S20176C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C21[];
Class_Descriptor cd_S20176C21 = {  "S20176C21", // class name
  bases_S20176C21, 6,
  &(vtc_S20176C21[0]), // expected_vtbl_contents
  &(vtt_S20176C21[0]), // expected_vtt_contents
  ABISELECT(1312,704), // object size
  NSPAIRA(_ZTI9S20176C21),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20176C21),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C21),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C20  : S20176C21 {
  void *s20176c20f0;
  int s20176c20f1;
  void *s20176c20f2;
  int s20176c20f3[7];
  ::S20176C7 s20176c20f4;
  virtual  ~S20176C20(); // _ZN9S20176C20D2Ev
  S20176C20(); // tgen
};
//SIG(-1 S20176C20) C1{ BC2{ VBC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC4 BC5{ BC3 VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} BC6 vd v4 Fi:25 Fp Fi[3] FC4} vd Fp Fi Fp Fi[7] FC8{ VBC5 Fi Fc Fp[6] Fi[2] Fp FC4}}


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

static void Test_S20176C20()
{
  extern Class_Descriptor cd_S20176C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(146,316)];
    init_test(&cd_S20176C20, buf);
    S20176C20 *dp, &lv = *(dp=new (buf) S20176C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2320,1260), "sizeof(S20176C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C20)");
    /*is_ambiguous_... S20176C21::S20176C5 */ AMB_check_base_class_offset(lv, (S20176C5*)(S20176C21*), ABISELECT(1888,1036), "S20176C20");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C21*), ABISELECT(1928,1056), "S20176C20");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*)(S20176C21*), ABISELECT(1928,1056), "S20176C20");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*)(S20176C21*), 0, "S20176C20");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*)(S20176C21*), ABISELECT(1952,1064), "S20176C20");
    check_base_class_offset(lv, (S20176C8*)(S20176C21*), 0, "S20176C20");
    /*is_ambiguous_... S20176C21::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C21*), ABISELECT(464,256), "S20176C20");
    check_base_class_offset(lv, (S20176C21*), 0, "S20176C20");
    check_field_offset(lv, s20176c20f0, ABISELECT(880,480), "S20176C20.s20176c20f0");
    check_field_offset(lv, s20176c20f1, ABISELECT(888,484), "S20176C20.s20176c20f1");
    check_field_offset(lv, s20176c20f2, ABISELECT(896,488), "S20176C20.s20176c20f2");
    check_field_offset(lv, s20176c20f3, ABISELECT(904,492), "S20176C20.s20176c20f3");
    check_field_offset(lv, s20176c20f4, ABISELECT(944,520), "S20176C20.s20176c20f4");
    test_class_info(&lv, &cd_S20176C20);
    dp->~S20176C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C20(Test_S20176C20, "S20176C20", ABISELECT(2320,1260));

#else // __cplusplus

extern void _ZN9S20176C20C1Ev();
extern void _ZN9S20176C20D2Ev();
Name_Map name_map_S20176C20[] = {
  NSPAIR(_ZN9S20176C20C1Ev),
  NSPAIR(_ZN9S20176C20D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S20176C21;
extern VTBL_ENTRY _ZTI9S20176C21[];
extern  VTBL_ENTRY _ZTV9S20176C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C21[];
static Base_Class bases_S20176C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    ABISELECT(1888,1036), //bcp->offset
    13, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(1928,1056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C2,    ABISELECT(1952,1064), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20176C8,    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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20176C2,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20176C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20176C20[];
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN9S20176C20D1Ev();
extern void _ZN9S20176C20D0Ev();
extern void _ZN9S20176C213v17Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY vtc_S20176C20[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C20[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20176C20D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C20D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C213v17Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI9S20176C20[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI9S20176C20[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI9S20176C20[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern VTBL_ENTRY _ZTV9S20176C20[];
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN9S20176C21D1Ev();
extern void _ZN9S20176C21D0Ev();
extern void _ZN9S20176C213v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C21__9S20176C20[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20176C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C21D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C213v17Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C89S20176C21__9S20176C20[] = {
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C89S20176C21__9S20176C20[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C5__9S20176C21__9S20176C20[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C21__9S20176C20[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C20[] = {
  {&(_ZTV9S20176C20[5]),  5,21},
  {&(_tg__ZTV9S20176C21__9S20176C20[5]),  5,10},
  {&(_tg__ZTV8S20176C89S20176C21__9S20176C20[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C89S20176C21__9S20176C20[3]),  3,4},
  {&(_tg__ZTV8S20176C5__9S20176C21__9S20176C20[3]),  3,4},
  {&(_tg__ZTV8S20176C2__9S20176C21__9S20176C20[3]),  3,4},
  {&(_ZTV9S20176C20[16]),  16,21},
  {&(_ZTV9S20176C20[20]),  20,21},
};
extern VTBL_ENTRY _ZTI9S20176C20[];
extern  VTBL_ENTRY _ZTV9S20176C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C20[];
Class_Descriptor cd_S20176C20 = {  "S20176C20", // class name
  bases_S20176C20, 7,
  &(vtc_S20176C20[0]), // expected_vtbl_contents
  &(vtt_S20176C20[0]), // expected_vtt_contents
  ABISELECT(2320,1260), // object size
  NSPAIRA(_ZTI9S20176C20),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20176C20),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C20),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C19  : virtual S20176C20 , virtual S20176C21 {
  int s20176c19f0[2];
  short s20176c19f1[10];
  int s20176c19f2;
  ::S20176C3_nt s20176c19f3;
  int s20176c19f4:32;
  int s20176c19f5;
  ::S20176C3_nt s20176c19f6;
  void *s20176c19f7;
  int s20176c19f8:2;
  int s20176c19f9;
  long double s20176c19f10;
  virtual  ~S20176C19(); // _ZN9S20176C19D2Ev
  virtual void  v16(); // _ZN9S20176C193v16Ev
  S20176C19(); // tgen
};
//SIG(-1 S20176C19) C1{ VBC2{ BC3{ VBC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC5 BC6{ BC4 VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} BC7 vd v5 Fi:25 Fp Fi[3] FC5} vd Fp Fi Fp Fi[7] FC9{ VBC6 Fi Fc Fp[6] Fi[2] Fp FC5}} VBC3 vd v1 Fi[2] Fs[10] Fi FC8 Fi:32 Fi FC8 Fp Fi:2 Fi FD}


 S20176C19 ::~S20176C19(){ note_dtor("S20176C19", this);}
void  S20176C19 ::v16(){vfunc_called(this, "_ZN9S20176C193v16Ev");}
S20176C19 ::S20176C19(){ note_ctor("S20176C19", this);} // tgen

static void Test_S20176C19()
{
  extern Class_Descriptor cd_S20176C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(207,455)];
    init_test(&cd_S20176C19, buf);
    S20176C19 *dp, &lv = *(dp=new (buf) S20176C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3296,1816), "sizeof(S20176C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C19)");
    /*is_ambiguous_... S20176C21::S20176C5 */ AMB_check_base_class_offset(lv, (S20176C5*)(S20176C21*)(S20176C20*), ABISELECT(1984,1112), "S20176C19");
    /*is_ambiguous_... S20176C19::S20176C21 */ AMB_check_base_class_offset(lv, (S20176C5*)(S20176C21*), ABISELECT(1984,1112), "S20176C19");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C21*)(S20176C20*), ABISELECT(2024,1132), "S20176C19");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*)(S20176C21*)(S20176C20*), ABISELECT(2024,1132), "S20176C19");
    /*is_ambiguous_... S20176C19::S20176C21 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C21*), ABISELECT(2024,1132), "S20176C19");
    /*is_ambiguous_... S20176C19::S20176C21 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C8*)(S20176C21*), ABISELECT(2024,1132), "S20176C19");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*)(S20176C21*)(S20176C20*), ABISELECT(96,76), "S20176C19");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*)(S20176C21*)(S20176C20*), ABISELECT(2048,1140), "S20176C19");
    /*is_ambiguous_... S20176C19::S20176C21 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C8*)(S20176C21*), ABISELECT(2048,1140), "S20176C19");
    check_base_class_offset(lv, (S20176C8*)(S20176C21*)(S20176C20*), ABISELECT(96,76), "S20176C19");
    /*is_ambiguous_... S20176C21::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C21*)(S20176C20*), ABISELECT(560,332), "S20176C19");
    check_base_class_offset(lv, (S20176C21*)(S20176C20*), ABISELECT(96,76), "S20176C19");
    check_base_class_offset(lv, (S20176C20*), ABISELECT(96,76), "S20176C19");
    /*is_ambiguous_... S20176C19::S20176C21 */ AMB_check_base_class_offset(lv, (S20176C5*)(S20176C8*)(S20176C21*), ABISELECT(2416,1336), "S20176C19");
    /*is_ambiguous_... S20176C19::S20176C21 */ AMB_check_base_class_offset(lv, (S20176C8*)(S20176C21*), ABISELECT(2416,1336), "S20176C19");
    /*is_ambiguous_... S20176C19::S20176C21 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C21*), ABISELECT(2880,1592), "S20176C19");
    /*is_ambiguous_... S20176C19::S20176C21 */ AMB_check_base_class_offset(lv, (S20176C21*), ABISELECT(2416,1336), "S20176C19");
    check_field_offset(lv, s20176c19f0, ABISELECT(8,4), "S20176C19.s20176c19f0");
    check_field_offset(lv, s20176c19f1, ABISELECT(16,12), "S20176C19.s20176c19f1");
    check_field_offset(lv, s20176c19f2, ABISELECT(36,32), "S20176C19.s20176c19f2");
    check_field_offset(lv, s20176c19f3, ABISELECT(40,36), "S20176C19.s20176c19f3");
    set_bf_and_test(lv, s20176c19f4, ABISELECT(44,40), 0, 32, 1, "S20176C19");
    set_bf_and_test(lv, s20176c19f4, ABISELECT(44,40), 0, 32, hide_sll(1LL<<31), "S20176C19");
    check_field_offset(lv, s20176c19f5, ABISELECT(48,44), "S20176C19.s20176c19f5");
    check_field_offset(lv, s20176c19f6, ABISELECT(52,48), "S20176C19.s20176c19f6");
    check_field_offset(lv, s20176c19f7, ABISELECT(56,52), "S20176C19.s20176c19f7");
    set_bf_and_test(lv, s20176c19f8, ABISELECT(64,56), 0, 2, 1, "S20176C19");
    set_bf_and_test(lv, s20176c19f8, ABISELECT(64,56), 0, 2, hide_sll(1LL<<1), "S20176C19");
    check_field_offset(lv, s20176c19f9, ABISELECT(68,60), "S20176C19.s20176c19f9");
    check_field_offset(lv, s20176c19f10, ABISELECT(80,64), "S20176C19.s20176c19f10");
    test_class_info(&lv, &cd_S20176C19);
    dp->~S20176C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C19(Test_S20176C19, "S20176C19", ABISELECT(3296,1816));

#else // __cplusplus

extern void _ZN9S20176C19C1Ev();
extern void _ZN9S20176C19D2Ev();
Name_Map name_map_S20176C19[] = {
  NSPAIR(_ZN9S20176C19C1Ev),
  NSPAIR(_ZN9S20176C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S20176C21;
extern VTBL_ENTRY _ZTI9S20176C21[];
extern  VTBL_ENTRY _ZTV9S20176C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C21[];
extern Class_Descriptor cd_S20176C20;
extern VTBL_ENTRY _ZTI9S20176C20[];
extern  VTBL_ENTRY _ZTV9S20176C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C20[];
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S20176C21;
extern VTBL_ENTRY _ZTI9S20176C21[];
extern  VTBL_ENTRY _ZTV9S20176C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C21[];
static Base_Class bases_S20176C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    ABISELECT(1984,1112), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(2024,1132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C5,    ABISELECT(96,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20176C2,    ABISELECT(2048,1140), //bcp->offset
    32, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20176C8,    ABISELECT(96,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20176C2,    ABISELECT(560,332), //bcp->offset
    25, //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20176C21,    ABISELECT(96,76), //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
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20176C20,    ABISELECT(96,76), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20176C5,    ABISELECT(2416,1336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20176C8,    ABISELECT(2416,1336), //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
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20176C2,    ABISELECT(2880,1592), //bcp->offset
    51, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20176C21,    ABISELECT(2416,1336), //bcp->offset
    36, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20176C19[];
extern void _ZN9S20176C19D1Ev();
extern void _ZN9S20176C19D0Ev();
extern void _ZN9S20176C193v16Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C19D1Ev,_ZTv0_n32_N9S20176C19D1Ev)();
extern void ABISELECT(_ZThn96_N9S20176C19D1Ev,_ZThn76_N9S20176C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C19D0Ev,_ZTv0_n32_N9S20176C19D0Ev)();
extern void ABISELECT(_ZThn96_N9S20176C19D0Ev,_ZThn76_N9S20176C19D0Ev)() __attribute__((weak));
extern void _ZN9S20176C213v17Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C19D1Ev,_ZTv0_n32_N9S20176C19D1Ev)();
extern void ABISELECT(_ZThn2416_N9S20176C19D1Ev,_ZThn1336_N9S20176C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C19D0Ev,_ZTv0_n32_N9S20176C19D0Ev)();
extern void ABISELECT(_ZThn2416_N9S20176C19D0Ev,_ZThn1336_N9S20176C19D0Ev)() __attribute__((weak));
extern void _ZN9S20176C213v17Ev();
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY vtc_S20176C19[] = {
  ABISELECT(2416,1336),
  ABISELECT(2048,1140),
  ABISELECT(2024,1132),
  ABISELECT(1984,1112),
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C19[0]),
  (VTBL_ENTRY)&_ZN9S20176C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C19D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C193v16Ev,
  ABISELECT(464,256),
  0,
  ABISELECT(-96,-76),
  0,
  0,
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI9S20176C19[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C19D1Ev,_ZTv0_n32_N9S20176C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C19D0Ev,_ZTv0_n32_N9S20176C19D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C213v17Ev,
  ABISELECT(-560,-332),
  (VTBL_ENTRY)&(_ZTI9S20176C19[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  0,
  ABISELECT(-1984,-1112),
  (VTBL_ENTRY)&(_ZTI9S20176C19[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  0,
  ABISELECT(-2048,-1140),
  (VTBL_ENTRY)&(_ZTI9S20176C19[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  ABISELECT(464,256),
  0,
  ABISELECT(-2416,-1336),
  0,
  0,
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  ABISELECT(-2416,-1336),
  (VTBL_ENTRY)&(_ZTI9S20176C19[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C19D1Ev,_ZTv0_n32_N9S20176C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C19D0Ev,_ZTv0_n32_N9S20176C19D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C213v17Ev,
  ABISELECT(-2880,-1592),
  (VTBL_ENTRY)&(_ZTI9S20176C19[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern VTBL_ENTRY _ZTV9S20176C19[];
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN9S20176C20D1Ev();
extern void _ZN9S20176C20D0Ev();
extern void _ZN9S20176C213v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C20__9S20176C19[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C20[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20176C20D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C20D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C213v17Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN9S20176C21D1Ev();
extern void _ZN9S20176C21D0Ev();
extern void _ZN9S20176C213v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C219S20176C20__9S20176C19[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20176C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C21D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C213v17Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C89S20176C219S20176C20__9S20176C19[] = {
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C89S20176C219S20176C20__9S20176C19[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C5__9S20176C219S20176C20__9S20176C19[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C219S20176C20__9S20176C19[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C5__9S20176C20__9S20176C19[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI9S20176C20[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C20__9S20176C19[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI9S20176C20[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN9S20176C21D1Ev();
extern void _ZN9S20176C21D0Ev();
extern void _ZN9S20176C213v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C21__A1__9S20176C19[] = {
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20176C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C21D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C213v17Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C89S20176C21__A1__9S20176C19[] = {
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C89S20176C21__A1__9S20176C19[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C5__9S20176C21__A1__9S20176C19[] = {
  0,
  ABISELECT(432,224),
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C21__A1__9S20176C19[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C19[] = {
  {&(_ZTV9S20176C19[7]),  7,54},
  {&(_ZTV9S20176C19[20]),  20,54},
  {&(_ZTV9S20176C19[31]),  31,54},
  {&(_ZTV9S20176C19[35]),  35,54},
  {&(_ZTV9S20176C19[27]),  27,54},
  {&(_ZTV9S20176C19[46]),  46,54},
  {&(_ZTV9S20176C19[53]),  53,54},
  {&(_tg__ZTV9S20176C20__9S20176C19[5]),  5,10},
  {&(_tg__ZTV9S20176C219S20176C20__9S20176C19[5]),  5,10},
  {&(_tg__ZTV8S20176C89S20176C219S20176C20__9S20176C19[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C89S20176C219S20176C20__9S20176C19[3]),  3,4},
  {&(_tg__ZTV8S20176C5__9S20176C219S20176C20__9S20176C19[3]),  3,4},
  {&(_tg__ZTV8S20176C2__9S20176C219S20176C20__9S20176C19[3]),  3,4},
  {&(_tg__ZTV8S20176C5__9S20176C20__9S20176C19[3]),  3,4},
  {&(_tg__ZTV8S20176C2__9S20176C20__9S20176C19[3]),  3,4},
  {&(_tg__ZTV9S20176C21__A1__9S20176C19[5]),  5,10},
  {&(_tg__ZTV8S20176C89S20176C21__A1__9S20176C19[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C89S20176C21__A1__9S20176C19[3]),  3,4},
  {&(_tg__ZTV8S20176C5__9S20176C21__A1__9S20176C19[3]),  3,4},
  {&(_tg__ZTV8S20176C2__9S20176C21__A1__9S20176C19[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20176C19[];
extern  VTBL_ENTRY _ZTV9S20176C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C19[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C19D0Ev,_ZTv0_n32_N9S20176C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N9S20176C19D0Ev,_ZThn1336_N9S20176C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20176C19D0Ev,_ZThn76_N9S20176C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C19D1Ev,_ZTv0_n32_N9S20176C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N9S20176C19D1Ev,_ZThn1336_N9S20176C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20176C19D1Ev,_ZThn76_N9S20176C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20176C19 = {  "S20176C19", // class name
  bases_S20176C19, 12,
  &(vtc_S20176C19[0]), // expected_vtbl_contents
  &(vtt_S20176C19[0]), // expected_vtt_contents
  ABISELECT(3296,1816), // object size
  NSPAIRA(_ZTI9S20176C19),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20176C19),54, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C19),20, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C24  : virtual S20176C2 , virtual S20176C6 {
  ::S20176C6 s20176c24f0[7];
  int s20176c24f1;
  short s20176c24f2;
  int s20176c24f3;
  ::S20176C8 s20176c24f4;
  __tsi64 s20176c24f5[9];
  virtual void  v11(); // _ZN9S20176C243v11Ev
  virtual void  v12(); // _ZN9S20176C243v12Ev
  ~S20176C24(); // tgen
  S20176C24(); // tgen
};
//SIG(-1 S20176C24) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 FL[9]}


void  S20176C24 ::v11(){vfunc_called(this, "_ZN9S20176C243v11Ev");}
void  S20176C24 ::v12(){vfunc_called(this, "_ZN9S20176C243v12Ev");}
S20176C24 ::~S20176C24(){ note_dtor("S20176C24", this);} // tgen
S20176C24 ::S20176C24(){ note_ctor("S20176C24", this);} // tgen

static void Test_S20176C24()
{
  extern Class_Descriptor cd_S20176C24;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1706)];
    init_test(&cd_S20176C24, buf);
    S20176C24 *dp, &lv = *(dp=new (buf) S20176C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6820), "sizeof(S20176C24)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C24)");
    /*is_ambiguous_... S20176C24::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*), ABISELECT(10928,6036), "S20176C24");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(10928,6036), "S20176C24");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*), ABISELECT(11872,6556), "S20176C24");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(12328,6812), "S20176C24");
    check_base_class_offset(lv, (S20176C8*)(S20176C7*), ABISELECT(11872,6556), "S20176C24");
    check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(11776,6500), "S20176C24");
    /*is_ambiguous_... S20176C6::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), ABISELECT(11296,6232), "S20176C24");
    /*is_ambiguous_... S20176C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(11664,6428), "S20176C24");
    check_base_class_offset(lv, (S20176C6*), ABISELECT(11296,6232), "S20176C24");
    check_field_offset(lv, s20176c24f0, ABISELECT(16,4), "S20176C24.s20176c24f0");
    check_field_offset(lv, s20176c24f1, ABISELECT(9984,5492), "S20176C24.s20176c24f1");
    check_field_offset(lv, s20176c24f2, ABISELECT(9988,5496), "S20176C24.s20176c24f2");
    check_field_offset(lv, s20176c24f3, ABISELECT(9992,5500), "S20176C24.s20176c24f3");
    check_field_offset(lv, s20176c24f4, ABISELECT(10000,5504), "S20176C24.s20176c24f4");
    check_field_offset(lv, s20176c24f5, ABISELECT(10848,5964), "S20176C24.s20176c24f5");
    test_class_info(&lv, &cd_S20176C24);
    dp->~S20176C24();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C24(Test_S20176C24, "S20176C24", ABISELECT(12352,6820));

#else // __cplusplus

extern void _ZN9S20176C24C1Ev();
extern void _ZN9S20176C24D1Ev();
Name_Map name_map_S20176C24[] = {
  NSPAIR(_ZN9S20176C24C1Ev),
  NSPAIR(_ZN9S20176C24D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C7;
extern VTBL_ENTRY _ZTI8S20176C7[];
extern  VTBL_ENTRY _ZTV8S20176C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C7[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
static Base_Class bases_S20176C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C2,    ABISELECT(10928,6036), //bcp->offset
    11, //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_S20176C5,    ABISELECT(11872,6556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C8,    ABISELECT(11872,6556), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20176C7,    ABISELECT(11776,6500), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20176C2,    ABISELECT(11296,6232), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(11296,6232), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20176C24[];
extern void _ZN9S20176C243v11Ev();
extern void _ZN9S20176C243v12Ev();
extern void _ZN9S20176C24D1Ev();
extern void _ZN9S20176C24D0Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev)();
extern void ABISELECT(_ZThn11296_N9S20176C24D1Ev,_ZThn6232_N9S20176C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev)();
extern void ABISELECT(_ZThn11296_N9S20176C24D0Ev,_ZThn6232_N9S20176C24D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY vtc_S20176C24[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN9S20176C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20176C243v12Ev,
  (VTBL_ENTRY)&_ZN9S20176C24D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C24D0Ev,
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern VTBL_ENTRY _ZTV9S20176C24[];
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C24[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__9S20176C24[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__9S20176C24[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__9S20176C24[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C24[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C7__9S20176C24[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C7__9S20176C24[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C24[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__9S20176C24[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C24[] = {
  {&(_ZTV9S20176C24[7]),  7,41},
  {&(_ZTV9S20176C24[14]),  14,41},
  {&(_ZTV9S20176C24[24]),  24,41},
  {&(_ZTV9S20176C24[33]),  33,41},
  {&(_ZTV9S20176C24[39]),  39,41},
  {&(_tg__ZTV8S20176C6__9S20176C24[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__9S20176C24[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__9S20176C24[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__9S20176C24[3]),  3,4},
  {&(_tg__ZTV8S20176C7__9S20176C24[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C7__9S20176C24[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C7__9S20176C24[3]),  3,4},
  {&(_tg__ZTV8S20176C8__9S20176C24[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__9S20176C24[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20176C24[];
extern  VTBL_ENTRY _ZTV9S20176C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C24[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20176C24D0Ev,_ZThn6232_N9S20176C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20176C24D1Ev,_ZThn6232_N9S20176C24D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20176C24 = {  "S20176C24", // class name
  bases_S20176C24, 8,
  &(vtc_S20176C24[0]), // expected_vtbl_contents
  &(vtt_S20176C24[0]), // expected_vtt_contents
  ABISELECT(12352,6820), // object size
  NSPAIRA(_ZTI9S20176C24),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20176C24),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C24),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C23  : virtual S20176C24 {
  char s20176c23f0;
  int s20176c23f1[3];
  virtual  ~S20176C23(); // _ZN9S20176C23D2Ev
  S20176C23(); // tgen
};
//SIG(-1 S20176C23) C1{ VBC2{ VBC3{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v2 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v3 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v5 v6 FC7[7] Fi Fs Fi FC9 FL[9]} vd Fc Fi[3]}


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

static void Test_S20176C23()
{
  extern Class_Descriptor cd_S20176C23;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(775,1711)];
    init_test(&cd_S20176C23, buf);
    S20176C23 *dp, &lv = *(dp=new (buf) S20176C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12384,6840), "sizeof(S20176C23)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C23)");
    /*is_ambiguous_... S20176C24::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C24*), ABISELECT(10960,6056), "S20176C23");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(10960,6056), "S20176C23");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*), ABISELECT(11904,6576), "S20176C23");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(12360,6832), "S20176C23");
    check_base_class_offset(lv, (S20176C8*)(S20176C7*), ABISELECT(11904,6576), "S20176C23");
    check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(11808,6520), "S20176C23");
    /*is_ambiguous_... S20176C6::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), ABISELECT(11328,6252), "S20176C23");
    /*is_ambiguous_... S20176C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(11696,6448), "S20176C23");
    check_base_class_offset(lv, (S20176C6*)(S20176C24*), ABISELECT(11328,6252), "S20176C23");
    check_base_class_offset(lv, (S20176C24*), ABISELECT(32,20), "S20176C23");
    check_field_offset(lv, s20176c23f0, ABISELECT(8,4), "S20176C23.s20176c23f0");
    check_field_offset(lv, s20176c23f1, ABISELECT(12,8), "S20176C23.s20176c23f1");
    test_class_info(&lv, &cd_S20176C23);
    dp->~S20176C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C23(Test_S20176C23, "S20176C23", ABISELECT(12384,6840));

#else // __cplusplus

extern void _ZN9S20176C23C1Ev();
extern void _ZN9S20176C23D2Ev();
Name_Map name_map_S20176C23[] = {
  NSPAIR(_ZN9S20176C23C1Ev),
  NSPAIR(_ZN9S20176C23D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C7;
extern VTBL_ENTRY _ZTI8S20176C7[];
extern  VTBL_ENTRY _ZTV8S20176C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C7[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C24;
extern VTBL_ENTRY _ZTI9S20176C24[];
extern  VTBL_ENTRY _ZTV9S20176C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C24[];
static Base_Class bases_S20176C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C2,    ABISELECT(10960,6056), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S20176C5,    ABISELECT(11904,6576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12360,6832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C8,    ABISELECT(11904,6576), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20176C7,    ABISELECT(11808,6520), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20176C2,    ABISELECT(11328,6252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11696,6448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(11328,6252), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20176C24,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20176C23[];
extern void _ZN9S20176C23D1Ev();
extern void _ZN9S20176C23D0Ev();
extern void _ZN9S20176C243v11Ev();
extern void _ZN9S20176C243v12Ev();
extern void ABISELECT(_ZTv0_n80_N9S20176C23D1Ev,_ZTv0_n40_N9S20176C23D1Ev)();
extern void ABISELECT(_ZThn32_N9S20176C23D1Ev,_ZThn20_N9S20176C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20176C23D0Ev,_ZTv0_n40_N9S20176C23D0Ev)();
extern void ABISELECT(_ZThn32_N9S20176C23D0Ev,_ZThn20_N9S20176C23D0Ev)() __attribute__((weak));
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C23D1Ev,_ZTv0_n32_N9S20176C23D1Ev)();
extern void ABISELECT(_ZThn11328_N9S20176C23D1Ev,_ZThn6252_N9S20176C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C23D0Ev,_ZTv0_n32_N9S20176C23D0Ev)();
extern void ABISELECT(_ZThn11328_N9S20176C23D0Ev,_ZThn6252_N9S20176C23D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY vtc_S20176C23[] = {
  ABISELECT(12360,6832),
  ABISELECT(11904,6576),
  ABISELECT(11808,6520),
  ABISELECT(11328,6252),
  ABISELECT(10960,6056),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C23[0]),
  (VTBL_ENTRY)&_ZN9S20176C23D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C23D0Ev,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S20176C23[0]),
  (VTBL_ENTRY)&_ZN9S20176C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20176C243v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C23D1Ev,_ZTv0_n40_N9S20176C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C23D0Ev,_ZTv0_n40_N9S20176C23D0Ev),
  0,
  ABISELECT(-10960,-6056),
  (VTBL_ENTRY)&(_ZTI9S20176C23[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  0,
  ABISELECT(-11328,-6252),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11328,-6252),
  (VTBL_ENTRY)&(_ZTI9S20176C23[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C23D1Ev,_ZTv0_n32_N9S20176C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C23D0Ev,_ZTv0_n32_N9S20176C23D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11808,-6520),
  (VTBL_ENTRY)&(_ZTI9S20176C23[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11904,-6576),
  (VTBL_ENTRY)&(_ZTI9S20176C23[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern VTBL_ENTRY _ZTV9S20176C23[];
extern void _ZN9S20176C243v11Ev();
extern void _ZN9S20176C243v12Ev();
extern void _ZN9S20176C24D1Ev();
extern void _ZN9S20176C24D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C24__9S20176C23[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN9S20176C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20176C243v12Ev,
  (VTBL_ENTRY)&_ZN9S20176C24D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C24D0Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C24__9S20176C23[] = {
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev)();
extern void ABISELECT(_ZThn11296_N9S20176C24D1Ev,_ZThn6232_N9S20176C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev)();
extern void ABISELECT(_ZThn11296_N9S20176C24D0Ev,_ZThn6232_N9S20176C24D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C24__9S20176C23[] = {
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C24__9S20176C23[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C24__9S20176C23[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C23[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__9S20176C23[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__9S20176C23[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__9S20176C23[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C23[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C7__9S20176C23[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C7__9S20176C23[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C23[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__9S20176C23[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C23[] = {
  {&(_ZTV9S20176C23[8]),  8,54},
  {&(_ZTV9S20176C23[20]),  20,54},
  {&(_ZTV9S20176C23[27]),  27,54},
  {&(_ZTV9S20176C23[37]),  37,54},
  {&(_ZTV9S20176C23[46]),  46,54},
  {&(_ZTV9S20176C23[52]),  52,54},
  {&(_tg__ZTV9S20176C24__9S20176C23[7]),  7,11},
  {&(_tg__ZTV8S20176C2__9S20176C24__9S20176C23[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C24__9S20176C23[9]),  9,13},
  {&(_tg__ZTV8S20176C7__9S20176C24__9S20176C23[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C24__9S20176C23[6]),  6,8},
  {&(_tg__ZTV8S20176C6__9S20176C23[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__9S20176C23[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__9S20176C23[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__9S20176C23[3]),  3,4},
  {&(_tg__ZTV8S20176C7__9S20176C23[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C7__9S20176C23[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C7__9S20176C23[3]),  3,4},
  {&(_tg__ZTV8S20176C8__9S20176C23[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__9S20176C23[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20176C23[];
extern  VTBL_ENTRY _ZTV9S20176C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C23[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20176C24D0Ev,_ZThn6232_N9S20176C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20176C24D1Ev,_ZThn6232_N9S20176C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C23D0Ev,_ZTv0_n32_N9S20176C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N9S20176C23D0Ev,_ZThn6252_N9S20176C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C23D1Ev,_ZTv0_n32_N9S20176C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N9S20176C23D1Ev,_ZThn6252_N9S20176C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C23D0Ev,_ZTv0_n40_N9S20176C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20176C23D0Ev,_ZThn20_N9S20176C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C23D1Ev,_ZTv0_n40_N9S20176C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20176C23D1Ev,_ZThn20_N9S20176C23D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20176C23 = {  "S20176C23", // class name
  bases_S20176C23, 9,
  &(vtc_S20176C23[0]), // expected_vtbl_contents
  &(vtt_S20176C23[0]), // expected_vtt_contents
  ABISELECT(12384,6840), // object size
  NSPAIRA(_ZTI9S20176C23),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20176C23),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C23),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C22  : S20176C21 , virtual S20176C8 , virtual S20176C23 {
  long double s20176c22f0[2];
  ::S20176C3_nt s20176c22f1;
  int s20176c22f2:16;
  int s20176c22f3:3;
  virtual  ~S20176C22(); // _ZN9S20176C22D2Ev
  virtual void  v18(); // _ZN9S20176C223v18Ev
  virtual void  v19(); // _ZN9S20176C223v19Ev
  S20176C22(); // tgen
};
//SIG(-1 S20176C22) C1{ BC2{ VBC3{ v3 Fi Fp FC4{ m Fp[2]}} VBC4 BC5{ BC3 VBC6{ v4 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC4 FC4[9] Fp FC3 FC3} VBC4 v5 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} BC6 vd v6 Fi:25 Fp Fi[3] FC4} VBC5 VBC8{ VBC9{ VBC6 VBC10{ VBC11{ VBC5 Fi Fc Fp[6] Fi[2] Fp FC4} BC6 BC4 vd v7 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v8 v9 FC10[7] Fi Fs Fi FC5 FL[9]} vd Fc Fi[3]} vd v1 v2 FD[2] FC7 Fi:16 Fi:3}


 S20176C22 ::~S20176C22(){ note_dtor("S20176C22", this);}
void  S20176C22 ::v18(){vfunc_called(this, "_ZN9S20176C223v18Ev");}
void  S20176C22 ::v19(){vfunc_called(this, "_ZN9S20176C223v19Ev");}
S20176C22 ::S20176C22(){ note_ctor("S20176C22", this);} // tgen

static void Test_S20176C22()
{
  extern Class_Descriptor cd_S20176C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(834,1843)];
    init_test(&cd_S20176C22, buf);
    S20176C22 *dp, &lv = *(dp=new (buf) S20176C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13328,7368), "sizeof(S20176C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C22)");
    /*is_ambiguous_... S20176C21::S20176C5 */ AMB_check_base_class_offset(lv, (S20176C5*)(S20176C21*), ABISELECT(920,508), "S20176C22");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C21*), ABISELECT(960,528), "S20176C22");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*)(S20176C21*), ABISELECT(960,528), "S20176C22");
    /*is_ambiguous_... S20176C22::S20176C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(960,528), "S20176C22");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*)(S20176C21*), 0, "S20176C22");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*)(S20176C21*), ABISELECT(976,536), "S20176C22");
    /*is_ambiguous_... S20176C22::S20176C8 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(976,536), "S20176C22");
    /*is_ambiguous_... S20176C24::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C24*), ABISELECT(976,536), "S20176C22");
    check_base_class_offset(lv, (S20176C8*)(S20176C21*), 0, "S20176C22");
    /*is_ambiguous_... S20176C21::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C21*), ABISELECT(464,256), "S20176C22");
    check_base_class_offset(lv, (S20176C21*), 0, "S20176C22");
    /*is_ambiguous_... S20176C22::S20176C8 */ AMB_check_base_class_offset(lv, (S20176C5*)(S20176C8*), ABISELECT(1344,732), "S20176C22");
    /*is_ambiguous_... S20176C22::S20176C8 */ AMB_check_base_class_offset(lv, (S20176C8*), ABISELECT(1344,732), "S20176C22");
    check_base_class_offset(lv, (S20176C8*)(S20176C7*), ABISELECT(1344,732), "S20176C22");
    check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(13232,7312), "S20176C22");
    /*is_ambiguous_... S20176C6::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), ABISELECT(12752,7044), "S20176C22");
    /*is_ambiguous_... S20176C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(13120,7240), "S20176C22");
    check_base_class_offset(lv, (S20176C6*)(S20176C24*), ABISELECT(12752,7044), "S20176C22");
    check_base_class_offset(lv, (S20176C24*)(S20176C23*), ABISELECT(1824,1008), "S20176C22");
    check_base_class_offset(lv, (S20176C23*), ABISELECT(1800,988), "S20176C22");
    check_field_offset(lv, s20176c22f0, ABISELECT(880,480), "S20176C22.s20176c22f0");
    check_field_offset(lv, s20176c22f1, ABISELECT(912,504), "S20176C22.s20176c22f1");
    set_bf_and_test(lv, s20176c22f2, ABISELECT(913,505), 0, 16, 1, "S20176C22");
    set_bf_and_test(lv, s20176c22f2, ABISELECT(913,505), 0, 16, hide_sll(1LL<<15), "S20176C22");
    set_bf_and_test(lv, s20176c22f3, ABISELECT(915,507), 0, 3, 1, "S20176C22");
    set_bf_and_test(lv, s20176c22f3, ABISELECT(915,507), 0, 3, hide_sll(1LL<<2), "S20176C22");
    test_class_info(&lv, &cd_S20176C22);
    dp->~S20176C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C22(Test_S20176C22, "S20176C22", ABISELECT(13328,7368));

#else // __cplusplus

extern void _ZN9S20176C22C1Ev();
extern void _ZN9S20176C22D2Ev();
Name_Map name_map_S20176C22[] = {
  NSPAIR(_ZN9S20176C22C1Ev),
  NSPAIR(_ZN9S20176C22D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S20176C21;
extern VTBL_ENTRY _ZTI9S20176C21[];
extern  VTBL_ENTRY _ZTV9S20176C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C21[];
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C7;
extern VTBL_ENTRY _ZTI8S20176C7[];
extern  VTBL_ENTRY _ZTV8S20176C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C7[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C24;
extern VTBL_ENTRY _ZTI9S20176C24[];
extern  VTBL_ENTRY _ZTV9S20176C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C24[];
extern Class_Descriptor cd_S20176C23;
extern VTBL_ENTRY _ZTI9S20176C23[];
extern  VTBL_ENTRY _ZTV9S20176C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C23[];
static Base_Class bases_S20176C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    ABISELECT(920,508), //bcp->offset
    20, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(960,528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20176C2,    ABISELECT(976,536), //bcp->offset
    24, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20176C8,    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
    11, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20176C2,    ABISELECT(464,256), //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
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20176C21,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C5,    ABISELECT(1344,732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20176C8,    ABISELECT(1344,732), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20176C7,    ABISELECT(13232,7312), //bcp->offset
    74, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20176C2,    ABISELECT(12752,7044), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(13120,7240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(12752,7044), //bcp->offset
    61, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20176C24,    ABISELECT(1824,1008), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20176C23,    ABISELECT(1800,988), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20176C22[];
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN9S20176C22D1Ev();
extern void _ZN9S20176C22D0Ev();
extern void _ZN9S20176C213v17Ev();
extern void _ZN9S20176C223v18Ev();
extern void _ZN9S20176C223v19Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void ABISELECT(_ZTv0_n72_N9S20176C22D1Ev,_ZTv0_n36_N9S20176C22D1Ev)();
extern void ABISELECT(_ZThn1800_N9S20176C22D1Ev,_ZThn988_N9S20176C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20176C22D0Ev,_ZTv0_n36_N9S20176C22D0Ev)();
extern void ABISELECT(_ZThn1800_N9S20176C22D0Ev,_ZThn988_N9S20176C22D0Ev)() __attribute__((weak));
extern void _ZN9S20176C243v11Ev();
extern void _ZN9S20176C243v12Ev();
extern void ABISELECT(_ZTv0_n80_N9S20176C22D1Ev,_ZTv0_n40_N9S20176C22D1Ev)();
extern void ABISELECT(_ZThn1824_N9S20176C22D1Ev,_ZThn1008_N9S20176C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20176C22D0Ev,_ZTv0_n40_N9S20176C22D0Ev)();
extern void ABISELECT(_ZThn1824_N9S20176C22D0Ev,_ZThn1008_N9S20176C22D0Ev)() __attribute__((weak));
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C22D1Ev,_ZTv0_n32_N9S20176C22D1Ev)();
extern void ABISELECT(_ZThn12752_N9S20176C22D1Ev,_ZThn7044_N9S20176C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C22D0Ev,_ZTv0_n32_N9S20176C22D0Ev)();
extern void ABISELECT(_ZThn12752_N9S20176C22D0Ev,_ZThn7044_N9S20176C22D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY vtc_S20176C22[] = {
  ABISELECT(13232,7312),
  ABISELECT(12752,7044),
  ABISELECT(1824,1008),
  ABISELECT(1800,988),
  ABISELECT(1344,732),
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C22[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20176C22D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C22D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C213v17Ev,
  (VTBL_ENTRY)&_ZN9S20176C223v18Ev,
  (VTBL_ENTRY)&_ZN9S20176C223v19Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI9S20176C22[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI9S20176C22[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI9S20176C22[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-1344,-732),
  (VTBL_ENTRY)&(_ZTI9S20176C22[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  ABISELECT(-1800,-988),
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6324),
  ABISELECT(10952,6056),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  ABISELECT(-1800,-988),
  (VTBL_ENTRY)&(_ZTI9S20176C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20176C22D1Ev,_ZTv0_n36_N9S20176C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20176C22D0Ev,_ZTv0_n36_N9S20176C22D0Ev),
  ABISELECT(-1824,-1008),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-848,-472),
  ABISELECT(-1824,-1008),
  (VTBL_ENTRY)&(_ZTI9S20176C22[0]),
  (VTBL_ENTRY)&_ZN9S20176C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20176C243v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C22D1Ev,_ZTv0_n40_N9S20176C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C22D0Ev,_ZTv0_n40_N9S20176C22D0Ev),
  0,
  ABISELECT(-12752,-7044),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-12752,-7044),
  (VTBL_ENTRY)&(_ZTI9S20176C22[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C22D1Ev,_ZTv0_n32_N9S20176C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C22D0Ev,_ZTv0_n32_N9S20176C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-13232,-7312),
  (VTBL_ENTRY)&(_ZTI9S20176C22[0]),
};
extern VTBL_ENTRY _ZTV9S20176C22[];
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN9S20176C21D1Ev();
extern void _ZN9S20176C21D0Ev();
extern void _ZN9S20176C213v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C21__9S20176C22[] = {
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20176C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C21D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C213v17Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C89S20176C21__9S20176C22[] = {
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C89S20176C21__9S20176C22[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C5__9S20176C21__9S20176C22[] = {
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C21__9S20176C22[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI9S20176C21[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__A1__9S20176C22[] = {
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__A1__9S20176C22[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN9S20176C23D1Ev();
extern void _ZN9S20176C23D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C23__9S20176C22[] = {
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6324),
  ABISELECT(10952,6056),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C23[0]),
  (VTBL_ENTRY)&_ZN9S20176C23D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C23D0Ev,
};
extern void _ZN9S20176C243v11Ev();
extern void _ZN9S20176C243v12Ev();
extern void ABISELECT(_ZTv0_n80_N9S20176C23D1Ev,_ZTv0_n40_N9S20176C23D1Ev)();
extern void ABISELECT(_ZThn24_N9S20176C23D1Ev,_ZThn20_N9S20176C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20176C23D0Ev,_ZTv0_n40_N9S20176C23D0Ev)();
extern void ABISELECT(_ZThn24_N9S20176C23D0Ev,_ZThn20_N9S20176C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20176C24__9S20176C23__9S20176C22[] = {
  ABISELECT(-24,-20),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-848,-472),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI9S20176C23[0]),
  (VTBL_ENTRY)&_ZN9S20176C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20176C243v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C23D1Ev,_ZTv0_n40_N9S20176C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C23D0Ev,_ZTv0_n40_N9S20176C23D0Ev),
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C23__9S20176C22[] = {
  0,
  ABISELECT(824,452),
  (VTBL_ENTRY)&(_ZTI9S20176C23[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C23D1Ev,_ZTv0_n32_N9S20176C23D1Ev)();
extern void ABISELECT(_ZThn10952_N9S20176C23D1Ev,_ZThn6056_N9S20176C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C23D0Ev,_ZTv0_n32_N9S20176C23D0Ev)();
extern void ABISELECT(_ZThn10952_N9S20176C23D0Ev,_ZThn6056_N9S20176C23D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C23__9S20176C22[] = {
  0,
  ABISELECT(-10952,-6056),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-10952,-6056),
  (VTBL_ENTRY)&(_ZTI9S20176C23[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C23D1Ev,_ZTv0_n32_N9S20176C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C23D0Ev,_ZTv0_n32_N9S20176C23D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C23__9S20176C22[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-11432,-6324),
  (VTBL_ENTRY)&(_ZTI9S20176C23[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C23__9S20176C22[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(456,256),
  (VTBL_ENTRY)&(_ZTI9S20176C23[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN9S20176C243v11Ev();
extern void _ZN9S20176C243v12Ev();
extern void _ZN9S20176C24D1Ev();
extern void _ZN9S20176C24D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C24__9S20176C22[] = {
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-848,-472),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN9S20176C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20176C243v12Ev,
  (VTBL_ENTRY)&_ZN9S20176C24D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C24D0Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C24__9S20176C22[] = {
  0,
  ABISELECT(848,472),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev)();
extern void ABISELECT(_ZThn10928_N9S20176C24D1Ev,_ZThn6036_N9S20176C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev)();
extern void ABISELECT(_ZThn10928_N9S20176C24D0Ev,_ZThn6036_N9S20176C24D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C24__9S20176C22[] = {
  0,
  ABISELECT(-10928,-6036),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C24__9S20176C22[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-11408,-6304),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C24__9S20176C22[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(480,276),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C22[] = {
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__9S20176C22[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__9S20176C22[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11408,6312),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__9S20176C22[] = {
  0,
  ABISELECT(11776,6508),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C22[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C7__9S20176C22[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11888,6580),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C7__9S20176C22[] = {
  0,
  ABISELECT(12256,6776),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C22[] = {
  {&(_ZTV9S20176C22[10]),  10,79},
  {&(_tg__ZTV9S20176C21__9S20176C22[5]),  5,10},
  {&(_tg__ZTV8S20176C89S20176C21__9S20176C22[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C89S20176C21__9S20176C22[3]),  3,4},
  {&(_tg__ZTV8S20176C5__9S20176C21__9S20176C22[3]),  3,4},
  {&(_tg__ZTV8S20176C2__9S20176C21__9S20176C22[3]),  3,4},
  {&(_ZTV9S20176C22[23]),  23,79},
  {&(_ZTV9S20176C22[27]),  27,79},
  {&(_ZTV9S20176C22[34]),  34,79},
  {&(_ZTV9S20176C22[45]),  45,79},
  {&(_ZTV9S20176C22[57]),  57,79},
  {&(_ZTV9S20176C22[70]),  70,79},
  {&(_ZTV9S20176C22[79]),  79,79},
  {&(_tg__ZTV8S20176C8__A1__9S20176C22[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__A1__9S20176C22[3]),  3,4},
  {&(_tg__ZTV9S20176C23__9S20176C22[8]),  8,10},
  {&(_tg__ZTV9S20176C24__9S20176C23__9S20176C22[10]),  10,14},
  {&(_tg__ZTV8S20176C2__9S20176C23__9S20176C22[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C23__9S20176C22[9]),  9,13},
  {&(_tg__ZTV8S20176C7__9S20176C23__9S20176C22[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C23__9S20176C22[6]),  6,8},
  {&(_tg__ZTV9S20176C24__9S20176C22[7]),  7,11},
  {&(_tg__ZTV8S20176C2__9S20176C24__9S20176C22[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C24__9S20176C22[9]),  9,13},
  {&(_tg__ZTV8S20176C7__9S20176C24__9S20176C22[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C24__9S20176C22[6]),  6,8},
  {&(_tg__ZTV8S20176C6__9S20176C22[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__9S20176C22[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__9S20176C22[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__9S20176C22[3]),  3,4},
  {&(_tg__ZTV8S20176C7__9S20176C22[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C7__9S20176C22[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C7__9S20176C22[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20176C22[];
extern  VTBL_ENTRY _ZTV9S20176C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C22[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S20176C24D0Ev,_ZThn6036_N9S20176C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S20176C24D1Ev,_ZThn6036_N9S20176C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C23D0Ev,_ZTv0_n32_N9S20176C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S20176C23D0Ev,_ZThn6056_N9S20176C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C23D1Ev,_ZTv0_n32_N9S20176C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S20176C23D1Ev,_ZThn6056_N9S20176C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C23D0Ev,_ZTv0_n40_N9S20176C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20176C23D0Ev,_ZThn20_N9S20176C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C23D1Ev,_ZTv0_n40_N9S20176C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20176C23D1Ev,_ZThn20_N9S20176C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C22D0Ev,_ZTv0_n32_N9S20176C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12752_N9S20176C22D0Ev,_ZThn7044_N9S20176C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C22D1Ev,_ZTv0_n32_N9S20176C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12752_N9S20176C22D1Ev,_ZThn7044_N9S20176C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C22D0Ev,_ZTv0_n40_N9S20176C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N9S20176C22D0Ev,_ZThn1008_N9S20176C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C22D1Ev,_ZTv0_n40_N9S20176C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N9S20176C22D1Ev,_ZThn1008_N9S20176C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20176C22D0Ev,_ZTv0_n36_N9S20176C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1800_N9S20176C22D0Ev,_ZThn988_N9S20176C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20176C22D1Ev,_ZTv0_n36_N9S20176C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1800_N9S20176C22D1Ev,_ZThn988_N9S20176C22D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20176C22 = {  "S20176C22", // class name
  bases_S20176C22, 15,
  &(vtc_S20176C22[0]), // expected_vtbl_contents
  &(vtt_S20176C22[0]), // expected_vtt_contents
  ABISELECT(13328,7368), // object size
  NSPAIRA(_ZTI9S20176C22),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20176C22),79, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C22),33, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C16  : virtual S20176C11 , S20176C6 , virtual S20176C17 , S281C37_nt {
  ::S20176C18 s20176c16f0;
  long double s20176c16f1;
  int s20176c16f2;
  ::S20176C19 s20176c16f3;
  char s20176c16f4;
  long s20176c16f5;
  ::S20176C3_nt s20176c16f6[8];
  int s20176c16f7:18;
  int s20176c16f8;
  ::S20176C13 s20176c16f9;
  ::S20176C22 s20176c16f10;
  ::S20176C3_nt s20176c16f11;
  virtual  ~S20176C16(); // _ZN9S20176C16D2Ev
  virtual void  v10(); // _ZN9S20176C163v10Ev
  S20176C16(); // tgen
};
//SIG(-1 S20176C16) C1{ VBC2{ BC3{ VBC4{ VBC5{ BC6{ v2 Fi Fp FC7{ m Fp[2]}} VBC8{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC9{} FC7 FC7[9] Fp FC6 FC6} VBC7 v4 Fp FL Fc[2] FC8 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC8 BC7 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC10{ BC11{ VBC4 VBC3 vd Fl Fp FC5 Fp Fs FL Fi FL FC5[4] Fi} BC12{ VBC8 Fp Fs FL Fi:6 Fp[2]} vd v6 FL FD FC9 Fi[9] Fs Fc:5} VBC13{ m FL FC7[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} BC3 VBC14{ v7 Fl Fc Fs[2]} BC7 vd v1 FC15{ BC3 vd Fi FC9 Fp Fi Fc[8] Fs Fi} FD Fi FC16{ VBC17{ BC18{ VBC6 VBC7 BC5 BC8 vd v9 Fi:25 Fp Fi[3] FC7} vd Fp Fi Fp Fi[7] FC4} VBC18 vd v8 Fi[2] Fs[10] Fi FC9 Fi:32 Fi FC9 Fp Fi:2 Fi FD} Fc Fl FC9[8] Fi:18 Fi FC11 FC19{ BC18 VBC5 VBC20{ VBC21{ VBC8 VBC3 v12 v13 FC3[7] Fi Fs Fi FC5 FL[9]} vd Fc Fi[3]} vd v10 v11 FD[2] FC9 Fi:16 Fi:3} FC9}


 S20176C16 ::~S20176C16(){ note_dtor("S20176C16", this);}
void  S20176C16 ::v10(){vfunc_called(this, "_ZN9S20176C163v10Ev");}
S20176C16 ::S20176C16(){ note_ctor("S20176C16", this);} // tgen

static void Test_S20176C16()
{
  extern Class_Descriptor cd_S20176C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1941,4268)];
    init_test(&cd_S20176C16, buf);
    S20176C16 *dp, &lv = *(dp=new (buf) S20176C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31040,17068), "sizeof(S20176C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C16)");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*), ABISELECT(29520,16240), "S20176C16");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(29984,16496), "S20176C16");
    check_base_class_offset(lv, (S20176C2*)(S20176C14*)(S20176C12*)(S20176C11*), ABISELECT(29984,16496), "S20176C16");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(30352,16692), "S20176C16");
    check_base_class_offset(lv, (S20176C8*)(S20176C7*), ABISELECT(29520,16240), "S20176C16");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C6*)(S20176C11*), ABISELECT(29416,16184), "S20176C16");
    check_base_class_offset(lv, (S20176C7*)(S20176C13*)(S20176C12*)(S20176C11*), ABISELECT(29416,16184), "S20176C16");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(29416,16184), "S20176C16");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(29416,16184), "S20176C16");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*)(S20176C11*), ABISELECT(24432,13448), "S20176C16");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*)(S20176C11*), ABISELECT(24800,13644), "S20176C16");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C6*)(S20176C11*), ABISELECT(24432,13448), "S20176C16");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), ABISELECT(30368,16700), "S20176C16");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(30736,16896), "S20176C16");
    check_base_class_offset(lv, (S20176C6*)(S20176C13*)(S20176C12*)(S20176C11*), ABISELECT(30368,16700), "S20176C16");
    check_base_class_offset(lv, (S20176C13*)(S20176C12*)(S20176C11*), ABISELECT(24912,13716), "S20176C16");
    check_base_class_offset(lv, (S20176C14*)(S20176C12*)(S20176C11*), ABISELECT(29240,16060), "S20176C16");
    check_base_class_offset(lv, (S20176C12*)(S20176C11*), ABISELECT(24912,13716), "S20176C16");
    check_base_class_offset(lv, (S20176C15*)(S20176C11*), ABISELECT(30848,16968), "S20176C16");
    check_base_class_offset(lv, (S20176C11*), ABISELECT(24432,13448), "S20176C16");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), 0, "S20176C16");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(368,196), "S20176C16");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C6*), 0, "S20176C16");
    check_base_class_offset(lv, (S20176C17*), ABISELECT(31008,17052), "S20176C16");
    /*is_ambiguous_... S20176C16::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(480,268), "S20176C16");
    check_field_offset(lv, s20176c16f0, ABISELECT(496,276), "S20176C16.s20176c16f0");
    check_field_offset(lv, s20176c16f1, ABISELECT(1968,1092), "S20176C16.s20176c16f1");
    check_field_offset(lv, s20176c16f2, ABISELECT(1984,1104), "S20176C16.s20176c16f2");
    check_field_offset(lv, s20176c16f3, ABISELECT(2000,1108), "S20176C16.s20176c16f3");
    check_field_offset(lv, s20176c16f4, ABISELECT(5296,2924), "S20176C16.s20176c16f4");
    check_field_offset(lv, s20176c16f5, ABISELECT(5304,2928), "S20176C16.s20176c16f5");
    check_field_offset(lv, s20176c16f6, ABISELECT(5312,2932), "S20176C16.s20176c16f6");
    set_bf_and_test(lv, s20176c16f7, ABISELECT(5320,2940), 0, 18, 1, "S20176C16");
    set_bf_and_test(lv, s20176c16f7, ABISELECT(5320,2940), 0, 18, hide_sll(1LL<<17), "S20176C16");
    check_field_offset(lv, s20176c16f8, ABISELECT(5324,2944), "S20176C16.s20176c16f8");
    check_field_offset(lv, s20176c16f9, ABISELECT(5328,2948), "S20176C16.s20176c16f9");
    check_field_offset(lv, s20176c16f10, ABISELECT(11088,6076), "S20176C16.s20176c16f10");
    check_field_offset(lv, s20176c16f11, ABISELECT(24416,13444), "S20176C16.s20176c16f11");
    test_class_info(&lv, &cd_S20176C16);
    dp->~S20176C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C16(Test_S20176C16, "S20176C16", ABISELECT(31040,17068));

#else // __cplusplus

extern void _ZN9S20176C16C1Ev();
extern void _ZN9S20176C16D2Ev();
Name_Map name_map_S20176C16[] = {
  NSPAIR(_ZN9S20176C16C1Ev),
  NSPAIR(_ZN9S20176C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C7;
extern VTBL_ENTRY _ZTI8S20176C7[];
extern  VTBL_ENTRY _ZTV8S20176C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C7[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C13;
extern VTBL_ENTRY _ZTI9S20176C13[];
extern  VTBL_ENTRY _ZTV9S20176C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C13[];
extern Class_Descriptor cd_S20176C14;
extern VTBL_ENTRY _ZTI9S20176C14[];
extern  VTBL_ENTRY _ZTV9S20176C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C14[];
extern Class_Descriptor cd_S20176C12;
extern VTBL_ENTRY _ZTI9S20176C12[];
extern  VTBL_ENTRY _ZTV9S20176C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C12[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
extern Class_Descriptor cd_S20176C11;
extern VTBL_ENTRY _ZTI9S20176C11[];
extern  VTBL_ENTRY _ZTV9S20176C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C11[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C17;
extern VTBL_ENTRY _ZTI9S20176C17[];
extern  VTBL_ENTRY _ZTV9S20176C17[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S20176C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    ABISELECT(29520,16240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C2,    ABISELECT(29984,16496), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(30352,16692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C8,    ABISELECT(29520,16240), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20176C7,    ABISELECT(29416,16184), //bcp->offset
    44, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20176C2,    ABISELECT(24432,13448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(24800,13644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(24432,13448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20176C2,    ABISELECT(30368,16700), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(30736,16896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(30368,16700), //bcp->offset
    61, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20176C13,    ABISELECT(24912,13716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20176C14,    ABISELECT(29240,16060), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20176C12,    ABISELECT(24912,13716), //bcp->offset
    31, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20176C15,    ABISELECT(30848,16968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C11,    ABISELECT(24432,13448), //bcp->offset
    15, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20176C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20176C6,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C17,    ABISELECT(31008,17052), //bcp->offset
    74, //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
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(480,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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20176C16[];
extern void _ZN8S20176C22v4Ev();
extern void _ZN9S20176C16D1Ev();
extern void _ZN9S20176C16D0Ev();
extern void _ZN8S20176C62v6Ev();
extern void _ZN9S20176C163v10Ev();
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n80_N9S20176C16D1Ev,_ZTv0_n40_N9S20176C16D1Ev)();
extern void ABISELECT(_ZThn24432_N9S20176C16D1Ev,_ZThn13448_N9S20176C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20176C16D0Ev,_ZTv0_n40_N9S20176C16D0Ev)();
extern void ABISELECT(_ZThn24432_N9S20176C16D0Ev,_ZThn13448_N9S20176C16D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
extern void ABISELECT(_ZTvn480_n80_N9S20176C16D1Ev,_ZTvn268_n40_N9S20176C16D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N9S20176C16D0Ev,_ZTvn268_n40_N9S20176C16D0Ev)();
extern void _ZN9S20176C122v8Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C16D1Ev,_ZTv0_n32_N9S20176C16D1Ev)();
extern void ABISELECT(_ZThn30368_N9S20176C16D1Ev,_ZThn16700_N9S20176C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C16D0Ev,_ZTv0_n32_N9S20176C16D0Ev)();
extern void ABISELECT(_ZThn30368_N9S20176C16D0Ev,_ZThn16700_N9S20176C16D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
extern void _ZN9S20176C172v9Ev();
static  VTBL_ENTRY vtc_S20176C16[] = {
  ABISELECT(31008,17052),
  ABISELECT(30848,16968),
  ABISELECT(30368,16700),
  ABISELECT(24432,13448),
  ABISELECT(30352,16692),
  ABISELECT(29984,16496),
  ABISELECT(29520,16240),
  ABISELECT(29416,16184),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20176C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C16D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  (VTBL_ENTRY)&_ZN9S20176C163v10Ev,
  ABISELECT(480,268),
  0,
  ABISELECT(-24432,-13448),
  0,
  ABISELECT(6416,3520),
  ABISELECT(5936,3252),
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  ABISELECT(-24432,-13448),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C16D1Ev,_ZTv0_n40_N9S20176C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C16D0Ev,_ZTv0_n40_N9S20176C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-24912,-13716),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20176C16D1Ev,_ZTvn268_n40_N9S20176C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20176C16D0Ev,_ZTvn268_n40_N9S20176C16D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
  ABISELECT(744,436),
  ABISELECT(-29240,-16060),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-29416,-16184),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-29520,-16240),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  0,
  ABISELECT(-29984,-16496),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  0,
  ABISELECT(-30368,-16700),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-30368,-16700),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C16D1Ev,_ZTv0_n32_N9S20176C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C16D0Ev,_ZTv0_n32_N9S20176C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  0,
  ABISELECT(-31008,-17052),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN9S20176C172v9Ev,
};
extern VTBL_ENTRY _ZTV9S20176C16[];
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A__9S20176C16[] = {
  ABISELECT(30352,16692),
  ABISELECT(29984,16496),
  ABISELECT(29520,16240),
  ABISELECT(29416,16184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__A__9S20176C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-29416,-16184),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__A__9S20176C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-29520,-16240),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__A__9S20176C16[] = {
  0,
  ABISELECT(-29984,-16496),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN9S20176C11D1Ev();
extern void _ZN9S20176C11D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C11__9S20176C16[] = {
  ABISELECT(6416,3520),
  ABISELECT(5936,3252),
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20176C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C11D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C69S20176C11__9S20176C16[] = {
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C69S20176C11__9S20176C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C69S20176C11__9S20176C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C69S20176C11__9S20176C16[] = {
  0,
  ABISELECT(-5552,-3048),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN9S20176C12D1Ev();
extern void _ZN9S20176C12D0Ev();
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C129S20176C11__9S20176C16[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN9S20176C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
extern void _ZN9S20176C13D1Ev();
extern void _ZN9S20176C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C139S20176C129S20176C11__9S20176C16[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN9S20176C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C139S20176C129S20176C11__9S20176C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C139S20176C129S20176C11__9S20176C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C139S20176C129S20176C11__9S20176C16[] = {
  0,
  ABISELECT(-5072,-2780),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev)();
extern void ABISELECT(_ZThn5456_N9S20176C13D1Ev,_ZThn2984_N9S20176C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev)();
extern void ABISELECT(_ZThn5456_N9S20176C13D0Ev,_ZThn2984_N9S20176C13D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C139S20176C129S20176C11__9S20176C16[] = {
  0,
  ABISELECT(-5456,-2984),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2984),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C129S20176C11__9S20176C16[] = {
  ABISELECT(744,436),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C149S20176C129S20176C11__9S20176C16[] = {
  0,
  ABISELECT(-744,-436),
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C129S20176C11__9S20176C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C129S20176C11__9S20176C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C129S20176C11__9S20176C16[] = {
  0,
  ABISELECT(-5072,-2780),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev)();
extern void ABISELECT(_ZThn5456_N9S20176C12D1Ev,_ZThn2984_N9S20176C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev)();
extern void ABISELECT(_ZThn5456_N9S20176C12D0Ev,_ZThn2984_N9S20176C12D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C129S20176C11__9S20176C16[] = {
  0,
  ABISELECT(-5456,-2984),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2984),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C14__9S20176C129S20176C11__9S20176C16[] = {
  ABISELECT(744,436),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C11__9S20176C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C11__9S20176C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C11__9S20176C16[] = {
  0,
  ABISELECT(-5552,-3048),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void ABISELECT(_ZThn480_N9S20176C11D1Ev,_ZThn268_N9S20176C11D1Ev)();
extern void ABISELECT(_ZThn480_N9S20176C11D0Ev,_ZThn268_N9S20176C11D0Ev)();
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C12__9S20176C11__9S20176C16[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20176C11D1Ev,_ZThn268_N9S20176C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20176C11D0Ev,_ZThn268_N9S20176C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C11D1Ev,_ZTv0_n32_N9S20176C11D1Ev)();
extern void ABISELECT(_ZThn5936_N9S20176C11D1Ev,_ZThn3252_N9S20176C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C11D0Ev,_ZTv0_n32_N9S20176C11D0Ev)();
extern void ABISELECT(_ZThn5936_N9S20176C11D0Ev,_ZThn3252_N9S20176C11D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A1__9S20176C11__9S20176C16[] = {
  0,
  ABISELECT(-5936,-3252),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5936,-3252),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C11D1Ev,_ZTv0_n32_N9S20176C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C11D0Ev,_ZTv0_n32_N9S20176C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C12__9S20176C11__9S20176C16[] = {
  ABISELECT(744,436),
  ABISELECT(-4808,-2612),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C7__9S20176C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C7__9S20176C16[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C16[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__9S20176C16[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A1__9S20176C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__A1__9S20176C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__A1__9S20176C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__A1__9S20176C16[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTT_ENTRY vtt_S20176C16[] = {
  {&(_ZTV9S20176C16[10]),  10,78},
  {&(_tg__ZTV8S20176C6__A__9S20176C16[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__A__9S20176C16[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__A__9S20176C16[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__A__9S20176C16[3]),  3,4},
  {&(_ZTV9S20176C16[27]),  27,78},
  {&(_ZTV9S20176C16[49]),  49,78},
  {&(_ZTV9S20176C16[55]),  55,78},
  {&(_ZTV9S20176C16[60]),  60,78},
  {&(_ZTV9S20176C16[38]),  38,78},
  {&(_ZTV9S20176C16[70]),  70,78},
  {&(_ZTV9S20176C16[44]),  44,78},
  {&(_ZTV9S20176C16[77]),  77,78},
  {&(_tg__ZTV9S20176C11__9S20176C16[8]),  8,12},
  {&(_tg__ZTV8S20176C69S20176C11__9S20176C16[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C69S20176C11__9S20176C16[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C69S20176C11__9S20176C16[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C69S20176C11__9S20176C16[3]),  3,4},
  {&(_tg__ZTV9S20176C129S20176C11__9S20176C16[7]),  7,10},
  {&(_tg__ZTV9S20176C139S20176C129S20176C11__9S20176C16[7]),  7,9},
  {&(_tg__ZTV8S20176C7__9S20176C139S20176C129S20176C11__9S20176C16[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C139S20176C129S20176C11__9S20176C16[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C139S20176C129S20176C11__9S20176C16[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C139S20176C129S20176C11__9S20176C16[9]),  9,13},
  {&(_tg__ZTV9S20176C149S20176C129S20176C11__9S20176C16[3]),  3,3},
  {&(_tg__ZTV8S20176C2__9S20176C149S20176C129S20176C11__9S20176C16[3]),  3,4},
  {&(_tg__ZTV8S20176C7__9S20176C129S20176C11__9S20176C16[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C129S20176C11__9S20176C16[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C129S20176C11__9S20176C16[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C129S20176C11__9S20176C16[9]),  9,13},
  {&(_tg__ZTV9S20176C14__9S20176C129S20176C11__9S20176C16[3]),  3,3},
  {&(_tg__ZTV8S20176C7__9S20176C11__9S20176C16[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C11__9S20176C16[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C11__9S20176C16[3]),  3,4},
  {&(_tg__ZTV9S20176C12__9S20176C11__9S20176C16[7]),  7,10},
  {&(_tg__ZTV8S20176C6__A1__9S20176C11__9S20176C16[9]),  9,13},
  {&(_tg__ZTV9S20176C149S20176C12__9S20176C11__9S20176C16[3]),  3,3},
  {&(_tg__ZTV8S20176C7__9S20176C16[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C7__9S20176C16[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C7__9S20176C16[3]),  3,4},
  {&(_tg__ZTV8S20176C8__9S20176C16[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__9S20176C16[3]),  3,4},
  {&(_tg__ZTV8S20176C6__A1__9S20176C16[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__A1__9S20176C16[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__A1__9S20176C16[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__A1__9S20176C16[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20176C16[];
extern  VTBL_ENTRY _ZTV9S20176C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C16[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C11D0Ev,_ZTv0_n32_N9S20176C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S20176C11D0Ev,_ZThn3252_N9S20176C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C11D1Ev,_ZTv0_n32_N9S20176C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S20176C11D1Ev,_ZThn3252_N9S20176C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20176C12D0Ev,_ZThn2984_N9S20176C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20176C12D1Ev,_ZThn2984_N9S20176C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20176C13D0Ev,_ZThn2984_N9S20176C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20176C13D1Ev,_ZThn2984_N9S20176C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C16D0Ev,_ZTv0_n32_N9S20176C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30368_N9S20176C16D0Ev,_ZThn16700_N9S20176C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C16D1Ev,_ZTv0_n32_N9S20176C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30368_N9S20176C16D1Ev,_ZThn16700_N9S20176C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C16D0Ev,_ZTv0_n40_N9S20176C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24432_N9S20176C16D0Ev,_ZThn13448_N9S20176C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C16D1Ev,_ZTv0_n40_N9S20176C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24432_N9S20176C16D1Ev,_ZThn13448_N9S20176C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20176C16 = {  "S20176C16", // class name
  bases_S20176C16, 21,
  &(vtc_S20176C16[0]), // expected_vtbl_contents
  &(vtt_S20176C16[0]), // expected_vtt_contents
  ABISELECT(31040,17068), // object size
  NSPAIRA(_ZTI9S20176C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20176C16),78, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C16),46, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C10  : virtual S20176C11 , S20176C16 , S20176C15 , S20176C24 , virtual S20176C12 {
  void *s20176c10f0;
  __tsi64 s20176c10f1;
  void *s20176c10f2[6];
  int s20176c10f3;
  char s20176c10f4;
  int s20176c10f5;
  ::S20176C15 s20176c10f6;
  short s20176c10f7;
  char s20176c10f8;
  __tsi64 s20176c10f9[5];
  int s20176c10f10;
  virtual  ~S20176C10(); // _ZN9S20176C10D2Ev
  virtual void  v13(); // _ZN9S20176C103v13Ev
  virtual void  v14(); // _ZN9S20176C103v14Ev
  virtual void  v15(); // _ZN9S20176C103v15Ev
  S20176C10(); // tgen
};
//SIG(-1 S20176C10) C1{ VBC2{ BC3{ VBC4{ VBC5{ BC6{ v4 Fi Fp FC7{ m Fp[2]}} VBC8{ v5 Fi[6] Fc:2 FD Fp[2] Fi FD FC9{} FC7 FC7[9] Fp FC6 FC6} VBC7 v6 Fp FL Fc[2] FC8 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC8 BC7 vd v7 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC10{ BC11{ VBC4 VBC3 vd Fl Fp FC5 Fp Fs FL Fi FL FC5[4] Fi} BC12{ VBC8 Fp Fs FL Fi:6 Fp[2]} vd v8 FL FD FC9 Fi[9] Fs Fc:5} VBC13{ m FL FC7[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} BC14{ VBC2 BC3 VBC15{ v9 Fl Fc Fs[2]} BC7 vd v10 FC16{ BC3 vd Fi FC9 Fp Fi Fc[8] Fs Fi} FD Fi FC17{ VBC18{ BC19{ VBC6 VBC7 BC5 BC8 vd v14 Fi:25 Fp Fi[3] FC7} vd Fp Fi Fp Fi[7] FC4} VBC19 vd v13 Fi[2] Fs[10] Fi FC9 Fi:32 Fi FC9 Fp Fi:2 Fi FD} Fc Fl FC9[8] Fi:18 Fi FC11 FC20{ BC19 VBC5 VBC21{ VBC22{ VBC8 VBC3 v11 v12 FC3[7] Fi Fs Fi FC5 FL[9]} vd Fc Fi[3]} vd v15 v16 FD[2] FC9 Fi:16 Fi:3} FC9} BC13 BC22 VBC10 vd v1 v2 v3 Fp FL Fp[6] Fi Fc Fi FC13 Fs Fc FL[5] Fi}


 S20176C10 ::~S20176C10(){ note_dtor("S20176C10", this);}
void  S20176C10 ::v13(){vfunc_called(this, "_ZN9S20176C103v13Ev");}
void  S20176C10 ::v14(){vfunc_called(this, "_ZN9S20176C103v14Ev");}
void  S20176C10 ::v15(){vfunc_called(this, "_ZN9S20176C103v15Ev");}
S20176C10 ::S20176C10(){ note_ctor("S20176C10", this);} // tgen

static void Test_S20176C10()
{
  extern Class_Descriptor cd_S20176C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2931,6453)];
    init_test(&cd_S20176C10, buf);
    S20176C10 *dp, &lv = *(dp=new (buf) S20176C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(46880,25808), "sizeof(S20176C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C10)");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*), ABISELECT(40896,22540), "S20176C10");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(41360,22796), "S20176C10");
    check_base_class_offset(lv, (S20176C2*)(S20176C14*)(S20176C12*)(S20176C11*), ABISELECT(41360,22796), "S20176C10");
    /*is_ambiguous_... S20176C24::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C24*), ABISELECT(41360,22796), "S20176C10");
    /*is_ambiguous_... S20176C10::S20176C12 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C14*)(S20176C12*), ABISELECT(41360,22796), "S20176C10");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(41728,22992), "S20176C10");
    check_base_class_offset(lv, (S20176C8*)(S20176C7*), ABISELECT(40896,22540), "S20176C10");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C6*)(S20176C11*), ABISELECT(40792,22484), "S20176C10");
    check_base_class_offset(lv, (S20176C7*)(S20176C13*)(S20176C12*)(S20176C11*), ABISELECT(40792,22484), "S20176C10");
    /*is_ambiguous_... S20176C10::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(40792,22484), "S20176C10");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C6*)(S20176C16*), ABISELECT(40792,22484), "S20176C10");
    /*is_ambiguous_... S20176C10::S20176C12 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C13*)(S20176C12*), ABISELECT(40792,22484), "S20176C10");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*)(S20176C11*), ABISELECT(35808,19748), "S20176C10");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*)(S20176C11*), ABISELECT(36176,19944), "S20176C10");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C6*)(S20176C11*), ABISELECT(35808,19748), "S20176C10");
    /*is_ambiguous_... S20176C10::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), ABISELECT(41744,23000), "S20176C10");
    /*is_ambiguous_... S20176C10::S20176C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(42112,23196), "S20176C10");
    check_base_class_offset(lv, (S20176C6*)(S20176C13*)(S20176C12*)(S20176C11*), ABISELECT(41744,23000), "S20176C10");
    check_base_class_offset(lv, (S20176C6*)(S20176C24*), ABISELECT(41744,23000), "S20176C10");
    /*is_ambiguous_... S20176C10::S20176C12 */ AMB_check_base_class_offset(lv, (S20176C6*)(S20176C13*)(S20176C12*), ABISELECT(41744,23000), "S20176C10");
    check_base_class_offset(lv, (S20176C13*)(S20176C12*)(S20176C11*), ABISELECT(36288,20016), "S20176C10");
    check_base_class_offset(lv, (S20176C14*)(S20176C12*)(S20176C11*), ABISELECT(40616,22360), "S20176C10");
    check_base_class_offset(lv, (S20176C12*)(S20176C11*), ABISELECT(36288,20016), "S20176C10");
    check_base_class_offset(lv, (S20176C15*)(S20176C11*), ABISELECT(42224,23268), "S20176C10");
    check_base_class_offset(lv, (S20176C11*), ABISELECT(35808,19748), "S20176C10");
    check_base_class_offset(lv, (S20176C11*)(S20176C16*), ABISELECT(35808,19748), "S20176C10");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*)(S20176C16*), 0, "S20176C10");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*)(S20176C16*), ABISELECT(368,196), "S20176C10");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C6*)(S20176C16*), 0, "S20176C10");
    check_base_class_offset(lv, (S20176C17*)(S20176C16*), ABISELECT(42384,23352), "S20176C10");
    /*is_ambiguous_... S20176C16::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C16*), ABISELECT(480,268), "S20176C10");
    check_base_class_offset(lv, (S20176C16*), 0, "S20176C10");
    /*is_ambiguous_... S20176C10::S20176C15 */ AMB_check_base_class_offset(lv, (S20176C15*), ABISELECT(24424,13448), "S20176C10");
    check_base_class_offset(lv, (S20176C24*), ABISELECT(24592,13532), "S20176C10");
    /*is_ambiguous_... S20176C10::S20176C12 */ AMB_check_base_class_offset(lv, (S20176C13*)(S20176C12*), ABISELECT(42416,23368), "S20176C10");
    /*is_ambiguous_... S20176C10::S20176C12 */ AMB_check_base_class_offset(lv, (S20176C14*)(S20176C12*), ABISELECT(46744,25712), "S20176C10");
    /*is_ambiguous_... S20176C10::S20176C12 */ AMB_check_base_class_offset(lv, (S20176C12*), ABISELECT(42416,23368), "S20176C10");
    check_field_offset(lv, s20176c10f0, ABISELECT(35512,19568), "S20176C10.s20176c10f0");
    check_field_offset(lv, s20176c10f1, ABISELECT(35520,19572), "S20176C10.s20176c10f1");
    check_field_offset(lv, s20176c10f2, ABISELECT(35528,19580), "S20176C10.s20176c10f2");
    check_field_offset(lv, s20176c10f3, ABISELECT(35576,19604), "S20176C10.s20176c10f3");
    check_field_offset(lv, s20176c10f4, ABISELECT(35580,19608), "S20176C10.s20176c10f4");
    check_field_offset(lv, s20176c10f5, ABISELECT(35584,19612), "S20176C10.s20176c10f5");
    check_field_offset(lv, s20176c10f6, ABISELECT(35592,19616), "S20176C10.s20176c10f6");
    check_field_offset(lv, s20176c10f7, ABISELECT(35752,19700), "S20176C10.s20176c10f7");
    check_field_offset(lv, s20176c10f8, ABISELECT(35754,19702), "S20176C10.s20176c10f8");
    check_field_offset(lv, s20176c10f9, ABISELECT(35760,19704), "S20176C10.s20176c10f9");
    check_field_offset(lv, s20176c10f10, ABISELECT(35800,19744), "S20176C10.s20176c10f10");
    test_class_info(&lv, &cd_S20176C10);
    dp->~S20176C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C10(Test_S20176C10, "S20176C10", ABISELECT(46880,25808));

#else // __cplusplus

extern void _ZN9S20176C10C1Ev();
extern void _ZN9S20176C10D2Ev();
Name_Map name_map_S20176C10[] = {
  NSPAIR(_ZN9S20176C10C1Ev),
  NSPAIR(_ZN9S20176C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C7;
extern VTBL_ENTRY _ZTI8S20176C7[];
extern  VTBL_ENTRY _ZTV8S20176C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C7[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C13;
extern VTBL_ENTRY _ZTI9S20176C13[];
extern  VTBL_ENTRY _ZTV9S20176C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C13[];
extern Class_Descriptor cd_S20176C14;
extern VTBL_ENTRY _ZTI9S20176C14[];
extern  VTBL_ENTRY _ZTV9S20176C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C14[];
extern Class_Descriptor cd_S20176C12;
extern VTBL_ENTRY _ZTI9S20176C12[];
extern  VTBL_ENTRY _ZTV9S20176C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C12[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
extern Class_Descriptor cd_S20176C11;
extern VTBL_ENTRY _ZTI9S20176C11[];
extern  VTBL_ENTRY _ZTV9S20176C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C11[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C17;
extern VTBL_ENTRY _ZTI9S20176C17[];
extern  VTBL_ENTRY _ZTV9S20176C17[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C16;
extern VTBL_ENTRY _ZTI9S20176C16[];
extern  VTBL_ENTRY _ZTV9S20176C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C16[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
extern Class_Descriptor cd_S20176C24;
extern VTBL_ENTRY _ZTI9S20176C24[];
extern  VTBL_ENTRY _ZTV9S20176C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C24[];
extern Class_Descriptor cd_S20176C13;
extern VTBL_ENTRY _ZTI9S20176C13[];
extern  VTBL_ENTRY _ZTV9S20176C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C13[];
extern Class_Descriptor cd_S20176C14;
extern VTBL_ENTRY _ZTI9S20176C14[];
extern  VTBL_ENTRY _ZTV9S20176C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C14[];
extern Class_Descriptor cd_S20176C12;
extern VTBL_ENTRY _ZTI9S20176C12[];
extern  VTBL_ENTRY _ZTV9S20176C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C12[];
static Base_Class bases_S20176C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C5,    ABISELECT(40896,22540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C2,    ABISELECT(41360,22796), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(41728,22992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C8,    ABISELECT(40896,22540), //bcp->offset
    64, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20176C7,    ABISELECT(40792,22484), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20176C2,    ABISELECT(35808,19748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(36176,19944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(35808,19748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20176C2,    ABISELECT(41744,23000), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(42112,23196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(41744,23000), //bcp->offset
    76, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20176C13,    ABISELECT(36288,20016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20176C14,    ABISELECT(40616,22360), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20176C12,    ABISELECT(36288,20016), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20176C15,    ABISELECT(42224,23268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C11,    ABISELECT(35808,19748), //bcp->offset
    30, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20176C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20176C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20176C17,    ABISELECT(42384,23352), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(480,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
    21, //immediately_derived
  0, 0},
  {&cd_S20176C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C15,    ABISELECT(24424,13448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20176C24,    ABISELECT(24592,13532), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C13,    ABISELECT(42416,23368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20176C14,    ABISELECT(46744,25712), //bcp->offset
    105, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20176C12,    ABISELECT(42416,23368), //bcp->offset
    93, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20176C10[];
extern void _ZN8S20176C22v4Ev();
extern void _ZN9S20176C10D1Ev();
extern void _ZN9S20176C10D0Ev();
extern void _ZN8S20176C62v6Ev();
extern void _ZN9S20176C163v10Ev();
extern void _ZN9S20176C103v13Ev();
extern void _ZN9S20176C103v14Ev();
extern void _ZN9S20176C103v15Ev();
extern void _ZN9S20176C243v11Ev();
extern void _ZN9S20176C243v12Ev();
extern void ABISELECT(_ZThn24592_N9S20176C10D1Ev,_ZThn13532_N9S20176C10D1Ev)();
extern void ABISELECT(_ZThn24592_N9S20176C10D0Ev,_ZThn13532_N9S20176C10D0Ev)();
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n80_N9S20176C10D1Ev,_ZTv0_n40_N9S20176C10D1Ev)();
extern void ABISELECT(_ZThn35808_N9S20176C10D1Ev,_ZThn19748_N9S20176C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20176C10D0Ev,_ZTv0_n40_N9S20176C10D0Ev)();
extern void ABISELECT(_ZThn35808_N9S20176C10D0Ev,_ZThn19748_N9S20176C10D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
extern void ABISELECT(_ZTvn480_n80_N9S20176C10D1Ev,_ZTvn268_n40_N9S20176C10D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N9S20176C10D0Ev,_ZTvn268_n40_N9S20176C10D0Ev)();
extern void _ZN9S20176C122v8Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C10D1Ev,_ZTv0_n32_N9S20176C10D1Ev)();
extern void ABISELECT(_ZThn41744_N9S20176C10D1Ev,_ZThn23000_N9S20176C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C10D0Ev,_ZTv0_n32_N9S20176C10D0Ev)();
extern void ABISELECT(_ZThn41744_N9S20176C10D0Ev,_ZThn23000_N9S20176C10D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
extern void _ZN9S20176C172v9Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C10D1Ev,_ZTv0_n32_N9S20176C10D1Ev)();
extern void ABISELECT(_ZThn42416_N9S20176C10D1Ev,_ZThn23368_N9S20176C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C10D0Ev,_ZTv0_n32_N9S20176C10D0Ev)();
extern void ABISELECT(_ZThn42416_N9S20176C10D0Ev,_ZThn23368_N9S20176C10D0Ev)() __attribute__((weak));
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY vtc_S20176C10[] = {
  ABISELECT(42416,23368),
  ABISELECT(42384,23352),
  ABISELECT(42224,23268),
  ABISELECT(41744,23000),
  ABISELECT(35808,19748),
  ABISELECT(41728,22992),
  ABISELECT(41360,22796),
  ABISELECT(40896,22540),
  ABISELECT(40792,22484),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20176C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C10D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  (VTBL_ENTRY)&_ZN9S20176C163v10Ev,
  (VTBL_ENTRY)&_ZN9S20176C103v13Ev,
  (VTBL_ENTRY)&_ZN9S20176C103v14Ev,
  (VTBL_ENTRY)&_ZN9S20176C103v15Ev,
  ABISELECT(17136,9460),
  ABISELECT(16304,9008),
  ABISELECT(16200,8952),
  ABISELECT(17152,9468),
  ABISELECT(16768,9264),
  ABISELECT(-24592,-13532),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN9S20176C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20176C243v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24592_N9S20176C10D1Ev,_ZThn13532_N9S20176C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24592_N9S20176C10D0Ev,_ZThn13532_N9S20176C10D0Ev),
  ABISELECT(480,268),
  0,
  ABISELECT(-35808,-19748),
  0,
  ABISELECT(6416,3520),
  ABISELECT(5936,3252),
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  ABISELECT(-35808,-19748),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C10D1Ev,_ZTv0_n40_N9S20176C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C10D0Ev,_ZTv0_n40_N9S20176C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-36288,-20016),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20176C10D1Ev,_ZTvn268_n40_N9S20176C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20176C10D0Ev,_ZTvn268_n40_N9S20176C10D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
  ABISELECT(744,436),
  ABISELECT(-40616,-22360),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-40792,-22484),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-40896,-22540),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  0,
  ABISELECT(-41360,-22796),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  0,
  ABISELECT(-41744,-23000),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-41744,-23000),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C10D1Ev,_ZTv0_n32_N9S20176C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C10D0Ev,_ZTv0_n32_N9S20176C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  0,
  ABISELECT(-42384,-23352),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN9S20176C172v9Ev,
  0,
  ABISELECT(-42416,-23368),
  ABISELECT(-672,-368),
  ABISELECT(-688,-376),
  ABISELECT(-1056,-572),
  ABISELECT(-1520,-828),
  ABISELECT(-1624,-884),
  ABISELECT(-42416,-23368),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C10D1Ev,_ZTv0_n32_N9S20176C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C10D0Ev,_ZTv0_n32_N9S20176C10D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
  ABISELECT(-5384,-2916),
  ABISELECT(-46744,-25712),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
};
extern VTBL_ENTRY _ZTV9S20176C10[];
extern void _ZN8S20176C22v4Ev();
extern void _ZN9S20176C16D1Ev();
extern void _ZN9S20176C16D0Ev();
extern void _ZN8S20176C62v6Ev();
extern void _ZN9S20176C163v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C16__9S20176C10[] = {
  ABISELECT(42384,23352),
  ABISELECT(42224,23268),
  ABISELECT(41744,23000),
  ABISELECT(35808,19748),
  ABISELECT(41728,22992),
  ABISELECT(41360,22796),
  ABISELECT(40896,22540),
  ABISELECT(40792,22484),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20176C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C16D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  (VTBL_ENTRY)&_ZN9S20176C163v10Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C69S20176C16__A2__9S20176C10[] = {
  ABISELECT(41728,22992),
  ABISELECT(41360,22796),
  ABISELECT(40896,22540),
  ABISELECT(40792,22484),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C69S20176C16__A2__9S20176C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-40792,-22484),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C69S20176C16__A2__9S20176C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-40896,-22540),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C69S20176C16__A2__9S20176C10[] = {
  0,
  ABISELECT(-41360,-22796),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n80_N9S20176C16D1Ev,_ZTv0_n40_N9S20176C16D1Ev)();
extern void ABISELECT(_ZThn35808_N9S20176C16D1Ev,_ZThn19748_N9S20176C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20176C16D0Ev,_ZTv0_n40_N9S20176C16D0Ev)();
extern void ABISELECT(_ZThn35808_N9S20176C16D0Ev,_ZThn19748_N9S20176C16D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C11__9S20176C16__9S20176C10[] = {
  ABISELECT(480,268),
  0,
  ABISELECT(-35808,-19748),
  0,
  ABISELECT(6416,3520),
  ABISELECT(5936,3252),
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  ABISELECT(-35808,-19748),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C16D1Ev,_ZTv0_n40_N9S20176C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C16D0Ev,_ZTv0_n40_N9S20176C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C16__9S20176C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-40792,-22484),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C16__9S20176C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-40896,-22540),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C16__9S20176C10[] = {
  0,
  ABISELECT(-41360,-22796),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void ABISELECT(_ZTvn480_n80_N9S20176C16D1Ev,_ZTvn268_n40_N9S20176C16D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N9S20176C16D0Ev,_ZTvn268_n40_N9S20176C16D0Ev)();
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C129S20176C11__9S20176C16__9S20176C10[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-36288,-20016),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20176C16D1Ev,_ZTvn268_n40_N9S20176C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20176C16D0Ev,_ZTvn268_n40_N9S20176C16D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C16D1Ev,_ZTv0_n32_N9S20176C16D1Ev)();
extern void ABISELECT(_ZThn41744_N9S20176C16D1Ev,_ZThn23000_N9S20176C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C16D0Ev,_ZTv0_n32_N9S20176C16D0Ev)();
extern void ABISELECT(_ZThn41744_N9S20176C16D0Ev,_ZThn23000_N9S20176C16D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A1__9S20176C16__9S20176C10[] = {
  0,
  ABISELECT(-41744,-23000),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-41744,-23000),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C16D1Ev,_ZTv0_n32_N9S20176C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C16D0Ev,_ZTv0_n32_N9S20176C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C129S20176C11__9S20176C16__9S20176C10[] = {
  ABISELECT(744,436),
  ABISELECT(-40616,-22360),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
};
extern void _ZN9S20176C172v9Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C17__9S20176C16__9S20176C10[] = {
  0,
  ABISELECT(-42384,-23352),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN9S20176C172v9Ev,
};
extern void _ZN9S20176C243v11Ev();
extern void _ZN9S20176C243v12Ev();
extern void _ZN9S20176C24D1Ev();
extern void _ZN9S20176C24D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C24__9S20176C10[] = {
  ABISELECT(17136,9460),
  ABISELECT(16304,9008),
  ABISELECT(16200,8952),
  ABISELECT(17152,9468),
  ABISELECT(16768,9264),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN9S20176C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20176C243v12Ev,
  (VTBL_ENTRY)&_ZN9S20176C24D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C24D0Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C24__9S20176C10[] = {
  0,
  ABISELECT(-16768,-9264),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev)();
extern void ABISELECT(_ZThn17152_N9S20176C24D1Ev,_ZThn9468_N9S20176C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev)();
extern void ABISELECT(_ZThn17152_N9S20176C24D0Ev,_ZThn9468_N9S20176C24D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C24__9S20176C10[] = {
  0,
  ABISELECT(-17152,-9468),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-17152,-9468),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C24__9S20176C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-16200,-8952),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C24__9S20176C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-16304,-9008),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN9S20176C11D1Ev();
extern void _ZN9S20176C11D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C11__9S20176C10[] = {
  ABISELECT(6416,3520),
  ABISELECT(5936,3252),
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20176C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C11D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C69S20176C11__9S20176C10[] = {
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C69S20176C11__9S20176C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C69S20176C11__9S20176C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C69S20176C11__9S20176C10[] = {
  0,
  ABISELECT(-5552,-3048),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN9S20176C12D1Ev();
extern void _ZN9S20176C12D0Ev();
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C129S20176C11__9S20176C10[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN9S20176C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
extern void _ZN9S20176C13D1Ev();
extern void _ZN9S20176C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C139S20176C129S20176C11__9S20176C10[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN9S20176C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C139S20176C129S20176C11__9S20176C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C139S20176C129S20176C11__9S20176C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C139S20176C129S20176C11__9S20176C10[] = {
  0,
  ABISELECT(-5072,-2780),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev)();
extern void ABISELECT(_ZThn5456_N9S20176C13D1Ev,_ZThn2984_N9S20176C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev)();
extern void ABISELECT(_ZThn5456_N9S20176C13D0Ev,_ZThn2984_N9S20176C13D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C139S20176C129S20176C11__9S20176C10[] = {
  0,
  ABISELECT(-5456,-2984),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2984),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C129S20176C11__9S20176C10[] = {
  ABISELECT(744,436),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C149S20176C129S20176C11__9S20176C10[] = {
  0,
  ABISELECT(-744,-436),
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C129S20176C11__9S20176C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C129S20176C11__9S20176C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C129S20176C11__9S20176C10[] = {
  0,
  ABISELECT(-5072,-2780),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev)();
extern void ABISELECT(_ZThn5456_N9S20176C12D1Ev,_ZThn2984_N9S20176C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev)();
extern void ABISELECT(_ZThn5456_N9S20176C12D0Ev,_ZThn2984_N9S20176C12D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C129S20176C11__9S20176C10[] = {
  0,
  ABISELECT(-5456,-2984),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2984),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C14__9S20176C129S20176C11__9S20176C10[] = {
  ABISELECT(744,436),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C11__9S20176C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C11__9S20176C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C11__9S20176C10[] = {
  0,
  ABISELECT(-5552,-3048),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void ABISELECT(_ZThn480_N9S20176C11D1Ev,_ZThn268_N9S20176C11D1Ev)();
extern void ABISELECT(_ZThn480_N9S20176C11D0Ev,_ZThn268_N9S20176C11D0Ev)();
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C12__9S20176C11__9S20176C10[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20176C11D1Ev,_ZThn268_N9S20176C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20176C11D0Ev,_ZThn268_N9S20176C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C11D1Ev,_ZTv0_n32_N9S20176C11D1Ev)();
extern void ABISELECT(_ZThn5936_N9S20176C11D1Ev,_ZThn3252_N9S20176C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C11D0Ev,_ZTv0_n32_N9S20176C11D0Ev)();
extern void ABISELECT(_ZThn5936_N9S20176C11D0Ev,_ZThn3252_N9S20176C11D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A1__9S20176C11__9S20176C10[] = {
  0,
  ABISELECT(-5936,-3252),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5936,-3252),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C11D1Ev,_ZTv0_n32_N9S20176C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C11D0Ev,_ZTv0_n32_N9S20176C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C12__9S20176C11__9S20176C10[] = {
  ABISELECT(744,436),
  ABISELECT(-4808,-2612),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C7__9S20176C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C7__9S20176C10[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C10[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__9S20176C10[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A1__9S20176C10[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__A1__9S20176C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__A1__9S20176C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__A1__9S20176C10[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN9S20176C12D1Ev();
extern void _ZN9S20176C12D0Ev();
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C12__A1__9S20176C10[] = {
  ABISELECT(-672,-368),
  ABISELECT(-688,-376),
  ABISELECT(-1056,-572),
  ABISELECT(-1520,-828),
  ABISELECT(-1624,-884),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN9S20176C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
extern void _ZN9S20176C13D1Ev();
extern void _ZN9S20176C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C139S20176C12__A1__9S20176C10[] = {
  ABISELECT(-672,-368),
  ABISELECT(-688,-376),
  ABISELECT(-1056,-572),
  ABISELECT(-1520,-828),
  ABISELECT(-1624,-884),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN9S20176C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C139S20176C12__A1__9S20176C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(1624,884),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C139S20176C12__A1__9S20176C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(1520,828),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C139S20176C12__A1__9S20176C10[] = {
  0,
  ABISELECT(1056,572),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev)();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C139S20176C12__A1__9S20176C10[] = {
  0,
  ABISELECT(672,368),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(672,368),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C12__A1__9S20176C10[] = {
  ABISELECT(-5384,-2916),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C149S20176C12__A1__9S20176C10[] = {
  0,
  ABISELECT(5384,2916),
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C12__A1__9S20176C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(1624,884),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C12__A1__9S20176C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(1520,828),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C12__A1__9S20176C10[] = {
  0,
  ABISELECT(1056,572),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev)();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C12__A1__9S20176C10[] = {
  0,
  ABISELECT(672,368),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(672,368),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C14__9S20176C12__A1__9S20176C10[] = {
  ABISELECT(-5384,-2916),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
};
static  VTT_ENTRY vtt_S20176C10[] = {
  {&(_ZTV9S20176C10[11]),  11,108},
  {&(_tg__ZTV9S20176C16__9S20176C10[10]),  10,15},
  {&(_tg__ZTV8S20176C69S20176C16__A2__9S20176C10[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C69S20176C16__A2__9S20176C10[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C69S20176C16__A2__9S20176C10[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C69S20176C16__A2__9S20176C10[3]),  3,4},
  {&(_tg__ZTV9S20176C11__9S20176C16__9S20176C10[12]),  12,16},
  {&(_tg__ZTV8S20176C7__9S20176C16__9S20176C10[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C16__9S20176C10[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C16__9S20176C10[3]),  3,4},
  {&(_tg__ZTV9S20176C129S20176C11__9S20176C16__9S20176C10[7]),  7,10},
  {&(_tg__ZTV8S20176C6__A1__9S20176C16__9S20176C10[9]),  9,13},
  {&(_tg__ZTV9S20176C149S20176C129S20176C11__9S20176C16__9S20176C10[3]),  3,3},
  {&(_tg__ZTV9S20176C17__9S20176C16__9S20176C10[3]),  3,4},
  {&(_tg__ZTV9S20176C24__9S20176C10[7]),  7,11},
  {&(_tg__ZTV8S20176C2__9S20176C24__9S20176C10[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C24__9S20176C10[9]),  9,13},
  {&(_tg__ZTV8S20176C7__9S20176C24__9S20176C10[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C24__9S20176C10[6]),  6,8},
  {&(_ZTV9S20176C10[42]),  42,108},
  {&(_ZTV9S20176C10[64]),  64,108},
  {&(_ZTV9S20176C10[70]),  70,108},
  {&(_ZTV9S20176C10[75]),  75,108},
  {&(_ZTV9S20176C10[53]),  53,108},
  {&(_ZTV9S20176C10[85]),  85,108},
  {&(_ZTV9S20176C10[59]),  59,108},
  {&(_ZTV9S20176C10[92]),  92,108},
  {&(_ZTV9S20176C10[26]),  26,108},
  {&(_ZTV9S20176C10[102]),  102,108},
  {&(_ZTV9S20176C10[108]),  108,108},
  {&(_tg__ZTV9S20176C11__9S20176C10[8]),  8,12},
  {&(_tg__ZTV8S20176C69S20176C11__9S20176C10[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C69S20176C11__9S20176C10[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C69S20176C11__9S20176C10[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C69S20176C11__9S20176C10[3]),  3,4},
  {&(_tg__ZTV9S20176C129S20176C11__9S20176C10[7]),  7,10},
  {&(_tg__ZTV9S20176C139S20176C129S20176C11__9S20176C10[7]),  7,9},
  {&(_tg__ZTV8S20176C7__9S20176C139S20176C129S20176C11__9S20176C10[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C139S20176C129S20176C11__9S20176C10[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C139S20176C129S20176C11__9S20176C10[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C139S20176C129S20176C11__9S20176C10[9]),  9,13},
  {&(_tg__ZTV9S20176C149S20176C129S20176C11__9S20176C10[3]),  3,3},
  {&(_tg__ZTV8S20176C2__9S20176C149S20176C129S20176C11__9S20176C10[3]),  3,4},
  {&(_tg__ZTV8S20176C7__9S20176C129S20176C11__9S20176C10[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C129S20176C11__9S20176C10[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C129S20176C11__9S20176C10[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C129S20176C11__9S20176C10[9]),  9,13},
  {&(_tg__ZTV9S20176C14__9S20176C129S20176C11__9S20176C10[3]),  3,3},
  {&(_tg__ZTV8S20176C7__9S20176C11__9S20176C10[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C11__9S20176C10[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C11__9S20176C10[3]),  3,4},
  {&(_tg__ZTV9S20176C12__9S20176C11__9S20176C10[7]),  7,10},
  {&(_tg__ZTV8S20176C6__A1__9S20176C11__9S20176C10[9]),  9,13},
  {&(_tg__ZTV9S20176C149S20176C12__9S20176C11__9S20176C10[3]),  3,3},
  {&(_tg__ZTV8S20176C7__9S20176C10[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C7__9S20176C10[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C7__9S20176C10[3]),  3,4},
  {&(_tg__ZTV8S20176C8__9S20176C10[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__9S20176C10[3]),  3,4},
  {&(_tg__ZTV8S20176C6__A1__9S20176C10[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__A1__9S20176C10[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__A1__9S20176C10[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__A1__9S20176C10[3]),  3,4},
  {&(_tg__ZTV9S20176C12__A1__9S20176C10[7]),  7,10},
  {&(_tg__ZTV9S20176C139S20176C12__A1__9S20176C10[7]),  7,9},
  {&(_tg__ZTV8S20176C7__9S20176C139S20176C12__A1__9S20176C10[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C139S20176C12__A1__9S20176C10[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C139S20176C12__A1__9S20176C10[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C139S20176C12__A1__9S20176C10[9]),  9,13},
  {&(_tg__ZTV9S20176C149S20176C12__A1__9S20176C10[3]),  3,3},
  {&(_tg__ZTV8S20176C2__9S20176C149S20176C12__A1__9S20176C10[3]),  3,4},
  {&(_tg__ZTV8S20176C7__9S20176C12__A1__9S20176C10[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C12__A1__9S20176C10[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C12__A1__9S20176C10[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C12__A1__9S20176C10[9]),  9,13},
  {&(_tg__ZTV9S20176C14__9S20176C12__A1__9S20176C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20176C10[];
extern  VTBL_ENTRY _ZTV9S20176C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C10[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C11D0Ev,_ZTv0_n32_N9S20176C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S20176C11D0Ev,_ZThn3252_N9S20176C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C11D1Ev,_ZTv0_n32_N9S20176C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S20176C11D1Ev,_ZThn3252_N9S20176C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20176C12D0Ev,_ZThn2984_N9S20176C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20176C12D1Ev,_ZThn2984_N9S20176C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20176C13D0Ev,_ZThn2984_N9S20176C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20176C13D1Ev,_ZThn2984_N9S20176C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17152_N9S20176C24D0Ev,_ZThn9468_N9S20176C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17152_N9S20176C24D1Ev,_ZThn9468_N9S20176C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C16D0Ev,_ZTv0_n32_N9S20176C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41744_N9S20176C16D0Ev,_ZThn23000_N9S20176C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C16D1Ev,_ZTv0_n32_N9S20176C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41744_N9S20176C16D1Ev,_ZThn23000_N9S20176C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C16D0Ev,_ZTv0_n40_N9S20176C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20176C16D0Ev,_ZThn19748_N9S20176C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C16D1Ev,_ZTv0_n40_N9S20176C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20176C16D1Ev,_ZThn19748_N9S20176C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C10D0Ev,_ZTv0_n32_N9S20176C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn42416_N9S20176C10D0Ev,_ZThn23368_N9S20176C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn41744_N9S20176C10D0Ev,_ZThn23000_N9S20176C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C10D1Ev,_ZTv0_n32_N9S20176C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn42416_N9S20176C10D1Ev,_ZThn23368_N9S20176C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn41744_N9S20176C10D1Ev,_ZThn23000_N9S20176C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C10D0Ev,_ZTv0_n40_N9S20176C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20176C10D0Ev,_ZThn19748_N9S20176C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C10D1Ev,_ZTv0_n40_N9S20176C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20176C10D1Ev,_ZThn19748_N9S20176C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20176C10 = {  "S20176C10", // class name
  bases_S20176C10, 27,
  &(vtc_S20176C10[0]), // expected_vtbl_contents
  &(vtt_S20176C10[0]), // expected_vtt_contents
  ABISELECT(46880,25808), // object size
  NSPAIRA(_ZTI9S20176C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20176C10),108, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20176C10),76, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20176C1  : virtual S20176C2 , S20176C6 , virtual S20176C9 , virtual S20176C10 {
  void *s20176c1f0;
  __tsi64 s20176c1f1;
  int s20176c1f2:27;
  __tsi64 s20176c1f3:11;
  ::S20176C12 s20176c1f4;
  ::S20176C16 s20176c1f5;
  __tsu64 s20176c1f6:1;
  __tsi64 s20176c1f7:9;
  int s20176c1f8[2];
  void *s20176c1f9;
  virtual void  v1(); // _ZN8S20176C12v1Ev
  virtual void  v2(); // _ZN8S20176C12v2Ev
  ~S20176C1(); // tgen
  S20176C1(); // tgen
};
//SIG(1 S20176C1) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} BC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} VBC9{ v7 Fp FC7 Fc FC3 FC3 FC3} VBC10{ VBC11{ BC6 BC12{ BC13{ VBC7 VBC6 vd Fl Fp FC8 Fp Fs FL Fi FL FC8[4] Fi} BC14{ VBC2 Fp Fs FL Fi:6 Fp[2]} vd v8 FL FD FC3 Fi[9] Fs Fc:5} VBC15{ m FL FC4[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} BC16{ VBC11 BC6 VBC17{ v9 Fl Fc Fs[2]} BC4 vd v10 FC18{ BC6 vd Fi FC3 Fp Fi Fc[8] Fs Fi} FD Fi FC19{ VBC20{ BC21{ VBC5 VBC4 BC8 BC2 vd v17 Fi:25 Fp Fi[3] FC4} vd Fp Fi Fp Fi[7] FC7} VBC21 vd v16 Fi[2] Fs[10] Fi FC3 Fi:32 Fi FC3 Fp Fi:2 Fi FD} Fc Fl FC3[8] Fi:18 Fi FC13 FC22{ BC21 VBC8 VBC23{ VBC24{ VBC2 VBC6 v11 v12 FC6[7] Fi Fs Fi FC8 FL[9]} vd Fc Fi[3]} vd v18 v19 FD[2] FC3 Fi:16 Fi:3} FC3} BC15 BC24 VBC12 vd v13 v14 v15 Fp FL Fp[6] Fi Fc Fi FC15 Fs Fc FL[5] Fi} v1 v2 Fp FL Fi:27 FL:11 FC12 FC16 FL:1 FL:9 Fi[2] Fp}


void  S20176C1 ::v1(){vfunc_called(this, "_ZN8S20176C12v1Ev");}
void  S20176C1 ::v2(){vfunc_called(this, "_ZN8S20176C12v2Ev");}
S20176C1 ::~S20176C1(){ note_dtor("S20176C1", this);} // tgen
S20176C1 ::S20176C1(){ note_ctor("S20176C1", this);} // tgen

static void Test_S20176C1()
{
  extern Class_Descriptor cd_S20176C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5334,11734)];
    init_test(&cd_S20176C1, buf);
    S20176C1 *dp, &lv = *(dp=new (buf) S20176C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(85328,46932), "sizeof(S20176C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20176C1)");
    /*is_ambiguous_... S20176C1::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*), ABISELECT(37472,20596), "S20176C1");
    check_base_class_offset(lv, (S20176C2*)(S20176C8*), ABISELECT(37472,20596), "S20176C1");
    check_base_class_offset(lv, (S20176C2*)(S20176C14*)(S20176C12*)(S20176C11*), ABISELECT(37472,20596), "S20176C1");
    /*is_ambiguous_... S20176C24::S20176C2 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C24*)(S20176C10*), ABISELECT(37472,20596), "S20176C1");
    /*is_ambiguous_... S20176C1::S20176C12 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C14*)(S20176C12*), ABISELECT(37472,20596), "S20176C1");
    check_base_class_offset(lv, (S20176C5*)(S20176C8*), ABISELECT(37936,20848), "S20176C1");
    check_base_class_offset(lv, (S281C37_nt*)(S20176C8*), ABISELECT(38392,21104), "S20176C1");
    check_base_class_offset(lv, (S20176C8*)(S20176C7*), ABISELECT(37936,20848), "S20176C1");
    /*is_ambiguous_... S20176C1::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(37840,20792), "S20176C1");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C6*)(S20176C11*), ABISELECT(37840,20792), "S20176C1");
    check_base_class_offset(lv, (S20176C7*)(S20176C13*)(S20176C12*)(S20176C11*), ABISELECT(37840,20792), "S20176C1");
    /*is_ambiguous_... S20176C1::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C6*), ABISELECT(37840,20792), "S20176C1");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C6*)(S20176C16*)(S20176C10*), ABISELECT(37840,20792), "S20176C1");
    /*is_ambiguous_... S20176C1::S20176C12 */ AMB_check_base_class_offset(lv, (S20176C7*)(S20176C13*)(S20176C12*), ABISELECT(37840,20792), "S20176C1");
    /*is_ambiguous_... S20176C1::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), 0, "S20176C1");
    /*is_ambiguous_... S20176C1::S20176C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(368,196), "S20176C1");
    /*is_ambiguous_... S20176C1::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C6*), 0, "S20176C1");
    check_base_class_offset(lv, (S20176C9*), ABISELECT(38416,21112), "S20176C1");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*)(S20176C11*), ABISELECT(75200,41388), "S20176C1");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*)(S20176C11*), ABISELECT(75568,41584), "S20176C1");
    /*is_ambiguous_... S20176C11::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C6*)(S20176C11*), ABISELECT(75200,41388), "S20176C1");
    /*is_ambiguous_... S20176C1::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*), ABISELECT(80192,44124), "S20176C1");
    /*is_ambiguous_... S20176C1::S20176C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*), ABISELECT(80560,44320), "S20176C1");
    check_base_class_offset(lv, (S20176C6*)(S20176C13*)(S20176C12*)(S20176C11*), ABISELECT(80192,44124), "S20176C1");
    check_base_class_offset(lv, (S20176C6*)(S20176C24*)(S20176C10*), ABISELECT(80192,44124), "S20176C1");
    /*is_ambiguous_... S20176C1::S20176C12 */ AMB_check_base_class_offset(lv, (S20176C6*)(S20176C13*)(S20176C12*), ABISELECT(80192,44124), "S20176C1");
    check_base_class_offset(lv, (S20176C13*)(S20176C12*)(S20176C11*), ABISELECT(75680,41656), "S20176C1");
    check_base_class_offset(lv, (S20176C14*)(S20176C12*)(S20176C11*), ABISELECT(80008,44000), "S20176C1");
    check_base_class_offset(lv, (S20176C12*)(S20176C11*), ABISELECT(75680,41656), "S20176C1");
    check_base_class_offset(lv, (S20176C15*)(S20176C11*), ABISELECT(80672,44392), "S20176C1");
    check_base_class_offset(lv, (S20176C11*)(S20176C10*), ABISELECT(75200,41388), "S20176C1");
    check_base_class_offset(lv, (S20176C11*)(S20176C16*)(S20176C10*), ABISELECT(75200,41388), "S20176C1");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C2*)(S20176C6*)(S20176C16*)(S20176C10*), ABISELECT(39392,21640), "S20176C1");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C6*)(S20176C16*)(S20176C10*), ABISELECT(39760,21836), "S20176C1");
    /*is_ambiguous_... S20176C16::S20176C6 */ AMB_check_base_class_offset(lv, (S20176C6*)(S20176C16*)(S20176C10*), ABISELECT(39392,21640), "S20176C1");
    check_base_class_offset(lv, (S20176C17*)(S20176C16*)(S20176C10*), ABISELECT(80832,44476), "S20176C1");
    /*is_ambiguous_... S20176C16::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20176C16*)(S20176C10*), ABISELECT(39872,21908), "S20176C1");
    check_base_class_offset(lv, (S20176C16*)(S20176C10*), ABISELECT(39392,21640), "S20176C1");
    /*is_ambiguous_... S20176C10::S20176C15 */ AMB_check_base_class_offset(lv, (S20176C15*)(S20176C10*), ABISELECT(63816,35088), "S20176C1");
    check_base_class_offset(lv, (S20176C24*)(S20176C10*), ABISELECT(63984,35172), "S20176C1");
    /*is_ambiguous_... S20176C1::S20176C12 */ AMB_check_base_class_offset(lv, (S20176C13*)(S20176C12*), ABISELECT(80864,44492), "S20176C1");
    /*is_ambiguous_... S20176C1::S20176C12 */ AMB_check_base_class_offset(lv, (S20176C14*)(S20176C12*), ABISELECT(85192,46836), "S20176C1");
    /*is_ambiguous_... S20176C10::S20176C12 */ AMB_check_base_class_offset(lv, (S20176C12*)(S20176C10*), ABISELECT(80864,44492), "S20176C1");
    check_base_class_offset(lv, (S20176C10*), ABISELECT(39392,21640), "S20176C1");
    check_field_offset(lv, s20176c1f0, ABISELECT(480,268), "S20176C1.s20176c1f0");
    check_field_offset(lv, s20176c1f1, ABISELECT(488,272), "S20176C1.s20176c1f1");
    set_bf_and_test(lv, s20176c1f2, ABISELECT(496,280), 0, 27, 1, "S20176C1");
    set_bf_and_test(lv, s20176c1f2, ABISELECT(496,280), 0, 27, hide_sll(1LL<<26), "S20176C1");
    set_bf_and_test(lv, s20176c1f3, ABISELECT(499,283), 3, 11, 1, "S20176C1");
    set_bf_and_test(lv, s20176c1f3, ABISELECT(499,283), 3, 11, hide_sll(1LL<<10), "S20176C1");
    check_field_offset(lv, s20176c1f4, ABISELECT(512,288), "S20176C1.s20176c1f4");
    check_field_offset(lv, s20176c1f5, ABISELECT(6400,3512), "S20176C1.s20176c1f5");
    set_bf_and_test(lv, s20176c1f6, ABISELECT(37440,20580), 0, 1, 1, "S20176C1");
    set_bf_and_test(lv, s20176c1f7, ABISELECT(37440,20580), 1, 9, 1, "S20176C1");
    set_bf_and_test(lv, s20176c1f7, ABISELECT(37440,20580), 1, 9, hide_sll(1LL<<8), "S20176C1");
    check_field_offset(lv, s20176c1f8, ABISELECT(37444,20584), "S20176C1.s20176c1f8");
    check_field_offset(lv, s20176c1f9, ABISELECT(37456,20592), "S20176C1.s20176c1f9");
    test_class_info(&lv, &cd_S20176C1);
    dp->~S20176C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20176C1(Test_S20176C1, "S20176C1", ABISELECT(85328,46932));

#else // __cplusplus

extern void _ZN8S20176C1C1Ev();
extern void _ZN8S20176C1D1Ev();
Name_Map name_map_S20176C1[] = {
  NSPAIR(_ZN8S20176C1C1Ev),
  NSPAIR(_ZN8S20176C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S20176C5;
extern VTBL_ENTRY _ZTI8S20176C5[];
extern  VTBL_ENTRY _ZTV8S20176C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C8;
extern VTBL_ENTRY _ZTI8S20176C8[];
extern  VTBL_ENTRY _ZTV8S20176C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C8[];
extern Class_Descriptor cd_S20176C7;
extern VTBL_ENTRY _ZTI8S20176C7[];
extern  VTBL_ENTRY _ZTV8S20176C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C7[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C9;
extern VTBL_ENTRY _ZTI8S20176C9[];
extern  VTBL_ENTRY _ZTV8S20176C9[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C13;
extern VTBL_ENTRY _ZTI9S20176C13[];
extern  VTBL_ENTRY _ZTV9S20176C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C13[];
extern Class_Descriptor cd_S20176C14;
extern VTBL_ENTRY _ZTI9S20176C14[];
extern  VTBL_ENTRY _ZTV9S20176C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C14[];
extern Class_Descriptor cd_S20176C12;
extern VTBL_ENTRY _ZTI9S20176C12[];
extern  VTBL_ENTRY _ZTV9S20176C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C12[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
extern Class_Descriptor cd_S20176C11;
extern VTBL_ENTRY _ZTI9S20176C11[];
extern  VTBL_ENTRY _ZTV9S20176C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C11[];
extern Class_Descriptor cd_S20176C2;
extern VTBL_ENTRY _ZTI8S20176C2[];
extern  VTBL_ENTRY _ZTV8S20176C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C6;
extern VTBL_ENTRY _ZTI8S20176C6[];
extern  VTBL_ENTRY _ZTV8S20176C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C6[];
extern Class_Descriptor cd_S20176C17;
extern VTBL_ENTRY _ZTI9S20176C17[];
extern  VTBL_ENTRY _ZTV9S20176C17[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20176C16;
extern VTBL_ENTRY _ZTI9S20176C16[];
extern  VTBL_ENTRY _ZTV9S20176C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C16[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
extern Class_Descriptor cd_S20176C24;
extern VTBL_ENTRY _ZTI9S20176C24[];
extern  VTBL_ENTRY _ZTV9S20176C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C24[];
extern Class_Descriptor cd_S20176C13;
extern VTBL_ENTRY _ZTI9S20176C13[];
extern  VTBL_ENTRY _ZTV9S20176C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C13[];
extern Class_Descriptor cd_S20176C14;
extern VTBL_ENTRY _ZTI9S20176C14[];
extern  VTBL_ENTRY _ZTV9S20176C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C14[];
extern Class_Descriptor cd_S20176C12;
extern VTBL_ENTRY _ZTI9S20176C12[];
extern  VTBL_ENTRY _ZTV9S20176C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C12[];
extern Class_Descriptor cd_S20176C10;
extern VTBL_ENTRY _ZTI9S20176C10[];
extern  VTBL_ENTRY _ZTV9S20176C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20176C10[];
static Base_Class bases_S20176C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C2,    ABISELECT(37472,20596), //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_S20176C5,    ABISELECT(37936,20848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(38392,21104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C8,    ABISELECT(37936,20848), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20176C7,    ABISELECT(37840,20792), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20176C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    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
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C9,    ABISELECT(38416,21112), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20176C2,    ABISELECT(75200,41388), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(75568,41584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(75200,41388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20176C2,    ABISELECT(80192,44124), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(80560,44320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(80192,44124), //bcp->offset
    108, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20176C13,    ABISELECT(75680,41656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20176C14,    ABISELECT(80008,44000), //bcp->offset
    105, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20176C12,    ABISELECT(75680,41656), //bcp->offset
    95, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20176C15,    ABISELECT(80672,44392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C11,    ABISELECT(75200,41388), //bcp->offset
    79, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20176C2,    ABISELECT(39392,21640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(39760,21836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20176C6,    ABISELECT(39392,21640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20176C17,    ABISELECT(80832,44476), //bcp->offset
    121, //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
    14, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(39872,21908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20176C16,    ABISELECT(39392,21640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20176C15,    ABISELECT(63816,35088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20176C24,    ABISELECT(63984,35172), //bcp->offset
    68, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20176C13,    ABISELECT(80864,44492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20176C14,    ABISELECT(85192,46836), //bcp->offset
    137, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20176C12,    ABISELECT(80864,44492), //bcp->offset
    125, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S20176C10,    ABISELECT(39392,21640), //bcp->offset
    40, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20176C1[];
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C1D1Ev();
extern void _ZN8S20176C1D0Ev();
extern void _ZN8S20176C62v6Ev();
extern void _ZN8S20176C12v1Ev();
extern void _ZN8S20176C12v2Ev();
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
extern void _ZN8S20176C92v7Ev();
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n104_N8S20176C1D1Ev,_ZTv0_n52_N8S20176C1D1Ev)();
extern void ABISELECT(_ZThn39392_N8S20176C1D1Ev,_ZThn21640_N8S20176C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S20176C1D0Ev,_ZTv0_n52_N8S20176C1D0Ev)();
extern void ABISELECT(_ZThn39392_N8S20176C1D0Ev,_ZThn21640_N8S20176C1D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
extern void _ZN9S20176C163v10Ev();
extern void _ZN9S20176C103v13Ev();
extern void _ZN9S20176C103v14Ev();
extern void _ZN9S20176C103v15Ev();
extern void _ZN9S20176C243v11Ev();
extern void _ZN9S20176C243v12Ev();
extern void ABISELECT(_ZTvn24592_n104_N8S20176C1D1Ev,_ZTvn13532_n52_N8S20176C1D1Ev)();
extern void ABISELECT(_ZTvn24592_n104_N8S20176C1D0Ev,_ZTvn13532_n52_N8S20176C1D0Ev)();
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n80_N8S20176C1D1Ev,_ZTv0_n40_N8S20176C1D1Ev)();
extern void ABISELECT(_ZThn75200_N8S20176C1D1Ev,_ZThn41388_N8S20176C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20176C1D0Ev,_ZTv0_n40_N8S20176C1D0Ev)();
extern void ABISELECT(_ZThn75200_N8S20176C1D0Ev,_ZThn41388_N8S20176C1D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
extern void ABISELECT(_ZTvn480_n80_N8S20176C1D1Ev,_ZTvn268_n40_N8S20176C1D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N8S20176C1D0Ev,_ZTvn268_n40_N8S20176C1D0Ev)();
extern void _ZN9S20176C122v8Ev();
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S20176C1D1Ev,_ZTv0_n32_N8S20176C1D1Ev)();
extern void ABISELECT(_ZThn80192_N8S20176C1D1Ev,_ZThn44124_N8S20176C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20176C1D0Ev,_ZTv0_n32_N8S20176C1D0Ev)();
extern void ABISELECT(_ZThn80192_N8S20176C1D0Ev,_ZThn44124_N8S20176C1D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
extern void _ZN9S20176C172v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S20176C1D1Ev,_ZTv0_n32_N8S20176C1D1Ev)();
extern void ABISELECT(_ZThn80864_N8S20176C1D1Ev,_ZThn44492_N8S20176C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20176C1D0Ev,_ZTv0_n32_N8S20176C1D0Ev)();
extern void ABISELECT(_ZThn80864_N8S20176C1D0Ev,_ZThn44492_N8S20176C1D0Ev)() __attribute__((weak));
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY vtc_S20176C1[] = {
  ABISELECT(80864,44492),
  ABISELECT(80832,44476),
  ABISELECT(80672,44392),
  ABISELECT(80192,44124),
  ABISELECT(75200,41388),
  ABISELECT(39392,21640),
  ABISELECT(38416,21112),
  ABISELECT(38392,21104),
  ABISELECT(37472,20596),
  ABISELECT(37936,20848),
  ABISELECT(37840,20792),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20176C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20176C12v2Ev,
  0,
  ABISELECT(-37472,-20596),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(-37840,-20792),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-37936,-20848),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
  0,
  ABISELECT(-38416,-21112),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  (VTBL_ENTRY)&_ZN8S20176C92v7Ev,
  ABISELECT(24592,13532),
  ABISELECT(24592,13532),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-39392,-21640),
  0,
  ABISELECT(41472,22852),
  ABISELECT(41440,22836),
  ABISELECT(41280,22752),
  ABISELECT(40800,22484),
  ABISELECT(35808,19748),
  ABISELECT(-1000,-536),
  ABISELECT(-1920,-1044),
  ABISELECT(-1456,-792),
  ABISELECT(-1552,-848),
  ABISELECT(-39392,-21640),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20176C1D1Ev,_ZTv0_n52_N8S20176C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20176C1D0Ev,_ZTv0_n52_N8S20176C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  (VTBL_ENTRY)&_ZN9S20176C163v10Ev,
  (VTBL_ENTRY)&_ZN9S20176C103v13Ev,
  (VTBL_ENTRY)&_ZN9S20176C103v14Ev,
  (VTBL_ENTRY)&_ZN9S20176C103v15Ev,
  ABISELECT(-25592,-14068),
  ABISELECT(-26048,-14324),
  ABISELECT(-26144,-14380),
  ABISELECT(16208,8952),
  ABISELECT(-26512,-14576),
  ABISELECT(-63984,-35172),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  (VTBL_ENTRY)&_ZN9S20176C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20176C243v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn24592_n104_N8S20176C1D1Ev,_ZTvn13532_n52_N8S20176C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24592_n104_N8S20176C1D0Ev,_ZTvn13532_n52_N8S20176C1D0Ev),
  ABISELECT(480,268),
  0,
  ABISELECT(-75200,-41388),
  0,
  ABISELECT(5472,3004),
  ABISELECT(4992,2736),
  ABISELECT(-36808,-20284),
  ABISELECT(-37728,-20792),
  ABISELECT(-37264,-20540),
  ABISELECT(-37360,-20596),
  ABISELECT(-75200,-41388),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20176C1D1Ev,_ZTv0_n40_N8S20176C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20176C1D0Ev,_ZTv0_n40_N8S20176C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  ABISELECT(4512,2468),
  ABISELECT(-37288,-20552),
  ABISELECT(-38208,-21060),
  ABISELECT(-37744,-20808),
  ABISELECT(-37840,-20864),
  ABISELECT(-75680,-41656),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N8S20176C1D1Ev,_ZTvn268_n40_N8S20176C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N8S20176C1D0Ev,_ZTvn268_n40_N8S20176C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
  ABISELECT(-42536,-23404),
  ABISELECT(-80008,-44000),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  0,
  ABISELECT(-80192,-44124),
  0,
  ABISELECT(-41800,-23020),
  ABISELECT(-42720,-23528),
  ABISELECT(-42256,-23276),
  ABISELECT(-42352,-23332),
  ABISELECT(-80192,-44124),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20176C1D1Ev,_ZTv0_n32_N8S20176C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20176C1D0Ev,_ZTv0_n32_N8S20176C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  0,
  ABISELECT(-80832,-44476),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  (VTBL_ENTRY)&_ZN9S20176C172v9Ev,
  0,
  ABISELECT(-80864,-44492),
  ABISELECT(-672,-368),
  ABISELECT(-42472,-23388),
  ABISELECT(-43392,-23896),
  ABISELECT(-42928,-23644),
  ABISELECT(-43024,-23700),
  ABISELECT(-80864,-44492),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20176C1D1Ev,_ZTv0_n32_N8S20176C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20176C1D0Ev,_ZTv0_n32_N8S20176C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
  ABISELECT(-47720,-26240),
  ABISELECT(-85192,-46836),
  (VTBL_ENTRY)&(_ZTI8S20176C1[0]),
};
extern VTBL_ENTRY _ZTV8S20176C1[];
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A__8S20176C1[] = {
  ABISELECT(38392,21104),
  ABISELECT(37472,20596),
  ABISELECT(37936,20848),
  ABISELECT(37840,20792),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__A__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(-37840,-20792),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__A__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-37936,-20848),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__A__8S20176C1[] = {
  0,
  ABISELECT(-37472,-20596),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C7__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C7__8S20176C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20176C7[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C1[] = {
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C8__8S20176C1[] = {
  0,
  ABISELECT(464,252),
  (VTBL_ENTRY)&(_ZTI8S20176C8[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN9S20176C10D1Ev();
extern void _ZN9S20176C10D0Ev();
extern void _ZN8S20176C62v6Ev();
extern void _ZN9S20176C163v10Ev();
extern void _ZN9S20176C103v13Ev();
extern void _ZN9S20176C103v14Ev();
extern void _ZN9S20176C103v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C10__8S20176C1[] = {
  ABISELECT(41472,22852),
  ABISELECT(41440,22836),
  ABISELECT(41280,22752),
  ABISELECT(40800,22484),
  ABISELECT(35808,19748),
  ABISELECT(-1000,-536),
  ABISELECT(-1920,-1044),
  ABISELECT(-1456,-792),
  ABISELECT(-1552,-848),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20176C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C10D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  (VTBL_ENTRY)&_ZN9S20176C163v10Ev,
  (VTBL_ENTRY)&_ZN9S20176C103v13Ev,
  (VTBL_ENTRY)&_ZN9S20176C103v14Ev,
  (VTBL_ENTRY)&_ZN9S20176C103v15Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN9S20176C16D1Ev();
extern void _ZN9S20176C16D0Ev();
extern void _ZN8S20176C62v6Ev();
extern void _ZN9S20176C163v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C169S20176C10__8S20176C1[] = {
  ABISELECT(41440,22836),
  ABISELECT(41280,22752),
  ABISELECT(40800,22484),
  ABISELECT(35808,19748),
  ABISELECT(-1000,-536),
  ABISELECT(-1920,-1044),
  ABISELECT(-1456,-792),
  ABISELECT(-1552,-848),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20176C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C16D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
  (VTBL_ENTRY)&_ZN9S20176C163v10Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C69S20176C169S20176C10__A3__8S20176C1[] = {
  ABISELECT(-1000,-536),
  ABISELECT(-1920,-1044),
  ABISELECT(-1456,-792),
  ABISELECT(-1552,-848),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C69S20176C169S20176C10__A3__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(1552,848),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C69S20176C169S20176C10__A3__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(1456,792),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C69S20176C169S20176C10__A3__8S20176C1[] = {
  0,
  ABISELECT(1920,1044),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n80_N9S20176C16D1Ev,_ZTv0_n40_N9S20176C16D1Ev)();
extern void ABISELECT(_ZThn35808_N9S20176C16D1Ev,_ZThn19748_N9S20176C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20176C16D0Ev,_ZTv0_n40_N9S20176C16D0Ev)();
extern void ABISELECT(_ZThn35808_N9S20176C16D0Ev,_ZThn19748_N9S20176C16D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C11__9S20176C169S20176C10__8S20176C1[] = {
  ABISELECT(480,268),
  0,
  ABISELECT(-35808,-19748),
  0,
  ABISELECT(5472,3004),
  ABISELECT(4992,2736),
  ABISELECT(-36808,-20284),
  ABISELECT(-37728,-20792),
  ABISELECT(-37264,-20540),
  ABISELECT(-37360,-20596),
  ABISELECT(-35808,-19748),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C16D1Ev,_ZTv0_n40_N9S20176C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C16D0Ev,_ZTv0_n40_N9S20176C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C169S20176C10__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(1552,848),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C169S20176C10__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(1456,792),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C169S20176C10__8S20176C1[] = {
  0,
  ABISELECT(1920,1044),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void ABISELECT(_ZTvn480_n80_N9S20176C16D1Ev,_ZTvn268_n40_N9S20176C16D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N9S20176C16D0Ev,_ZTvn268_n40_N9S20176C16D0Ev)();
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C129S20176C11__9S20176C169S20176C10__8S20176C1[] = {
  ABISELECT(4512,2468),
  ABISELECT(-37288,-20552),
  ABISELECT(-38208,-21060),
  ABISELECT(-37744,-20808),
  ABISELECT(-37840,-20864),
  ABISELECT(-36288,-20016),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20176C16D1Ev,_ZTvn268_n40_N9S20176C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20176C16D0Ev,_ZTvn268_n40_N9S20176C16D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C16D1Ev,_ZTv0_n32_N9S20176C16D1Ev)();
extern void ABISELECT(_ZThn40800_N9S20176C16D1Ev,_ZThn22484_N9S20176C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C16D0Ev,_ZTv0_n32_N9S20176C16D0Ev)();
extern void ABISELECT(_ZThn40800_N9S20176C16D0Ev,_ZThn22484_N9S20176C16D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A1__9S20176C169S20176C10__8S20176C1[] = {
  0,
  ABISELECT(-40800,-22484),
  0,
  ABISELECT(-41800,-23020),
  ABISELECT(-42720,-23528),
  ABISELECT(-42256,-23276),
  ABISELECT(-42352,-23332),
  ABISELECT(-40800,-22484),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C16D1Ev,_ZTv0_n32_N9S20176C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C16D0Ev,_ZTv0_n32_N9S20176C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C129S20176C11__9S20176C169S20176C10__8S20176C1[] = {
  ABISELECT(-42536,-23404),
  ABISELECT(-40616,-22360),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
};
extern void _ZN9S20176C172v9Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C17__9S20176C169S20176C10__8S20176C1[] = {
  0,
  ABISELECT(-41440,-22836),
  (VTBL_ENTRY)&(_ZTI9S20176C16[0]),
  (VTBL_ENTRY)&_ZN9S20176C172v9Ev,
};
extern void _ZN9S20176C243v11Ev();
extern void _ZN9S20176C243v12Ev();
extern void _ZN9S20176C24D1Ev();
extern void _ZN9S20176C24D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C249S20176C10__8S20176C1[] = {
  ABISELECT(-25592,-14068),
  ABISELECT(-26048,-14324),
  ABISELECT(-26144,-14380),
  ABISELECT(16208,8952),
  ABISELECT(-26512,-14576),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN9S20176C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20176C243v12Ev,
  (VTBL_ENTRY)&_ZN9S20176C24D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C24D0Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C249S20176C10__8S20176C1[] = {
  0,
  ABISELECT(26512,14576),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev)();
extern void ABISELECT(_ZThn16208_N9S20176C24D1Ev,_ZThn8952_N9S20176C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev)();
extern void ABISELECT(_ZThn16208_N9S20176C24D0Ev,_ZThn8952_N9S20176C24D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C249S20176C10__8S20176C1[] = {
  0,
  ABISELECT(-16208,-8952),
  0,
  ABISELECT(-41800,-23020),
  ABISELECT(-42720,-23528),
  ABISELECT(-42256,-23276),
  ABISELECT(-42352,-23332),
  ABISELECT(-16208,-8952),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C249S20176C10__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(26144,14380),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C249S20176C10__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(26048,14324),
  (VTBL_ENTRY)&(_ZTI9S20176C24[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n80_N9S20176C10D1Ev,_ZTv0_n40_N9S20176C10D1Ev)();
extern void ABISELECT(_ZThn35808_N9S20176C10D1Ev,_ZThn19748_N9S20176C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20176C10D0Ev,_ZTv0_n40_N9S20176C10D0Ev)();
extern void ABISELECT(_ZThn35808_N9S20176C10D0Ev,_ZThn19748_N9S20176C10D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C11__9S20176C10__8S20176C1[] = {
  ABISELECT(480,268),
  0,
  ABISELECT(-35808,-19748),
  0,
  ABISELECT(5472,3004),
  ABISELECT(4992,2736),
  ABISELECT(-36808,-20284),
  ABISELECT(-37728,-20792),
  ABISELECT(-37264,-20540),
  ABISELECT(-37360,-20596),
  ABISELECT(-35808,-19748),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C10D1Ev,_ZTv0_n40_N9S20176C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20176C10D0Ev,_ZTv0_n40_N9S20176C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C10__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(1552,848),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C10__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(1456,792),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C10__8S20176C1[] = {
  0,
  ABISELECT(1920,1044),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void ABISELECT(_ZTvn480_n80_N9S20176C10D1Ev,_ZTvn268_n40_N9S20176C10D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N9S20176C10D0Ev,_ZTvn268_n40_N9S20176C10D0Ev)();
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C129S20176C11__9S20176C10__8S20176C1[] = {
  ABISELECT(4512,2468),
  ABISELECT(-37288,-20552),
  ABISELECT(-38208,-21060),
  ABISELECT(-37744,-20808),
  ABISELECT(-37840,-20864),
  ABISELECT(-36288,-20016),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20176C10D1Ev,_ZTvn268_n40_N9S20176C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20176C10D0Ev,_ZTvn268_n40_N9S20176C10D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C10D1Ev,_ZTv0_n32_N9S20176C10D1Ev)();
extern void ABISELECT(_ZThn40800_N9S20176C10D1Ev,_ZThn22484_N9S20176C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C10D0Ev,_ZTv0_n32_N9S20176C10D0Ev)();
extern void ABISELECT(_ZThn40800_N9S20176C10D0Ev,_ZThn22484_N9S20176C10D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A1__9S20176C10__8S20176C1[] = {
  0,
  ABISELECT(-40800,-22484),
  0,
  ABISELECT(-41800,-23020),
  ABISELECT(-42720,-23528),
  ABISELECT(-42256,-23276),
  ABISELECT(-42352,-23332),
  ABISELECT(-40800,-22484),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C10D1Ev,_ZTv0_n32_N9S20176C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C10D0Ev,_ZTv0_n32_N9S20176C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C129S20176C11__9S20176C10__8S20176C1[] = {
  ABISELECT(-42536,-23404),
  ABISELECT(-40616,-22360),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
};
extern void _ZN9S20176C172v9Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C17__9S20176C10__8S20176C1[] = {
  0,
  ABISELECT(-41440,-22836),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN9S20176C172v9Ev,
};
extern void _ZN9S20176C243v11Ev();
extern void _ZN9S20176C243v12Ev();
extern void ABISELECT(_ZThn24592_N9S20176C10D1Ev,_ZThn13532_N9S20176C10D1Ev)();
extern void ABISELECT(_ZThn24592_N9S20176C10D0Ev,_ZThn13532_N9S20176C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20176C24__9S20176C10__8S20176C1[] = {
  ABISELECT(-25592,-14068),
  ABISELECT(-26048,-14324),
  ABISELECT(-26144,-14380),
  ABISELECT(16208,8952),
  ABISELECT(-26512,-14576),
  ABISELECT(-24592,-13532),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&_ZN9S20176C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20176C243v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24592_N9S20176C10D1Ev,_ZThn13532_N9S20176C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24592_N9S20176C10D0Ev,_ZThn13532_N9S20176C10D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S20176C10D1Ev,_ZTv0_n32_N9S20176C10D1Ev)();
extern void ABISELECT(_ZThn41472_N9S20176C10D1Ev,_ZThn22852_N9S20176C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C10D0Ev,_ZTv0_n32_N9S20176C10D0Ev)();
extern void ABISELECT(_ZThn41472_N9S20176C10D0Ev,_ZThn22852_N9S20176C10D0Ev)() __attribute__((weak));
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C12__A1__9S20176C10__8S20176C1[] = {
  0,
  ABISELECT(-41472,-22852),
  ABISELECT(-672,-368),
  ABISELECT(-42472,-23388),
  ABISELECT(-43392,-23896),
  ABISELECT(-42928,-23644),
  ABISELECT(-43024,-23700),
  ABISELECT(-41472,-22852),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C10D1Ev,_ZTv0_n32_N9S20176C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C10D0Ev,_ZTv0_n32_N9S20176C10D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C12__A1__9S20176C10__8S20176C1[] = {
  ABISELECT(-47720,-26240),
  ABISELECT(-45800,-25196),
  (VTBL_ENTRY)&(_ZTI9S20176C10[0]),
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN9S20176C11D1Ev();
extern void _ZN9S20176C11D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C11__8S20176C1[] = {
  ABISELECT(5472,3004),
  ABISELECT(4992,2736),
  ABISELECT(-36808,-20284),
  ABISELECT(-37728,-20792),
  ABISELECT(-37264,-20540),
  ABISELECT(-37360,-20596),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20176C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C11D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C69S20176C11__A1__8S20176C1[] = {
  ABISELECT(-36808,-20284),
  ABISELECT(-37728,-20792),
  ABISELECT(-37264,-20540),
  ABISELECT(-37360,-20596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C69S20176C11__A1__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(37360,20596),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C69S20176C11__A1__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(37264,20540),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C69S20176C11__A1__8S20176C1[] = {
  0,
  ABISELECT(37728,20792),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN9S20176C12D1Ev();
extern void _ZN9S20176C12D0Ev();
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C129S20176C11__8S20176C1[] = {
  ABISELECT(4512,2468),
  ABISELECT(-37288,-20552),
  ABISELECT(-38208,-21060),
  ABISELECT(-37744,-20808),
  ABISELECT(-37840,-20864),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN9S20176C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
extern void _ZN9S20176C13D1Ev();
extern void _ZN9S20176C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C139S20176C129S20176C11__8S20176C1[] = {
  ABISELECT(4512,2468),
  ABISELECT(-37288,-20552),
  ABISELECT(-38208,-21060),
  ABISELECT(-37744,-20808),
  ABISELECT(-37840,-20864),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN9S20176C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C139S20176C129S20176C11__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(37840,20864),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C139S20176C129S20176C11__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(37744,20808),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C139S20176C129S20176C11__8S20176C1[] = {
  0,
  ABISELECT(38208,21060),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev)();
extern void ABISELECT(_ZThn4512_N9S20176C13D1Ev,_ZThn2468_N9S20176C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev)();
extern void ABISELECT(_ZThn4512_N9S20176C13D0Ev,_ZThn2468_N9S20176C13D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C139S20176C129S20176C11__8S20176C1[] = {
  0,
  ABISELECT(-4512,-2468),
  0,
  ABISELECT(-41800,-23020),
  ABISELECT(-42720,-23528),
  ABISELECT(-42256,-23276),
  ABISELECT(-42352,-23332),
  ABISELECT(-4512,-2468),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C129S20176C11__8S20176C1[] = {
  ABISELECT(-42536,-23404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C149S20176C129S20176C11__8S20176C1[] = {
  0,
  ABISELECT(42536,23404),
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C129S20176C11__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(37840,20864),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C129S20176C11__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(37744,20808),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C129S20176C11__8S20176C1[] = {
  0,
  ABISELECT(38208,21060),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev)();
extern void ABISELECT(_ZThn4512_N9S20176C12D1Ev,_ZThn2468_N9S20176C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev)();
extern void ABISELECT(_ZThn4512_N9S20176C12D0Ev,_ZThn2468_N9S20176C12D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C129S20176C11__8S20176C1[] = {
  0,
  ABISELECT(-4512,-2468),
  0,
  ABISELECT(-41800,-23020),
  ABISELECT(-42720,-23528),
  ABISELECT(-42256,-23276),
  ABISELECT(-42352,-23332),
  ABISELECT(-4512,-2468),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C14__9S20176C129S20176C11__8S20176C1[] = {
  ABISELECT(-42536,-23404),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C11__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(37360,20596),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C11__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(37264,20540),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C11__8S20176C1[] = {
  0,
  ABISELECT(37728,20792),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void ABISELECT(_ZThn480_N9S20176C11D1Ev,_ZThn268_N9S20176C11D1Ev)();
extern void ABISELECT(_ZThn480_N9S20176C11D0Ev,_ZThn268_N9S20176C11D0Ev)();
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C12__9S20176C11__8S20176C1[] = {
  ABISELECT(4512,2468),
  ABISELECT(-37288,-20552),
  ABISELECT(-38208,-21060),
  ABISELECT(-37744,-20808),
  ABISELECT(-37840,-20864),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20176C11D1Ev,_ZThn268_N9S20176C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20176C11D0Ev,_ZThn268_N9S20176C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C11D1Ev,_ZTv0_n32_N9S20176C11D1Ev)();
extern void ABISELECT(_ZThn4992_N9S20176C11D1Ev,_ZThn2736_N9S20176C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20176C11D0Ev,_ZTv0_n32_N9S20176C11D0Ev)();
extern void ABISELECT(_ZThn4992_N9S20176C11D0Ev,_ZThn2736_N9S20176C11D0Ev)() __attribute__((weak));
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A1__9S20176C11__8S20176C1[] = {
  0,
  ABISELECT(-4992,-2736),
  0,
  ABISELECT(-41800,-23020),
  ABISELECT(-42720,-23528),
  ABISELECT(-42256,-23276),
  ABISELECT(-42352,-23332),
  ABISELECT(-4992,-2736),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C11D1Ev,_ZTv0_n32_N9S20176C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C11D0Ev,_ZTv0_n32_N9S20176C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C12__9S20176C11__8S20176C1[] = {
  ABISELECT(-42536,-23404),
  ABISELECT(-4808,-2612),
  (VTBL_ENTRY)&(_ZTI9S20176C11[0]),
};
extern void _ZN8S20176C22v4Ev();
extern void _ZN8S20176C6D1Ev();
extern void _ZN8S20176C6D0Ev();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__A2__8S20176C1[] = {
  ABISELECT(-41800,-23020),
  ABISELECT(-42720,-23528),
  ABISELECT(-42256,-23276),
  ABISELECT(-42352,-23332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20176C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__8S20176C6__A2__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(42352,23332),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__8S20176C6__A2__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(42256,23276),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__8S20176C6__A2__8S20176C1[] = {
  0,
  ABISELECT(42720,23528),
  (VTBL_ENTRY)&(_ZTI8S20176C6[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN9S20176C12D1Ev();
extern void _ZN9S20176C12D0Ev();
extern void _ZN9S20176C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C12__A1__8S20176C1[] = {
  ABISELECT(-672,-368),
  ABISELECT(-42472,-23388),
  ABISELECT(-43392,-23896),
  ABISELECT(-42928,-23644),
  ABISELECT(-43024,-23700),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN9S20176C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20176C122v8Ev,
};
extern void _ZN9S20176C13D1Ev();
extern void _ZN9S20176C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20176C139S20176C12__A1__8S20176C1[] = {
  ABISELECT(-672,-368),
  ABISELECT(-42472,-23388),
  ABISELECT(-43392,-23896),
  ABISELECT(-42928,-23644),
  ABISELECT(-43024,-23700),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN9S20176C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20176C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C139S20176C12__A1__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(43024,23700),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C139S20176C12__A1__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(42928,23644),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C139S20176C12__A1__8S20176C1[] = {
  0,
  ABISELECT(43392,23896),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev)();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C139S20176C12__A1__8S20176C1[] = {
  0,
  ABISELECT(672,368),
  0,
  ABISELECT(-41800,-23020),
  ABISELECT(-42720,-23528),
  ABISELECT(-42256,-23276),
  ABISELECT(-42352,-23332),
  ABISELECT(672,368),
  (VTBL_ENTRY)&(_ZTI9S20176C13[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C149S20176C12__A1__8S20176C1[] = {
  ABISELECT(-47720,-26240),
  0,
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C149S20176C12__A1__8S20176C1[] = {
  0,
  ABISELECT(47720,26240),
  (VTBL_ENTRY)&(_ZTI9S20176C14[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20176C7__9S20176C12__A1__8S20176C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(43024,23700),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
};
extern void _ZN8S20176C52v3Ev();
extern void _ZN8S20176C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C8__9S20176C12__A1__8S20176C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(42928,23644),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20176C82v5Ev,
};
extern void _ZN8S20176C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C2__9S20176C12__A1__8S20176C1[] = {
  0,
  ABISELECT(43392,23896),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
};
extern void _ZN8S20176C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev)();
extern void _ZN8S20176C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20176C6__9S20176C12__A1__8S20176C1[] = {
  0,
  ABISELECT(672,368),
  0,
  ABISELECT(-41800,-23020),
  ABISELECT(-42720,-23528),
  ABISELECT(-42256,-23276),
  ABISELECT(-42352,-23332),
  ABISELECT(672,368),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
  (VTBL_ENTRY)&_ZN8S20176C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20176C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20176C14__9S20176C12__A1__8S20176C1[] = {
  ABISELECT(-47720,-26240),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S20176C12[0]),
};
static  VTT_ENTRY vtt_S20176C1[] = {
  {&(_ZTV8S20176C1[13]),  13,140},
  {&(_tg__ZTV8S20176C6__A__8S20176C1[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__A__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__A__8S20176C1[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__A__8S20176C1[3]),  3,4},
  {&(_ZTV8S20176C1[22]),  22,140},
  {&(_ZTV8S20176C1[28]),  28,140},
  {&(_ZTV8S20176C1[34]),  34,140},
  {&(_ZTV8S20176C1[39]),  39,140},
  {&(_ZTV8S20176C1[60]),  60,140},
  {&(_ZTV8S20176C1[91]),  91,140},
  {&(_ZTV8S20176C1[102]),  102,140},
  {&(_ZTV8S20176C1[117]),  117,140},
  {&(_ZTV8S20176C1[108]),  108,140},
  {&(_ZTV8S20176C1[124]),  124,140},
  {&(_ZTV8S20176C1[75]),  75,140},
  {&(_ZTV8S20176C1[134]),  134,140},
  {&(_ZTV8S20176C1[140]),  140,140},
  {&(_tg__ZTV8S20176C7__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C7__8S20176C1[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C7__8S20176C1[3]),  3,4},
  {&(_tg__ZTV8S20176C8__8S20176C1[4]),  4,6},
  {&(_tg__ZTV8S20176C2__8S20176C8__8S20176C1[3]),  3,4},
  {&(_tg__ZTV9S20176C10__8S20176C1[11]),  11,19},
  {&(_tg__ZTV9S20176C169S20176C10__8S20176C1[10]),  10,15},
  {&(_tg__ZTV8S20176C69S20176C169S20176C10__A3__8S20176C1[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C69S20176C169S20176C10__A3__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C69S20176C169S20176C10__A3__8S20176C1[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C69S20176C169S20176C10__A3__8S20176C1[3]),  3,4},
  {&(_tg__ZTV9S20176C11__9S20176C169S20176C10__8S20176C1[12]),  12,16},
  {&(_tg__ZTV8S20176C7__9S20176C169S20176C10__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C169S20176C10__8S20176C1[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C169S20176C10__8S20176C1[3]),  3,4},
  {&(_tg__ZTV9S20176C129S20176C11__9S20176C169S20176C10__8S20176C1[7]),  7,10},
  {&(_tg__ZTV8S20176C6__A1__9S20176C169S20176C10__8S20176C1[9]),  9,13},
  {&(_tg__ZTV9S20176C149S20176C129S20176C11__9S20176C169S20176C10__8S20176C1[3]),  3,3},
  {&(_tg__ZTV9S20176C17__9S20176C169S20176C10__8S20176C1[3]),  3,4},
  {&(_tg__ZTV9S20176C249S20176C10__8S20176C1[7]),  7,11},
  {&(_tg__ZTV8S20176C2__9S20176C249S20176C10__8S20176C1[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C249S20176C10__8S20176C1[9]),  9,13},
  {&(_tg__ZTV8S20176C7__9S20176C249S20176C10__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C249S20176C10__8S20176C1[6]),  6,8},
  {&(_tg__ZTV9S20176C11__9S20176C10__8S20176C1[12]),  12,16},
  {&(_tg__ZTV8S20176C7__9S20176C10__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C10__8S20176C1[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C10__8S20176C1[3]),  3,4},
  {&(_tg__ZTV9S20176C129S20176C11__9S20176C10__8S20176C1[7]),  7,10},
  {&(_tg__ZTV8S20176C6__A1__9S20176C10__8S20176C1[9]),  9,13},
  {&(_tg__ZTV9S20176C149S20176C129S20176C11__9S20176C10__8S20176C1[3]),  3,3},
  {&(_tg__ZTV9S20176C17__9S20176C10__8S20176C1[3]),  3,4},
  {&(_tg__ZTV9S20176C24__9S20176C10__8S20176C1[7]),  7,11},
  {&(_tg__ZTV9S20176C12__A1__9S20176C10__8S20176C1[9]),  9,12},
  {&(_tg__ZTV9S20176C149S20176C12__A1__9S20176C10__8S20176C1[3]),  3,3},
  {&(_tg__ZTV9S20176C11__8S20176C1[8]),  8,12},
  {&(_tg__ZTV8S20176C69S20176C11__A1__8S20176C1[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C69S20176C11__A1__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C69S20176C11__A1__8S20176C1[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C69S20176C11__A1__8S20176C1[3]),  3,4},
  {&(_tg__ZTV9S20176C129S20176C11__8S20176C1[7]),  7,10},
  {&(_tg__ZTV9S20176C139S20176C129S20176C11__8S20176C1[7]),  7,9},
  {&(_tg__ZTV8S20176C7__9S20176C139S20176C129S20176C11__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C139S20176C129S20176C11__8S20176C1[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C139S20176C129S20176C11__8S20176C1[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C139S20176C129S20176C11__8S20176C1[9]),  9,13},
  {&(_tg__ZTV9S20176C149S20176C129S20176C11__8S20176C1[3]),  3,3},
  {&(_tg__ZTV8S20176C2__9S20176C149S20176C129S20176C11__8S20176C1[3]),  3,4},
  {&(_tg__ZTV8S20176C7__9S20176C129S20176C11__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C129S20176C11__8S20176C1[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C129S20176C11__8S20176C1[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C129S20176C11__8S20176C1[9]),  9,13},
  {&(_tg__ZTV9S20176C14__9S20176C129S20176C11__8S20176C1[3]),  3,3},
  {&(_tg__ZTV8S20176C7__9S20176C11__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C11__8S20176C1[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C11__8S20176C1[3]),  3,4},
  {&(_tg__ZTV9S20176C12__9S20176C11__8S20176C1[7]),  7,10},
  {&(_tg__ZTV8S20176C6__A1__9S20176C11__8S20176C1[9]),  9,13},
  {&(_tg__ZTV9S20176C149S20176C12__9S20176C11__8S20176C1[3]),  3,3},
  {&(_tg__ZTV8S20176C6__A2__8S20176C1[6]),  6,10},
  {&(_tg__ZTV8S20176C7__8S20176C6__A2__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__8S20176C6__A2__8S20176C1[6]),  6,8},
  {&(_tg__ZTV8S20176C2__8S20176C6__A2__8S20176C1[3]),  3,4},
  {&(_tg__ZTV9S20176C12__A1__8S20176C1[7]),  7,10},
  {&(_tg__ZTV9S20176C139S20176C12__A1__8S20176C1[7]),  7,9},
  {&(_tg__ZTV8S20176C7__9S20176C139S20176C12__A1__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C139S20176C12__A1__8S20176C1[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C139S20176C12__A1__8S20176C1[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C139S20176C12__A1__8S20176C1[9]),  9,13},
  {&(_tg__ZTV9S20176C149S20176C12__A1__8S20176C1[3]),  3,3},
  {&(_tg__ZTV8S20176C2__9S20176C149S20176C12__A1__8S20176C1[3]),  3,4},
  {&(_tg__ZTV8S20176C7__9S20176C12__A1__8S20176C1[5]),  5,5},
  {&(_tg__ZTV8S20176C8__9S20176C12__A1__8S20176C1[6]),  6,8},
  {&(_tg__ZTV8S20176C2__9S20176C12__A1__8S20176C1[3]),  3,4},
  {&(_tg__ZTV8S20176C6__9S20176C12__A1__8S20176C1[9]),  9,13},
  {&(_tg__ZTV9S20176C14__9S20176C12__A1__8S20176C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20176C1[];
extern  VTBL_ENTRY _ZTV8S20176C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20176C1[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C11D0Ev,_ZTv0_n32_N9S20176C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4992_N9S20176C11D0Ev,_ZThn2736_N9S20176C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C11D1Ev,_ZTv0_n32_N9S20176C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4992_N9S20176C11D1Ev,_ZThn2736_N9S20176C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C12D0Ev,_ZTv0_n32_N9S20176C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4512_N9S20176C12D0Ev,_ZThn2468_N9S20176C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C12D1Ev,_ZTv0_n32_N9S20176C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4512_N9S20176C12D1Ev,_ZThn2468_N9S20176C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C13D0Ev,_ZTv0_n32_N9S20176C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4512_N9S20176C13D0Ev,_ZThn2468_N9S20176C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C13D1Ev,_ZTv0_n32_N9S20176C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4512_N9S20176C13D1Ev,_ZThn2468_N9S20176C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C10D0Ev,_ZTv0_n32_N9S20176C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41472_N9S20176C10D0Ev,_ZThn22852_N9S20176C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40800_N9S20176C10D0Ev,_ZThn22484_N9S20176C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C10D1Ev,_ZTv0_n32_N9S20176C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41472_N9S20176C10D1Ev,_ZThn22852_N9S20176C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40800_N9S20176C10D1Ev,_ZThn22484_N9S20176C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C10D0Ev,_ZTv0_n40_N9S20176C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20176C10D0Ev,_ZThn19748_N9S20176C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C10D1Ev,_ZTv0_n40_N9S20176C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20176C10D1Ev,_ZThn19748_N9S20176C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C24D0Ev,_ZTv0_n32_N9S20176C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16208_N9S20176C24D0Ev,_ZThn8952_N9S20176C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C24D1Ev,_ZTv0_n32_N9S20176C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16208_N9S20176C24D1Ev,_ZThn8952_N9S20176C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C16D0Ev,_ZTv0_n32_N9S20176C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40800_N9S20176C16D0Ev,_ZThn22484_N9S20176C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20176C16D1Ev,_ZTv0_n32_N9S20176C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40800_N9S20176C16D1Ev,_ZThn22484_N9S20176C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C16D0Ev,_ZTv0_n40_N9S20176C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20176C16D0Ev,_ZThn19748_N9S20176C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20176C16D1Ev,_ZTv0_n40_N9S20176C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20176C16D1Ev,_ZThn19748_N9S20176C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20176C1D0Ev,_ZTv0_n32_N8S20176C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80864_N8S20176C1D0Ev,_ZThn44492_N8S20176C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80192_N8S20176C1D0Ev,_ZThn44124_N8S20176C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20176C1D1Ev,_ZTv0_n32_N8S20176C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80864_N8S20176C1D1Ev,_ZThn44492_N8S20176C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80192_N8S20176C1D1Ev,_ZThn44124_N8S20176C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20176C1D0Ev,_ZTv0_n40_N8S20176C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn75200_N8S20176C1D0Ev,_ZThn41388_N8S20176C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20176C1D1Ev,_ZTv0_n40_N8S20176C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn75200_N8S20176C1D1Ev,_ZThn41388_N8S20176C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20176C1D0Ev,_ZTv0_n52_N8S20176C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39392_N8S20176C1D0Ev,_ZThn21640_N8S20176C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20176C1D1Ev,_ZTv0_n52_N8S20176C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39392_N8S20176C1D1Ev,_ZThn21640_N8S20176C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20176C1 = {  "S20176C1", // class name
  bases_S20176C1, 32,
  &(vtc_S20176C1[0]), // expected_vtbl_contents
  &(vtt_S20176C1[0]), // expected_vtt_contents
  ABISELECT(85328,46932), // object size
  NSPAIRA(_ZTI8S20176C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20176C1),140, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20176C1),94, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C5  {
  int s20177c5f0;
  void *s20177c5f1;
  ::S281C37_nt s20177c5f2;
  virtual void  v3(); // _ZN8S20177C52v3Ev
  ~S20177C5(); // tgen
  S20177C5(); // tgen
};
//SIG(-1 S20177C5) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S20177C5()
{
  extern Class_Descriptor cd_S20177C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20177C5, buf);
    S20177C5 *dp, &lv = *(dp=new (buf) S20177C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20177C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20177C5)");
    check_field_offset(lv, s20177c5f0, ABISELECT(8,4), "S20177C5.s20177c5f0");
    check_field_offset(lv, s20177c5f1, ABISELECT(16,8), "S20177C5.s20177c5f1");
    check_field_offset(lv, s20177c5f2, ABISELECT(24,12), "S20177C5.s20177c5f2");
    test_class_info(&lv, &cd_S20177C5);
    dp->~S20177C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C5(Test_S20177C5, "S20177C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20177C5C1Ev();
extern void _ZN8S20177C5D1Ev();
Name_Map name_map_S20177C5[] = {
  NSPAIR(_ZN8S20177C5C1Ev),
  NSPAIR(_ZN8S20177C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20177C5[];
extern void _ZN8S20177C52v3Ev();
static  VTBL_ENTRY vtc_S20177C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C5[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
};
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
Class_Descriptor cd_S20177C5 = {  "S20177C5", // class name
  0,0,//no base classes
  &(vtc_S20177C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20177C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20177C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C2  {
  int s20177c2f0[6];
  char s20177c2f1:2;
  long double s20177c2f2;
  void *s20177c2f3[2];
  int s20177c2f4;
  long double s20177c2f5;
  ::S20176C3_nt s20177c2f6;
  ::S281C37_nt s20177c2f7;
  ::S281C37_nt s20177c2f8[9];
  void *s20177c2f9;
  ::S20177C5 s20177c2f10;
  ::S20177C5 s20177c2f11;
  virtual void  v4(); // _ZN8S20177C22v4Ev
  ~S20177C2(); // tgen
  S20177C2(); // tgen
};
//SIG(-1 S20177C2) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


void  S20177C2 ::v4(){vfunc_called(this, "_ZN8S20177C22v4Ev");}
S20177C2 ::~S20177C2(){ note_dtor("S20177C2", this);} // tgen
S20177C2 ::S20177C2(){ note_ctor("S20177C2", this);} // tgen

static void Test_S20177C2()
{
  extern Class_Descriptor cd_S20177C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S20177C2, buf);
    S20177C2 *dp, &lv = *(dp=new (buf) S20177C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S20177C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C2)");
    check_field_offset(lv, s20177c2f0, ABISELECT(8,4), "S20177C2.s20177c2f0");
    set_bf_and_test(lv, s20177c2f1, ABISELECT(32,28), 0, 2, 1, "S20177C2");
    set_bf_and_test(lv, s20177c2f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S20177C2");
    check_field_offset(lv, s20177c2f2, ABISELECT(48,32), "S20177C2.s20177c2f2");
    check_field_offset(lv, s20177c2f3, ABISELECT(64,44), "S20177C2.s20177c2f3");
    check_field_offset(lv, s20177c2f4, ABISELECT(80,52), "S20177C2.s20177c2f4");
    check_field_offset(lv, s20177c2f5, ABISELECT(96,56), "S20177C2.s20177c2f5");
    check_field_offset(lv, s20177c2f6, ABISELECT(112,68), "S20177C2.s20177c2f6");
    check_field_offset(lv, s20177c2f7, ABISELECT(120,72), "S20177C2.s20177c2f7");
    check_field_offset(lv, s20177c2f8, ABISELECT(136,80), "S20177C2.s20177c2f8");
    check_field_offset(lv, s20177c2f9, ABISELECT(280,152), "S20177C2.s20177c2f9");
    check_field_offset(lv, s20177c2f10, ABISELECT(288,156), "S20177C2.s20177c2f10");
    check_field_offset(lv, s20177c2f11, ABISELECT(328,176), "S20177C2.s20177c2f11");
    test_class_info(&lv, &cd_S20177C2);
    dp->~S20177C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C2(Test_S20177C2, "S20177C2", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN8S20177C2C1Ev();
extern void _ZN8S20177C2D1Ev();
Name_Map name_map_S20177C2[] = {
  NSPAIR(_ZN8S20177C2C1Ev),
  NSPAIR(_ZN8S20177C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20177C2[];
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY vtc_S20177C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C2[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
Class_Descriptor cd_S20177C2 = {  "S20177C2", // class name
  0,0,//no base classes
  &(vtc_S20177C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI8S20177C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20177C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C8  : S20177C5 , virtual S20177C2 , virtual S281C37_nt {
  void *s20177c8f0;
  __tsi64 s20177c8f1;
  char s20177c8f2[2];
  ::S20177C2 s20177c8f3;
  short s20177c8f4[7];
  int s20177c8f5;
  char s20177c8f6;
  int s20177c8f7:20;
  virtual void  v5(); // _ZN8S20177C82v5Ev
  ~S20177C8(); // tgen
  S20177C8(); // tgen
};
//SIG(-1 S20177C8) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


void  S20177C8 ::v5(){vfunc_called(this, "_ZN8S20177C82v5Ev");}
S20177C8 ::~S20177C8(){ note_dtor("S20177C8", this);} // tgen
S20177C8 ::S20177C8(){ note_ctor("S20177C8", this);} // tgen

static void Test_S20177C8()
{
  extern Class_Descriptor cd_S20177C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S20177C8, buf);
    S20177C8 *dp, &lv = *(dp=new (buf) S20177C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S20177C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C8)");
    check_base_class_offset(lv, (S20177C5*), 0, "S20177C8");
    check_base_class_offset(lv, (S20177C2*), ABISELECT(464,256), "S20177C8");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S20177C8");
    check_field_offset(lv, s20177c8f0, ABISELECT(40,20), "S20177C8.s20177c8f0");
    check_field_offset(lv, s20177c8f1, ABISELECT(48,24), "S20177C8.s20177c8f1");
    check_field_offset(lv, s20177c8f2, ABISELECT(56,32), "S20177C8.s20177c8f2");
    check_field_offset(lv, s20177c8f3, ABISELECT(64,36), "S20177C8.s20177c8f3");
    check_field_offset(lv, s20177c8f4, ABISELECT(432,232), "S20177C8.s20177c8f4");
    check_field_offset(lv, s20177c8f5, ABISELECT(448,248), "S20177C8.s20177c8f5");
    check_field_offset(lv, s20177c8f6, ABISELECT(452,252), "S20177C8.s20177c8f6");
    set_bf_and_test(lv, s20177c8f7, ABISELECT(453,253), 0, 20, 1, "S20177C8");
    set_bf_and_test(lv, s20177c8f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S20177C8");
    test_class_info(&lv, &cd_S20177C8);
    dp->~S20177C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C8(Test_S20177C8, "S20177C8", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN8S20177C8C1Ev();
extern void _ZN8S20177C8D1Ev();
Name_Map name_map_S20177C8[] = {
  NSPAIR(_ZN8S20177C8C1Ev),
  NSPAIR(_ZN8S20177C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S20177C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20177C2,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20177C8[];
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY vtc_S20177C8[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern VTBL_ENTRY _ZTV8S20177C8[];
static  VTT_ENTRY vtt_S20177C8[] = {
  {&(_ZTV8S20177C8[4]),  4,10},
  {&(_ZTV8S20177C8[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
Class_Descriptor cd_S20177C8 = {  "S20177C8", // class name
  bases_S20177C8, 3,
  &(vtc_S20177C8[0]), // expected_vtbl_contents
  &(vtt_S20177C8[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI8S20177C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20177C8),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20177C8),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  S20177C7  : virtual S20177C8 {
  int s20177c7f0;
  char s20177c7f1;
  void *s20177c7f2[6];
  int s20177c7f3[2];
  void *s20177c7f4;
  ::S281C37_nt s20177c7f5;
  ~S20177C7(); // tgen
  S20177C7(); // tgen
};
//SIG(-1 S20177C7) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S20177C7()
{
  extern Class_Descriptor cd_S20177C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S20177C7, buf);
    S20177C7 *dp, &lv = *(dp=new (buf) S20177C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S20177C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C7)");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*), ABISELECT(96,56), "S20177C7");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*), ABISELECT(560,312), "S20177C7");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*), ABISELECT(928,508), "S20177C7");
    check_base_class_offset(lv, (S20177C8*), ABISELECT(96,56), "S20177C7");
    check_field_offset(lv, s20177c7f0, ABISELECT(8,4), "S20177C7.s20177c7f0");
    check_field_offset(lv, s20177c7f1, ABISELECT(12,8), "S20177C7.s20177c7f1");
    check_field_offset(lv, s20177c7f2, ABISELECT(16,12), "S20177C7.s20177c7f2");
    check_field_offset(lv, s20177c7f3, ABISELECT(64,36), "S20177C7.s20177c7f3");
    check_field_offset(lv, s20177c7f4, ABISELECT(72,44), "S20177C7.s20177c7f4");
    check_field_offset(lv, s20177c7f5, ABISELECT(80,48), "S20177C7.s20177c7f5");
    test_class_info(&lv, &cd_S20177C7);
    dp->~S20177C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C7(Test_S20177C7, "S20177C7", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN8S20177C7C1Ev();
extern void _ZN8S20177C7D1Ev();
Name_Map name_map_S20177C7[] = {
  NSPAIR(_ZN8S20177C7C1Ev),
  NSPAIR(_ZN8S20177C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
static Base_Class bases_S20177C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C5,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20177C2,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20177C8,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20177C7[];
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY vtc_S20177C7[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern VTBL_ENTRY _ZTV8S20177C7[];
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C7[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C8__8S20177C7[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTT_ENTRY vtt_S20177C7[] = {
  {&(_ZTV8S20177C7[5]),  5,17},
  {&(_ZTV8S20177C7[11]),  11,17},
  {&(_ZTV8S20177C7[16]),  16,17},
  {&(_tg__ZTV8S20177C8__8S20177C7[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C8__8S20177C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20177C7[];
extern  VTBL_ENTRY _ZTV8S20177C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C7[];
Class_Descriptor cd_S20177C7 = {  "S20177C7", // class name
  bases_S20177C7, 4,
  &(vtc_S20177C7[0]), // expected_vtbl_contents
  &(vtt_S20177C7[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI8S20177C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20177C7),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20177C7),5, //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  S20177C6  : virtual S20177C7 , S20177C2 , S281C37_nt {
  char s20177c6f0;
  int s20177c6f1[2];
  long double s20177c6f2[2];
  short s20177c6f3;
  void *s20177c6f4;
  int s20177c6f5;
  __tsi64 s20177c6f6;
  int s20177c6f7;
  void *s20177c6f8;
  virtual  ~S20177C6(); // _ZN8S20177C6D2Ev
  virtual void  v6(); // _ZN8S20177C62v6Ev
  S20177C6(); // tgen
};
//SIG(-1 S20177C6) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S20177C6 ::~S20177C6(){ note_dtor("S20177C6", this);}
void  S20177C6 ::v6(){vfunc_called(this, "_ZN8S20177C62v6Ev");}
S20177C6 ::S20177C6(){ note_ctor("S20177C6", this);} // tgen

static void Test_S20177C6()
{
  extern Class_Descriptor cd_S20177C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S20177C6, buf);
    S20177C6 *dp, &lv = *(dp=new (buf) S20177C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S20177C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C6)");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*), ABISELECT(576,324), "S20177C6");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*), ABISELECT(1040,580), "S20177C6");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*), ABISELECT(1408,776), "S20177C6");
    check_base_class_offset(lv, (S20177C8*)(S20177C7*), ABISELECT(576,324), "S20177C6");
    check_base_class_offset(lv, (S20177C7*), ABISELECT(480,268), "S20177C6");
    /*is_ambiguous_... S20177C6::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*), 0, "S20177C6");
    /*is_ambiguous_... S20177C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S20177C6");
    check_field_offset(lv, s20177c6f0, ABISELECT(384,204), "S20177C6.s20177c6f0");
    check_field_offset(lv, s20177c6f1, ABISELECT(388,208), "S20177C6.s20177c6f1");
    check_field_offset(lv, s20177c6f2, ABISELECT(400,216), "S20177C6.s20177c6f2");
    check_field_offset(lv, s20177c6f3, ABISELECT(432,240), "S20177C6.s20177c6f3");
    check_field_offset(lv, s20177c6f4, ABISELECT(440,244), "S20177C6.s20177c6f4");
    check_field_offset(lv, s20177c6f5, ABISELECT(448,248), "S20177C6.s20177c6f5");
    check_field_offset(lv, s20177c6f6, ABISELECT(456,252), "S20177C6.s20177c6f6");
    check_field_offset(lv, s20177c6f7, ABISELECT(464,260), "S20177C6.s20177c6f7");
    check_field_offset(lv, s20177c6f8, ABISELECT(472,264), "S20177C6.s20177c6f8");
    test_class_info(&lv, &cd_S20177C6);
    dp->~S20177C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C6(Test_S20177C6, "S20177C6", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN8S20177C6C1Ev();
extern void _ZN8S20177C6D2Ev();
Name_Map name_map_S20177C6[] = {
  NSPAIR(_ZN8S20177C6C1Ev),
  NSPAIR(_ZN8S20177C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C7;
extern VTBL_ENTRY _ZTI8S20177C7[];
extern  VTBL_ENTRY _ZTV8S20177C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C7[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S20177C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20177C2,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C8,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20177C7,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20177C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20177C6[];
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY vtc_S20177C6[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern VTBL_ENTRY _ZTV8S20177C6[];
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C7__8S20177C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C7__8S20177C6[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C8__8S20177C6[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTT_ENTRY vtt_S20177C6[] = {
  {&(_ZTV8S20177C6[6]),  6,27},
  {&(_ZTV8S20177C6[15]),  15,27},
  {&(_ZTV8S20177C6[21]),  21,27},
  {&(_ZTV8S20177C6[26]),  26,27},
  {&(_tg__ZTV8S20177C7__8S20177C6[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C7__8S20177C6[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C7__8S20177C6[3]),  3,4},
  {&(_tg__ZTV8S20177C8__8S20177C6[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C8__8S20177C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
Class_Descriptor cd_S20177C6 = {  "S20177C6", // class name
  bases_S20177C6, 7,
  &(vtc_S20177C6[0]), // expected_vtbl_contents
  &(vtt_S20177C6[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI8S20177C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20177C6),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20177C6),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C9  {
  void *s20177c9f0;
  ::S20177C7 s20177c9f1;
  char s20177c9f2;
  ::S20176C3_nt s20177c9f3;
  ::S20176C3_nt s20177c9f4;
  ::S20176C3_nt s20177c9f5;
  virtual void  v7(); // _ZN8S20177C92v7Ev
  ~S20177C9(); // tgen
  S20177C9(); // tgen
};
//SIG(-1 S20177C9) C1{ v1 Fp FC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} Fc FC7 FC7 FC7}


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

static void Test_S20177C9()
{
  extern Class_Descriptor cd_S20177C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(62,133)];
    init_test(&cd_S20177C9, buf);
    S20177C9 *dp, &lv = *(dp=new (buf) S20177C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(976,528), "sizeof(S20177C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C9)");
    check_field_offset(lv, s20177c9f0, ABISELECT(8,4), "S20177C9.s20177c9f0");
    check_field_offset(lv, s20177c9f1, ABISELECT(16,8), "S20177C9.s20177c9f1");
    check_field_offset(lv, s20177c9f2, ABISELECT(960,524), "S20177C9.s20177c9f2");
    check_field_offset(lv, s20177c9f3, ABISELECT(961,525), "S20177C9.s20177c9f3");
    check_field_offset(lv, s20177c9f4, ABISELECT(962,526), "S20177C9.s20177c9f4");
    check_field_offset(lv, s20177c9f5, ABISELECT(963,527), "S20177C9.s20177c9f5");
    test_class_info(&lv, &cd_S20177C9);
    dp->~S20177C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C9(Test_S20177C9, "S20177C9", ABISELECT(976,528));

#else // __cplusplus

extern void _ZN8S20177C9C1Ev();
extern void _ZN8S20177C9D1Ev();
Name_Map name_map_S20177C9[] = {
  NSPAIR(_ZN8S20177C9C1Ev),
  NSPAIR(_ZN8S20177C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20177C9[];
extern void _ZN8S20177C92v7Ev();
static  VTBL_ENTRY vtc_S20177C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C9[0]),
  (VTBL_ENTRY)&_ZN8S20177C92v7Ev,
};
extern VTBL_ENTRY _ZTI8S20177C9[];
extern  VTBL_ENTRY _ZTV8S20177C9[];
Class_Descriptor cd_S20177C9 = {  "S20177C9", // class name
  0,0,//no base classes
  &(vtc_S20177C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(976,528), // object size
  NSPAIRA(_ZTI8S20177C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20177C9),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C13  : virtual S20177C7 , virtual S20177C6 {
  long s20177c13f0;
  void *s20177c13f1;
  ::S20177C8 s20177c13f2;
  void *s20177c13f3;
  short s20177c13f4;
  long s20177c13f5;
  int s20177c13f6;
  __tsi64 s20177c13f7;
  ::S20177C8 s20177c13f8[4];
  int s20177c13f9;
  virtual  ~S20177C13(); // _ZN9S20177C13D2Ev
  S20177C13(); // tgen
};
//SIG(-1 S20177C13) C1{ VBC2{ VBC3{ BC4{ v1 Fi Fp FC5{ m Fp[2]}} VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC8{ VBC2 BC6 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC3 Fp Fs Fl Fi FL FC3[4] Fi}


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

static void Test_S20177C13()
{
  extern Class_Descriptor cd_S20177C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(361,782)];
    init_test(&cd_S20177C13, buf);
    S20177C13 *dp, &lv = *(dp=new (buf) S20177C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5760,3124), "sizeof(S20177C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C13)");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*), ABISELECT(4432,2396), "S20177C13");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*), ABISELECT(4896,2652), "S20177C13");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*), ABISELECT(5264,2848), "S20177C13");
    check_base_class_offset(lv, (S20177C8*)(S20177C7*), ABISELECT(4432,2396), "S20177C13");
    check_base_class_offset(lv, (S20177C7*), ABISELECT(4328,2340), "S20177C13");
    check_base_class_offset(lv, (S20177C7*)(S20177C6*), ABISELECT(4328,2340), "S20177C13");
    /*is_ambiguous_... S20177C6::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*), ABISELECT(5280,2856), "S20177C13");
    /*is_ambiguous_... S20177C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*), ABISELECT(5648,3052), "S20177C13");
    check_base_class_offset(lv, (S20177C6*), ABISELECT(5280,2856), "S20177C13");
    check_field_offset(lv, s20177c13f0, ABISELECT(8,4), "S20177C13.s20177c13f0");
    check_field_offset(lv, s20177c13f1, ABISELECT(16,8), "S20177C13.s20177c13f1");
    check_field_offset(lv, s20177c13f2, ABISELECT(32,12), "S20177C13.s20177c13f2");
    check_field_offset(lv, s20177c13f3, ABISELECT(880,472), "S20177C13.s20177c13f3");
    check_field_offset(lv, s20177c13f4, ABISELECT(888,476), "S20177C13.s20177c13f4");
    check_field_offset(lv, s20177c13f5, ABISELECT(896,480), "S20177C13.s20177c13f5");
    check_field_offset(lv, s20177c13f6, ABISELECT(904,484), "S20177C13.s20177c13f6");
    check_field_offset(lv, s20177c13f7, ABISELECT(912,488), "S20177C13.s20177c13f7");
    check_field_offset(lv, s20177c13f8, ABISELECT(928,496), "S20177C13.s20177c13f8");
    check_field_offset(lv, s20177c13f9, ABISELECT(4320,2336), "S20177C13.s20177c13f9");
    test_class_info(&lv, &cd_S20177C13);
    dp->~S20177C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C13(Test_S20177C13, "S20177C13", ABISELECT(5760,3124));

#else // __cplusplus

extern void _ZN9S20177C13C1Ev();
extern void _ZN9S20177C13D2Ev();
Name_Map name_map_S20177C13[] = {
  NSPAIR(_ZN9S20177C13C1Ev),
  NSPAIR(_ZN9S20177C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C7;
extern VTBL_ENTRY _ZTI8S20177C7[];
extern  VTBL_ENTRY _ZTV8S20177C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C7[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
static Base_Class bases_S20177C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C5,    ABISELECT(4432,2396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C2,    ABISELECT(4896,2652), //bcp->offset
    22, //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_S281C37_nt,    ABISELECT(5264,2848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C8,    ABISELECT(4432,2396), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20177C7,    ABISELECT(4328,2340), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20177C2,    ABISELECT(5280,2856), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5648,3052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(5280,2856), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20177C13[];
extern void _ZN9S20177C13D1Ev();
extern void _ZN9S20177C13D0Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev)();
extern void ABISELECT(_ZThn5280_N9S20177C13D1Ev,_ZThn2856_N9S20177C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev)();
extern void ABISELECT(_ZThn5280_N9S20177C13D0Ev,_ZThn2856_N9S20177C13D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY vtc_S20177C13[] = {
  ABISELECT(5280,2856),
  ABISELECT(5264,2848),
  ABISELECT(4896,2652),
  ABISELECT(4432,2396),
  ABISELECT(4328,2340),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN9S20177C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C13D0Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4432,-2396),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  0,
  ABISELECT(-4896,-2652),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  0,
  ABISELECT(-5280,-2856),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5280,-2856),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
extern VTBL_ENTRY _ZTV9S20177C13[];
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C13[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C7__9S20177C13[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C7__9S20177C13[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C13[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C8__9S20177C13[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C13[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6__9S20177C13[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6__9S20177C13[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C6__9S20177C13[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTT_ENTRY vtt_S20177C13[] = {
  {&(_ZTV9S20177C13[7]),  7,39},
  {&(_ZTV9S20177C13[14]),  14,39},
  {&(_ZTV9S20177C13[20]),  20,39},
  {&(_ZTV9S20177C13[25]),  25,39},
  {&(_ZTV9S20177C13[35]),  35,39},
  {&(_tg__ZTV8S20177C7__9S20177C13[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C7__9S20177C13[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C7__9S20177C13[3]),  3,4},
  {&(_tg__ZTV8S20177C8__9S20177C13[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C8__9S20177C13[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C13[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C6__9S20177C13[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C6__9S20177C13[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C6__9S20177C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20177C13[];
extern  VTBL_ENTRY _ZTV9S20177C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C13[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N9S20177C13D0Ev,_ZThn2856_N9S20177C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N9S20177C13D1Ev,_ZThn2856_N9S20177C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20177C13 = {  "S20177C13", // class name
  bases_S20177C13, 8,
  &(vtc_S20177C13[0]), // expected_vtbl_contents
  &(vtt_S20177C13[0]), // expected_vtt_contents
  ABISELECT(5760,3124), // object size
  NSPAIRA(_ZTI9S20177C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20177C13),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20177C13),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C14  : virtual S20177C2 {
  void *s20177c14f0;
  short s20177c14f1;
  long s20177c14f2;
  int s20177c14f3:6;
  void *s20177c14f4[2];
  ~S20177C14(); // tgen
  S20177C14(); // tgen
};
//SIG(-1 S20177C14) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} Fp Fs Fl Fi:6 Fp[2]}


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

static void Test_S20177C14()
{
  extern Class_Descriptor cd_S20177C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,57)];
    init_test(&cd_S20177C14, buf);
    S20177C14 *dp, &lv = *(dp=new (buf) S20177C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,224), "sizeof(S20177C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C14)");
    check_base_class_offset(lv, (S20177C2*), ABISELECT(64,28), "S20177C14");
    check_field_offset(lv, s20177c14f0, ABISELECT(8,4), "S20177C14.s20177c14f0");
    check_field_offset(lv, s20177c14f1, ABISELECT(16,8), "S20177C14.s20177c14f1");
    check_field_offset(lv, s20177c14f2, ABISELECT(24,12), "S20177C14.s20177c14f2");
    set_bf_and_test(lv, s20177c14f3, ABISELECT(32,16), 0, 6, 1, "S20177C14");
    set_bf_and_test(lv, s20177c14f3, ABISELECT(32,16), 0, 6, hide_sll(1LL<<5), "S20177C14");
    check_field_offset(lv, s20177c14f4, ABISELECT(40,20), "S20177C14.s20177c14f4");
    test_class_info(&lv, &cd_S20177C14);
    dp->~S20177C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C14(Test_S20177C14, "S20177C14", ABISELECT(432,224));

#else // __cplusplus

extern void _ZN9S20177C14C1Ev();
extern void _ZN9S20177C14D1Ev();
Name_Map name_map_S20177C14[] = {
  NSPAIR(_ZN9S20177C14C1Ev),
  NSPAIR(_ZN9S20177C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
static Base_Class bases_S20177C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C2,    ABISELECT(64,28), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20177C14[];
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY vtc_S20177C14[] = {
  ABISELECT(64,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern VTBL_ENTRY _ZTV9S20177C14[];
static  VTT_ENTRY vtt_S20177C14[] = {
  {&(_ZTV9S20177C14[3]),  3,7},
  {&(_ZTV9S20177C14[6]),  6,7},
};
extern VTBL_ENTRY _ZTI9S20177C14[];
extern  VTBL_ENTRY _ZTV9S20177C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C14[];
Class_Descriptor cd_S20177C14 = {  "S20177C14", // class name
  bases_S20177C14, 1,
  &(vtc_S20177C14[0]), // expected_vtbl_contents
  &(vtt_S20177C14[0]), // expected_vtt_contents
  ABISELECT(432,224), // object size
  NSPAIRA(_ZTI9S20177C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20177C14),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20177C14),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  S20177C12  : S20177C13 , S20177C14 {
  __tsi64 s20177c12f0;
  long double s20177c12f1;
  ::S20176C3_nt s20177c12f2;
  int s20177c12f3[9];
  short s20177c12f4;
  char s20177c12f5:5;
  virtual  ~S20177C12(); // _ZN9S20177C12D2Ev
  virtual void  v8(); // _ZN9S20177C122v8Ev
  S20177C12(); // tgen
};
//SIG(-1 S20177C12) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 Fi Fp FC6{ m Fp[2]}} VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} VBC9{ VBC3 BC7 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC4 Fp Fs Fl Fi FL FC4[4] Fi} BC10{ VBC7 Fp Fs Fl Fi:6 Fp[2]} vd v1 FL FD FC8 Fi[9] Fs Fc:5}


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

static void Test_S20177C12()
{
  extern Class_Descriptor cd_S20177C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(369,805)];
    init_test(&cd_S20177C12, buf);
    S20177C12 *dp, &lv = *(dp=new (buf) S20177C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5888,3216), "sizeof(S20177C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C12)");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*), ABISELECT(4560,2488), "S20177C12");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*), ABISELECT(5024,2744), "S20177C12");
    check_base_class_offset(lv, (S20177C2*)(S20177C14*), ABISELECT(5024,2744), "S20177C12");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*), ABISELECT(5392,2940), "S20177C12");
    check_base_class_offset(lv, (S20177C8*)(S20177C7*), ABISELECT(4560,2488), "S20177C12");
    check_base_class_offset(lv, (S20177C7*)(S20177C13*), ABISELECT(4464,2432), "S20177C12");
    check_base_class_offset(lv, (S20177C7*)(S20177C6*), ABISELECT(4464,2432), "S20177C12");
    /*is_ambiguous_... S20177C6::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*), ABISELECT(5408,2948), "S20177C12");
    /*is_ambiguous_... S20177C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*), ABISELECT(5776,3144), "S20177C12");
    check_base_class_offset(lv, (S20177C6*)(S20177C13*), ABISELECT(5408,2948), "S20177C12");
    check_base_class_offset(lv, (S20177C13*), 0, "S20177C12");
    check_base_class_offset(lv, (S20177C14*), ABISELECT(4328,2340), "S20177C12");
    check_field_offset(lv, s20177c12f0, ABISELECT(4384,2368), "S20177C12.s20177c12f0");
    check_field_offset(lv, s20177c12f1, ABISELECT(4400,2376), "S20177C12.s20177c12f1");
    check_field_offset(lv, s20177c12f2, ABISELECT(4416,2388), "S20177C12.s20177c12f2");
    check_field_offset(lv, s20177c12f3, ABISELECT(4420,2392), "S20177C12.s20177c12f3");
    check_field_offset(lv, s20177c12f4, ABISELECT(4456,2428), "S20177C12.s20177c12f4");
    set_bf_and_test(lv, s20177c12f5, ABISELECT(4458,2430), 0, 5, 1, "S20177C12");
    set_bf_and_test(lv, s20177c12f5, ABISELECT(4458,2430), 0, 5, hide_sll(1LL<<4), "S20177C12");
    test_class_info(&lv, &cd_S20177C12);
    dp->~S20177C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C12(Test_S20177C12, "S20177C12", ABISELECT(5888,3216));

#else // __cplusplus

extern void _ZN9S20177C12C1Ev();
extern void _ZN9S20177C12D2Ev();
Name_Map name_map_S20177C12[] = {
  NSPAIR(_ZN9S20177C12C1Ev),
  NSPAIR(_ZN9S20177C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C7;
extern VTBL_ENTRY _ZTI8S20177C7[];
extern  VTBL_ENTRY _ZTV8S20177C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C7[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C13;
extern VTBL_ENTRY _ZTI9S20177C13[];
extern  VTBL_ENTRY _ZTV9S20177C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C13[];
extern Class_Descriptor cd_S20177C14;
extern VTBL_ENTRY _ZTI9S20177C14[];
extern  VTBL_ENTRY _ZTV9S20177C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C14[];
static Base_Class bases_S20177C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C5,    ABISELECT(4560,2488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C2,    ABISELECT(5024,2744), //bcp->offset
    26, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5392,2940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C8,    ABISELECT(4560,2488), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20177C7,    ABISELECT(4464,2432), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20177C2,    ABISELECT(5408,2948), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5776,3144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(5408,2948), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20177C13,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C14,    ABISELECT(4328,2340), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20177C12[];
extern void _ZN9S20177C12D1Ev();
extern void _ZN9S20177C12D0Ev();
extern void _ZN9S20177C122v8Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev)();
extern void ABISELECT(_ZThn5408_N9S20177C12D1Ev,_ZThn2948_N9S20177C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev)();
extern void ABISELECT(_ZThn5408_N9S20177C12D0Ev,_ZThn2948_N9S20177C12D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY vtc_S20177C12[] = {
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN9S20177C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
  ABISELECT(696,404),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2488),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  0,
  ABISELECT(-5024,-2744),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  0,
  ABISELECT(-5408,-2948),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2948),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
extern VTBL_ENTRY _ZTV9S20177C12[];
extern void _ZN9S20177C13D1Ev();
extern void _ZN9S20177C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C13__9S20177C12[] = {
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN9S20177C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C13__9S20177C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C13__9S20177C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2488),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C13__9S20177C12[] = {
  0,
  ABISELECT(-5024,-2744),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev)();
extern void ABISELECT(_ZThn5408_N9S20177C13D1Ev,_ZThn2948_N9S20177C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev)();
extern void ABISELECT(_ZThn5408_N9S20177C13D0Ev,_ZThn2948_N9S20177C13D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C13__9S20177C12[] = {
  0,
  ABISELECT(-5408,-2948),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2948),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C14__9S20177C12[] = {
  ABISELECT(696,404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C14__9S20177C12[] = {
  0,
  ABISELECT(-696,-404),
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C7__9S20177C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C7__9S20177C12[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C12[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C8__9S20177C12[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6__9S20177C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6__9S20177C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C6__9S20177C12[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTT_ENTRY vtt_S20177C12[] = {
  {&(_ZTV9S20177C12[7]),  7,43},
  {&(_tg__ZTV9S20177C13__9S20177C12[7]),  7,9},
  {&(_tg__ZTV8S20177C7__9S20177C13__9S20177C12[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C13__9S20177C12[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C13__9S20177C12[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C13__9S20177C12[9]),  9,13},
  {&(_tg__ZTV9S20177C14__9S20177C12[3]),  3,3},
  {&(_tg__ZTV8S20177C2__9S20177C14__9S20177C12[3]),  3,4},
  {&(_ZTV9S20177C12[18]),  18,43},
  {&(_ZTV9S20177C12[24]),  24,43},
  {&(_ZTV9S20177C12[29]),  29,43},
  {&(_ZTV9S20177C12[39]),  39,43},
  {&(_ZTV9S20177C12[13]),  13,43},
  {&(_tg__ZTV8S20177C7__9S20177C12[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C7__9S20177C12[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C7__9S20177C12[3]),  3,4},
  {&(_tg__ZTV8S20177C8__9S20177C12[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C8__9S20177C12[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C12[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C6__9S20177C12[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C6__9S20177C12[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C6__9S20177C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20177C12[];
extern  VTBL_ENTRY _ZTV9S20177C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C12[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20177C13D0Ev,_ZThn2948_N9S20177C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20177C13D1Ev,_ZThn2948_N9S20177C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20177C12D0Ev,_ZThn2948_N9S20177C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20177C12D1Ev,_ZThn2948_N9S20177C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20177C12 = {  "S20177C12", // class name
  bases_S20177C12, 10,
  &(vtc_S20177C12[0]), // expected_vtbl_contents
  &(vtt_S20177C12[0]), // expected_vtt_contents
  ABISELECT(5888,3216), // object size
  NSPAIRA(_ZTI9S20177C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20177C12),43, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20177C12),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C15  {
  long s20177c15f0;
  ::S281C37_nt s20177c15f1[8];
  int s20177c15f2;
  void *s20177c15f3[2];
  void  mf20177c15(); // _ZN9S20177C1510mf20177c15Ev
};
//SIG(-1 S20177C15) C1{ m Fl FC2{ m Fp[2]}[8] Fi Fp[2]}


void  S20177C15 ::mf20177c15(){}

static void Test_S20177C15()
{
  {
    init_simple_test("S20177C15");
    S20177C15 lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S20177C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20177C15)");
    check_field_offset(lv, s20177c15f0, 0, "S20177C15.s20177c15f0");
    check_field_offset(lv, s20177c15f1, ABISELECT(8,4), "S20177C15.s20177c15f1");
    check_field_offset(lv, s20177c15f2, ABISELECT(136,68), "S20177C15.s20177c15f2");
    check_field_offset(lv, s20177c15f3, ABISELECT(144,72), "S20177C15.s20177c15f3");
  }
}
static Arrange_To_Call_Me vS20177C15(Test_S20177C15, "S20177C15", ABISELECT(160,80));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S20177C15[];
VTBL_ENTRY *P__ZTI9S20177C15 = _ZTI9S20177C15; 
Class_Descriptor cd_S20177C15 = {  "S20177C15", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI9S20177C15),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  S20177C11  : S20177C6 , S20177C12 , virtual S20177C15 {
  int s20177c11f0;
  void *s20177c11f1;
  short s20177c11f2;
  void *s20177c11f3[2];
  char s20177c11f4[8];
  ~S20177C11(); // tgen
  S20177C11(); // tgen
};
//SIG(-1 S20177C11) C1{ BC2{ VBC3{ VBC4{ BC5{ v1 Fi Fp FC6{ m Fp[2]}} VBC7{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v3 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC7 BC6 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC9{ BC10{ VBC3 VBC2 vd Fl Fp FC4 Fp Fs Fl Fi FL FC4[4] Fi} BC11{ VBC7 Fp Fs Fl Fi:6 Fp[2]} vd v5 FL FD FC8 Fi[9] Fs Fc:5} VBC12{ m Fl FC6[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]}


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

static void Test_S20177C11()
{
  extern Class_Descriptor cd_S20177C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(412,899)];
    init_test(&cd_S20177C11, buf);
    S20177C11 *dp, &lv = *(dp=new (buf) S20177C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6576,3592), "sizeof(S20177C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C11)");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*), ABISELECT(5088,2784), "S20177C11");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*), ABISELECT(5552,3040), "S20177C11");
    check_base_class_offset(lv, (S20177C2*)(S20177C14*)(S20177C12*), ABISELECT(5552,3040), "S20177C11");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*), ABISELECT(5920,3236), "S20177C11");
    check_base_class_offset(lv, (S20177C8*)(S20177C7*), ABISELECT(5088,2784), "S20177C11");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C6*), ABISELECT(4984,2728), "S20177C11");
    check_base_class_offset(lv, (S20177C7*)(S20177C13*)(S20177C12*), ABISELECT(4984,2728), "S20177C11");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C6*), ABISELECT(4984,2728), "S20177C11");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*), 0, "S20177C11");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*), ABISELECT(368,196), "S20177C11");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C6*), 0, "S20177C11");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*), ABISELECT(5936,3244), "S20177C11");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*), ABISELECT(6304,3440), "S20177C11");
    check_base_class_offset(lv, (S20177C6*)(S20177C13*)(S20177C12*), ABISELECT(5936,3244), "S20177C11");
    check_base_class_offset(lv, (S20177C13*)(S20177C12*), ABISELECT(480,268), "S20177C11");
    check_base_class_offset(lv, (S20177C14*)(S20177C12*), ABISELECT(4808,2608), "S20177C11");
    check_base_class_offset(lv, (S20177C12*), ABISELECT(480,268), "S20177C11");
    check_base_class_offset(lv, (S20177C15*), ABISELECT(6416,3512), "S20177C11");
    check_field_offset(lv, s20177c11f0, ABISELECT(4940,2700), "S20177C11.s20177c11f0");
    check_field_offset(lv, s20177c11f1, ABISELECT(4944,2704), "S20177C11.s20177c11f1");
    check_field_offset(lv, s20177c11f2, ABISELECT(4952,2708), "S20177C11.s20177c11f2");
    check_field_offset(lv, s20177c11f3, ABISELECT(4960,2712), "S20177C11.s20177c11f3");
    check_field_offset(lv, s20177c11f4, ABISELECT(4976,2720), "S20177C11.s20177c11f4");
    test_class_info(&lv, &cd_S20177C11);
    dp->~S20177C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C11(Test_S20177C11, "S20177C11", ABISELECT(6576,3592));

#else // __cplusplus

extern void _ZN9S20177C11C1Ev();
extern void _ZN9S20177C11D1Ev();
Name_Map name_map_S20177C11[] = {
  NSPAIR(_ZN9S20177C11C1Ev),
  NSPAIR(_ZN9S20177C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C7;
extern VTBL_ENTRY _ZTI8S20177C7[];
extern  VTBL_ENTRY _ZTV8S20177C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C7[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C13;
extern VTBL_ENTRY _ZTI9S20177C13[];
extern  VTBL_ENTRY _ZTV9S20177C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C13[];
extern Class_Descriptor cd_S20177C14;
extern VTBL_ENTRY _ZTI9S20177C14[];
extern  VTBL_ENTRY _ZTV9S20177C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C14[];
extern Class_Descriptor cd_S20177C12;
extern VTBL_ENTRY _ZTI9S20177C12[];
extern  VTBL_ENTRY _ZTV9S20177C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C12[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
static Base_Class bases_S20177C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C5,    ABISELECT(5088,2784), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C2,    ABISELECT(5552,3040), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5920,3236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C8,    ABISELECT(5088,2784), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20177C7,    ABISELECT(4984,2728), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20177C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C2,    ABISELECT(5936,3244), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(6304,3440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(5936,3244), //bcp->offset
    42, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20177C13,    ABISELECT(480,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20177C14,    ABISELECT(4808,2608), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20177C12,    ABISELECT(480,268), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C15,    ABISELECT(6416,3512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20177C11[];
extern void _ZN8S20177C22v4Ev();
extern void _ZN9S20177C11D1Ev();
extern void _ZN9S20177C11D0Ev();
extern void _ZN8S20177C62v6Ev();
extern void ABISELECT(_ZThn480_N9S20177C11D1Ev,_ZThn268_N9S20177C11D1Ev)();
extern void ABISELECT(_ZThn480_N9S20177C11D0Ev,_ZThn268_N9S20177C11D0Ev)();
extern void _ZN9S20177C122v8Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C11D1Ev,_ZTv0_n32_N9S20177C11D1Ev)();
extern void ABISELECT(_ZThn5936_N9S20177C11D1Ev,_ZThn3244_N9S20177C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C11D0Ev,_ZTv0_n32_N9S20177C11D0Ev)();
extern void ABISELECT(_ZThn5936_N9S20177C11D0Ev,_ZThn3244_N9S20177C11D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY vtc_S20177C11[] = {
  ABISELECT(6416,3512),
  ABISELECT(5936,3244),
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20177C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C11D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20177C11D1Ev,_ZThn268_N9S20177C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20177C11D0Ev,_ZThn268_N9S20177C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
  ABISELECT(744,432),
  ABISELECT(-4808,-2608),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  0,
  ABISELECT(-5552,-3040),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  0,
  ABISELECT(-5936,-3244),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5936,-3244),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C11D1Ev,_ZTv0_n32_N9S20177C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C11D0Ev,_ZTv0_n32_N9S20177C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
extern VTBL_ENTRY _ZTV9S20177C11[];
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A__9S20177C11[] = {
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6__A__9S20177C11[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6__A__9S20177C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C6__A__9S20177C11[] = {
  0,
  ABISELECT(-5552,-3040),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN9S20177C12D1Ev();
extern void _ZN9S20177C12D0Ev();
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C12__9S20177C11[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN9S20177C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
extern void _ZN9S20177C13D1Ev();
extern void _ZN9S20177C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C139S20177C12__9S20177C11[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN9S20177C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C139S20177C12__9S20177C11[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C139S20177C12__9S20177C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C139S20177C12__9S20177C11[] = {
  0,
  ABISELECT(-5072,-2772),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev)();
extern void ABISELECT(_ZThn5456_N9S20177C13D1Ev,_ZThn2976_N9S20177C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev)();
extern void ABISELECT(_ZThn5456_N9S20177C13D0Ev,_ZThn2976_N9S20177C13D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C139S20177C12__9S20177C11[] = {
  0,
  ABISELECT(-5456,-2976),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2976),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C12__9S20177C11[] = {
  ABISELECT(744,432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C149S20177C12__9S20177C11[] = {
  0,
  ABISELECT(-744,-432),
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C12__9S20177C11[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C12__9S20177C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C12__9S20177C11[] = {
  0,
  ABISELECT(-5072,-2772),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev)();
extern void ABISELECT(_ZThn5456_N9S20177C12D1Ev,_ZThn2976_N9S20177C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev)();
extern void ABISELECT(_ZThn5456_N9S20177C12D0Ev,_ZThn2976_N9S20177C12D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C12__9S20177C11[] = {
  0,
  ABISELECT(-5456,-2976),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2976),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C14__9S20177C12__9S20177C11[] = {
  ABISELECT(744,432),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C11[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C7__9S20177C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C7__9S20177C11[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C11[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C8__9S20177C11[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A1__9S20177C11[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6__A1__9S20177C11[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6__A1__9S20177C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C6__A1__9S20177C11[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTT_ENTRY vtt_S20177C11[] = {
  {&(_ZTV9S20177C11[8]),  8,55},
  {&(_tg__ZTV8S20177C6__A__9S20177C11[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C6__A__9S20177C11[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C6__A__9S20177C11[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C6__A__9S20177C11[3]),  3,4},
  {&(_tg__ZTV9S20177C12__9S20177C11[7]),  7,10},
  {&(_tg__ZTV9S20177C139S20177C12__9S20177C11[7]),  7,9},
  {&(_tg__ZTV8S20177C7__9S20177C139S20177C12__9S20177C11[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C139S20177C12__9S20177C11[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C139S20177C12__9S20177C11[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C139S20177C12__9S20177C11[9]),  9,13},
  {&(_tg__ZTV9S20177C149S20177C12__9S20177C11[3]),  3,3},
  {&(_tg__ZTV8S20177C2__9S20177C149S20177C12__9S20177C11[3]),  3,4},
  {&(_tg__ZTV8S20177C7__9S20177C12__9S20177C11[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C12__9S20177C11[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C12__9S20177C11[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C12__9S20177C11[9]),  9,13},
  {&(_tg__ZTV9S20177C14__9S20177C12__9S20177C11[3]),  3,3},
  {&(_ZTV9S20177C11[30]),  30,55},
  {&(_ZTV9S20177C11[36]),  36,55},
  {&(_ZTV9S20177C11[41]),  41,55},
  {&(_ZTV9S20177C11[19]),  19,55},
  {&(_ZTV9S20177C11[51]),  51,55},
  {&(_ZTV9S20177C11[25]),  25,55},
  {&(_tg__ZTV8S20177C7__9S20177C11[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C7__9S20177C11[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C7__9S20177C11[3]),  3,4},
  {&(_tg__ZTV8S20177C8__9S20177C11[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C8__9S20177C11[3]),  3,4},
  {&(_tg__ZTV8S20177C6__A1__9S20177C11[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C6__A1__9S20177C11[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C6__A1__9S20177C11[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C6__A1__9S20177C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20177C11[];
extern  VTBL_ENTRY _ZTV9S20177C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C11[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20177C12D0Ev,_ZThn2976_N9S20177C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20177C12D1Ev,_ZThn2976_N9S20177C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20177C13D0Ev,_ZThn2976_N9S20177C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20177C13D1Ev,_ZThn2976_N9S20177C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C11D0Ev,_ZTv0_n32_N9S20177C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S20177C11D0Ev,_ZThn3244_N9S20177C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C11D1Ev,_ZTv0_n32_N9S20177C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S20177C11D1Ev,_ZThn3244_N9S20177C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20177C11 = {  "S20177C11", // class name
  bases_S20177C11, 15,
  &(vtc_S20177C11[0]), // expected_vtbl_contents
  &(vtt_S20177C11[0]), // expected_vtt_contents
  ABISELECT(6576,3592), // object size
  NSPAIRA(_ZTI9S20177C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20177C11),55, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20177C11),33, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C17  {
  long s20177c17f0;
  char s20177c17f1;
  short s20177c17f2[2];
  virtual void  v9(); // _ZN9S20177C172v9Ev
  ~S20177C17(); // tgen
  S20177C17(); // tgen
};
//SIG(-1 S20177C17) C1{ v1 Fl Fc Fs[2]}


void  S20177C17 ::v9(){vfunc_called(this, "_ZN9S20177C172v9Ev");}
S20177C17 ::~S20177C17(){ note_dtor("S20177C17", this);} // tgen
S20177C17 ::S20177C17(){ note_ctor("S20177C17", this);} // tgen

static void Test_S20177C17()
{
  extern Class_Descriptor cd_S20177C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20177C17, buf);
    S20177C17 *dp, &lv = *(dp=new (buf) S20177C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20177C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20177C17)");
    check_field_offset(lv, s20177c17f0, ABISELECT(8,4), "S20177C17.s20177c17f0");
    check_field_offset(lv, s20177c17f1, ABISELECT(16,8), "S20177C17.s20177c17f1");
    check_field_offset(lv, s20177c17f2, ABISELECT(18,10), "S20177C17.s20177c17f2");
    test_class_info(&lv, &cd_S20177C17);
    dp->~S20177C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C17(Test_S20177C17, "S20177C17", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S20177C17C1Ev();
extern void _ZN9S20177C17D1Ev();
Name_Map name_map_S20177C17[] = {
  NSPAIR(_ZN9S20177C17C1Ev),
  NSPAIR(_ZN9S20177C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20177C17[];
extern void _ZN9S20177C172v9Ev();
static  VTBL_ENTRY vtc_S20177C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C17[0]),
  (VTBL_ENTRY)&_ZN9S20177C172v9Ev,
};
extern VTBL_ENTRY _ZTI9S20177C17[];
extern  VTBL_ENTRY _ZTV9S20177C17[];
Class_Descriptor cd_S20177C17 = {  "S20177C17", // class name
  0,0,//no base classes
  &(vtc_S20177C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S20177C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20177C17),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  S20177C21  : virtual S20177C5 , virtual S281C37_nt , S20177C8 , S20177C2 {
  __tsi64 s20177c21f0:25;
  void *s20177c21f1;
  int s20177c21f2[3];
  ::S281C37_nt s20177c21f3;
  virtual  ~S20177C21(); // _ZN9S20177C21D2Ev
  virtual void  v17(); // _ZN9S20177C213v17Ev
  S20177C21(); // tgen
};
//SIG(-1 S20177C21) C1{ VBC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC3 BC4{ BC2 VBC5{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC3 FC3[9] Fp FC2 FC2} VBC3 v4 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} BC5 vd v1 FL:25 Fp Fi[3] FC3}


 S20177C21 ::~S20177C21(){ note_dtor("S20177C21", this);}
void  S20177C21 ::v17(){vfunc_called(this, "_ZN9S20177C213v17Ev");}
S20177C21 ::S20177C21(){ note_ctor("S20177C21", this);} // tgen

static void Test_S20177C21()
{
  extern Class_Descriptor cd_S20177C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(83,177)];
    init_test(&cd_S20177C21, buf);
    S20177C21 *dp, &lv = *(dp=new (buf) S20177C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1312,704), "sizeof(S20177C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C21)");
    /*is_ambiguous_... S20177C21::S20177C5 */ AMB_check_base_class_offset(lv, (S20177C5*), ABISELECT(880,480), "S20177C21");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(920,500), "S20177C21");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*), ABISELECT(920,500), "S20177C21");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*), 0, "S20177C21");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*), ABISELECT(944,508), "S20177C21");
    check_base_class_offset(lv, (S20177C8*), 0, "S20177C21");
    /*is_ambiguous_... S20177C21::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*), ABISELECT(464,256), "S20177C21");
    set_bf_and_test(lv, s20177c21f0, ABISELECT(832,452), 0, 25, 1, "S20177C21");
    set_bf_and_test(lv, s20177c21f0, ABISELECT(832,452), 0, 25, hide_sll(1LL<<24), "S20177C21");
    check_field_offset(lv, s20177c21f1, ABISELECT(840,456), "S20177C21.s20177c21f1");
    check_field_offset(lv, s20177c21f2, ABISELECT(848,460), "S20177C21.s20177c21f2");
    check_field_offset(lv, s20177c21f3, ABISELECT(864,472), "S20177C21.s20177c21f3");
    test_class_info(&lv, &cd_S20177C21);
    dp->~S20177C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C21(Test_S20177C21, "S20177C21", ABISELECT(1312,704));

#else // __cplusplus

extern void _ZN9S20177C21C1Ev();
extern void _ZN9S20177C21D2Ev();
Name_Map name_map_S20177C21[] = {
  NSPAIR(_ZN9S20177C21C1Ev),
  NSPAIR(_ZN9S20177C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
static Base_Class bases_S20177C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C5,    ABISELECT(880,480), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(920,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20177C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C2,    ABISELECT(944,508), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20177C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C2,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20177C21[];
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN9S20177C21D1Ev();
extern void _ZN9S20177C21D0Ev();
extern void _ZN9S20177C213v17Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY vtc_S20177C21[] = {
  ABISELECT(880,480),
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20177C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C21D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C213v17Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  0,
  ABISELECT(-880,-480),
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern VTBL_ENTRY _ZTV9S20177C21[];
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C21[] = {
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C8__9S20177C21[] = {
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTT_ENTRY vtt_S20177C21[] = {
  {&(_ZTV9S20177C21[5]),  5,21},
  {&(_tg__ZTV8S20177C8__9S20177C21[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C8__9S20177C21[3]),  3,4},
  {&(_ZTV9S20177C21[16]),  16,21},
  {&(_ZTV9S20177C21[20]),  20,21},
};
extern VTBL_ENTRY _ZTI9S20177C21[];
extern  VTBL_ENTRY _ZTV9S20177C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C21[];
Class_Descriptor cd_S20177C21 = {  "S20177C21", // class name
  bases_S20177C21, 6,
  &(vtc_S20177C21[0]), // expected_vtbl_contents
  &(vtt_S20177C21[0]), // expected_vtt_contents
  ABISELECT(1312,704), // object size
  NSPAIRA(_ZTI9S20177C21),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20177C21),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20177C21),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C20  : S20177C21 {
  void *s20177c20f0;
  int s20177c20f1;
  void *s20177c20f2;
  int s20177c20f3[7];
  ::S20177C7 s20177c20f4;
  virtual  ~S20177C20(); // _ZN9S20177C20D2Ev
  S20177C20(); // tgen
};
//SIG(-1 S20177C20) C1{ BC2{ VBC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC4 BC5{ BC3 VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} BC6 vd v4 FL:25 Fp Fi[3] FC4} vd Fp Fi Fp Fi[7] FC8{ VBC5 Fi Fc Fp[6] Fi[2] Fp FC4}}


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

static void Test_S20177C20()
{
  extern Class_Descriptor cd_S20177C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(146,316)];
    init_test(&cd_S20177C20, buf);
    S20177C20 *dp, &lv = *(dp=new (buf) S20177C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2320,1260), "sizeof(S20177C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C20)");
    /*is_ambiguous_... S20177C21::S20177C5 */ AMB_check_base_class_offset(lv, (S20177C5*)(S20177C21*), ABISELECT(1888,1036), "S20177C20");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C21*), ABISELECT(1928,1056), "S20177C20");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*)(S20177C21*), ABISELECT(1928,1056), "S20177C20");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*)(S20177C21*), 0, "S20177C20");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*)(S20177C21*), ABISELECT(1952,1064), "S20177C20");
    check_base_class_offset(lv, (S20177C8*)(S20177C21*), 0, "S20177C20");
    /*is_ambiguous_... S20177C21::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C21*), ABISELECT(464,256), "S20177C20");
    check_base_class_offset(lv, (S20177C21*), 0, "S20177C20");
    check_field_offset(lv, s20177c20f0, ABISELECT(880,480), "S20177C20.s20177c20f0");
    check_field_offset(lv, s20177c20f1, ABISELECT(888,484), "S20177C20.s20177c20f1");
    check_field_offset(lv, s20177c20f2, ABISELECT(896,488), "S20177C20.s20177c20f2");
    check_field_offset(lv, s20177c20f3, ABISELECT(904,492), "S20177C20.s20177c20f3");
    check_field_offset(lv, s20177c20f4, ABISELECT(944,520), "S20177C20.s20177c20f4");
    test_class_info(&lv, &cd_S20177C20);
    dp->~S20177C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C20(Test_S20177C20, "S20177C20", ABISELECT(2320,1260));

#else // __cplusplus

extern void _ZN9S20177C20C1Ev();
extern void _ZN9S20177C20D2Ev();
Name_Map name_map_S20177C20[] = {
  NSPAIR(_ZN9S20177C20C1Ev),
  NSPAIR(_ZN9S20177C20D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S20177C21;
extern VTBL_ENTRY _ZTI9S20177C21[];
extern  VTBL_ENTRY _ZTV9S20177C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C21[];
static Base_Class bases_S20177C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C5,    ABISELECT(1888,1036), //bcp->offset
    13, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(1928,1056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C2,    ABISELECT(1952,1064), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20177C8,    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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20177C2,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20177C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20177C20[];
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN9S20177C20D1Ev();
extern void _ZN9S20177C20D0Ev();
extern void _ZN9S20177C213v17Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY vtc_S20177C20[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C20[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20177C20D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C20D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C213v17Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI9S20177C20[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI9S20177C20[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI9S20177C20[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern VTBL_ENTRY _ZTV9S20177C20[];
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN9S20177C21D1Ev();
extern void _ZN9S20177C21D0Ev();
extern void _ZN9S20177C213v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C21__9S20177C20[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20177C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C21D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C213v17Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C89S20177C21__9S20177C20[] = {
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C89S20177C21__9S20177C20[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C5__9S20177C21__9S20177C20[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C21__9S20177C20[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTT_ENTRY vtt_S20177C20[] = {
  {&(_ZTV9S20177C20[5]),  5,21},
  {&(_tg__ZTV9S20177C21__9S20177C20[5]),  5,10},
  {&(_tg__ZTV8S20177C89S20177C21__9S20177C20[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C89S20177C21__9S20177C20[3]),  3,4},
  {&(_tg__ZTV8S20177C5__9S20177C21__9S20177C20[3]),  3,4},
  {&(_tg__ZTV8S20177C2__9S20177C21__9S20177C20[3]),  3,4},
  {&(_ZTV9S20177C20[16]),  16,21},
  {&(_ZTV9S20177C20[20]),  20,21},
};
extern VTBL_ENTRY _ZTI9S20177C20[];
extern  VTBL_ENTRY _ZTV9S20177C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C20[];
Class_Descriptor cd_S20177C20 = {  "S20177C20", // class name
  bases_S20177C20, 7,
  &(vtc_S20177C20[0]), // expected_vtbl_contents
  &(vtt_S20177C20[0]), // expected_vtt_contents
  ABISELECT(2320,1260), // object size
  NSPAIRA(_ZTI9S20177C20),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20177C20),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20177C20),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C19  : virtual S20177C20 , virtual S20177C21 {
  int s20177c19f0[2];
  short s20177c19f1[10];
  int s20177c19f2;
  ::S20176C3_nt s20177c19f3;
  int s20177c19f4:32;
  int s20177c19f5;
  ::S20176C3_nt s20177c19f6;
  void *s20177c19f7;
  int s20177c19f8:2;
  int s20177c19f9;
  long double s20177c19f10;
  virtual  ~S20177C19(); // _ZN9S20177C19D2Ev
  virtual void  v16(); // _ZN9S20177C193v16Ev
  S20177C19(); // tgen
};
//SIG(-1 S20177C19) C1{ VBC2{ BC3{ VBC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC5 BC6{ BC4 VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} BC7 vd v5 FL:25 Fp Fi[3] FC5} vd Fp Fi Fp Fi[7] FC9{ VBC6 Fi Fc Fp[6] Fi[2] Fp FC5}} VBC3 vd v1 Fi[2] Fs[10] Fi FC8 Fi:32 Fi FC8 Fp Fi:2 Fi FD}


 S20177C19 ::~S20177C19(){ note_dtor("S20177C19", this);}
void  S20177C19 ::v16(){vfunc_called(this, "_ZN9S20177C193v16Ev");}
S20177C19 ::S20177C19(){ note_ctor("S20177C19", this);} // tgen

static void Test_S20177C19()
{
  extern Class_Descriptor cd_S20177C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(207,455)];
    init_test(&cd_S20177C19, buf);
    S20177C19 *dp, &lv = *(dp=new (buf) S20177C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3296,1816), "sizeof(S20177C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C19)");
    /*is_ambiguous_... S20177C21::S20177C5 */ AMB_check_base_class_offset(lv, (S20177C5*)(S20177C21*)(S20177C20*), ABISELECT(1984,1112), "S20177C19");
    /*is_ambiguous_... S20177C19::S20177C21 */ AMB_check_base_class_offset(lv, (S20177C5*)(S20177C21*), ABISELECT(1984,1112), "S20177C19");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C21*)(S20177C20*), ABISELECT(2024,1132), "S20177C19");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*)(S20177C21*)(S20177C20*), ABISELECT(2024,1132), "S20177C19");
    /*is_ambiguous_... S20177C19::S20177C21 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C21*), ABISELECT(2024,1132), "S20177C19");
    /*is_ambiguous_... S20177C19::S20177C21 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C8*)(S20177C21*), ABISELECT(2024,1132), "S20177C19");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*)(S20177C21*)(S20177C20*), ABISELECT(96,76), "S20177C19");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*)(S20177C21*)(S20177C20*), ABISELECT(2048,1140), "S20177C19");
    /*is_ambiguous_... S20177C19::S20177C21 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C8*)(S20177C21*), ABISELECT(2048,1140), "S20177C19");
    check_base_class_offset(lv, (S20177C8*)(S20177C21*)(S20177C20*), ABISELECT(96,76), "S20177C19");
    /*is_ambiguous_... S20177C21::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C21*)(S20177C20*), ABISELECT(560,332), "S20177C19");
    check_base_class_offset(lv, (S20177C21*)(S20177C20*), ABISELECT(96,76), "S20177C19");
    check_base_class_offset(lv, (S20177C20*), ABISELECT(96,76), "S20177C19");
    /*is_ambiguous_... S20177C19::S20177C21 */ AMB_check_base_class_offset(lv, (S20177C5*)(S20177C8*)(S20177C21*), ABISELECT(2416,1336), "S20177C19");
    /*is_ambiguous_... S20177C19::S20177C21 */ AMB_check_base_class_offset(lv, (S20177C8*)(S20177C21*), ABISELECT(2416,1336), "S20177C19");
    /*is_ambiguous_... S20177C19::S20177C21 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C21*), ABISELECT(2880,1592), "S20177C19");
    /*is_ambiguous_... S20177C19::S20177C21 */ AMB_check_base_class_offset(lv, (S20177C21*), ABISELECT(2416,1336), "S20177C19");
    check_field_offset(lv, s20177c19f0, ABISELECT(8,4), "S20177C19.s20177c19f0");
    check_field_offset(lv, s20177c19f1, ABISELECT(16,12), "S20177C19.s20177c19f1");
    check_field_offset(lv, s20177c19f2, ABISELECT(36,32), "S20177C19.s20177c19f2");
    check_field_offset(lv, s20177c19f3, ABISELECT(40,36), "S20177C19.s20177c19f3");
    set_bf_and_test(lv, s20177c19f4, ABISELECT(44,40), 0, 32, 1, "S20177C19");
    set_bf_and_test(lv, s20177c19f4, ABISELECT(44,40), 0, 32, hide_sll(1LL<<31), "S20177C19");
    check_field_offset(lv, s20177c19f5, ABISELECT(48,44), "S20177C19.s20177c19f5");
    check_field_offset(lv, s20177c19f6, ABISELECT(52,48), "S20177C19.s20177c19f6");
    check_field_offset(lv, s20177c19f7, ABISELECT(56,52), "S20177C19.s20177c19f7");
    set_bf_and_test(lv, s20177c19f8, ABISELECT(64,56), 0, 2, 1, "S20177C19");
    set_bf_and_test(lv, s20177c19f8, ABISELECT(64,56), 0, 2, hide_sll(1LL<<1), "S20177C19");
    check_field_offset(lv, s20177c19f9, ABISELECT(68,60), "S20177C19.s20177c19f9");
    check_field_offset(lv, s20177c19f10, ABISELECT(80,64), "S20177C19.s20177c19f10");
    test_class_info(&lv, &cd_S20177C19);
    dp->~S20177C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C19(Test_S20177C19, "S20177C19", ABISELECT(3296,1816));

#else // __cplusplus

extern void _ZN9S20177C19C1Ev();
extern void _ZN9S20177C19D2Ev();
Name_Map name_map_S20177C19[] = {
  NSPAIR(_ZN9S20177C19C1Ev),
  NSPAIR(_ZN9S20177C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S20177C21;
extern VTBL_ENTRY _ZTI9S20177C21[];
extern  VTBL_ENTRY _ZTV9S20177C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C21[];
extern Class_Descriptor cd_S20177C20;
extern VTBL_ENTRY _ZTI9S20177C20[];
extern  VTBL_ENTRY _ZTV9S20177C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C20[];
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S20177C21;
extern VTBL_ENTRY _ZTI9S20177C21[];
extern  VTBL_ENTRY _ZTV9S20177C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C21[];
static Base_Class bases_S20177C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C5,    ABISELECT(1984,1112), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(2024,1132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C5,    ABISELECT(96,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20177C2,    ABISELECT(2048,1140), //bcp->offset
    32, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20177C8,    ABISELECT(96,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20177C2,    ABISELECT(560,332), //bcp->offset
    25, //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20177C21,    ABISELECT(96,76), //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
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20177C20,    ABISELECT(96,76), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20177C5,    ABISELECT(2416,1336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20177C8,    ABISELECT(2416,1336), //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
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20177C2,    ABISELECT(2880,1592), //bcp->offset
    51, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20177C21,    ABISELECT(2416,1336), //bcp->offset
    36, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20177C19[];
extern void _ZN9S20177C19D1Ev();
extern void _ZN9S20177C19D0Ev();
extern void _ZN9S20177C193v16Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C19D1Ev,_ZTv0_n32_N9S20177C19D1Ev)();
extern void ABISELECT(_ZThn96_N9S20177C19D1Ev,_ZThn76_N9S20177C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C19D0Ev,_ZTv0_n32_N9S20177C19D0Ev)();
extern void ABISELECT(_ZThn96_N9S20177C19D0Ev,_ZThn76_N9S20177C19D0Ev)() __attribute__((weak));
extern void _ZN9S20177C213v17Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C19D1Ev,_ZTv0_n32_N9S20177C19D1Ev)();
extern void ABISELECT(_ZThn2416_N9S20177C19D1Ev,_ZThn1336_N9S20177C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C19D0Ev,_ZTv0_n32_N9S20177C19D0Ev)();
extern void ABISELECT(_ZThn2416_N9S20177C19D0Ev,_ZThn1336_N9S20177C19D0Ev)() __attribute__((weak));
extern void _ZN9S20177C213v17Ev();
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY vtc_S20177C19[] = {
  ABISELECT(2416,1336),
  ABISELECT(2048,1140),
  ABISELECT(2024,1132),
  ABISELECT(1984,1112),
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C19[0]),
  (VTBL_ENTRY)&_ZN9S20177C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C19D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C193v16Ev,
  ABISELECT(464,256),
  0,
  ABISELECT(-96,-76),
  0,
  0,
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI9S20177C19[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C19D1Ev,_ZTv0_n32_N9S20177C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C19D0Ev,_ZTv0_n32_N9S20177C19D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C213v17Ev,
  ABISELECT(-560,-332),
  (VTBL_ENTRY)&(_ZTI9S20177C19[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  0,
  ABISELECT(-1984,-1112),
  (VTBL_ENTRY)&(_ZTI9S20177C19[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  0,
  ABISELECT(-2048,-1140),
  (VTBL_ENTRY)&(_ZTI9S20177C19[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  ABISELECT(464,256),
  0,
  ABISELECT(-2416,-1336),
  0,
  0,
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  ABISELECT(-2416,-1336),
  (VTBL_ENTRY)&(_ZTI9S20177C19[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C19D1Ev,_ZTv0_n32_N9S20177C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C19D0Ev,_ZTv0_n32_N9S20177C19D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C213v17Ev,
  ABISELECT(-2880,-1592),
  (VTBL_ENTRY)&(_ZTI9S20177C19[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern VTBL_ENTRY _ZTV9S20177C19[];
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN9S20177C20D1Ev();
extern void _ZN9S20177C20D0Ev();
extern void _ZN9S20177C213v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C20__9S20177C19[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C20[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20177C20D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C20D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C213v17Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN9S20177C21D1Ev();
extern void _ZN9S20177C21D0Ev();
extern void _ZN9S20177C213v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C219S20177C20__9S20177C19[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20177C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C21D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C213v17Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C89S20177C219S20177C20__9S20177C19[] = {
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C89S20177C219S20177C20__9S20177C19[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C5__9S20177C219S20177C20__9S20177C19[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C219S20177C20__9S20177C19[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C5__9S20177C20__9S20177C19[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI9S20177C20[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C20__9S20177C19[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI9S20177C20[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN9S20177C21D1Ev();
extern void _ZN9S20177C21D0Ev();
extern void _ZN9S20177C213v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C21__A1__9S20177C19[] = {
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20177C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C21D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C213v17Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C89S20177C21__A1__9S20177C19[] = {
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C89S20177C21__A1__9S20177C19[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C5__9S20177C21__A1__9S20177C19[] = {
  0,
  ABISELECT(432,224),
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C21__A1__9S20177C19[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTT_ENTRY vtt_S20177C19[] = {
  {&(_ZTV9S20177C19[7]),  7,54},
  {&(_ZTV9S20177C19[20]),  20,54},
  {&(_ZTV9S20177C19[31]),  31,54},
  {&(_ZTV9S20177C19[35]),  35,54},
  {&(_ZTV9S20177C19[27]),  27,54},
  {&(_ZTV9S20177C19[46]),  46,54},
  {&(_ZTV9S20177C19[53]),  53,54},
  {&(_tg__ZTV9S20177C20__9S20177C19[5]),  5,10},
  {&(_tg__ZTV9S20177C219S20177C20__9S20177C19[5]),  5,10},
  {&(_tg__ZTV8S20177C89S20177C219S20177C20__9S20177C19[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C89S20177C219S20177C20__9S20177C19[3]),  3,4},
  {&(_tg__ZTV8S20177C5__9S20177C219S20177C20__9S20177C19[3]),  3,4},
  {&(_tg__ZTV8S20177C2__9S20177C219S20177C20__9S20177C19[3]),  3,4},
  {&(_tg__ZTV8S20177C5__9S20177C20__9S20177C19[3]),  3,4},
  {&(_tg__ZTV8S20177C2__9S20177C20__9S20177C19[3]),  3,4},
  {&(_tg__ZTV9S20177C21__A1__9S20177C19[5]),  5,10},
  {&(_tg__ZTV8S20177C89S20177C21__A1__9S20177C19[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C89S20177C21__A1__9S20177C19[3]),  3,4},
  {&(_tg__ZTV8S20177C5__9S20177C21__A1__9S20177C19[3]),  3,4},
  {&(_tg__ZTV8S20177C2__9S20177C21__A1__9S20177C19[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20177C19[];
extern  VTBL_ENTRY _ZTV9S20177C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C19[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C19D0Ev,_ZTv0_n32_N9S20177C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N9S20177C19D0Ev,_ZThn1336_N9S20177C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20177C19D0Ev,_ZThn76_N9S20177C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C19D1Ev,_ZTv0_n32_N9S20177C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N9S20177C19D1Ev,_ZThn1336_N9S20177C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20177C19D1Ev,_ZThn76_N9S20177C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20177C19 = {  "S20177C19", // class name
  bases_S20177C19, 12,
  &(vtc_S20177C19[0]), // expected_vtbl_contents
  &(vtt_S20177C19[0]), // expected_vtt_contents
  ABISELECT(3296,1816), // object size
  NSPAIRA(_ZTI9S20177C19),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20177C19),54, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20177C19),20, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C24  : virtual S20177C2 , virtual S20177C6 {
  ::S20177C6 s20177c24f0[7];
  int s20177c24f1;
  short s20177c24f2;
  int s20177c24f3;
  ::S20177C8 s20177c24f4;
  long s20177c24f5[9];
  virtual void  v11(); // _ZN9S20177C243v11Ev
  virtual void  v12(); // _ZN9S20177C243v12Ev
  ~S20177C24(); // tgen
  S20177C24(); // tgen
};
//SIG(-1 S20177C24) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 Fl[9]}


void  S20177C24 ::v11(){vfunc_called(this, "_ZN9S20177C243v11Ev");}
void  S20177C24 ::v12(){vfunc_called(this, "_ZN9S20177C243v12Ev");}
S20177C24 ::~S20177C24(){ note_dtor("S20177C24", this);} // tgen
S20177C24 ::S20177C24(){ note_ctor("S20177C24", this);} // tgen

static void Test_S20177C24()
{
  extern Class_Descriptor cd_S20177C24;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1697)];
    init_test(&cd_S20177C24, buf);
    S20177C24 *dp, &lv = *(dp=new (buf) S20177C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6784), "sizeof(S20177C24)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C24)");
    /*is_ambiguous_... S20177C24::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*), ABISELECT(10928,6000), "S20177C24");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*), ABISELECT(10928,6000), "S20177C24");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*), ABISELECT(11872,6520), "S20177C24");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*), ABISELECT(12328,6776), "S20177C24");
    check_base_class_offset(lv, (S20177C8*)(S20177C7*), ABISELECT(11872,6520), "S20177C24");
    check_base_class_offset(lv, (S20177C7*)(S20177C6*), ABISELECT(11776,6464), "S20177C24");
    /*is_ambiguous_... S20177C6::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*), ABISELECT(11296,6196), "S20177C24");
    /*is_ambiguous_... S20177C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*), ABISELECT(11664,6392), "S20177C24");
    check_base_class_offset(lv, (S20177C6*), ABISELECT(11296,6196), "S20177C24");
    check_field_offset(lv, s20177c24f0, ABISELECT(16,4), "S20177C24.s20177c24f0");
    check_field_offset(lv, s20177c24f1, ABISELECT(9984,5492), "S20177C24.s20177c24f1");
    check_field_offset(lv, s20177c24f2, ABISELECT(9988,5496), "S20177C24.s20177c24f2");
    check_field_offset(lv, s20177c24f3, ABISELECT(9992,5500), "S20177C24.s20177c24f3");
    check_field_offset(lv, s20177c24f4, ABISELECT(10000,5504), "S20177C24.s20177c24f4");
    check_field_offset(lv, s20177c24f5, ABISELECT(10848,5964), "S20177C24.s20177c24f5");
    test_class_info(&lv, &cd_S20177C24);
    dp->~S20177C24();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C24(Test_S20177C24, "S20177C24", ABISELECT(12352,6784));

#else // __cplusplus

extern void _ZN9S20177C24C1Ev();
extern void _ZN9S20177C24D1Ev();
Name_Map name_map_S20177C24[] = {
  NSPAIR(_ZN9S20177C24C1Ev),
  NSPAIR(_ZN9S20177C24D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C7;
extern VTBL_ENTRY _ZTI8S20177C7[];
extern  VTBL_ENTRY _ZTV8S20177C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C7[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
static Base_Class bases_S20177C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C2,    ABISELECT(10928,6000), //bcp->offset
    11, //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_S20177C5,    ABISELECT(11872,6520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C8,    ABISELECT(11872,6520), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20177C7,    ABISELECT(11776,6464), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20177C2,    ABISELECT(11296,6196), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(11296,6196), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20177C24[];
extern void _ZN9S20177C243v11Ev();
extern void _ZN9S20177C243v12Ev();
extern void _ZN9S20177C24D1Ev();
extern void _ZN9S20177C24D0Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev)();
extern void ABISELECT(_ZThn11296_N9S20177C24D1Ev,_ZThn6196_N9S20177C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev)();
extern void ABISELECT(_ZThn11296_N9S20177C24D0Ev,_ZThn6196_N9S20177C24D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY vtc_S20177C24[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN9S20177C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20177C243v12Ev,
  (VTBL_ENTRY)&_ZN9S20177C24D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C24D0Ev,
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern VTBL_ENTRY _ZTV9S20177C24[];
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C24[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6__9S20177C24[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6__9S20177C24[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C6__9S20177C24[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C24[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C7__9S20177C24[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C7__9S20177C24[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C24[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C8__9S20177C24[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTT_ENTRY vtt_S20177C24[] = {
  {&(_ZTV9S20177C24[7]),  7,41},
  {&(_ZTV9S20177C24[14]),  14,41},
  {&(_ZTV9S20177C24[24]),  24,41},
  {&(_ZTV9S20177C24[33]),  33,41},
  {&(_ZTV9S20177C24[39]),  39,41},
  {&(_tg__ZTV8S20177C6__9S20177C24[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C6__9S20177C24[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C6__9S20177C24[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C6__9S20177C24[3]),  3,4},
  {&(_tg__ZTV8S20177C7__9S20177C24[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C7__9S20177C24[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C7__9S20177C24[3]),  3,4},
  {&(_tg__ZTV8S20177C8__9S20177C24[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C8__9S20177C24[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20177C24[];
extern  VTBL_ENTRY _ZTV9S20177C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C24[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20177C24D0Ev,_ZThn6196_N9S20177C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20177C24D1Ev,_ZThn6196_N9S20177C24D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20177C24 = {  "S20177C24", // class name
  bases_S20177C24, 8,
  &(vtc_S20177C24[0]), // expected_vtbl_contents
  &(vtt_S20177C24[0]), // expected_vtt_contents
  ABISELECT(12352,6784), // object size
  NSPAIRA(_ZTI9S20177C24),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20177C24),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20177C24),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C23  : virtual S20177C24 {
  char s20177c23f0;
  int s20177c23f1[3];
  virtual  ~S20177C23(); // _ZN9S20177C23D2Ev
  S20177C23(); // tgen
};
//SIG(-1 S20177C23) C1{ VBC2{ VBC3{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v2 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v3 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v5 v6 FC7[7] Fi Fs Fi FC9 Fl[9]} vd Fc Fi[3]}


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

static void Test_S20177C23()
{
  extern Class_Descriptor cd_S20177C23;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(775,1702)];
    init_test(&cd_S20177C23, buf);
    S20177C23 *dp, &lv = *(dp=new (buf) S20177C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12384,6804), "sizeof(S20177C23)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C23)");
    /*is_ambiguous_... S20177C24::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C24*), ABISELECT(10960,6020), "S20177C23");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*), ABISELECT(10960,6020), "S20177C23");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*), ABISELECT(11904,6540), "S20177C23");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*), ABISELECT(12360,6796), "S20177C23");
    check_base_class_offset(lv, (S20177C8*)(S20177C7*), ABISELECT(11904,6540), "S20177C23");
    check_base_class_offset(lv, (S20177C7*)(S20177C6*), ABISELECT(11808,6484), "S20177C23");
    /*is_ambiguous_... S20177C6::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*), ABISELECT(11328,6216), "S20177C23");
    /*is_ambiguous_... S20177C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*), ABISELECT(11696,6412), "S20177C23");
    check_base_class_offset(lv, (S20177C6*)(S20177C24*), ABISELECT(11328,6216), "S20177C23");
    check_base_class_offset(lv, (S20177C24*), ABISELECT(32,20), "S20177C23");
    check_field_offset(lv, s20177c23f0, ABISELECT(8,4), "S20177C23.s20177c23f0");
    check_field_offset(lv, s20177c23f1, ABISELECT(12,8), "S20177C23.s20177c23f1");
    test_class_info(&lv, &cd_S20177C23);
    dp->~S20177C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C23(Test_S20177C23, "S20177C23", ABISELECT(12384,6804));

#else // __cplusplus

extern void _ZN9S20177C23C1Ev();
extern void _ZN9S20177C23D2Ev();
Name_Map name_map_S20177C23[] = {
  NSPAIR(_ZN9S20177C23C1Ev),
  NSPAIR(_ZN9S20177C23D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C7;
extern VTBL_ENTRY _ZTI8S20177C7[];
extern  VTBL_ENTRY _ZTV8S20177C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C7[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C24;
extern VTBL_ENTRY _ZTI9S20177C24[];
extern  VTBL_ENTRY _ZTV9S20177C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C24[];
static Base_Class bases_S20177C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C2,    ABISELECT(10960,6020), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S20177C5,    ABISELECT(11904,6540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12360,6796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C8,    ABISELECT(11904,6540), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20177C7,    ABISELECT(11808,6484), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20177C2,    ABISELECT(11328,6216), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11696,6412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(11328,6216), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20177C24,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20177C23[];
extern void _ZN9S20177C23D1Ev();
extern void _ZN9S20177C23D0Ev();
extern void _ZN9S20177C243v11Ev();
extern void _ZN9S20177C243v12Ev();
extern void ABISELECT(_ZTv0_n80_N9S20177C23D1Ev,_ZTv0_n40_N9S20177C23D1Ev)();
extern void ABISELECT(_ZThn32_N9S20177C23D1Ev,_ZThn20_N9S20177C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20177C23D0Ev,_ZTv0_n40_N9S20177C23D0Ev)();
extern void ABISELECT(_ZThn32_N9S20177C23D0Ev,_ZThn20_N9S20177C23D0Ev)() __attribute__((weak));
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C23D1Ev,_ZTv0_n32_N9S20177C23D1Ev)();
extern void ABISELECT(_ZThn11328_N9S20177C23D1Ev,_ZThn6216_N9S20177C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C23D0Ev,_ZTv0_n32_N9S20177C23D0Ev)();
extern void ABISELECT(_ZThn11328_N9S20177C23D0Ev,_ZThn6216_N9S20177C23D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY vtc_S20177C23[] = {
  ABISELECT(12360,6796),
  ABISELECT(11904,6540),
  ABISELECT(11808,6484),
  ABISELECT(11328,6216),
  ABISELECT(10960,6020),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C23[0]),
  (VTBL_ENTRY)&_ZN9S20177C23D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C23D0Ev,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S20177C23[0]),
  (VTBL_ENTRY)&_ZN9S20177C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20177C243v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C23D1Ev,_ZTv0_n40_N9S20177C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C23D0Ev,_ZTv0_n40_N9S20177C23D0Ev),
  0,
  ABISELECT(-10960,-6020),
  (VTBL_ENTRY)&(_ZTI9S20177C23[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  0,
  ABISELECT(-11328,-6216),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11328,-6216),
  (VTBL_ENTRY)&(_ZTI9S20177C23[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C23D1Ev,_ZTv0_n32_N9S20177C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C23D0Ev,_ZTv0_n32_N9S20177C23D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11808,-6484),
  (VTBL_ENTRY)&(_ZTI9S20177C23[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11904,-6540),
  (VTBL_ENTRY)&(_ZTI9S20177C23[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern VTBL_ENTRY _ZTV9S20177C23[];
extern void _ZN9S20177C243v11Ev();
extern void _ZN9S20177C243v12Ev();
extern void _ZN9S20177C24D1Ev();
extern void _ZN9S20177C24D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C24__9S20177C23[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN9S20177C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20177C243v12Ev,
  (VTBL_ENTRY)&_ZN9S20177C24D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C24D0Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C24__9S20177C23[] = {
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev)();
extern void ABISELECT(_ZThn11296_N9S20177C24D1Ev,_ZThn6196_N9S20177C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev)();
extern void ABISELECT(_ZThn11296_N9S20177C24D0Ev,_ZThn6196_N9S20177C24D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C24__9S20177C23[] = {
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C24__9S20177C23[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C24__9S20177C23[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C23[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6__9S20177C23[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6__9S20177C23[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C6__9S20177C23[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C23[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C7__9S20177C23[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C7__9S20177C23[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C23[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C8__9S20177C23[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTT_ENTRY vtt_S20177C23[] = {
  {&(_ZTV9S20177C23[8]),  8,54},
  {&(_ZTV9S20177C23[20]),  20,54},
  {&(_ZTV9S20177C23[27]),  27,54},
  {&(_ZTV9S20177C23[37]),  37,54},
  {&(_ZTV9S20177C23[46]),  46,54},
  {&(_ZTV9S20177C23[52]),  52,54},
  {&(_tg__ZTV9S20177C24__9S20177C23[7]),  7,11},
  {&(_tg__ZTV8S20177C2__9S20177C24__9S20177C23[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C24__9S20177C23[9]),  9,13},
  {&(_tg__ZTV8S20177C7__9S20177C24__9S20177C23[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C24__9S20177C23[6]),  6,8},
  {&(_tg__ZTV8S20177C6__9S20177C23[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C6__9S20177C23[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C6__9S20177C23[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C6__9S20177C23[3]),  3,4},
  {&(_tg__ZTV8S20177C7__9S20177C23[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C7__9S20177C23[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C7__9S20177C23[3]),  3,4},
  {&(_tg__ZTV8S20177C8__9S20177C23[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C8__9S20177C23[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20177C23[];
extern  VTBL_ENTRY _ZTV9S20177C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C23[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20177C24D0Ev,_ZThn6196_N9S20177C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20177C24D1Ev,_ZThn6196_N9S20177C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C23D0Ev,_ZTv0_n32_N9S20177C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N9S20177C23D0Ev,_ZThn6216_N9S20177C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C23D1Ev,_ZTv0_n32_N9S20177C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N9S20177C23D1Ev,_ZThn6216_N9S20177C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C23D0Ev,_ZTv0_n40_N9S20177C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20177C23D0Ev,_ZThn20_N9S20177C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C23D1Ev,_ZTv0_n40_N9S20177C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20177C23D1Ev,_ZThn20_N9S20177C23D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20177C23 = {  "S20177C23", // class name
  bases_S20177C23, 9,
  &(vtc_S20177C23[0]), // expected_vtbl_contents
  &(vtt_S20177C23[0]), // expected_vtt_contents
  ABISELECT(12384,6804), // object size
  NSPAIRA(_ZTI9S20177C23),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20177C23),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20177C23),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C22  : S20177C21 , virtual S20177C8 , virtual S20177C23 {
  long double s20177c22f0[2];
  ::S20176C3_nt s20177c22f1;
  int s20177c22f2:16;
  int s20177c22f3:3;
  virtual  ~S20177C22(); // _ZN9S20177C22D2Ev
  virtual void  v18(); // _ZN9S20177C223v18Ev
  virtual void  v19(); // _ZN9S20177C223v19Ev
  S20177C22(); // tgen
};
//SIG(-1 S20177C22) C1{ BC2{ VBC3{ v3 Fi Fp FC4{ m Fp[2]}} VBC4 BC5{ BC3 VBC6{ v4 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC4 FC4[9] Fp FC3 FC3} VBC4 v5 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} BC6 vd v6 FL:25 Fp Fi[3] FC4} VBC5 VBC8{ VBC9{ VBC6 VBC10{ VBC11{ VBC5 Fi Fc Fp[6] Fi[2] Fp FC4} BC6 BC4 vd v7 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v8 v9 FC10[7] Fi Fs Fi FC5 Fl[9]} vd Fc Fi[3]} vd v1 v2 FD[2] FC7 Fi:16 Fi:3}


 S20177C22 ::~S20177C22(){ note_dtor("S20177C22", this);}
void  S20177C22 ::v18(){vfunc_called(this, "_ZN9S20177C223v18Ev");}
void  S20177C22 ::v19(){vfunc_called(this, "_ZN9S20177C223v19Ev");}
S20177C22 ::S20177C22(){ note_ctor("S20177C22", this);} // tgen

static void Test_S20177C22()
{
  extern Class_Descriptor cd_S20177C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(834,1834)];
    init_test(&cd_S20177C22, buf);
    S20177C22 *dp, &lv = *(dp=new (buf) S20177C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13328,7332), "sizeof(S20177C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C22)");
    /*is_ambiguous_... S20177C21::S20177C5 */ AMB_check_base_class_offset(lv, (S20177C5*)(S20177C21*), ABISELECT(920,508), "S20177C22");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C21*), ABISELECT(960,528), "S20177C22");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*)(S20177C21*), ABISELECT(960,528), "S20177C22");
    /*is_ambiguous_... S20177C22::S20177C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C8*), ABISELECT(960,528), "S20177C22");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*)(S20177C21*), 0, "S20177C22");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*)(S20177C21*), ABISELECT(976,536), "S20177C22");
    /*is_ambiguous_... S20177C22::S20177C8 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C8*), ABISELECT(976,536), "S20177C22");
    /*is_ambiguous_... S20177C24::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C24*), ABISELECT(976,536), "S20177C22");
    check_base_class_offset(lv, (S20177C8*)(S20177C21*), 0, "S20177C22");
    /*is_ambiguous_... S20177C21::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C21*), ABISELECT(464,256), "S20177C22");
    check_base_class_offset(lv, (S20177C21*), 0, "S20177C22");
    /*is_ambiguous_... S20177C22::S20177C8 */ AMB_check_base_class_offset(lv, (S20177C5*)(S20177C8*), ABISELECT(1344,732), "S20177C22");
    /*is_ambiguous_... S20177C22::S20177C8 */ AMB_check_base_class_offset(lv, (S20177C8*), ABISELECT(1344,732), "S20177C22");
    check_base_class_offset(lv, (S20177C8*)(S20177C7*), ABISELECT(1344,732), "S20177C22");
    check_base_class_offset(lv, (S20177C7*)(S20177C6*), ABISELECT(13232,7276), "S20177C22");
    /*is_ambiguous_... S20177C6::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*), ABISELECT(12752,7008), "S20177C22");
    /*is_ambiguous_... S20177C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*), ABISELECT(13120,7204), "S20177C22");
    check_base_class_offset(lv, (S20177C6*)(S20177C24*), ABISELECT(12752,7008), "S20177C22");
    check_base_class_offset(lv, (S20177C24*)(S20177C23*), ABISELECT(1824,1008), "S20177C22");
    check_base_class_offset(lv, (S20177C23*), ABISELECT(1800,988), "S20177C22");
    check_field_offset(lv, s20177c22f0, ABISELECT(880,480), "S20177C22.s20177c22f0");
    check_field_offset(lv, s20177c22f1, ABISELECT(912,504), "S20177C22.s20177c22f1");
    set_bf_and_test(lv, s20177c22f2, ABISELECT(913,505), 0, 16, 1, "S20177C22");
    set_bf_and_test(lv, s20177c22f2, ABISELECT(913,505), 0, 16, hide_sll(1LL<<15), "S20177C22");
    set_bf_and_test(lv, s20177c22f3, ABISELECT(915,507), 0, 3, 1, "S20177C22");
    set_bf_and_test(lv, s20177c22f3, ABISELECT(915,507), 0, 3, hide_sll(1LL<<2), "S20177C22");
    test_class_info(&lv, &cd_S20177C22);
    dp->~S20177C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C22(Test_S20177C22, "S20177C22", ABISELECT(13328,7332));

#else // __cplusplus

extern void _ZN9S20177C22C1Ev();
extern void _ZN9S20177C22D2Ev();
Name_Map name_map_S20177C22[] = {
  NSPAIR(_ZN9S20177C22C1Ev),
  NSPAIR(_ZN9S20177C22D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S20177C21;
extern VTBL_ENTRY _ZTI9S20177C21[];
extern  VTBL_ENTRY _ZTV9S20177C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C21[];
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C7;
extern VTBL_ENTRY _ZTI8S20177C7[];
extern  VTBL_ENTRY _ZTV8S20177C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C7[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C24;
extern VTBL_ENTRY _ZTI9S20177C24[];
extern  VTBL_ENTRY _ZTV9S20177C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C24[];
extern Class_Descriptor cd_S20177C23;
extern VTBL_ENTRY _ZTI9S20177C23[];
extern  VTBL_ENTRY _ZTV9S20177C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C23[];
static Base_Class bases_S20177C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C5,    ABISELECT(920,508), //bcp->offset
    20, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(960,528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20177C2,    ABISELECT(976,536), //bcp->offset
    24, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20177C8,    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
    11, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20177C2,    ABISELECT(464,256), //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
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20177C21,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C5,    ABISELECT(1344,732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20177C8,    ABISELECT(1344,732), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20177C7,    ABISELECT(13232,7276), //bcp->offset
    74, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20177C2,    ABISELECT(12752,7008), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(13120,7204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(12752,7008), //bcp->offset
    61, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20177C24,    ABISELECT(1824,1008), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20177C23,    ABISELECT(1800,988), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20177C22[];
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN9S20177C22D1Ev();
extern void _ZN9S20177C22D0Ev();
extern void _ZN9S20177C213v17Ev();
extern void _ZN9S20177C223v18Ev();
extern void _ZN9S20177C223v19Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void ABISELECT(_ZTv0_n72_N9S20177C22D1Ev,_ZTv0_n36_N9S20177C22D1Ev)();
extern void ABISELECT(_ZThn1800_N9S20177C22D1Ev,_ZThn988_N9S20177C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20177C22D0Ev,_ZTv0_n36_N9S20177C22D0Ev)();
extern void ABISELECT(_ZThn1800_N9S20177C22D0Ev,_ZThn988_N9S20177C22D0Ev)() __attribute__((weak));
extern void _ZN9S20177C243v11Ev();
extern void _ZN9S20177C243v12Ev();
extern void ABISELECT(_ZTv0_n80_N9S20177C22D1Ev,_ZTv0_n40_N9S20177C22D1Ev)();
extern void ABISELECT(_ZThn1824_N9S20177C22D1Ev,_ZThn1008_N9S20177C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20177C22D0Ev,_ZTv0_n40_N9S20177C22D0Ev)();
extern void ABISELECT(_ZThn1824_N9S20177C22D0Ev,_ZThn1008_N9S20177C22D0Ev)() __attribute__((weak));
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C22D1Ev,_ZTv0_n32_N9S20177C22D1Ev)();
extern void ABISELECT(_ZThn12752_N9S20177C22D1Ev,_ZThn7008_N9S20177C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C22D0Ev,_ZTv0_n32_N9S20177C22D0Ev)();
extern void ABISELECT(_ZThn12752_N9S20177C22D0Ev,_ZThn7008_N9S20177C22D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY vtc_S20177C22[] = {
  ABISELECT(13232,7276),
  ABISELECT(12752,7008),
  ABISELECT(1824,1008),
  ABISELECT(1800,988),
  ABISELECT(1344,732),
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C22[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20177C22D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C22D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C213v17Ev,
  (VTBL_ENTRY)&_ZN9S20177C223v18Ev,
  (VTBL_ENTRY)&_ZN9S20177C223v19Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI9S20177C22[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI9S20177C22[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI9S20177C22[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-1344,-732),
  (VTBL_ENTRY)&(_ZTI9S20177C22[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  ABISELECT(-1800,-988),
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6288),
  ABISELECT(10952,6020),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  ABISELECT(-1800,-988),
  (VTBL_ENTRY)&(_ZTI9S20177C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20177C22D1Ev,_ZTv0_n36_N9S20177C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20177C22D0Ev,_ZTv0_n36_N9S20177C22D0Ev),
  ABISELECT(-1824,-1008),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-848,-472),
  ABISELECT(-1824,-1008),
  (VTBL_ENTRY)&(_ZTI9S20177C22[0]),
  (VTBL_ENTRY)&_ZN9S20177C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20177C243v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C22D1Ev,_ZTv0_n40_N9S20177C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C22D0Ev,_ZTv0_n40_N9S20177C22D0Ev),
  0,
  ABISELECT(-12752,-7008),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-12752,-7008),
  (VTBL_ENTRY)&(_ZTI9S20177C22[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C22D1Ev,_ZTv0_n32_N9S20177C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C22D0Ev,_ZTv0_n32_N9S20177C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-13232,-7276),
  (VTBL_ENTRY)&(_ZTI9S20177C22[0]),
};
extern VTBL_ENTRY _ZTV9S20177C22[];
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN9S20177C21D1Ev();
extern void _ZN9S20177C21D0Ev();
extern void _ZN9S20177C213v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C21__9S20177C22[] = {
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  (VTBL_ENTRY)&_ZN9S20177C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C21D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C213v17Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C89S20177C21__9S20177C22[] = {
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C89S20177C21__9S20177C22[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C5__9S20177C21__9S20177C22[] = {
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C21__9S20177C22[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI9S20177C21[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__A1__9S20177C22[] = {
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C8__A1__9S20177C22[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN9S20177C23D1Ev();
extern void _ZN9S20177C23D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C23__9S20177C22[] = {
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6288),
  ABISELECT(10952,6020),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C23[0]),
  (VTBL_ENTRY)&_ZN9S20177C23D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C23D0Ev,
};
extern void _ZN9S20177C243v11Ev();
extern void _ZN9S20177C243v12Ev();
extern void ABISELECT(_ZTv0_n80_N9S20177C23D1Ev,_ZTv0_n40_N9S20177C23D1Ev)();
extern void ABISELECT(_ZThn24_N9S20177C23D1Ev,_ZThn20_N9S20177C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20177C23D0Ev,_ZTv0_n40_N9S20177C23D0Ev)();
extern void ABISELECT(_ZThn24_N9S20177C23D0Ev,_ZThn20_N9S20177C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20177C24__9S20177C23__9S20177C22[] = {
  ABISELECT(-24,-20),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-848,-472),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI9S20177C23[0]),
  (VTBL_ENTRY)&_ZN9S20177C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20177C243v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C23D1Ev,_ZTv0_n40_N9S20177C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C23D0Ev,_ZTv0_n40_N9S20177C23D0Ev),
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C23__9S20177C22[] = {
  0,
  ABISELECT(824,452),
  (VTBL_ENTRY)&(_ZTI9S20177C23[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C23D1Ev,_ZTv0_n32_N9S20177C23D1Ev)();
extern void ABISELECT(_ZThn10952_N9S20177C23D1Ev,_ZThn6020_N9S20177C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C23D0Ev,_ZTv0_n32_N9S20177C23D0Ev)();
extern void ABISELECT(_ZThn10952_N9S20177C23D0Ev,_ZThn6020_N9S20177C23D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C23__9S20177C22[] = {
  0,
  ABISELECT(-10952,-6020),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-10952,-6020),
  (VTBL_ENTRY)&(_ZTI9S20177C23[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C23D1Ev,_ZTv0_n32_N9S20177C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C23D0Ev,_ZTv0_n32_N9S20177C23D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C23__9S20177C22[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-11432,-6288),
  (VTBL_ENTRY)&(_ZTI9S20177C23[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C23__9S20177C22[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(456,256),
  (VTBL_ENTRY)&(_ZTI9S20177C23[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN9S20177C243v11Ev();
extern void _ZN9S20177C243v12Ev();
extern void _ZN9S20177C24D1Ev();
extern void _ZN9S20177C24D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C24__9S20177C22[] = {
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-848,-472),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN9S20177C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20177C243v12Ev,
  (VTBL_ENTRY)&_ZN9S20177C24D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C24D0Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C24__9S20177C22[] = {
  0,
  ABISELECT(848,472),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev)();
extern void ABISELECT(_ZThn10928_N9S20177C24D1Ev,_ZThn6000_N9S20177C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev)();
extern void ABISELECT(_ZThn10928_N9S20177C24D0Ev,_ZThn6000_N9S20177C24D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C24__9S20177C22[] = {
  0,
  ABISELECT(-10928,-6000),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C24__9S20177C22[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-11408,-6268),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C24__9S20177C22[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(480,276),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C22[] = {
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6__9S20177C22[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6__9S20177C22[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11408,6276),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C6__9S20177C22[] = {
  0,
  ABISELECT(11776,6472),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C22[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C7__9S20177C22[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11888,6544),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C7__9S20177C22[] = {
  0,
  ABISELECT(12256,6740),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTT_ENTRY vtt_S20177C22[] = {
  {&(_ZTV9S20177C22[10]),  10,79},
  {&(_tg__ZTV9S20177C21__9S20177C22[5]),  5,10},
  {&(_tg__ZTV8S20177C89S20177C21__9S20177C22[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C89S20177C21__9S20177C22[3]),  3,4},
  {&(_tg__ZTV8S20177C5__9S20177C21__9S20177C22[3]),  3,4},
  {&(_tg__ZTV8S20177C2__9S20177C21__9S20177C22[3]),  3,4},
  {&(_ZTV9S20177C22[23]),  23,79},
  {&(_ZTV9S20177C22[27]),  27,79},
  {&(_ZTV9S20177C22[34]),  34,79},
  {&(_ZTV9S20177C22[45]),  45,79},
  {&(_ZTV9S20177C22[57]),  57,79},
  {&(_ZTV9S20177C22[70]),  70,79},
  {&(_ZTV9S20177C22[79]),  79,79},
  {&(_tg__ZTV8S20177C8__A1__9S20177C22[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C8__A1__9S20177C22[3]),  3,4},
  {&(_tg__ZTV9S20177C23__9S20177C22[8]),  8,10},
  {&(_tg__ZTV9S20177C24__9S20177C23__9S20177C22[10]),  10,14},
  {&(_tg__ZTV8S20177C2__9S20177C23__9S20177C22[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C23__9S20177C22[9]),  9,13},
  {&(_tg__ZTV8S20177C7__9S20177C23__9S20177C22[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C23__9S20177C22[6]),  6,8},
  {&(_tg__ZTV9S20177C24__9S20177C22[7]),  7,11},
  {&(_tg__ZTV8S20177C2__9S20177C24__9S20177C22[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C24__9S20177C22[9]),  9,13},
  {&(_tg__ZTV8S20177C7__9S20177C24__9S20177C22[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C24__9S20177C22[6]),  6,8},
  {&(_tg__ZTV8S20177C6__9S20177C22[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C6__9S20177C22[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C6__9S20177C22[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C6__9S20177C22[3]),  3,4},
  {&(_tg__ZTV8S20177C7__9S20177C22[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C7__9S20177C22[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C7__9S20177C22[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20177C22[];
extern  VTBL_ENTRY _ZTV9S20177C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C22[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S20177C24D0Ev,_ZThn6000_N9S20177C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S20177C24D1Ev,_ZThn6000_N9S20177C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C23D0Ev,_ZTv0_n32_N9S20177C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S20177C23D0Ev,_ZThn6020_N9S20177C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C23D1Ev,_ZTv0_n32_N9S20177C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S20177C23D1Ev,_ZThn6020_N9S20177C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C23D0Ev,_ZTv0_n40_N9S20177C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20177C23D0Ev,_ZThn20_N9S20177C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C23D1Ev,_ZTv0_n40_N9S20177C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20177C23D1Ev,_ZThn20_N9S20177C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C22D0Ev,_ZTv0_n32_N9S20177C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12752_N9S20177C22D0Ev,_ZThn7008_N9S20177C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C22D1Ev,_ZTv0_n32_N9S20177C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12752_N9S20177C22D1Ev,_ZThn7008_N9S20177C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C22D0Ev,_ZTv0_n40_N9S20177C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N9S20177C22D0Ev,_ZThn1008_N9S20177C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C22D1Ev,_ZTv0_n40_N9S20177C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N9S20177C22D1Ev,_ZThn1008_N9S20177C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20177C22D0Ev,_ZTv0_n36_N9S20177C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1800_N9S20177C22D0Ev,_ZThn988_N9S20177C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20177C22D1Ev,_ZTv0_n36_N9S20177C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1800_N9S20177C22D1Ev,_ZThn988_N9S20177C22D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20177C22 = {  "S20177C22", // class name
  bases_S20177C22, 15,
  &(vtc_S20177C22[0]), // expected_vtbl_contents
  &(vtt_S20177C22[0]), // expected_vtt_contents
  ABISELECT(13328,7332), // object size
  NSPAIRA(_ZTI9S20177C22),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20177C22),79, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20177C22),33, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C16  : virtual S20177C11 , S20177C6 , virtual S20177C17 , S281C37_nt {
  ::S20176C18 s20177c16f0;
  long double s20177c16f1;
  int s20177c16f2;
  ::S20177C19 s20177c16f3;
  char s20177c16f4;
  long s20177c16f5;
  ::S20176C3_nt s20177c16f6[8];
  int s20177c16f7:18;
  int s20177c16f8;
  ::S20177C13 s20177c16f9;
  ::S20177C22 s20177c16f10;
  ::S20176C3_nt s20177c16f11;
  virtual  ~S20177C16(); // _ZN9S20177C16D2Ev
  virtual void  v10(); // _ZN9S20177C163v10Ev
  S20177C16(); // tgen
};
//SIG(-1 S20177C16) C1{ VBC2{ BC3{ VBC4{ VBC5{ BC6{ v2 Fi Fp FC7{ m Fp[2]}} VBC8{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC9{} FC7 FC7[9] Fp FC6 FC6} VBC7 v4 Fp FL Fc[2] FC8 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC8 BC7 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC10{ BC11{ VBC4 VBC3 vd Fl Fp FC5 Fp Fs Fl Fi FL FC5[4] Fi} BC12{ VBC8 Fp Fs Fl Fi:6 Fp[2]} vd v6 FL FD FC9 Fi[9] Fs Fc:5} VBC13{ m Fl FC7[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} BC3 VBC14{ v7 Fl Fc Fs[2]} BC7 vd v1 FC15{ BC16{ VBC17{ VBC18{ BC19{ v8 Fi Fp FC7} VBC20{ v9 Fi[6] Fc:2 FD Fp[2] Fi FD FC9 FC7 FC7[9] Fp FC19 FC19} VBC7 v10 Fp FL Fc[2] FC20 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC20 BC7 vd v11 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC9 Fp Fi Fc[8] Fs Fi} FD Fi FC21{ VBC22{ BC23{ VBC6 VBC7 BC5 BC8 vd v13 FL:25 Fp Fi[3] FC7} vd Fp Fi Fp Fi[7] FC4} VBC23 vd v12 Fi[2] Fs[10] Fi FC9 Fi:32 Fi FC9 Fp Fi:2 Fi FD} Fc Fl FC9[8] Fi:18 Fi FC11 FC24{ BC23 VBC5 VBC25{ VBC26{ VBC8 VBC3 v16 v17 FC3[7] Fi Fs Fi FC5 Fl[9]} vd Fc Fi[3]} vd v14 v15 FD[2] FC9 Fi:16 Fi:3} FC9}


 S20177C16 ::~S20177C16(){ note_dtor("S20177C16", this);}
void  S20177C16 ::v10(){vfunc_called(this, "_ZN9S20177C163v10Ev");}
S20177C16 ::S20177C16(){ note_ctor("S20177C16", this);} // tgen

static void Test_S20177C16()
{
  extern Class_Descriptor cd_S20177C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1941,4255)];
    init_test(&cd_S20177C16, buf);
    S20177C16 *dp, &lv = *(dp=new (buf) S20177C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31040,17016), "sizeof(S20177C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C16)");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*), ABISELECT(29520,16192), "S20177C16");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*), ABISELECT(29984,16448), "S20177C16");
    check_base_class_offset(lv, (S20177C2*)(S20177C14*)(S20177C12*)(S20177C11*), ABISELECT(29984,16448), "S20177C16");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*), ABISELECT(30352,16644), "S20177C16");
    check_base_class_offset(lv, (S20177C8*)(S20177C7*), ABISELECT(29520,16192), "S20177C16");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C6*)(S20177C11*), ABISELECT(29416,16136), "S20177C16");
    check_base_class_offset(lv, (S20177C7*)(S20177C13*)(S20177C12*)(S20177C11*), ABISELECT(29416,16136), "S20177C16");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C6*), ABISELECT(29416,16136), "S20177C16");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C6*), ABISELECT(29416,16136), "S20177C16");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*)(S20177C11*), ABISELECT(24432,13408), "S20177C16");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*)(S20177C11*), ABISELECT(24800,13604), "S20177C16");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C6*)(S20177C11*), ABISELECT(24432,13408), "S20177C16");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*), ABISELECT(30368,16652), "S20177C16");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*), ABISELECT(30736,16848), "S20177C16");
    check_base_class_offset(lv, (S20177C6*)(S20177C13*)(S20177C12*)(S20177C11*), ABISELECT(30368,16652), "S20177C16");
    check_base_class_offset(lv, (S20177C13*)(S20177C12*)(S20177C11*), ABISELECT(24912,13676), "S20177C16");
    check_base_class_offset(lv, (S20177C14*)(S20177C12*)(S20177C11*), ABISELECT(29240,16016), "S20177C16");
    check_base_class_offset(lv, (S20177C12*)(S20177C11*), ABISELECT(24912,13676), "S20177C16");
    check_base_class_offset(lv, (S20177C15*)(S20177C11*), ABISELECT(30848,16920), "S20177C16");
    check_base_class_offset(lv, (S20177C11*), ABISELECT(24432,13408), "S20177C16");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*), 0, "S20177C16");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*), ABISELECT(368,196), "S20177C16");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C6*), 0, "S20177C16");
    check_base_class_offset(lv, (S20177C17*), ABISELECT(31008,17000), "S20177C16");
    /*is_ambiguous_... S20177C16::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(480,268), "S20177C16");
    check_field_offset(lv, s20177c16f0, ABISELECT(496,276), "S20177C16.s20177c16f0");
    check_field_offset(lv, s20177c16f1, ABISELECT(1968,1092), "S20177C16.s20177c16f1");
    check_field_offset(lv, s20177c16f2, ABISELECT(1984,1104), "S20177C16.s20177c16f2");
    check_field_offset(lv, s20177c16f3, ABISELECT(2000,1108), "S20177C16.s20177c16f3");
    check_field_offset(lv, s20177c16f4, ABISELECT(5296,2924), "S20177C16.s20177c16f4");
    check_field_offset(lv, s20177c16f5, ABISELECT(5304,2928), "S20177C16.s20177c16f5");
    check_field_offset(lv, s20177c16f6, ABISELECT(5312,2932), "S20177C16.s20177c16f6");
    set_bf_and_test(lv, s20177c16f7, ABISELECT(5320,2940), 0, 18, 1, "S20177C16");
    set_bf_and_test(lv, s20177c16f7, ABISELECT(5320,2940), 0, 18, hide_sll(1LL<<17), "S20177C16");
    check_field_offset(lv, s20177c16f8, ABISELECT(5324,2944), "S20177C16.s20177c16f8");
    check_field_offset(lv, s20177c16f9, ABISELECT(5328,2948), "S20177C16.s20177c16f9");
    check_field_offset(lv, s20177c16f10, ABISELECT(11088,6072), "S20177C16.s20177c16f10");
    check_field_offset(lv, s20177c16f11, ABISELECT(24416,13404), "S20177C16.s20177c16f11");
    test_class_info(&lv, &cd_S20177C16);
    dp->~S20177C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C16(Test_S20177C16, "S20177C16", ABISELECT(31040,17016));

#else // __cplusplus

extern void _ZN9S20177C16C1Ev();
extern void _ZN9S20177C16D2Ev();
Name_Map name_map_S20177C16[] = {
  NSPAIR(_ZN9S20177C16C1Ev),
  NSPAIR(_ZN9S20177C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C7;
extern VTBL_ENTRY _ZTI8S20177C7[];
extern  VTBL_ENTRY _ZTV8S20177C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C7[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C13;
extern VTBL_ENTRY _ZTI9S20177C13[];
extern  VTBL_ENTRY _ZTV9S20177C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C13[];
extern Class_Descriptor cd_S20177C14;
extern VTBL_ENTRY _ZTI9S20177C14[];
extern  VTBL_ENTRY _ZTV9S20177C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C14[];
extern Class_Descriptor cd_S20177C12;
extern VTBL_ENTRY _ZTI9S20177C12[];
extern  VTBL_ENTRY _ZTV9S20177C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C12[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
extern Class_Descriptor cd_S20177C11;
extern VTBL_ENTRY _ZTI9S20177C11[];
extern  VTBL_ENTRY _ZTV9S20177C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C11[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C17;
extern VTBL_ENTRY _ZTI9S20177C17[];
extern  VTBL_ENTRY _ZTV9S20177C17[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S20177C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C5,    ABISELECT(29520,16192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C2,    ABISELECT(29984,16448), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(30352,16644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C8,    ABISELECT(29520,16192), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20177C7,    ABISELECT(29416,16136), //bcp->offset
    44, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20177C2,    ABISELECT(24432,13408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(24800,13604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(24432,13408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20177C2,    ABISELECT(30368,16652), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(30736,16848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(30368,16652), //bcp->offset
    61, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20177C13,    ABISELECT(24912,13676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20177C14,    ABISELECT(29240,16016), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20177C12,    ABISELECT(24912,13676), //bcp->offset
    31, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20177C15,    ABISELECT(30848,16920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C11,    ABISELECT(24432,13408), //bcp->offset
    15, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20177C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20177C6,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C17,    ABISELECT(31008,17000), //bcp->offset
    74, //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
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(480,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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20177C16[];
extern void _ZN8S20177C22v4Ev();
extern void _ZN9S20177C16D1Ev();
extern void _ZN9S20177C16D0Ev();
extern void _ZN8S20177C62v6Ev();
extern void _ZN9S20177C163v10Ev();
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n80_N9S20177C16D1Ev,_ZTv0_n40_N9S20177C16D1Ev)();
extern void ABISELECT(_ZThn24432_N9S20177C16D1Ev,_ZThn13408_N9S20177C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20177C16D0Ev,_ZTv0_n40_N9S20177C16D0Ev)();
extern void ABISELECT(_ZThn24432_N9S20177C16D0Ev,_ZThn13408_N9S20177C16D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
extern void ABISELECT(_ZTvn480_n80_N9S20177C16D1Ev,_ZTvn268_n40_N9S20177C16D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N9S20177C16D0Ev,_ZTvn268_n40_N9S20177C16D0Ev)();
extern void _ZN9S20177C122v8Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C16D1Ev,_ZTv0_n32_N9S20177C16D1Ev)();
extern void ABISELECT(_ZThn30368_N9S20177C16D1Ev,_ZThn16652_N9S20177C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C16D0Ev,_ZTv0_n32_N9S20177C16D0Ev)();
extern void ABISELECT(_ZThn30368_N9S20177C16D0Ev,_ZThn16652_N9S20177C16D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
extern void _ZN9S20177C172v9Ev();
static  VTBL_ENTRY vtc_S20177C16[] = {
  ABISELECT(31008,17000),
  ABISELECT(30848,16920),
  ABISELECT(30368,16652),
  ABISELECT(24432,13408),
  ABISELECT(30352,16644),
  ABISELECT(29984,16448),
  ABISELECT(29520,16192),
  ABISELECT(29416,16136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20177C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C16D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  (VTBL_ENTRY)&_ZN9S20177C163v10Ev,
  ABISELECT(480,268),
  0,
  ABISELECT(-24432,-13408),
  0,
  ABISELECT(6416,3512),
  ABISELECT(5936,3244),
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  ABISELECT(-24432,-13408),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C16D1Ev,_ZTv0_n40_N9S20177C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C16D0Ev,_ZTv0_n40_N9S20177C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-24912,-13676),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20177C16D1Ev,_ZTvn268_n40_N9S20177C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20177C16D0Ev,_ZTvn268_n40_N9S20177C16D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
  ABISELECT(744,432),
  ABISELECT(-29240,-16016),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-29416,-16136),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-29520,-16192),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  0,
  ABISELECT(-29984,-16448),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  0,
  ABISELECT(-30368,-16652),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-30368,-16652),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C16D1Ev,_ZTv0_n32_N9S20177C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C16D0Ev,_ZTv0_n32_N9S20177C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  0,
  ABISELECT(-31008,-17000),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN9S20177C172v9Ev,
};
extern VTBL_ENTRY _ZTV9S20177C16[];
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A__9S20177C16[] = {
  ABISELECT(30352,16644),
  ABISELECT(29984,16448),
  ABISELECT(29520,16192),
  ABISELECT(29416,16136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6__A__9S20177C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-29416,-16136),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6__A__9S20177C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-29520,-16192),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C6__A__9S20177C16[] = {
  0,
  ABISELECT(-29984,-16448),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN9S20177C11D1Ev();
extern void _ZN9S20177C11D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C11__9S20177C16[] = {
  ABISELECT(6416,3512),
  ABISELECT(5936,3244),
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20177C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C11D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C69S20177C11__9S20177C16[] = {
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C69S20177C11__9S20177C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C69S20177C11__9S20177C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C69S20177C11__9S20177C16[] = {
  0,
  ABISELECT(-5552,-3040),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN9S20177C12D1Ev();
extern void _ZN9S20177C12D0Ev();
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C129S20177C11__9S20177C16[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN9S20177C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
extern void _ZN9S20177C13D1Ev();
extern void _ZN9S20177C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C139S20177C129S20177C11__9S20177C16[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN9S20177C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C139S20177C129S20177C11__9S20177C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C139S20177C129S20177C11__9S20177C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C139S20177C129S20177C11__9S20177C16[] = {
  0,
  ABISELECT(-5072,-2772),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev)();
extern void ABISELECT(_ZThn5456_N9S20177C13D1Ev,_ZThn2976_N9S20177C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev)();
extern void ABISELECT(_ZThn5456_N9S20177C13D0Ev,_ZThn2976_N9S20177C13D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C139S20177C129S20177C11__9S20177C16[] = {
  0,
  ABISELECT(-5456,-2976),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2976),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C129S20177C11__9S20177C16[] = {
  ABISELECT(744,432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C149S20177C129S20177C11__9S20177C16[] = {
  0,
  ABISELECT(-744,-432),
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C129S20177C11__9S20177C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C129S20177C11__9S20177C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C129S20177C11__9S20177C16[] = {
  0,
  ABISELECT(-5072,-2772),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev)();
extern void ABISELECT(_ZThn5456_N9S20177C12D1Ev,_ZThn2976_N9S20177C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev)();
extern void ABISELECT(_ZThn5456_N9S20177C12D0Ev,_ZThn2976_N9S20177C12D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C129S20177C11__9S20177C16[] = {
  0,
  ABISELECT(-5456,-2976),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2976),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C14__9S20177C129S20177C11__9S20177C16[] = {
  ABISELECT(744,432),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C11__9S20177C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C11__9S20177C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C11__9S20177C16[] = {
  0,
  ABISELECT(-5552,-3040),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void ABISELECT(_ZThn480_N9S20177C11D1Ev,_ZThn268_N9S20177C11D1Ev)();
extern void ABISELECT(_ZThn480_N9S20177C11D0Ev,_ZThn268_N9S20177C11D0Ev)();
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C12__9S20177C11__9S20177C16[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20177C11D1Ev,_ZThn268_N9S20177C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20177C11D0Ev,_ZThn268_N9S20177C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C11D1Ev,_ZTv0_n32_N9S20177C11D1Ev)();
extern void ABISELECT(_ZThn5936_N9S20177C11D1Ev,_ZThn3244_N9S20177C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C11D0Ev,_ZTv0_n32_N9S20177C11D0Ev)();
extern void ABISELECT(_ZThn5936_N9S20177C11D0Ev,_ZThn3244_N9S20177C11D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A1__9S20177C11__9S20177C16[] = {
  0,
  ABISELECT(-5936,-3244),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5936,-3244),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C11D1Ev,_ZTv0_n32_N9S20177C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C11D0Ev,_ZTv0_n32_N9S20177C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C12__9S20177C11__9S20177C16[] = {
  ABISELECT(744,432),
  ABISELECT(-4808,-2608),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C7__9S20177C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C7__9S20177C16[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C16[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C8__9S20177C16[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A1__9S20177C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6__A1__9S20177C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6__A1__9S20177C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C6__A1__9S20177C16[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTT_ENTRY vtt_S20177C16[] = {
  {&(_ZTV9S20177C16[10]),  10,78},
  {&(_tg__ZTV8S20177C6__A__9S20177C16[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C6__A__9S20177C16[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C6__A__9S20177C16[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C6__A__9S20177C16[3]),  3,4},
  {&(_ZTV9S20177C16[27]),  27,78},
  {&(_ZTV9S20177C16[49]),  49,78},
  {&(_ZTV9S20177C16[55]),  55,78},
  {&(_ZTV9S20177C16[60]),  60,78},
  {&(_ZTV9S20177C16[38]),  38,78},
  {&(_ZTV9S20177C16[70]),  70,78},
  {&(_ZTV9S20177C16[44]),  44,78},
  {&(_ZTV9S20177C16[77]),  77,78},
  {&(_tg__ZTV9S20177C11__9S20177C16[8]),  8,12},
  {&(_tg__ZTV8S20177C69S20177C11__9S20177C16[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C69S20177C11__9S20177C16[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C69S20177C11__9S20177C16[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C69S20177C11__9S20177C16[3]),  3,4},
  {&(_tg__ZTV9S20177C129S20177C11__9S20177C16[7]),  7,10},
  {&(_tg__ZTV9S20177C139S20177C129S20177C11__9S20177C16[7]),  7,9},
  {&(_tg__ZTV8S20177C7__9S20177C139S20177C129S20177C11__9S20177C16[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C139S20177C129S20177C11__9S20177C16[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C139S20177C129S20177C11__9S20177C16[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C139S20177C129S20177C11__9S20177C16[9]),  9,13},
  {&(_tg__ZTV9S20177C149S20177C129S20177C11__9S20177C16[3]),  3,3},
  {&(_tg__ZTV8S20177C2__9S20177C149S20177C129S20177C11__9S20177C16[3]),  3,4},
  {&(_tg__ZTV8S20177C7__9S20177C129S20177C11__9S20177C16[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C129S20177C11__9S20177C16[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C129S20177C11__9S20177C16[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C129S20177C11__9S20177C16[9]),  9,13},
  {&(_tg__ZTV9S20177C14__9S20177C129S20177C11__9S20177C16[3]),  3,3},
  {&(_tg__ZTV8S20177C7__9S20177C11__9S20177C16[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C11__9S20177C16[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C11__9S20177C16[3]),  3,4},
  {&(_tg__ZTV9S20177C12__9S20177C11__9S20177C16[7]),  7,10},
  {&(_tg__ZTV8S20177C6__A1__9S20177C11__9S20177C16[9]),  9,13},
  {&(_tg__ZTV9S20177C149S20177C12__9S20177C11__9S20177C16[3]),  3,3},
  {&(_tg__ZTV8S20177C7__9S20177C16[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C7__9S20177C16[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C7__9S20177C16[3]),  3,4},
  {&(_tg__ZTV8S20177C8__9S20177C16[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C8__9S20177C16[3]),  3,4},
  {&(_tg__ZTV8S20177C6__A1__9S20177C16[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C6__A1__9S20177C16[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C6__A1__9S20177C16[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C6__A1__9S20177C16[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20177C16[];
extern  VTBL_ENTRY _ZTV9S20177C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C16[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C11D0Ev,_ZTv0_n32_N9S20177C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S20177C11D0Ev,_ZThn3244_N9S20177C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C11D1Ev,_ZTv0_n32_N9S20177C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S20177C11D1Ev,_ZThn3244_N9S20177C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20177C12D0Ev,_ZThn2976_N9S20177C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20177C12D1Ev,_ZThn2976_N9S20177C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20177C13D0Ev,_ZThn2976_N9S20177C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20177C13D1Ev,_ZThn2976_N9S20177C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C16D0Ev,_ZTv0_n32_N9S20177C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30368_N9S20177C16D0Ev,_ZThn16652_N9S20177C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C16D1Ev,_ZTv0_n32_N9S20177C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30368_N9S20177C16D1Ev,_ZThn16652_N9S20177C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C16D0Ev,_ZTv0_n40_N9S20177C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24432_N9S20177C16D0Ev,_ZThn13408_N9S20177C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C16D1Ev,_ZTv0_n40_N9S20177C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24432_N9S20177C16D1Ev,_ZThn13408_N9S20177C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20177C16 = {  "S20177C16", // class name
  bases_S20177C16, 21,
  &(vtc_S20177C16[0]), // expected_vtbl_contents
  &(vtt_S20177C16[0]), // expected_vtt_contents
  ABISELECT(31040,17016), // object size
  NSPAIRA(_ZTI9S20177C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20177C16),78, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20177C16),46, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C10  : virtual S20177C11 , S20177C16 , S20177C15 , S20177C24 , virtual S20177C12 {
  void *s20177c10f0;
  __tsi64 s20177c10f1;
  void *s20177c10f2[6];
  int s20177c10f3;
  char s20177c10f4;
  int s20177c10f5;
  ::S20177C15 s20177c10f6;
  short s20177c10f7;
  char s20177c10f8;
  long s20177c10f9[5];
  int s20177c10f10;
  virtual  ~S20177C10(); // _ZN9S20177C10D2Ev
  virtual void  v13(); // _ZN9S20177C103v13Ev
  virtual void  v14(); // _ZN9S20177C103v14Ev
  virtual void  v15(); // _ZN9S20177C103v15Ev
  S20177C10(); // tgen
};
//SIG(-1 S20177C10) C1{ VBC2{ BC3{ VBC4{ VBC5{ BC6{ v4 Fi Fp FC7{ m Fp[2]}} VBC8{ v5 Fi[6] Fc:2 FD Fp[2] Fi FD FC9{} FC7 FC7[9] Fp FC6 FC6} VBC7 v6 Fp FL Fc[2] FC8 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC8 BC7 vd v7 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC10{ BC11{ VBC4 VBC3 vd Fl Fp FC5 Fp Fs Fl Fi FL FC5[4] Fi} BC12{ VBC8 Fp Fs Fl Fi:6 Fp[2]} vd v8 FL FD FC9 Fi[9] Fs Fc:5} VBC13{ m Fl FC7[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} BC14{ VBC2 BC3 VBC15{ v9 Fl Fc Fs[2]} BC7 vd v10 FC16{ BC17{ VBC18{ VBC19{ BC20{ v13 Fi Fp FC7} VBC21{ v14 Fi[6] Fc:2 FD Fp[2] Fi FD FC9 FC7 FC7[9] Fp FC20 FC20} VBC7 v15 Fp FL Fc[2] FC21 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC21 BC7 vd v16 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC9 Fp Fi Fc[8] Fs Fi} FD Fi FC22{ VBC23{ BC24{ VBC6 VBC7 BC5 BC8 vd v18 FL:25 Fp Fi[3] FC7} vd Fp Fi Fp Fi[7] FC4} VBC24 vd v17 Fi[2] Fs[10] Fi FC9 Fi:32 Fi FC9 Fp Fi:2 Fi FD} Fc Fl FC9[8] Fi:18 Fi FC11 FC25{ BC24 VBC5 VBC26{ VBC27{ VBC8 VBC3 v11 v12 FC3[7] Fi Fs Fi FC5 Fl[9]} vd Fc Fi[3]} vd v19 v20 FD[2] FC9 Fi:16 Fi:3} FC9} BC13 BC27 VBC10 vd v1 v2 v3 Fp FL Fp[6] Fi Fc Fi FC13 Fs Fc Fl[5] Fi}


 S20177C10 ::~S20177C10(){ note_dtor("S20177C10", this);}
void  S20177C10 ::v13(){vfunc_called(this, "_ZN9S20177C103v13Ev");}
void  S20177C10 ::v14(){vfunc_called(this, "_ZN9S20177C103v14Ev");}
void  S20177C10 ::v15(){vfunc_called(this, "_ZN9S20177C103v15Ev");}
S20177C10 ::S20177C10(){ note_ctor("S20177C10", this);} // tgen

static void Test_S20177C10()
{
  extern Class_Descriptor cd_S20177C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2931,6422)];
    init_test(&cd_S20177C10, buf);
    S20177C10 *dp, &lv = *(dp=new (buf) S20177C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(46880,25684), "sizeof(S20177C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C10)");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*), ABISELECT(40896,22428), "S20177C10");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*), ABISELECT(41360,22684), "S20177C10");
    check_base_class_offset(lv, (S20177C2*)(S20177C14*)(S20177C12*)(S20177C11*), ABISELECT(41360,22684), "S20177C10");
    /*is_ambiguous_... S20177C24::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C24*), ABISELECT(41360,22684), "S20177C10");
    /*is_ambiguous_... S20177C10::S20177C12 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C14*)(S20177C12*), ABISELECT(41360,22684), "S20177C10");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*), ABISELECT(41728,22880), "S20177C10");
    check_base_class_offset(lv, (S20177C8*)(S20177C7*), ABISELECT(40896,22428), "S20177C10");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C6*)(S20177C11*), ABISELECT(40792,22372), "S20177C10");
    check_base_class_offset(lv, (S20177C7*)(S20177C13*)(S20177C12*)(S20177C11*), ABISELECT(40792,22372), "S20177C10");
    /*is_ambiguous_... S20177C10::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C6*), ABISELECT(40792,22372), "S20177C10");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C6*)(S20177C16*), ABISELECT(40792,22372), "S20177C10");
    /*is_ambiguous_... S20177C10::S20177C12 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C13*)(S20177C12*), ABISELECT(40792,22372), "S20177C10");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*)(S20177C11*), ABISELECT(35808,19644), "S20177C10");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*)(S20177C11*), ABISELECT(36176,19840), "S20177C10");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C6*)(S20177C11*), ABISELECT(35808,19644), "S20177C10");
    /*is_ambiguous_... S20177C10::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*), ABISELECT(41744,22888), "S20177C10");
    /*is_ambiguous_... S20177C10::S20177C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*), ABISELECT(42112,23084), "S20177C10");
    check_base_class_offset(lv, (S20177C6*)(S20177C13*)(S20177C12*)(S20177C11*), ABISELECT(41744,22888), "S20177C10");
    check_base_class_offset(lv, (S20177C6*)(S20177C24*), ABISELECT(41744,22888), "S20177C10");
    /*is_ambiguous_... S20177C10::S20177C12 */ AMB_check_base_class_offset(lv, (S20177C6*)(S20177C13*)(S20177C12*), ABISELECT(41744,22888), "S20177C10");
    check_base_class_offset(lv, (S20177C13*)(S20177C12*)(S20177C11*), ABISELECT(36288,19912), "S20177C10");
    check_base_class_offset(lv, (S20177C14*)(S20177C12*)(S20177C11*), ABISELECT(40616,22252), "S20177C10");
    check_base_class_offset(lv, (S20177C12*)(S20177C11*), ABISELECT(36288,19912), "S20177C10");
    check_base_class_offset(lv, (S20177C15*)(S20177C11*), ABISELECT(42224,23156), "S20177C10");
    check_base_class_offset(lv, (S20177C11*), ABISELECT(35808,19644), "S20177C10");
    check_base_class_offset(lv, (S20177C11*)(S20177C16*), ABISELECT(35808,19644), "S20177C10");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*)(S20177C16*), 0, "S20177C10");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*)(S20177C16*), ABISELECT(368,196), "S20177C10");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C6*)(S20177C16*), 0, "S20177C10");
    check_base_class_offset(lv, (S20177C17*)(S20177C16*), ABISELECT(42384,23236), "S20177C10");
    /*is_ambiguous_... S20177C16::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C16*), ABISELECT(480,268), "S20177C10");
    check_base_class_offset(lv, (S20177C16*), 0, "S20177C10");
    /*is_ambiguous_... S20177C10::S20177C15 */ AMB_check_base_class_offset(lv, (S20177C15*), ABISELECT(24424,13408), "S20177C10");
    check_base_class_offset(lv, (S20177C24*), ABISELECT(24592,13488), "S20177C10");
    /*is_ambiguous_... S20177C10::S20177C12 */ AMB_check_base_class_offset(lv, (S20177C13*)(S20177C12*), ABISELECT(42416,23252), "S20177C10");
    /*is_ambiguous_... S20177C10::S20177C12 */ AMB_check_base_class_offset(lv, (S20177C14*)(S20177C12*), ABISELECT(46744,25592), "S20177C10");
    /*is_ambiguous_... S20177C10::S20177C12 */ AMB_check_base_class_offset(lv, (S20177C12*), ABISELECT(42416,23252), "S20177C10");
    check_field_offset(lv, s20177c10f0, ABISELECT(35512,19488), "S20177C10.s20177c10f0");
    check_field_offset(lv, s20177c10f1, ABISELECT(35520,19492), "S20177C10.s20177c10f1");
    check_field_offset(lv, s20177c10f2, ABISELECT(35528,19500), "S20177C10.s20177c10f2");
    check_field_offset(lv, s20177c10f3, ABISELECT(35576,19524), "S20177C10.s20177c10f3");
    check_field_offset(lv, s20177c10f4, ABISELECT(35580,19528), "S20177C10.s20177c10f4");
    check_field_offset(lv, s20177c10f5, ABISELECT(35584,19532), "S20177C10.s20177c10f5");
    check_field_offset(lv, s20177c10f6, ABISELECT(35592,19536), "S20177C10.s20177c10f6");
    check_field_offset(lv, s20177c10f7, ABISELECT(35752,19616), "S20177C10.s20177c10f7");
    check_field_offset(lv, s20177c10f8, ABISELECT(35754,19618), "S20177C10.s20177c10f8");
    check_field_offset(lv, s20177c10f9, ABISELECT(35760,19620), "S20177C10.s20177c10f9");
    check_field_offset(lv, s20177c10f10, ABISELECT(35800,19640), "S20177C10.s20177c10f10");
    test_class_info(&lv, &cd_S20177C10);
    dp->~S20177C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C10(Test_S20177C10, "S20177C10", ABISELECT(46880,25684));

#else // __cplusplus

extern void _ZN9S20177C10C1Ev();
extern void _ZN9S20177C10D2Ev();
Name_Map name_map_S20177C10[] = {
  NSPAIR(_ZN9S20177C10C1Ev),
  NSPAIR(_ZN9S20177C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C7;
extern VTBL_ENTRY _ZTI8S20177C7[];
extern  VTBL_ENTRY _ZTV8S20177C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C7[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C13;
extern VTBL_ENTRY _ZTI9S20177C13[];
extern  VTBL_ENTRY _ZTV9S20177C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C13[];
extern Class_Descriptor cd_S20177C14;
extern VTBL_ENTRY _ZTI9S20177C14[];
extern  VTBL_ENTRY _ZTV9S20177C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C14[];
extern Class_Descriptor cd_S20177C12;
extern VTBL_ENTRY _ZTI9S20177C12[];
extern  VTBL_ENTRY _ZTV9S20177C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C12[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
extern Class_Descriptor cd_S20177C11;
extern VTBL_ENTRY _ZTI9S20177C11[];
extern  VTBL_ENTRY _ZTV9S20177C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C11[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C17;
extern VTBL_ENTRY _ZTI9S20177C17[];
extern  VTBL_ENTRY _ZTV9S20177C17[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C16;
extern VTBL_ENTRY _ZTI9S20177C16[];
extern  VTBL_ENTRY _ZTV9S20177C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C16[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
extern Class_Descriptor cd_S20177C24;
extern VTBL_ENTRY _ZTI9S20177C24[];
extern  VTBL_ENTRY _ZTV9S20177C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C24[];
extern Class_Descriptor cd_S20177C13;
extern VTBL_ENTRY _ZTI9S20177C13[];
extern  VTBL_ENTRY _ZTV9S20177C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C13[];
extern Class_Descriptor cd_S20177C14;
extern VTBL_ENTRY _ZTI9S20177C14[];
extern  VTBL_ENTRY _ZTV9S20177C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C14[];
extern Class_Descriptor cd_S20177C12;
extern VTBL_ENTRY _ZTI9S20177C12[];
extern  VTBL_ENTRY _ZTV9S20177C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C12[];
static Base_Class bases_S20177C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C5,    ABISELECT(40896,22428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C2,    ABISELECT(41360,22684), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(41728,22880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C8,    ABISELECT(40896,22428), //bcp->offset
    64, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20177C7,    ABISELECT(40792,22372), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20177C2,    ABISELECT(35808,19644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(36176,19840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(35808,19644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20177C2,    ABISELECT(41744,22888), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(42112,23084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(41744,22888), //bcp->offset
    76, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20177C13,    ABISELECT(36288,19912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20177C14,    ABISELECT(40616,22252), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20177C12,    ABISELECT(36288,19912), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20177C15,    ABISELECT(42224,23156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C11,    ABISELECT(35808,19644), //bcp->offset
    30, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20177C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20177C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20177C17,    ABISELECT(42384,23236), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(480,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
    21, //immediately_derived
  0, 0},
  {&cd_S20177C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C15,    ABISELECT(24424,13408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20177C24,    ABISELECT(24592,13488), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C13,    ABISELECT(42416,23252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20177C14,    ABISELECT(46744,25592), //bcp->offset
    105, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20177C12,    ABISELECT(42416,23252), //bcp->offset
    93, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20177C10[];
extern void _ZN8S20177C22v4Ev();
extern void _ZN9S20177C10D1Ev();
extern void _ZN9S20177C10D0Ev();
extern void _ZN8S20177C62v6Ev();
extern void _ZN9S20177C163v10Ev();
extern void _ZN9S20177C103v13Ev();
extern void _ZN9S20177C103v14Ev();
extern void _ZN9S20177C103v15Ev();
extern void _ZN9S20177C243v11Ev();
extern void _ZN9S20177C243v12Ev();
extern void ABISELECT(_ZThn24592_N9S20177C10D1Ev,_ZThn13488_N9S20177C10D1Ev)();
extern void ABISELECT(_ZThn24592_N9S20177C10D0Ev,_ZThn13488_N9S20177C10D0Ev)();
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n80_N9S20177C10D1Ev,_ZTv0_n40_N9S20177C10D1Ev)();
extern void ABISELECT(_ZThn35808_N9S20177C10D1Ev,_ZThn19644_N9S20177C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20177C10D0Ev,_ZTv0_n40_N9S20177C10D0Ev)();
extern void ABISELECT(_ZThn35808_N9S20177C10D0Ev,_ZThn19644_N9S20177C10D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
extern void ABISELECT(_ZTvn480_n80_N9S20177C10D1Ev,_ZTvn268_n40_N9S20177C10D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N9S20177C10D0Ev,_ZTvn268_n40_N9S20177C10D0Ev)();
extern void _ZN9S20177C122v8Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C10D1Ev,_ZTv0_n32_N9S20177C10D1Ev)();
extern void ABISELECT(_ZThn41744_N9S20177C10D1Ev,_ZThn22888_N9S20177C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C10D0Ev,_ZTv0_n32_N9S20177C10D0Ev)();
extern void ABISELECT(_ZThn41744_N9S20177C10D0Ev,_ZThn22888_N9S20177C10D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
extern void _ZN9S20177C172v9Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C10D1Ev,_ZTv0_n32_N9S20177C10D1Ev)();
extern void ABISELECT(_ZThn42416_N9S20177C10D1Ev,_ZThn23252_N9S20177C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C10D0Ev,_ZTv0_n32_N9S20177C10D0Ev)();
extern void ABISELECT(_ZThn42416_N9S20177C10D0Ev,_ZThn23252_N9S20177C10D0Ev)() __attribute__((weak));
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY vtc_S20177C10[] = {
  ABISELECT(42416,23252),
  ABISELECT(42384,23236),
  ABISELECT(42224,23156),
  ABISELECT(41744,22888),
  ABISELECT(35808,19644),
  ABISELECT(41728,22880),
  ABISELECT(41360,22684),
  ABISELECT(40896,22428),
  ABISELECT(40792,22372),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20177C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C10D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  (VTBL_ENTRY)&_ZN9S20177C163v10Ev,
  (VTBL_ENTRY)&_ZN9S20177C103v13Ev,
  (VTBL_ENTRY)&_ZN9S20177C103v14Ev,
  (VTBL_ENTRY)&_ZN9S20177C103v15Ev,
  ABISELECT(17136,9392),
  ABISELECT(16304,8940),
  ABISELECT(16200,8884),
  ABISELECT(17152,9400),
  ABISELECT(16768,9196),
  ABISELECT(-24592,-13488),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN9S20177C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20177C243v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24592_N9S20177C10D1Ev,_ZThn13488_N9S20177C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24592_N9S20177C10D0Ev,_ZThn13488_N9S20177C10D0Ev),
  ABISELECT(480,268),
  0,
  ABISELECT(-35808,-19644),
  0,
  ABISELECT(6416,3512),
  ABISELECT(5936,3244),
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  ABISELECT(-35808,-19644),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C10D1Ev,_ZTv0_n40_N9S20177C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C10D0Ev,_ZTv0_n40_N9S20177C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-36288,-19912),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20177C10D1Ev,_ZTvn268_n40_N9S20177C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20177C10D0Ev,_ZTvn268_n40_N9S20177C10D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
  ABISELECT(744,432),
  ABISELECT(-40616,-22252),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-40792,-22372),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-40896,-22428),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  0,
  ABISELECT(-41360,-22684),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  0,
  ABISELECT(-41744,-22888),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-41744,-22888),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C10D1Ev,_ZTv0_n32_N9S20177C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C10D0Ev,_ZTv0_n32_N9S20177C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  0,
  ABISELECT(-42384,-23236),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN9S20177C172v9Ev,
  0,
  ABISELECT(-42416,-23252),
  ABISELECT(-672,-364),
  ABISELECT(-688,-372),
  ABISELECT(-1056,-568),
  ABISELECT(-1520,-824),
  ABISELECT(-1624,-880),
  ABISELECT(-42416,-23252),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C10D1Ev,_ZTv0_n32_N9S20177C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C10D0Ev,_ZTv0_n32_N9S20177C10D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
  ABISELECT(-5384,-2908),
  ABISELECT(-46744,-25592),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
};
extern VTBL_ENTRY _ZTV9S20177C10[];
extern void _ZN8S20177C22v4Ev();
extern void _ZN9S20177C16D1Ev();
extern void _ZN9S20177C16D0Ev();
extern void _ZN8S20177C62v6Ev();
extern void _ZN9S20177C163v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C16__9S20177C10[] = {
  ABISELECT(42384,23236),
  ABISELECT(42224,23156),
  ABISELECT(41744,22888),
  ABISELECT(35808,19644),
  ABISELECT(41728,22880),
  ABISELECT(41360,22684),
  ABISELECT(40896,22428),
  ABISELECT(40792,22372),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20177C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C16D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  (VTBL_ENTRY)&_ZN9S20177C163v10Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C69S20177C16__A2__9S20177C10[] = {
  ABISELECT(41728,22880),
  ABISELECT(41360,22684),
  ABISELECT(40896,22428),
  ABISELECT(40792,22372),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C69S20177C16__A2__9S20177C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-40792,-22372),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C69S20177C16__A2__9S20177C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-40896,-22428),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C69S20177C16__A2__9S20177C10[] = {
  0,
  ABISELECT(-41360,-22684),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n80_N9S20177C16D1Ev,_ZTv0_n40_N9S20177C16D1Ev)();
extern void ABISELECT(_ZThn35808_N9S20177C16D1Ev,_ZThn19644_N9S20177C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20177C16D0Ev,_ZTv0_n40_N9S20177C16D0Ev)();
extern void ABISELECT(_ZThn35808_N9S20177C16D0Ev,_ZThn19644_N9S20177C16D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C11__9S20177C16__9S20177C10[] = {
  ABISELECT(480,268),
  0,
  ABISELECT(-35808,-19644),
  0,
  ABISELECT(6416,3512),
  ABISELECT(5936,3244),
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  ABISELECT(-35808,-19644),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C16D1Ev,_ZTv0_n40_N9S20177C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C16D0Ev,_ZTv0_n40_N9S20177C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C16__9S20177C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-40792,-22372),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C16__9S20177C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-40896,-22428),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C16__9S20177C10[] = {
  0,
  ABISELECT(-41360,-22684),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void ABISELECT(_ZTvn480_n80_N9S20177C16D1Ev,_ZTvn268_n40_N9S20177C16D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N9S20177C16D0Ev,_ZTvn268_n40_N9S20177C16D0Ev)();
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C129S20177C11__9S20177C16__9S20177C10[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-36288,-19912),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20177C16D1Ev,_ZTvn268_n40_N9S20177C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20177C16D0Ev,_ZTvn268_n40_N9S20177C16D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C16D1Ev,_ZTv0_n32_N9S20177C16D1Ev)();
extern void ABISELECT(_ZThn41744_N9S20177C16D1Ev,_ZThn22888_N9S20177C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C16D0Ev,_ZTv0_n32_N9S20177C16D0Ev)();
extern void ABISELECT(_ZThn41744_N9S20177C16D0Ev,_ZThn22888_N9S20177C16D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A1__9S20177C16__9S20177C10[] = {
  0,
  ABISELECT(-41744,-22888),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-41744,-22888),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C16D1Ev,_ZTv0_n32_N9S20177C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C16D0Ev,_ZTv0_n32_N9S20177C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C129S20177C11__9S20177C16__9S20177C10[] = {
  ABISELECT(744,432),
  ABISELECT(-40616,-22252),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
};
extern void _ZN9S20177C172v9Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C17__9S20177C16__9S20177C10[] = {
  0,
  ABISELECT(-42384,-23236),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN9S20177C172v9Ev,
};
extern void _ZN9S20177C243v11Ev();
extern void _ZN9S20177C243v12Ev();
extern void _ZN9S20177C24D1Ev();
extern void _ZN9S20177C24D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C24__9S20177C10[] = {
  ABISELECT(17136,9392),
  ABISELECT(16304,8940),
  ABISELECT(16200,8884),
  ABISELECT(17152,9400),
  ABISELECT(16768,9196),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN9S20177C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20177C243v12Ev,
  (VTBL_ENTRY)&_ZN9S20177C24D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C24D0Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C24__9S20177C10[] = {
  0,
  ABISELECT(-16768,-9196),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev)();
extern void ABISELECT(_ZThn17152_N9S20177C24D1Ev,_ZThn9400_N9S20177C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev)();
extern void ABISELECT(_ZThn17152_N9S20177C24D0Ev,_ZThn9400_N9S20177C24D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C24__9S20177C10[] = {
  0,
  ABISELECT(-17152,-9400),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-17152,-9400),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C24__9S20177C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-16200,-8884),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C24__9S20177C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-16304,-8940),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN9S20177C11D1Ev();
extern void _ZN9S20177C11D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C11__9S20177C10[] = {
  ABISELECT(6416,3512),
  ABISELECT(5936,3244),
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20177C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C11D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C69S20177C11__9S20177C10[] = {
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C69S20177C11__9S20177C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C69S20177C11__9S20177C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C69S20177C11__9S20177C10[] = {
  0,
  ABISELECT(-5552,-3040),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN9S20177C12D1Ev();
extern void _ZN9S20177C12D0Ev();
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C129S20177C11__9S20177C10[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN9S20177C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
extern void _ZN9S20177C13D1Ev();
extern void _ZN9S20177C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C139S20177C129S20177C11__9S20177C10[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN9S20177C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C139S20177C129S20177C11__9S20177C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C139S20177C129S20177C11__9S20177C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C139S20177C129S20177C11__9S20177C10[] = {
  0,
  ABISELECT(-5072,-2772),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev)();
extern void ABISELECT(_ZThn5456_N9S20177C13D1Ev,_ZThn2976_N9S20177C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev)();
extern void ABISELECT(_ZThn5456_N9S20177C13D0Ev,_ZThn2976_N9S20177C13D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C139S20177C129S20177C11__9S20177C10[] = {
  0,
  ABISELECT(-5456,-2976),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2976),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C129S20177C11__9S20177C10[] = {
  ABISELECT(744,432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C149S20177C129S20177C11__9S20177C10[] = {
  0,
  ABISELECT(-744,-432),
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C129S20177C11__9S20177C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C129S20177C11__9S20177C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C129S20177C11__9S20177C10[] = {
  0,
  ABISELECT(-5072,-2772),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev)();
extern void ABISELECT(_ZThn5456_N9S20177C12D1Ev,_ZThn2976_N9S20177C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev)();
extern void ABISELECT(_ZThn5456_N9S20177C12D0Ev,_ZThn2976_N9S20177C12D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C129S20177C11__9S20177C10[] = {
  0,
  ABISELECT(-5456,-2976),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2976),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C14__9S20177C129S20177C11__9S20177C10[] = {
  ABISELECT(744,432),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C11__9S20177C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C11__9S20177C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C11__9S20177C10[] = {
  0,
  ABISELECT(-5552,-3040),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void ABISELECT(_ZThn480_N9S20177C11D1Ev,_ZThn268_N9S20177C11D1Ev)();
extern void ABISELECT(_ZThn480_N9S20177C11D0Ev,_ZThn268_N9S20177C11D0Ev)();
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C12__9S20177C11__9S20177C10[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20177C11D1Ev,_ZThn268_N9S20177C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20177C11D0Ev,_ZThn268_N9S20177C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C11D1Ev,_ZTv0_n32_N9S20177C11D1Ev)();
extern void ABISELECT(_ZThn5936_N9S20177C11D1Ev,_ZThn3244_N9S20177C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C11D0Ev,_ZTv0_n32_N9S20177C11D0Ev)();
extern void ABISELECT(_ZThn5936_N9S20177C11D0Ev,_ZThn3244_N9S20177C11D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A1__9S20177C11__9S20177C10[] = {
  0,
  ABISELECT(-5936,-3244),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5936,-3244),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C11D1Ev,_ZTv0_n32_N9S20177C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C11D0Ev,_ZTv0_n32_N9S20177C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C12__9S20177C11__9S20177C10[] = {
  ABISELECT(744,432),
  ABISELECT(-4808,-2608),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C7__9S20177C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C7__9S20177C10[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C10[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C8__9S20177C10[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A1__9S20177C10[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6__A1__9S20177C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6__A1__9S20177C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C6__A1__9S20177C10[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN9S20177C12D1Ev();
extern void _ZN9S20177C12D0Ev();
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C12__A1__9S20177C10[] = {
  ABISELECT(-672,-364),
  ABISELECT(-688,-372),
  ABISELECT(-1056,-568),
  ABISELECT(-1520,-824),
  ABISELECT(-1624,-880),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN9S20177C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
extern void _ZN9S20177C13D1Ev();
extern void _ZN9S20177C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C139S20177C12__A1__9S20177C10[] = {
  ABISELECT(-672,-364),
  ABISELECT(-688,-372),
  ABISELECT(-1056,-568),
  ABISELECT(-1520,-824),
  ABISELECT(-1624,-880),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN9S20177C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C139S20177C12__A1__9S20177C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(1624,880),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C139S20177C12__A1__9S20177C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(1520,824),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C139S20177C12__A1__9S20177C10[] = {
  0,
  ABISELECT(1056,568),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev)();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C139S20177C12__A1__9S20177C10[] = {
  0,
  ABISELECT(672,364),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(672,364),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C12__A1__9S20177C10[] = {
  ABISELECT(-5384,-2908),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C149S20177C12__A1__9S20177C10[] = {
  0,
  ABISELECT(5384,2908),
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C12__A1__9S20177C10[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(1624,880),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C12__A1__9S20177C10[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(1520,824),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C12__A1__9S20177C10[] = {
  0,
  ABISELECT(1056,568),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev)();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C12__A1__9S20177C10[] = {
  0,
  ABISELECT(672,364),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(672,364),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C14__9S20177C12__A1__9S20177C10[] = {
  ABISELECT(-5384,-2908),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
};
static  VTT_ENTRY vtt_S20177C10[] = {
  {&(_ZTV9S20177C10[11]),  11,108},
  {&(_tg__ZTV9S20177C16__9S20177C10[10]),  10,15},
  {&(_tg__ZTV8S20177C69S20177C16__A2__9S20177C10[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C69S20177C16__A2__9S20177C10[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C69S20177C16__A2__9S20177C10[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C69S20177C16__A2__9S20177C10[3]),  3,4},
  {&(_tg__ZTV9S20177C11__9S20177C16__9S20177C10[12]),  12,16},
  {&(_tg__ZTV8S20177C7__9S20177C16__9S20177C10[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C16__9S20177C10[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C16__9S20177C10[3]),  3,4},
  {&(_tg__ZTV9S20177C129S20177C11__9S20177C16__9S20177C10[7]),  7,10},
  {&(_tg__ZTV8S20177C6__A1__9S20177C16__9S20177C10[9]),  9,13},
  {&(_tg__ZTV9S20177C149S20177C129S20177C11__9S20177C16__9S20177C10[3]),  3,3},
  {&(_tg__ZTV9S20177C17__9S20177C16__9S20177C10[3]),  3,4},
  {&(_tg__ZTV9S20177C24__9S20177C10[7]),  7,11},
  {&(_tg__ZTV8S20177C2__9S20177C24__9S20177C10[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C24__9S20177C10[9]),  9,13},
  {&(_tg__ZTV8S20177C7__9S20177C24__9S20177C10[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C24__9S20177C10[6]),  6,8},
  {&(_ZTV9S20177C10[42]),  42,108},
  {&(_ZTV9S20177C10[64]),  64,108},
  {&(_ZTV9S20177C10[70]),  70,108},
  {&(_ZTV9S20177C10[75]),  75,108},
  {&(_ZTV9S20177C10[53]),  53,108},
  {&(_ZTV9S20177C10[85]),  85,108},
  {&(_ZTV9S20177C10[59]),  59,108},
  {&(_ZTV9S20177C10[92]),  92,108},
  {&(_ZTV9S20177C10[26]),  26,108},
  {&(_ZTV9S20177C10[102]),  102,108},
  {&(_ZTV9S20177C10[108]),  108,108},
  {&(_tg__ZTV9S20177C11__9S20177C10[8]),  8,12},
  {&(_tg__ZTV8S20177C69S20177C11__9S20177C10[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C69S20177C11__9S20177C10[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C69S20177C11__9S20177C10[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C69S20177C11__9S20177C10[3]),  3,4},
  {&(_tg__ZTV9S20177C129S20177C11__9S20177C10[7]),  7,10},
  {&(_tg__ZTV9S20177C139S20177C129S20177C11__9S20177C10[7]),  7,9},
  {&(_tg__ZTV8S20177C7__9S20177C139S20177C129S20177C11__9S20177C10[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C139S20177C129S20177C11__9S20177C10[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C139S20177C129S20177C11__9S20177C10[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C139S20177C129S20177C11__9S20177C10[9]),  9,13},
  {&(_tg__ZTV9S20177C149S20177C129S20177C11__9S20177C10[3]),  3,3},
  {&(_tg__ZTV8S20177C2__9S20177C149S20177C129S20177C11__9S20177C10[3]),  3,4},
  {&(_tg__ZTV8S20177C7__9S20177C129S20177C11__9S20177C10[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C129S20177C11__9S20177C10[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C129S20177C11__9S20177C10[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C129S20177C11__9S20177C10[9]),  9,13},
  {&(_tg__ZTV9S20177C14__9S20177C129S20177C11__9S20177C10[3]),  3,3},
  {&(_tg__ZTV8S20177C7__9S20177C11__9S20177C10[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C11__9S20177C10[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C11__9S20177C10[3]),  3,4},
  {&(_tg__ZTV9S20177C12__9S20177C11__9S20177C10[7]),  7,10},
  {&(_tg__ZTV8S20177C6__A1__9S20177C11__9S20177C10[9]),  9,13},
  {&(_tg__ZTV9S20177C149S20177C12__9S20177C11__9S20177C10[3]),  3,3},
  {&(_tg__ZTV8S20177C7__9S20177C10[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C7__9S20177C10[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C7__9S20177C10[3]),  3,4},
  {&(_tg__ZTV8S20177C8__9S20177C10[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C8__9S20177C10[3]),  3,4},
  {&(_tg__ZTV8S20177C6__A1__9S20177C10[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C6__A1__9S20177C10[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C6__A1__9S20177C10[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C6__A1__9S20177C10[3]),  3,4},
  {&(_tg__ZTV9S20177C12__A1__9S20177C10[7]),  7,10},
  {&(_tg__ZTV9S20177C139S20177C12__A1__9S20177C10[7]),  7,9},
  {&(_tg__ZTV8S20177C7__9S20177C139S20177C12__A1__9S20177C10[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C139S20177C12__A1__9S20177C10[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C139S20177C12__A1__9S20177C10[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C139S20177C12__A1__9S20177C10[9]),  9,13},
  {&(_tg__ZTV9S20177C149S20177C12__A1__9S20177C10[3]),  3,3},
  {&(_tg__ZTV8S20177C2__9S20177C149S20177C12__A1__9S20177C10[3]),  3,4},
  {&(_tg__ZTV8S20177C7__9S20177C12__A1__9S20177C10[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C12__A1__9S20177C10[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C12__A1__9S20177C10[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C12__A1__9S20177C10[9]),  9,13},
  {&(_tg__ZTV9S20177C14__9S20177C12__A1__9S20177C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20177C10[];
extern  VTBL_ENTRY _ZTV9S20177C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C10[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C11D0Ev,_ZTv0_n32_N9S20177C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S20177C11D0Ev,_ZThn3244_N9S20177C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C11D1Ev,_ZTv0_n32_N9S20177C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S20177C11D1Ev,_ZThn3244_N9S20177C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20177C12D0Ev,_ZThn2976_N9S20177C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20177C12D1Ev,_ZThn2976_N9S20177C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20177C13D0Ev,_ZThn2976_N9S20177C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S20177C13D1Ev,_ZThn2976_N9S20177C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17152_N9S20177C24D0Ev,_ZThn9400_N9S20177C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17152_N9S20177C24D1Ev,_ZThn9400_N9S20177C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C16D0Ev,_ZTv0_n32_N9S20177C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41744_N9S20177C16D0Ev,_ZThn22888_N9S20177C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C16D1Ev,_ZTv0_n32_N9S20177C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41744_N9S20177C16D1Ev,_ZThn22888_N9S20177C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C16D0Ev,_ZTv0_n40_N9S20177C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20177C16D0Ev,_ZThn19644_N9S20177C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C16D1Ev,_ZTv0_n40_N9S20177C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20177C16D1Ev,_ZThn19644_N9S20177C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C10D0Ev,_ZTv0_n32_N9S20177C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn42416_N9S20177C10D0Ev,_ZThn23252_N9S20177C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn41744_N9S20177C10D0Ev,_ZThn22888_N9S20177C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C10D1Ev,_ZTv0_n32_N9S20177C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn42416_N9S20177C10D1Ev,_ZThn23252_N9S20177C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn41744_N9S20177C10D1Ev,_ZThn22888_N9S20177C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C10D0Ev,_ZTv0_n40_N9S20177C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20177C10D0Ev,_ZThn19644_N9S20177C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C10D1Ev,_ZTv0_n40_N9S20177C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20177C10D1Ev,_ZThn19644_N9S20177C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20177C10 = {  "S20177C10", // class name
  bases_S20177C10, 27,
  &(vtc_S20177C10[0]), // expected_vtbl_contents
  &(vtt_S20177C10[0]), // expected_vtt_contents
  ABISELECT(46880,25684), // object size
  NSPAIRA(_ZTI9S20177C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20177C10),108, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20177C10),76, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20177C1  : virtual S20177C2 , S20177C6 , virtual S20177C9 , virtual S20177C10 {
  void *s20177c1f0;
  __tsi64 s20177c1f1;
  __tsi64 s20177c1f2:27;
  __tsi64 s20177c1f3:11;
  ::S20177C12 s20177c1f4;
  ::S20177C16 s20177c1f5;
  __tsu64 s20177c1f6:1;
  __tsi64 s20177c1f7:9;
  int s20177c1f8[2];
  void *s20177c1f9;
  virtual void  v1(); // _ZN8S20177C12v1Ev
  virtual void  v2(); // _ZN8S20177C12v2Ev
  ~S20177C1(); // tgen
  S20177C1(); // tgen
};
//SIG(1 S20177C1) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} BC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} VBC9{ v7 Fp FC7 Fc FC3 FC3 FC3} VBC10{ VBC11{ BC6 BC12{ BC13{ VBC7 VBC6 vd Fl Fp FC8 Fp Fs Fl Fi FL FC8[4] Fi} BC14{ VBC2 Fp Fs Fl Fi:6 Fp[2]} vd v8 FL FD FC3 Fi[9] Fs Fc:5} VBC15{ m Fl FC4[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} BC16{ VBC11 BC6 VBC17{ v9 Fl Fc Fs[2]} BC4 vd v10 FC18{ BC19{ VBC20{ VBC21{ BC22{ v16 Fi Fp FC4} VBC23{ v17 Fi[6] Fc:2 FD Fp[2] Fi FD FC3 FC4 FC4[9] Fp FC22 FC22} VBC4 v18 Fp FL Fc[2] FC23 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC23 BC4 vd v19 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC3 Fp Fi Fc[8] Fs Fi} FD Fi FC24{ VBC25{ BC26{ VBC5 VBC4 BC8 BC2 vd v21 FL:25 Fp Fi[3] FC4} vd Fp Fi Fp Fi[7] FC7} VBC26 vd v20 Fi[2] Fs[10] Fi FC3 Fi:32 Fi FC3 Fp Fi:2 Fi FD} Fc Fl FC3[8] Fi:18 Fi FC13 FC27{ BC26 VBC8 VBC28{ VBC29{ VBC2 VBC6 v11 v12 FC6[7] Fi Fs Fi FC8 Fl[9]} vd Fc Fi[3]} vd v22 v23 FD[2] FC3 Fi:16 Fi:3} FC3} BC15 BC29 VBC12 vd v13 v14 v15 Fp FL Fp[6] Fi Fc Fi FC15 Fs Fc Fl[5] Fi} v1 v2 Fp FL FL:27 FL:11 FC12 FC16 FL:1 FL:9 Fi[2] Fp}


void  S20177C1 ::v1(){vfunc_called(this, "_ZN8S20177C12v1Ev");}
void  S20177C1 ::v2(){vfunc_called(this, "_ZN8S20177C12v2Ev");}
S20177C1 ::~S20177C1(){ note_dtor("S20177C1", this);} // tgen
S20177C1 ::S20177C1(){ note_ctor("S20177C1", this);} // tgen

static void Test_S20177C1()
{
  extern Class_Descriptor cd_S20177C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5334,11688)];
    init_test(&cd_S20177C1, buf);
    S20177C1 *dp, &lv = *(dp=new (buf) S20177C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(85328,46748), "sizeof(S20177C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20177C1)");
    /*is_ambiguous_... S20177C1::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*), ABISELECT(37472,20536), "S20177C1");
    check_base_class_offset(lv, (S20177C2*)(S20177C8*), ABISELECT(37472,20536), "S20177C1");
    check_base_class_offset(lv, (S20177C2*)(S20177C14*)(S20177C12*)(S20177C11*), ABISELECT(37472,20536), "S20177C1");
    /*is_ambiguous_... S20177C24::S20177C2 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C24*)(S20177C10*), ABISELECT(37472,20536), "S20177C1");
    /*is_ambiguous_... S20177C1::S20177C12 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C14*)(S20177C12*), ABISELECT(37472,20536), "S20177C1");
    check_base_class_offset(lv, (S20177C5*)(S20177C8*), ABISELECT(37936,20788), "S20177C1");
    check_base_class_offset(lv, (S281C37_nt*)(S20177C8*), ABISELECT(38392,21044), "S20177C1");
    check_base_class_offset(lv, (S20177C8*)(S20177C7*), ABISELECT(37936,20788), "S20177C1");
    /*is_ambiguous_... S20177C1::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C6*), ABISELECT(37840,20732), "S20177C1");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C6*)(S20177C11*), ABISELECT(37840,20732), "S20177C1");
    check_base_class_offset(lv, (S20177C7*)(S20177C13*)(S20177C12*)(S20177C11*), ABISELECT(37840,20732), "S20177C1");
    /*is_ambiguous_... S20177C1::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C6*), ABISELECT(37840,20732), "S20177C1");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C6*)(S20177C16*)(S20177C10*), ABISELECT(37840,20732), "S20177C1");
    /*is_ambiguous_... S20177C1::S20177C12 */ AMB_check_base_class_offset(lv, (S20177C7*)(S20177C13*)(S20177C12*), ABISELECT(37840,20732), "S20177C1");
    /*is_ambiguous_... S20177C1::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*), 0, "S20177C1");
    /*is_ambiguous_... S20177C1::S20177C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*), ABISELECT(368,196), "S20177C1");
    /*is_ambiguous_... S20177C1::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C6*), 0, "S20177C1");
    check_base_class_offset(lv, (S20177C9*), ABISELECT(38416,21052), "S20177C1");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*)(S20177C11*), ABISELECT(75200,41224), "S20177C1");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*)(S20177C11*), ABISELECT(75568,41420), "S20177C1");
    /*is_ambiguous_... S20177C11::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C6*)(S20177C11*), ABISELECT(75200,41224), "S20177C1");
    /*is_ambiguous_... S20177C1::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*), ABISELECT(80192,43952), "S20177C1");
    /*is_ambiguous_... S20177C1::S20177C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*), ABISELECT(80560,44148), "S20177C1");
    check_base_class_offset(lv, (S20177C6*)(S20177C13*)(S20177C12*)(S20177C11*), ABISELECT(80192,43952), "S20177C1");
    check_base_class_offset(lv, (S20177C6*)(S20177C24*)(S20177C10*), ABISELECT(80192,43952), "S20177C1");
    /*is_ambiguous_... S20177C1::S20177C12 */ AMB_check_base_class_offset(lv, (S20177C6*)(S20177C13*)(S20177C12*), ABISELECT(80192,43952), "S20177C1");
    check_base_class_offset(lv, (S20177C13*)(S20177C12*)(S20177C11*), ABISELECT(75680,41492), "S20177C1");
    check_base_class_offset(lv, (S20177C14*)(S20177C12*)(S20177C11*), ABISELECT(80008,43832), "S20177C1");
    check_base_class_offset(lv, (S20177C12*)(S20177C11*), ABISELECT(75680,41492), "S20177C1");
    check_base_class_offset(lv, (S20177C15*)(S20177C11*), ABISELECT(80672,44220), "S20177C1");
    check_base_class_offset(lv, (S20177C11*)(S20177C10*), ABISELECT(75200,41224), "S20177C1");
    check_base_class_offset(lv, (S20177C11*)(S20177C16*)(S20177C10*), ABISELECT(75200,41224), "S20177C1");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C2*)(S20177C6*)(S20177C16*)(S20177C10*), ABISELECT(39392,21580), "S20177C1");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C6*)(S20177C16*)(S20177C10*), ABISELECT(39760,21776), "S20177C1");
    /*is_ambiguous_... S20177C16::S20177C6 */ AMB_check_base_class_offset(lv, (S20177C6*)(S20177C16*)(S20177C10*), ABISELECT(39392,21580), "S20177C1");
    check_base_class_offset(lv, (S20177C17*)(S20177C16*)(S20177C10*), ABISELECT(80832,44300), "S20177C1");
    /*is_ambiguous_... S20177C16::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20177C16*)(S20177C10*), ABISELECT(39872,21848), "S20177C1");
    check_base_class_offset(lv, (S20177C16*)(S20177C10*), ABISELECT(39392,21580), "S20177C1");
    /*is_ambiguous_... S20177C10::S20177C15 */ AMB_check_base_class_offset(lv, (S20177C15*)(S20177C10*), ABISELECT(63816,34988), "S20177C1");
    check_base_class_offset(lv, (S20177C24*)(S20177C10*), ABISELECT(63984,35068), "S20177C1");
    /*is_ambiguous_... S20177C1::S20177C12 */ AMB_check_base_class_offset(lv, (S20177C13*)(S20177C12*), ABISELECT(80864,44316), "S20177C1");
    /*is_ambiguous_... S20177C1::S20177C12 */ AMB_check_base_class_offset(lv, (S20177C14*)(S20177C12*), ABISELECT(85192,46656), "S20177C1");
    /*is_ambiguous_... S20177C10::S20177C12 */ AMB_check_base_class_offset(lv, (S20177C12*)(S20177C10*), ABISELECT(80864,44316), "S20177C1");
    check_base_class_offset(lv, (S20177C10*), ABISELECT(39392,21580), "S20177C1");
    check_field_offset(lv, s20177c1f0, ABISELECT(480,268), "S20177C1.s20177c1f0");
    check_field_offset(lv, s20177c1f1, ABISELECT(488,272), "S20177C1.s20177c1f1");
    set_bf_and_test(lv, s20177c1f2, ABISELECT(496,280), 0, 27, 1, "S20177C1");
    set_bf_and_test(lv, s20177c1f2, ABISELECT(496,280), 0, 27, hide_sll(1LL<<26), "S20177C1");
    set_bf_and_test(lv, s20177c1f3, ABISELECT(499,283), 3, 11, 1, "S20177C1");
    set_bf_and_test(lv, s20177c1f3, ABISELECT(499,283), 3, 11, hide_sll(1LL<<10), "S20177C1");
    check_field_offset(lv, s20177c1f4, ABISELECT(512,288), "S20177C1.s20177c1f4");
    check_field_offset(lv, s20177c1f5, ABISELECT(6400,3504), "S20177C1.s20177c1f5");
    set_bf_and_test(lv, s20177c1f6, ABISELECT(37440,20520), 0, 1, 1, "S20177C1");
    set_bf_and_test(lv, s20177c1f7, ABISELECT(37440,20520), 1, 9, 1, "S20177C1");
    set_bf_and_test(lv, s20177c1f7, ABISELECT(37440,20520), 1, 9, hide_sll(1LL<<8), "S20177C1");
    check_field_offset(lv, s20177c1f8, ABISELECT(37444,20524), "S20177C1.s20177c1f8");
    check_field_offset(lv, s20177c1f9, ABISELECT(37456,20532), "S20177C1.s20177c1f9");
    test_class_info(&lv, &cd_S20177C1);
    dp->~S20177C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20177C1(Test_S20177C1, "S20177C1", ABISELECT(85328,46748));

#else // __cplusplus

extern void _ZN8S20177C1C1Ev();
extern void _ZN8S20177C1D1Ev();
Name_Map name_map_S20177C1[] = {
  NSPAIR(_ZN8S20177C1C1Ev),
  NSPAIR(_ZN8S20177C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S20177C5;
extern VTBL_ENTRY _ZTI8S20177C5[];
extern  VTBL_ENTRY _ZTV8S20177C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C8;
extern VTBL_ENTRY _ZTI8S20177C8[];
extern  VTBL_ENTRY _ZTV8S20177C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C8[];
extern Class_Descriptor cd_S20177C7;
extern VTBL_ENTRY _ZTI8S20177C7[];
extern  VTBL_ENTRY _ZTV8S20177C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C7[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C9;
extern VTBL_ENTRY _ZTI8S20177C9[];
extern  VTBL_ENTRY _ZTV8S20177C9[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C13;
extern VTBL_ENTRY _ZTI9S20177C13[];
extern  VTBL_ENTRY _ZTV9S20177C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C13[];
extern Class_Descriptor cd_S20177C14;
extern VTBL_ENTRY _ZTI9S20177C14[];
extern  VTBL_ENTRY _ZTV9S20177C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C14[];
extern Class_Descriptor cd_S20177C12;
extern VTBL_ENTRY _ZTI9S20177C12[];
extern  VTBL_ENTRY _ZTV9S20177C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C12[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
extern Class_Descriptor cd_S20177C11;
extern VTBL_ENTRY _ZTI9S20177C11[];
extern  VTBL_ENTRY _ZTV9S20177C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C11[];
extern Class_Descriptor cd_S20177C2;
extern VTBL_ENTRY _ZTI8S20177C2[];
extern  VTBL_ENTRY _ZTV8S20177C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C6;
extern VTBL_ENTRY _ZTI8S20177C6[];
extern  VTBL_ENTRY _ZTV8S20177C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C6[];
extern Class_Descriptor cd_S20177C17;
extern VTBL_ENTRY _ZTI9S20177C17[];
extern  VTBL_ENTRY _ZTV9S20177C17[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20177C16;
extern VTBL_ENTRY _ZTI9S20177C16[];
extern  VTBL_ENTRY _ZTV9S20177C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C16[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
extern Class_Descriptor cd_S20177C24;
extern VTBL_ENTRY _ZTI9S20177C24[];
extern  VTBL_ENTRY _ZTV9S20177C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C24[];
extern Class_Descriptor cd_S20177C13;
extern VTBL_ENTRY _ZTI9S20177C13[];
extern  VTBL_ENTRY _ZTV9S20177C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C13[];
extern Class_Descriptor cd_S20177C14;
extern VTBL_ENTRY _ZTI9S20177C14[];
extern  VTBL_ENTRY _ZTV9S20177C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C14[];
extern Class_Descriptor cd_S20177C12;
extern VTBL_ENTRY _ZTI9S20177C12[];
extern  VTBL_ENTRY _ZTV9S20177C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C12[];
extern Class_Descriptor cd_S20177C10;
extern VTBL_ENTRY _ZTI9S20177C10[];
extern  VTBL_ENTRY _ZTV9S20177C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20177C10[];
static Base_Class bases_S20177C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20177C2,    ABISELECT(37472,20536), //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_S20177C5,    ABISELECT(37936,20788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(38392,21044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C8,    ABISELECT(37936,20788), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20177C7,    ABISELECT(37840,20732), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20177C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    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
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C9,    ABISELECT(38416,21052), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20177C2,    ABISELECT(75200,41224), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(75568,41420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(75200,41224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20177C2,    ABISELECT(80192,43952), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(80560,44148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(80192,43952), //bcp->offset
    108, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20177C13,    ABISELECT(75680,41492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20177C14,    ABISELECT(80008,43832), //bcp->offset
    105, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20177C12,    ABISELECT(75680,41492), //bcp->offset
    95, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20177C15,    ABISELECT(80672,44220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C11,    ABISELECT(75200,41224), //bcp->offset
    79, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20177C2,    ABISELECT(39392,21580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(39760,21776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20177C6,    ABISELECT(39392,21580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20177C17,    ABISELECT(80832,44300), //bcp->offset
    121, //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
    14, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(39872,21848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20177C16,    ABISELECT(39392,21580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20177C15,    ABISELECT(63816,34988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20177C24,    ABISELECT(63984,35068), //bcp->offset
    68, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20177C13,    ABISELECT(80864,44316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20177C14,    ABISELECT(85192,46656), //bcp->offset
    137, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20177C12,    ABISELECT(80864,44316), //bcp->offset
    125, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S20177C10,    ABISELECT(39392,21580), //bcp->offset
    40, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20177C1[];
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C1D1Ev();
extern void _ZN8S20177C1D0Ev();
extern void _ZN8S20177C62v6Ev();
extern void _ZN8S20177C12v1Ev();
extern void _ZN8S20177C12v2Ev();
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
extern void _ZN8S20177C92v7Ev();
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n104_N8S20177C1D1Ev,_ZTv0_n52_N8S20177C1D1Ev)();
extern void ABISELECT(_ZThn39392_N8S20177C1D1Ev,_ZThn21580_N8S20177C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S20177C1D0Ev,_ZTv0_n52_N8S20177C1D0Ev)();
extern void ABISELECT(_ZThn39392_N8S20177C1D0Ev,_ZThn21580_N8S20177C1D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
extern void _ZN9S20177C163v10Ev();
extern void _ZN9S20177C103v13Ev();
extern void _ZN9S20177C103v14Ev();
extern void _ZN9S20177C103v15Ev();
extern void _ZN9S20177C243v11Ev();
extern void _ZN9S20177C243v12Ev();
extern void ABISELECT(_ZTvn24592_n104_N8S20177C1D1Ev,_ZTvn13488_n52_N8S20177C1D1Ev)();
extern void ABISELECT(_ZTvn24592_n104_N8S20177C1D0Ev,_ZTvn13488_n52_N8S20177C1D0Ev)();
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n80_N8S20177C1D1Ev,_ZTv0_n40_N8S20177C1D1Ev)();
extern void ABISELECT(_ZThn75200_N8S20177C1D1Ev,_ZThn41224_N8S20177C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20177C1D0Ev,_ZTv0_n40_N8S20177C1D0Ev)();
extern void ABISELECT(_ZThn75200_N8S20177C1D0Ev,_ZThn41224_N8S20177C1D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
extern void ABISELECT(_ZTvn480_n80_N8S20177C1D1Ev,_ZTvn268_n40_N8S20177C1D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N8S20177C1D0Ev,_ZTvn268_n40_N8S20177C1D0Ev)();
extern void _ZN9S20177C122v8Ev();
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S20177C1D1Ev,_ZTv0_n32_N8S20177C1D1Ev)();
extern void ABISELECT(_ZThn80192_N8S20177C1D1Ev,_ZThn43952_N8S20177C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20177C1D0Ev,_ZTv0_n32_N8S20177C1D0Ev)();
extern void ABISELECT(_ZThn80192_N8S20177C1D0Ev,_ZThn43952_N8S20177C1D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
extern void _ZN9S20177C172v9Ev();
extern void ABISELECT(_ZTv0_n64_N8S20177C1D1Ev,_ZTv0_n32_N8S20177C1D1Ev)();
extern void ABISELECT(_ZThn80864_N8S20177C1D1Ev,_ZThn44316_N8S20177C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20177C1D0Ev,_ZTv0_n32_N8S20177C1D0Ev)();
extern void ABISELECT(_ZThn80864_N8S20177C1D0Ev,_ZThn44316_N8S20177C1D0Ev)() __attribute__((weak));
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY vtc_S20177C1[] = {
  ABISELECT(80864,44316),
  ABISELECT(80832,44300),
  ABISELECT(80672,44220),
  ABISELECT(80192,43952),
  ABISELECT(75200,41224),
  ABISELECT(39392,21580),
  ABISELECT(38416,21052),
  ABISELECT(38392,21044),
  ABISELECT(37472,20536),
  ABISELECT(37936,20788),
  ABISELECT(37840,20732),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20177C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20177C12v2Ev,
  0,
  ABISELECT(-37472,-20536),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(-37840,-20732),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-37936,-20788),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
  0,
  ABISELECT(-38416,-21052),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  (VTBL_ENTRY)&_ZN8S20177C92v7Ev,
  ABISELECT(24592,13488),
  ABISELECT(24592,13488),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-39392,-21580),
  0,
  ABISELECT(41472,22736),
  ABISELECT(41440,22720),
  ABISELECT(41280,22640),
  ABISELECT(40800,22372),
  ABISELECT(35808,19644),
  ABISELECT(-1000,-536),
  ABISELECT(-1920,-1044),
  ABISELECT(-1456,-792),
  ABISELECT(-1552,-848),
  ABISELECT(-39392,-21580),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20177C1D1Ev,_ZTv0_n52_N8S20177C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20177C1D0Ev,_ZTv0_n52_N8S20177C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  (VTBL_ENTRY)&_ZN9S20177C163v10Ev,
  (VTBL_ENTRY)&_ZN9S20177C103v13Ev,
  (VTBL_ENTRY)&_ZN9S20177C103v14Ev,
  (VTBL_ENTRY)&_ZN9S20177C103v15Ev,
  ABISELECT(-25592,-14024),
  ABISELECT(-26048,-14280),
  ABISELECT(-26144,-14336),
  ABISELECT(16208,8884),
  ABISELECT(-26512,-14532),
  ABISELECT(-63984,-35068),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  (VTBL_ENTRY)&_ZN9S20177C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20177C243v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn24592_n104_N8S20177C1D1Ev,_ZTvn13488_n52_N8S20177C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24592_n104_N8S20177C1D0Ev,_ZTvn13488_n52_N8S20177C1D0Ev),
  ABISELECT(480,268),
  0,
  ABISELECT(-75200,-41224),
  0,
  ABISELECT(5472,2996),
  ABISELECT(4992,2728),
  ABISELECT(-36808,-20180),
  ABISELECT(-37728,-20688),
  ABISELECT(-37264,-20436),
  ABISELECT(-37360,-20492),
  ABISELECT(-75200,-41224),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20177C1D1Ev,_ZTv0_n40_N8S20177C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20177C1D0Ev,_ZTv0_n40_N8S20177C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  ABISELECT(4512,2460),
  ABISELECT(-37288,-20448),
  ABISELECT(-38208,-20956),
  ABISELECT(-37744,-20704),
  ABISELECT(-37840,-20760),
  ABISELECT(-75680,-41492),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N8S20177C1D1Ev,_ZTvn268_n40_N8S20177C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N8S20177C1D0Ev,_ZTvn268_n40_N8S20177C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
  ABISELECT(-42536,-23296),
  ABISELECT(-80008,-43832),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  0,
  ABISELECT(-80192,-43952),
  0,
  ABISELECT(-41800,-22908),
  ABISELECT(-42720,-23416),
  ABISELECT(-42256,-23164),
  ABISELECT(-42352,-23220),
  ABISELECT(-80192,-43952),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20177C1D1Ev,_ZTv0_n32_N8S20177C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20177C1D0Ev,_ZTv0_n32_N8S20177C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  0,
  ABISELECT(-80832,-44300),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  (VTBL_ENTRY)&_ZN9S20177C172v9Ev,
  0,
  ABISELECT(-80864,-44316),
  ABISELECT(-672,-364),
  ABISELECT(-42472,-23272),
  ABISELECT(-43392,-23780),
  ABISELECT(-42928,-23528),
  ABISELECT(-43024,-23584),
  ABISELECT(-80864,-44316),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20177C1D1Ev,_ZTv0_n32_N8S20177C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20177C1D0Ev,_ZTv0_n32_N8S20177C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
  ABISELECT(-47720,-26120),
  ABISELECT(-85192,-46656),
  (VTBL_ENTRY)&(_ZTI8S20177C1[0]),
};
extern VTBL_ENTRY _ZTV8S20177C1[];
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A__8S20177C1[] = {
  ABISELECT(38392,21044),
  ABISELECT(37472,20536),
  ABISELECT(37936,20788),
  ABISELECT(37840,20732),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6__A__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(-37840,-20732),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6__A__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-37936,-20788),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C6__A__8S20177C1[] = {
  0,
  ABISELECT(-37472,-20536),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C7__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C7__8S20177C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20177C7[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C1[] = {
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C8__8S20177C1[] = {
  0,
  ABISELECT(464,252),
  (VTBL_ENTRY)&(_ZTI8S20177C8[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN9S20177C10D1Ev();
extern void _ZN9S20177C10D0Ev();
extern void _ZN8S20177C62v6Ev();
extern void _ZN9S20177C163v10Ev();
extern void _ZN9S20177C103v13Ev();
extern void _ZN9S20177C103v14Ev();
extern void _ZN9S20177C103v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C10__8S20177C1[] = {
  ABISELECT(41472,22736),
  ABISELECT(41440,22720),
  ABISELECT(41280,22640),
  ABISELECT(40800,22372),
  ABISELECT(35808,19644),
  ABISELECT(-1000,-536),
  ABISELECT(-1920,-1044),
  ABISELECT(-1456,-792),
  ABISELECT(-1552,-848),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20177C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C10D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  (VTBL_ENTRY)&_ZN9S20177C163v10Ev,
  (VTBL_ENTRY)&_ZN9S20177C103v13Ev,
  (VTBL_ENTRY)&_ZN9S20177C103v14Ev,
  (VTBL_ENTRY)&_ZN9S20177C103v15Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN9S20177C16D1Ev();
extern void _ZN9S20177C16D0Ev();
extern void _ZN8S20177C62v6Ev();
extern void _ZN9S20177C163v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C169S20177C10__8S20177C1[] = {
  ABISELECT(41440,22720),
  ABISELECT(41280,22640),
  ABISELECT(40800,22372),
  ABISELECT(35808,19644),
  ABISELECT(-1000,-536),
  ABISELECT(-1920,-1044),
  ABISELECT(-1456,-792),
  ABISELECT(-1552,-848),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20177C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C16D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
  (VTBL_ENTRY)&_ZN9S20177C163v10Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C69S20177C169S20177C10__A3__8S20177C1[] = {
  ABISELECT(-1000,-536),
  ABISELECT(-1920,-1044),
  ABISELECT(-1456,-792),
  ABISELECT(-1552,-848),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C69S20177C169S20177C10__A3__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(1552,848),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C69S20177C169S20177C10__A3__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(1456,792),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C69S20177C169S20177C10__A3__8S20177C1[] = {
  0,
  ABISELECT(1920,1044),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n80_N9S20177C16D1Ev,_ZTv0_n40_N9S20177C16D1Ev)();
extern void ABISELECT(_ZThn35808_N9S20177C16D1Ev,_ZThn19644_N9S20177C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20177C16D0Ev,_ZTv0_n40_N9S20177C16D0Ev)();
extern void ABISELECT(_ZThn35808_N9S20177C16D0Ev,_ZThn19644_N9S20177C16D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C11__9S20177C169S20177C10__8S20177C1[] = {
  ABISELECT(480,268),
  0,
  ABISELECT(-35808,-19644),
  0,
  ABISELECT(5472,2996),
  ABISELECT(4992,2728),
  ABISELECT(-36808,-20180),
  ABISELECT(-37728,-20688),
  ABISELECT(-37264,-20436),
  ABISELECT(-37360,-20492),
  ABISELECT(-35808,-19644),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C16D1Ev,_ZTv0_n40_N9S20177C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C16D0Ev,_ZTv0_n40_N9S20177C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C169S20177C10__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(1552,848),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C169S20177C10__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(1456,792),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C169S20177C10__8S20177C1[] = {
  0,
  ABISELECT(1920,1044),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void ABISELECT(_ZTvn480_n80_N9S20177C16D1Ev,_ZTvn268_n40_N9S20177C16D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N9S20177C16D0Ev,_ZTvn268_n40_N9S20177C16D0Ev)();
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C129S20177C11__9S20177C169S20177C10__8S20177C1[] = {
  ABISELECT(4512,2460),
  ABISELECT(-37288,-20448),
  ABISELECT(-38208,-20956),
  ABISELECT(-37744,-20704),
  ABISELECT(-37840,-20760),
  ABISELECT(-36288,-19912),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20177C16D1Ev,_ZTvn268_n40_N9S20177C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20177C16D0Ev,_ZTvn268_n40_N9S20177C16D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C16D1Ev,_ZTv0_n32_N9S20177C16D1Ev)();
extern void ABISELECT(_ZThn40800_N9S20177C16D1Ev,_ZThn22372_N9S20177C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C16D0Ev,_ZTv0_n32_N9S20177C16D0Ev)();
extern void ABISELECT(_ZThn40800_N9S20177C16D0Ev,_ZThn22372_N9S20177C16D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A1__9S20177C169S20177C10__8S20177C1[] = {
  0,
  ABISELECT(-40800,-22372),
  0,
  ABISELECT(-41800,-22908),
  ABISELECT(-42720,-23416),
  ABISELECT(-42256,-23164),
  ABISELECT(-42352,-23220),
  ABISELECT(-40800,-22372),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C16D1Ev,_ZTv0_n32_N9S20177C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C16D0Ev,_ZTv0_n32_N9S20177C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C129S20177C11__9S20177C169S20177C10__8S20177C1[] = {
  ABISELECT(-42536,-23296),
  ABISELECT(-40616,-22252),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
};
extern void _ZN9S20177C172v9Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C17__9S20177C169S20177C10__8S20177C1[] = {
  0,
  ABISELECT(-41440,-22720),
  (VTBL_ENTRY)&(_ZTI9S20177C16[0]),
  (VTBL_ENTRY)&_ZN9S20177C172v9Ev,
};
extern void _ZN9S20177C243v11Ev();
extern void _ZN9S20177C243v12Ev();
extern void _ZN9S20177C24D1Ev();
extern void _ZN9S20177C24D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C249S20177C10__8S20177C1[] = {
  ABISELECT(-25592,-14024),
  ABISELECT(-26048,-14280),
  ABISELECT(-26144,-14336),
  ABISELECT(16208,8884),
  ABISELECT(-26512,-14532),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN9S20177C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20177C243v12Ev,
  (VTBL_ENTRY)&_ZN9S20177C24D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C24D0Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C249S20177C10__8S20177C1[] = {
  0,
  ABISELECT(26512,14532),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev)();
extern void ABISELECT(_ZThn16208_N9S20177C24D1Ev,_ZThn8884_N9S20177C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev)();
extern void ABISELECT(_ZThn16208_N9S20177C24D0Ev,_ZThn8884_N9S20177C24D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C249S20177C10__8S20177C1[] = {
  0,
  ABISELECT(-16208,-8884),
  0,
  ABISELECT(-41800,-22908),
  ABISELECT(-42720,-23416),
  ABISELECT(-42256,-23164),
  ABISELECT(-42352,-23220),
  ABISELECT(-16208,-8884),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C249S20177C10__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(26144,14336),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C249S20177C10__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(26048,14280),
  (VTBL_ENTRY)&(_ZTI9S20177C24[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n80_N9S20177C10D1Ev,_ZTv0_n40_N9S20177C10D1Ev)();
extern void ABISELECT(_ZThn35808_N9S20177C10D1Ev,_ZThn19644_N9S20177C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20177C10D0Ev,_ZTv0_n40_N9S20177C10D0Ev)();
extern void ABISELECT(_ZThn35808_N9S20177C10D0Ev,_ZThn19644_N9S20177C10D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C11__9S20177C10__8S20177C1[] = {
  ABISELECT(480,268),
  0,
  ABISELECT(-35808,-19644),
  0,
  ABISELECT(5472,2996),
  ABISELECT(4992,2728),
  ABISELECT(-36808,-20180),
  ABISELECT(-37728,-20688),
  ABISELECT(-37264,-20436),
  ABISELECT(-37360,-20492),
  ABISELECT(-35808,-19644),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C10D1Ev,_ZTv0_n40_N9S20177C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20177C10D0Ev,_ZTv0_n40_N9S20177C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C10__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(1552,848),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C10__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(1456,792),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C10__8S20177C1[] = {
  0,
  ABISELECT(1920,1044),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void ABISELECT(_ZTvn480_n80_N9S20177C10D1Ev,_ZTvn268_n40_N9S20177C10D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N9S20177C10D0Ev,_ZTvn268_n40_N9S20177C10D0Ev)();
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C129S20177C11__9S20177C10__8S20177C1[] = {
  ABISELECT(4512,2460),
  ABISELECT(-37288,-20448),
  ABISELECT(-38208,-20956),
  ABISELECT(-37744,-20704),
  ABISELECT(-37840,-20760),
  ABISELECT(-36288,-19912),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20177C10D1Ev,_ZTvn268_n40_N9S20177C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N9S20177C10D0Ev,_ZTvn268_n40_N9S20177C10D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C10D1Ev,_ZTv0_n32_N9S20177C10D1Ev)();
extern void ABISELECT(_ZThn40800_N9S20177C10D1Ev,_ZThn22372_N9S20177C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C10D0Ev,_ZTv0_n32_N9S20177C10D0Ev)();
extern void ABISELECT(_ZThn40800_N9S20177C10D0Ev,_ZThn22372_N9S20177C10D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A1__9S20177C10__8S20177C1[] = {
  0,
  ABISELECT(-40800,-22372),
  0,
  ABISELECT(-41800,-22908),
  ABISELECT(-42720,-23416),
  ABISELECT(-42256,-23164),
  ABISELECT(-42352,-23220),
  ABISELECT(-40800,-22372),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C10D1Ev,_ZTv0_n32_N9S20177C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C10D0Ev,_ZTv0_n32_N9S20177C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C129S20177C11__9S20177C10__8S20177C1[] = {
  ABISELECT(-42536,-23296),
  ABISELECT(-40616,-22252),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
};
extern void _ZN9S20177C172v9Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C17__9S20177C10__8S20177C1[] = {
  0,
  ABISELECT(-41440,-22720),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN9S20177C172v9Ev,
};
extern void _ZN9S20177C243v11Ev();
extern void _ZN9S20177C243v12Ev();
extern void ABISELECT(_ZThn24592_N9S20177C10D1Ev,_ZThn13488_N9S20177C10D1Ev)();
extern void ABISELECT(_ZThn24592_N9S20177C10D0Ev,_ZThn13488_N9S20177C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20177C24__9S20177C10__8S20177C1[] = {
  ABISELECT(-25592,-14024),
  ABISELECT(-26048,-14280),
  ABISELECT(-26144,-14336),
  ABISELECT(16208,8884),
  ABISELECT(-26512,-14532),
  ABISELECT(-24592,-13488),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&_ZN9S20177C243v11Ev,
  (VTBL_ENTRY)&_ZN9S20177C243v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24592_N9S20177C10D1Ev,_ZThn13488_N9S20177C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24592_N9S20177C10D0Ev,_ZThn13488_N9S20177C10D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S20177C10D1Ev,_ZTv0_n32_N9S20177C10D1Ev)();
extern void ABISELECT(_ZThn41472_N9S20177C10D1Ev,_ZThn22736_N9S20177C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C10D0Ev,_ZTv0_n32_N9S20177C10D0Ev)();
extern void ABISELECT(_ZThn41472_N9S20177C10D0Ev,_ZThn22736_N9S20177C10D0Ev)() __attribute__((weak));
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C12__A1__9S20177C10__8S20177C1[] = {
  0,
  ABISELECT(-41472,-22736),
  ABISELECT(-672,-364),
  ABISELECT(-42472,-23272),
  ABISELECT(-43392,-23780),
  ABISELECT(-42928,-23528),
  ABISELECT(-43024,-23584),
  ABISELECT(-41472,-22736),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C10D1Ev,_ZTv0_n32_N9S20177C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C10D0Ev,_ZTv0_n32_N9S20177C10D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C12__A1__9S20177C10__8S20177C1[] = {
  ABISELECT(-47720,-26120),
  ABISELECT(-45800,-25076),
  (VTBL_ENTRY)&(_ZTI9S20177C10[0]),
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN9S20177C11D1Ev();
extern void _ZN9S20177C11D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C11__8S20177C1[] = {
  ABISELECT(5472,2996),
  ABISELECT(4992,2728),
  ABISELECT(-36808,-20180),
  ABISELECT(-37728,-20688),
  ABISELECT(-37264,-20436),
  ABISELECT(-37360,-20492),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN9S20177C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C11D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C69S20177C11__A1__8S20177C1[] = {
  ABISELECT(-36808,-20180),
  ABISELECT(-37728,-20688),
  ABISELECT(-37264,-20436),
  ABISELECT(-37360,-20492),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C69S20177C11__A1__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(37360,20492),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C69S20177C11__A1__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(37264,20436),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C69S20177C11__A1__8S20177C1[] = {
  0,
  ABISELECT(37728,20688),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN9S20177C12D1Ev();
extern void _ZN9S20177C12D0Ev();
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C129S20177C11__8S20177C1[] = {
  ABISELECT(4512,2460),
  ABISELECT(-37288,-20448),
  ABISELECT(-38208,-20956),
  ABISELECT(-37744,-20704),
  ABISELECT(-37840,-20760),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN9S20177C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
extern void _ZN9S20177C13D1Ev();
extern void _ZN9S20177C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C139S20177C129S20177C11__8S20177C1[] = {
  ABISELECT(4512,2460),
  ABISELECT(-37288,-20448),
  ABISELECT(-38208,-20956),
  ABISELECT(-37744,-20704),
  ABISELECT(-37840,-20760),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN9S20177C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C139S20177C129S20177C11__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(37840,20760),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C139S20177C129S20177C11__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(37744,20704),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C139S20177C129S20177C11__8S20177C1[] = {
  0,
  ABISELECT(38208,20956),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev)();
extern void ABISELECT(_ZThn4512_N9S20177C13D1Ev,_ZThn2460_N9S20177C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev)();
extern void ABISELECT(_ZThn4512_N9S20177C13D0Ev,_ZThn2460_N9S20177C13D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C139S20177C129S20177C11__8S20177C1[] = {
  0,
  ABISELECT(-4512,-2460),
  0,
  ABISELECT(-41800,-22908),
  ABISELECT(-42720,-23416),
  ABISELECT(-42256,-23164),
  ABISELECT(-42352,-23220),
  ABISELECT(-4512,-2460),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C129S20177C11__8S20177C1[] = {
  ABISELECT(-42536,-23296),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C149S20177C129S20177C11__8S20177C1[] = {
  0,
  ABISELECT(42536,23296),
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C129S20177C11__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(37840,20760),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C129S20177C11__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(37744,20704),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C129S20177C11__8S20177C1[] = {
  0,
  ABISELECT(38208,20956),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev)();
extern void ABISELECT(_ZThn4512_N9S20177C12D1Ev,_ZThn2460_N9S20177C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev)();
extern void ABISELECT(_ZThn4512_N9S20177C12D0Ev,_ZThn2460_N9S20177C12D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C129S20177C11__8S20177C1[] = {
  0,
  ABISELECT(-4512,-2460),
  0,
  ABISELECT(-41800,-22908),
  ABISELECT(-42720,-23416),
  ABISELECT(-42256,-23164),
  ABISELECT(-42352,-23220),
  ABISELECT(-4512,-2460),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C14__9S20177C129S20177C11__8S20177C1[] = {
  ABISELECT(-42536,-23296),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C11__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(37360,20492),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C11__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(37264,20436),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C11__8S20177C1[] = {
  0,
  ABISELECT(37728,20688),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void ABISELECT(_ZThn480_N9S20177C11D1Ev,_ZThn268_N9S20177C11D1Ev)();
extern void ABISELECT(_ZThn480_N9S20177C11D0Ev,_ZThn268_N9S20177C11D0Ev)();
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C12__9S20177C11__8S20177C1[] = {
  ABISELECT(4512,2460),
  ABISELECT(-37288,-20448),
  ABISELECT(-38208,-20956),
  ABISELECT(-37744,-20704),
  ABISELECT(-37840,-20760),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20177C11D1Ev,_ZThn268_N9S20177C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S20177C11D0Ev,_ZThn268_N9S20177C11D0Ev),
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C11D1Ev,_ZTv0_n32_N9S20177C11D1Ev)();
extern void ABISELECT(_ZThn4992_N9S20177C11D1Ev,_ZThn2728_N9S20177C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20177C11D0Ev,_ZTv0_n32_N9S20177C11D0Ev)();
extern void ABISELECT(_ZThn4992_N9S20177C11D0Ev,_ZThn2728_N9S20177C11D0Ev)() __attribute__((weak));
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A1__9S20177C11__8S20177C1[] = {
  0,
  ABISELECT(-4992,-2728),
  0,
  ABISELECT(-41800,-22908),
  ABISELECT(-42720,-23416),
  ABISELECT(-42256,-23164),
  ABISELECT(-42352,-23220),
  ABISELECT(-4992,-2728),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C11D1Ev,_ZTv0_n32_N9S20177C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C11D0Ev,_ZTv0_n32_N9S20177C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C12__9S20177C11__8S20177C1[] = {
  ABISELECT(-42536,-23296),
  ABISELECT(-4808,-2608),
  (VTBL_ENTRY)&(_ZTI9S20177C11[0]),
};
extern void _ZN8S20177C22v4Ev();
extern void _ZN8S20177C6D1Ev();
extern void _ZN8S20177C6D0Ev();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__A2__8S20177C1[] = {
  ABISELECT(-41800,-22908),
  ABISELECT(-42720,-23416),
  ABISELECT(-42256,-23164),
  ABISELECT(-42352,-23220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20177C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__8S20177C6__A2__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(42352,23220),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__8S20177C6__A2__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(42256,23164),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__8S20177C6__A2__8S20177C1[] = {
  0,
  ABISELECT(42720,23416),
  (VTBL_ENTRY)&(_ZTI8S20177C6[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN9S20177C12D1Ev();
extern void _ZN9S20177C12D0Ev();
extern void _ZN9S20177C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C12__A1__8S20177C1[] = {
  ABISELECT(-672,-364),
  ABISELECT(-42472,-23272),
  ABISELECT(-43392,-23780),
  ABISELECT(-42928,-23528),
  ABISELECT(-43024,-23584),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN9S20177C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20177C122v8Ev,
};
extern void _ZN9S20177C13D1Ev();
extern void _ZN9S20177C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20177C139S20177C12__A1__8S20177C1[] = {
  ABISELECT(-672,-364),
  ABISELECT(-42472,-23272),
  ABISELECT(-43392,-23780),
  ABISELECT(-42928,-23528),
  ABISELECT(-43024,-23584),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN9S20177C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20177C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C139S20177C12__A1__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(43024,23584),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C139S20177C12__A1__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(42928,23528),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C139S20177C12__A1__8S20177C1[] = {
  0,
  ABISELECT(43392,23780),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev)();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C139S20177C12__A1__8S20177C1[] = {
  0,
  ABISELECT(672,364),
  0,
  ABISELECT(-41800,-22908),
  ABISELECT(-42720,-23416),
  ABISELECT(-42256,-23164),
  ABISELECT(-42352,-23220),
  ABISELECT(672,364),
  (VTBL_ENTRY)&(_ZTI9S20177C13[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C149S20177C12__A1__8S20177C1[] = {
  ABISELECT(-47720,-26120),
  0,
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C149S20177C12__A1__8S20177C1[] = {
  0,
  ABISELECT(47720,26120),
  (VTBL_ENTRY)&(_ZTI9S20177C14[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20177C7__9S20177C12__A1__8S20177C1[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(43024,23584),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
};
extern void _ZN8S20177C52v3Ev();
extern void _ZN8S20177C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C8__9S20177C12__A1__8S20177C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(42928,23528),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C52v3Ev,
  (VTBL_ENTRY)&_ZN8S20177C82v5Ev,
};
extern void _ZN8S20177C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C2__9S20177C12__A1__8S20177C1[] = {
  0,
  ABISELECT(43392,23780),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
};
extern void _ZN8S20177C22v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev)();
extern void _ZN8S20177C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20177C6__9S20177C12__A1__8S20177C1[] = {
  0,
  ABISELECT(672,364),
  0,
  ABISELECT(-41800,-22908),
  ABISELECT(-42720,-23416),
  ABISELECT(-42256,-23164),
  ABISELECT(-42352,-23220),
  ABISELECT(672,364),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
  (VTBL_ENTRY)&_ZN8S20177C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20177C62v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20177C14__9S20177C12__A1__8S20177C1[] = {
  ABISELECT(-47720,-26120),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S20177C12[0]),
};
static  VTT_ENTRY vtt_S20177C1[] = {
  {&(_ZTV8S20177C1[13]),  13,140},
  {&(_tg__ZTV8S20177C6__A__8S20177C1[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C6__A__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C6__A__8S20177C1[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C6__A__8S20177C1[3]),  3,4},
  {&(_ZTV8S20177C1[22]),  22,140},
  {&(_ZTV8S20177C1[28]),  28,140},
  {&(_ZTV8S20177C1[34]),  34,140},
  {&(_ZTV8S20177C1[39]),  39,140},
  {&(_ZTV8S20177C1[60]),  60,140},
  {&(_ZTV8S20177C1[91]),  91,140},
  {&(_ZTV8S20177C1[102]),  102,140},
  {&(_ZTV8S20177C1[117]),  117,140},
  {&(_ZTV8S20177C1[108]),  108,140},
  {&(_ZTV8S20177C1[124]),  124,140},
  {&(_ZTV8S20177C1[75]),  75,140},
  {&(_ZTV8S20177C1[134]),  134,140},
  {&(_ZTV8S20177C1[140]),  140,140},
  {&(_tg__ZTV8S20177C7__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C7__8S20177C1[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C7__8S20177C1[3]),  3,4},
  {&(_tg__ZTV8S20177C8__8S20177C1[4]),  4,6},
  {&(_tg__ZTV8S20177C2__8S20177C8__8S20177C1[3]),  3,4},
  {&(_tg__ZTV9S20177C10__8S20177C1[11]),  11,19},
  {&(_tg__ZTV9S20177C169S20177C10__8S20177C1[10]),  10,15},
  {&(_tg__ZTV8S20177C69S20177C169S20177C10__A3__8S20177C1[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C69S20177C169S20177C10__A3__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C69S20177C169S20177C10__A3__8S20177C1[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C69S20177C169S20177C10__A3__8S20177C1[3]),  3,4},
  {&(_tg__ZTV9S20177C11__9S20177C169S20177C10__8S20177C1[12]),  12,16},
  {&(_tg__ZTV8S20177C7__9S20177C169S20177C10__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C169S20177C10__8S20177C1[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C169S20177C10__8S20177C1[3]),  3,4},
  {&(_tg__ZTV9S20177C129S20177C11__9S20177C169S20177C10__8S20177C1[7]),  7,10},
  {&(_tg__ZTV8S20177C6__A1__9S20177C169S20177C10__8S20177C1[9]),  9,13},
  {&(_tg__ZTV9S20177C149S20177C129S20177C11__9S20177C169S20177C10__8S20177C1[3]),  3,3},
  {&(_tg__ZTV9S20177C17__9S20177C169S20177C10__8S20177C1[3]),  3,4},
  {&(_tg__ZTV9S20177C249S20177C10__8S20177C1[7]),  7,11},
  {&(_tg__ZTV8S20177C2__9S20177C249S20177C10__8S20177C1[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C249S20177C10__8S20177C1[9]),  9,13},
  {&(_tg__ZTV8S20177C7__9S20177C249S20177C10__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C249S20177C10__8S20177C1[6]),  6,8},
  {&(_tg__ZTV9S20177C11__9S20177C10__8S20177C1[12]),  12,16},
  {&(_tg__ZTV8S20177C7__9S20177C10__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C10__8S20177C1[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C10__8S20177C1[3]),  3,4},
  {&(_tg__ZTV9S20177C129S20177C11__9S20177C10__8S20177C1[7]),  7,10},
  {&(_tg__ZTV8S20177C6__A1__9S20177C10__8S20177C1[9]),  9,13},
  {&(_tg__ZTV9S20177C149S20177C129S20177C11__9S20177C10__8S20177C1[3]),  3,3},
  {&(_tg__ZTV9S20177C17__9S20177C10__8S20177C1[3]),  3,4},
  {&(_tg__ZTV9S20177C24__9S20177C10__8S20177C1[7]),  7,11},
  {&(_tg__ZTV9S20177C12__A1__9S20177C10__8S20177C1[9]),  9,12},
  {&(_tg__ZTV9S20177C149S20177C12__A1__9S20177C10__8S20177C1[3]),  3,3},
  {&(_tg__ZTV9S20177C11__8S20177C1[8]),  8,12},
  {&(_tg__ZTV8S20177C69S20177C11__A1__8S20177C1[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C69S20177C11__A1__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C69S20177C11__A1__8S20177C1[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C69S20177C11__A1__8S20177C1[3]),  3,4},
  {&(_tg__ZTV9S20177C129S20177C11__8S20177C1[7]),  7,10},
  {&(_tg__ZTV9S20177C139S20177C129S20177C11__8S20177C1[7]),  7,9},
  {&(_tg__ZTV8S20177C7__9S20177C139S20177C129S20177C11__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C139S20177C129S20177C11__8S20177C1[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C139S20177C129S20177C11__8S20177C1[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C139S20177C129S20177C11__8S20177C1[9]),  9,13},
  {&(_tg__ZTV9S20177C149S20177C129S20177C11__8S20177C1[3]),  3,3},
  {&(_tg__ZTV8S20177C2__9S20177C149S20177C129S20177C11__8S20177C1[3]),  3,4},
  {&(_tg__ZTV8S20177C7__9S20177C129S20177C11__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C129S20177C11__8S20177C1[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C129S20177C11__8S20177C1[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C129S20177C11__8S20177C1[9]),  9,13},
  {&(_tg__ZTV9S20177C14__9S20177C129S20177C11__8S20177C1[3]),  3,3},
  {&(_tg__ZTV8S20177C7__9S20177C11__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C11__8S20177C1[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C11__8S20177C1[3]),  3,4},
  {&(_tg__ZTV9S20177C12__9S20177C11__8S20177C1[7]),  7,10},
  {&(_tg__ZTV8S20177C6__A1__9S20177C11__8S20177C1[9]),  9,13},
  {&(_tg__ZTV9S20177C149S20177C12__9S20177C11__8S20177C1[3]),  3,3},
  {&(_tg__ZTV8S20177C6__A2__8S20177C1[6]),  6,10},
  {&(_tg__ZTV8S20177C7__8S20177C6__A2__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__8S20177C6__A2__8S20177C1[6]),  6,8},
  {&(_tg__ZTV8S20177C2__8S20177C6__A2__8S20177C1[3]),  3,4},
  {&(_tg__ZTV9S20177C12__A1__8S20177C1[7]),  7,10},
  {&(_tg__ZTV9S20177C139S20177C12__A1__8S20177C1[7]),  7,9},
  {&(_tg__ZTV8S20177C7__9S20177C139S20177C12__A1__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C139S20177C12__A1__8S20177C1[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C139S20177C12__A1__8S20177C1[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C139S20177C12__A1__8S20177C1[9]),  9,13},
  {&(_tg__ZTV9S20177C149S20177C12__A1__8S20177C1[3]),  3,3},
  {&(_tg__ZTV8S20177C2__9S20177C149S20177C12__A1__8S20177C1[3]),  3,4},
  {&(_tg__ZTV8S20177C7__9S20177C12__A1__8S20177C1[5]),  5,5},
  {&(_tg__ZTV8S20177C8__9S20177C12__A1__8S20177C1[6]),  6,8},
  {&(_tg__ZTV8S20177C2__9S20177C12__A1__8S20177C1[3]),  3,4},
  {&(_tg__ZTV8S20177C6__9S20177C12__A1__8S20177C1[9]),  9,13},
  {&(_tg__ZTV9S20177C14__9S20177C12__A1__8S20177C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20177C1[];
extern  VTBL_ENTRY _ZTV8S20177C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20177C1[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C11D0Ev,_ZTv0_n32_N9S20177C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4992_N9S20177C11D0Ev,_ZThn2728_N9S20177C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C11D1Ev,_ZTv0_n32_N9S20177C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4992_N9S20177C11D1Ev,_ZThn2728_N9S20177C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C12D0Ev,_ZTv0_n32_N9S20177C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4512_N9S20177C12D0Ev,_ZThn2460_N9S20177C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C12D1Ev,_ZTv0_n32_N9S20177C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4512_N9S20177C12D1Ev,_ZThn2460_N9S20177C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C13D0Ev,_ZTv0_n32_N9S20177C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4512_N9S20177C13D0Ev,_ZThn2460_N9S20177C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C13D1Ev,_ZTv0_n32_N9S20177C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4512_N9S20177C13D1Ev,_ZThn2460_N9S20177C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C10D0Ev,_ZTv0_n32_N9S20177C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41472_N9S20177C10D0Ev,_ZThn22736_N9S20177C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40800_N9S20177C10D0Ev,_ZThn22372_N9S20177C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C10D1Ev,_ZTv0_n32_N9S20177C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41472_N9S20177C10D1Ev,_ZThn22736_N9S20177C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40800_N9S20177C10D1Ev,_ZThn22372_N9S20177C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C10D0Ev,_ZTv0_n40_N9S20177C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20177C10D0Ev,_ZThn19644_N9S20177C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C10D1Ev,_ZTv0_n40_N9S20177C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20177C10D1Ev,_ZThn19644_N9S20177C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C24D0Ev,_ZTv0_n32_N9S20177C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16208_N9S20177C24D0Ev,_ZThn8884_N9S20177C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C24D1Ev,_ZTv0_n32_N9S20177C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16208_N9S20177C24D1Ev,_ZThn8884_N9S20177C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C16D0Ev,_ZTv0_n32_N9S20177C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40800_N9S20177C16D0Ev,_ZThn22372_N9S20177C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20177C16D1Ev,_ZTv0_n32_N9S20177C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40800_N9S20177C16D1Ev,_ZThn22372_N9S20177C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C16D0Ev,_ZTv0_n40_N9S20177C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20177C16D0Ev,_ZThn19644_N9S20177C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20177C16D1Ev,_ZTv0_n40_N9S20177C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35808_N9S20177C16D1Ev,_ZThn19644_N9S20177C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20177C1D0Ev,_ZTv0_n32_N8S20177C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80864_N8S20177C1D0Ev,_ZThn44316_N8S20177C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80192_N8S20177C1D0Ev,_ZThn43952_N8S20177C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20177C1D1Ev,_ZTv0_n32_N8S20177C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80864_N8S20177C1D1Ev,_ZThn44316_N8S20177C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80192_N8S20177C1D1Ev,_ZThn43952_N8S20177C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20177C1D0Ev,_ZTv0_n40_N8S20177C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn75200_N8S20177C1D0Ev,_ZThn41224_N8S20177C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20177C1D1Ev,_ZTv0_n40_N8S20177C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn75200_N8S20177C1D1Ev,_ZThn41224_N8S20177C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20177C1D0Ev,_ZTv0_n52_N8S20177C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39392_N8S20177C1D0Ev,_ZThn21580_N8S20177C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20177C1D1Ev,_ZTv0_n52_N8S20177C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39392_N8S20177C1D1Ev,_ZThn21580_N8S20177C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20177C1 = {  "S20177C1", // class name
  bases_S20177C1, 32,
  &(vtc_S20177C1[0]), // expected_vtbl_contents
  &(vtt_S20177C1[0]), // expected_vtt_contents
  ABISELECT(85328,46748), // object size
  NSPAIRA(_ZTI8S20177C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20177C1),140, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20177C1),94, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6040C5  {
  int s6040c5f0;
  void *s6040c5f1;
  ::S281C37_nt s6040c5f2;
  virtual void  v3(); // _ZN7S6040C52v3Ev
  ~S6040C5(); // tgen
  S6040C5(); // tgen
};
//SIG(-1 S6040C5) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S6040C5()
{
  extern Class_Descriptor cd_S6040C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6040C5, buf);
    S6040C5 *dp, &lv = *(dp=new (buf) S6040C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6040C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6040C5)");
    check_field_offset(lv, s6040c5f0, ABISELECT(8,4), "S6040C5.s6040c5f0");
    check_field_offset(lv, s6040c5f1, ABISELECT(16,8), "S6040C5.s6040c5f1");
    check_field_offset(lv, s6040c5f2, ABISELECT(24,12), "S6040C5.s6040c5f2");
    test_class_info(&lv, &cd_S6040C5);
    dp->~S6040C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C5(Test_S6040C5, "S6040C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6040C5C1Ev();
extern void _ZN7S6040C5D1Ev();
Name_Map name_map_S6040C5[] = {
  NSPAIR(_ZN7S6040C5C1Ev),
  NSPAIR(_ZN7S6040C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6040C5[];
extern void _ZN7S6040C52v3Ev();
static  VTBL_ENTRY vtc_S6040C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C5[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
};
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
Class_Descriptor cd_S6040C5 = {  "S6040C5", // class name
  0,0,//no base classes
  &(vtc_S6040C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6040C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6040C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6040C3  {
  int s6040c3f0[6];
  char s6040c3f1:2;
  long double s6040c3f2;
  void *s6040c3f3[2];
  int s6040c3f4;
  long double s6040c3f5;
  ::S20176C3_nt s6040c3f6;
  ::S281C37_nt s6040c3f7;
  ::S281C37_nt s6040c3f8[9];
  void *s6040c3f9;
  ::S6040C5 s6040c3f10;
  ::S6040C5 s6040c3f11;
  virtual void  v2(); // _ZN7S6040C32v2Ev
  ~S6040C3(); // tgen
  S6040C3(); // tgen
};
//SIG(-1 S6040C3) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S6040C3()
{
  extern Class_Descriptor cd_S6040C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S6040C3, buf);
    S6040C3 *dp, &lv = *(dp=new (buf) S6040C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S6040C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C3)");
    check_field_offset(lv, s6040c3f0, ABISELECT(8,4), "S6040C3.s6040c3f0");
    set_bf_and_test(lv, s6040c3f1, ABISELECT(32,28), 0, 2, 1, "S6040C3");
    set_bf_and_test(lv, s6040c3f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S6040C3");
    check_field_offset(lv, s6040c3f2, ABISELECT(48,32), "S6040C3.s6040c3f2");
    check_field_offset(lv, s6040c3f3, ABISELECT(64,44), "S6040C3.s6040c3f3");
    check_field_offset(lv, s6040c3f4, ABISELECT(80,52), "S6040C3.s6040c3f4");
    check_field_offset(lv, s6040c3f5, ABISELECT(96,56), "S6040C3.s6040c3f5");
    check_field_offset(lv, s6040c3f6, ABISELECT(112,68), "S6040C3.s6040c3f6");
    check_field_offset(lv, s6040c3f7, ABISELECT(120,72), "S6040C3.s6040c3f7");
    check_field_offset(lv, s6040c3f8, ABISELECT(136,80), "S6040C3.s6040c3f8");
    check_field_offset(lv, s6040c3f9, ABISELECT(280,152), "S6040C3.s6040c3f9");
    check_field_offset(lv, s6040c3f10, ABISELECT(288,156), "S6040C3.s6040c3f10");
    check_field_offset(lv, s6040c3f11, ABISELECT(328,176), "S6040C3.s6040c3f11");
    test_class_info(&lv, &cd_S6040C3);
    dp->~S6040C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C3(Test_S6040C3, "S6040C3", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN7S6040C3C1Ev();
extern void _ZN7S6040C3D1Ev();
Name_Map name_map_S6040C3[] = {
  NSPAIR(_ZN7S6040C3C1Ev),
  NSPAIR(_ZN7S6040C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6040C3[];
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY vtc_S6040C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C3[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
Class_Descriptor cd_S6040C3 = {  "S6040C3", // class name
  0,0,//no base classes
  &(vtc_S6040C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI7S6040C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6040C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6040C10  : S6040C5 , virtual S6040C3 , virtual S281C37_nt {
  void *s6040c10f0;
  __tsi64 s6040c10f1;
  char s6040c10f2[2];
  ::S6040C3 s6040c10f3;
  short s6040c10f4[7];
  int s6040c10f5;
  char s6040c10f6;
  int s6040c10f7:20;
  virtual void  v4(); // _ZN8S6040C102v4Ev
  ~S6040C10(); // tgen
  S6040C10(); // tgen
};
//SIG(-1 S6040C10) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


void  S6040C10 ::v4(){vfunc_called(this, "_ZN8S6040C102v4Ev");}
S6040C10 ::~S6040C10(){ note_dtor("S6040C10", this);} // tgen
S6040C10 ::S6040C10(){ note_ctor("S6040C10", this);} // tgen

static void Test_S6040C10()
{
  extern Class_Descriptor cd_S6040C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S6040C10, buf);
    S6040C10 *dp, &lv = *(dp=new (buf) S6040C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S6040C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C10)");
    check_base_class_offset(lv, (S6040C5*), 0, "S6040C10");
    check_base_class_offset(lv, (S6040C3*), ABISELECT(464,256), "S6040C10");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S6040C10");
    check_field_offset(lv, s6040c10f0, ABISELECT(40,20), "S6040C10.s6040c10f0");
    check_field_offset(lv, s6040c10f1, ABISELECT(48,24), "S6040C10.s6040c10f1");
    check_field_offset(lv, s6040c10f2, ABISELECT(56,32), "S6040C10.s6040c10f2");
    check_field_offset(lv, s6040c10f3, ABISELECT(64,36), "S6040C10.s6040c10f3");
    check_field_offset(lv, s6040c10f4, ABISELECT(432,232), "S6040C10.s6040c10f4");
    check_field_offset(lv, s6040c10f5, ABISELECT(448,248), "S6040C10.s6040c10f5");
    check_field_offset(lv, s6040c10f6, ABISELECT(452,252), "S6040C10.s6040c10f6");
    set_bf_and_test(lv, s6040c10f7, ABISELECT(453,253), 0, 20, 1, "S6040C10");
    set_bf_and_test(lv, s6040c10f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S6040C10");
    test_class_info(&lv, &cd_S6040C10);
    dp->~S6040C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C10(Test_S6040C10, "S6040C10", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN8S6040C10C1Ev();
extern void _ZN8S6040C10D1Ev();
Name_Map name_map_S6040C10[] = {
  NSPAIR(_ZN8S6040C10C1Ev),
  NSPAIR(_ZN8S6040C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6040C5;
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S6040C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6040C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6040C3,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6040C10[];
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY vtc_S6040C10[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S6040C10[];
static  VTT_ENTRY vtt_S6040C10[] = {
  {&(_ZTV8S6040C10[4]),  4,10},
  {&(_ZTV8S6040C10[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S6040C10[];
extern  VTBL_ENTRY _ZTV8S6040C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C10[];
Class_Descriptor cd_S6040C10 = {  "S6040C10", // class name
  bases_S6040C10, 3,
  &(vtc_S6040C10[0]), // expected_vtbl_contents
  &(vtt_S6040C10[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI8S6040C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6040C10),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6040C10),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  S6040C9  : virtual S6040C10 {
  int s6040c9f0;
  char s6040c9f1;
  void *s6040c9f2[6];
  int s6040c9f3[2];
  void *s6040c9f4;
  ::S281C37_nt s6040c9f5;
  ~S6040C9(); // tgen
  S6040C9(); // tgen
};
//SIG(-1 S6040C9) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S6040C9()
{
  extern Class_Descriptor cd_S6040C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S6040C9, buf);
    S6040C9 *dp, &lv = *(dp=new (buf) S6040C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S6040C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C9)");
    check_base_class_offset(lv, (S6040C5*)(S6040C10*), ABISELECT(96,56), "S6040C9");
    check_base_class_offset(lv, (S6040C3*)(S6040C10*), ABISELECT(560,312), "S6040C9");
    check_base_class_offset(lv, (S281C37_nt*)(S6040C10*), ABISELECT(928,508), "S6040C9");
    check_base_class_offset(lv, (S6040C10*), ABISELECT(96,56), "S6040C9");
    check_field_offset(lv, s6040c9f0, ABISELECT(8,4), "S6040C9.s6040c9f0");
    check_field_offset(lv, s6040c9f1, ABISELECT(12,8), "S6040C9.s6040c9f1");
    check_field_offset(lv, s6040c9f2, ABISELECT(16,12), "S6040C9.s6040c9f2");
    check_field_offset(lv, s6040c9f3, ABISELECT(64,36), "S6040C9.s6040c9f3");
    check_field_offset(lv, s6040c9f4, ABISELECT(72,44), "S6040C9.s6040c9f4");
    check_field_offset(lv, s6040c9f5, ABISELECT(80,48), "S6040C9.s6040c9f5");
    test_class_info(&lv, &cd_S6040C9);
    dp->~S6040C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C9(Test_S6040C9, "S6040C9", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN7S6040C9C1Ev();
extern void _ZN7S6040C9D1Ev();
Name_Map name_map_S6040C9[] = {
  NSPAIR(_ZN7S6040C9C1Ev),
  NSPAIR(_ZN7S6040C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6040C5;
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C10;
extern VTBL_ENTRY _ZTI8S6040C10[];
extern  VTBL_ENTRY _ZTV8S6040C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C10[];
static Base_Class bases_S6040C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6040C5,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6040C3,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6040C10,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6040C9[];
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY vtc_S6040C9[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S6040C9[];
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C9[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C10__7S6040C9[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTT_ENTRY vtt_S6040C9[] = {
  {&(_ZTV7S6040C9[5]),  5,17},
  {&(_ZTV7S6040C9[11]),  11,17},
  {&(_ZTV7S6040C9[16]),  16,17},
  {&(_tg__ZTV8S6040C10__7S6040C9[4]),  4,6},
  {&(_tg__ZTV7S6040C3__8S6040C10__7S6040C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6040C9[];
extern  VTBL_ENTRY _ZTV7S6040C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C9[];
Class_Descriptor cd_S6040C9 = {  "S6040C9", // class name
  bases_S6040C9, 4,
  &(vtc_S6040C9[0]), // expected_vtbl_contents
  &(vtt_S6040C9[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI7S6040C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6040C9),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6040C9),5, //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  S6040C8  : virtual S6040C9 , S6040C3 , S281C37_nt {
  char s6040c8f0;
  int s6040c8f1[2];
  long double s6040c8f2[2];
  short s6040c8f3;
  void *s6040c8f4;
  int s6040c8f5;
  __tsi64 s6040c8f6;
  int s6040c8f7;
  void *s6040c8f8;
  virtual  ~S6040C8(); // _ZN7S6040C8D2Ev
  virtual void  v5(); // _ZN7S6040C82v5Ev
  S6040C8(); // tgen
};
//SIG(-1 S6040C8) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S6040C8 ::~S6040C8(){ note_dtor("S6040C8", this);}
void  S6040C8 ::v5(){vfunc_called(this, "_ZN7S6040C82v5Ev");}
S6040C8 ::S6040C8(){ note_ctor("S6040C8", this);} // tgen

static void Test_S6040C8()
{
  extern Class_Descriptor cd_S6040C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S6040C8, buf);
    S6040C8 *dp, &lv = *(dp=new (buf) S6040C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S6040C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C8)");
    check_base_class_offset(lv, (S6040C5*)(S6040C10*), ABISELECT(576,324), "S6040C8");
    check_base_class_offset(lv, (S6040C3*)(S6040C10*), ABISELECT(1040,580), "S6040C8");
    check_base_class_offset(lv, (S281C37_nt*)(S6040C10*), ABISELECT(1408,776), "S6040C8");
    check_base_class_offset(lv, (S6040C10*)(S6040C9*), ABISELECT(576,324), "S6040C8");
    check_base_class_offset(lv, (S6040C9*), ABISELECT(480,268), "S6040C8");
    /*is_ambiguous_... S6040C8::S6040C3 */ AMB_check_base_class_offset(lv, (S6040C3*), 0, "S6040C8");
    /*is_ambiguous_... S6040C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S6040C8");
    check_field_offset(lv, s6040c8f0, ABISELECT(384,204), "S6040C8.s6040c8f0");
    check_field_offset(lv, s6040c8f1, ABISELECT(388,208), "S6040C8.s6040c8f1");
    check_field_offset(lv, s6040c8f2, ABISELECT(400,216), "S6040C8.s6040c8f2");
    check_field_offset(lv, s6040c8f3, ABISELECT(432,240), "S6040C8.s6040c8f3");
    check_field_offset(lv, s6040c8f4, ABISELECT(440,244), "S6040C8.s6040c8f4");
    check_field_offset(lv, s6040c8f5, ABISELECT(448,248), "S6040C8.s6040c8f5");
    check_field_offset(lv, s6040c8f6, ABISELECT(456,252), "S6040C8.s6040c8f6");
    check_field_offset(lv, s6040c8f7, ABISELECT(464,260), "S6040C8.s6040c8f7");
    check_field_offset(lv, s6040c8f8, ABISELECT(472,264), "S6040C8.s6040c8f8");
    test_class_info(&lv, &cd_S6040C8);
    dp->~S6040C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C8(Test_S6040C8, "S6040C8", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN7S6040C8C1Ev();
extern void _ZN7S6040C8D2Ev();
Name_Map name_map_S6040C8[] = {
  NSPAIR(_ZN7S6040C8C1Ev),
  NSPAIR(_ZN7S6040C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6040C5;
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C10;
extern VTBL_ENTRY _ZTI8S6040C10[];
extern  VTBL_ENTRY _ZTV8S6040C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C10[];
extern Class_Descriptor cd_S6040C9;
extern VTBL_ENTRY _ZTI7S6040C9[];
extern  VTBL_ENTRY _ZTV7S6040C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C9[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S6040C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6040C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6040C3,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C10,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6040C9,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6040C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6040C8[];
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY vtc_S6040C8[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S6040C8[];
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C8[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C9__7S6040C8[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C9__7S6040C8[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C8[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C10__7S6040C8[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTT_ENTRY vtt_S6040C8[] = {
  {&(_ZTV7S6040C8[6]),  6,27},
  {&(_ZTV7S6040C8[15]),  15,27},
  {&(_ZTV7S6040C8[21]),  21,27},
  {&(_ZTV7S6040C8[26]),  26,27},
  {&(_tg__ZTV7S6040C9__7S6040C8[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C9__7S6040C8[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C9__7S6040C8[3]),  3,4},
  {&(_tg__ZTV8S6040C10__7S6040C8[4]),  4,6},
  {&(_tg__ZTV7S6040C3__8S6040C10__7S6040C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
Class_Descriptor cd_S6040C8 = {  "S6040C8", // class name
  bases_S6040C8, 7,
  &(vtc_S6040C8[0]), // expected_vtbl_contents
  &(vtt_S6040C8[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI7S6040C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6040C8),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6040C8),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6040C12  : virtual S6040C9 , virtual S6040C8 {
  long s6040c12f0;
  void *s6040c12f1;
  ::S6040C10 s6040c12f2;
  void *s6040c12f3;
  short s6040c12f4;
  __tsi64 s6040c12f5;
  int s6040c12f6;
  __tsi64 s6040c12f7;
  ::S6040C10 s6040c12f8[4];
  int s6040c12f9;
  virtual  ~S6040C12(); // _ZN8S6040C12D2Ev
  S6040C12(); // tgen
};
//SIG(-1 S6040C12) C1{ VBC2{ VBC3{ BC4{ v1 Fi Fp FC5{ m Fp[2]}} VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC8{ VBC2 BC6 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC3 Fp Fs FL Fi FL FC3[4] Fi}


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

static void Test_S6040C12()
{
  extern Class_Descriptor cd_S6040C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(361,783)];
    init_test(&cd_S6040C12, buf);
    S6040C12 *dp, &lv = *(dp=new (buf) S6040C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5760,3128), "sizeof(S6040C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C12)");
    check_base_class_offset(lv, (S6040C5*)(S6040C10*), ABISELECT(4432,2400), "S6040C12");
    check_base_class_offset(lv, (S6040C3*)(S6040C10*), ABISELECT(4896,2656), "S6040C12");
    check_base_class_offset(lv, (S281C37_nt*)(S6040C10*), ABISELECT(5264,2852), "S6040C12");
    check_base_class_offset(lv, (S6040C10*)(S6040C9*), ABISELECT(4432,2400), "S6040C12");
    check_base_class_offset(lv, (S6040C9*), ABISELECT(4328,2344), "S6040C12");
    check_base_class_offset(lv, (S6040C9*)(S6040C8*), ABISELECT(4328,2344), "S6040C12");
    /*is_ambiguous_... S6040C8::S6040C3 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C8*), ABISELECT(5280,2860), "S6040C12");
    /*is_ambiguous_... S6040C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C8*), ABISELECT(5648,3056), "S6040C12");
    check_base_class_offset(lv, (S6040C8*), ABISELECT(5280,2860), "S6040C12");
    check_field_offset(lv, s6040c12f0, ABISELECT(8,4), "S6040C12.s6040c12f0");
    check_field_offset(lv, s6040c12f1, ABISELECT(16,8), "S6040C12.s6040c12f1");
    check_field_offset(lv, s6040c12f2, ABISELECT(32,12), "S6040C12.s6040c12f2");
    check_field_offset(lv, s6040c12f3, ABISELECT(880,472), "S6040C12.s6040c12f3");
    check_field_offset(lv, s6040c12f4, ABISELECT(888,476), "S6040C12.s6040c12f4");
    check_field_offset(lv, s6040c12f5, ABISELECT(896,480), "S6040C12.s6040c12f5");
    check_field_offset(lv, s6040c12f6, ABISELECT(904,488), "S6040C12.s6040c12f6");
    check_field_offset(lv, s6040c12f7, ABISELECT(912,492), "S6040C12.s6040c12f7");
    check_field_offset(lv, s6040c12f8, ABISELECT(928,500), "S6040C12.s6040c12f8");
    check_field_offset(lv, s6040c12f9, ABISELECT(4320,2340), "S6040C12.s6040c12f9");
    test_class_info(&lv, &cd_S6040C12);
    dp->~S6040C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C12(Test_S6040C12, "S6040C12", ABISELECT(5760,3128));

#else // __cplusplus

extern void _ZN8S6040C12C1Ev();
extern void _ZN8S6040C12D2Ev();
Name_Map name_map_S6040C12[] = {
  NSPAIR(_ZN8S6040C12C1Ev),
  NSPAIR(_ZN8S6040C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6040C5;
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C10;
extern VTBL_ENTRY _ZTI8S6040C10[];
extern  VTBL_ENTRY _ZTV8S6040C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C10[];
extern Class_Descriptor cd_S6040C9;
extern VTBL_ENTRY _ZTI7S6040C9[];
extern  VTBL_ENTRY _ZTV7S6040C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C9[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C8;
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
static Base_Class bases_S6040C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6040C5,    ABISELECT(4432,2400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C3,    ABISELECT(4896,2656), //bcp->offset
    22, //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_S281C37_nt,    ABISELECT(5264,2852), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C10,    ABISELECT(4432,2400), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6040C9,    ABISELECT(4328,2344), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6040C3,    ABISELECT(5280,2860), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5648,3056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C8,    ABISELECT(5280,2860), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6040C12[];
extern void _ZN8S6040C12D1Ev();
extern void _ZN8S6040C12D0Ev();
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev)();
extern void ABISELECT(_ZThn5280_N8S6040C12D1Ev,_ZThn2860_N8S6040C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev)();
extern void ABISELECT(_ZThn5280_N8S6040C12D0Ev,_ZThn2860_N8S6040C12D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY vtc_S6040C12[] = {
  ABISELECT(5280,2860),
  ABISELECT(5264,2852),
  ABISELECT(4896,2656),
  ABISELECT(4432,2400),
  ABISELECT(4328,2344),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN8S6040C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C12D0Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4432,-2400),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
  0,
  ABISELECT(-4896,-2656),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  0,
  ABISELECT(-5280,-2860),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5280,-2860),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
extern VTBL_ENTRY _ZTV8S6040C12[];
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C12[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C9__8S6040C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C9__8S6040C12[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C12[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C10__8S6040C12[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C8__8S6040C12[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C8__8S6040C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C8__8S6040C12[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTT_ENTRY vtt_S6040C12[] = {
  {&(_ZTV8S6040C12[7]),  7,39},
  {&(_ZTV8S6040C12[14]),  14,39},
  {&(_ZTV8S6040C12[20]),  20,39},
  {&(_ZTV8S6040C12[25]),  25,39},
  {&(_ZTV8S6040C12[35]),  35,39},
  {&(_tg__ZTV7S6040C9__8S6040C12[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C9__8S6040C12[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C9__8S6040C12[3]),  3,4},
  {&(_tg__ZTV8S6040C10__8S6040C12[4]),  4,6},
  {&(_tg__ZTV7S6040C3__8S6040C10__8S6040C12[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C12[6]),  6,10},
  {&(_tg__ZTV7S6040C9__7S6040C8__8S6040C12[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C8__8S6040C12[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C8__8S6040C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6040C12[];
extern  VTBL_ENTRY _ZTV8S6040C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C12[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N8S6040C12D0Ev,_ZThn2860_N8S6040C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N8S6040C12D1Ev,_ZThn2860_N8S6040C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6040C12 = {  "S6040C12", // class name
  bases_S6040C12, 8,
  &(vtc_S6040C12[0]), // expected_vtbl_contents
  &(vtt_S6040C12[0]), // expected_vtt_contents
  ABISELECT(5760,3128), // object size
  NSPAIRA(_ZTI8S6040C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6040C12),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6040C12),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6040C13  : virtual S6040C3 {
  void *s6040c13f0;
  short s6040c13f1;
  __tsi64 s6040c13f2;
  int s6040c13f3:6;
  void *s6040c13f4[2];
  ~S6040C13(); // tgen
  S6040C13(); // tgen
};
//SIG(-1 S6040C13) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} Fp Fs FL Fi:6 Fp[2]}


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

static void Test_S6040C13()
{
  extern Class_Descriptor cd_S6040C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,58)];
    init_test(&cd_S6040C13, buf);
    S6040C13 *dp, &lv = *(dp=new (buf) S6040C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,228), "sizeof(S6040C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C13)");
    check_base_class_offset(lv, (S6040C3*), ABISELECT(64,32), "S6040C13");
    check_field_offset(lv, s6040c13f0, ABISELECT(8,4), "S6040C13.s6040c13f0");
    check_field_offset(lv, s6040c13f1, ABISELECT(16,8), "S6040C13.s6040c13f1");
    check_field_offset(lv, s6040c13f2, ABISELECT(24,12), "S6040C13.s6040c13f2");
    set_bf_and_test(lv, s6040c13f3, ABISELECT(32,20), 0, 6, 1, "S6040C13");
    set_bf_and_test(lv, s6040c13f3, ABISELECT(32,20), 0, 6, hide_sll(1LL<<5), "S6040C13");
    check_field_offset(lv, s6040c13f4, ABISELECT(40,24), "S6040C13.s6040c13f4");
    test_class_info(&lv, &cd_S6040C13);
    dp->~S6040C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C13(Test_S6040C13, "S6040C13", ABISELECT(432,228));

#else // __cplusplus

extern void _ZN8S6040C13C1Ev();
extern void _ZN8S6040C13D1Ev();
Name_Map name_map_S6040C13[] = {
  NSPAIR(_ZN8S6040C13C1Ev),
  NSPAIR(_ZN8S6040C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
static Base_Class bases_S6040C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6040C3,    ABISELECT(64,32), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6040C13[];
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY vtc_S6040C13[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S6040C13[];
static  VTT_ENTRY vtt_S6040C13[] = {
  {&(_ZTV8S6040C13[3]),  3,7},
  {&(_ZTV8S6040C13[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S6040C13[];
extern  VTBL_ENTRY _ZTV8S6040C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C13[];
Class_Descriptor cd_S6040C13 = {  "S6040C13", // class name
  bases_S6040C13, 1,
  &(vtc_S6040C13[0]), // expected_vtbl_contents
  &(vtt_S6040C13[0]), // expected_vtt_contents
  ABISELECT(432,228), // object size
  NSPAIRA(_ZTI8S6040C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6040C13),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6040C13),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  S6040C11  : S6040C12 , S6040C13 {
  __tsi64 s6040c11f0;
  long double s6040c11f1;
  ::S20176C3_nt s6040c11f2;
  int s6040c11f3[9];
  short s6040c11f4;
  char s6040c11f5:5;
  virtual  ~S6040C11(); // _ZN8S6040C11D2Ev
  virtual void  v6(); // _ZN8S6040C112v6Ev
  S6040C11(); // tgen
};
//SIG(-1 S6040C11) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 Fi Fp FC6{ m Fp[2]}} VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} VBC9{ VBC3 BC7 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC4 Fp Fs FL Fi FL FC4[4] Fi} BC10{ VBC7 Fp Fs FL Fi:6 Fp[2]} vd v1 FL FD FC8 Fi[9] Fs Fc:5}


 S6040C11 ::~S6040C11(){ note_dtor("S6040C11", this);}
void  S6040C11 ::v6(){vfunc_called(this, "_ZN8S6040C112v6Ev");}
S6040C11 ::S6040C11(){ note_ctor("S6040C11", this);} // tgen

static void Test_S6040C11()
{
  extern Class_Descriptor cd_S6040C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(369,807)];
    init_test(&cd_S6040C11, buf);
    S6040C11 *dp, &lv = *(dp=new (buf) S6040C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5888,3224), "sizeof(S6040C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C11)");
    check_base_class_offset(lv, (S6040C5*)(S6040C10*), ABISELECT(4560,2496), "S6040C11");
    check_base_class_offset(lv, (S6040C3*)(S6040C10*), ABISELECT(5024,2752), "S6040C11");
    check_base_class_offset(lv, (S6040C3*)(S6040C13*), ABISELECT(5024,2752), "S6040C11");
    check_base_class_offset(lv, (S281C37_nt*)(S6040C10*), ABISELECT(5392,2948), "S6040C11");
    check_base_class_offset(lv, (S6040C10*)(S6040C9*), ABISELECT(4560,2496), "S6040C11");
    check_base_class_offset(lv, (S6040C9*)(S6040C12*), ABISELECT(4464,2440), "S6040C11");
    check_base_class_offset(lv, (S6040C9*)(S6040C8*), ABISELECT(4464,2440), "S6040C11");
    /*is_ambiguous_... S6040C8::S6040C3 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C8*), ABISELECT(5408,2956), "S6040C11");
    /*is_ambiguous_... S6040C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C8*), ABISELECT(5776,3152), "S6040C11");
    check_base_class_offset(lv, (S6040C8*)(S6040C12*), ABISELECT(5408,2956), "S6040C11");
    check_base_class_offset(lv, (S6040C12*), 0, "S6040C11");
    check_base_class_offset(lv, (S6040C13*), ABISELECT(4328,2344), "S6040C11");
    check_field_offset(lv, s6040c11f0, ABISELECT(4384,2376), "S6040C11.s6040c11f0");
    check_field_offset(lv, s6040c11f1, ABISELECT(4400,2384), "S6040C11.s6040c11f1");
    check_field_offset(lv, s6040c11f2, ABISELECT(4416,2396), "S6040C11.s6040c11f2");
    check_field_offset(lv, s6040c11f3, ABISELECT(4420,2400), "S6040C11.s6040c11f3");
    check_field_offset(lv, s6040c11f4, ABISELECT(4456,2436), "S6040C11.s6040c11f4");
    set_bf_and_test(lv, s6040c11f5, ABISELECT(4458,2438), 0, 5, 1, "S6040C11");
    set_bf_and_test(lv, s6040c11f5, ABISELECT(4458,2438), 0, 5, hide_sll(1LL<<4), "S6040C11");
    test_class_info(&lv, &cd_S6040C11);
    dp->~S6040C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C11(Test_S6040C11, "S6040C11", ABISELECT(5888,3224));

#else // __cplusplus

extern void _ZN8S6040C11C1Ev();
extern void _ZN8S6040C11D2Ev();
Name_Map name_map_S6040C11[] = {
  NSPAIR(_ZN8S6040C11C1Ev),
  NSPAIR(_ZN8S6040C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6040C5;
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C10;
extern VTBL_ENTRY _ZTI8S6040C10[];
extern  VTBL_ENTRY _ZTV8S6040C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C10[];
extern Class_Descriptor cd_S6040C9;
extern VTBL_ENTRY _ZTI7S6040C9[];
extern  VTBL_ENTRY _ZTV7S6040C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C9[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C8;
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
extern Class_Descriptor cd_S6040C12;
extern VTBL_ENTRY _ZTI8S6040C12[];
extern  VTBL_ENTRY _ZTV8S6040C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C12[];
extern Class_Descriptor cd_S6040C13;
extern VTBL_ENTRY _ZTI8S6040C13[];
extern  VTBL_ENTRY _ZTV8S6040C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C13[];
static Base_Class bases_S6040C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6040C5,    ABISELECT(4560,2496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C3,    ABISELECT(5024,2752), //bcp->offset
    26, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5392,2948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C10,    ABISELECT(4560,2496), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6040C9,    ABISELECT(4464,2440), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6040C3,    ABISELECT(5408,2956), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5776,3152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C8,    ABISELECT(5408,2956), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6040C12,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6040C13,    ABISELECT(4328,2344), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6040C11[];
extern void _ZN8S6040C11D1Ev();
extern void _ZN8S6040C11D0Ev();
extern void _ZN8S6040C112v6Ev();
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev)();
extern void ABISELECT(_ZThn5408_N8S6040C11D1Ev,_ZThn2956_N8S6040C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev)();
extern void ABISELECT(_ZThn5408_N8S6040C11D0Ev,_ZThn2956_N8S6040C11D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY vtc_S6040C11[] = {
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN8S6040C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
  ABISELECT(696,408),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2496),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
  0,
  ABISELECT(-5024,-2752),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  0,
  ABISELECT(-5408,-2956),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2956),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
extern VTBL_ENTRY _ZTV8S6040C11[];
extern void _ZN8S6040C12D1Ev();
extern void _ZN8S6040C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C12__8S6040C11[] = {
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN8S6040C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C12__8S6040C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C12__8S6040C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2496),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C12__8S6040C11[] = {
  0,
  ABISELECT(-5024,-2752),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev)();
extern void ABISELECT(_ZThn5408_N8S6040C12D1Ev,_ZThn2956_N8S6040C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev)();
extern void ABISELECT(_ZThn5408_N8S6040C12D0Ev,_ZThn2956_N8S6040C12D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C12__8S6040C11[] = {
  0,
  ABISELECT(-5408,-2956),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2956),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C13__8S6040C11[] = {
  ABISELECT(696,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C13__8S6040C11[] = {
  0,
  ABISELECT(-696,-408),
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C9__8S6040C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C9__8S6040C11[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C11[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C10__8S6040C11[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C11[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C8__8S6040C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C8__8S6040C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C8__8S6040C11[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTT_ENTRY vtt_S6040C11[] = {
  {&(_ZTV8S6040C11[7]),  7,43},
  {&(_tg__ZTV8S6040C12__8S6040C11[7]),  7,9},
  {&(_tg__ZTV7S6040C9__8S6040C12__8S6040C11[5]),  5,5},
  {&(_tg__ZTV8S6040C10__8S6040C12__8S6040C11[6]),  6,8},
  {&(_tg__ZTV7S6040C3__8S6040C12__8S6040C11[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C12__8S6040C11[9]),  9,13},
  {&(_tg__ZTV8S6040C13__8S6040C11[3]),  3,3},
  {&(_tg__ZTV7S6040C3__8S6040C13__8S6040C11[3]),  3,4},
  {&(_ZTV8S6040C11[18]),  18,43},
  {&(_ZTV8S6040C11[24]),  24,43},
  {&(_ZTV8S6040C11[29]),  29,43},
  {&(_ZTV8S6040C11[39]),  39,43},
  {&(_ZTV8S6040C11[13]),  13,43},
  {&(_tg__ZTV7S6040C9__8S6040C11[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C9__8S6040C11[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C9__8S6040C11[3]),  3,4},
  {&(_tg__ZTV8S6040C10__8S6040C11[4]),  4,6},
  {&(_tg__ZTV7S6040C3__8S6040C10__8S6040C11[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C11[6]),  6,10},
  {&(_tg__ZTV7S6040C9__7S6040C8__8S6040C11[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C8__8S6040C11[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C8__8S6040C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6040C11[];
extern  VTBL_ENTRY _ZTV8S6040C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C11[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S6040C12D0Ev,_ZThn2956_N8S6040C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S6040C12D1Ev,_ZThn2956_N8S6040C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S6040C11D0Ev,_ZThn2956_N8S6040C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S6040C11D1Ev,_ZThn2956_N8S6040C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6040C11 = {  "S6040C11", // class name
  bases_S6040C11, 10,
  &(vtc_S6040C11[0]), // expected_vtbl_contents
  &(vtt_S6040C11[0]), // expected_vtt_contents
  ABISELECT(5888,3224), // object size
  NSPAIRA(_ZTI8S6040C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6040C11),43, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6040C11),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6040C7  : S6040C8 , S6040C11 , virtual S20176C15 {
  int s6040c7f0;
  void *s6040c7f1;
  short s6040c7f2;
  void *s6040c7f3[2];
  char s6040c7f4[8];
  ~S6040C7(); // tgen
  S6040C7(); // tgen
};
//SIG(-1 S6040C7) C1{ BC2{ VBC3{ VBC4{ BC5{ v1 Fi Fp FC6{ m Fp[2]}} VBC7{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v3 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC7 BC6 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC9{ BC10{ VBC3 VBC2 vd Fl Fp FC4 Fp Fs FL Fi FL FC4[4] Fi} BC11{ VBC7 Fp Fs FL Fi:6 Fp[2]} vd v5 FL FD FC8 Fi[9] Fs Fc:5} VBC12{ m FL FC6[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]}


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

static void Test_S6040C7()
{
  extern Class_Descriptor cd_S6040C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(412,902)];
    init_test(&cd_S6040C7, buf);
    S6040C7 *dp, &lv = *(dp=new (buf) S6040C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6576,3604), "sizeof(S6040C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C7)");
    check_base_class_offset(lv, (S6040C5*)(S6040C10*), ABISELECT(5088,2792), "S6040C7");
    check_base_class_offset(lv, (S6040C3*)(S6040C10*), ABISELECT(5552,3048), "S6040C7");
    check_base_class_offset(lv, (S6040C3*)(S6040C13*)(S6040C11*), ABISELECT(5552,3048), "S6040C7");
    check_base_class_offset(lv, (S281C37_nt*)(S6040C10*), ABISELECT(5920,3244), "S6040C7");
    check_base_class_offset(lv, (S6040C10*)(S6040C9*), ABISELECT(5088,2792), "S6040C7");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C9*)(S6040C8*), ABISELECT(4984,2736), "S6040C7");
    check_base_class_offset(lv, (S6040C9*)(S6040C12*)(S6040C11*), ABISELECT(4984,2736), "S6040C7");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C9*)(S6040C8*), ABISELECT(4984,2736), "S6040C7");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C8*), 0, "S6040C7");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C8*), ABISELECT(368,196), "S6040C7");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C8*), 0, "S6040C7");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C8*), ABISELECT(5936,3252), "S6040C7");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C8*), ABISELECT(6304,3448), "S6040C7");
    check_base_class_offset(lv, (S6040C8*)(S6040C12*)(S6040C11*), ABISELECT(5936,3252), "S6040C7");
    check_base_class_offset(lv, (S6040C12*)(S6040C11*), ABISELECT(480,268), "S6040C7");
    check_base_class_offset(lv, (S6040C13*)(S6040C11*), ABISELECT(4808,2612), "S6040C7");
    check_base_class_offset(lv, (S6040C11*), ABISELECT(480,268), "S6040C7");
    check_base_class_offset(lv, (S20176C15*), ABISELECT(6416,3520), "S6040C7");
    check_field_offset(lv, s6040c7f0, ABISELECT(4940,2708), "S6040C7.s6040c7f0");
    check_field_offset(lv, s6040c7f1, ABISELECT(4944,2712), "S6040C7.s6040c7f1");
    check_field_offset(lv, s6040c7f2, ABISELECT(4952,2716), "S6040C7.s6040c7f2");
    check_field_offset(lv, s6040c7f3, ABISELECT(4960,2720), "S6040C7.s6040c7f3");
    check_field_offset(lv, s6040c7f4, ABISELECT(4976,2728), "S6040C7.s6040c7f4");
    test_class_info(&lv, &cd_S6040C7);
    dp->~S6040C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C7(Test_S6040C7, "S6040C7", ABISELECT(6576,3604));

#else // __cplusplus

extern void _ZN7S6040C7C1Ev();
extern void _ZN7S6040C7D1Ev();
Name_Map name_map_S6040C7[] = {
  NSPAIR(_ZN7S6040C7C1Ev),
  NSPAIR(_ZN7S6040C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6040C5;
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C10;
extern VTBL_ENTRY _ZTI8S6040C10[];
extern  VTBL_ENTRY _ZTV8S6040C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C10[];
extern Class_Descriptor cd_S6040C9;
extern VTBL_ENTRY _ZTI7S6040C9[];
extern  VTBL_ENTRY _ZTV7S6040C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C9[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C8;
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C8;
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
extern Class_Descriptor cd_S6040C12;
extern VTBL_ENTRY _ZTI8S6040C12[];
extern  VTBL_ENTRY _ZTV8S6040C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C12[];
extern Class_Descriptor cd_S6040C13;
extern VTBL_ENTRY _ZTI8S6040C13[];
extern  VTBL_ENTRY _ZTV8S6040C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C13[];
extern Class_Descriptor cd_S6040C11;
extern VTBL_ENTRY _ZTI8S6040C11[];
extern  VTBL_ENTRY _ZTV8S6040C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C11[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
static Base_Class bases_S6040C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6040C5,    ABISELECT(5088,2792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C3,    ABISELECT(5552,3048), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5920,3244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C10,    ABISELECT(5088,2792), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6040C9,    ABISELECT(4984,2736), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6040C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C8,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6040C3,    ABISELECT(5936,3252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(6304,3448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C8,    ABISELECT(5936,3252), //bcp->offset
    42, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6040C12,    ABISELECT(480,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6040C13,    ABISELECT(4808,2612), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6040C11,    ABISELECT(480,268), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C15,    ABISELECT(6416,3520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6040C7[];
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C7D1Ev();
extern void _ZN7S6040C7D0Ev();
extern void _ZN7S6040C82v5Ev();
extern void ABISELECT(_ZThn480_N7S6040C7D1Ev,_ZThn268_N7S6040C7D1Ev)();
extern void ABISELECT(_ZThn480_N7S6040C7D0Ev,_ZThn268_N7S6040C7D0Ev)();
extern void _ZN8S6040C112v6Ev();
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6040C7D1Ev,_ZTv0_n32_N7S6040C7D1Ev)();
extern void ABISELECT(_ZThn5936_N7S6040C7D1Ev,_ZThn3252_N7S6040C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6040C7D0Ev,_ZTv0_n32_N7S6040C7D0Ev)();
extern void ABISELECT(_ZThn5936_N7S6040C7D0Ev,_ZThn3252_N7S6040C7D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY vtc_S6040C7[] = {
  ABISELECT(6416,3520),
  ABISELECT(5936,3252),
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N7S6040C7D1Ev,_ZThn268_N7S6040C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N7S6040C7D0Ev,_ZThn268_N7S6040C7D0Ev),
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
  ABISELECT(744,436),
  ABISELECT(-4808,-2612),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
  0,
  ABISELECT(-5552,-3048),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  0,
  ABISELECT(-5936,-3252),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5936,-3252),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6040C7D1Ev,_ZTv0_n32_N7S6040C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6040C7D0Ev,_ZTv0_n32_N7S6040C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
extern VTBL_ENTRY _ZTV7S6040C7[];
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__A__7S6040C7[] = {
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C8__A__7S6040C7[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C8__A__7S6040C7[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C8__A__7S6040C7[] = {
  0,
  ABISELECT(-5552,-3048),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN8S6040C11D1Ev();
extern void _ZN8S6040C11D0Ev();
extern void _ZN8S6040C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C11__7S6040C7[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN8S6040C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
};
extern void _ZN8S6040C12D1Ev();
extern void _ZN8S6040C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C128S6040C11__7S6040C7[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN8S6040C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C128S6040C11__7S6040C7[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C128S6040C11__7S6040C7[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C128S6040C11__7S6040C7[] = {
  0,
  ABISELECT(-5072,-2780),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev)();
extern void ABISELECT(_ZThn5456_N8S6040C12D1Ev,_ZThn2984_N8S6040C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev)();
extern void ABISELECT(_ZThn5456_N8S6040C12D0Ev,_ZThn2984_N8S6040C12D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C128S6040C11__7S6040C7[] = {
  0,
  ABISELECT(-5456,-2984),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2984),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C138S6040C11__7S6040C7[] = {
  ABISELECT(744,436),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C138S6040C11__7S6040C7[] = {
  0,
  ABISELECT(-744,-436),
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C11__7S6040C7[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C11__7S6040C7[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C11__7S6040C7[] = {
  0,
  ABISELECT(-5072,-2780),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev)();
extern void ABISELECT(_ZThn5456_N8S6040C11D1Ev,_ZThn2984_N8S6040C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev)();
extern void ABISELECT(_ZThn5456_N8S6040C11D0Ev,_ZThn2984_N8S6040C11D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C11__7S6040C7[] = {
  0,
  ABISELECT(-5456,-2984),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2984),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C13__8S6040C11__7S6040C7[] = {
  ABISELECT(744,436),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C7[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C9__7S6040C7[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C9__7S6040C7[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C7[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C10__7S6040C7[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__A1__7S6040C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C8__A1__7S6040C7[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C8__A1__7S6040C7[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C8__A1__7S6040C7[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTT_ENTRY vtt_S6040C7[] = {
  {&(_ZTV7S6040C7[8]),  8,55},
  {&(_tg__ZTV7S6040C8__A__7S6040C7[6]),  6,10},
  {&(_tg__ZTV7S6040C9__7S6040C8__A__7S6040C7[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C8__A__7S6040C7[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C8__A__7S6040C7[3]),  3,4},
  {&(_tg__ZTV8S6040C11__7S6040C7[7]),  7,10},
  {&(_tg__ZTV8S6040C128S6040C11__7S6040C7[7]),  7,9},
  {&(_tg__ZTV7S6040C9__8S6040C128S6040C11__7S6040C7[5]),  5,5},
  {&(_tg__ZTV8S6040C10__8S6040C128S6040C11__7S6040C7[6]),  6,8},
  {&(_tg__ZTV7S6040C3__8S6040C128S6040C11__7S6040C7[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C128S6040C11__7S6040C7[9]),  9,13},
  {&(_tg__ZTV8S6040C138S6040C11__7S6040C7[3]),  3,3},
  {&(_tg__ZTV7S6040C3__8S6040C138S6040C11__7S6040C7[3]),  3,4},
  {&(_tg__ZTV7S6040C9__8S6040C11__7S6040C7[5]),  5,5},
  {&(_tg__ZTV8S6040C10__8S6040C11__7S6040C7[6]),  6,8},
  {&(_tg__ZTV7S6040C3__8S6040C11__7S6040C7[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C11__7S6040C7[9]),  9,13},
  {&(_tg__ZTV8S6040C13__8S6040C11__7S6040C7[3]),  3,3},
  {&(_ZTV7S6040C7[30]),  30,55},
  {&(_ZTV7S6040C7[36]),  36,55},
  {&(_ZTV7S6040C7[41]),  41,55},
  {&(_ZTV7S6040C7[19]),  19,55},
  {&(_ZTV7S6040C7[51]),  51,55},
  {&(_ZTV7S6040C7[25]),  25,55},
  {&(_tg__ZTV7S6040C9__7S6040C7[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C9__7S6040C7[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C9__7S6040C7[3]),  3,4},
  {&(_tg__ZTV8S6040C10__7S6040C7[4]),  4,6},
  {&(_tg__ZTV7S6040C3__8S6040C10__7S6040C7[3]),  3,4},
  {&(_tg__ZTV7S6040C8__A1__7S6040C7[6]),  6,10},
  {&(_tg__ZTV7S6040C9__7S6040C8__A1__7S6040C7[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C8__A1__7S6040C7[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C8__A1__7S6040C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6040C7[];
extern  VTBL_ENTRY _ZTV7S6040C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C7[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6040C11D0Ev,_ZThn2984_N8S6040C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6040C11D1Ev,_ZThn2984_N8S6040C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6040C12D0Ev,_ZThn2984_N8S6040C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6040C12D1Ev,_ZThn2984_N8S6040C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6040C7D0Ev,_ZTv0_n32_N7S6040C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N7S6040C7D0Ev,_ZThn3252_N7S6040C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6040C7D1Ev,_ZTv0_n32_N7S6040C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N7S6040C7D1Ev,_ZThn3252_N7S6040C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6040C7 = {  "S6040C7", // class name
  bases_S6040C7, 15,
  &(vtc_S6040C7[0]), // expected_vtbl_contents
  &(vtt_S6040C7[0]), // expected_vtt_contents
  ABISELECT(6576,3604), // object size
  NSPAIRA(_ZTI7S6040C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6040C7),55, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6040C7),33, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6040C15  {
  long s6040c15f0;
  char s6040c15f1;
  short s6040c15f2[2];
  virtual void  v7(); // _ZN8S6040C152v7Ev
  ~S6040C15(); // tgen
  S6040C15(); // tgen
};
//SIG(-1 S6040C15) C1{ v1 Fl Fc Fs[2]}


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

static void Test_S6040C15()
{
  extern Class_Descriptor cd_S6040C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6040C15, buf);
    S6040C15 *dp, &lv = *(dp=new (buf) S6040C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6040C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6040C15)");
    check_field_offset(lv, s6040c15f0, ABISELECT(8,4), "S6040C15.s6040c15f0");
    check_field_offset(lv, s6040c15f1, ABISELECT(16,8), "S6040C15.s6040c15f1");
    check_field_offset(lv, s6040c15f2, ABISELECT(18,10), "S6040C15.s6040c15f2");
    test_class_info(&lv, &cd_S6040C15);
    dp->~S6040C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C15(Test_S6040C15, "S6040C15", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S6040C15C1Ev();
extern void _ZN8S6040C15D1Ev();
Name_Map name_map_S6040C15[] = {
  NSPAIR(_ZN8S6040C15C1Ev),
  NSPAIR(_ZN8S6040C15D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6040C15[];
extern void _ZN8S6040C152v7Ev();
static  VTBL_ENTRY vtc_S6040C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C15[0]),
  (VTBL_ENTRY)&_ZN8S6040C152v7Ev,
};
extern VTBL_ENTRY _ZTI8S6040C15[];
extern  VTBL_ENTRY _ZTV8S6040C15[];
Class_Descriptor cd_S6040C15 = {  "S6040C15", // class name
  0,0,//no base classes
  &(vtc_S6040C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S6040C15),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6040C15),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  S6040C6  : virtual S6040C7 , S6040C8 , virtual S6040C15 , S281C37_nt {
  ::S20176C18 s6040c6f0;
  long double s6040c6f1;
  int s6040c6f2;
  ::S20176C19 s6040c6f3;
  char s6040c6f4;
  long s6040c6f5;
  ::S20176C3_nt s6040c6f6[8];
  int s6040c6f7:18;
  int s6040c6f8;
  ::S6040C12 s6040c6f9;
  ::S20176C22 s6040c6f10;
  ::S20176C3_nt s6040c6f11;
  virtual  ~S6040C6(); // _ZN7S6040C6D2Ev
  virtual void  v8(); // _ZN7S6040C62v8Ev
  S6040C6(); // tgen
};
//SIG(-1 S6040C6) C1{ VBC2{ BC3{ VBC4{ VBC5{ BC6{ v2 Fi Fp FC7{ m Fp[2]}} VBC8{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC9{} FC7 FC7[9] Fp FC6 FC6} VBC7 v4 Fp FL Fc[2] FC8 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC8 BC7 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC10{ BC11{ VBC4 VBC3 vd Fl Fp FC5 Fp Fs FL Fi FL FC5[4] Fi} BC12{ VBC8 Fp Fs FL Fi:6 Fp[2]} vd v6 FL FD FC9 Fi[9] Fs Fc:5} VBC13{ m FL FC7[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} BC3 VBC14{ v7 Fl Fc Fs[2]} BC7 vd v1 FC15{ BC16{ VBC17{ VBC18{ BC19{ v8 Fi Fp FC7} VBC20{ v9 Fi[6] Fc:2 FD Fp[2] Fi FD FC9 FC7 FC7[9] Fp FC19 FC19} VBC7 v10 Fp FL Fc[2] FC20 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC20 BC7 vd v11 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC9 Fp Fi Fc[8] Fs Fi} FD Fi FC21{ VBC22{ BC23{ VBC19 VBC7 BC18 BC20 vd v13 Fi:25 Fp Fi[3] FC7} vd Fp Fi Fp Fi[7] FC17} VBC23 vd v12 Fi[2] Fs[10] Fi FC9 Fi:32 Fi FC9 Fp Fi:2 Fi FD} Fc Fl FC9[8] Fi:18 Fi FC11 FC24{ BC23 VBC18 VBC25{ VBC26{ VBC20 VBC16 v16 v17 FC16[7] Fi Fs Fi FC18 FL[9]} vd Fc Fi[3]} vd v14 v15 FD[2] FC9 Fi:16 Fi:3} FC9}


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

static void Test_S6040C6()
{
  extern Class_Descriptor cd_S6040C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1941,4268)];
    init_test(&cd_S6040C6, buf);
    S6040C6 *dp, &lv = *(dp=new (buf) S6040C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31040,17068), "sizeof(S6040C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C6)");
    check_base_class_offset(lv, (S6040C5*)(S6040C10*), ABISELECT(29520,16240), "S6040C6");
    check_base_class_offset(lv, (S6040C3*)(S6040C10*), ABISELECT(29984,16496), "S6040C6");
    check_base_class_offset(lv, (S6040C3*)(S6040C13*)(S6040C11*)(S6040C7*), ABISELECT(29984,16496), "S6040C6");
    check_base_class_offset(lv, (S281C37_nt*)(S6040C10*), ABISELECT(30352,16692), "S6040C6");
    check_base_class_offset(lv, (S6040C10*)(S6040C9*), ABISELECT(29520,16240), "S6040C6");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C9*)(S6040C8*)(S6040C7*), ABISELECT(29416,16184), "S6040C6");
    check_base_class_offset(lv, (S6040C9*)(S6040C12*)(S6040C11*)(S6040C7*), ABISELECT(29416,16184), "S6040C6");
    /*is_ambiguous_... S6040C6::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C9*)(S6040C8*), ABISELECT(29416,16184), "S6040C6");
    /*is_ambiguous_... S6040C6::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C9*)(S6040C8*), ABISELECT(29416,16184), "S6040C6");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C8*)(S6040C7*), ABISELECT(24432,13448), "S6040C6");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C8*)(S6040C7*), ABISELECT(24800,13644), "S6040C6");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C8*)(S6040C7*), ABISELECT(24432,13448), "S6040C6");
    /*is_ambiguous_... S6040C6::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C8*), ABISELECT(30368,16700), "S6040C6");
    /*is_ambiguous_... S6040C6::S6040C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C8*), ABISELECT(30736,16896), "S6040C6");
    check_base_class_offset(lv, (S6040C8*)(S6040C12*)(S6040C11*)(S6040C7*), ABISELECT(30368,16700), "S6040C6");
    check_base_class_offset(lv, (S6040C12*)(S6040C11*)(S6040C7*), ABISELECT(24912,13716), "S6040C6");
    check_base_class_offset(lv, (S6040C13*)(S6040C11*)(S6040C7*), ABISELECT(29240,16060), "S6040C6");
    check_base_class_offset(lv, (S6040C11*)(S6040C7*), ABISELECT(24912,13716), "S6040C6");
    check_base_class_offset(lv, (S20176C15*)(S6040C7*), ABISELECT(30848,16968), "S6040C6");
    check_base_class_offset(lv, (S6040C7*), ABISELECT(24432,13448), "S6040C6");
    /*is_ambiguous_... S6040C6::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C8*), 0, "S6040C6");
    /*is_ambiguous_... S6040C6::S6040C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C8*), ABISELECT(368,196), "S6040C6");
    /*is_ambiguous_... S6040C6::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C8*), 0, "S6040C6");
    check_base_class_offset(lv, (S6040C15*), ABISELECT(31008,17052), "S6040C6");
    /*is_ambiguous_... S6040C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(480,268), "S6040C6");
    check_field_offset(lv, s6040c6f0, ABISELECT(496,276), "S6040C6.s6040c6f0");
    check_field_offset(lv, s6040c6f1, ABISELECT(1968,1092), "S6040C6.s6040c6f1");
    check_field_offset(lv, s6040c6f2, ABISELECT(1984,1104), "S6040C6.s6040c6f2");
    check_field_offset(lv, s6040c6f3, ABISELECT(2000,1108), "S6040C6.s6040c6f3");
    check_field_offset(lv, s6040c6f4, ABISELECT(5296,2924), "S6040C6.s6040c6f4");
    check_field_offset(lv, s6040c6f5, ABISELECT(5304,2928), "S6040C6.s6040c6f5");
    check_field_offset(lv, s6040c6f6, ABISELECT(5312,2932), "S6040C6.s6040c6f6");
    set_bf_and_test(lv, s6040c6f7, ABISELECT(5320,2940), 0, 18, 1, "S6040C6");
    set_bf_and_test(lv, s6040c6f7, ABISELECT(5320,2940), 0, 18, hide_sll(1LL<<17), "S6040C6");
    check_field_offset(lv, s6040c6f8, ABISELECT(5324,2944), "S6040C6.s6040c6f8");
    check_field_offset(lv, s6040c6f9, ABISELECT(5328,2948), "S6040C6.s6040c6f9");
    check_field_offset(lv, s6040c6f10, ABISELECT(11088,6076), "S6040C6.s6040c6f10");
    check_field_offset(lv, s6040c6f11, ABISELECT(24416,13444), "S6040C6.s6040c6f11");
    test_class_info(&lv, &cd_S6040C6);
    dp->~S6040C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C6(Test_S6040C6, "S6040C6", ABISELECT(31040,17068));

#else // __cplusplus

extern void _ZN7S6040C6C1Ev();
extern void _ZN7S6040C6D2Ev();
Name_Map name_map_S6040C6[] = {
  NSPAIR(_ZN7S6040C6C1Ev),
  NSPAIR(_ZN7S6040C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6040C5;
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C10;
extern VTBL_ENTRY _ZTI8S6040C10[];
extern  VTBL_ENTRY _ZTV8S6040C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C10[];
extern Class_Descriptor cd_S6040C9;
extern VTBL_ENTRY _ZTI7S6040C9[];
extern  VTBL_ENTRY _ZTV7S6040C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C9[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C8;
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C8;
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
extern Class_Descriptor cd_S6040C12;
extern VTBL_ENTRY _ZTI8S6040C12[];
extern  VTBL_ENTRY _ZTV8S6040C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C12[];
extern Class_Descriptor cd_S6040C13;
extern VTBL_ENTRY _ZTI8S6040C13[];
extern  VTBL_ENTRY _ZTV8S6040C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C13[];
extern Class_Descriptor cd_S6040C11;
extern VTBL_ENTRY _ZTI8S6040C11[];
extern  VTBL_ENTRY _ZTV8S6040C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C11[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
extern Class_Descriptor cd_S6040C7;
extern VTBL_ENTRY _ZTI7S6040C7[];
extern  VTBL_ENTRY _ZTV7S6040C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C7[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C8;
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
extern Class_Descriptor cd_S6040C15;
extern VTBL_ENTRY _ZTI8S6040C15[];
extern  VTBL_ENTRY _ZTV8S6040C15[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S6040C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6040C5,    ABISELECT(29520,16240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C3,    ABISELECT(29984,16496), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(30352,16692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C10,    ABISELECT(29520,16240), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6040C9,    ABISELECT(29416,16184), //bcp->offset
    44, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6040C3,    ABISELECT(24432,13448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(24800,13644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C8,    ABISELECT(24432,13448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6040C3,    ABISELECT(30368,16700), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(30736,16896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C8,    ABISELECT(30368,16700), //bcp->offset
    61, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6040C12,    ABISELECT(24912,13716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6040C13,    ABISELECT(29240,16060), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6040C11,    ABISELECT(24912,13716), //bcp->offset
    31, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20176C15,    ABISELECT(30848,16968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C7,    ABISELECT(24432,13448), //bcp->offset
    15, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6040C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6040C8,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6040C15,    ABISELECT(31008,17052), //bcp->offset
    74, //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
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(480,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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6040C6[];
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C6D1Ev();
extern void _ZN7S6040C6D0Ev();
extern void _ZN7S6040C82v5Ev();
extern void _ZN7S6040C62v8Ev();
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n80_N7S6040C6D1Ev,_ZTv0_n40_N7S6040C6D1Ev)();
extern void ABISELECT(_ZThn24432_N7S6040C6D1Ev,_ZThn13448_N7S6040C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S6040C6D0Ev,_ZTv0_n40_N7S6040C6D0Ev)();
extern void ABISELECT(_ZThn24432_N7S6040C6D0Ev,_ZThn13448_N7S6040C6D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
extern void ABISELECT(_ZTvn480_n80_N7S6040C6D1Ev,_ZTvn268_n40_N7S6040C6D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N7S6040C6D0Ev,_ZTvn268_n40_N7S6040C6D0Ev)();
extern void _ZN8S6040C112v6Ev();
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6040C6D1Ev,_ZTv0_n32_N7S6040C6D1Ev)();
extern void ABISELECT(_ZThn30368_N7S6040C6D1Ev,_ZThn16700_N7S6040C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6040C6D0Ev,_ZTv0_n32_N7S6040C6D0Ev)();
extern void ABISELECT(_ZThn30368_N7S6040C6D0Ev,_ZThn16700_N7S6040C6D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
extern void _ZN8S6040C152v7Ev();
static  VTBL_ENTRY vtc_S6040C6[] = {
  ABISELECT(31008,17052),
  ABISELECT(30848,16968),
  ABISELECT(30368,16700),
  ABISELECT(24432,13448),
  ABISELECT(30352,16692),
  ABISELECT(29984,16496),
  ABISELECT(29520,16240),
  ABISELECT(29416,16184),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6040C62v8Ev,
  ABISELECT(480,268),
  0,
  ABISELECT(-24432,-13448),
  0,
  ABISELECT(6416,3520),
  ABISELECT(5936,3252),
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  ABISELECT(-24432,-13448),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6040C6D1Ev,_ZTv0_n40_N7S6040C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6040C6D0Ev,_ZTv0_n40_N7S6040C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-24912,-13716),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N7S6040C6D1Ev,_ZTvn268_n40_N7S6040C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N7S6040C6D0Ev,_ZTvn268_n40_N7S6040C6D0Ev),
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
  ABISELECT(744,436),
  ABISELECT(-29240,-16060),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-29416,-16184),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-29520,-16240),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
  0,
  ABISELECT(-29984,-16496),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  0,
  ABISELECT(-30368,-16700),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-30368,-16700),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6040C6D1Ev,_ZTv0_n32_N7S6040C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6040C6D0Ev,_ZTv0_n32_N7S6040C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
  0,
  ABISELECT(-31008,-17052),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&_ZN8S6040C152v7Ev,
};
extern VTBL_ENTRY _ZTV7S6040C6[];
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__A__7S6040C6[] = {
  ABISELECT(30352,16692),
  ABISELECT(29984,16496),
  ABISELECT(29520,16240),
  ABISELECT(29416,16184),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C8__A__7S6040C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-29416,-16184),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C8__A__7S6040C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-29520,-16240),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C8__A__7S6040C6[] = {
  0,
  ABISELECT(-29984,-16496),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C7D1Ev();
extern void _ZN7S6040C7D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C7__7S6040C6[] = {
  ABISELECT(6416,3520),
  ABISELECT(5936,3252),
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C87S6040C7__7S6040C6[] = {
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C87S6040C7__7S6040C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C87S6040C7__7S6040C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C87S6040C7__7S6040C6[] = {
  0,
  ABISELECT(-5552,-3048),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN8S6040C11D1Ev();
extern void _ZN8S6040C11D0Ev();
extern void _ZN8S6040C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C117S6040C7__7S6040C6[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN8S6040C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
};
extern void _ZN8S6040C12D1Ev();
extern void _ZN8S6040C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C128S6040C117S6040C7__7S6040C6[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN8S6040C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C128S6040C117S6040C7__7S6040C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C128S6040C117S6040C7__7S6040C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C128S6040C117S6040C7__7S6040C6[] = {
  0,
  ABISELECT(-5072,-2780),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev)();
extern void ABISELECT(_ZThn5456_N8S6040C12D1Ev,_ZThn2984_N8S6040C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev)();
extern void ABISELECT(_ZThn5456_N8S6040C12D0Ev,_ZThn2984_N8S6040C12D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C128S6040C117S6040C7__7S6040C6[] = {
  0,
  ABISELECT(-5456,-2984),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2984),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C138S6040C117S6040C7__7S6040C6[] = {
  ABISELECT(744,436),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C138S6040C117S6040C7__7S6040C6[] = {
  0,
  ABISELECT(-744,-436),
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C117S6040C7__7S6040C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C117S6040C7__7S6040C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C117S6040C7__7S6040C6[] = {
  0,
  ABISELECT(-5072,-2780),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev)();
extern void ABISELECT(_ZThn5456_N8S6040C11D1Ev,_ZThn2984_N8S6040C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev)();
extern void ABISELECT(_ZThn5456_N8S6040C11D0Ev,_ZThn2984_N8S6040C11D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C117S6040C7__7S6040C6[] = {
  0,
  ABISELECT(-5456,-2984),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2984),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C13__8S6040C117S6040C7__7S6040C6[] = {
  ABISELECT(744,436),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C7__7S6040C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C7__7S6040C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C7__7S6040C6[] = {
  0,
  ABISELECT(-5552,-3048),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void ABISELECT(_ZThn480_N7S6040C7D1Ev,_ZThn268_N7S6040C7D1Ev)();
extern void ABISELECT(_ZThn480_N7S6040C7D0Ev,_ZThn268_N7S6040C7D0Ev)();
extern void _ZN8S6040C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C11__7S6040C7__7S6040C6[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N7S6040C7D1Ev,_ZThn268_N7S6040C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N7S6040C7D0Ev,_ZThn268_N7S6040C7D0Ev),
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6040C7D1Ev,_ZTv0_n32_N7S6040C7D1Ev)();
extern void ABISELECT(_ZThn5936_N7S6040C7D1Ev,_ZThn3252_N7S6040C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6040C7D0Ev,_ZTv0_n32_N7S6040C7D0Ev)();
extern void ABISELECT(_ZThn5936_N7S6040C7D0Ev,_ZThn3252_N7S6040C7D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__A1__7S6040C7__7S6040C6[] = {
  0,
  ABISELECT(-5936,-3252),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5936,-3252),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6040C7D1Ev,_ZTv0_n32_N7S6040C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6040C7D0Ev,_ZTv0_n32_N7S6040C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C138S6040C11__7S6040C7__7S6040C6[] = {
  ABISELECT(744,436),
  ABISELECT(-4808,-2612),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C9__7S6040C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C9__7S6040C6[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C6[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C10__7S6040C6[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__A1__7S6040C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C8__A1__7S6040C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C8__A1__7S6040C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C8__A1__7S6040C6[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTT_ENTRY vtt_S6040C6[] = {
  {&(_ZTV7S6040C6[10]),  10,78},
  {&(_tg__ZTV7S6040C8__A__7S6040C6[6]),  6,10},
  {&(_tg__ZTV7S6040C9__7S6040C8__A__7S6040C6[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C8__A__7S6040C6[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C8__A__7S6040C6[3]),  3,4},
  {&(_ZTV7S6040C6[27]),  27,78},
  {&(_ZTV7S6040C6[49]),  49,78},
  {&(_ZTV7S6040C6[55]),  55,78},
  {&(_ZTV7S6040C6[60]),  60,78},
  {&(_ZTV7S6040C6[38]),  38,78},
  {&(_ZTV7S6040C6[70]),  70,78},
  {&(_ZTV7S6040C6[44]),  44,78},
  {&(_ZTV7S6040C6[77]),  77,78},
  {&(_tg__ZTV7S6040C7__7S6040C6[8]),  8,12},
  {&(_tg__ZTV7S6040C87S6040C7__7S6040C6[6]),  6,10},
  {&(_tg__ZTV7S6040C9__7S6040C87S6040C7__7S6040C6[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C87S6040C7__7S6040C6[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C87S6040C7__7S6040C6[3]),  3,4},
  {&(_tg__ZTV8S6040C117S6040C7__7S6040C6[7]),  7,10},
  {&(_tg__ZTV8S6040C128S6040C117S6040C7__7S6040C6[7]),  7,9},
  {&(_tg__ZTV7S6040C9__8S6040C128S6040C117S6040C7__7S6040C6[5]),  5,5},
  {&(_tg__ZTV8S6040C10__8S6040C128S6040C117S6040C7__7S6040C6[6]),  6,8},
  {&(_tg__ZTV7S6040C3__8S6040C128S6040C117S6040C7__7S6040C6[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C128S6040C117S6040C7__7S6040C6[9]),  9,13},
  {&(_tg__ZTV8S6040C138S6040C117S6040C7__7S6040C6[3]),  3,3},
  {&(_tg__ZTV7S6040C3__8S6040C138S6040C117S6040C7__7S6040C6[3]),  3,4},
  {&(_tg__ZTV7S6040C9__8S6040C117S6040C7__7S6040C6[5]),  5,5},
  {&(_tg__ZTV8S6040C10__8S6040C117S6040C7__7S6040C6[6]),  6,8},
  {&(_tg__ZTV7S6040C3__8S6040C117S6040C7__7S6040C6[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C117S6040C7__7S6040C6[9]),  9,13},
  {&(_tg__ZTV8S6040C13__8S6040C117S6040C7__7S6040C6[3]),  3,3},
  {&(_tg__ZTV7S6040C9__7S6040C7__7S6040C6[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C7__7S6040C6[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C7__7S6040C6[3]),  3,4},
  {&(_tg__ZTV8S6040C11__7S6040C7__7S6040C6[7]),  7,10},
  {&(_tg__ZTV7S6040C8__A1__7S6040C7__7S6040C6[9]),  9,13},
  {&(_tg__ZTV8S6040C138S6040C11__7S6040C7__7S6040C6[3]),  3,3},
  {&(_tg__ZTV7S6040C9__7S6040C6[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C9__7S6040C6[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C9__7S6040C6[3]),  3,4},
  {&(_tg__ZTV8S6040C10__7S6040C6[4]),  4,6},
  {&(_tg__ZTV7S6040C3__8S6040C10__7S6040C6[3]),  3,4},
  {&(_tg__ZTV7S6040C8__A1__7S6040C6[6]),  6,10},
  {&(_tg__ZTV7S6040C9__7S6040C8__A1__7S6040C6[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C8__A1__7S6040C6[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C8__A1__7S6040C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6040C6[];
extern  VTBL_ENTRY _ZTV7S6040C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C6[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6040C7D0Ev,_ZTv0_n32_N7S6040C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N7S6040C7D0Ev,_ZThn3252_N7S6040C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6040C7D1Ev,_ZTv0_n32_N7S6040C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N7S6040C7D1Ev,_ZThn3252_N7S6040C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6040C11D0Ev,_ZThn2984_N8S6040C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6040C11D1Ev,_ZThn2984_N8S6040C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6040C12D0Ev,_ZThn2984_N8S6040C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6040C12D1Ev,_ZThn2984_N8S6040C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6040C6D0Ev,_ZTv0_n32_N7S6040C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30368_N7S6040C6D0Ev,_ZThn16700_N7S6040C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6040C6D1Ev,_ZTv0_n32_N7S6040C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30368_N7S6040C6D1Ev,_ZThn16700_N7S6040C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6040C6D0Ev,_ZTv0_n40_N7S6040C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24432_N7S6040C6D0Ev,_ZThn13448_N7S6040C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6040C6D1Ev,_ZTv0_n40_N7S6040C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24432_N7S6040C6D1Ev,_ZThn13448_N7S6040C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6040C6 = {  "S6040C6", // class name
  bases_S6040C6, 21,
  &(vtc_S6040C6[0]), // expected_vtbl_contents
  &(vtt_S6040C6[0]), // expected_vtt_contents
  ABISELECT(31040,17068), // object size
  NSPAIRA(_ZTI7S6040C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6040C6),78, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6040C6),46, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6040C22  : virtual S6040C3 , virtual S6040C8 {
  ::S6040C8 s6040c22f0[7];
  int s6040c22f1;
  short s6040c22f2;
  int s6040c22f3;
  ::S6040C10 s6040c22f4;
  __tsi64 s6040c22f5[9];
  virtual void  v13(); // _ZN8S6040C223v13Ev
  virtual void  v14(); // _ZN8S6040C223v14Ev
  ~S6040C22(); // tgen
  S6040C22(); // tgen
};
//SIG(-1 S6040C22) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 FL[9]}


void  S6040C22 ::v13(){vfunc_called(this, "_ZN8S6040C223v13Ev");}
void  S6040C22 ::v14(){vfunc_called(this, "_ZN8S6040C223v14Ev");}
S6040C22 ::~S6040C22(){ note_dtor("S6040C22", this);} // tgen
S6040C22 ::S6040C22(){ note_ctor("S6040C22", this);} // tgen

static void Test_S6040C22()
{
  extern Class_Descriptor cd_S6040C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1706)];
    init_test(&cd_S6040C22, buf);
    S6040C22 *dp, &lv = *(dp=new (buf) S6040C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6820), "sizeof(S6040C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C22)");
    /*is_ambiguous_... S6040C22::S6040C3 */ AMB_check_base_class_offset(lv, (S6040C3*), ABISELECT(10928,6036), "S6040C22");
    check_base_class_offset(lv, (S6040C3*)(S6040C10*), ABISELECT(10928,6036), "S6040C22");
    check_base_class_offset(lv, (S6040C5*)(S6040C10*), ABISELECT(11872,6556), "S6040C22");
    check_base_class_offset(lv, (S281C37_nt*)(S6040C10*), ABISELECT(12328,6812), "S6040C22");
    check_base_class_offset(lv, (S6040C10*)(S6040C9*), ABISELECT(11872,6556), "S6040C22");
    check_base_class_offset(lv, (S6040C9*)(S6040C8*), ABISELECT(11776,6500), "S6040C22");
    /*is_ambiguous_... S6040C8::S6040C3 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C8*), ABISELECT(11296,6232), "S6040C22");
    /*is_ambiguous_... S6040C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C8*), ABISELECT(11664,6428), "S6040C22");
    check_base_class_offset(lv, (S6040C8*), ABISELECT(11296,6232), "S6040C22");
    check_field_offset(lv, s6040c22f0, ABISELECT(16,4), "S6040C22.s6040c22f0");
    check_field_offset(lv, s6040c22f1, ABISELECT(9984,5492), "S6040C22.s6040c22f1");
    check_field_offset(lv, s6040c22f2, ABISELECT(9988,5496), "S6040C22.s6040c22f2");
    check_field_offset(lv, s6040c22f3, ABISELECT(9992,5500), "S6040C22.s6040c22f3");
    check_field_offset(lv, s6040c22f4, ABISELECT(10000,5504), "S6040C22.s6040c22f4");
    check_field_offset(lv, s6040c22f5, ABISELECT(10848,5964), "S6040C22.s6040c22f5");
    test_class_info(&lv, &cd_S6040C22);
    dp->~S6040C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C22(Test_S6040C22, "S6040C22", ABISELECT(12352,6820));

#else // __cplusplus

extern void _ZN8S6040C22C1Ev();
extern void _ZN8S6040C22D1Ev();
Name_Map name_map_S6040C22[] = {
  NSPAIR(_ZN8S6040C22C1Ev),
  NSPAIR(_ZN8S6040C22D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S6040C5;
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C10;
extern VTBL_ENTRY _ZTI8S6040C10[];
extern  VTBL_ENTRY _ZTV8S6040C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C10[];
extern Class_Descriptor cd_S6040C9;
extern VTBL_ENTRY _ZTI7S6040C9[];
extern  VTBL_ENTRY _ZTV7S6040C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C9[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C8;
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
static Base_Class bases_S6040C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6040C3,    ABISELECT(10928,6036), //bcp->offset
    11, //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_S6040C5,    ABISELECT(11872,6556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C10,    ABISELECT(11872,6556), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6040C9,    ABISELECT(11776,6500), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6040C3,    ABISELECT(11296,6232), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C8,    ABISELECT(11296,6232), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6040C22[];
extern void _ZN8S6040C223v13Ev();
extern void _ZN8S6040C223v14Ev();
extern void _ZN8S6040C22D1Ev();
extern void _ZN8S6040C22D0Ev();
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C22D1Ev,_ZTv0_n32_N8S6040C22D1Ev)();
extern void ABISELECT(_ZThn11296_N8S6040C22D1Ev,_ZThn6232_N8S6040C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C22D0Ev,_ZTv0_n32_N8S6040C22D0Ev)();
extern void ABISELECT(_ZThn11296_N8S6040C22D0Ev,_ZThn6232_N8S6040C22D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY vtc_S6040C22[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C22[0]),
  (VTBL_ENTRY)&_ZN8S6040C223v13Ev,
  (VTBL_ENTRY)&_ZN8S6040C223v14Ev,
  (VTBL_ENTRY)&_ZN8S6040C22D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C22D0Ev,
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI8S6040C22[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI8S6040C22[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C22D1Ev,_ZTv0_n32_N8S6040C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C22D0Ev,_ZTv0_n32_N8S6040C22D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI8S6040C22[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI8S6040C22[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern VTBL_ENTRY _ZTV8S6040C22[];
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C22[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C8__8S6040C22[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C8__8S6040C22[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C8__8S6040C22[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C22[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C9__8S6040C22[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C9__8S6040C22[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C22[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C10__8S6040C22[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTT_ENTRY vtt_S6040C22[] = {
  {&(_ZTV8S6040C22[7]),  7,41},
  {&(_ZTV8S6040C22[14]),  14,41},
  {&(_ZTV8S6040C22[24]),  24,41},
  {&(_ZTV8S6040C22[33]),  33,41},
  {&(_ZTV8S6040C22[39]),  39,41},
  {&(_tg__ZTV7S6040C8__8S6040C22[6]),  6,10},
  {&(_tg__ZTV7S6040C9__7S6040C8__8S6040C22[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C8__8S6040C22[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C8__8S6040C22[3]),  3,4},
  {&(_tg__ZTV7S6040C9__8S6040C22[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C9__8S6040C22[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C9__8S6040C22[3]),  3,4},
  {&(_tg__ZTV8S6040C10__8S6040C22[4]),  4,6},
  {&(_tg__ZTV7S6040C3__8S6040C10__8S6040C22[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6040C22[];
extern  VTBL_ENTRY _ZTV8S6040C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C22[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C22D0Ev,_ZTv0_n32_N8S6040C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N8S6040C22D0Ev,_ZThn6232_N8S6040C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C22D1Ev,_ZTv0_n32_N8S6040C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N8S6040C22D1Ev,_ZThn6232_N8S6040C22D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6040C22 = {  "S6040C22", // class name
  bases_S6040C22, 8,
  &(vtc_S6040C22[0]), // expected_vtbl_contents
  &(vtt_S6040C22[0]), // expected_vtt_contents
  ABISELECT(12352,6820), // object size
  NSPAIRA(_ZTI8S6040C22),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6040C22),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6040C22),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6040C19  : virtual S6040C5 , virtual S281C37_nt , S6040C10 , S6040C3 {
  int s6040c19f0:25;
  void *s6040c19f1;
  int s6040c19f2[3];
  ::S281C37_nt s6040c19f3;
  virtual  ~S6040C19(); // _ZN8S6040C19D2Ev
  virtual void  v10(); // _ZN8S6040C193v10Ev
  S6040C19(); // tgen
};
//SIG(-1 S6040C19) C1{ VBC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC3 BC4{ BC2 VBC5{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC3 FC3[9] Fp FC2 FC2} VBC3 v4 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} BC5 vd v1 Fi:25 Fp Fi[3] FC3}


 S6040C19 ::~S6040C19(){ note_dtor("S6040C19", this);}
void  S6040C19 ::v10(){vfunc_called(this, "_ZN8S6040C193v10Ev");}
S6040C19 ::S6040C19(){ note_ctor("S6040C19", this);} // tgen

static void Test_S6040C19()
{
  extern Class_Descriptor cd_S6040C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(83,177)];
    init_test(&cd_S6040C19, buf);
    S6040C19 *dp, &lv = *(dp=new (buf) S6040C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1312,704), "sizeof(S6040C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C19)");
    /*is_ambiguous_... S6040C19::S6040C5 */ AMB_check_base_class_offset(lv, (S6040C5*), ABISELECT(880,480), "S6040C19");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(920,500), "S6040C19");
    check_base_class_offset(lv, (S281C37_nt*)(S6040C10*), ABISELECT(920,500), "S6040C19");
    check_base_class_offset(lv, (S6040C5*)(S6040C10*), 0, "S6040C19");
    check_base_class_offset(lv, (S6040C3*)(S6040C10*), ABISELECT(944,508), "S6040C19");
    check_base_class_offset(lv, (S6040C10*), 0, "S6040C19");
    /*is_ambiguous_... S6040C19::S6040C3 */ AMB_check_base_class_offset(lv, (S6040C3*), ABISELECT(464,256), "S6040C19");
    set_bf_and_test(lv, s6040c19f0, ABISELECT(832,452), 0, 25, 1, "S6040C19");
    set_bf_and_test(lv, s6040c19f0, ABISELECT(832,452), 0, 25, hide_sll(1LL<<24), "S6040C19");
    check_field_offset(lv, s6040c19f1, ABISELECT(840,456), "S6040C19.s6040c19f1");
    check_field_offset(lv, s6040c19f2, ABISELECT(848,460), "S6040C19.s6040c19f2");
    check_field_offset(lv, s6040c19f3, ABISELECT(864,472), "S6040C19.s6040c19f3");
    test_class_info(&lv, &cd_S6040C19);
    dp->~S6040C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C19(Test_S6040C19, "S6040C19", ABISELECT(1312,704));

#else // __cplusplus

extern void _ZN8S6040C19C1Ev();
extern void _ZN8S6040C19D2Ev();
Name_Map name_map_S6040C19[] = {
  NSPAIR(_ZN8S6040C19C1Ev),
  NSPAIR(_ZN8S6040C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6040C5;
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C5;
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S6040C10;
extern VTBL_ENTRY _ZTI8S6040C10[];
extern  VTBL_ENTRY _ZTV8S6040C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C10[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
static Base_Class bases_S6040C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6040C5,    ABISELECT(880,480), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(920,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6040C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C3,    ABISELECT(944,508), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S6040C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6040C3,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6040C19[];
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
extern void _ZN8S6040C19D1Ev();
extern void _ZN8S6040C19D0Ev();
extern void _ZN8S6040C193v10Ev();
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C52v3Ev();
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY vtc_S6040C19[] = {
  ABISELECT(880,480),
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C19[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
  (VTBL_ENTRY)&_ZN8S6040C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C19D0Ev,
  (VTBL_ENTRY)&_ZN8S6040C193v10Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6040C19[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  0,
  ABISELECT(-880,-480),
  (VTBL_ENTRY)&(_ZTI8S6040C19[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI8S6040C19[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S6040C19[];
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C19[] = {
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C10__8S6040C19[] = {
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTT_ENTRY vtt_S6040C19[] = {
  {&(_ZTV8S6040C19[5]),  5,21},
  {&(_tg__ZTV8S6040C10__8S6040C19[4]),  4,6},
  {&(_tg__ZTV7S6040C3__8S6040C10__8S6040C19[3]),  3,4},
  {&(_ZTV8S6040C19[16]),  16,21},
  {&(_ZTV8S6040C19[20]),  20,21},
};
extern VTBL_ENTRY _ZTI8S6040C19[];
extern  VTBL_ENTRY _ZTV8S6040C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C19[];
Class_Descriptor cd_S6040C19 = {  "S6040C19", // class name
  bases_S6040C19, 6,
  &(vtc_S6040C19[0]), // expected_vtbl_contents
  &(vtt_S6040C19[0]), // expected_vtt_contents
  ABISELECT(1312,704), // object size
  NSPAIRA(_ZTI8S6040C19),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6040C19),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6040C19),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6040C23  {
  int s6040c23f0;
  void *s6040c23f1[10];
  char s6040c23f2;
  ::S6040C22 s6040c23f3;
  short s6040c23f4:12;
  ::S6040C19 s6040c23f5;
  void  mf6040c23(); // _ZN8S6040C239mf6040c23Ev
};
//SIG(-1 S6040C23) C1{ m Fi Fp[10] Fc FC2{ VBC3{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v4 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v5 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC7[7] Fi Fs Fi FC9 FL[9]} Fs:12 FC10{ VBC6 VBC5 BC9 BC3 vd v7 Fi:25 Fp Fi[3] FC5}}


void  S6040C23 ::mf6040c23(){}

static void Test_S6040C23()
{
  {
    init_simple_test("S6040C23");
    static S6040C23 lv;
    check2(sizeof(lv), ABISELECT(13776,7576), "sizeof(S6040C23)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C23)");
    check_field_offset(lv, s6040c23f0, 0, "S6040C23.s6040c23f0");
    check_field_offset(lv, s6040c23f1, ABISELECT(8,4), "S6040C23.s6040c23f1");
    check_field_offset(lv, s6040c23f2, ABISELECT(88,44), "S6040C23.s6040c23f2");
    check_field_offset(lv, s6040c23f3, ABISELECT(96,48), "S6040C23.s6040c23f3");
    set_bf_and_test(lv, s6040c23f4, ABISELECT(12448,6868), 0, 12, 1, "S6040C23");
    set_bf_and_test(lv, s6040c23f4, ABISELECT(12448,6868), 0, 12, hide_sll(1LL<<11), "S6040C23");
    check_field_offset(lv, s6040c23f5, ABISELECT(12464,6872), "S6040C23.s6040c23f5");
  }
}
static Arrange_To_Call_Me vS6040C23(Test_S6040C23, "S6040C23", ABISELECT(13776,7576));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S6040C23[];
VTBL_ENTRY *P__ZTI8S6040C23 = _ZTI8S6040C23; 
Class_Descriptor cd_S6040C23 = {  "S6040C23", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(13776,7576), // object size
  NSPAIRA(_ZTI8S6040C23),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  S6040C24  : virtual S6040C3 , S6040C11 , S6040C13 {
  ~S6040C24(); // tgen
  S6040C24(); // tgen
};
//SIG(-1 S6040C24) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} BC6{ BC7{ VBC8{ VBC9{ BC5 VBC2 VBC4 v3 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} VBC10{ VBC8 BC2 BC4 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC9 Fp Fs FL Fi FL FC9[4] Fi} BC11{ VBC2 Fp Fs FL Fi:6 Fp[2]} vd v5 FL FD FC3 Fi[9] Fs Fc:5} BC11}


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

static void Test_S6040C24()
{
  extern Class_Descriptor cd_S6040C24;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(373,815)];
    init_test(&cd_S6040C24, buf);
    S6040C24 *dp, &lv = *(dp=new (buf) S6040C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5952,3256), "sizeof(S6040C24)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C24)");
    /*is_ambiguous_... S6040C24::S6040C3 */ AMB_check_base_class_offset(lv, (S6040C3*), ABISELECT(4528,2472), "S6040C24");
    check_base_class_offset(lv, (S6040C3*)(S6040C10*), ABISELECT(4528,2472), "S6040C24");
    check_base_class_offset(lv, (S6040C3*)(S6040C13*)(S6040C11*), ABISELECT(4528,2472), "S6040C24");
    /*is_ambiguous_... S6040C24::S6040C13 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C13*), ABISELECT(4528,2472), "S6040C24");
    check_base_class_offset(lv, (S6040C5*)(S6040C10*), ABISELECT(4992,2724), "S6040C24");
    check_base_class_offset(lv, (S281C37_nt*)(S6040C10*), ABISELECT(5448,2980), "S6040C24");
    check_base_class_offset(lv, (S6040C10*)(S6040C9*), ABISELECT(4992,2724), "S6040C24");
    check_base_class_offset(lv, (S6040C9*)(S6040C12*)(S6040C11*), ABISELECT(4896,2668), "S6040C24");
    check_base_class_offset(lv, (S6040C9*)(S6040C8*), ABISELECT(4896,2668), "S6040C24");
    /*is_ambiguous_... S6040C8::S6040C3 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C8*), ABISELECT(5472,2988), "S6040C24");
    /*is_ambiguous_... S6040C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C8*), ABISELECT(5840,3184), "S6040C24");
    check_base_class_offset(lv, (S6040C8*)(S6040C12*)(S6040C11*), ABISELECT(5472,2988), "S6040C24");
    check_base_class_offset(lv, (S6040C12*)(S6040C11*), 0, "S6040C24");
    check_base_class_offset(lv, (S6040C13*)(S6040C11*), ABISELECT(4328,2344), "S6040C24");
    check_base_class_offset(lv, (S6040C11*), 0, "S6040C24");
    /*is_ambiguous_... S6040C24::S6040C13 */ AMB_check_base_class_offset(lv, (S6040C13*), ABISELECT(4464,2440), "S6040C24");
    test_class_info(&lv, &cd_S6040C24);
    dp->~S6040C24();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C24(Test_S6040C24, "S6040C24", ABISELECT(5952,3256));

#else // __cplusplus

extern void _ZN8S6040C24C1Ev();
extern void _ZN8S6040C24D1Ev();
Name_Map name_map_S6040C24[] = {
  NSPAIR(_ZN8S6040C24C1Ev),
  NSPAIR(_ZN8S6040C24D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S6040C5;
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C10;
extern VTBL_ENTRY _ZTI8S6040C10[];
extern  VTBL_ENTRY _ZTV8S6040C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C10[];
extern Class_Descriptor cd_S6040C9;
extern VTBL_ENTRY _ZTI7S6040C9[];
extern  VTBL_ENTRY _ZTV7S6040C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C9[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C8;
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
extern Class_Descriptor cd_S6040C12;
extern VTBL_ENTRY _ZTI8S6040C12[];
extern  VTBL_ENTRY _ZTV8S6040C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C12[];
extern Class_Descriptor cd_S6040C13;
extern VTBL_ENTRY _ZTI8S6040C13[];
extern  VTBL_ENTRY _ZTV8S6040C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C13[];
extern Class_Descriptor cd_S6040C11;
extern VTBL_ENTRY _ZTI8S6040C11[];
extern  VTBL_ENTRY _ZTV8S6040C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C11[];
extern Class_Descriptor cd_S6040C13;
extern VTBL_ENTRY _ZTI8S6040C13[];
extern  VTBL_ENTRY _ZTV8S6040C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C13[];
static Base_Class bases_S6040C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6040C3,    ABISELECT(4528,2472), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6040C5,    ABISELECT(4992,2724), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(5448,2980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C10,    ABISELECT(4992,2724), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6040C9,    ABISELECT(4896,2668), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6040C3,    ABISELECT(5472,2988), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5840,3184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C8,    ABISELECT(5472,2988), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6040C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6040C13,    ABISELECT(4328,2344), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6040C11,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6040C13,    ABISELECT(4464,2440), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6040C24[];
extern void _ZN8S6040C24D1Ev();
extern void _ZN8S6040C24D0Ev();
extern void _ZN8S6040C112v6Ev();
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C24D1Ev,_ZTv0_n32_N8S6040C24D1Ev)();
extern void ABISELECT(_ZThn5472_N8S6040C24D1Ev,_ZThn2988_N8S6040C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C24D0Ev,_ZTv0_n32_N8S6040C24D0Ev)();
extern void ABISELECT(_ZThn5472_N8S6040C24D0Ev,_ZThn2988_N8S6040C24D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY vtc_S6040C24[] = {
  ABISELECT(5472,2988),
  ABISELECT(5448,2980),
  ABISELECT(4528,2472),
  ABISELECT(4992,2724),
  ABISELECT(4896,2668),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
  (VTBL_ENTRY)&_ZN8S6040C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C24D0Ev,
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
  ABISELECT(200,128),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
  ABISELECT(64,32),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
  0,
  ABISELECT(-4528,-2472),
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(-4896,-2668),
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-4992,-2724),
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
  0,
  ABISELECT(-5472,-2988),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-944,-516),
  ABISELECT(-480,-264),
  ABISELECT(-576,-320),
  ABISELECT(-5472,-2988),
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C24D1Ev,_ZTv0_n32_N8S6040C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C24D0Ev,_ZTv0_n32_N8S6040C24D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
extern VTBL_ENTRY _ZTV8S6040C24[];
extern void _ZN8S6040C11D1Ev();
extern void _ZN8S6040C11D0Ev();
extern void _ZN8S6040C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C11__8S6040C24[] = {
  ABISELECT(5472,2988),
  ABISELECT(5448,2980),
  ABISELECT(4528,2472),
  ABISELECT(4992,2724),
  ABISELECT(4896,2668),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN8S6040C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
};
extern void _ZN8S6040C12D1Ev();
extern void _ZN8S6040C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C128S6040C11__8S6040C24[] = {
  ABISELECT(5472,2988),
  ABISELECT(5448,2980),
  ABISELECT(4528,2472),
  ABISELECT(4992,2724),
  ABISELECT(4896,2668),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN8S6040C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C128S6040C11__8S6040C24[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(-4896,-2668),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C128S6040C11__8S6040C24[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-4992,-2724),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C128S6040C11__8S6040C24[] = {
  0,
  ABISELECT(-4528,-2472),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev)();
extern void ABISELECT(_ZThn5472_N8S6040C12D1Ev,_ZThn2988_N8S6040C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev)();
extern void ABISELECT(_ZThn5472_N8S6040C12D0Ev,_ZThn2988_N8S6040C12D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C128S6040C11__8S6040C24[] = {
  0,
  ABISELECT(-5472,-2988),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-944,-516),
  ABISELECT(-480,-264),
  ABISELECT(-576,-320),
  ABISELECT(-5472,-2988),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C138S6040C11__8S6040C24[] = {
  ABISELECT(200,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C138S6040C11__8S6040C24[] = {
  0,
  ABISELECT(-200,-128),
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C11__8S6040C24[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(-4896,-2668),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C11__8S6040C24[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-4992,-2724),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C11__8S6040C24[] = {
  0,
  ABISELECT(-4528,-2472),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev)();
extern void ABISELECT(_ZThn5472_N8S6040C11D1Ev,_ZThn2988_N8S6040C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev)();
extern void ABISELECT(_ZThn5472_N8S6040C11D0Ev,_ZThn2988_N8S6040C11D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C11__8S6040C24[] = {
  0,
  ABISELECT(-5472,-2988),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-944,-516),
  ABISELECT(-480,-264),
  ABISELECT(-576,-320),
  ABISELECT(-5472,-2988),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C13__8S6040C11__8S6040C24[] = {
  ABISELECT(200,128),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6040C13__A1__8S6040C24[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C13__A1__8S6040C24[] = {
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C24[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C9__8S6040C24[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C9__8S6040C24[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C24[] = {
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C10__8S6040C24[] = {
  0,
  ABISELECT(464,252),
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C24[] = {
  ABISELECT(-24,-8),
  ABISELECT(-944,-516),
  ABISELECT(-480,-264),
  ABISELECT(-576,-320),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C8__8S6040C24[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(576,320),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C8__8S6040C24[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(480,264),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C8__8S6040C24[] = {
  0,
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTT_ENTRY vtt_S6040C24[] = {
  {&(_ZTV8S6040C24[7]),  7,46},
  {&(_tg__ZTV8S6040C11__8S6040C24[7]),  7,10},
  {&(_tg__ZTV8S6040C128S6040C11__8S6040C24[7]),  7,9},
  {&(_tg__ZTV7S6040C9__8S6040C128S6040C11__8S6040C24[5]),  5,5},
  {&(_tg__ZTV8S6040C10__8S6040C128S6040C11__8S6040C24[6]),  6,8},
  {&(_tg__ZTV7S6040C3__8S6040C128S6040C11__8S6040C24[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C128S6040C11__8S6040C24[9]),  9,13},
  {&(_tg__ZTV8S6040C138S6040C11__8S6040C24[3]),  3,3},
  {&(_tg__ZTV7S6040C3__8S6040C138S6040C11__8S6040C24[3]),  3,4},
  {&(_tg__ZTV7S6040C9__8S6040C11__8S6040C24[5]),  5,5},
  {&(_tg__ZTV8S6040C10__8S6040C11__8S6040C24[6]),  6,8},
  {&(_tg__ZTV7S6040C3__8S6040C11__8S6040C24[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C11__8S6040C24[9]),  9,13},
  {&(_tg__ZTV8S6040C13__8S6040C11__8S6040C24[3]),  3,3},
  {&(_tg__ZTV8S6040C13__A1__8S6040C24[3]),  3,3},
  {&(_tg__ZTV7S6040C3__8S6040C13__A1__8S6040C24[3]),  3,4},
  {&(_ZTV8S6040C24[19]),  19,46},
  {&(_ZTV8S6040C24[25]),  25,46},
  {&(_ZTV8S6040C24[31]),  31,46},
  {&(_ZTV8S6040C24[42]),  42,46},
  {&(_ZTV8S6040C24[13]),  13,46},
  {&(_ZTV8S6040C24[16]),  16,46},
  {&(_tg__ZTV7S6040C9__8S6040C24[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C9__8S6040C24[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C9__8S6040C24[3]),  3,4},
  {&(_tg__ZTV8S6040C10__8S6040C24[4]),  4,6},
  {&(_tg__ZTV7S6040C3__8S6040C10__8S6040C24[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C24[6]),  6,10},
  {&(_tg__ZTV7S6040C9__7S6040C8__8S6040C24[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C8__8S6040C24[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C8__8S6040C24[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6040C24[];
extern  VTBL_ENTRY _ZTV8S6040C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C24[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N8S6040C11D0Ev,_ZThn2988_N8S6040C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N8S6040C11D1Ev,_ZThn2988_N8S6040C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N8S6040C12D0Ev,_ZThn2988_N8S6040C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N8S6040C12D1Ev,_ZThn2988_N8S6040C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C24D0Ev,_ZTv0_n32_N8S6040C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N8S6040C24D0Ev,_ZThn2988_N8S6040C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C24D1Ev,_ZTv0_n32_N8S6040C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N8S6040C24D1Ev,_ZThn2988_N8S6040C24D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6040C24 = {  "S6040C24", // class name
  bases_S6040C24, 12,
  &(vtc_S6040C24[0]), // expected_vtbl_contents
  &(vtt_S6040C24[0]), // expected_vtt_contents
  ABISELECT(5952,3256), // object size
  NSPAIRA(_ZTI8S6040C24),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6040C24),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6040C24),31, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6040C1  : S281C37_nt , virtual S6040C3 , S6040C6 , virtual S6040C23 , S6040C24 {
  unsigned char s6040c1f0:1;
  ::S6040C24 s6040c1f1[4];
  int s6040c1f2;
  char s6040c1f3[8];
  int s6040c1f4[4];
  char s6040c1f5[2];
  virtual  ~S6040C1(); // _ZN7S6040C1D2Ev
  virtual void  v1(); // _ZN7S6040C12v1Ev
  S6040C1(); // tgen
};
//SIG(1 S6040C1) C1{ BC2{ m Fp[2]} VBC3{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC2 FC2[9] Fp FC5{ v3 Fi Fp FC2} FC5} BC6{ VBC7{ BC8{ VBC9{ VBC10{ BC5 VBC3 VBC2 v4 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC2} BC3 BC2 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC11{ BC12{ VBC9 VBC8 vd Fl Fp FC10 Fp Fs FL Fi FL FC10[4] Fi} BC13{ VBC3 Fp Fs FL Fi:6 Fp[2]} vd v6 FL FD FC4 Fi[9] Fs Fc:5} VBC14{ m FL FC2[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} BC8 VBC15{ v7 Fl Fc Fs[2]} BC2 vd v8 FC16{ BC17{ VBC18{ VBC19{ BC20{ v9 Fi Fp FC2} VBC21{ v10 Fi[6] Fc:2 FD Fp[2] Fi FD FC4 FC2 FC2[9] Fp FC20 FC20} VBC2 v11 Fp FL Fc[2] FC21 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC2} BC21 BC2 vd v12 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC4 Fp Fi Fc[8] Fs Fi} FD Fi FC22{ VBC23{ BC24{ VBC20 VBC2 BC19 BC21 vd v14 Fi:25 Fp Fi[3] FC2} vd Fp Fi Fp Fi[7] FC18} VBC24 vd v13 Fi[2] Fs[10] Fi FC4 Fi:32 Fi FC4 Fp Fi:2 Fi FD} Fc Fl FC4[8] Fi:18 Fi FC12 FC25{ BC24 VBC19 VBC26{ VBC27{ VBC21 VBC17 v17 v18 FC17[7] Fi Fs Fi FC19 FL[9]} vd Fc Fi[3]} vd v15 v16 FD[2] FC4 Fi:16 Fi:3} FC4} VBC28{ m Fi Fp[10] Fc FC29{ VBC3 VBC8 v19 v20 FC8[7] Fi Fs Fi FC10 FL[9]} Fs:12 FC30{ VBC5 VBC2 BC10 BC3 vd v21 Fi:25 Fp Fi[3] FC2}} BC31{ VBC3 BC11 BC13} vd v1 Fc:1 FC31[4] Fi Fc[8] Fi[4] Fc[2]}


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

static void Test_S6040C1()
{
  extern Class_Descriptor cd_S6040C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4576,10047)];
    init_test(&cd_S6040C1, buf);
    S6040C1 *dp, &lv = *(dp=new (buf) S6040C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(73200,40184), "sizeof(S6040C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6040C1)");
    /*is_ambiguous_... S6040C1::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(24424,13448), "S6040C1");
    /*is_ambiguous_... S6040C1::S6040C3 */ AMB_check_base_class_offset(lv, (S6040C3*), ABISELECT(52816,28988), "S6040C1");
    check_base_class_offset(lv, (S6040C3*)(S6040C10*), ABISELECT(52816,28988), "S6040C1");
    check_base_class_offset(lv, (S6040C3*)(S6040C13*)(S6040C11*)(S6040C7*), ABISELECT(52816,28988), "S6040C1");
    /*is_ambiguous_... S6040C24::S6040C3 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C24*), ABISELECT(52816,28988), "S6040C1");
    check_base_class_offset(lv, (S6040C3*)(S6040C13*)(S6040C11*)(S6040C24*), ABISELECT(52816,28988), "S6040C1");
    /*is_ambiguous_... S6040C24::S6040C13 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C13*)(S6040C24*), ABISELECT(52816,28988), "S6040C1");
    check_base_class_offset(lv, (S6040C5*)(S6040C10*), ABISELECT(58272,31976), "S6040C1");
    check_base_class_offset(lv, (S281C37_nt*)(S6040C10*), ABISELECT(58728,32232), "S6040C1");
    check_base_class_offset(lv, (S6040C10*)(S6040C9*), ABISELECT(58272,31976), "S6040C1");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C9*)(S6040C8*)(S6040C7*), ABISELECT(58168,31920), "S6040C1");
    check_base_class_offset(lv, (S6040C9*)(S6040C12*)(S6040C11*)(S6040C7*), ABISELECT(58168,31920), "S6040C1");
    /*is_ambiguous_... S6040C1::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C9*)(S6040C8*), ABISELECT(58168,31920), "S6040C1");
    /*is_ambiguous_... S6040C6::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C9*)(S6040C8*)(S6040C6*), ABISELECT(58168,31920), "S6040C1");
    check_base_class_offset(lv, (S6040C9*)(S6040C12*)(S6040C11*)(S6040C24*), ABISELECT(58168,31920), "S6040C1");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C8*)(S6040C7*), ABISELECT(53184,29184), "S6040C1");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C8*)(S6040C7*), ABISELECT(53552,29380), "S6040C1");
    /*is_ambiguous_... S6040C7::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C8*)(S6040C7*), ABISELECT(53184,29184), "S6040C1");
    /*is_ambiguous_... S6040C1::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C8*), ABISELECT(58752,32240), "S6040C1");
    /*is_ambiguous_... S6040C1::S6040C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C8*), ABISELECT(59120,32436), "S6040C1");
    check_base_class_offset(lv, (S6040C8*)(S6040C12*)(S6040C11*)(S6040C7*), ABISELECT(58752,32240), "S6040C1");
    check_base_class_offset(lv, (S6040C8*)(S6040C12*)(S6040C11*)(S6040C24*), ABISELECT(58752,32240), "S6040C1");
    check_base_class_offset(lv, (S6040C12*)(S6040C11*)(S6040C7*), ABISELECT(53664,29452), "S6040C1");
    check_base_class_offset(lv, (S6040C13*)(S6040C11*)(S6040C7*), ABISELECT(57992,31796), "S6040C1");
    check_base_class_offset(lv, (S6040C11*)(S6040C7*), ABISELECT(53664,29452), "S6040C1");
    check_base_class_offset(lv, (S20176C15*)(S6040C7*), ABISELECT(59232,32508), "S6040C1");
    check_base_class_offset(lv, (S6040C7*)(S6040C6*), ABISELECT(53184,29184), "S6040C1");
    /*is_ambiguous_... S6040C6::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C3*)(S6040C8*)(S6040C6*), 0, "S6040C1");
    /*is_ambiguous_... S6040C6::S6040C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C8*)(S6040C6*), ABISELECT(368,196), "S6040C1");
    /*is_ambiguous_... S6040C6::S6040C8 */ AMB_check_base_class_offset(lv, (S6040C8*)(S6040C6*), 0, "S6040C1");
    check_base_class_offset(lv, (S6040C15*)(S6040C6*), ABISELECT(59392,32592), "S6040C1");
    /*is_ambiguous_... S6040C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6040C6*), ABISELECT(480,268), "S6040C1");
    check_base_class_offset(lv, (S6040C6*), 0, "S6040C1");
    check_base_class_offset(lv, (S6040C23*), ABISELECT(59424,32608), "S6040C1");
    check_base_class_offset(lv, (S6040C12*)(S6040C11*)(S6040C24*), ABISELECT(24448,13456), "S6040C1");
    check_base_class_offset(lv, (S6040C13*)(S6040C11*)(S6040C24*), ABISELECT(28776,15800), "S6040C1");
    check_base_class_offset(lv, (S6040C11*)(S6040C24*), ABISELECT(24448,13456), "S6040C1");
    /*is_ambiguous_... S6040C24::S6040C13 */ AMB_check_base_class_offset(lv, (S6040C13*)(S6040C24*), ABISELECT(28912,15896), "S6040C1");
    check_base_class_offset(lv, (S6040C24*), ABISELECT(24448,13456), "S6040C1");
    set_bf_and_test(lv, s6040c1f0, ABISELECT(28968,15928), 0, 1, 1, "S6040C1");
    check_field_offset(lv, s6040c1f1, ABISELECT(28976,15932), "S6040C1.s6040c1f1");
    check_field_offset(lv, s6040c1f2, ABISELECT(52784,28956), "S6040C1.s6040c1f2");
    check_field_offset(lv, s6040c1f3, ABISELECT(52788,28960), "S6040C1.s6040c1f3");
    check_field_offset(lv, s6040c1f4, ABISELECT(52796,28968), "S6040C1.s6040c1f4");
    check_field_offset(lv, s6040c1f5, ABISELECT(52812,28984), "S6040C1.s6040c1f5");
    test_class_info(&lv, &cd_S6040C1);
    dp->~S6040C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6040C1(Test_S6040C1, "S6040C1", ABISELECT(73200,40184));

#else // __cplusplus

extern void _ZN7S6040C1C1Ev();
extern void _ZN7S6040C1D2Ev();
Name_Map name_map_S6040C1[] = {
  NSPAIR(_ZN7S6040C1C1Ev),
  NSPAIR(_ZN7S6040C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S6040C5;
extern VTBL_ENTRY _ZTI7S6040C5[];
extern  VTBL_ENTRY _ZTV7S6040C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C10;
extern VTBL_ENTRY _ZTI8S6040C10[];
extern  VTBL_ENTRY _ZTV8S6040C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C10[];
extern Class_Descriptor cd_S6040C9;
extern VTBL_ENTRY _ZTI7S6040C9[];
extern  VTBL_ENTRY _ZTV7S6040C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C9[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C8;
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C8;
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
extern Class_Descriptor cd_S6040C12;
extern VTBL_ENTRY _ZTI8S6040C12[];
extern  VTBL_ENTRY _ZTV8S6040C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C12[];
extern Class_Descriptor cd_S6040C13;
extern VTBL_ENTRY _ZTI8S6040C13[];
extern  VTBL_ENTRY _ZTV8S6040C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C13[];
extern Class_Descriptor cd_S6040C11;
extern VTBL_ENTRY _ZTI8S6040C11[];
extern  VTBL_ENTRY _ZTV8S6040C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C11[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
extern Class_Descriptor cd_S6040C7;
extern VTBL_ENTRY _ZTI7S6040C7[];
extern  VTBL_ENTRY _ZTV7S6040C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C7[];
extern Class_Descriptor cd_S6040C3;
extern VTBL_ENTRY _ZTI7S6040C3[];
extern  VTBL_ENTRY _ZTV7S6040C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C8;
extern VTBL_ENTRY _ZTI7S6040C8[];
extern  VTBL_ENTRY _ZTV7S6040C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C8[];
extern Class_Descriptor cd_S6040C15;
extern VTBL_ENTRY _ZTI8S6040C15[];
extern  VTBL_ENTRY _ZTV8S6040C15[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6040C6;
extern VTBL_ENTRY _ZTI7S6040C6[];
extern  VTBL_ENTRY _ZTV7S6040C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C6[];
extern Class_Descriptor cd_S6040C23;
extern VTBL_ENTRY _ZTI8S6040C23[];
extern Class_Descriptor cd_S6040C12;
extern VTBL_ENTRY _ZTI8S6040C12[];
extern  VTBL_ENTRY _ZTV8S6040C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C12[];
extern Class_Descriptor cd_S6040C13;
extern VTBL_ENTRY _ZTI8S6040C13[];
extern  VTBL_ENTRY _ZTV8S6040C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C13[];
extern Class_Descriptor cd_S6040C11;
extern VTBL_ENTRY _ZTI8S6040C11[];
extern  VTBL_ENTRY _ZTV8S6040C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C11[];
extern Class_Descriptor cd_S6040C13;
extern VTBL_ENTRY _ZTI8S6040C13[];
extern  VTBL_ENTRY _ZTV8S6040C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C13[];
extern Class_Descriptor cd_S6040C24;
extern VTBL_ENTRY _ZTI8S6040C24[];
extern  VTBL_ENTRY _ZTV8S6040C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6040C24[];
static Base_Class bases_S6040C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C37_nt,    ABISELECT(24424,13448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6040C3,    ABISELECT(52816,28988), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6040C5,    ABISELECT(58272,31976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(58728,32232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C10,    ABISELECT(58272,31976), //bcp->offset
    71, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6040C9,    ABISELECT(58168,31920), //bcp->offset
    66, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6040C3,    ABISELECT(53184,29184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(53552,29380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C8,    ABISELECT(53184,29184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6040C3,    ABISELECT(58752,32240), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(59120,32436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C8,    ABISELECT(58752,32240), //bcp->offset
    79, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6040C12,    ABISELECT(53664,29452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6040C13,    ABISELECT(57992,31796), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6040C11,    ABISELECT(53664,29452), //bcp->offset
    53, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20176C15,    ABISELECT(59232,32508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C7,    ABISELECT(53184,29184), //bcp->offset
    37, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S6040C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6040C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6040C15,    ABISELECT(59392,32592), //bcp->offset
    92, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(480,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
    22, //immediately_derived
  0, 0},
  {&cd_S6040C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6040C23,    ABISELECT(59424,32608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6040C12,    ABISELECT(24448,13456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6040C13,    ABISELECT(28776,15800), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6040C11,    ABISELECT(24448,13456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6040C13,    ABISELECT(28912,15896), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6040C24,    ABISELECT(24448,13456), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6040C1[];
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C1D1Ev();
extern void _ZN7S6040C1D0Ev();
extern void _ZN7S6040C82v5Ev();
extern void _ZN7S6040C62v8Ev();
extern void _ZN7S6040C12v1Ev();
extern void ABISELECT(_ZThn24448_N7S6040C1D1Ev,_ZThn13456_N7S6040C1D1Ev)();
extern void ABISELECT(_ZThn24448_N7S6040C1D0Ev,_ZThn13456_N7S6040C1D0Ev)();
extern void _ZN8S6040C112v6Ev();
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n80_N7S6040C1D1Ev,_ZTv0_n40_N7S6040C1D1Ev)();
extern void ABISELECT(_ZThn53184_N7S6040C1D1Ev,_ZThn29184_N7S6040C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S6040C1D0Ev,_ZTv0_n40_N7S6040C1D0Ev)();
extern void ABISELECT(_ZThn53184_N7S6040C1D0Ev,_ZThn29184_N7S6040C1D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
extern void ABISELECT(_ZTvn480_n80_N7S6040C1D1Ev,_ZTvn268_n40_N7S6040C1D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N7S6040C1D0Ev,_ZTvn268_n40_N7S6040C1D0Ev)();
extern void _ZN8S6040C112v6Ev();
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6040C1D1Ev,_ZTv0_n32_N7S6040C1D1Ev)();
extern void ABISELECT(_ZThn58752_N7S6040C1D1Ev,_ZThn32240_N7S6040C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6040C1D0Ev,_ZTv0_n32_N7S6040C1D0Ev)();
extern void ABISELECT(_ZThn58752_N7S6040C1D0Ev,_ZThn32240_N7S6040C1D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
extern void _ZN8S6040C152v7Ev();
static  VTBL_ENTRY vtc_S6040C1[] = {
  ABISELECT(59424,32608),
  ABISELECT(59392,32592),
  ABISELECT(59232,32508),
  ABISELECT(58752,32240),
  ABISELECT(53184,29184),
  ABISELECT(58728,32232),
  ABISELECT(52816,28988),
  ABISELECT(58272,31976),
  ABISELECT(58168,31920),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C1[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6040C62v8Ev,
  (VTBL_ENTRY)&_ZN7S6040C12v1Ev,
  ABISELECT(34304,18784),
  ABISELECT(34280,18776),
  ABISELECT(28368,15532),
  ABISELECT(33824,18520),
  ABISELECT(33720,18464),
  ABISELECT(-24448,-13456),
  (VTBL_ENTRY)&(_ZTI7S6040C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24448_N7S6040C1D1Ev,_ZThn13456_N7S6040C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24448_N7S6040C1D0Ev,_ZThn13456_N7S6040C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
  ABISELECT(24040,13188),
  ABISELECT(-28776,-15800),
  (VTBL_ENTRY)&(_ZTI7S6040C1[0]),
  ABISELECT(23904,13092),
  ABISELECT(-28912,-15896),
  (VTBL_ENTRY)&(_ZTI7S6040C1[0]),
  0,
  ABISELECT(-52816,-28988),
  (VTBL_ENTRY)&(_ZTI7S6040C1[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  ABISELECT(480,268),
  0,
  ABISELECT(-53184,-29184),
  0,
  ABISELECT(6048,3324),
  ABISELECT(5568,3056),
  ABISELECT(5544,3048),
  ABISELECT(-368,-196),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  ABISELECT(-53184,-29184),
  (VTBL_ENTRY)&(_ZTI7S6040C1[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6040C1D1Ev,_ZTv0_n40_N7S6040C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6040C1D0Ev,_ZTv0_n40_N7S6040C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
  ABISELECT(5088,2788),
  ABISELECT(5064,2780),
  ABISELECT(-848,-464),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-53664,-29452),
  (VTBL_ENTRY)&(_ZTI7S6040C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N7S6040C1D1Ev,_ZTvn268_n40_N7S6040C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N7S6040C1D0Ev,_ZTvn268_n40_N7S6040C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
  ABISELECT(-5176,-2808),
  ABISELECT(-57992,-31796),
  (VTBL_ENTRY)&(_ZTI7S6040C1[0]),
  ABISELECT(560,312),
  ABISELECT(-5352,-2932),
  ABISELECT(104,56),
  ABISELECT(-58168,-31920),
  (VTBL_ENTRY)&(_ZTI7S6040C1[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  ABISELECT(-58272,-31976),
  (VTBL_ENTRY)&(_ZTI7S6040C1[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
  0,
  ABISELECT(-58752,-32240),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3252),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-58752,-32240),
  (VTBL_ENTRY)&(_ZTI7S6040C1[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6040C1D1Ev,_ZTv0_n32_N7S6040C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6040C1D0Ev,_ZTv0_n32_N7S6040C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
  0,
  ABISELECT(-59392,-32592),
  (VTBL_ENTRY)&(_ZTI7S6040C1[0]),
  (VTBL_ENTRY)&_ZN8S6040C152v7Ev,
};
extern VTBL_ENTRY _ZTV7S6040C1[];
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C6D1Ev();
extern void _ZN7S6040C6D0Ev();
extern void _ZN7S6040C82v5Ev();
extern void _ZN7S6040C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C6__7S6040C1[] = {
  ABISELECT(59392,32592),
  ABISELECT(59232,32508),
  ABISELECT(58752,32240),
  ABISELECT(53184,29184),
  ABISELECT(58728,32232),
  ABISELECT(52816,28988),
  ABISELECT(58272,31976),
  ABISELECT(58168,31920),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6040C62v8Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C87S6040C6__A2__7S6040C1[] = {
  ABISELECT(58728,32232),
  ABISELECT(52816,28988),
  ABISELECT(58272,31976),
  ABISELECT(58168,31920),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C87S6040C6__A2__7S6040C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2932),
  ABISELECT(104,56),
  ABISELECT(-58168,-31920),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C87S6040C6__A2__7S6040C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  ABISELECT(-58272,-31976),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C87S6040C6__A2__7S6040C1[] = {
  0,
  ABISELECT(-52816,-28988),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n80_N7S6040C6D1Ev,_ZTv0_n40_N7S6040C6D1Ev)();
extern void ABISELECT(_ZThn53184_N7S6040C6D1Ev,_ZThn29184_N7S6040C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S6040C6D0Ev,_ZTv0_n40_N7S6040C6D0Ev)();
extern void ABISELECT(_ZThn53184_N7S6040C6D0Ev,_ZThn29184_N7S6040C6D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C7__7S6040C6__7S6040C1[] = {
  ABISELECT(480,268),
  0,
  ABISELECT(-53184,-29184),
  0,
  ABISELECT(6048,3324),
  ABISELECT(5568,3056),
  ABISELECT(5544,3048),
  ABISELECT(-368,-196),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  ABISELECT(-53184,-29184),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6040C6D1Ev,_ZTv0_n40_N7S6040C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6040C6D0Ev,_ZTv0_n40_N7S6040C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C6__7S6040C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2932),
  ABISELECT(104,56),
  ABISELECT(-58168,-31920),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C6__7S6040C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  ABISELECT(-58272,-31976),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C6__7S6040C1[] = {
  0,
  ABISELECT(-52816,-28988),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void ABISELECT(_ZTvn480_n80_N7S6040C6D1Ev,_ZTvn268_n40_N7S6040C6D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N7S6040C6D0Ev,_ZTvn268_n40_N7S6040C6D0Ev)();
extern void _ZN8S6040C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C117S6040C7__7S6040C6__7S6040C1[] = {
  ABISELECT(5088,2788),
  ABISELECT(5064,2780),
  ABISELECT(-848,-464),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-53664,-29452),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N7S6040C6D1Ev,_ZTvn268_n40_N7S6040C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N7S6040C6D0Ev,_ZTvn268_n40_N7S6040C6D0Ev),
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6040C6D1Ev,_ZTv0_n32_N7S6040C6D1Ev)();
extern void ABISELECT(_ZThn58752_N7S6040C6D1Ev,_ZThn32240_N7S6040C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6040C6D0Ev,_ZTv0_n32_N7S6040C6D0Ev)();
extern void ABISELECT(_ZThn58752_N7S6040C6D0Ev,_ZThn32240_N7S6040C6D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__A1__7S6040C6__7S6040C1[] = {
  0,
  ABISELECT(-58752,-32240),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3252),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-58752,-32240),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6040C6D1Ev,_ZTv0_n32_N7S6040C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6040C6D0Ev,_ZTv0_n32_N7S6040C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C138S6040C117S6040C7__7S6040C6__7S6040C1[] = {
  ABISELECT(-5176,-2808),
  ABISELECT(-57992,-31796),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
};
extern void _ZN8S6040C152v7Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C15__7S6040C6__7S6040C1[] = {
  0,
  ABISELECT(-59392,-32592),
  (VTBL_ENTRY)&(_ZTI7S6040C6[0]),
  (VTBL_ENTRY)&_ZN8S6040C152v7Ev,
};
extern void _ZN8S6040C24D1Ev();
extern void _ZN8S6040C24D0Ev();
extern void _ZN8S6040C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C24__7S6040C1[] = {
  ABISELECT(34304,18784),
  ABISELECT(34280,18776),
  ABISELECT(28368,15532),
  ABISELECT(33824,18520),
  ABISELECT(33720,18464),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
  (VTBL_ENTRY)&_ZN8S6040C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C24D0Ev,
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
};
extern void _ZN8S6040C11D1Ev();
extern void _ZN8S6040C11D0Ev();
extern void _ZN8S6040C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C118S6040C24__A1__7S6040C1[] = {
  ABISELECT(34304,18784),
  ABISELECT(34280,18776),
  ABISELECT(28368,15532),
  ABISELECT(33824,18520),
  ABISELECT(33720,18464),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN8S6040C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
};
extern void _ZN8S6040C12D1Ev();
extern void _ZN8S6040C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C128S6040C118S6040C24__A1__7S6040C1[] = {
  ABISELECT(34304,18784),
  ABISELECT(34280,18776),
  ABISELECT(28368,15532),
  ABISELECT(33824,18520),
  ABISELECT(33720,18464),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN8S6040C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C128S6040C118S6040C24__A1__7S6040C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2932),
  ABISELECT(104,56),
  ABISELECT(-33720,-18464),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C128S6040C118S6040C24__A1__7S6040C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  ABISELECT(-33824,-18520),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C128S6040C118S6040C24__A1__7S6040C1[] = {
  0,
  ABISELECT(-28368,-15532),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev)();
extern void ABISELECT(_ZThn34304_N8S6040C12D1Ev,_ZThn18784_N8S6040C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev)();
extern void ABISELECT(_ZThn34304_N8S6040C12D0Ev,_ZThn18784_N8S6040C12D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C128S6040C118S6040C24__A1__7S6040C1[] = {
  0,
  ABISELECT(-34304,-18784),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3252),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-34304,-18784),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C138S6040C118S6040C24__A1__7S6040C1[] = {
  ABISELECT(24040,13188),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C138S6040C118S6040C24__A1__7S6040C1[] = {
  0,
  ABISELECT(-24040,-13188),
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C118S6040C24__A1__7S6040C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2932),
  ABISELECT(104,56),
  ABISELECT(-33720,-18464),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C118S6040C24__A1__7S6040C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  ABISELECT(-33824,-18520),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C118S6040C24__A1__7S6040C1[] = {
  0,
  ABISELECT(-28368,-15532),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev)();
extern void ABISELECT(_ZThn34304_N8S6040C11D1Ev,_ZThn18784_N8S6040C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev)();
extern void ABISELECT(_ZThn34304_N8S6040C11D0Ev,_ZThn18784_N8S6040C11D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C118S6040C24__A1__7S6040C1[] = {
  0,
  ABISELECT(-34304,-18784),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3252),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-34304,-18784),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C13__8S6040C118S6040C24__A1__7S6040C1[] = {
  ABISELECT(24040,13188),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6040C138S6040C24__A2__7S6040C1[] = {
  ABISELECT(23904,13092),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C138S6040C24__A2__7S6040C1[] = {
  0,
  ABISELECT(-23904,-13092),
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C24__7S6040C1[] = {
  0,
  ABISELECT(-28368,-15532),
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C24__7S6040C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2932),
  ABISELECT(104,56),
  ABISELECT(-33720,-18464),
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C24__7S6040C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  ABISELECT(-33824,-18520),
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C24D1Ev,_ZTv0_n32_N8S6040C24D1Ev)();
extern void ABISELECT(_ZThn34304_N8S6040C24D1Ev,_ZThn18784_N8S6040C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C24D0Ev,_ZTv0_n32_N8S6040C24D0Ev)();
extern void ABISELECT(_ZThn34304_N8S6040C24D0Ev,_ZThn18784_N8S6040C24D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C24__7S6040C1[] = {
  0,
  ABISELECT(-34304,-18784),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3252),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-34304,-18784),
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C24D1Ev,_ZTv0_n32_N8S6040C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C24D0Ev,_ZTv0_n32_N8S6040C24D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C138S6040C11__8S6040C24__7S6040C1[] = {
  ABISELECT(24040,13188),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6040C13__A1__8S6040C24__7S6040C1[] = {
  ABISELECT(23904,13092),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI8S6040C24[0]),
};
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C7D1Ev();
extern void _ZN7S6040C7D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C7__7S6040C1[] = {
  ABISELECT(6048,3324),
  ABISELECT(5568,3056),
  ABISELECT(5544,3048),
  ABISELECT(-368,-196),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C87S6040C7__7S6040C1[] = {
  ABISELECT(5544,3048),
  ABISELECT(-368,-196),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C87S6040C7__7S6040C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2932),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C87S6040C7__7S6040C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C87S6040C7__7S6040C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN8S6040C11D1Ev();
extern void _ZN8S6040C11D0Ev();
extern void _ZN8S6040C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C117S6040C7__7S6040C1[] = {
  ABISELECT(5088,2788),
  ABISELECT(5064,2780),
  ABISELECT(-848,-464),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN8S6040C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
};
extern void _ZN8S6040C12D1Ev();
extern void _ZN8S6040C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C128S6040C117S6040C7__7S6040C1[] = {
  ABISELECT(5088,2788),
  ABISELECT(5064,2780),
  ABISELECT(-848,-464),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN8S6040C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6040C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C128S6040C117S6040C7__7S6040C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2932),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C128S6040C117S6040C7__7S6040C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C128S6040C117S6040C7__7S6040C1[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev)();
extern void ABISELECT(_ZThn5088_N8S6040C12D1Ev,_ZThn2788_N8S6040C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev)();
extern void ABISELECT(_ZThn5088_N8S6040C12D0Ev,_ZThn2788_N8S6040C12D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C128S6040C117S6040C7__7S6040C1[] = {
  0,
  ABISELECT(-5088,-2788),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3252),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-5088,-2788),
  (VTBL_ENTRY)&(_ZTI8S6040C12[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C138S6040C117S6040C7__7S6040C1[] = {
  ABISELECT(-5176,-2808),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C138S6040C117S6040C7__7S6040C1[] = {
  0,
  ABISELECT(5176,2808),
  (VTBL_ENTRY)&(_ZTI8S6040C13[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__8S6040C117S6040C7__7S6040C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2932),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__8S6040C117S6040C7__7S6040C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C117S6040C7__7S6040C1[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev)();
extern void ABISELECT(_ZThn5088_N8S6040C11D1Ev,_ZThn2788_N8S6040C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev)();
extern void ABISELECT(_ZThn5088_N8S6040C11D0Ev,_ZThn2788_N8S6040C11D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__8S6040C117S6040C7__7S6040C1[] = {
  0,
  ABISELECT(-5088,-2788),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3252),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-5088,-2788),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C13__8S6040C117S6040C7__7S6040C1[] = {
  ABISELECT(-5176,-2808),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S6040C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C7__7S6040C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2932),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C7__7S6040C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C7__7S6040C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void ABISELECT(_ZThn480_N7S6040C7D1Ev,_ZThn268_N7S6040C7D1Ev)();
extern void ABISELECT(_ZThn480_N7S6040C7D0Ev,_ZThn268_N7S6040C7D0Ev)();
extern void _ZN8S6040C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C11__7S6040C7__7S6040C1[] = {
  ABISELECT(5088,2788),
  ABISELECT(5064,2780),
  ABISELECT(-848,-464),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N7S6040C7D1Ev,_ZThn268_N7S6040C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N7S6040C7D0Ev,_ZThn268_N7S6040C7D0Ev),
  (VTBL_ENTRY)&_ZN8S6040C112v6Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6040C7D1Ev,_ZTv0_n32_N7S6040C7D1Ev)();
extern void ABISELECT(_ZThn5568_N7S6040C7D1Ev,_ZThn3056_N7S6040C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6040C7D0Ev,_ZTv0_n32_N7S6040C7D0Ev)();
extern void ABISELECT(_ZThn5568_N7S6040C7D0Ev,_ZThn3056_N7S6040C7D0Ev)() __attribute__((weak));
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__A1__7S6040C7__7S6040C1[] = {
  0,
  ABISELECT(-5568,-3056),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3252),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-5568,-3056),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6040C7D1Ev,_ZTv0_n32_N7S6040C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6040C7D0Ev,_ZTv0_n32_N7S6040C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6040C138S6040C11__7S6040C7__7S6040C1[] = {
  ABISELECT(-5176,-2808),
  ABISELECT(-4808,-2612),
  (VTBL_ENTRY)&(_ZTI7S6040C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2932),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C9__7S6040C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C9__7S6040C1[] = {
  0,
  ABISELECT(5352,2932),
  (VTBL_ENTRY)&(_ZTI7S6040C9[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C1[] = {
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  0,
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__8S6040C10__7S6040C1[] = {
  0,
  ABISELECT(5456,2988),
  (VTBL_ENTRY)&(_ZTI8S6040C10[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
extern void _ZN7S6040C32v2Ev();
extern void _ZN7S6040C8D1Ev();
extern void _ZN7S6040C8D0Ev();
extern void _ZN7S6040C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C8__A1__7S6040C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3252),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  0,
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6040C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6040C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6040C9__7S6040C8__A1__7S6040C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2932),
  ABISELECT(104,56),
  ABISELECT(584,320),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
};
extern void _ZN7S6040C52v3Ev();
extern void _ZN8S6040C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6040C10__7S6040C8__A1__7S6040C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2988),
  ABISELECT(480,264),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6040C102v4Ev,
};
extern void _ZN7S6040C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6040C3__7S6040C8__A1__7S6040C1[] = {
  0,
  ABISELECT(5936,3252),
  (VTBL_ENTRY)&(_ZTI7S6040C8[0]),
  (VTBL_ENTRY)&_ZN7S6040C32v2Ev,
};
static  VTT_ENTRY vtt_S6040C1[] = {
  {&(_ZTV7S6040C1[11]),  11,96},
  {&(_tg__ZTV7S6040C6__7S6040C1[10]),  10,15},
  {&(_tg__ZTV7S6040C87S6040C6__A2__7S6040C1[6]),  6,10},
  {&(_tg__ZTV7S6040C9__7S6040C87S6040C6__A2__7S6040C1[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C87S6040C6__A2__7S6040C1[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C87S6040C6__A2__7S6040C1[3]),  3,4},
  {&(_tg__ZTV7S6040C7__7S6040C6__7S6040C1[12]),  12,16},
  {&(_tg__ZTV7S6040C9__7S6040C6__7S6040C1[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C6__7S6040C1[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C6__7S6040C1[3]),  3,4},
  {&(_tg__ZTV8S6040C117S6040C7__7S6040C6__7S6040C1[7]),  7,10},
  {&(_tg__ZTV7S6040C8__A1__7S6040C6__7S6040C1[9]),  9,13},
  {&(_tg__ZTV8S6040C138S6040C117S6040C7__7S6040C6__7S6040C1[3]),  3,3},
  {&(_tg__ZTV8S6040C15__7S6040C6__7S6040C1[3]),  3,4},
  {&(_tg__ZTV8S6040C24__7S6040C1[7]),  7,10},
  {&(_tg__ZTV8S6040C118S6040C24__A1__7S6040C1[7]),  7,10},
  {&(_tg__ZTV8S6040C128S6040C118S6040C24__A1__7S6040C1[7]),  7,9},
  {&(_tg__ZTV7S6040C9__8S6040C128S6040C118S6040C24__A1__7S6040C1[5]),  5,5},
  {&(_tg__ZTV8S6040C10__8S6040C128S6040C118S6040C24__A1__7S6040C1[6]),  6,8},
  {&(_tg__ZTV7S6040C3__8S6040C128S6040C118S6040C24__A1__7S6040C1[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C128S6040C118S6040C24__A1__7S6040C1[9]),  9,13},
  {&(_tg__ZTV8S6040C138S6040C118S6040C24__A1__7S6040C1[3]),  3,3},
  {&(_tg__ZTV7S6040C3__8S6040C138S6040C118S6040C24__A1__7S6040C1[3]),  3,4},
  {&(_tg__ZTV7S6040C9__8S6040C118S6040C24__A1__7S6040C1[5]),  5,5},
  {&(_tg__ZTV8S6040C10__8S6040C118S6040C24__A1__7S6040C1[6]),  6,8},
  {&(_tg__ZTV7S6040C3__8S6040C118S6040C24__A1__7S6040C1[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C118S6040C24__A1__7S6040C1[9]),  9,13},
  {&(_tg__ZTV8S6040C13__8S6040C118S6040C24__A1__7S6040C1[3]),  3,3},
  {&(_tg__ZTV8S6040C138S6040C24__A2__7S6040C1[3]),  3,3},
  {&(_tg__ZTV7S6040C3__8S6040C138S6040C24__A2__7S6040C1[3]),  3,4},
  {&(_tg__ZTV7S6040C3__8S6040C24__7S6040C1[3]),  3,4},
  {&(_tg__ZTV7S6040C9__8S6040C24__7S6040C1[5]),  5,5},
  {&(_tg__ZTV8S6040C10__8S6040C24__7S6040C1[6]),  6,8},
  {&(_tg__ZTV7S6040C8__8S6040C24__7S6040C1[9]),  9,13},
  {&(_tg__ZTV8S6040C138S6040C11__8S6040C24__7S6040C1[3]),  3,3},
  {&(_tg__ZTV8S6040C13__A1__8S6040C24__7S6040C1[3]),  3,3},
  {&(_ZTV7S6040C1[36]),  36,96},
  {&(_ZTV7S6040C1[49]),  49,96},
  {&(_ZTV7S6040C1[71]),  71,96},
  {&(_ZTV7S6040C1[77]),  77,96},
  {&(_ZTV7S6040C1[60]),  60,96},
  {&(_ZTV7S6040C1[88]),  88,96},
  {&(_ZTV7S6040C1[66]),  66,96},
  {&(_ZTV7S6040C1[95]),  95,96},
  {&(_ZTV7S6040C1[24]),  24,96},
  {&(_ZTV7S6040C1[30]),  30,96},
  {&(_ZTV7S6040C1[33]),  33,96},
  {&(_tg__ZTV7S6040C7__7S6040C1[8]),  8,12},
  {&(_tg__ZTV7S6040C87S6040C7__7S6040C1[6]),  6,10},
  {&(_tg__ZTV7S6040C9__7S6040C87S6040C7__7S6040C1[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C87S6040C7__7S6040C1[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C87S6040C7__7S6040C1[3]),  3,4},
  {&(_tg__ZTV8S6040C117S6040C7__7S6040C1[7]),  7,10},
  {&(_tg__ZTV8S6040C128S6040C117S6040C7__7S6040C1[7]),  7,9},
  {&(_tg__ZTV7S6040C9__8S6040C128S6040C117S6040C7__7S6040C1[5]),  5,5},
  {&(_tg__ZTV8S6040C10__8S6040C128S6040C117S6040C7__7S6040C1[6]),  6,8},
  {&(_tg__ZTV7S6040C3__8S6040C128S6040C117S6040C7__7S6040C1[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C128S6040C117S6040C7__7S6040C1[9]),  9,13},
  {&(_tg__ZTV8S6040C138S6040C117S6040C7__7S6040C1[3]),  3,3},
  {&(_tg__ZTV7S6040C3__8S6040C138S6040C117S6040C7__7S6040C1[3]),  3,4},
  {&(_tg__ZTV7S6040C9__8S6040C117S6040C7__7S6040C1[5]),  5,5},
  {&(_tg__ZTV8S6040C10__8S6040C117S6040C7__7S6040C1[6]),  6,8},
  {&(_tg__ZTV7S6040C3__8S6040C117S6040C7__7S6040C1[3]),  3,4},
  {&(_tg__ZTV7S6040C8__8S6040C117S6040C7__7S6040C1[9]),  9,13},
  {&(_tg__ZTV8S6040C13__8S6040C117S6040C7__7S6040C1[3]),  3,3},
  {&(_tg__ZTV7S6040C9__7S6040C7__7S6040C1[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C7__7S6040C1[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C7__7S6040C1[3]),  3,4},
  {&(_tg__ZTV8S6040C11__7S6040C7__7S6040C1[7]),  7,10},
  {&(_tg__ZTV7S6040C8__A1__7S6040C7__7S6040C1[9]),  9,13},
  {&(_tg__ZTV8S6040C138S6040C11__7S6040C7__7S6040C1[3]),  3,3},
  {&(_tg__ZTV7S6040C9__7S6040C1[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C9__7S6040C1[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C9__7S6040C1[3]),  3,4},
  {&(_tg__ZTV8S6040C10__7S6040C1[4]),  4,6},
  {&(_tg__ZTV7S6040C3__8S6040C10__7S6040C1[3]),  3,4},
  {&(_tg__ZTV7S6040C8__A1__7S6040C1[6]),  6,10},
  {&(_tg__ZTV7S6040C9__7S6040C8__A1__7S6040C1[5]),  5,5},
  {&(_tg__ZTV8S6040C10__7S6040C8__A1__7S6040C1[6]),  6,8},
  {&(_tg__ZTV7S6040C3__7S6040C8__A1__7S6040C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6040C1[];
extern  VTBL_ENTRY _ZTV7S6040C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6040C1[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6040C7D0Ev,_ZTv0_n32_N7S6040C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5568_N7S6040C7D0Ev,_ZThn3056_N7S6040C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6040C7D1Ev,_ZTv0_n32_N7S6040C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5568_N7S6040C7D1Ev,_ZThn3056_N7S6040C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C24D0Ev,_ZTv0_n32_N8S6040C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34304_N8S6040C24D0Ev,_ZThn18784_N8S6040C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C24D1Ev,_ZTv0_n32_N8S6040C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34304_N8S6040C24D1Ev,_ZThn18784_N8S6040C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C11D0Ev,_ZTv0_n32_N8S6040C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S6040C11D0Ev,_ZThn2788_N8S6040C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn34304_N8S6040C11D0Ev,_ZThn18784_N8S6040C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C11D1Ev,_ZTv0_n32_N8S6040C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S6040C11D1Ev,_ZThn2788_N8S6040C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn34304_N8S6040C11D1Ev,_ZThn18784_N8S6040C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C12D0Ev,_ZTv0_n32_N8S6040C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S6040C12D0Ev,_ZThn2788_N8S6040C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn34304_N8S6040C12D0Ev,_ZThn18784_N8S6040C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6040C12D1Ev,_ZTv0_n32_N8S6040C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S6040C12D1Ev,_ZThn2788_N8S6040C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn34304_N8S6040C12D1Ev,_ZThn18784_N8S6040C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6040C6D0Ev,_ZTv0_n32_N7S6040C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn58752_N7S6040C6D0Ev,_ZThn32240_N7S6040C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6040C6D1Ev,_ZTv0_n32_N7S6040C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn58752_N7S6040C6D1Ev,_ZThn32240_N7S6040C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6040C6D0Ev,_ZTv0_n40_N7S6040C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53184_N7S6040C6D0Ev,_ZThn29184_N7S6040C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6040C6D1Ev,_ZTv0_n40_N7S6040C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53184_N7S6040C6D1Ev,_ZThn29184_N7S6040C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6040C1D0Ev,_ZTv0_n32_N7S6040C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn58752_N7S6040C1D0Ev,_ZThn32240_N7S6040C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6040C1D1Ev,_ZTv0_n32_N7S6040C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn58752_N7S6040C1D1Ev,_ZThn32240_N7S6040C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6040C1D0Ev,_ZTv0_n40_N7S6040C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53184_N7S6040C1D0Ev,_ZThn29184_N7S6040C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6040C1D1Ev,_ZTv0_n40_N7S6040C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53184_N7S6040C1D1Ev,_ZThn29184_N7S6040C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6040C1 = {  "S6040C1", // class name
  bases_S6040C1, 29,
  &(vtc_S6040C1[0]), // expected_vtbl_contents
  &(vtt_S6040C1[0]), // expected_vtt_contents
  ABISELECT(73200,40184), // object size
  NSPAIRA(_ZTI7S6040C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6040C1),96, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6040C1),80, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6041C5  {
  int s6041c5f0;
  void *s6041c5f1;
  ::S281C37_nt s6041c5f2;
  virtual void  v3(); // _ZN7S6041C52v3Ev
  ~S6041C5(); // tgen
  S6041C5(); // tgen
};
//SIG(-1 S6041C5) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S6041C5()
{
  extern Class_Descriptor cd_S6041C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6041C5, buf);
    S6041C5 *dp, &lv = *(dp=new (buf) S6041C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6041C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6041C5)");
    check_field_offset(lv, s6041c5f0, ABISELECT(8,4), "S6041C5.s6041c5f0");
    check_field_offset(lv, s6041c5f1, ABISELECT(16,8), "S6041C5.s6041c5f1");
    check_field_offset(lv, s6041c5f2, ABISELECT(24,12), "S6041C5.s6041c5f2");
    test_class_info(&lv, &cd_S6041C5);
    dp->~S6041C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C5(Test_S6041C5, "S6041C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6041C5C1Ev();
extern void _ZN7S6041C5D1Ev();
Name_Map name_map_S6041C5[] = {
  NSPAIR(_ZN7S6041C5C1Ev),
  NSPAIR(_ZN7S6041C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6041C5[];
extern void _ZN7S6041C52v3Ev();
static  VTBL_ENTRY vtc_S6041C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C5[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
};
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
Class_Descriptor cd_S6041C5 = {  "S6041C5", // class name
  0,0,//no base classes
  &(vtc_S6041C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6041C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6041C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6041C3  {
  int s6041c3f0[6];
  char s6041c3f1:2;
  long double s6041c3f2;
  void *s6041c3f3[2];
  int s6041c3f4;
  long double s6041c3f5;
  ::S20176C3_nt s6041c3f6;
  ::S281C37_nt s6041c3f7;
  ::S281C37_nt s6041c3f8[9];
  void *s6041c3f9;
  ::S6041C5 s6041c3f10;
  ::S6041C5 s6041c3f11;
  virtual void  v2(); // _ZN7S6041C32v2Ev
  ~S6041C3(); // tgen
  S6041C3(); // tgen
};
//SIG(-1 S6041C3) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S6041C3()
{
  extern Class_Descriptor cd_S6041C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S6041C3, buf);
    S6041C3 *dp, &lv = *(dp=new (buf) S6041C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S6041C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C3)");
    check_field_offset(lv, s6041c3f0, ABISELECT(8,4), "S6041C3.s6041c3f0");
    set_bf_and_test(lv, s6041c3f1, ABISELECT(32,28), 0, 2, 1, "S6041C3");
    set_bf_and_test(lv, s6041c3f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S6041C3");
    check_field_offset(lv, s6041c3f2, ABISELECT(48,32), "S6041C3.s6041c3f2");
    check_field_offset(lv, s6041c3f3, ABISELECT(64,44), "S6041C3.s6041c3f3");
    check_field_offset(lv, s6041c3f4, ABISELECT(80,52), "S6041C3.s6041c3f4");
    check_field_offset(lv, s6041c3f5, ABISELECT(96,56), "S6041C3.s6041c3f5");
    check_field_offset(lv, s6041c3f6, ABISELECT(112,68), "S6041C3.s6041c3f6");
    check_field_offset(lv, s6041c3f7, ABISELECT(120,72), "S6041C3.s6041c3f7");
    check_field_offset(lv, s6041c3f8, ABISELECT(136,80), "S6041C3.s6041c3f8");
    check_field_offset(lv, s6041c3f9, ABISELECT(280,152), "S6041C3.s6041c3f9");
    check_field_offset(lv, s6041c3f10, ABISELECT(288,156), "S6041C3.s6041c3f10");
    check_field_offset(lv, s6041c3f11, ABISELECT(328,176), "S6041C3.s6041c3f11");
    test_class_info(&lv, &cd_S6041C3);
    dp->~S6041C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C3(Test_S6041C3, "S6041C3", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN7S6041C3C1Ev();
extern void _ZN7S6041C3D1Ev();
Name_Map name_map_S6041C3[] = {
  NSPAIR(_ZN7S6041C3C1Ev),
  NSPAIR(_ZN7S6041C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6041C3[];
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY vtc_S6041C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C3[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
Class_Descriptor cd_S6041C3 = {  "S6041C3", // class name
  0,0,//no base classes
  &(vtc_S6041C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI7S6041C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6041C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6041C10  : S6041C5 , virtual S6041C3 , virtual S281C37_nt {
  void *s6041c10f0;
  __tsi64 s6041c10f1;
  char s6041c10f2[2];
  ::S6041C3 s6041c10f3;
  short s6041c10f4[7];
  int s6041c10f5;
  char s6041c10f6;
  int s6041c10f7:20;
  virtual void  v4(); // _ZN8S6041C102v4Ev
  ~S6041C10(); // tgen
  S6041C10(); // tgen
};
//SIG(-1 S6041C10) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


void  S6041C10 ::v4(){vfunc_called(this, "_ZN8S6041C102v4Ev");}
S6041C10 ::~S6041C10(){ note_dtor("S6041C10", this);} // tgen
S6041C10 ::S6041C10(){ note_ctor("S6041C10", this);} // tgen

static void Test_S6041C10()
{
  extern Class_Descriptor cd_S6041C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S6041C10, buf);
    S6041C10 *dp, &lv = *(dp=new (buf) S6041C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S6041C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C10)");
    check_base_class_offset(lv, (S6041C5*), 0, "S6041C10");
    check_base_class_offset(lv, (S6041C3*), ABISELECT(464,256), "S6041C10");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S6041C10");
    check_field_offset(lv, s6041c10f0, ABISELECT(40,20), "S6041C10.s6041c10f0");
    check_field_offset(lv, s6041c10f1, ABISELECT(48,24), "S6041C10.s6041c10f1");
    check_field_offset(lv, s6041c10f2, ABISELECT(56,32), "S6041C10.s6041c10f2");
    check_field_offset(lv, s6041c10f3, ABISELECT(64,36), "S6041C10.s6041c10f3");
    check_field_offset(lv, s6041c10f4, ABISELECT(432,232), "S6041C10.s6041c10f4");
    check_field_offset(lv, s6041c10f5, ABISELECT(448,248), "S6041C10.s6041c10f5");
    check_field_offset(lv, s6041c10f6, ABISELECT(452,252), "S6041C10.s6041c10f6");
    set_bf_and_test(lv, s6041c10f7, ABISELECT(453,253), 0, 20, 1, "S6041C10");
    set_bf_and_test(lv, s6041c10f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S6041C10");
    test_class_info(&lv, &cd_S6041C10);
    dp->~S6041C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C10(Test_S6041C10, "S6041C10", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN8S6041C10C1Ev();
extern void _ZN8S6041C10D1Ev();
Name_Map name_map_S6041C10[] = {
  NSPAIR(_ZN8S6041C10C1Ev),
  NSPAIR(_ZN8S6041C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6041C5;
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S6041C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6041C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6041C3,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6041C10[];
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY vtc_S6041C10[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S6041C10[];
static  VTT_ENTRY vtt_S6041C10[] = {
  {&(_ZTV8S6041C10[4]),  4,10},
  {&(_ZTV8S6041C10[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S6041C10[];
extern  VTBL_ENTRY _ZTV8S6041C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C10[];
Class_Descriptor cd_S6041C10 = {  "S6041C10", // class name
  bases_S6041C10, 3,
  &(vtc_S6041C10[0]), // expected_vtbl_contents
  &(vtt_S6041C10[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI8S6041C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6041C10),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6041C10),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  S6041C9  : virtual S6041C10 {
  int s6041c9f0;
  char s6041c9f1;
  void *s6041c9f2[6];
  int s6041c9f3[2];
  void *s6041c9f4;
  ::S281C37_nt s6041c9f5;
  ~S6041C9(); // tgen
  S6041C9(); // tgen
};
//SIG(-1 S6041C9) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S6041C9()
{
  extern Class_Descriptor cd_S6041C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S6041C9, buf);
    S6041C9 *dp, &lv = *(dp=new (buf) S6041C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S6041C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C9)");
    check_base_class_offset(lv, (S6041C5*)(S6041C10*), ABISELECT(96,56), "S6041C9");
    check_base_class_offset(lv, (S6041C3*)(S6041C10*), ABISELECT(560,312), "S6041C9");
    check_base_class_offset(lv, (S281C37_nt*)(S6041C10*), ABISELECT(928,508), "S6041C9");
    check_base_class_offset(lv, (S6041C10*), ABISELECT(96,56), "S6041C9");
    check_field_offset(lv, s6041c9f0, ABISELECT(8,4), "S6041C9.s6041c9f0");
    check_field_offset(lv, s6041c9f1, ABISELECT(12,8), "S6041C9.s6041c9f1");
    check_field_offset(lv, s6041c9f2, ABISELECT(16,12), "S6041C9.s6041c9f2");
    check_field_offset(lv, s6041c9f3, ABISELECT(64,36), "S6041C9.s6041c9f3");
    check_field_offset(lv, s6041c9f4, ABISELECT(72,44), "S6041C9.s6041c9f4");
    check_field_offset(lv, s6041c9f5, ABISELECT(80,48), "S6041C9.s6041c9f5");
    test_class_info(&lv, &cd_S6041C9);
    dp->~S6041C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C9(Test_S6041C9, "S6041C9", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN7S6041C9C1Ev();
extern void _ZN7S6041C9D1Ev();
Name_Map name_map_S6041C9[] = {
  NSPAIR(_ZN7S6041C9C1Ev),
  NSPAIR(_ZN7S6041C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6041C5;
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C10;
extern VTBL_ENTRY _ZTI8S6041C10[];
extern  VTBL_ENTRY _ZTV8S6041C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C10[];
static Base_Class bases_S6041C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6041C5,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6041C3,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6041C10,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6041C9[];
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY vtc_S6041C9[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S6041C9[];
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C9[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C10__7S6041C9[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTT_ENTRY vtt_S6041C9[] = {
  {&(_ZTV7S6041C9[5]),  5,17},
  {&(_ZTV7S6041C9[11]),  11,17},
  {&(_ZTV7S6041C9[16]),  16,17},
  {&(_tg__ZTV8S6041C10__7S6041C9[4]),  4,6},
  {&(_tg__ZTV7S6041C3__8S6041C10__7S6041C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6041C9[];
extern  VTBL_ENTRY _ZTV7S6041C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C9[];
Class_Descriptor cd_S6041C9 = {  "S6041C9", // class name
  bases_S6041C9, 4,
  &(vtc_S6041C9[0]), // expected_vtbl_contents
  &(vtt_S6041C9[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI7S6041C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6041C9),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6041C9),5, //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  S6041C8  : virtual S6041C9 , S6041C3 , S281C37_nt {
  char s6041c8f0;
  int s6041c8f1[2];
  long double s6041c8f2[2];
  short s6041c8f3;
  void *s6041c8f4;
  int s6041c8f5;
  __tsi64 s6041c8f6;
  int s6041c8f7;
  void *s6041c8f8;
  virtual  ~S6041C8(); // _ZN7S6041C8D2Ev
  virtual void  v5(); // _ZN7S6041C82v5Ev
  S6041C8(); // tgen
};
//SIG(-1 S6041C8) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S6041C8 ::~S6041C8(){ note_dtor("S6041C8", this);}
void  S6041C8 ::v5(){vfunc_called(this, "_ZN7S6041C82v5Ev");}
S6041C8 ::S6041C8(){ note_ctor("S6041C8", this);} // tgen

static void Test_S6041C8()
{
  extern Class_Descriptor cd_S6041C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S6041C8, buf);
    S6041C8 *dp, &lv = *(dp=new (buf) S6041C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S6041C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C8)");
    check_base_class_offset(lv, (S6041C5*)(S6041C10*), ABISELECT(576,324), "S6041C8");
    check_base_class_offset(lv, (S6041C3*)(S6041C10*), ABISELECT(1040,580), "S6041C8");
    check_base_class_offset(lv, (S281C37_nt*)(S6041C10*), ABISELECT(1408,776), "S6041C8");
    check_base_class_offset(lv, (S6041C10*)(S6041C9*), ABISELECT(576,324), "S6041C8");
    check_base_class_offset(lv, (S6041C9*), ABISELECT(480,268), "S6041C8");
    /*is_ambiguous_... S6041C8::S6041C3 */ AMB_check_base_class_offset(lv, (S6041C3*), 0, "S6041C8");
    /*is_ambiguous_... S6041C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S6041C8");
    check_field_offset(lv, s6041c8f0, ABISELECT(384,204), "S6041C8.s6041c8f0");
    check_field_offset(lv, s6041c8f1, ABISELECT(388,208), "S6041C8.s6041c8f1");
    check_field_offset(lv, s6041c8f2, ABISELECT(400,216), "S6041C8.s6041c8f2");
    check_field_offset(lv, s6041c8f3, ABISELECT(432,240), "S6041C8.s6041c8f3");
    check_field_offset(lv, s6041c8f4, ABISELECT(440,244), "S6041C8.s6041c8f4");
    check_field_offset(lv, s6041c8f5, ABISELECT(448,248), "S6041C8.s6041c8f5");
    check_field_offset(lv, s6041c8f6, ABISELECT(456,252), "S6041C8.s6041c8f6");
    check_field_offset(lv, s6041c8f7, ABISELECT(464,260), "S6041C8.s6041c8f7");
    check_field_offset(lv, s6041c8f8, ABISELECT(472,264), "S6041C8.s6041c8f8");
    test_class_info(&lv, &cd_S6041C8);
    dp->~S6041C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C8(Test_S6041C8, "S6041C8", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN7S6041C8C1Ev();
extern void _ZN7S6041C8D2Ev();
Name_Map name_map_S6041C8[] = {
  NSPAIR(_ZN7S6041C8C1Ev),
  NSPAIR(_ZN7S6041C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6041C5;
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C10;
extern VTBL_ENTRY _ZTI8S6041C10[];
extern  VTBL_ENTRY _ZTV8S6041C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C10[];
extern Class_Descriptor cd_S6041C9;
extern VTBL_ENTRY _ZTI7S6041C9[];
extern  VTBL_ENTRY _ZTV7S6041C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C9[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S6041C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6041C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6041C3,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C10,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6041C9,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6041C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6041C8[];
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY vtc_S6041C8[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S6041C8[];
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C8[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C9__7S6041C8[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C9__7S6041C8[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C8[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C10__7S6041C8[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTT_ENTRY vtt_S6041C8[] = {
  {&(_ZTV7S6041C8[6]),  6,27},
  {&(_ZTV7S6041C8[15]),  15,27},
  {&(_ZTV7S6041C8[21]),  21,27},
  {&(_ZTV7S6041C8[26]),  26,27},
  {&(_tg__ZTV7S6041C9__7S6041C8[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C9__7S6041C8[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C9__7S6041C8[3]),  3,4},
  {&(_tg__ZTV8S6041C10__7S6041C8[4]),  4,6},
  {&(_tg__ZTV7S6041C3__8S6041C10__7S6041C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
Class_Descriptor cd_S6041C8 = {  "S6041C8", // class name
  bases_S6041C8, 7,
  &(vtc_S6041C8[0]), // expected_vtbl_contents
  &(vtt_S6041C8[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI7S6041C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6041C8),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6041C8),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6041C12  : virtual S6041C9 , virtual S6041C8 {
  long s6041c12f0;
  void *s6041c12f1;
  ::S6041C10 s6041c12f2;
  void *s6041c12f3;
  short s6041c12f4;
  long s6041c12f5;
  int s6041c12f6;
  __tsi64 s6041c12f7;
  ::S6041C10 s6041c12f8[4];
  int s6041c12f9;
  virtual  ~S6041C12(); // _ZN8S6041C12D2Ev
  S6041C12(); // tgen
};
//SIG(-1 S6041C12) C1{ VBC2{ VBC3{ BC4{ v1 Fi Fp FC5{ m Fp[2]}} VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC8{ VBC2 BC6 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC3 Fp Fs Fl Fi FL FC3[4] Fi}


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

static void Test_S6041C12()
{
  extern Class_Descriptor cd_S6041C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(361,782)];
    init_test(&cd_S6041C12, buf);
    S6041C12 *dp, &lv = *(dp=new (buf) S6041C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5760,3124), "sizeof(S6041C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C12)");
    check_base_class_offset(lv, (S6041C5*)(S6041C10*), ABISELECT(4432,2396), "S6041C12");
    check_base_class_offset(lv, (S6041C3*)(S6041C10*), ABISELECT(4896,2652), "S6041C12");
    check_base_class_offset(lv, (S281C37_nt*)(S6041C10*), ABISELECT(5264,2848), "S6041C12");
    check_base_class_offset(lv, (S6041C10*)(S6041C9*), ABISELECT(4432,2396), "S6041C12");
    check_base_class_offset(lv, (S6041C9*), ABISELECT(4328,2340), "S6041C12");
    check_base_class_offset(lv, (S6041C9*)(S6041C8*), ABISELECT(4328,2340), "S6041C12");
    /*is_ambiguous_... S6041C8::S6041C3 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C8*), ABISELECT(5280,2856), "S6041C12");
    /*is_ambiguous_... S6041C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C8*), ABISELECT(5648,3052), "S6041C12");
    check_base_class_offset(lv, (S6041C8*), ABISELECT(5280,2856), "S6041C12");
    check_field_offset(lv, s6041c12f0, ABISELECT(8,4), "S6041C12.s6041c12f0");
    check_field_offset(lv, s6041c12f1, ABISELECT(16,8), "S6041C12.s6041c12f1");
    check_field_offset(lv, s6041c12f2, ABISELECT(32,12), "S6041C12.s6041c12f2");
    check_field_offset(lv, s6041c12f3, ABISELECT(880,472), "S6041C12.s6041c12f3");
    check_field_offset(lv, s6041c12f4, ABISELECT(888,476), "S6041C12.s6041c12f4");
    check_field_offset(lv, s6041c12f5, ABISELECT(896,480), "S6041C12.s6041c12f5");
    check_field_offset(lv, s6041c12f6, ABISELECT(904,484), "S6041C12.s6041c12f6");
    check_field_offset(lv, s6041c12f7, ABISELECT(912,488), "S6041C12.s6041c12f7");
    check_field_offset(lv, s6041c12f8, ABISELECT(928,496), "S6041C12.s6041c12f8");
    check_field_offset(lv, s6041c12f9, ABISELECT(4320,2336), "S6041C12.s6041c12f9");
    test_class_info(&lv, &cd_S6041C12);
    dp->~S6041C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C12(Test_S6041C12, "S6041C12", ABISELECT(5760,3124));

#else // __cplusplus

extern void _ZN8S6041C12C1Ev();
extern void _ZN8S6041C12D2Ev();
Name_Map name_map_S6041C12[] = {
  NSPAIR(_ZN8S6041C12C1Ev),
  NSPAIR(_ZN8S6041C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6041C5;
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C10;
extern VTBL_ENTRY _ZTI8S6041C10[];
extern  VTBL_ENTRY _ZTV8S6041C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C10[];
extern Class_Descriptor cd_S6041C9;
extern VTBL_ENTRY _ZTI7S6041C9[];
extern  VTBL_ENTRY _ZTV7S6041C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C9[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C8;
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
static Base_Class bases_S6041C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6041C5,    ABISELECT(4432,2396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C3,    ABISELECT(4896,2652), //bcp->offset
    22, //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_S281C37_nt,    ABISELECT(5264,2848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C10,    ABISELECT(4432,2396), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6041C9,    ABISELECT(4328,2340), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6041C3,    ABISELECT(5280,2856), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5648,3052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C8,    ABISELECT(5280,2856), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6041C12[];
extern void _ZN8S6041C12D1Ev();
extern void _ZN8S6041C12D0Ev();
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev)();
extern void ABISELECT(_ZThn5280_N8S6041C12D1Ev,_ZThn2856_N8S6041C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev)();
extern void ABISELECT(_ZThn5280_N8S6041C12D0Ev,_ZThn2856_N8S6041C12D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY vtc_S6041C12[] = {
  ABISELECT(5280,2856),
  ABISELECT(5264,2848),
  ABISELECT(4896,2652),
  ABISELECT(4432,2396),
  ABISELECT(4328,2340),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN8S6041C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C12D0Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4432,-2396),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
  0,
  ABISELECT(-4896,-2652),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  0,
  ABISELECT(-5280,-2856),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5280,-2856),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
extern VTBL_ENTRY _ZTV8S6041C12[];
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C12[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C9__8S6041C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C9__8S6041C12[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C12[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C10__8S6041C12[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C8__8S6041C12[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C8__8S6041C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C8__8S6041C12[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTT_ENTRY vtt_S6041C12[] = {
  {&(_ZTV8S6041C12[7]),  7,39},
  {&(_ZTV8S6041C12[14]),  14,39},
  {&(_ZTV8S6041C12[20]),  20,39},
  {&(_ZTV8S6041C12[25]),  25,39},
  {&(_ZTV8S6041C12[35]),  35,39},
  {&(_tg__ZTV7S6041C9__8S6041C12[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C9__8S6041C12[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C9__8S6041C12[3]),  3,4},
  {&(_tg__ZTV8S6041C10__8S6041C12[4]),  4,6},
  {&(_tg__ZTV7S6041C3__8S6041C10__8S6041C12[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C12[6]),  6,10},
  {&(_tg__ZTV7S6041C9__7S6041C8__8S6041C12[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C8__8S6041C12[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C8__8S6041C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6041C12[];
extern  VTBL_ENTRY _ZTV8S6041C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C12[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N8S6041C12D0Ev,_ZThn2856_N8S6041C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N8S6041C12D1Ev,_ZThn2856_N8S6041C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6041C12 = {  "S6041C12", // class name
  bases_S6041C12, 8,
  &(vtc_S6041C12[0]), // expected_vtbl_contents
  &(vtt_S6041C12[0]), // expected_vtt_contents
  ABISELECT(5760,3124), // object size
  NSPAIRA(_ZTI8S6041C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6041C12),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6041C12),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6041C13  : virtual S6041C3 {
  void *s6041c13f0;
  short s6041c13f1;
  long s6041c13f2;
  int s6041c13f3:6;
  void *s6041c13f4[2];
  ~S6041C13(); // tgen
  S6041C13(); // tgen
};
//SIG(-1 S6041C13) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} Fp Fs Fl Fi:6 Fp[2]}


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

static void Test_S6041C13()
{
  extern Class_Descriptor cd_S6041C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,57)];
    init_test(&cd_S6041C13, buf);
    S6041C13 *dp, &lv = *(dp=new (buf) S6041C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,224), "sizeof(S6041C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C13)");
    check_base_class_offset(lv, (S6041C3*), ABISELECT(64,28), "S6041C13");
    check_field_offset(lv, s6041c13f0, ABISELECT(8,4), "S6041C13.s6041c13f0");
    check_field_offset(lv, s6041c13f1, ABISELECT(16,8), "S6041C13.s6041c13f1");
    check_field_offset(lv, s6041c13f2, ABISELECT(24,12), "S6041C13.s6041c13f2");
    set_bf_and_test(lv, s6041c13f3, ABISELECT(32,16), 0, 6, 1, "S6041C13");
    set_bf_and_test(lv, s6041c13f3, ABISELECT(32,16), 0, 6, hide_sll(1LL<<5), "S6041C13");
    check_field_offset(lv, s6041c13f4, ABISELECT(40,20), "S6041C13.s6041c13f4");
    test_class_info(&lv, &cd_S6041C13);
    dp->~S6041C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C13(Test_S6041C13, "S6041C13", ABISELECT(432,224));

#else // __cplusplus

extern void _ZN8S6041C13C1Ev();
extern void _ZN8S6041C13D1Ev();
Name_Map name_map_S6041C13[] = {
  NSPAIR(_ZN8S6041C13C1Ev),
  NSPAIR(_ZN8S6041C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
static Base_Class bases_S6041C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6041C3,    ABISELECT(64,28), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6041C13[];
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY vtc_S6041C13[] = {
  ABISELECT(64,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S6041C13[];
static  VTT_ENTRY vtt_S6041C13[] = {
  {&(_ZTV8S6041C13[3]),  3,7},
  {&(_ZTV8S6041C13[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S6041C13[];
extern  VTBL_ENTRY _ZTV8S6041C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C13[];
Class_Descriptor cd_S6041C13 = {  "S6041C13", // class name
  bases_S6041C13, 1,
  &(vtc_S6041C13[0]), // expected_vtbl_contents
  &(vtt_S6041C13[0]), // expected_vtt_contents
  ABISELECT(432,224), // object size
  NSPAIRA(_ZTI8S6041C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6041C13),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6041C13),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  S6041C11  : S6041C12 , S6041C13 {
  __tsi64 s6041c11f0;
  long double s6041c11f1;
  ::S20176C3_nt s6041c11f2;
  int s6041c11f3[9];
  short s6041c11f4;
  char s6041c11f5:5;
  virtual  ~S6041C11(); // _ZN8S6041C11D2Ev
  virtual void  v6(); // _ZN8S6041C112v6Ev
  S6041C11(); // tgen
};
//SIG(-1 S6041C11) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 Fi Fp FC6{ m Fp[2]}} VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} VBC9{ VBC3 BC7 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC4 Fp Fs Fl Fi FL FC4[4] Fi} BC10{ VBC7 Fp Fs Fl Fi:6 Fp[2]} vd v1 FL FD FC8 Fi[9] Fs Fc:5}


 S6041C11 ::~S6041C11(){ note_dtor("S6041C11", this);}
void  S6041C11 ::v6(){vfunc_called(this, "_ZN8S6041C112v6Ev");}
S6041C11 ::S6041C11(){ note_ctor("S6041C11", this);} // tgen

static void Test_S6041C11()
{
  extern Class_Descriptor cd_S6041C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(369,805)];
    init_test(&cd_S6041C11, buf);
    S6041C11 *dp, &lv = *(dp=new (buf) S6041C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5888,3216), "sizeof(S6041C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C11)");
    check_base_class_offset(lv, (S6041C5*)(S6041C10*), ABISELECT(4560,2488), "S6041C11");
    check_base_class_offset(lv, (S6041C3*)(S6041C10*), ABISELECT(5024,2744), "S6041C11");
    check_base_class_offset(lv, (S6041C3*)(S6041C13*), ABISELECT(5024,2744), "S6041C11");
    check_base_class_offset(lv, (S281C37_nt*)(S6041C10*), ABISELECT(5392,2940), "S6041C11");
    check_base_class_offset(lv, (S6041C10*)(S6041C9*), ABISELECT(4560,2488), "S6041C11");
    check_base_class_offset(lv, (S6041C9*)(S6041C12*), ABISELECT(4464,2432), "S6041C11");
    check_base_class_offset(lv, (S6041C9*)(S6041C8*), ABISELECT(4464,2432), "S6041C11");
    /*is_ambiguous_... S6041C8::S6041C3 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C8*), ABISELECT(5408,2948), "S6041C11");
    /*is_ambiguous_... S6041C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C8*), ABISELECT(5776,3144), "S6041C11");
    check_base_class_offset(lv, (S6041C8*)(S6041C12*), ABISELECT(5408,2948), "S6041C11");
    check_base_class_offset(lv, (S6041C12*), 0, "S6041C11");
    check_base_class_offset(lv, (S6041C13*), ABISELECT(4328,2340), "S6041C11");
    check_field_offset(lv, s6041c11f0, ABISELECT(4384,2368), "S6041C11.s6041c11f0");
    check_field_offset(lv, s6041c11f1, ABISELECT(4400,2376), "S6041C11.s6041c11f1");
    check_field_offset(lv, s6041c11f2, ABISELECT(4416,2388), "S6041C11.s6041c11f2");
    check_field_offset(lv, s6041c11f3, ABISELECT(4420,2392), "S6041C11.s6041c11f3");
    check_field_offset(lv, s6041c11f4, ABISELECT(4456,2428), "S6041C11.s6041c11f4");
    set_bf_and_test(lv, s6041c11f5, ABISELECT(4458,2430), 0, 5, 1, "S6041C11");
    set_bf_and_test(lv, s6041c11f5, ABISELECT(4458,2430), 0, 5, hide_sll(1LL<<4), "S6041C11");
    test_class_info(&lv, &cd_S6041C11);
    dp->~S6041C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C11(Test_S6041C11, "S6041C11", ABISELECT(5888,3216));

#else // __cplusplus

extern void _ZN8S6041C11C1Ev();
extern void _ZN8S6041C11D2Ev();
Name_Map name_map_S6041C11[] = {
  NSPAIR(_ZN8S6041C11C1Ev),
  NSPAIR(_ZN8S6041C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6041C5;
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C10;
extern VTBL_ENTRY _ZTI8S6041C10[];
extern  VTBL_ENTRY _ZTV8S6041C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C10[];
extern Class_Descriptor cd_S6041C9;
extern VTBL_ENTRY _ZTI7S6041C9[];
extern  VTBL_ENTRY _ZTV7S6041C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C9[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C8;
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
extern Class_Descriptor cd_S6041C12;
extern VTBL_ENTRY _ZTI8S6041C12[];
extern  VTBL_ENTRY _ZTV8S6041C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C12[];
extern Class_Descriptor cd_S6041C13;
extern VTBL_ENTRY _ZTI8S6041C13[];
extern  VTBL_ENTRY _ZTV8S6041C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C13[];
static Base_Class bases_S6041C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6041C5,    ABISELECT(4560,2488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C3,    ABISELECT(5024,2744), //bcp->offset
    26, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5392,2940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C10,    ABISELECT(4560,2488), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6041C9,    ABISELECT(4464,2432), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6041C3,    ABISELECT(5408,2948), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5776,3144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C8,    ABISELECT(5408,2948), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6041C12,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6041C13,    ABISELECT(4328,2340), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6041C11[];
extern void _ZN8S6041C11D1Ev();
extern void _ZN8S6041C11D0Ev();
extern void _ZN8S6041C112v6Ev();
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev)();
extern void ABISELECT(_ZThn5408_N8S6041C11D1Ev,_ZThn2948_N8S6041C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev)();
extern void ABISELECT(_ZThn5408_N8S6041C11D0Ev,_ZThn2948_N8S6041C11D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY vtc_S6041C11[] = {
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN8S6041C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
  ABISELECT(696,404),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2488),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
  0,
  ABISELECT(-5024,-2744),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  0,
  ABISELECT(-5408,-2948),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2948),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
extern VTBL_ENTRY _ZTV8S6041C11[];
extern void _ZN8S6041C12D1Ev();
extern void _ZN8S6041C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C12__8S6041C11[] = {
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN8S6041C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C12__8S6041C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C12__8S6041C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2488),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C12__8S6041C11[] = {
  0,
  ABISELECT(-5024,-2744),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev)();
extern void ABISELECT(_ZThn5408_N8S6041C12D1Ev,_ZThn2948_N8S6041C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev)();
extern void ABISELECT(_ZThn5408_N8S6041C12D0Ev,_ZThn2948_N8S6041C12D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C12__8S6041C11[] = {
  0,
  ABISELECT(-5408,-2948),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2948),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C13__8S6041C11[] = {
  ABISELECT(696,404),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C13__8S6041C11[] = {
  0,
  ABISELECT(-696,-404),
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C9__8S6041C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C9__8S6041C11[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C11[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C10__8S6041C11[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C11[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C8__8S6041C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C8__8S6041C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C8__8S6041C11[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTT_ENTRY vtt_S6041C11[] = {
  {&(_ZTV8S6041C11[7]),  7,43},
  {&(_tg__ZTV8S6041C12__8S6041C11[7]),  7,9},
  {&(_tg__ZTV7S6041C9__8S6041C12__8S6041C11[5]),  5,5},
  {&(_tg__ZTV8S6041C10__8S6041C12__8S6041C11[6]),  6,8},
  {&(_tg__ZTV7S6041C3__8S6041C12__8S6041C11[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C12__8S6041C11[9]),  9,13},
  {&(_tg__ZTV8S6041C13__8S6041C11[3]),  3,3},
  {&(_tg__ZTV7S6041C3__8S6041C13__8S6041C11[3]),  3,4},
  {&(_ZTV8S6041C11[18]),  18,43},
  {&(_ZTV8S6041C11[24]),  24,43},
  {&(_ZTV8S6041C11[29]),  29,43},
  {&(_ZTV8S6041C11[39]),  39,43},
  {&(_ZTV8S6041C11[13]),  13,43},
  {&(_tg__ZTV7S6041C9__8S6041C11[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C9__8S6041C11[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C9__8S6041C11[3]),  3,4},
  {&(_tg__ZTV8S6041C10__8S6041C11[4]),  4,6},
  {&(_tg__ZTV7S6041C3__8S6041C10__8S6041C11[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C11[6]),  6,10},
  {&(_tg__ZTV7S6041C9__7S6041C8__8S6041C11[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C8__8S6041C11[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C8__8S6041C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6041C11[];
extern  VTBL_ENTRY _ZTV8S6041C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C11[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S6041C12D0Ev,_ZThn2948_N8S6041C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S6041C12D1Ev,_ZThn2948_N8S6041C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S6041C11D0Ev,_ZThn2948_N8S6041C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S6041C11D1Ev,_ZThn2948_N8S6041C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6041C11 = {  "S6041C11", // class name
  bases_S6041C11, 10,
  &(vtc_S6041C11[0]), // expected_vtbl_contents
  &(vtt_S6041C11[0]), // expected_vtt_contents
  ABISELECT(5888,3216), // object size
  NSPAIRA(_ZTI8S6041C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6041C11),43, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6041C11),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6041C7  : S6041C8 , S6041C11 , virtual S20177C15 {
  int s6041c7f0;
  void *s6041c7f1;
  short s6041c7f2;
  void *s6041c7f3[2];
  char s6041c7f4[8];
  ~S6041C7(); // tgen
  S6041C7(); // tgen
};
//SIG(-1 S6041C7) C1{ BC2{ VBC3{ VBC4{ BC5{ v1 Fi Fp FC6{ m Fp[2]}} VBC7{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v3 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC7 BC6 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC9{ BC10{ VBC3 VBC2 vd Fl Fp FC4 Fp Fs Fl Fi FL FC4[4] Fi} BC11{ VBC7 Fp Fs Fl Fi:6 Fp[2]} vd v5 FL FD FC8 Fi[9] Fs Fc:5} VBC12{ m Fl FC6[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]}


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

static void Test_S6041C7()
{
  extern Class_Descriptor cd_S6041C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(412,899)];
    init_test(&cd_S6041C7, buf);
    S6041C7 *dp, &lv = *(dp=new (buf) S6041C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6576,3592), "sizeof(S6041C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C7)");
    check_base_class_offset(lv, (S6041C5*)(S6041C10*), ABISELECT(5088,2784), "S6041C7");
    check_base_class_offset(lv, (S6041C3*)(S6041C10*), ABISELECT(5552,3040), "S6041C7");
    check_base_class_offset(lv, (S6041C3*)(S6041C13*)(S6041C11*), ABISELECT(5552,3040), "S6041C7");
    check_base_class_offset(lv, (S281C37_nt*)(S6041C10*), ABISELECT(5920,3236), "S6041C7");
    check_base_class_offset(lv, (S6041C10*)(S6041C9*), ABISELECT(5088,2784), "S6041C7");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C9*)(S6041C8*), ABISELECT(4984,2728), "S6041C7");
    check_base_class_offset(lv, (S6041C9*)(S6041C12*)(S6041C11*), ABISELECT(4984,2728), "S6041C7");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C9*)(S6041C8*), ABISELECT(4984,2728), "S6041C7");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C8*), 0, "S6041C7");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C8*), ABISELECT(368,196), "S6041C7");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C8*), 0, "S6041C7");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C8*), ABISELECT(5936,3244), "S6041C7");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C8*), ABISELECT(6304,3440), "S6041C7");
    check_base_class_offset(lv, (S6041C8*)(S6041C12*)(S6041C11*), ABISELECT(5936,3244), "S6041C7");
    check_base_class_offset(lv, (S6041C12*)(S6041C11*), ABISELECT(480,268), "S6041C7");
    check_base_class_offset(lv, (S6041C13*)(S6041C11*), ABISELECT(4808,2608), "S6041C7");
    check_base_class_offset(lv, (S6041C11*), ABISELECT(480,268), "S6041C7");
    check_base_class_offset(lv, (S20177C15*), ABISELECT(6416,3512), "S6041C7");
    check_field_offset(lv, s6041c7f0, ABISELECT(4940,2700), "S6041C7.s6041c7f0");
    check_field_offset(lv, s6041c7f1, ABISELECT(4944,2704), "S6041C7.s6041c7f1");
    check_field_offset(lv, s6041c7f2, ABISELECT(4952,2708), "S6041C7.s6041c7f2");
    check_field_offset(lv, s6041c7f3, ABISELECT(4960,2712), "S6041C7.s6041c7f3");
    check_field_offset(lv, s6041c7f4, ABISELECT(4976,2720), "S6041C7.s6041c7f4");
    test_class_info(&lv, &cd_S6041C7);
    dp->~S6041C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C7(Test_S6041C7, "S6041C7", ABISELECT(6576,3592));

#else // __cplusplus

extern void _ZN7S6041C7C1Ev();
extern void _ZN7S6041C7D1Ev();
Name_Map name_map_S6041C7[] = {
  NSPAIR(_ZN7S6041C7C1Ev),
  NSPAIR(_ZN7S6041C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6041C5;
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C10;
extern VTBL_ENTRY _ZTI8S6041C10[];
extern  VTBL_ENTRY _ZTV8S6041C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C10[];
extern Class_Descriptor cd_S6041C9;
extern VTBL_ENTRY _ZTI7S6041C9[];
extern  VTBL_ENTRY _ZTV7S6041C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C9[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C8;
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C8;
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
extern Class_Descriptor cd_S6041C12;
extern VTBL_ENTRY _ZTI8S6041C12[];
extern  VTBL_ENTRY _ZTV8S6041C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C12[];
extern Class_Descriptor cd_S6041C13;
extern VTBL_ENTRY _ZTI8S6041C13[];
extern  VTBL_ENTRY _ZTV8S6041C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C13[];
extern Class_Descriptor cd_S6041C11;
extern VTBL_ENTRY _ZTI8S6041C11[];
extern  VTBL_ENTRY _ZTV8S6041C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C11[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
static Base_Class bases_S6041C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6041C5,    ABISELECT(5088,2784), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C3,    ABISELECT(5552,3040), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5920,3236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C10,    ABISELECT(5088,2784), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6041C9,    ABISELECT(4984,2728), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6041C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C8,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6041C3,    ABISELECT(5936,3244), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(6304,3440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C8,    ABISELECT(5936,3244), //bcp->offset
    42, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6041C12,    ABISELECT(480,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6041C13,    ABISELECT(4808,2608), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6041C11,    ABISELECT(480,268), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C15,    ABISELECT(6416,3512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6041C7[];
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C7D1Ev();
extern void _ZN7S6041C7D0Ev();
extern void _ZN7S6041C82v5Ev();
extern void ABISELECT(_ZThn480_N7S6041C7D1Ev,_ZThn268_N7S6041C7D1Ev)();
extern void ABISELECT(_ZThn480_N7S6041C7D0Ev,_ZThn268_N7S6041C7D0Ev)();
extern void _ZN8S6041C112v6Ev();
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6041C7D1Ev,_ZTv0_n32_N7S6041C7D1Ev)();
extern void ABISELECT(_ZThn5936_N7S6041C7D1Ev,_ZThn3244_N7S6041C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6041C7D0Ev,_ZTv0_n32_N7S6041C7D0Ev)();
extern void ABISELECT(_ZThn5936_N7S6041C7D0Ev,_ZThn3244_N7S6041C7D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY vtc_S6041C7[] = {
  ABISELECT(6416,3512),
  ABISELECT(5936,3244),
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N7S6041C7D1Ev,_ZThn268_N7S6041C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N7S6041C7D0Ev,_ZThn268_N7S6041C7D0Ev),
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
  ABISELECT(744,432),
  ABISELECT(-4808,-2608),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
  0,
  ABISELECT(-5552,-3040),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  0,
  ABISELECT(-5936,-3244),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5936,-3244),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6041C7D1Ev,_ZTv0_n32_N7S6041C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6041C7D0Ev,_ZTv0_n32_N7S6041C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
extern VTBL_ENTRY _ZTV7S6041C7[];
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__A__7S6041C7[] = {
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C8__A__7S6041C7[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C8__A__7S6041C7[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C8__A__7S6041C7[] = {
  0,
  ABISELECT(-5552,-3040),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN8S6041C11D1Ev();
extern void _ZN8S6041C11D0Ev();
extern void _ZN8S6041C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C11__7S6041C7[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN8S6041C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
};
extern void _ZN8S6041C12D1Ev();
extern void _ZN8S6041C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C128S6041C11__7S6041C7[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN8S6041C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C128S6041C11__7S6041C7[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C128S6041C11__7S6041C7[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C128S6041C11__7S6041C7[] = {
  0,
  ABISELECT(-5072,-2772),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev)();
extern void ABISELECT(_ZThn5456_N8S6041C12D1Ev,_ZThn2976_N8S6041C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev)();
extern void ABISELECT(_ZThn5456_N8S6041C12D0Ev,_ZThn2976_N8S6041C12D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C128S6041C11__7S6041C7[] = {
  0,
  ABISELECT(-5456,-2976),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2976),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C138S6041C11__7S6041C7[] = {
  ABISELECT(744,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C138S6041C11__7S6041C7[] = {
  0,
  ABISELECT(-744,-432),
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C11__7S6041C7[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C11__7S6041C7[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C11__7S6041C7[] = {
  0,
  ABISELECT(-5072,-2772),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev)();
extern void ABISELECT(_ZThn5456_N8S6041C11D1Ev,_ZThn2976_N8S6041C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev)();
extern void ABISELECT(_ZThn5456_N8S6041C11D0Ev,_ZThn2976_N8S6041C11D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C11__7S6041C7[] = {
  0,
  ABISELECT(-5456,-2976),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2976),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C13__8S6041C11__7S6041C7[] = {
  ABISELECT(744,432),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C7[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C9__7S6041C7[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C9__7S6041C7[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C7[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C10__7S6041C7[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__A1__7S6041C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C8__A1__7S6041C7[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C8__A1__7S6041C7[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C8__A1__7S6041C7[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTT_ENTRY vtt_S6041C7[] = {
  {&(_ZTV7S6041C7[8]),  8,55},
  {&(_tg__ZTV7S6041C8__A__7S6041C7[6]),  6,10},
  {&(_tg__ZTV7S6041C9__7S6041C8__A__7S6041C7[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C8__A__7S6041C7[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C8__A__7S6041C7[3]),  3,4},
  {&(_tg__ZTV8S6041C11__7S6041C7[7]),  7,10},
  {&(_tg__ZTV8S6041C128S6041C11__7S6041C7[7]),  7,9},
  {&(_tg__ZTV7S6041C9__8S6041C128S6041C11__7S6041C7[5]),  5,5},
  {&(_tg__ZTV8S6041C10__8S6041C128S6041C11__7S6041C7[6]),  6,8},
  {&(_tg__ZTV7S6041C3__8S6041C128S6041C11__7S6041C7[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C128S6041C11__7S6041C7[9]),  9,13},
  {&(_tg__ZTV8S6041C138S6041C11__7S6041C7[3]),  3,3},
  {&(_tg__ZTV7S6041C3__8S6041C138S6041C11__7S6041C7[3]),  3,4},
  {&(_tg__ZTV7S6041C9__8S6041C11__7S6041C7[5]),  5,5},
  {&(_tg__ZTV8S6041C10__8S6041C11__7S6041C7[6]),  6,8},
  {&(_tg__ZTV7S6041C3__8S6041C11__7S6041C7[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C11__7S6041C7[9]),  9,13},
  {&(_tg__ZTV8S6041C13__8S6041C11__7S6041C7[3]),  3,3},
  {&(_ZTV7S6041C7[30]),  30,55},
  {&(_ZTV7S6041C7[36]),  36,55},
  {&(_ZTV7S6041C7[41]),  41,55},
  {&(_ZTV7S6041C7[19]),  19,55},
  {&(_ZTV7S6041C7[51]),  51,55},
  {&(_ZTV7S6041C7[25]),  25,55},
  {&(_tg__ZTV7S6041C9__7S6041C7[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C9__7S6041C7[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C9__7S6041C7[3]),  3,4},
  {&(_tg__ZTV8S6041C10__7S6041C7[4]),  4,6},
  {&(_tg__ZTV7S6041C3__8S6041C10__7S6041C7[3]),  3,4},
  {&(_tg__ZTV7S6041C8__A1__7S6041C7[6]),  6,10},
  {&(_tg__ZTV7S6041C9__7S6041C8__A1__7S6041C7[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C8__A1__7S6041C7[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C8__A1__7S6041C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6041C7[];
extern  VTBL_ENTRY _ZTV7S6041C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C7[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6041C11D0Ev,_ZThn2976_N8S6041C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6041C11D1Ev,_ZThn2976_N8S6041C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6041C12D0Ev,_ZThn2976_N8S6041C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6041C12D1Ev,_ZThn2976_N8S6041C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6041C7D0Ev,_ZTv0_n32_N7S6041C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N7S6041C7D0Ev,_ZThn3244_N7S6041C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6041C7D1Ev,_ZTv0_n32_N7S6041C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N7S6041C7D1Ev,_ZThn3244_N7S6041C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6041C7 = {  "S6041C7", // class name
  bases_S6041C7, 15,
  &(vtc_S6041C7[0]), // expected_vtbl_contents
  &(vtt_S6041C7[0]), // expected_vtt_contents
  ABISELECT(6576,3592), // object size
  NSPAIRA(_ZTI7S6041C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6041C7),55, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6041C7),33, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6041C15  {
  long s6041c15f0;
  char s6041c15f1;
  short s6041c15f2[2];
  virtual void  v7(); // _ZN8S6041C152v7Ev
  ~S6041C15(); // tgen
  S6041C15(); // tgen
};
//SIG(-1 S6041C15) C1{ v1 Fl Fc Fs[2]}


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

static void Test_S6041C15()
{
  extern Class_Descriptor cd_S6041C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6041C15, buf);
    S6041C15 *dp, &lv = *(dp=new (buf) S6041C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6041C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6041C15)");
    check_field_offset(lv, s6041c15f0, ABISELECT(8,4), "S6041C15.s6041c15f0");
    check_field_offset(lv, s6041c15f1, ABISELECT(16,8), "S6041C15.s6041c15f1");
    check_field_offset(lv, s6041c15f2, ABISELECT(18,10), "S6041C15.s6041c15f2");
    test_class_info(&lv, &cd_S6041C15);
    dp->~S6041C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C15(Test_S6041C15, "S6041C15", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S6041C15C1Ev();
extern void _ZN8S6041C15D1Ev();
Name_Map name_map_S6041C15[] = {
  NSPAIR(_ZN8S6041C15C1Ev),
  NSPAIR(_ZN8S6041C15D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6041C15[];
extern void _ZN8S6041C152v7Ev();
static  VTBL_ENTRY vtc_S6041C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C15[0]),
  (VTBL_ENTRY)&_ZN8S6041C152v7Ev,
};
extern VTBL_ENTRY _ZTI8S6041C15[];
extern  VTBL_ENTRY _ZTV8S6041C15[];
Class_Descriptor cd_S6041C15 = {  "S6041C15", // class name
  0,0,//no base classes
  &(vtc_S6041C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S6041C15),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6041C15),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  S6041C6  : virtual S6041C7 , S6041C8 , virtual S6041C15 , S281C37_nt {
  ::S20176C18 s6041c6f0;
  long double s6041c6f1;
  int s6041c6f2;
  ::S20177C19 s6041c6f3;
  char s6041c6f4;
  long s6041c6f5;
  ::S20176C3_nt s6041c6f6[8];
  int s6041c6f7:18;
  int s6041c6f8;
  ::S6041C12 s6041c6f9;
  ::S20177C22 s6041c6f10;
  ::S20176C3_nt s6041c6f11;
  virtual  ~S6041C6(); // _ZN7S6041C6D2Ev
  virtual void  v8(); // _ZN7S6041C62v8Ev
  S6041C6(); // tgen
};
//SIG(-1 S6041C6) C1{ VBC2{ BC3{ VBC4{ VBC5{ BC6{ v2 Fi Fp FC7{ m Fp[2]}} VBC8{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC9{} FC7 FC7[9] Fp FC6 FC6} VBC7 v4 Fp FL Fc[2] FC8 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC8 BC7 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC10{ BC11{ VBC4 VBC3 vd Fl Fp FC5 Fp Fs Fl Fi FL FC5[4] Fi} BC12{ VBC8 Fp Fs Fl Fi:6 Fp[2]} vd v6 FL FD FC9 Fi[9] Fs Fc:5} VBC13{ m Fl FC7[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} BC3 VBC14{ v7 Fl Fc Fs[2]} BC7 vd v1 FC15{ BC16{ VBC17{ VBC18{ BC19{ v8 Fi Fp FC7} VBC20{ v9 Fi[6] Fc:2 FD Fp[2] Fi FD FC9 FC7 FC7[9] Fp FC19 FC19} VBC7 v10 Fp FL Fc[2] FC20 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC20 BC7 vd v11 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC9 Fp Fi Fc[8] Fs Fi} FD Fi FC21{ VBC22{ BC23{ VBC24{ v13 Fi Fp FC7} VBC7 BC25{ BC24 VBC26{ v14 Fi[6] Fc:2 FD Fp[2] Fi FD FC9 FC7 FC7[9] Fp FC24 FC24} VBC7 v15 Fp FL Fc[2] FC26 Fs[7] Fi Fc Fi:20} BC26 vd v16 FL:25 Fp Fi[3] FC7} vd Fp Fi Fp Fi[7] FC27{ VBC25 Fi Fc Fp[6] Fi[2] Fp FC7}} VBC23 vd v12 Fi[2] Fs[10] Fi FC9 Fi:32 Fi FC9 Fp Fi:2 Fi FD} Fc Fl FC9[8] Fi:18 Fi FC11 FC28{ BC23 VBC25 VBC29{ VBC30{ VBC26 VBC31{ VBC27 BC26 BC7 vd v19 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v20 v21 FC31[7] Fi Fs Fi FC25 Fl[9]} vd Fc Fi[3]} vd v17 v18 FD[2] FC9 Fi:16 Fi:3} FC9}


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

static void Test_S6041C6()
{
  extern Class_Descriptor cd_S6041C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1941,4255)];
    init_test(&cd_S6041C6, buf);
    S6041C6 *dp, &lv = *(dp=new (buf) S6041C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31040,17016), "sizeof(S6041C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C6)");
    check_base_class_offset(lv, (S6041C5*)(S6041C10*), ABISELECT(29520,16192), "S6041C6");
    check_base_class_offset(lv, (S6041C3*)(S6041C10*), ABISELECT(29984,16448), "S6041C6");
    check_base_class_offset(lv, (S6041C3*)(S6041C13*)(S6041C11*)(S6041C7*), ABISELECT(29984,16448), "S6041C6");
    check_base_class_offset(lv, (S281C37_nt*)(S6041C10*), ABISELECT(30352,16644), "S6041C6");
    check_base_class_offset(lv, (S6041C10*)(S6041C9*), ABISELECT(29520,16192), "S6041C6");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C9*)(S6041C8*)(S6041C7*), ABISELECT(29416,16136), "S6041C6");
    check_base_class_offset(lv, (S6041C9*)(S6041C12*)(S6041C11*)(S6041C7*), ABISELECT(29416,16136), "S6041C6");
    /*is_ambiguous_... S6041C6::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C9*)(S6041C8*), ABISELECT(29416,16136), "S6041C6");
    /*is_ambiguous_... S6041C6::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C9*)(S6041C8*), ABISELECT(29416,16136), "S6041C6");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C8*)(S6041C7*), ABISELECT(24432,13408), "S6041C6");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C8*)(S6041C7*), ABISELECT(24800,13604), "S6041C6");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C8*)(S6041C7*), ABISELECT(24432,13408), "S6041C6");
    /*is_ambiguous_... S6041C6::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C8*), ABISELECT(30368,16652), "S6041C6");
    /*is_ambiguous_... S6041C6::S6041C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C8*), ABISELECT(30736,16848), "S6041C6");
    check_base_class_offset(lv, (S6041C8*)(S6041C12*)(S6041C11*)(S6041C7*), ABISELECT(30368,16652), "S6041C6");
    check_base_class_offset(lv, (S6041C12*)(S6041C11*)(S6041C7*), ABISELECT(24912,13676), "S6041C6");
    check_base_class_offset(lv, (S6041C13*)(S6041C11*)(S6041C7*), ABISELECT(29240,16016), "S6041C6");
    check_base_class_offset(lv, (S6041C11*)(S6041C7*), ABISELECT(24912,13676), "S6041C6");
    check_base_class_offset(lv, (S20177C15*)(S6041C7*), ABISELECT(30848,16920), "S6041C6");
    check_base_class_offset(lv, (S6041C7*), ABISELECT(24432,13408), "S6041C6");
    /*is_ambiguous_... S6041C6::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C8*), 0, "S6041C6");
    /*is_ambiguous_... S6041C6::S6041C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C8*), ABISELECT(368,196), "S6041C6");
    /*is_ambiguous_... S6041C6::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C8*), 0, "S6041C6");
    check_base_class_offset(lv, (S6041C15*), ABISELECT(31008,17000), "S6041C6");
    /*is_ambiguous_... S6041C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(480,268), "S6041C6");
    check_field_offset(lv, s6041c6f0, ABISELECT(496,276), "S6041C6.s6041c6f0");
    check_field_offset(lv, s6041c6f1, ABISELECT(1968,1092), "S6041C6.s6041c6f1");
    check_field_offset(lv, s6041c6f2, ABISELECT(1984,1104), "S6041C6.s6041c6f2");
    check_field_offset(lv, s6041c6f3, ABISELECT(2000,1108), "S6041C6.s6041c6f3");
    check_field_offset(lv, s6041c6f4, ABISELECT(5296,2924), "S6041C6.s6041c6f4");
    check_field_offset(lv, s6041c6f5, ABISELECT(5304,2928), "S6041C6.s6041c6f5");
    check_field_offset(lv, s6041c6f6, ABISELECT(5312,2932), "S6041C6.s6041c6f6");
    set_bf_and_test(lv, s6041c6f7, ABISELECT(5320,2940), 0, 18, 1, "S6041C6");
    set_bf_and_test(lv, s6041c6f7, ABISELECT(5320,2940), 0, 18, hide_sll(1LL<<17), "S6041C6");
    check_field_offset(lv, s6041c6f8, ABISELECT(5324,2944), "S6041C6.s6041c6f8");
    check_field_offset(lv, s6041c6f9, ABISELECT(5328,2948), "S6041C6.s6041c6f9");
    check_field_offset(lv, s6041c6f10, ABISELECT(11088,6072), "S6041C6.s6041c6f10");
    check_field_offset(lv, s6041c6f11, ABISELECT(24416,13404), "S6041C6.s6041c6f11");
    test_class_info(&lv, &cd_S6041C6);
    dp->~S6041C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C6(Test_S6041C6, "S6041C6", ABISELECT(31040,17016));

#else // __cplusplus

extern void _ZN7S6041C6C1Ev();
extern void _ZN7S6041C6D2Ev();
Name_Map name_map_S6041C6[] = {
  NSPAIR(_ZN7S6041C6C1Ev),
  NSPAIR(_ZN7S6041C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6041C5;
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C10;
extern VTBL_ENTRY _ZTI8S6041C10[];
extern  VTBL_ENTRY _ZTV8S6041C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C10[];
extern Class_Descriptor cd_S6041C9;
extern VTBL_ENTRY _ZTI7S6041C9[];
extern  VTBL_ENTRY _ZTV7S6041C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C9[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C8;
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C8;
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
extern Class_Descriptor cd_S6041C12;
extern VTBL_ENTRY _ZTI8S6041C12[];
extern  VTBL_ENTRY _ZTV8S6041C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C12[];
extern Class_Descriptor cd_S6041C13;
extern VTBL_ENTRY _ZTI8S6041C13[];
extern  VTBL_ENTRY _ZTV8S6041C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C13[];
extern Class_Descriptor cd_S6041C11;
extern VTBL_ENTRY _ZTI8S6041C11[];
extern  VTBL_ENTRY _ZTV8S6041C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C11[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
extern Class_Descriptor cd_S6041C7;
extern VTBL_ENTRY _ZTI7S6041C7[];
extern  VTBL_ENTRY _ZTV7S6041C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C7[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C8;
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
extern Class_Descriptor cd_S6041C15;
extern VTBL_ENTRY _ZTI8S6041C15[];
extern  VTBL_ENTRY _ZTV8S6041C15[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S6041C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6041C5,    ABISELECT(29520,16192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C3,    ABISELECT(29984,16448), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(30352,16644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C10,    ABISELECT(29520,16192), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6041C9,    ABISELECT(29416,16136), //bcp->offset
    44, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6041C3,    ABISELECT(24432,13408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(24800,13604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C8,    ABISELECT(24432,13408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6041C3,    ABISELECT(30368,16652), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(30736,16848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C8,    ABISELECT(30368,16652), //bcp->offset
    61, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6041C12,    ABISELECT(24912,13676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6041C13,    ABISELECT(29240,16016), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6041C11,    ABISELECT(24912,13676), //bcp->offset
    31, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20177C15,    ABISELECT(30848,16920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C7,    ABISELECT(24432,13408), //bcp->offset
    15, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6041C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6041C8,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6041C15,    ABISELECT(31008,17000), //bcp->offset
    74, //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
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(480,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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6041C6[];
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C6D1Ev();
extern void _ZN7S6041C6D0Ev();
extern void _ZN7S6041C82v5Ev();
extern void _ZN7S6041C62v8Ev();
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n80_N7S6041C6D1Ev,_ZTv0_n40_N7S6041C6D1Ev)();
extern void ABISELECT(_ZThn24432_N7S6041C6D1Ev,_ZThn13408_N7S6041C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S6041C6D0Ev,_ZTv0_n40_N7S6041C6D0Ev)();
extern void ABISELECT(_ZThn24432_N7S6041C6D0Ev,_ZThn13408_N7S6041C6D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
extern void ABISELECT(_ZTvn480_n80_N7S6041C6D1Ev,_ZTvn268_n40_N7S6041C6D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N7S6041C6D0Ev,_ZTvn268_n40_N7S6041C6D0Ev)();
extern void _ZN8S6041C112v6Ev();
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6041C6D1Ev,_ZTv0_n32_N7S6041C6D1Ev)();
extern void ABISELECT(_ZThn30368_N7S6041C6D1Ev,_ZThn16652_N7S6041C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6041C6D0Ev,_ZTv0_n32_N7S6041C6D0Ev)();
extern void ABISELECT(_ZThn30368_N7S6041C6D0Ev,_ZThn16652_N7S6041C6D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
extern void _ZN8S6041C152v7Ev();
static  VTBL_ENTRY vtc_S6041C6[] = {
  ABISELECT(31008,17000),
  ABISELECT(30848,16920),
  ABISELECT(30368,16652),
  ABISELECT(24432,13408),
  ABISELECT(30352,16644),
  ABISELECT(29984,16448),
  ABISELECT(29520,16192),
  ABISELECT(29416,16136),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6041C62v8Ev,
  ABISELECT(480,268),
  0,
  ABISELECT(-24432,-13408),
  0,
  ABISELECT(6416,3512),
  ABISELECT(5936,3244),
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  ABISELECT(-24432,-13408),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6041C6D1Ev,_ZTv0_n40_N7S6041C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6041C6D0Ev,_ZTv0_n40_N7S6041C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-24912,-13676),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N7S6041C6D1Ev,_ZTvn268_n40_N7S6041C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N7S6041C6D0Ev,_ZTvn268_n40_N7S6041C6D0Ev),
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
  ABISELECT(744,432),
  ABISELECT(-29240,-16016),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-29416,-16136),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-29520,-16192),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
  0,
  ABISELECT(-29984,-16448),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  0,
  ABISELECT(-30368,-16652),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-30368,-16652),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6041C6D1Ev,_ZTv0_n32_N7S6041C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6041C6D0Ev,_ZTv0_n32_N7S6041C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
  0,
  ABISELECT(-31008,-17000),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&_ZN8S6041C152v7Ev,
};
extern VTBL_ENTRY _ZTV7S6041C6[];
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__A__7S6041C6[] = {
  ABISELECT(30352,16644),
  ABISELECT(29984,16448),
  ABISELECT(29520,16192),
  ABISELECT(29416,16136),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C8__A__7S6041C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-29416,-16136),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C8__A__7S6041C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-29520,-16192),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C8__A__7S6041C6[] = {
  0,
  ABISELECT(-29984,-16448),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C7D1Ev();
extern void _ZN7S6041C7D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C7__7S6041C6[] = {
  ABISELECT(6416,3512),
  ABISELECT(5936,3244),
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C87S6041C7__7S6041C6[] = {
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C87S6041C7__7S6041C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C87S6041C7__7S6041C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C87S6041C7__7S6041C6[] = {
  0,
  ABISELECT(-5552,-3040),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN8S6041C11D1Ev();
extern void _ZN8S6041C11D0Ev();
extern void _ZN8S6041C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C117S6041C7__7S6041C6[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN8S6041C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
};
extern void _ZN8S6041C12D1Ev();
extern void _ZN8S6041C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C128S6041C117S6041C7__7S6041C6[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN8S6041C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C128S6041C117S6041C7__7S6041C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C128S6041C117S6041C7__7S6041C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C128S6041C117S6041C7__7S6041C6[] = {
  0,
  ABISELECT(-5072,-2772),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev)();
extern void ABISELECT(_ZThn5456_N8S6041C12D1Ev,_ZThn2976_N8S6041C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev)();
extern void ABISELECT(_ZThn5456_N8S6041C12D0Ev,_ZThn2976_N8S6041C12D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C128S6041C117S6041C7__7S6041C6[] = {
  0,
  ABISELECT(-5456,-2976),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2976),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C138S6041C117S6041C7__7S6041C6[] = {
  ABISELECT(744,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C138S6041C117S6041C7__7S6041C6[] = {
  0,
  ABISELECT(-744,-432),
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C117S6041C7__7S6041C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C117S6041C7__7S6041C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C117S6041C7__7S6041C6[] = {
  0,
  ABISELECT(-5072,-2772),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev)();
extern void ABISELECT(_ZThn5456_N8S6041C11D1Ev,_ZThn2976_N8S6041C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev)();
extern void ABISELECT(_ZThn5456_N8S6041C11D0Ev,_ZThn2976_N8S6041C11D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C117S6041C7__7S6041C6[] = {
  0,
  ABISELECT(-5456,-2976),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2976),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C13__8S6041C117S6041C7__7S6041C6[] = {
  ABISELECT(744,432),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C7__7S6041C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C7__7S6041C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C7__7S6041C6[] = {
  0,
  ABISELECT(-5552,-3040),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void ABISELECT(_ZThn480_N7S6041C7D1Ev,_ZThn268_N7S6041C7D1Ev)();
extern void ABISELECT(_ZThn480_N7S6041C7D0Ev,_ZThn268_N7S6041C7D0Ev)();
extern void _ZN8S6041C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C11__7S6041C7__7S6041C6[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N7S6041C7D1Ev,_ZThn268_N7S6041C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N7S6041C7D0Ev,_ZThn268_N7S6041C7D0Ev),
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6041C7D1Ev,_ZTv0_n32_N7S6041C7D1Ev)();
extern void ABISELECT(_ZThn5936_N7S6041C7D1Ev,_ZThn3244_N7S6041C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6041C7D0Ev,_ZTv0_n32_N7S6041C7D0Ev)();
extern void ABISELECT(_ZThn5936_N7S6041C7D0Ev,_ZThn3244_N7S6041C7D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__A1__7S6041C7__7S6041C6[] = {
  0,
  ABISELECT(-5936,-3244),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5936,-3244),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6041C7D1Ev,_ZTv0_n32_N7S6041C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6041C7D0Ev,_ZTv0_n32_N7S6041C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C138S6041C11__7S6041C7__7S6041C6[] = {
  ABISELECT(744,432),
  ABISELECT(-4808,-2608),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C9__7S6041C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C9__7S6041C6[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C6[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C10__7S6041C6[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__A1__7S6041C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C8__A1__7S6041C6[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C8__A1__7S6041C6[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C8__A1__7S6041C6[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTT_ENTRY vtt_S6041C6[] = {
  {&(_ZTV7S6041C6[10]),  10,78},
  {&(_tg__ZTV7S6041C8__A__7S6041C6[6]),  6,10},
  {&(_tg__ZTV7S6041C9__7S6041C8__A__7S6041C6[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C8__A__7S6041C6[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C8__A__7S6041C6[3]),  3,4},
  {&(_ZTV7S6041C6[27]),  27,78},
  {&(_ZTV7S6041C6[49]),  49,78},
  {&(_ZTV7S6041C6[55]),  55,78},
  {&(_ZTV7S6041C6[60]),  60,78},
  {&(_ZTV7S6041C6[38]),  38,78},
  {&(_ZTV7S6041C6[70]),  70,78},
  {&(_ZTV7S6041C6[44]),  44,78},
  {&(_ZTV7S6041C6[77]),  77,78},
  {&(_tg__ZTV7S6041C7__7S6041C6[8]),  8,12},
  {&(_tg__ZTV7S6041C87S6041C7__7S6041C6[6]),  6,10},
  {&(_tg__ZTV7S6041C9__7S6041C87S6041C7__7S6041C6[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C87S6041C7__7S6041C6[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C87S6041C7__7S6041C6[3]),  3,4},
  {&(_tg__ZTV8S6041C117S6041C7__7S6041C6[7]),  7,10},
  {&(_tg__ZTV8S6041C128S6041C117S6041C7__7S6041C6[7]),  7,9},
  {&(_tg__ZTV7S6041C9__8S6041C128S6041C117S6041C7__7S6041C6[5]),  5,5},
  {&(_tg__ZTV8S6041C10__8S6041C128S6041C117S6041C7__7S6041C6[6]),  6,8},
  {&(_tg__ZTV7S6041C3__8S6041C128S6041C117S6041C7__7S6041C6[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C128S6041C117S6041C7__7S6041C6[9]),  9,13},
  {&(_tg__ZTV8S6041C138S6041C117S6041C7__7S6041C6[3]),  3,3},
  {&(_tg__ZTV7S6041C3__8S6041C138S6041C117S6041C7__7S6041C6[3]),  3,4},
  {&(_tg__ZTV7S6041C9__8S6041C117S6041C7__7S6041C6[5]),  5,5},
  {&(_tg__ZTV8S6041C10__8S6041C117S6041C7__7S6041C6[6]),  6,8},
  {&(_tg__ZTV7S6041C3__8S6041C117S6041C7__7S6041C6[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C117S6041C7__7S6041C6[9]),  9,13},
  {&(_tg__ZTV8S6041C13__8S6041C117S6041C7__7S6041C6[3]),  3,3},
  {&(_tg__ZTV7S6041C9__7S6041C7__7S6041C6[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C7__7S6041C6[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C7__7S6041C6[3]),  3,4},
  {&(_tg__ZTV8S6041C11__7S6041C7__7S6041C6[7]),  7,10},
  {&(_tg__ZTV7S6041C8__A1__7S6041C7__7S6041C6[9]),  9,13},
  {&(_tg__ZTV8S6041C138S6041C11__7S6041C7__7S6041C6[3]),  3,3},
  {&(_tg__ZTV7S6041C9__7S6041C6[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C9__7S6041C6[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C9__7S6041C6[3]),  3,4},
  {&(_tg__ZTV8S6041C10__7S6041C6[4]),  4,6},
  {&(_tg__ZTV7S6041C3__8S6041C10__7S6041C6[3]),  3,4},
  {&(_tg__ZTV7S6041C8__A1__7S6041C6[6]),  6,10},
  {&(_tg__ZTV7S6041C9__7S6041C8__A1__7S6041C6[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C8__A1__7S6041C6[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C8__A1__7S6041C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6041C6[];
extern  VTBL_ENTRY _ZTV7S6041C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C6[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6041C7D0Ev,_ZTv0_n32_N7S6041C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N7S6041C7D0Ev,_ZThn3244_N7S6041C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6041C7D1Ev,_ZTv0_n32_N7S6041C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N7S6041C7D1Ev,_ZThn3244_N7S6041C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6041C11D0Ev,_ZThn2976_N8S6041C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6041C11D1Ev,_ZThn2976_N8S6041C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6041C12D0Ev,_ZThn2976_N8S6041C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S6041C12D1Ev,_ZThn2976_N8S6041C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6041C6D0Ev,_ZTv0_n32_N7S6041C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30368_N7S6041C6D0Ev,_ZThn16652_N7S6041C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6041C6D1Ev,_ZTv0_n32_N7S6041C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30368_N7S6041C6D1Ev,_ZThn16652_N7S6041C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6041C6D0Ev,_ZTv0_n40_N7S6041C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24432_N7S6041C6D0Ev,_ZThn13408_N7S6041C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6041C6D1Ev,_ZTv0_n40_N7S6041C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24432_N7S6041C6D1Ev,_ZThn13408_N7S6041C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6041C6 = {  "S6041C6", // class name
  bases_S6041C6, 21,
  &(vtc_S6041C6[0]), // expected_vtbl_contents
  &(vtt_S6041C6[0]), // expected_vtt_contents
  ABISELECT(31040,17016), // object size
  NSPAIRA(_ZTI7S6041C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6041C6),78, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6041C6),46, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6041C22  : virtual S6041C3 , virtual S6041C8 {
  ::S6041C8 s6041c22f0[7];
  int s6041c22f1;
  short s6041c22f2;
  int s6041c22f3;
  ::S6041C10 s6041c22f4;
  long s6041c22f5[9];
  virtual void  v13(); // _ZN8S6041C223v13Ev
  virtual void  v14(); // _ZN8S6041C223v14Ev
  ~S6041C22(); // tgen
  S6041C22(); // tgen
};
//SIG(-1 S6041C22) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 Fl[9]}


void  S6041C22 ::v13(){vfunc_called(this, "_ZN8S6041C223v13Ev");}
void  S6041C22 ::v14(){vfunc_called(this, "_ZN8S6041C223v14Ev");}
S6041C22 ::~S6041C22(){ note_dtor("S6041C22", this);} // tgen
S6041C22 ::S6041C22(){ note_ctor("S6041C22", this);} // tgen

static void Test_S6041C22()
{
  extern Class_Descriptor cd_S6041C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1697)];
    init_test(&cd_S6041C22, buf);
    S6041C22 *dp, &lv = *(dp=new (buf) S6041C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6784), "sizeof(S6041C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C22)");
    /*is_ambiguous_... S6041C22::S6041C3 */ AMB_check_base_class_offset(lv, (S6041C3*), ABISELECT(10928,6000), "S6041C22");
    check_base_class_offset(lv, (S6041C3*)(S6041C10*), ABISELECT(10928,6000), "S6041C22");
    check_base_class_offset(lv, (S6041C5*)(S6041C10*), ABISELECT(11872,6520), "S6041C22");
    check_base_class_offset(lv, (S281C37_nt*)(S6041C10*), ABISELECT(12328,6776), "S6041C22");
    check_base_class_offset(lv, (S6041C10*)(S6041C9*), ABISELECT(11872,6520), "S6041C22");
    check_base_class_offset(lv, (S6041C9*)(S6041C8*), ABISELECT(11776,6464), "S6041C22");
    /*is_ambiguous_... S6041C8::S6041C3 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C8*), ABISELECT(11296,6196), "S6041C22");
    /*is_ambiguous_... S6041C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C8*), ABISELECT(11664,6392), "S6041C22");
    check_base_class_offset(lv, (S6041C8*), ABISELECT(11296,6196), "S6041C22");
    check_field_offset(lv, s6041c22f0, ABISELECT(16,4), "S6041C22.s6041c22f0");
    check_field_offset(lv, s6041c22f1, ABISELECT(9984,5492), "S6041C22.s6041c22f1");
    check_field_offset(lv, s6041c22f2, ABISELECT(9988,5496), "S6041C22.s6041c22f2");
    check_field_offset(lv, s6041c22f3, ABISELECT(9992,5500), "S6041C22.s6041c22f3");
    check_field_offset(lv, s6041c22f4, ABISELECT(10000,5504), "S6041C22.s6041c22f4");
    check_field_offset(lv, s6041c22f5, ABISELECT(10848,5964), "S6041C22.s6041c22f5");
    test_class_info(&lv, &cd_S6041C22);
    dp->~S6041C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C22(Test_S6041C22, "S6041C22", ABISELECT(12352,6784));

#else // __cplusplus

extern void _ZN8S6041C22C1Ev();
extern void _ZN8S6041C22D1Ev();
Name_Map name_map_S6041C22[] = {
  NSPAIR(_ZN8S6041C22C1Ev),
  NSPAIR(_ZN8S6041C22D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S6041C5;
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C10;
extern VTBL_ENTRY _ZTI8S6041C10[];
extern  VTBL_ENTRY _ZTV8S6041C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C10[];
extern Class_Descriptor cd_S6041C9;
extern VTBL_ENTRY _ZTI7S6041C9[];
extern  VTBL_ENTRY _ZTV7S6041C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C9[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C8;
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
static Base_Class bases_S6041C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6041C3,    ABISELECT(10928,6000), //bcp->offset
    11, //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_S6041C5,    ABISELECT(11872,6520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C10,    ABISELECT(11872,6520), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6041C9,    ABISELECT(11776,6464), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6041C3,    ABISELECT(11296,6196), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C8,    ABISELECT(11296,6196), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6041C22[];
extern void _ZN8S6041C223v13Ev();
extern void _ZN8S6041C223v14Ev();
extern void _ZN8S6041C22D1Ev();
extern void _ZN8S6041C22D0Ev();
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C22D1Ev,_ZTv0_n32_N8S6041C22D1Ev)();
extern void ABISELECT(_ZThn11296_N8S6041C22D1Ev,_ZThn6196_N8S6041C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C22D0Ev,_ZTv0_n32_N8S6041C22D0Ev)();
extern void ABISELECT(_ZThn11296_N8S6041C22D0Ev,_ZThn6196_N8S6041C22D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY vtc_S6041C22[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C22[0]),
  (VTBL_ENTRY)&_ZN8S6041C223v13Ev,
  (VTBL_ENTRY)&_ZN8S6041C223v14Ev,
  (VTBL_ENTRY)&_ZN8S6041C22D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C22D0Ev,
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI8S6041C22[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI8S6041C22[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C22D1Ev,_ZTv0_n32_N8S6041C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C22D0Ev,_ZTv0_n32_N8S6041C22D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI8S6041C22[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI8S6041C22[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern VTBL_ENTRY _ZTV8S6041C22[];
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C22[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C8__8S6041C22[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C8__8S6041C22[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C8__8S6041C22[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C22[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C9__8S6041C22[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C9__8S6041C22[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C22[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C10__8S6041C22[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTT_ENTRY vtt_S6041C22[] = {
  {&(_ZTV8S6041C22[7]),  7,41},
  {&(_ZTV8S6041C22[14]),  14,41},
  {&(_ZTV8S6041C22[24]),  24,41},
  {&(_ZTV8S6041C22[33]),  33,41},
  {&(_ZTV8S6041C22[39]),  39,41},
  {&(_tg__ZTV7S6041C8__8S6041C22[6]),  6,10},
  {&(_tg__ZTV7S6041C9__7S6041C8__8S6041C22[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C8__8S6041C22[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C8__8S6041C22[3]),  3,4},
  {&(_tg__ZTV7S6041C9__8S6041C22[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C9__8S6041C22[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C9__8S6041C22[3]),  3,4},
  {&(_tg__ZTV8S6041C10__8S6041C22[4]),  4,6},
  {&(_tg__ZTV7S6041C3__8S6041C10__8S6041C22[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6041C22[];
extern  VTBL_ENTRY _ZTV8S6041C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C22[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C22D0Ev,_ZTv0_n32_N8S6041C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N8S6041C22D0Ev,_ZThn6196_N8S6041C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C22D1Ev,_ZTv0_n32_N8S6041C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N8S6041C22D1Ev,_ZThn6196_N8S6041C22D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6041C22 = {  "S6041C22", // class name
  bases_S6041C22, 8,
  &(vtc_S6041C22[0]), // expected_vtbl_contents
  &(vtt_S6041C22[0]), // expected_vtt_contents
  ABISELECT(12352,6784), // object size
  NSPAIRA(_ZTI8S6041C22),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6041C22),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6041C22),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6041C19  : virtual S6041C5 , virtual S281C37_nt , S6041C10 , S6041C3 {
  __tsi64 s6041c19f0:25;
  void *s6041c19f1;
  int s6041c19f2[3];
  ::S281C37_nt s6041c19f3;
  virtual  ~S6041C19(); // _ZN8S6041C19D2Ev
  virtual void  v10(); // _ZN8S6041C193v10Ev
  S6041C19(); // tgen
};
//SIG(-1 S6041C19) C1{ VBC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC3 BC4{ BC2 VBC5{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC3 FC3[9] Fp FC2 FC2} VBC3 v4 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} BC5 vd v1 FL:25 Fp Fi[3] FC3}


 S6041C19 ::~S6041C19(){ note_dtor("S6041C19", this);}
void  S6041C19 ::v10(){vfunc_called(this, "_ZN8S6041C193v10Ev");}
S6041C19 ::S6041C19(){ note_ctor("S6041C19", this);} // tgen

static void Test_S6041C19()
{
  extern Class_Descriptor cd_S6041C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(83,177)];
    init_test(&cd_S6041C19, buf);
    S6041C19 *dp, &lv = *(dp=new (buf) S6041C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1312,704), "sizeof(S6041C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C19)");
    /*is_ambiguous_... S6041C19::S6041C5 */ AMB_check_base_class_offset(lv, (S6041C5*), ABISELECT(880,480), "S6041C19");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(920,500), "S6041C19");
    check_base_class_offset(lv, (S281C37_nt*)(S6041C10*), ABISELECT(920,500), "S6041C19");
    check_base_class_offset(lv, (S6041C5*)(S6041C10*), 0, "S6041C19");
    check_base_class_offset(lv, (S6041C3*)(S6041C10*), ABISELECT(944,508), "S6041C19");
    check_base_class_offset(lv, (S6041C10*), 0, "S6041C19");
    /*is_ambiguous_... S6041C19::S6041C3 */ AMB_check_base_class_offset(lv, (S6041C3*), ABISELECT(464,256), "S6041C19");
    set_bf_and_test(lv, s6041c19f0, ABISELECT(832,452), 0, 25, 1, "S6041C19");
    set_bf_and_test(lv, s6041c19f0, ABISELECT(832,452), 0, 25, hide_sll(1LL<<24), "S6041C19");
    check_field_offset(lv, s6041c19f1, ABISELECT(840,456), "S6041C19.s6041c19f1");
    check_field_offset(lv, s6041c19f2, ABISELECT(848,460), "S6041C19.s6041c19f2");
    check_field_offset(lv, s6041c19f3, ABISELECT(864,472), "S6041C19.s6041c19f3");
    test_class_info(&lv, &cd_S6041C19);
    dp->~S6041C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C19(Test_S6041C19, "S6041C19", ABISELECT(1312,704));

#else // __cplusplus

extern void _ZN8S6041C19C1Ev();
extern void _ZN8S6041C19D2Ev();
Name_Map name_map_S6041C19[] = {
  NSPAIR(_ZN8S6041C19C1Ev),
  NSPAIR(_ZN8S6041C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6041C5;
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C5;
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S6041C10;
extern VTBL_ENTRY _ZTI8S6041C10[];
extern  VTBL_ENTRY _ZTV8S6041C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C10[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
static Base_Class bases_S6041C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6041C5,    ABISELECT(880,480), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(920,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6041C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C3,    ABISELECT(944,508), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S6041C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6041C3,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6041C19[];
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
extern void _ZN8S6041C19D1Ev();
extern void _ZN8S6041C19D0Ev();
extern void _ZN8S6041C193v10Ev();
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C52v3Ev();
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY vtc_S6041C19[] = {
  ABISELECT(880,480),
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C19[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
  (VTBL_ENTRY)&_ZN8S6041C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C19D0Ev,
  (VTBL_ENTRY)&_ZN8S6041C193v10Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S6041C19[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  0,
  ABISELECT(-880,-480),
  (VTBL_ENTRY)&(_ZTI8S6041C19[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI8S6041C19[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S6041C19[];
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C19[] = {
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C10__8S6041C19[] = {
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTT_ENTRY vtt_S6041C19[] = {
  {&(_ZTV8S6041C19[5]),  5,21},
  {&(_tg__ZTV8S6041C10__8S6041C19[4]),  4,6},
  {&(_tg__ZTV7S6041C3__8S6041C10__8S6041C19[3]),  3,4},
  {&(_ZTV8S6041C19[16]),  16,21},
  {&(_ZTV8S6041C19[20]),  20,21},
};
extern VTBL_ENTRY _ZTI8S6041C19[];
extern  VTBL_ENTRY _ZTV8S6041C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C19[];
Class_Descriptor cd_S6041C19 = {  "S6041C19", // class name
  bases_S6041C19, 6,
  &(vtc_S6041C19[0]), // expected_vtbl_contents
  &(vtt_S6041C19[0]), // expected_vtt_contents
  ABISELECT(1312,704), // object size
  NSPAIRA(_ZTI8S6041C19),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6041C19),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6041C19),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6041C23  {
  int s6041c23f0;
  void *s6041c23f1[10];
  char s6041c23f2;
  ::S6041C22 s6041c23f3;
  short s6041c23f4:12;
  ::S6041C19 s6041c23f5;
  void  mf6041c23(); // _ZN8S6041C239mf6041c23Ev
};
//SIG(-1 S6041C23) C1{ m Fi Fp[10] Fc FC2{ VBC3{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v4 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v5 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC7[7] Fi Fs Fi FC9 Fl[9]} Fs:12 FC10{ VBC6 VBC5 BC9 BC3 vd v7 FL:25 Fp Fi[3] FC5}}


void  S6041C23 ::mf6041c23(){}

static void Test_S6041C23()
{
  {
    init_simple_test("S6041C23");
    static S6041C23 lv;
    check2(sizeof(lv), ABISELECT(13776,7540), "sizeof(S6041C23)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C23)");
    check_field_offset(lv, s6041c23f0, 0, "S6041C23.s6041c23f0");
    check_field_offset(lv, s6041c23f1, ABISELECT(8,4), "S6041C23.s6041c23f1");
    check_field_offset(lv, s6041c23f2, ABISELECT(88,44), "S6041C23.s6041c23f2");
    check_field_offset(lv, s6041c23f3, ABISELECT(96,48), "S6041C23.s6041c23f3");
    set_bf_and_test(lv, s6041c23f4, ABISELECT(12448,6832), 0, 12, 1, "S6041C23");
    set_bf_and_test(lv, s6041c23f4, ABISELECT(12448,6832), 0, 12, hide_sll(1LL<<11), "S6041C23");
    check_field_offset(lv, s6041c23f5, ABISELECT(12464,6836), "S6041C23.s6041c23f5");
  }
}
static Arrange_To_Call_Me vS6041C23(Test_S6041C23, "S6041C23", ABISELECT(13776,7540));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S6041C23[];
VTBL_ENTRY *P__ZTI8S6041C23 = _ZTI8S6041C23; 
Class_Descriptor cd_S6041C23 = {  "S6041C23", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(13776,7540), // object size
  NSPAIRA(_ZTI8S6041C23),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  S6041C24  : virtual S6041C3 , S6041C11 , S6041C13 {
  ~S6041C24(); // tgen
  S6041C24(); // tgen
};
//SIG(-1 S6041C24) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} BC6{ BC7{ VBC8{ VBC9{ BC5 VBC2 VBC4 v3 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} VBC10{ VBC8 BC2 BC4 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC9 Fp Fs Fl Fi FL FC9[4] Fi} BC11{ VBC2 Fp Fs Fl Fi:6 Fp[2]} vd v5 FL FD FC3 Fi[9] Fs Fc:5} BC11}


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

static void Test_S6041C24()
{
  extern Class_Descriptor cd_S6041C24;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(373,812)];
    init_test(&cd_S6041C24, buf);
    S6041C24 *dp, &lv = *(dp=new (buf) S6041C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5952,3244), "sizeof(S6041C24)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C24)");
    /*is_ambiguous_... S6041C24::S6041C3 */ AMB_check_base_class_offset(lv, (S6041C3*), ABISELECT(4528,2460), "S6041C24");
    check_base_class_offset(lv, (S6041C3*)(S6041C10*), ABISELECT(4528,2460), "S6041C24");
    check_base_class_offset(lv, (S6041C3*)(S6041C13*)(S6041C11*), ABISELECT(4528,2460), "S6041C24");
    /*is_ambiguous_... S6041C24::S6041C13 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C13*), ABISELECT(4528,2460), "S6041C24");
    check_base_class_offset(lv, (S6041C5*)(S6041C10*), ABISELECT(4992,2712), "S6041C24");
    check_base_class_offset(lv, (S281C37_nt*)(S6041C10*), ABISELECT(5448,2968), "S6041C24");
    check_base_class_offset(lv, (S6041C10*)(S6041C9*), ABISELECT(4992,2712), "S6041C24");
    check_base_class_offset(lv, (S6041C9*)(S6041C12*)(S6041C11*), ABISELECT(4896,2656), "S6041C24");
    check_base_class_offset(lv, (S6041C9*)(S6041C8*), ABISELECT(4896,2656), "S6041C24");
    /*is_ambiguous_... S6041C8::S6041C3 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C8*), ABISELECT(5472,2976), "S6041C24");
    /*is_ambiguous_... S6041C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C8*), ABISELECT(5840,3172), "S6041C24");
    check_base_class_offset(lv, (S6041C8*)(S6041C12*)(S6041C11*), ABISELECT(5472,2976), "S6041C24");
    check_base_class_offset(lv, (S6041C12*)(S6041C11*), 0, "S6041C24");
    check_base_class_offset(lv, (S6041C13*)(S6041C11*), ABISELECT(4328,2340), "S6041C24");
    check_base_class_offset(lv, (S6041C11*), 0, "S6041C24");
    /*is_ambiguous_... S6041C24::S6041C13 */ AMB_check_base_class_offset(lv, (S6041C13*), ABISELECT(4464,2432), "S6041C24");
    test_class_info(&lv, &cd_S6041C24);
    dp->~S6041C24();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C24(Test_S6041C24, "S6041C24", ABISELECT(5952,3244));

#else // __cplusplus

extern void _ZN8S6041C24C1Ev();
extern void _ZN8S6041C24D1Ev();
Name_Map name_map_S6041C24[] = {
  NSPAIR(_ZN8S6041C24C1Ev),
  NSPAIR(_ZN8S6041C24D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S6041C5;
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C10;
extern VTBL_ENTRY _ZTI8S6041C10[];
extern  VTBL_ENTRY _ZTV8S6041C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C10[];
extern Class_Descriptor cd_S6041C9;
extern VTBL_ENTRY _ZTI7S6041C9[];
extern  VTBL_ENTRY _ZTV7S6041C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C9[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C8;
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
extern Class_Descriptor cd_S6041C12;
extern VTBL_ENTRY _ZTI8S6041C12[];
extern  VTBL_ENTRY _ZTV8S6041C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C12[];
extern Class_Descriptor cd_S6041C13;
extern VTBL_ENTRY _ZTI8S6041C13[];
extern  VTBL_ENTRY _ZTV8S6041C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C13[];
extern Class_Descriptor cd_S6041C11;
extern VTBL_ENTRY _ZTI8S6041C11[];
extern  VTBL_ENTRY _ZTV8S6041C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C11[];
extern Class_Descriptor cd_S6041C13;
extern VTBL_ENTRY _ZTI8S6041C13[];
extern  VTBL_ENTRY _ZTV8S6041C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C13[];
static Base_Class bases_S6041C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6041C3,    ABISELECT(4528,2460), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6041C5,    ABISELECT(4992,2712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(5448,2968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C10,    ABISELECT(4992,2712), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6041C9,    ABISELECT(4896,2656), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6041C3,    ABISELECT(5472,2976), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5840,3172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C8,    ABISELECT(5472,2976), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6041C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6041C13,    ABISELECT(4328,2340), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6041C11,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6041C13,    ABISELECT(4464,2432), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6041C24[];
extern void _ZN8S6041C24D1Ev();
extern void _ZN8S6041C24D0Ev();
extern void _ZN8S6041C112v6Ev();
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C24D1Ev,_ZTv0_n32_N8S6041C24D1Ev)();
extern void ABISELECT(_ZThn5472_N8S6041C24D1Ev,_ZThn2976_N8S6041C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C24D0Ev,_ZTv0_n32_N8S6041C24D0Ev)();
extern void ABISELECT(_ZThn5472_N8S6041C24D0Ev,_ZThn2976_N8S6041C24D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY vtc_S6041C24[] = {
  ABISELECT(5472,2976),
  ABISELECT(5448,2968),
  ABISELECT(4528,2460),
  ABISELECT(4992,2712),
  ABISELECT(4896,2656),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
  (VTBL_ENTRY)&_ZN8S6041C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C24D0Ev,
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
  ABISELECT(200,120),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
  ABISELECT(64,28),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
  0,
  ABISELECT(-4528,-2460),
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(-4896,-2656),
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-4992,-2712),
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
  0,
  ABISELECT(-5472,-2976),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-944,-516),
  ABISELECT(-480,-264),
  ABISELECT(-576,-320),
  ABISELECT(-5472,-2976),
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C24D1Ev,_ZTv0_n32_N8S6041C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C24D0Ev,_ZTv0_n32_N8S6041C24D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
extern VTBL_ENTRY _ZTV8S6041C24[];
extern void _ZN8S6041C11D1Ev();
extern void _ZN8S6041C11D0Ev();
extern void _ZN8S6041C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C11__8S6041C24[] = {
  ABISELECT(5472,2976),
  ABISELECT(5448,2968),
  ABISELECT(4528,2460),
  ABISELECT(4992,2712),
  ABISELECT(4896,2656),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN8S6041C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
};
extern void _ZN8S6041C12D1Ev();
extern void _ZN8S6041C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C128S6041C11__8S6041C24[] = {
  ABISELECT(5472,2976),
  ABISELECT(5448,2968),
  ABISELECT(4528,2460),
  ABISELECT(4992,2712),
  ABISELECT(4896,2656),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN8S6041C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C128S6041C11__8S6041C24[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(-4896,-2656),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C128S6041C11__8S6041C24[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-4992,-2712),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C128S6041C11__8S6041C24[] = {
  0,
  ABISELECT(-4528,-2460),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev)();
extern void ABISELECT(_ZThn5472_N8S6041C12D1Ev,_ZThn2976_N8S6041C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev)();
extern void ABISELECT(_ZThn5472_N8S6041C12D0Ev,_ZThn2976_N8S6041C12D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C128S6041C11__8S6041C24[] = {
  0,
  ABISELECT(-5472,-2976),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-944,-516),
  ABISELECT(-480,-264),
  ABISELECT(-576,-320),
  ABISELECT(-5472,-2976),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C138S6041C11__8S6041C24[] = {
  ABISELECT(200,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C138S6041C11__8S6041C24[] = {
  0,
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C11__8S6041C24[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(-4896,-2656),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C11__8S6041C24[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-4992,-2712),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C11__8S6041C24[] = {
  0,
  ABISELECT(-4528,-2460),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev)();
extern void ABISELECT(_ZThn5472_N8S6041C11D1Ev,_ZThn2976_N8S6041C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev)();
extern void ABISELECT(_ZThn5472_N8S6041C11D0Ev,_ZThn2976_N8S6041C11D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C11__8S6041C24[] = {
  0,
  ABISELECT(-5472,-2976),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-944,-516),
  ABISELECT(-480,-264),
  ABISELECT(-576,-320),
  ABISELECT(-5472,-2976),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C13__8S6041C11__8S6041C24[] = {
  ABISELECT(200,120),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6041C13__A1__8S6041C24[] = {
  ABISELECT(64,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C13__A1__8S6041C24[] = {
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C24[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C9__8S6041C24[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C9__8S6041C24[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C24[] = {
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C10__8S6041C24[] = {
  0,
  ABISELECT(464,252),
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C24[] = {
  ABISELECT(-24,-8),
  ABISELECT(-944,-516),
  ABISELECT(-480,-264),
  ABISELECT(-576,-320),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C8__8S6041C24[] = {
  ABISELECT(552,312),
  ABISELECT(-368,-196),
  ABISELECT(96,56),
  ABISELECT(576,320),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C8__8S6041C24[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-464,-252),
  ABISELECT(480,264),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C8__8S6041C24[] = {
  0,
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTT_ENTRY vtt_S6041C24[] = {
  {&(_ZTV8S6041C24[7]),  7,46},
  {&(_tg__ZTV8S6041C11__8S6041C24[7]),  7,10},
  {&(_tg__ZTV8S6041C128S6041C11__8S6041C24[7]),  7,9},
  {&(_tg__ZTV7S6041C9__8S6041C128S6041C11__8S6041C24[5]),  5,5},
  {&(_tg__ZTV8S6041C10__8S6041C128S6041C11__8S6041C24[6]),  6,8},
  {&(_tg__ZTV7S6041C3__8S6041C128S6041C11__8S6041C24[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C128S6041C11__8S6041C24[9]),  9,13},
  {&(_tg__ZTV8S6041C138S6041C11__8S6041C24[3]),  3,3},
  {&(_tg__ZTV7S6041C3__8S6041C138S6041C11__8S6041C24[3]),  3,4},
  {&(_tg__ZTV7S6041C9__8S6041C11__8S6041C24[5]),  5,5},
  {&(_tg__ZTV8S6041C10__8S6041C11__8S6041C24[6]),  6,8},
  {&(_tg__ZTV7S6041C3__8S6041C11__8S6041C24[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C11__8S6041C24[9]),  9,13},
  {&(_tg__ZTV8S6041C13__8S6041C11__8S6041C24[3]),  3,3},
  {&(_tg__ZTV8S6041C13__A1__8S6041C24[3]),  3,3},
  {&(_tg__ZTV7S6041C3__8S6041C13__A1__8S6041C24[3]),  3,4},
  {&(_ZTV8S6041C24[19]),  19,46},
  {&(_ZTV8S6041C24[25]),  25,46},
  {&(_ZTV8S6041C24[31]),  31,46},
  {&(_ZTV8S6041C24[42]),  42,46},
  {&(_ZTV8S6041C24[13]),  13,46},
  {&(_ZTV8S6041C24[16]),  16,46},
  {&(_tg__ZTV7S6041C9__8S6041C24[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C9__8S6041C24[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C9__8S6041C24[3]),  3,4},
  {&(_tg__ZTV8S6041C10__8S6041C24[4]),  4,6},
  {&(_tg__ZTV7S6041C3__8S6041C10__8S6041C24[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C24[6]),  6,10},
  {&(_tg__ZTV7S6041C9__7S6041C8__8S6041C24[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C8__8S6041C24[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C8__8S6041C24[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6041C24[];
extern  VTBL_ENTRY _ZTV8S6041C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C24[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N8S6041C11D0Ev,_ZThn2976_N8S6041C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N8S6041C11D1Ev,_ZThn2976_N8S6041C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N8S6041C12D0Ev,_ZThn2976_N8S6041C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N8S6041C12D1Ev,_ZThn2976_N8S6041C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C24D0Ev,_ZTv0_n32_N8S6041C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N8S6041C24D0Ev,_ZThn2976_N8S6041C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C24D1Ev,_ZTv0_n32_N8S6041C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5472_N8S6041C24D1Ev,_ZThn2976_N8S6041C24D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6041C24 = {  "S6041C24", // class name
  bases_S6041C24, 12,
  &(vtc_S6041C24[0]), // expected_vtbl_contents
  &(vtt_S6041C24[0]), // expected_vtt_contents
  ABISELECT(5952,3244), // object size
  NSPAIRA(_ZTI8S6041C24),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6041C24),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6041C24),31, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6041C1  : S281C37_nt , virtual S6041C3 , S6041C6 , virtual S6041C23 , S6041C24 {
  unsigned char s6041c1f0:1;
  ::S6041C24 s6041c1f1[4];
  int s6041c1f2;
  char s6041c1f3[8];
  int s6041c1f4[4];
  char s6041c1f5[2];
  virtual  ~S6041C1(); // _ZN7S6041C1D2Ev
  virtual void  v1(); // _ZN7S6041C12v1Ev
  S6041C1(); // tgen
};
//SIG(1 S6041C1) C1{ BC2{ m Fp[2]} VBC3{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC2 FC2[9] Fp FC5{ v3 Fi Fp FC2} FC5} BC6{ VBC7{ BC8{ VBC9{ VBC10{ BC5 VBC3 VBC2 v4 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC2} BC3 BC2 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC11{ BC12{ VBC9 VBC8 vd Fl Fp FC10 Fp Fs Fl Fi FL FC10[4] Fi} BC13{ VBC3 Fp Fs Fl Fi:6 Fp[2]} vd v6 FL FD FC4 Fi[9] Fs Fc:5} VBC14{ m Fl FC2[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} BC8 VBC15{ v7 Fl Fc Fs[2]} BC2 vd v8 FC16{ BC17{ VBC18{ VBC19{ BC20{ v9 Fi Fp FC2} VBC21{ v10 Fi[6] Fc:2 FD Fp[2] Fi FD FC4 FC2 FC2[9] Fp FC20 FC20} VBC2 v11 Fp FL Fc[2] FC21 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC2} BC21 BC2 vd v12 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC4 Fp Fi Fc[8] Fs Fi} FD Fi FC22{ VBC23{ BC24{ VBC25{ v14 Fi Fp FC2} VBC2 BC26{ BC25 VBC27{ v15 Fi[6] Fc:2 FD Fp[2] Fi FD FC4 FC2 FC2[9] Fp FC25 FC25} VBC2 v16 Fp FL Fc[2] FC27 Fs[7] Fi Fc Fi:20} BC27 vd v17 FL:25 Fp Fi[3] FC2} vd Fp Fi Fp Fi[7] FC28{ VBC26 Fi Fc Fp[6] Fi[2] Fp FC2}} VBC24 vd v13 Fi[2] Fs[10] Fi FC4 Fi:32 Fi FC4 Fp Fi:2 Fi FD} Fc Fl FC4[8] Fi:18 Fi FC12 FC29{ BC24 VBC26 VBC30{ VBC31{ VBC27 VBC32{ VBC28 BC27 BC2 vd v20 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v21 v22 FC32[7] Fi Fs Fi FC26 Fl[9]} vd Fc Fi[3]} vd v18 v19 FD[2] FC4 Fi:16 Fi:3} FC4} VBC33{ m Fi Fp[10] Fc FC34{ VBC3 VBC8 v23 v24 FC8[7] Fi Fs Fi FC10 Fl[9]} Fs:12 FC35{ VBC5 VBC2 BC10 BC3 vd v25 FL:25 Fp Fi[3] FC2}} BC36{ VBC3 BC11 BC13} vd v1 Fc:1 FC36[4] Fi Fc[8] Fi[4] Fc[2]}


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

static void Test_S6041C1()
{
  extern Class_Descriptor cd_S6041C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4576,10010)];
    init_test(&cd_S6041C1, buf);
    S6041C1 *dp, &lv = *(dp=new (buf) S6041C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(73200,40036), "sizeof(S6041C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6041C1)");
    /*is_ambiguous_... S6041C1::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(24424,13408), "S6041C1");
    /*is_ambiguous_... S6041C1::S6041C3 */ AMB_check_base_class_offset(lv, (S6041C3*), ABISELECT(52816,28888), "S6041C1");
    check_base_class_offset(lv, (S6041C3*)(S6041C10*), ABISELECT(52816,28888), "S6041C1");
    check_base_class_offset(lv, (S6041C3*)(S6041C13*)(S6041C11*)(S6041C7*), ABISELECT(52816,28888), "S6041C1");
    /*is_ambiguous_... S6041C24::S6041C3 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C24*), ABISELECT(52816,28888), "S6041C1");
    check_base_class_offset(lv, (S6041C3*)(S6041C13*)(S6041C11*)(S6041C24*), ABISELECT(52816,28888), "S6041C1");
    /*is_ambiguous_... S6041C24::S6041C13 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C13*)(S6041C24*), ABISELECT(52816,28888), "S6041C1");
    check_base_class_offset(lv, (S6041C5*)(S6041C10*), ABISELECT(58272,31868), "S6041C1");
    check_base_class_offset(lv, (S281C37_nt*)(S6041C10*), ABISELECT(58728,32124), "S6041C1");
    check_base_class_offset(lv, (S6041C10*)(S6041C9*), ABISELECT(58272,31868), "S6041C1");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C9*)(S6041C8*)(S6041C7*), ABISELECT(58168,31812), "S6041C1");
    check_base_class_offset(lv, (S6041C9*)(S6041C12*)(S6041C11*)(S6041C7*), ABISELECT(58168,31812), "S6041C1");
    /*is_ambiguous_... S6041C1::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C9*)(S6041C8*), ABISELECT(58168,31812), "S6041C1");
    /*is_ambiguous_... S6041C6::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C9*)(S6041C8*)(S6041C6*), ABISELECT(58168,31812), "S6041C1");
    check_base_class_offset(lv, (S6041C9*)(S6041C12*)(S6041C11*)(S6041C24*), ABISELECT(58168,31812), "S6041C1");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C8*)(S6041C7*), ABISELECT(53184,29084), "S6041C1");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C8*)(S6041C7*), ABISELECT(53552,29280), "S6041C1");
    /*is_ambiguous_... S6041C7::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C8*)(S6041C7*), ABISELECT(53184,29084), "S6041C1");
    /*is_ambiguous_... S6041C1::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C8*), ABISELECT(58752,32132), "S6041C1");
    /*is_ambiguous_... S6041C1::S6041C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C8*), ABISELECT(59120,32328), "S6041C1");
    check_base_class_offset(lv, (S6041C8*)(S6041C12*)(S6041C11*)(S6041C7*), ABISELECT(58752,32132), "S6041C1");
    check_base_class_offset(lv, (S6041C8*)(S6041C12*)(S6041C11*)(S6041C24*), ABISELECT(58752,32132), "S6041C1");
    check_base_class_offset(lv, (S6041C12*)(S6041C11*)(S6041C7*), ABISELECT(53664,29352), "S6041C1");
    check_base_class_offset(lv, (S6041C13*)(S6041C11*)(S6041C7*), ABISELECT(57992,31692), "S6041C1");
    check_base_class_offset(lv, (S6041C11*)(S6041C7*), ABISELECT(53664,29352), "S6041C1");
    check_base_class_offset(lv, (S20177C15*)(S6041C7*), ABISELECT(59232,32400), "S6041C1");
    check_base_class_offset(lv, (S6041C7*)(S6041C6*), ABISELECT(53184,29084), "S6041C1");
    /*is_ambiguous_... S6041C6::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C3*)(S6041C8*)(S6041C6*), 0, "S6041C1");
    /*is_ambiguous_... S6041C6::S6041C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C8*)(S6041C6*), ABISELECT(368,196), "S6041C1");
    /*is_ambiguous_... S6041C6::S6041C8 */ AMB_check_base_class_offset(lv, (S6041C8*)(S6041C6*), 0, "S6041C1");
    check_base_class_offset(lv, (S6041C15*)(S6041C6*), ABISELECT(59392,32480), "S6041C1");
    /*is_ambiguous_... S6041C6::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6041C6*), ABISELECT(480,268), "S6041C1");
    check_base_class_offset(lv, (S6041C6*), 0, "S6041C1");
    check_base_class_offset(lv, (S6041C23*), ABISELECT(59424,32496), "S6041C1");
    check_base_class_offset(lv, (S6041C12*)(S6041C11*)(S6041C24*), ABISELECT(24448,13416), "S6041C1");
    check_base_class_offset(lv, (S6041C13*)(S6041C11*)(S6041C24*), ABISELECT(28776,15756), "S6041C1");
    check_base_class_offset(lv, (S6041C11*)(S6041C24*), ABISELECT(24448,13416), "S6041C1");
    /*is_ambiguous_... S6041C24::S6041C13 */ AMB_check_base_class_offset(lv, (S6041C13*)(S6041C24*), ABISELECT(28912,15848), "S6041C1");
    check_base_class_offset(lv, (S6041C24*), ABISELECT(24448,13416), "S6041C1");
    set_bf_and_test(lv, s6041c1f0, ABISELECT(28968,15876), 0, 1, 1, "S6041C1");
    check_field_offset(lv, s6041c1f1, ABISELECT(28976,15880), "S6041C1.s6041c1f1");
    check_field_offset(lv, s6041c1f2, ABISELECT(52784,28856), "S6041C1.s6041c1f2");
    check_field_offset(lv, s6041c1f3, ABISELECT(52788,28860), "S6041C1.s6041c1f3");
    check_field_offset(lv, s6041c1f4, ABISELECT(52796,28868), "S6041C1.s6041c1f4");
    check_field_offset(lv, s6041c1f5, ABISELECT(52812,28884), "S6041C1.s6041c1f5");
    test_class_info(&lv, &cd_S6041C1);
    dp->~S6041C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6041C1(Test_S6041C1, "S6041C1", ABISELECT(73200,40036));

#else // __cplusplus

extern void _ZN7S6041C1C1Ev();
extern void _ZN7S6041C1D2Ev();
Name_Map name_map_S6041C1[] = {
  NSPAIR(_ZN7S6041C1C1Ev),
  NSPAIR(_ZN7S6041C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S6041C5;
extern VTBL_ENTRY _ZTI7S6041C5[];
extern  VTBL_ENTRY _ZTV7S6041C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C10;
extern VTBL_ENTRY _ZTI8S6041C10[];
extern  VTBL_ENTRY _ZTV8S6041C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C10[];
extern Class_Descriptor cd_S6041C9;
extern VTBL_ENTRY _ZTI7S6041C9[];
extern  VTBL_ENTRY _ZTV7S6041C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C9[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C8;
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C8;
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
extern Class_Descriptor cd_S6041C12;
extern VTBL_ENTRY _ZTI8S6041C12[];
extern  VTBL_ENTRY _ZTV8S6041C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C12[];
extern Class_Descriptor cd_S6041C13;
extern VTBL_ENTRY _ZTI8S6041C13[];
extern  VTBL_ENTRY _ZTV8S6041C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C13[];
extern Class_Descriptor cd_S6041C11;
extern VTBL_ENTRY _ZTI8S6041C11[];
extern  VTBL_ENTRY _ZTV8S6041C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C11[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
extern Class_Descriptor cd_S6041C7;
extern VTBL_ENTRY _ZTI7S6041C7[];
extern  VTBL_ENTRY _ZTV7S6041C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C7[];
extern Class_Descriptor cd_S6041C3;
extern VTBL_ENTRY _ZTI7S6041C3[];
extern  VTBL_ENTRY _ZTV7S6041C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C8;
extern VTBL_ENTRY _ZTI7S6041C8[];
extern  VTBL_ENTRY _ZTV7S6041C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C8[];
extern Class_Descriptor cd_S6041C15;
extern VTBL_ENTRY _ZTI8S6041C15[];
extern  VTBL_ENTRY _ZTV8S6041C15[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6041C6;
extern VTBL_ENTRY _ZTI7S6041C6[];
extern  VTBL_ENTRY _ZTV7S6041C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C6[];
extern Class_Descriptor cd_S6041C23;
extern VTBL_ENTRY _ZTI8S6041C23[];
extern Class_Descriptor cd_S6041C12;
extern VTBL_ENTRY _ZTI8S6041C12[];
extern  VTBL_ENTRY _ZTV8S6041C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C12[];
extern Class_Descriptor cd_S6041C13;
extern VTBL_ENTRY _ZTI8S6041C13[];
extern  VTBL_ENTRY _ZTV8S6041C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C13[];
extern Class_Descriptor cd_S6041C11;
extern VTBL_ENTRY _ZTI8S6041C11[];
extern  VTBL_ENTRY _ZTV8S6041C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C11[];
extern Class_Descriptor cd_S6041C13;
extern VTBL_ENTRY _ZTI8S6041C13[];
extern  VTBL_ENTRY _ZTV8S6041C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C13[];
extern Class_Descriptor cd_S6041C24;
extern VTBL_ENTRY _ZTI8S6041C24[];
extern  VTBL_ENTRY _ZTV8S6041C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6041C24[];
static Base_Class bases_S6041C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C37_nt,    ABISELECT(24424,13408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6041C3,    ABISELECT(52816,28888), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6041C5,    ABISELECT(58272,31868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(58728,32124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C10,    ABISELECT(58272,31868), //bcp->offset
    71, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6041C9,    ABISELECT(58168,31812), //bcp->offset
    66, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6041C3,    ABISELECT(53184,29084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(53552,29280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C8,    ABISELECT(53184,29084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6041C3,    ABISELECT(58752,32132), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(59120,32328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C8,    ABISELECT(58752,32132), //bcp->offset
    79, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6041C12,    ABISELECT(53664,29352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6041C13,    ABISELECT(57992,31692), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6041C11,    ABISELECT(53664,29352), //bcp->offset
    53, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20177C15,    ABISELECT(59232,32400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C7,    ABISELECT(53184,29084), //bcp->offset
    37, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S6041C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6041C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6041C15,    ABISELECT(59392,32480), //bcp->offset
    92, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(480,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
    22, //immediately_derived
  0, 0},
  {&cd_S6041C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6041C23,    ABISELECT(59424,32496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6041C12,    ABISELECT(24448,13416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6041C13,    ABISELECT(28776,15756), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6041C11,    ABISELECT(24448,13416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6041C13,    ABISELECT(28912,15848), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6041C24,    ABISELECT(24448,13416), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6041C1[];
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C1D1Ev();
extern void _ZN7S6041C1D0Ev();
extern void _ZN7S6041C82v5Ev();
extern void _ZN7S6041C62v8Ev();
extern void _ZN7S6041C12v1Ev();
extern void ABISELECT(_ZThn24448_N7S6041C1D1Ev,_ZThn13416_N7S6041C1D1Ev)();
extern void ABISELECT(_ZThn24448_N7S6041C1D0Ev,_ZThn13416_N7S6041C1D0Ev)();
extern void _ZN8S6041C112v6Ev();
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n80_N7S6041C1D1Ev,_ZTv0_n40_N7S6041C1D1Ev)();
extern void ABISELECT(_ZThn53184_N7S6041C1D1Ev,_ZThn29084_N7S6041C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S6041C1D0Ev,_ZTv0_n40_N7S6041C1D0Ev)();
extern void ABISELECT(_ZThn53184_N7S6041C1D0Ev,_ZThn29084_N7S6041C1D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
extern void ABISELECT(_ZTvn480_n80_N7S6041C1D1Ev,_ZTvn268_n40_N7S6041C1D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N7S6041C1D0Ev,_ZTvn268_n40_N7S6041C1D0Ev)();
extern void _ZN8S6041C112v6Ev();
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6041C1D1Ev,_ZTv0_n32_N7S6041C1D1Ev)();
extern void ABISELECT(_ZThn58752_N7S6041C1D1Ev,_ZThn32132_N7S6041C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6041C1D0Ev,_ZTv0_n32_N7S6041C1D0Ev)();
extern void ABISELECT(_ZThn58752_N7S6041C1D0Ev,_ZThn32132_N7S6041C1D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
extern void _ZN8S6041C152v7Ev();
static  VTBL_ENTRY vtc_S6041C1[] = {
  ABISELECT(59424,32496),
  ABISELECT(59392,32480),
  ABISELECT(59232,32400),
  ABISELECT(58752,32132),
  ABISELECT(53184,29084),
  ABISELECT(58728,32124),
  ABISELECT(52816,28888),
  ABISELECT(58272,31868),
  ABISELECT(58168,31812),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C1[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6041C62v8Ev,
  (VTBL_ENTRY)&_ZN7S6041C12v1Ev,
  ABISELECT(34304,18716),
  ABISELECT(34280,18708),
  ABISELECT(28368,15472),
  ABISELECT(33824,18452),
  ABISELECT(33720,18396),
  ABISELECT(-24448,-13416),
  (VTBL_ENTRY)&(_ZTI7S6041C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24448_N7S6041C1D1Ev,_ZThn13416_N7S6041C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24448_N7S6041C1D0Ev,_ZThn13416_N7S6041C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
  ABISELECT(24040,13132),
  ABISELECT(-28776,-15756),
  (VTBL_ENTRY)&(_ZTI7S6041C1[0]),
  ABISELECT(23904,13040),
  ABISELECT(-28912,-15848),
  (VTBL_ENTRY)&(_ZTI7S6041C1[0]),
  0,
  ABISELECT(-52816,-28888),
  (VTBL_ENTRY)&(_ZTI7S6041C1[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  ABISELECT(480,268),
  0,
  ABISELECT(-53184,-29084),
  0,
  ABISELECT(6048,3316),
  ABISELECT(5568,3048),
  ABISELECT(5544,3040),
  ABISELECT(-368,-196),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  ABISELECT(-53184,-29084),
  (VTBL_ENTRY)&(_ZTI7S6041C1[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6041C1D1Ev,_ZTv0_n40_N7S6041C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6041C1D0Ev,_ZTv0_n40_N7S6041C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
  ABISELECT(5088,2780),
  ABISELECT(5064,2772),
  ABISELECT(-848,-464),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-53664,-29352),
  (VTBL_ENTRY)&(_ZTI7S6041C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N7S6041C1D1Ev,_ZTvn268_n40_N7S6041C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N7S6041C1D0Ev,_ZTvn268_n40_N7S6041C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
  ABISELECT(-5176,-2804),
  ABISELECT(-57992,-31692),
  (VTBL_ENTRY)&(_ZTI7S6041C1[0]),
  ABISELECT(560,312),
  ABISELECT(-5352,-2924),
  ABISELECT(104,56),
  ABISELECT(-58168,-31812),
  (VTBL_ENTRY)&(_ZTI7S6041C1[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  ABISELECT(-58272,-31868),
  (VTBL_ENTRY)&(_ZTI7S6041C1[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
  0,
  ABISELECT(-58752,-32132),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3244),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-58752,-32132),
  (VTBL_ENTRY)&(_ZTI7S6041C1[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6041C1D1Ev,_ZTv0_n32_N7S6041C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6041C1D0Ev,_ZTv0_n32_N7S6041C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
  0,
  ABISELECT(-59392,-32480),
  (VTBL_ENTRY)&(_ZTI7S6041C1[0]),
  (VTBL_ENTRY)&_ZN8S6041C152v7Ev,
};
extern VTBL_ENTRY _ZTV7S6041C1[];
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C6D1Ev();
extern void _ZN7S6041C6D0Ev();
extern void _ZN7S6041C82v5Ev();
extern void _ZN7S6041C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C6__7S6041C1[] = {
  ABISELECT(59392,32480),
  ABISELECT(59232,32400),
  ABISELECT(58752,32132),
  ABISELECT(53184,29084),
  ABISELECT(58728,32124),
  ABISELECT(52816,28888),
  ABISELECT(58272,31868),
  ABISELECT(58168,31812),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
  (VTBL_ENTRY)&_ZN7S6041C62v8Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C87S6041C6__A2__7S6041C1[] = {
  ABISELECT(58728,32124),
  ABISELECT(52816,28888),
  ABISELECT(58272,31868),
  ABISELECT(58168,31812),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C87S6041C6__A2__7S6041C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2924),
  ABISELECT(104,56),
  ABISELECT(-58168,-31812),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C87S6041C6__A2__7S6041C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  ABISELECT(-58272,-31868),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C87S6041C6__A2__7S6041C1[] = {
  0,
  ABISELECT(-52816,-28888),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n80_N7S6041C6D1Ev,_ZTv0_n40_N7S6041C6D1Ev)();
extern void ABISELECT(_ZThn53184_N7S6041C6D1Ev,_ZThn29084_N7S6041C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S6041C6D0Ev,_ZTv0_n40_N7S6041C6D0Ev)();
extern void ABISELECT(_ZThn53184_N7S6041C6D0Ev,_ZThn29084_N7S6041C6D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C7__7S6041C6__7S6041C1[] = {
  ABISELECT(480,268),
  0,
  ABISELECT(-53184,-29084),
  0,
  ABISELECT(6048,3316),
  ABISELECT(5568,3048),
  ABISELECT(5544,3040),
  ABISELECT(-368,-196),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  ABISELECT(-53184,-29084),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6041C6D1Ev,_ZTv0_n40_N7S6041C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6041C6D0Ev,_ZTv0_n40_N7S6041C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C6__7S6041C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2924),
  ABISELECT(104,56),
  ABISELECT(-58168,-31812),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C6__7S6041C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  ABISELECT(-58272,-31868),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C6__7S6041C1[] = {
  0,
  ABISELECT(-52816,-28888),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void ABISELECT(_ZTvn480_n80_N7S6041C6D1Ev,_ZTvn268_n40_N7S6041C6D1Ev)();
extern void ABISELECT(_ZTvn480_n80_N7S6041C6D0Ev,_ZTvn268_n40_N7S6041C6D0Ev)();
extern void _ZN8S6041C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C117S6041C7__7S6041C6__7S6041C1[] = {
  ABISELECT(5088,2780),
  ABISELECT(5064,2772),
  ABISELECT(-848,-464),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-53664,-29352),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N7S6041C6D1Ev,_ZTvn268_n40_N7S6041C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n80_N7S6041C6D0Ev,_ZTvn268_n40_N7S6041C6D0Ev),
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6041C6D1Ev,_ZTv0_n32_N7S6041C6D1Ev)();
extern void ABISELECT(_ZThn58752_N7S6041C6D1Ev,_ZThn32132_N7S6041C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6041C6D0Ev,_ZTv0_n32_N7S6041C6D0Ev)();
extern void ABISELECT(_ZThn58752_N7S6041C6D0Ev,_ZThn32132_N7S6041C6D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__A1__7S6041C6__7S6041C1[] = {
  0,
  ABISELECT(-58752,-32132),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3244),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-58752,-32132),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6041C6D1Ev,_ZTv0_n32_N7S6041C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6041C6D0Ev,_ZTv0_n32_N7S6041C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C138S6041C117S6041C7__7S6041C6__7S6041C1[] = {
  ABISELECT(-5176,-2804),
  ABISELECT(-57992,-31692),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
};
extern void _ZN8S6041C152v7Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C15__7S6041C6__7S6041C1[] = {
  0,
  ABISELECT(-59392,-32480),
  (VTBL_ENTRY)&(_ZTI7S6041C6[0]),
  (VTBL_ENTRY)&_ZN8S6041C152v7Ev,
};
extern void _ZN8S6041C24D1Ev();
extern void _ZN8S6041C24D0Ev();
extern void _ZN8S6041C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C24__7S6041C1[] = {
  ABISELECT(34304,18716),
  ABISELECT(34280,18708),
  ABISELECT(28368,15472),
  ABISELECT(33824,18452),
  ABISELECT(33720,18396),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
  (VTBL_ENTRY)&_ZN8S6041C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C24D0Ev,
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
};
extern void _ZN8S6041C11D1Ev();
extern void _ZN8S6041C11D0Ev();
extern void _ZN8S6041C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C118S6041C24__A1__7S6041C1[] = {
  ABISELECT(34304,18716),
  ABISELECT(34280,18708),
  ABISELECT(28368,15472),
  ABISELECT(33824,18452),
  ABISELECT(33720,18396),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN8S6041C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
};
extern void _ZN8S6041C12D1Ev();
extern void _ZN8S6041C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C128S6041C118S6041C24__A1__7S6041C1[] = {
  ABISELECT(34304,18716),
  ABISELECT(34280,18708),
  ABISELECT(28368,15472),
  ABISELECT(33824,18452),
  ABISELECT(33720,18396),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN8S6041C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C128S6041C118S6041C24__A1__7S6041C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2924),
  ABISELECT(104,56),
  ABISELECT(-33720,-18396),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C128S6041C118S6041C24__A1__7S6041C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  ABISELECT(-33824,-18452),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C128S6041C118S6041C24__A1__7S6041C1[] = {
  0,
  ABISELECT(-28368,-15472),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev)();
extern void ABISELECT(_ZThn34304_N8S6041C12D1Ev,_ZThn18716_N8S6041C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev)();
extern void ABISELECT(_ZThn34304_N8S6041C12D0Ev,_ZThn18716_N8S6041C12D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C128S6041C118S6041C24__A1__7S6041C1[] = {
  0,
  ABISELECT(-34304,-18716),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3244),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-34304,-18716),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C138S6041C118S6041C24__A1__7S6041C1[] = {
  ABISELECT(24040,13132),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C138S6041C118S6041C24__A1__7S6041C1[] = {
  0,
  ABISELECT(-24040,-13132),
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C118S6041C24__A1__7S6041C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2924),
  ABISELECT(104,56),
  ABISELECT(-33720,-18396),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C118S6041C24__A1__7S6041C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  ABISELECT(-33824,-18452),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C118S6041C24__A1__7S6041C1[] = {
  0,
  ABISELECT(-28368,-15472),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev)();
extern void ABISELECT(_ZThn34304_N8S6041C11D1Ev,_ZThn18716_N8S6041C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev)();
extern void ABISELECT(_ZThn34304_N8S6041C11D0Ev,_ZThn18716_N8S6041C11D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C118S6041C24__A1__7S6041C1[] = {
  0,
  ABISELECT(-34304,-18716),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3244),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-34304,-18716),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C13__8S6041C118S6041C24__A1__7S6041C1[] = {
  ABISELECT(24040,13132),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6041C138S6041C24__A2__7S6041C1[] = {
  ABISELECT(23904,13040),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C138S6041C24__A2__7S6041C1[] = {
  0,
  ABISELECT(-23904,-13040),
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C24__7S6041C1[] = {
  0,
  ABISELECT(-28368,-15472),
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C24__7S6041C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2924),
  ABISELECT(104,56),
  ABISELECT(-33720,-18396),
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C24__7S6041C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  ABISELECT(-33824,-18452),
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C24D1Ev,_ZTv0_n32_N8S6041C24D1Ev)();
extern void ABISELECT(_ZThn34304_N8S6041C24D1Ev,_ZThn18716_N8S6041C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C24D0Ev,_ZTv0_n32_N8S6041C24D0Ev)();
extern void ABISELECT(_ZThn34304_N8S6041C24D0Ev,_ZThn18716_N8S6041C24D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C24__7S6041C1[] = {
  0,
  ABISELECT(-34304,-18716),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3244),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-34304,-18716),
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C24D1Ev,_ZTv0_n32_N8S6041C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C24D0Ev,_ZTv0_n32_N8S6041C24D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C138S6041C11__8S6041C24__7S6041C1[] = {
  ABISELECT(24040,13132),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6041C13__A1__8S6041C24__7S6041C1[] = {
  ABISELECT(23904,13040),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI8S6041C24[0]),
};
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C7D1Ev();
extern void _ZN7S6041C7D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C7__7S6041C1[] = {
  ABISELECT(6048,3316),
  ABISELECT(5568,3048),
  ABISELECT(5544,3040),
  ABISELECT(-368,-196),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C87S6041C7__7S6041C1[] = {
  ABISELECT(5544,3040),
  ABISELECT(-368,-196),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C87S6041C7__7S6041C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2924),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C87S6041C7__7S6041C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C87S6041C7__7S6041C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN8S6041C11D1Ev();
extern void _ZN8S6041C11D0Ev();
extern void _ZN8S6041C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C117S6041C7__7S6041C1[] = {
  ABISELECT(5088,2780),
  ABISELECT(5064,2772),
  ABISELECT(-848,-464),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN8S6041C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
};
extern void _ZN8S6041C12D1Ev();
extern void _ZN8S6041C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C128S6041C117S6041C7__7S6041C1[] = {
  ABISELECT(5088,2780),
  ABISELECT(5064,2772),
  ABISELECT(-848,-464),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN8S6041C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6041C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C128S6041C117S6041C7__7S6041C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2924),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C128S6041C117S6041C7__7S6041C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C128S6041C117S6041C7__7S6041C1[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev)();
extern void ABISELECT(_ZThn5088_N8S6041C12D1Ev,_ZThn2780_N8S6041C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev)();
extern void ABISELECT(_ZThn5088_N8S6041C12D0Ev,_ZThn2780_N8S6041C12D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C128S6041C117S6041C7__7S6041C1[] = {
  0,
  ABISELECT(-5088,-2780),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3244),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-5088,-2780),
  (VTBL_ENTRY)&(_ZTI8S6041C12[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C138S6041C117S6041C7__7S6041C1[] = {
  ABISELECT(-5176,-2804),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C138S6041C117S6041C7__7S6041C1[] = {
  0,
  ABISELECT(5176,2804),
  (VTBL_ENTRY)&(_ZTI8S6041C13[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__8S6041C117S6041C7__7S6041C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2924),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__8S6041C117S6041C7__7S6041C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C117S6041C7__7S6041C1[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev)();
extern void ABISELECT(_ZThn5088_N8S6041C11D1Ev,_ZThn2780_N8S6041C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev)();
extern void ABISELECT(_ZThn5088_N8S6041C11D0Ev,_ZThn2780_N8S6041C11D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__8S6041C117S6041C7__7S6041C1[] = {
  0,
  ABISELECT(-5088,-2780),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3244),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-5088,-2780),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C13__8S6041C117S6041C7__7S6041C1[] = {
  ABISELECT(-5176,-2804),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S6041C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C7__7S6041C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2924),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C7__7S6041C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C7__7S6041C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void ABISELECT(_ZThn480_N7S6041C7D1Ev,_ZThn268_N7S6041C7D1Ev)();
extern void ABISELECT(_ZThn480_N7S6041C7D0Ev,_ZThn268_N7S6041C7D0Ev)();
extern void _ZN8S6041C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C11__7S6041C7__7S6041C1[] = {
  ABISELECT(5088,2780),
  ABISELECT(5064,2772),
  ABISELECT(-848,-464),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N7S6041C7D1Ev,_ZThn268_N7S6041C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N7S6041C7D0Ev,_ZThn268_N7S6041C7D0Ev),
  (VTBL_ENTRY)&_ZN8S6041C112v6Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S6041C7D1Ev,_ZTv0_n32_N7S6041C7D1Ev)();
extern void ABISELECT(_ZThn5568_N7S6041C7D1Ev,_ZThn3048_N7S6041C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6041C7D0Ev,_ZTv0_n32_N7S6041C7D0Ev)();
extern void ABISELECT(_ZThn5568_N7S6041C7D0Ev,_ZThn3048_N7S6041C7D0Ev)() __attribute__((weak));
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__A1__7S6041C7__7S6041C1[] = {
  0,
  ABISELECT(-5568,-3048),
  0,
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3244),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  ABISELECT(-5568,-3048),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6041C7D1Ev,_ZTv0_n32_N7S6041C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6041C7D0Ev,_ZTv0_n32_N7S6041C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6041C138S6041C11__7S6041C7__7S6041C1[] = {
  ABISELECT(-5176,-2804),
  ABISELECT(-4808,-2608),
  (VTBL_ENTRY)&(_ZTI7S6041C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2924),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C9__7S6041C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C9__7S6041C1[] = {
  0,
  ABISELECT(5352,2924),
  (VTBL_ENTRY)&(_ZTI7S6041C9[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C1[] = {
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  0,
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__8S6041C10__7S6041C1[] = {
  0,
  ABISELECT(5456,2980),
  (VTBL_ENTRY)&(_ZTI8S6041C10[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
extern void _ZN7S6041C32v2Ev();
extern void _ZN7S6041C8D1Ev();
extern void _ZN7S6041C8D0Ev();
extern void _ZN7S6041C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C8__A1__7S6041C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(-5936,-3244),
  ABISELECT(-480,-264),
  ABISELECT(-584,-320),
  0,
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6041C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6041C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6041C9__7S6041C8__A1__7S6041C1[] = {
  ABISELECT(560,312),
  ABISELECT(-5352,-2924),
  ABISELECT(104,56),
  ABISELECT(584,320),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
};
extern void _ZN7S6041C52v3Ev();
extern void _ZN8S6041C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S6041C10__7S6041C8__A1__7S6041C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-5456,-2980),
  ABISELECT(480,264),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C52v3Ev,
  (VTBL_ENTRY)&_ZN8S6041C102v4Ev,
};
extern void _ZN7S6041C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6041C3__7S6041C8__A1__7S6041C1[] = {
  0,
  ABISELECT(5936,3244),
  (VTBL_ENTRY)&(_ZTI7S6041C8[0]),
  (VTBL_ENTRY)&_ZN7S6041C32v2Ev,
};
static  VTT_ENTRY vtt_S6041C1[] = {
  {&(_ZTV7S6041C1[11]),  11,96},
  {&(_tg__ZTV7S6041C6__7S6041C1[10]),  10,15},
  {&(_tg__ZTV7S6041C87S6041C6__A2__7S6041C1[6]),  6,10},
  {&(_tg__ZTV7S6041C9__7S6041C87S6041C6__A2__7S6041C1[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C87S6041C6__A2__7S6041C1[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C87S6041C6__A2__7S6041C1[3]),  3,4},
  {&(_tg__ZTV7S6041C7__7S6041C6__7S6041C1[12]),  12,16},
  {&(_tg__ZTV7S6041C9__7S6041C6__7S6041C1[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C6__7S6041C1[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C6__7S6041C1[3]),  3,4},
  {&(_tg__ZTV8S6041C117S6041C7__7S6041C6__7S6041C1[7]),  7,10},
  {&(_tg__ZTV7S6041C8__A1__7S6041C6__7S6041C1[9]),  9,13},
  {&(_tg__ZTV8S6041C138S6041C117S6041C7__7S6041C6__7S6041C1[3]),  3,3},
  {&(_tg__ZTV8S6041C15__7S6041C6__7S6041C1[3]),  3,4},
  {&(_tg__ZTV8S6041C24__7S6041C1[7]),  7,10},
  {&(_tg__ZTV8S6041C118S6041C24__A1__7S6041C1[7]),  7,10},
  {&(_tg__ZTV8S6041C128S6041C118S6041C24__A1__7S6041C1[7]),  7,9},
  {&(_tg__ZTV7S6041C9__8S6041C128S6041C118S6041C24__A1__7S6041C1[5]),  5,5},
  {&(_tg__ZTV8S6041C10__8S6041C128S6041C118S6041C24__A1__7S6041C1[6]),  6,8},
  {&(_tg__ZTV7S6041C3__8S6041C128S6041C118S6041C24__A1__7S6041C1[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C128S6041C118S6041C24__A1__7S6041C1[9]),  9,13},
  {&(_tg__ZTV8S6041C138S6041C118S6041C24__A1__7S6041C1[3]),  3,3},
  {&(_tg__ZTV7S6041C3__8S6041C138S6041C118S6041C24__A1__7S6041C1[3]),  3,4},
  {&(_tg__ZTV7S6041C9__8S6041C118S6041C24__A1__7S6041C1[5]),  5,5},
  {&(_tg__ZTV8S6041C10__8S6041C118S6041C24__A1__7S6041C1[6]),  6,8},
  {&(_tg__ZTV7S6041C3__8S6041C118S6041C24__A1__7S6041C1[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C118S6041C24__A1__7S6041C1[9]),  9,13},
  {&(_tg__ZTV8S6041C13__8S6041C118S6041C24__A1__7S6041C1[3]),  3,3},
  {&(_tg__ZTV8S6041C138S6041C24__A2__7S6041C1[3]),  3,3},
  {&(_tg__ZTV7S6041C3__8S6041C138S6041C24__A2__7S6041C1[3]),  3,4},
  {&(_tg__ZTV7S6041C3__8S6041C24__7S6041C1[3]),  3,4},
  {&(_tg__ZTV7S6041C9__8S6041C24__7S6041C1[5]),  5,5},
  {&(_tg__ZTV8S6041C10__8S6041C24__7S6041C1[6]),  6,8},
  {&(_tg__ZTV7S6041C8__8S6041C24__7S6041C1[9]),  9,13},
  {&(_tg__ZTV8S6041C138S6041C11__8S6041C24__7S6041C1[3]),  3,3},
  {&(_tg__ZTV8S6041C13__A1__8S6041C24__7S6041C1[3]),  3,3},
  {&(_ZTV7S6041C1[36]),  36,96},
  {&(_ZTV7S6041C1[49]),  49,96},
  {&(_ZTV7S6041C1[71]),  71,96},
  {&(_ZTV7S6041C1[77]),  77,96},
  {&(_ZTV7S6041C1[60]),  60,96},
  {&(_ZTV7S6041C1[88]),  88,96},
  {&(_ZTV7S6041C1[66]),  66,96},
  {&(_ZTV7S6041C1[95]),  95,96},
  {&(_ZTV7S6041C1[24]),  24,96},
  {&(_ZTV7S6041C1[30]),  30,96},
  {&(_ZTV7S6041C1[33]),  33,96},
  {&(_tg__ZTV7S6041C7__7S6041C1[8]),  8,12},
  {&(_tg__ZTV7S6041C87S6041C7__7S6041C1[6]),  6,10},
  {&(_tg__ZTV7S6041C9__7S6041C87S6041C7__7S6041C1[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C87S6041C7__7S6041C1[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C87S6041C7__7S6041C1[3]),  3,4},
  {&(_tg__ZTV8S6041C117S6041C7__7S6041C1[7]),  7,10},
  {&(_tg__ZTV8S6041C128S6041C117S6041C7__7S6041C1[7]),  7,9},
  {&(_tg__ZTV7S6041C9__8S6041C128S6041C117S6041C7__7S6041C1[5]),  5,5},
  {&(_tg__ZTV8S6041C10__8S6041C128S6041C117S6041C7__7S6041C1[6]),  6,8},
  {&(_tg__ZTV7S6041C3__8S6041C128S6041C117S6041C7__7S6041C1[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C128S6041C117S6041C7__7S6041C1[9]),  9,13},
  {&(_tg__ZTV8S6041C138S6041C117S6041C7__7S6041C1[3]),  3,3},
  {&(_tg__ZTV7S6041C3__8S6041C138S6041C117S6041C7__7S6041C1[3]),  3,4},
  {&(_tg__ZTV7S6041C9__8S6041C117S6041C7__7S6041C1[5]),  5,5},
  {&(_tg__ZTV8S6041C10__8S6041C117S6041C7__7S6041C1[6]),  6,8},
  {&(_tg__ZTV7S6041C3__8S6041C117S6041C7__7S6041C1[3]),  3,4},
  {&(_tg__ZTV7S6041C8__8S6041C117S6041C7__7S6041C1[9]),  9,13},
  {&(_tg__ZTV8S6041C13__8S6041C117S6041C7__7S6041C1[3]),  3,3},
  {&(_tg__ZTV7S6041C9__7S6041C7__7S6041C1[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C7__7S6041C1[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C7__7S6041C1[3]),  3,4},
  {&(_tg__ZTV8S6041C11__7S6041C7__7S6041C1[7]),  7,10},
  {&(_tg__ZTV7S6041C8__A1__7S6041C7__7S6041C1[9]),  9,13},
  {&(_tg__ZTV8S6041C138S6041C11__7S6041C7__7S6041C1[3]),  3,3},
  {&(_tg__ZTV7S6041C9__7S6041C1[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C9__7S6041C1[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C9__7S6041C1[3]),  3,4},
  {&(_tg__ZTV8S6041C10__7S6041C1[4]),  4,6},
  {&(_tg__ZTV7S6041C3__8S6041C10__7S6041C1[3]),  3,4},
  {&(_tg__ZTV7S6041C8__A1__7S6041C1[6]),  6,10},
  {&(_tg__ZTV7S6041C9__7S6041C8__A1__7S6041C1[5]),  5,5},
  {&(_tg__ZTV8S6041C10__7S6041C8__A1__7S6041C1[6]),  6,8},
  {&(_tg__ZTV7S6041C3__7S6041C8__A1__7S6041C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6041C1[];
extern  VTBL_ENTRY _ZTV7S6041C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6041C1[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6041C7D0Ev,_ZTv0_n32_N7S6041C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5568_N7S6041C7D0Ev,_ZThn3048_N7S6041C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6041C7D1Ev,_ZTv0_n32_N7S6041C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5568_N7S6041C7D1Ev,_ZThn3048_N7S6041C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C24D0Ev,_ZTv0_n32_N8S6041C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34304_N8S6041C24D0Ev,_ZThn18716_N8S6041C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C24D1Ev,_ZTv0_n32_N8S6041C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34304_N8S6041C24D1Ev,_ZThn18716_N8S6041C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C11D0Ev,_ZTv0_n32_N8S6041C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S6041C11D0Ev,_ZThn2780_N8S6041C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn34304_N8S6041C11D0Ev,_ZThn18716_N8S6041C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C11D1Ev,_ZTv0_n32_N8S6041C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S6041C11D1Ev,_ZThn2780_N8S6041C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn34304_N8S6041C11D1Ev,_ZThn18716_N8S6041C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C12D0Ev,_ZTv0_n32_N8S6041C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S6041C12D0Ev,_ZThn2780_N8S6041C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn34304_N8S6041C12D0Ev,_ZThn18716_N8S6041C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6041C12D1Ev,_ZTv0_n32_N8S6041C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S6041C12D1Ev,_ZThn2780_N8S6041C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn34304_N8S6041C12D1Ev,_ZThn18716_N8S6041C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6041C6D0Ev,_ZTv0_n32_N7S6041C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn58752_N7S6041C6D0Ev,_ZThn32132_N7S6041C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6041C6D1Ev,_ZTv0_n32_N7S6041C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn58752_N7S6041C6D1Ev,_ZThn32132_N7S6041C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6041C6D0Ev,_ZTv0_n40_N7S6041C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53184_N7S6041C6D0Ev,_ZThn29084_N7S6041C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6041C6D1Ev,_ZTv0_n40_N7S6041C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53184_N7S6041C6D1Ev,_ZThn29084_N7S6041C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6041C1D0Ev,_ZTv0_n32_N7S6041C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn58752_N7S6041C1D0Ev,_ZThn32132_N7S6041C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6041C1D1Ev,_ZTv0_n32_N7S6041C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn58752_N7S6041C1D1Ev,_ZThn32132_N7S6041C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6041C1D0Ev,_ZTv0_n40_N7S6041C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53184_N7S6041C1D0Ev,_ZThn29084_N7S6041C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6041C1D1Ev,_ZTv0_n40_N7S6041C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn53184_N7S6041C1D1Ev,_ZThn29084_N7S6041C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6041C1 = {  "S6041C1", // class name
  bases_S6041C1, 29,
  &(vtc_S6041C1[0]), // expected_vtbl_contents
  &(vtt_S6041C1[0]), // expected_vtt_contents
  ABISELECT(73200,40036), // object size
  NSPAIRA(_ZTI7S6041C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6041C1),96, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6041C1),80, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C5  {
  int s19770c5f0;
  void *s19770c5f1;
  ::S281C37_nt s19770c5f2;
  virtual void  v2(); // _ZN8S19770C52v2Ev
  ~S19770C5(); // tgen
  S19770C5(); // tgen
};
//SIG(-1 S19770C5) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S19770C5()
{
  extern Class_Descriptor cd_S19770C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19770C5, buf);
    S19770C5 *dp, &lv = *(dp=new (buf) S19770C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19770C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19770C5)");
    check_field_offset(lv, s19770c5f0, ABISELECT(8,4), "S19770C5.s19770c5f0");
    check_field_offset(lv, s19770c5f1, ABISELECT(16,8), "S19770C5.s19770c5f1");
    check_field_offset(lv, s19770c5f2, ABISELECT(24,12), "S19770C5.s19770c5f2");
    test_class_info(&lv, &cd_S19770C5);
    dp->~S19770C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C5(Test_S19770C5, "S19770C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19770C5C1Ev();
extern void _ZN8S19770C5D1Ev();
Name_Map name_map_S19770C5[] = {
  NSPAIR(_ZN8S19770C5C1Ev),
  NSPAIR(_ZN8S19770C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19770C5[];
extern void _ZN8S19770C52v2Ev();
static  VTBL_ENTRY vtc_S19770C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C5[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
Class_Descriptor cd_S19770C5 = {  "S19770C5", // class name
  0,0,//no base classes
  &(vtc_S19770C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19770C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19770C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C3  {
  int s19770c3f0[6];
  char s19770c3f1:2;
  long double s19770c3f2;
  void *s19770c3f3[2];
  int s19770c3f4;
  long double s19770c3f5;
  ::S20176C3_nt s19770c3f6;
  ::S281C37_nt s19770c3f7;
  ::S281C37_nt s19770c3f8[9];
  void *s19770c3f9;
  ::S19770C5 s19770c3f10;
  ::S19770C5 s19770c3f11;
  virtual void  v3(); // _ZN8S19770C32v3Ev
  ~S19770C3(); // tgen
  S19770C3(); // tgen
};
//SIG(-1 S19770C3) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S19770C3()
{
  extern Class_Descriptor cd_S19770C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S19770C3, buf);
    S19770C3 *dp, &lv = *(dp=new (buf) S19770C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S19770C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C3)");
    check_field_offset(lv, s19770c3f0, ABISELECT(8,4), "S19770C3.s19770c3f0");
    set_bf_and_test(lv, s19770c3f1, ABISELECT(32,28), 0, 2, 1, "S19770C3");
    set_bf_and_test(lv, s19770c3f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S19770C3");
    check_field_offset(lv, s19770c3f2, ABISELECT(48,32), "S19770C3.s19770c3f2");
    check_field_offset(lv, s19770c3f3, ABISELECT(64,44), "S19770C3.s19770c3f3");
    check_field_offset(lv, s19770c3f4, ABISELECT(80,52), "S19770C3.s19770c3f4");
    check_field_offset(lv, s19770c3f5, ABISELECT(96,56), "S19770C3.s19770c3f5");
    check_field_offset(lv, s19770c3f6, ABISELECT(112,68), "S19770C3.s19770c3f6");
    check_field_offset(lv, s19770c3f7, ABISELECT(120,72), "S19770C3.s19770c3f7");
    check_field_offset(lv, s19770c3f8, ABISELECT(136,80), "S19770C3.s19770c3f8");
    check_field_offset(lv, s19770c3f9, ABISELECT(280,152), "S19770C3.s19770c3f9");
    check_field_offset(lv, s19770c3f10, ABISELECT(288,156), "S19770C3.s19770c3f10");
    check_field_offset(lv, s19770c3f11, ABISELECT(328,176), "S19770C3.s19770c3f11");
    test_class_info(&lv, &cd_S19770C3);
    dp->~S19770C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C3(Test_S19770C3, "S19770C3", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN8S19770C3C1Ev();
extern void _ZN8S19770C3D1Ev();
Name_Map name_map_S19770C3[] = {
  NSPAIR(_ZN8S19770C3C1Ev),
  NSPAIR(_ZN8S19770C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19770C3[];
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY vtc_S19770C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C3[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
Class_Descriptor cd_S19770C3 = {  "S19770C3", // class name
  0,0,//no base classes
  &(vtc_S19770C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI8S19770C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19770C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C9  : S19770C5 , virtual S19770C3 , virtual S281C37_nt {
  void *s19770c9f0;
  __tsi64 s19770c9f1;
  char s19770c9f2[2];
  ::S19770C3 s19770c9f3;
  short s19770c9f4[7];
  int s19770c9f5;
  char s19770c9f6;
  int s19770c9f7:20;
  virtual void  v4(); // _ZN8S19770C92v4Ev
  ~S19770C9(); // tgen
  S19770C9(); // tgen
};
//SIG(-1 S19770C9) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


void  S19770C9 ::v4(){vfunc_called(this, "_ZN8S19770C92v4Ev");}
S19770C9 ::~S19770C9(){ note_dtor("S19770C9", this);} // tgen
S19770C9 ::S19770C9(){ note_ctor("S19770C9", this);} // tgen

static void Test_S19770C9()
{
  extern Class_Descriptor cd_S19770C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S19770C9, buf);
    S19770C9 *dp, &lv = *(dp=new (buf) S19770C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S19770C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C9)");
    check_base_class_offset(lv, (S19770C5*), 0, "S19770C9");
    check_base_class_offset(lv, (S19770C3*), ABISELECT(464,256), "S19770C9");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S19770C9");
    check_field_offset(lv, s19770c9f0, ABISELECT(40,20), "S19770C9.s19770c9f0");
    check_field_offset(lv, s19770c9f1, ABISELECT(48,24), "S19770C9.s19770c9f1");
    check_field_offset(lv, s19770c9f2, ABISELECT(56,32), "S19770C9.s19770c9f2");
    check_field_offset(lv, s19770c9f3, ABISELECT(64,36), "S19770C9.s19770c9f3");
    check_field_offset(lv, s19770c9f4, ABISELECT(432,232), "S19770C9.s19770c9f4");
    check_field_offset(lv, s19770c9f5, ABISELECT(448,248), "S19770C9.s19770c9f5");
    check_field_offset(lv, s19770c9f6, ABISELECT(452,252), "S19770C9.s19770c9f6");
    set_bf_and_test(lv, s19770c9f7, ABISELECT(453,253), 0, 20, 1, "S19770C9");
    set_bf_and_test(lv, s19770c9f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S19770C9");
    test_class_info(&lv, &cd_S19770C9);
    dp->~S19770C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C9(Test_S19770C9, "S19770C9", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN8S19770C9C1Ev();
extern void _ZN8S19770C9D1Ev();
Name_Map name_map_S19770C9[] = {
  NSPAIR(_ZN8S19770C9C1Ev),
  NSPAIR(_ZN8S19770C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S19770C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19770C3,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19770C9[];
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY vtc_S19770C9[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S19770C9[];
static  VTT_ENTRY vtt_S19770C9[] = {
  {&(_ZTV8S19770C9[4]),  4,10},
  {&(_ZTV8S19770C9[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
Class_Descriptor cd_S19770C9 = {  "S19770C9", // class name
  bases_S19770C9, 3,
  &(vtc_S19770C9[0]), // expected_vtbl_contents
  &(vtt_S19770C9[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI8S19770C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19770C9),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19770C9),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  S19770C8  : virtual S19770C5 , virtual S281C37_nt , S19770C9 , S19770C3 {
  __tsi64 s19770c8f0:25;
  void *s19770c8f1;
  int s19770c8f2[3];
  ::S281C37_nt s19770c8f3;
  virtual  ~S19770C8(); // _ZN8S19770C8D2Ev
  virtual void  v5(); // _ZN8S19770C82v5Ev
  S19770C8(); // tgen
};
//SIG(-1 S19770C8) C1{ VBC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC3 BC4{ BC2 VBC5{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC3 FC3[9] Fp FC2 FC2} VBC3 v4 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} BC5 vd v1 FL:25 Fp Fi[3] FC3}


 S19770C8 ::~S19770C8(){ note_dtor("S19770C8", this);}
void  S19770C8 ::v5(){vfunc_called(this, "_ZN8S19770C82v5Ev");}
S19770C8 ::S19770C8(){ note_ctor("S19770C8", this);} // tgen

static void Test_S19770C8()
{
  extern Class_Descriptor cd_S19770C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(83,177)];
    init_test(&cd_S19770C8, buf);
    S19770C8 *dp, &lv = *(dp=new (buf) S19770C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1312,704), "sizeof(S19770C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C8)");
    /*is_ambiguous_... S19770C8::S19770C5 */ AMB_check_base_class_offset(lv, (S19770C5*), ABISELECT(880,480), "S19770C8");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(920,500), "S19770C8");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(920,500), "S19770C8");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*), 0, "S19770C8");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(944,508), "S19770C8");
    check_base_class_offset(lv, (S19770C9*), 0, "S19770C8");
    /*is_ambiguous_... S19770C8::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*), ABISELECT(464,256), "S19770C8");
    set_bf_and_test(lv, s19770c8f0, ABISELECT(832,452), 0, 25, 1, "S19770C8");
    set_bf_and_test(lv, s19770c8f0, ABISELECT(832,452), 0, 25, hide_sll(1LL<<24), "S19770C8");
    check_field_offset(lv, s19770c8f1, ABISELECT(840,456), "S19770C8.s19770c8f1");
    check_field_offset(lv, s19770c8f2, ABISELECT(848,460), "S19770C8.s19770c8f2");
    check_field_offset(lv, s19770c8f3, ABISELECT(864,472), "S19770C8.s19770c8f3");
    test_class_info(&lv, &cd_S19770C8);
    dp->~S19770C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C8(Test_S19770C8, "S19770C8", ABISELECT(1312,704));

#else // __cplusplus

extern void _ZN8S19770C8C1Ev();
extern void _ZN8S19770C8D2Ev();
Name_Map name_map_S19770C8[] = {
  NSPAIR(_ZN8S19770C8C1Ev),
  NSPAIR(_ZN8S19770C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
static Base_Class bases_S19770C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C5,    ABISELECT(880,480), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(920,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19770C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C3,    ABISELECT(944,508), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19770C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19770C3,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19770C8[];
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C8D1Ev();
extern void _ZN8S19770C8D0Ev();
extern void _ZN8S19770C82v5Ev();
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY vtc_S19770C8[] = {
  ABISELECT(880,480),
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19770C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19770C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19770C82v5Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  ABISELECT(-880,-480),
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S19770C8[];
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__8S19770C8[] = {
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__8S19770C8[] = {
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTT_ENTRY vtt_S19770C8[] = {
  {&(_ZTV8S19770C8[5]),  5,21},
  {&(_tg__ZTV8S19770C9__8S19770C8[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__8S19770C8[3]),  3,4},
  {&(_ZTV8S19770C8[16]),  16,21},
  {&(_ZTV8S19770C8[20]),  20,21},
};
extern VTBL_ENTRY _ZTI8S19770C8[];
extern  VTBL_ENTRY _ZTV8S19770C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C8[];
Class_Descriptor cd_S19770C8 = {  "S19770C8", // class name
  bases_S19770C8, 6,
  &(vtc_S19770C8[0]), // expected_vtbl_contents
  &(vtt_S19770C8[0]), // expected_vtt_contents
  ABISELECT(1312,704), // object size
  NSPAIRA(_ZTI8S19770C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19770C8),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19770C8),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C13  : virtual S19770C9 {
  int s19770c13f0;
  char s19770c13f1;
  void *s19770c13f2[6];
  int s19770c13f3[2];
  void *s19770c13f4;
  ::S281C37_nt s19770c13f5;
  ~S19770C13(); // tgen
  S19770C13(); // tgen
};
//SIG(-1 S19770C13) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S19770C13()
{
  extern Class_Descriptor cd_S19770C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S19770C13, buf);
    S19770C13 *dp, &lv = *(dp=new (buf) S19770C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S19770C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C13)");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*), ABISELECT(96,56), "S19770C13");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(560,312), "S19770C13");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(928,508), "S19770C13");
    check_base_class_offset(lv, (S19770C9*), ABISELECT(96,56), "S19770C13");
    check_field_offset(lv, s19770c13f0, ABISELECT(8,4), "S19770C13.s19770c13f0");
    check_field_offset(lv, s19770c13f1, ABISELECT(12,8), "S19770C13.s19770c13f1");
    check_field_offset(lv, s19770c13f2, ABISELECT(16,12), "S19770C13.s19770c13f2");
    check_field_offset(lv, s19770c13f3, ABISELECT(64,36), "S19770C13.s19770c13f3");
    check_field_offset(lv, s19770c13f4, ABISELECT(72,44), "S19770C13.s19770c13f4");
    check_field_offset(lv, s19770c13f5, ABISELECT(80,48), "S19770C13.s19770c13f5");
    test_class_info(&lv, &cd_S19770C13);
    dp->~S19770C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C13(Test_S19770C13, "S19770C13", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN9S19770C13C1Ev();
extern void _ZN9S19770C13D1Ev();
Name_Map name_map_S19770C13[] = {
  NSPAIR(_ZN9S19770C13C1Ev),
  NSPAIR(_ZN9S19770C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
static Base_Class bases_S19770C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C5,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19770C3,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19770C9,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19770C13[];
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY vtc_S19770C13[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern VTBL_ENTRY _ZTV9S19770C13[];
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C13[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__9S19770C13[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTT_ENTRY vtt_S19770C13[] = {
  {&(_ZTV9S19770C13[5]),  5,17},
  {&(_ZTV9S19770C13[11]),  11,17},
  {&(_ZTV9S19770C13[16]),  16,17},
  {&(_tg__ZTV8S19770C9__9S19770C13[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__9S19770C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19770C13[];
extern  VTBL_ENTRY _ZTV9S19770C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C13[];
Class_Descriptor cd_S19770C13 = {  "S19770C13", // class name
  bases_S19770C13, 4,
  &(vtc_S19770C13[0]), // expected_vtbl_contents
  &(vtt_S19770C13[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI9S19770C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19770C13),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19770C13),5, //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  S19770C12  : virtual S19770C13 , S19770C3 , S281C37_nt {
  char s19770c12f0;
  int s19770c12f1[2];
  long double s19770c12f2[2];
  short s19770c12f3;
  void *s19770c12f4;
  int s19770c12f5;
  __tsi64 s19770c12f6;
  int s19770c12f7;
  void *s19770c12f8;
  virtual  ~S19770C12(); // _ZN9S19770C12D2Ev
  virtual void  v6(); // _ZN9S19770C122v6Ev
  S19770C12(); // tgen
};
//SIG(-1 S19770C12) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S19770C12 ::~S19770C12(){ note_dtor("S19770C12", this);}
void  S19770C12 ::v6(){vfunc_called(this, "_ZN9S19770C122v6Ev");}
S19770C12 ::S19770C12(){ note_ctor("S19770C12", this);} // tgen

static void Test_S19770C12()
{
  extern Class_Descriptor cd_S19770C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S19770C12, buf);
    S19770C12 *dp, &lv = *(dp=new (buf) S19770C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S19770C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C12)");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*), ABISELECT(576,324), "S19770C12");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(1040,580), "S19770C12");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(1408,776), "S19770C12");
    check_base_class_offset(lv, (S19770C9*)(S19770C13*), ABISELECT(576,324), "S19770C12");
    check_base_class_offset(lv, (S19770C13*), ABISELECT(480,268), "S19770C12");
    /*is_ambiguous_... S19770C12::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*), 0, "S19770C12");
    /*is_ambiguous_... S19770C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S19770C12");
    check_field_offset(lv, s19770c12f0, ABISELECT(384,204), "S19770C12.s19770c12f0");
    check_field_offset(lv, s19770c12f1, ABISELECT(388,208), "S19770C12.s19770c12f1");
    check_field_offset(lv, s19770c12f2, ABISELECT(400,216), "S19770C12.s19770c12f2");
    check_field_offset(lv, s19770c12f3, ABISELECT(432,240), "S19770C12.s19770c12f3");
    check_field_offset(lv, s19770c12f4, ABISELECT(440,244), "S19770C12.s19770c12f4");
    check_field_offset(lv, s19770c12f5, ABISELECT(448,248), "S19770C12.s19770c12f5");
    check_field_offset(lv, s19770c12f6, ABISELECT(456,252), "S19770C12.s19770c12f6");
    check_field_offset(lv, s19770c12f7, ABISELECT(464,260), "S19770C12.s19770c12f7");
    check_field_offset(lv, s19770c12f8, ABISELECT(472,264), "S19770C12.s19770c12f8");
    test_class_info(&lv, &cd_S19770C12);
    dp->~S19770C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C12(Test_S19770C12, "S19770C12", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN9S19770C12C1Ev();
extern void _ZN9S19770C12D2Ev();
Name_Map name_map_S19770C12[] = {
  NSPAIR(_ZN9S19770C12C1Ev),
  NSPAIR(_ZN9S19770C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C13;
extern VTBL_ENTRY _ZTI9S19770C13[];
extern  VTBL_ENTRY _ZTV9S19770C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C13[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S19770C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19770C3,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C9,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19770C13,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19770C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19770C12[];
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY vtc_S19770C12[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern VTBL_ENTRY _ZTV9S19770C12[];
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C13__9S19770C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C13__9S19770C12[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__9S19770C12[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTT_ENTRY vtt_S19770C12[] = {
  {&(_ZTV9S19770C12[6]),  6,27},
  {&(_ZTV9S19770C12[15]),  15,27},
  {&(_ZTV9S19770C12[21]),  21,27},
  {&(_ZTV9S19770C12[26]),  26,27},
  {&(_tg__ZTV9S19770C13__9S19770C12[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C13__9S19770C12[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C13__9S19770C12[3]),  3,4},
  {&(_tg__ZTV8S19770C9__9S19770C12[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__9S19770C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
Class_Descriptor cd_S19770C12 = {  "S19770C12", // class name
  bases_S19770C12, 7,
  &(vtc_S19770C12[0]), // expected_vtbl_contents
  &(vtt_S19770C12[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI9S19770C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19770C12),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19770C12),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C11  : virtual S19770C3 , virtual S19770C12 {
  ::S19770C12 s19770c11f0[7];
  int s19770c11f1;
  short s19770c11f2;
  int s19770c11f3;
  ::S19770C9 s19770c11f4;
  long s19770c11f5[9];
  virtual void  v7(); // _ZN9S19770C112v7Ev
  virtual void  v8(); // _ZN9S19770C112v8Ev
  ~S19770C11(); // tgen
  S19770C11(); // tgen
};
//SIG(-1 S19770C11) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 Fl[9]}


void  S19770C11 ::v7(){vfunc_called(this, "_ZN9S19770C112v7Ev");}
void  S19770C11 ::v8(){vfunc_called(this, "_ZN9S19770C112v8Ev");}
S19770C11 ::~S19770C11(){ note_dtor("S19770C11", this);} // tgen
S19770C11 ::S19770C11(){ note_ctor("S19770C11", this);} // tgen

static void Test_S19770C11()
{
  extern Class_Descriptor cd_S19770C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1697)];
    init_test(&cd_S19770C11, buf);
    S19770C11 *dp, &lv = *(dp=new (buf) S19770C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6784), "sizeof(S19770C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C11)");
    /*is_ambiguous_... S19770C11::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*), ABISELECT(10928,6000), "S19770C11");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(10928,6000), "S19770C11");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*), ABISELECT(11872,6520), "S19770C11");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(12328,6776), "S19770C11");
    check_base_class_offset(lv, (S19770C9*)(S19770C13*), ABISELECT(11872,6520), "S19770C11");
    check_base_class_offset(lv, (S19770C13*)(S19770C12*), ABISELECT(11776,6464), "S19770C11");
    /*is_ambiguous_... S19770C12::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*), ABISELECT(11296,6196), "S19770C11");
    /*is_ambiguous_... S19770C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*), ABISELECT(11664,6392), "S19770C11");
    check_base_class_offset(lv, (S19770C12*), ABISELECT(11296,6196), "S19770C11");
    check_field_offset(lv, s19770c11f0, ABISELECT(16,4), "S19770C11.s19770c11f0");
    check_field_offset(lv, s19770c11f1, ABISELECT(9984,5492), "S19770C11.s19770c11f1");
    check_field_offset(lv, s19770c11f2, ABISELECT(9988,5496), "S19770C11.s19770c11f2");
    check_field_offset(lv, s19770c11f3, ABISELECT(9992,5500), "S19770C11.s19770c11f3");
    check_field_offset(lv, s19770c11f4, ABISELECT(10000,5504), "S19770C11.s19770c11f4");
    check_field_offset(lv, s19770c11f5, ABISELECT(10848,5964), "S19770C11.s19770c11f5");
    test_class_info(&lv, &cd_S19770C11);
    dp->~S19770C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C11(Test_S19770C11, "S19770C11", ABISELECT(12352,6784));

#else // __cplusplus

extern void _ZN9S19770C11C1Ev();
extern void _ZN9S19770C11D1Ev();
Name_Map name_map_S19770C11[] = {
  NSPAIR(_ZN9S19770C11C1Ev),
  NSPAIR(_ZN9S19770C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C13;
extern VTBL_ENTRY _ZTI9S19770C13[];
extern  VTBL_ENTRY _ZTV9S19770C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C13[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
static Base_Class bases_S19770C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C3,    ABISELECT(10928,6000), //bcp->offset
    11, //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_S19770C5,    ABISELECT(11872,6520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C9,    ABISELECT(11872,6520), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19770C13,    ABISELECT(11776,6464), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19770C3,    ABISELECT(11296,6196), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    ABISELECT(11296,6196), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19770C11[];
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void _ZN9S19770C11D1Ev();
extern void _ZN9S19770C11D0Ev();
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev)();
extern void ABISELECT(_ZThn11296_N9S19770C11D1Ev,_ZThn6196_N9S19770C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev)();
extern void ABISELECT(_ZThn11296_N9S19770C11D0Ev,_ZThn6196_N9S19770C11D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY vtc_S19770C11[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19770C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C11D0Ev,
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern VTBL_ENTRY _ZTV9S19770C11[];
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C11[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12__9S19770C11[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12__9S19770C11[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C12__9S19770C11[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C11[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C13__9S19770C11[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C13__9S19770C11[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C11[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__9S19770C11[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTT_ENTRY vtt_S19770C11[] = {
  {&(_ZTV9S19770C11[7]),  7,41},
  {&(_ZTV9S19770C11[14]),  14,41},
  {&(_ZTV9S19770C11[24]),  24,41},
  {&(_ZTV9S19770C11[33]),  33,41},
  {&(_ZTV9S19770C11[39]),  39,41},
  {&(_tg__ZTV9S19770C12__9S19770C11[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C12__9S19770C11[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C12__9S19770C11[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C12__9S19770C11[3]),  3,4},
  {&(_tg__ZTV9S19770C13__9S19770C11[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C13__9S19770C11[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C13__9S19770C11[3]),  3,4},
  {&(_tg__ZTV8S19770C9__9S19770C11[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__9S19770C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19770C11[];
extern  VTBL_ENTRY _ZTV9S19770C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C11[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S19770C11D0Ev,_ZThn6196_N9S19770C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S19770C11D1Ev,_ZThn6196_N9S19770C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19770C11 = {  "S19770C11", // class name
  bases_S19770C11, 8,
  &(vtc_S19770C11[0]), // expected_vtbl_contents
  &(vtt_S19770C11[0]), // expected_vtt_contents
  ABISELECT(12352,6784), // object size
  NSPAIRA(_ZTI9S19770C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19770C11),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19770C11),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C10  : virtual S19770C11 {
  char s19770c10f0;
  int s19770c10f1[3];
  virtual  ~S19770C10(); // _ZN9S19770C10D2Ev
  S19770C10(); // tgen
};
//SIG(-1 S19770C10) C1{ VBC2{ VBC3{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v2 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v3 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v5 v6 FC7[7] Fi Fs Fi FC9 Fl[9]} vd Fc Fi[3]}


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

static void Test_S19770C10()
{
  extern Class_Descriptor cd_S19770C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(775,1702)];
    init_test(&cd_S19770C10, buf);
    S19770C10 *dp, &lv = *(dp=new (buf) S19770C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12384,6804), "sizeof(S19770C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C10)");
    /*is_ambiguous_... S19770C11::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C11*), ABISELECT(10960,6020), "S19770C10");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(10960,6020), "S19770C10");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*), ABISELECT(11904,6540), "S19770C10");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(12360,6796), "S19770C10");
    check_base_class_offset(lv, (S19770C9*)(S19770C13*), ABISELECT(11904,6540), "S19770C10");
    check_base_class_offset(lv, (S19770C13*)(S19770C12*), ABISELECT(11808,6484), "S19770C10");
    /*is_ambiguous_... S19770C12::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*), ABISELECT(11328,6216), "S19770C10");
    /*is_ambiguous_... S19770C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*), ABISELECT(11696,6412), "S19770C10");
    check_base_class_offset(lv, (S19770C12*)(S19770C11*), ABISELECT(11328,6216), "S19770C10");
    check_base_class_offset(lv, (S19770C11*), ABISELECT(32,20), "S19770C10");
    check_field_offset(lv, s19770c10f0, ABISELECT(8,4), "S19770C10.s19770c10f0");
    check_field_offset(lv, s19770c10f1, ABISELECT(12,8), "S19770C10.s19770c10f1");
    test_class_info(&lv, &cd_S19770C10);
    dp->~S19770C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C10(Test_S19770C10, "S19770C10", ABISELECT(12384,6804));

#else // __cplusplus

extern void _ZN9S19770C10C1Ev();
extern void _ZN9S19770C10D2Ev();
Name_Map name_map_S19770C10[] = {
  NSPAIR(_ZN9S19770C10C1Ev),
  NSPAIR(_ZN9S19770C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C13;
extern VTBL_ENTRY _ZTI9S19770C13[];
extern  VTBL_ENTRY _ZTV9S19770C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C13[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C11;
extern VTBL_ENTRY _ZTI9S19770C11[];
extern  VTBL_ENTRY _ZTV9S19770C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C11[];
static Base_Class bases_S19770C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C3,    ABISELECT(10960,6020), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S19770C5,    ABISELECT(11904,6540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12360,6796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C9,    ABISELECT(11904,6540), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19770C13,    ABISELECT(11808,6484), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19770C3,    ABISELECT(11328,6216), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11696,6412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    ABISELECT(11328,6216), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19770C11,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19770C10[];
extern void _ZN9S19770C10D1Ev();
extern void _ZN9S19770C10D0Ev();
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N9S19770C10D1Ev,_ZTv0_n40_N9S19770C10D1Ev)();
extern void ABISELECT(_ZThn32_N9S19770C10D1Ev,_ZThn20_N9S19770C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19770C10D0Ev,_ZTv0_n40_N9S19770C10D0Ev)();
extern void ABISELECT(_ZThn32_N9S19770C10D0Ev,_ZThn20_N9S19770C10D0Ev)() __attribute__((weak));
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C10D1Ev,_ZTv0_n32_N9S19770C10D1Ev)();
extern void ABISELECT(_ZThn11328_N9S19770C10D1Ev,_ZThn6216_N9S19770C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C10D0Ev,_ZTv0_n32_N9S19770C10D0Ev)();
extern void ABISELECT(_ZThn11328_N9S19770C10D0Ev,_ZThn6216_N9S19770C10D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY vtc_S19770C10[] = {
  ABISELECT(12360,6796),
  ABISELECT(11904,6540),
  ABISELECT(11808,6484),
  ABISELECT(11328,6216),
  ABISELECT(10960,6020),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN9S19770C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C10D0Ev,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19770C10D1Ev,_ZTv0_n40_N9S19770C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19770C10D0Ev,_ZTv0_n40_N9S19770C10D0Ev),
  0,
  ABISELECT(-10960,-6020),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  ABISELECT(-11328,-6216),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11328,-6216),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C10D1Ev,_ZTv0_n32_N9S19770C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C10D0Ev,_ZTv0_n32_N9S19770C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11808,-6484),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11904,-6540),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern VTBL_ENTRY _ZTV9S19770C10[];
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void _ZN9S19770C11D1Ev();
extern void _ZN9S19770C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C11__9S19770C10[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19770C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C11D0Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C11__9S19770C10[] = {
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev)();
extern void ABISELECT(_ZThn11296_N9S19770C11D1Ev,_ZThn6196_N9S19770C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev)();
extern void ABISELECT(_ZThn11296_N9S19770C11D0Ev,_ZThn6196_N9S19770C11D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C11__9S19770C10[] = {
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C11__9S19770C10[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C11__9S19770C10[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C10[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12__9S19770C10[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12__9S19770C10[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C12__9S19770C10[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C10[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C13__9S19770C10[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C13__9S19770C10[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C10[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__9S19770C10[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTT_ENTRY vtt_S19770C10[] = {
  {&(_ZTV9S19770C10[8]),  8,54},
  {&(_ZTV9S19770C10[20]),  20,54},
  {&(_ZTV9S19770C10[27]),  27,54},
  {&(_ZTV9S19770C10[37]),  37,54},
  {&(_ZTV9S19770C10[46]),  46,54},
  {&(_ZTV9S19770C10[52]),  52,54},
  {&(_tg__ZTV9S19770C11__9S19770C10[7]),  7,11},
  {&(_tg__ZTV8S19770C3__9S19770C11__9S19770C10[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C11__9S19770C10[9]),  9,13},
  {&(_tg__ZTV9S19770C13__9S19770C11__9S19770C10[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C11__9S19770C10[6]),  6,8},
  {&(_tg__ZTV9S19770C12__9S19770C10[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C12__9S19770C10[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C12__9S19770C10[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C12__9S19770C10[3]),  3,4},
  {&(_tg__ZTV9S19770C13__9S19770C10[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C13__9S19770C10[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C13__9S19770C10[3]),  3,4},
  {&(_tg__ZTV8S19770C9__9S19770C10[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__9S19770C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19770C10[];
extern  VTBL_ENTRY _ZTV9S19770C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C10[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S19770C11D0Ev,_ZThn6196_N9S19770C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S19770C11D1Ev,_ZThn6196_N9S19770C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C10D0Ev,_ZTv0_n32_N9S19770C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N9S19770C10D0Ev,_ZThn6216_N9S19770C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C10D1Ev,_ZTv0_n32_N9S19770C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N9S19770C10D1Ev,_ZThn6216_N9S19770C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19770C10D0Ev,_ZTv0_n40_N9S19770C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19770C10D0Ev,_ZThn20_N9S19770C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19770C10D1Ev,_ZTv0_n40_N9S19770C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19770C10D1Ev,_ZThn20_N9S19770C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19770C10 = {  "S19770C10", // class name
  bases_S19770C10, 9,
  &(vtc_S19770C10[0]), // expected_vtbl_contents
  &(vtt_S19770C10[0]), // expected_vtt_contents
  ABISELECT(12384,6804), // object size
  NSPAIRA(_ZTI9S19770C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19770C10),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19770C10),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C7  : S19770C8 , virtual S19770C9 , virtual S19770C10 {
  long double s19770c7f0[2];
  ::S20176C3_nt s19770c7f1;
  int s19770c7f2:16;
  int s19770c7f3:3;
  virtual  ~S19770C7(); // _ZN8S19770C7D2Ev
  virtual void  v9(); // _ZN8S19770C72v9Ev
  virtual void  v10(); // _ZN8S19770C73v10Ev
  S19770C7(); // tgen
};
//SIG(-1 S19770C7) C1{ BC2{ VBC3{ v3 Fi Fp FC4{ m Fp[2]}} VBC4 BC5{ BC3 VBC6{ v4 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC4 FC4[9] Fp FC3 FC3} VBC4 v5 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} BC6 vd v6 FL:25 Fp Fi[3] FC4} VBC5 VBC8{ VBC9{ VBC6 VBC10{ VBC11{ VBC5 Fi Fc Fp[6] Fi[2] Fp FC4} BC6 BC4 vd v7 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v8 v9 FC10[7] Fi Fs Fi FC5 Fl[9]} vd Fc Fi[3]} vd v1 v2 FD[2] FC7 Fi:16 Fi:3}


 S19770C7 ::~S19770C7(){ note_dtor("S19770C7", this);}
void  S19770C7 ::v9(){vfunc_called(this, "_ZN8S19770C72v9Ev");}
void  S19770C7 ::v10(){vfunc_called(this, "_ZN8S19770C73v10Ev");}
S19770C7 ::S19770C7(){ note_ctor("S19770C7", this);} // tgen

static void Test_S19770C7()
{
  extern Class_Descriptor cd_S19770C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(834,1834)];
    init_test(&cd_S19770C7, buf);
    S19770C7 *dp, &lv = *(dp=new (buf) S19770C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13328,7332), "sizeof(S19770C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C7)");
    /*is_ambiguous_... S19770C8::S19770C5 */ AMB_check_base_class_offset(lv, (S19770C5*)(S19770C8*), ABISELECT(920,508), "S19770C7");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C8*), ABISELECT(960,528), "S19770C7");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*)(S19770C8*), ABISELECT(960,528), "S19770C7");
    /*is_ambiguous_... S19770C7::S19770C9 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(960,528), "S19770C7");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*)(S19770C8*), 0, "S19770C7");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*)(S19770C8*), ABISELECT(976,536), "S19770C7");
    /*is_ambiguous_... S19770C7::S19770C9 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(976,536), "S19770C7");
    /*is_ambiguous_... S19770C11::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C11*), ABISELECT(976,536), "S19770C7");
    check_base_class_offset(lv, (S19770C9*)(S19770C8*), 0, "S19770C7");
    /*is_ambiguous_... S19770C8::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C8*), ABISELECT(464,256), "S19770C7");
    check_base_class_offset(lv, (S19770C8*), 0, "S19770C7");
    /*is_ambiguous_... S19770C7::S19770C9 */ AMB_check_base_class_offset(lv, (S19770C5*)(S19770C9*), ABISELECT(1344,732), "S19770C7");
    /*is_ambiguous_... S19770C7::S19770C9 */ AMB_check_base_class_offset(lv, (S19770C9*), ABISELECT(1344,732), "S19770C7");
    check_base_class_offset(lv, (S19770C9*)(S19770C13*), ABISELECT(1344,732), "S19770C7");
    check_base_class_offset(lv, (S19770C13*)(S19770C12*), ABISELECT(13232,7276), "S19770C7");
    /*is_ambiguous_... S19770C12::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*), ABISELECT(12752,7008), "S19770C7");
    /*is_ambiguous_... S19770C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*), ABISELECT(13120,7204), "S19770C7");
    check_base_class_offset(lv, (S19770C12*)(S19770C11*), ABISELECT(12752,7008), "S19770C7");
    check_base_class_offset(lv, (S19770C11*)(S19770C10*), ABISELECT(1824,1008), "S19770C7");
    check_base_class_offset(lv, (S19770C10*), ABISELECT(1800,988), "S19770C7");
    check_field_offset(lv, s19770c7f0, ABISELECT(880,480), "S19770C7.s19770c7f0");
    check_field_offset(lv, s19770c7f1, ABISELECT(912,504), "S19770C7.s19770c7f1");
    set_bf_and_test(lv, s19770c7f2, ABISELECT(913,505), 0, 16, 1, "S19770C7");
    set_bf_and_test(lv, s19770c7f2, ABISELECT(913,505), 0, 16, hide_sll(1LL<<15), "S19770C7");
    set_bf_and_test(lv, s19770c7f3, ABISELECT(915,507), 0, 3, 1, "S19770C7");
    set_bf_and_test(lv, s19770c7f3, ABISELECT(915,507), 0, 3, hide_sll(1LL<<2), "S19770C7");
    test_class_info(&lv, &cd_S19770C7);
    dp->~S19770C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C7(Test_S19770C7, "S19770C7", ABISELECT(13328,7332));

#else // __cplusplus

extern void _ZN8S19770C7C1Ev();
extern void _ZN8S19770C7D2Ev();
Name_Map name_map_S19770C7[] = {
  NSPAIR(_ZN8S19770C7C1Ev),
  NSPAIR(_ZN8S19770C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S19770C8;
extern VTBL_ENTRY _ZTI8S19770C8[];
extern  VTBL_ENTRY _ZTV8S19770C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C8[];
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C13;
extern VTBL_ENTRY _ZTI9S19770C13[];
extern  VTBL_ENTRY _ZTV9S19770C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C13[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C11;
extern VTBL_ENTRY _ZTI9S19770C11[];
extern  VTBL_ENTRY _ZTV9S19770C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C11[];
extern Class_Descriptor cd_S19770C10;
extern VTBL_ENTRY _ZTI9S19770C10[];
extern  VTBL_ENTRY _ZTV9S19770C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C10[];
static Base_Class bases_S19770C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C5,    ABISELECT(920,508), //bcp->offset
    20, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(960,528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19770C3,    ABISELECT(976,536), //bcp->offset
    24, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19770C9,    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
    11, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19770C3,    ABISELECT(464,256), //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
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19770C8,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19770C5,    ABISELECT(1344,732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19770C9,    ABISELECT(1344,732), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19770C13,    ABISELECT(13232,7276), //bcp->offset
    74, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19770C3,    ABISELECT(12752,7008), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(13120,7204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    ABISELECT(12752,7008), //bcp->offset
    61, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19770C11,    ABISELECT(1824,1008), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19770C10,    ABISELECT(1800,988), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19770C7[];
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C7D1Ev();
extern void _ZN8S19770C7D0Ev();
extern void _ZN8S19770C82v5Ev();
extern void _ZN8S19770C72v9Ev();
extern void _ZN8S19770C73v10Ev();
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S19770C7D1Ev,_ZTv0_n36_N8S19770C7D1Ev)();
extern void ABISELECT(_ZThn1800_N8S19770C7D1Ev,_ZThn988_N8S19770C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19770C7D0Ev,_ZTv0_n36_N8S19770C7D0Ev)();
extern void ABISELECT(_ZThn1800_N8S19770C7D0Ev,_ZThn988_N8S19770C7D0Ev)() __attribute__((weak));
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19770C7D1Ev,_ZTv0_n40_N8S19770C7D1Ev)();
extern void ABISELECT(_ZThn1824_N8S19770C7D1Ev,_ZThn1008_N8S19770C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19770C7D0Ev,_ZTv0_n40_N8S19770C7D0Ev)();
extern void ABISELECT(_ZThn1824_N8S19770C7D0Ev,_ZThn1008_N8S19770C7D0Ev)() __attribute__((weak));
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19770C7D1Ev,_ZTv0_n32_N8S19770C7D1Ev)();
extern void ABISELECT(_ZThn12752_N8S19770C7D1Ev,_ZThn7008_N8S19770C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C7D0Ev,_ZTv0_n32_N8S19770C7D0Ev)();
extern void ABISELECT(_ZThn12752_N8S19770C7D0Ev,_ZThn7008_N8S19770C7D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY vtc_S19770C7[] = {
  ABISELECT(13232,7276),
  ABISELECT(12752,7008),
  ABISELECT(1824,1008),
  ABISELECT(1800,988),
  ABISELECT(1344,732),
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19770C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19770C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19770C82v5Ev,
  (VTBL_ENTRY)&_ZN8S19770C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19770C73v10Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-1344,-732),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  ABISELECT(-1800,-988),
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6288),
  ABISELECT(10952,6020),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  ABISELECT(-1800,-988),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19770C7D1Ev,_ZTv0_n36_N8S19770C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19770C7D0Ev,_ZTv0_n36_N8S19770C7D0Ev),
  ABISELECT(-1824,-1008),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-848,-472),
  ABISELECT(-1824,-1008),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19770C7D1Ev,_ZTv0_n40_N8S19770C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19770C7D0Ev,_ZTv0_n40_N8S19770C7D0Ev),
  0,
  ABISELECT(-12752,-7008),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-12752,-7008),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C7D1Ev,_ZTv0_n32_N8S19770C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C7D0Ev,_ZTv0_n32_N8S19770C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-13232,-7276),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
};
extern VTBL_ENTRY _ZTV8S19770C7[];
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C8D1Ev();
extern void _ZN8S19770C8D0Ev();
extern void _ZN8S19770C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C8__8S19770C7[] = {
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19770C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19770C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19770C82v5Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C98S19770C8__8S19770C7[] = {
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C98S19770C8__8S19770C7[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C5__8S19770C8__8S19770C7[] = {
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C8__8S19770C7[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__A1__8S19770C7[] = {
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__A1__8S19770C7[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN9S19770C10D1Ev();
extern void _ZN9S19770C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C10__8S19770C7[] = {
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6288),
  ABISELECT(10952,6020),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN9S19770C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C10D0Ev,
};
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N9S19770C10D1Ev,_ZTv0_n40_N9S19770C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19770C10D1Ev,_ZThn20_N9S19770C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19770C10D0Ev,_ZTv0_n40_N9S19770C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19770C10D0Ev,_ZThn20_N9S19770C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19770C11__9S19770C10__8S19770C7[] = {
  ABISELECT(-24,-20),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-848,-472),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19770C10D1Ev,_ZTv0_n40_N9S19770C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19770C10D0Ev,_ZTv0_n40_N9S19770C10D0Ev),
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C10__8S19770C7[] = {
  0,
  ABISELECT(824,452),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C10D1Ev,_ZTv0_n32_N9S19770C10D1Ev)();
extern void ABISELECT(_ZThn10952_N9S19770C10D1Ev,_ZThn6020_N9S19770C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C10D0Ev,_ZTv0_n32_N9S19770C10D0Ev)();
extern void ABISELECT(_ZThn10952_N9S19770C10D0Ev,_ZThn6020_N9S19770C10D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C10__8S19770C7[] = {
  0,
  ABISELECT(-10952,-6020),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-10952,-6020),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C10D1Ev,_ZTv0_n32_N9S19770C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C10D0Ev,_ZTv0_n32_N9S19770C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C10__8S19770C7[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-11432,-6288),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C10__8S19770C7[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(456,256),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void _ZN9S19770C11D1Ev();
extern void _ZN9S19770C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C11__8S19770C7[] = {
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-848,-472),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19770C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C11D0Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C11__8S19770C7[] = {
  0,
  ABISELECT(848,472),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev)();
extern void ABISELECT(_ZThn10928_N9S19770C11D1Ev,_ZThn6000_N9S19770C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev)();
extern void ABISELECT(_ZThn10928_N9S19770C11D0Ev,_ZThn6000_N9S19770C11D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C11__8S19770C7[] = {
  0,
  ABISELECT(-10928,-6000),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C11__8S19770C7[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-11408,-6268),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C11__8S19770C7[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(480,276),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__8S19770C7[] = {
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12__8S19770C7[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12__8S19770C7[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11408,6276),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C12__8S19770C7[] = {
  0,
  ABISELECT(11776,6472),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__8S19770C7[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C13__8S19770C7[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11888,6544),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C13__8S19770C7[] = {
  0,
  ABISELECT(12256,6740),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTT_ENTRY vtt_S19770C7[] = {
  {&(_ZTV8S19770C7[10]),  10,79},
  {&(_tg__ZTV8S19770C8__8S19770C7[5]),  5,10},
  {&(_tg__ZTV8S19770C98S19770C8__8S19770C7[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C98S19770C8__8S19770C7[3]),  3,4},
  {&(_tg__ZTV8S19770C5__8S19770C8__8S19770C7[3]),  3,4},
  {&(_tg__ZTV8S19770C3__8S19770C8__8S19770C7[3]),  3,4},
  {&(_ZTV8S19770C7[23]),  23,79},
  {&(_ZTV8S19770C7[27]),  27,79},
  {&(_ZTV8S19770C7[34]),  34,79},
  {&(_ZTV8S19770C7[45]),  45,79},
  {&(_ZTV8S19770C7[57]),  57,79},
  {&(_ZTV8S19770C7[70]),  70,79},
  {&(_ZTV8S19770C7[79]),  79,79},
  {&(_tg__ZTV8S19770C9__A1__8S19770C7[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__A1__8S19770C7[3]),  3,4},
  {&(_tg__ZTV9S19770C10__8S19770C7[8]),  8,10},
  {&(_tg__ZTV9S19770C11__9S19770C10__8S19770C7[10]),  10,14},
  {&(_tg__ZTV8S19770C3__9S19770C10__8S19770C7[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C10__8S19770C7[9]),  9,13},
  {&(_tg__ZTV9S19770C13__9S19770C10__8S19770C7[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C10__8S19770C7[6]),  6,8},
  {&(_tg__ZTV9S19770C11__8S19770C7[7]),  7,11},
  {&(_tg__ZTV8S19770C3__9S19770C11__8S19770C7[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C11__8S19770C7[9]),  9,13},
  {&(_tg__ZTV9S19770C13__9S19770C11__8S19770C7[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C11__8S19770C7[6]),  6,8},
  {&(_tg__ZTV9S19770C12__8S19770C7[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C12__8S19770C7[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C12__8S19770C7[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C12__8S19770C7[3]),  3,4},
  {&(_tg__ZTV9S19770C13__8S19770C7[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C13__8S19770C7[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C13__8S19770C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19770C7[];
extern  VTBL_ENTRY _ZTV8S19770C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C7[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S19770C11D0Ev,_ZThn6000_N9S19770C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S19770C11D1Ev,_ZThn6000_N9S19770C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C10D0Ev,_ZTv0_n32_N9S19770C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S19770C10D0Ev,_ZThn6020_N9S19770C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C10D1Ev,_ZTv0_n32_N9S19770C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S19770C10D1Ev,_ZThn6020_N9S19770C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19770C10D0Ev,_ZTv0_n40_N9S19770C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19770C10D0Ev,_ZThn20_N9S19770C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19770C10D1Ev,_ZTv0_n40_N9S19770C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19770C10D1Ev,_ZThn20_N9S19770C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19770C7D0Ev,_ZTv0_n32_N8S19770C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12752_N8S19770C7D0Ev,_ZThn7008_N8S19770C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19770C7D1Ev,_ZTv0_n32_N8S19770C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12752_N8S19770C7D1Ev,_ZThn7008_N8S19770C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19770C7D0Ev,_ZTv0_n40_N8S19770C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N8S19770C7D0Ev,_ZThn1008_N8S19770C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19770C7D1Ev,_ZTv0_n40_N8S19770C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N8S19770C7D1Ev,_ZThn1008_N8S19770C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19770C7D0Ev,_ZTv0_n36_N8S19770C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1800_N8S19770C7D0Ev,_ZThn988_N8S19770C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19770C7D1Ev,_ZTv0_n36_N8S19770C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1800_N8S19770C7D1Ev,_ZThn988_N8S19770C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19770C7 = {  "S19770C7", // class name
  bases_S19770C7, 15,
  &(vtc_S19770C7[0]), // expected_vtbl_contents
  &(vtt_S19770C7[0]), // expected_vtt_contents
  ABISELECT(13328,7332), // object size
  NSPAIRA(_ZTI8S19770C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19770C7),79, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19770C7),33, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C15  : virtual S19770C13 , virtual S19770C12 {
  long s19770c15f0;
  void *s19770c15f1;
  ::S19770C9 s19770c15f2;
  void *s19770c15f3;
  short s19770c15f4;
  long s19770c15f5;
  int s19770c15f6;
  __tsi64 s19770c15f7;
  ::S19770C9 s19770c15f8[4];
  int s19770c15f9;
  virtual  ~S19770C15(); // _ZN9S19770C15D2Ev
  S19770C15(); // tgen
};
//SIG(-1 S19770C15) C1{ VBC2{ VBC3{ BC4{ v1 Fi Fp FC5{ m Fp[2]}} VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC8{ VBC2 BC6 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC3 Fp Fs Fl Fi FL FC3[4] Fi}


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

static void Test_S19770C15()
{
  extern Class_Descriptor cd_S19770C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(361,782)];
    init_test(&cd_S19770C15, buf);
    S19770C15 *dp, &lv = *(dp=new (buf) S19770C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5760,3124), "sizeof(S19770C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C15)");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*), ABISELECT(4432,2396), "S19770C15");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(4896,2652), "S19770C15");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(5264,2848), "S19770C15");
    check_base_class_offset(lv, (S19770C9*)(S19770C13*), ABISELECT(4432,2396), "S19770C15");
    check_base_class_offset(lv, (S19770C13*), ABISELECT(4328,2340), "S19770C15");
    check_base_class_offset(lv, (S19770C13*)(S19770C12*), ABISELECT(4328,2340), "S19770C15");
    /*is_ambiguous_... S19770C12::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*), ABISELECT(5280,2856), "S19770C15");
    /*is_ambiguous_... S19770C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*), ABISELECT(5648,3052), "S19770C15");
    check_base_class_offset(lv, (S19770C12*), ABISELECT(5280,2856), "S19770C15");
    check_field_offset(lv, s19770c15f0, ABISELECT(8,4), "S19770C15.s19770c15f0");
    check_field_offset(lv, s19770c15f1, ABISELECT(16,8), "S19770C15.s19770c15f1");
    check_field_offset(lv, s19770c15f2, ABISELECT(32,12), "S19770C15.s19770c15f2");
    check_field_offset(lv, s19770c15f3, ABISELECT(880,472), "S19770C15.s19770c15f3");
    check_field_offset(lv, s19770c15f4, ABISELECT(888,476), "S19770C15.s19770c15f4");
    check_field_offset(lv, s19770c15f5, ABISELECT(896,480), "S19770C15.s19770c15f5");
    check_field_offset(lv, s19770c15f6, ABISELECT(904,484), "S19770C15.s19770c15f6");
    check_field_offset(lv, s19770c15f7, ABISELECT(912,488), "S19770C15.s19770c15f7");
    check_field_offset(lv, s19770c15f8, ABISELECT(928,496), "S19770C15.s19770c15f8");
    check_field_offset(lv, s19770c15f9, ABISELECT(4320,2336), "S19770C15.s19770c15f9");
    test_class_info(&lv, &cd_S19770C15);
    dp->~S19770C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C15(Test_S19770C15, "S19770C15", ABISELECT(5760,3124));

#else // __cplusplus

extern void _ZN9S19770C15C1Ev();
extern void _ZN9S19770C15D2Ev();
Name_Map name_map_S19770C15[] = {
  NSPAIR(_ZN9S19770C15C1Ev),
  NSPAIR(_ZN9S19770C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C13;
extern VTBL_ENTRY _ZTI9S19770C13[];
extern  VTBL_ENTRY _ZTV9S19770C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C13[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
static Base_Class bases_S19770C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C5,    ABISELECT(4432,2396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C3,    ABISELECT(4896,2652), //bcp->offset
    22, //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_S281C37_nt,    ABISELECT(5264,2848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C9,    ABISELECT(4432,2396), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19770C13,    ABISELECT(4328,2340), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19770C3,    ABISELECT(5280,2856), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5648,3052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    ABISELECT(5280,2856), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19770C15[];
extern void _ZN9S19770C15D1Ev();
extern void _ZN9S19770C15D0Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev)();
extern void ABISELECT(_ZThn5280_N9S19770C15D1Ev,_ZThn2856_N9S19770C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev)();
extern void ABISELECT(_ZThn5280_N9S19770C15D0Ev,_ZThn2856_N9S19770C15D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY vtc_S19770C15[] = {
  ABISELECT(5280,2856),
  ABISELECT(5264,2848),
  ABISELECT(4896,2652),
  ABISELECT(4432,2396),
  ABISELECT(4328,2340),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN9S19770C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C15D0Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4432,-2396),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  0,
  ABISELECT(-4896,-2652),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  ABISELECT(-5280,-2856),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5280,-2856),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
extern VTBL_ENTRY _ZTV9S19770C15[];
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C15[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C13__9S19770C15[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C13__9S19770C15[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C15[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__9S19770C15[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12__9S19770C15[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12__9S19770C15[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C12__9S19770C15[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTT_ENTRY vtt_S19770C15[] = {
  {&(_ZTV9S19770C15[7]),  7,39},
  {&(_ZTV9S19770C15[14]),  14,39},
  {&(_ZTV9S19770C15[20]),  20,39},
  {&(_ZTV9S19770C15[25]),  25,39},
  {&(_ZTV9S19770C15[35]),  35,39},
  {&(_tg__ZTV9S19770C13__9S19770C15[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C13__9S19770C15[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C13__9S19770C15[3]),  3,4},
  {&(_tg__ZTV8S19770C9__9S19770C15[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__9S19770C15[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C15[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C12__9S19770C15[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C12__9S19770C15[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C12__9S19770C15[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19770C15[];
extern  VTBL_ENTRY _ZTV9S19770C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C15[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N9S19770C15D0Ev,_ZThn2856_N9S19770C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N9S19770C15D1Ev,_ZThn2856_N9S19770C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19770C15 = {  "S19770C15", // class name
  bases_S19770C15, 8,
  &(vtc_S19770C15[0]), // expected_vtbl_contents
  &(vtt_S19770C15[0]), // expected_vtt_contents
  ABISELECT(5760,3124), // object size
  NSPAIRA(_ZTI9S19770C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19770C15),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19770C15),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C16  : virtual S19770C3 {
  void *s19770c16f0;
  short s19770c16f1;
  long s19770c16f2;
  int s19770c16f3:6;
  void *s19770c16f4[2];
  ~S19770C16(); // tgen
  S19770C16(); // tgen
};
//SIG(-1 S19770C16) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} Fp Fs Fl Fi:6 Fp[2]}


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

static void Test_S19770C16()
{
  extern Class_Descriptor cd_S19770C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,57)];
    init_test(&cd_S19770C16, buf);
    S19770C16 *dp, &lv = *(dp=new (buf) S19770C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,224), "sizeof(S19770C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C16)");
    check_base_class_offset(lv, (S19770C3*), ABISELECT(64,28), "S19770C16");
    check_field_offset(lv, s19770c16f0, ABISELECT(8,4), "S19770C16.s19770c16f0");
    check_field_offset(lv, s19770c16f1, ABISELECT(16,8), "S19770C16.s19770c16f1");
    check_field_offset(lv, s19770c16f2, ABISELECT(24,12), "S19770C16.s19770c16f2");
    set_bf_and_test(lv, s19770c16f3, ABISELECT(32,16), 0, 6, 1, "S19770C16");
    set_bf_and_test(lv, s19770c16f3, ABISELECT(32,16), 0, 6, hide_sll(1LL<<5), "S19770C16");
    check_field_offset(lv, s19770c16f4, ABISELECT(40,20), "S19770C16.s19770c16f4");
    test_class_info(&lv, &cd_S19770C16);
    dp->~S19770C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C16(Test_S19770C16, "S19770C16", ABISELECT(432,224));

#else // __cplusplus

extern void _ZN9S19770C16C1Ev();
extern void _ZN9S19770C16D1Ev();
Name_Map name_map_S19770C16[] = {
  NSPAIR(_ZN9S19770C16C1Ev),
  NSPAIR(_ZN9S19770C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
static Base_Class bases_S19770C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C3,    ABISELECT(64,28), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19770C16[];
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY vtc_S19770C16[] = {
  ABISELECT(64,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern VTBL_ENTRY _ZTV9S19770C16[];
static  VTT_ENTRY vtt_S19770C16[] = {
  {&(_ZTV9S19770C16[3]),  3,7},
  {&(_ZTV9S19770C16[6]),  6,7},
};
extern VTBL_ENTRY _ZTI9S19770C16[];
extern  VTBL_ENTRY _ZTV9S19770C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C16[];
Class_Descriptor cd_S19770C16 = {  "S19770C16", // class name
  bases_S19770C16, 1,
  &(vtc_S19770C16[0]), // expected_vtbl_contents
  &(vtt_S19770C16[0]), // expected_vtt_contents
  ABISELECT(432,224), // object size
  NSPAIRA(_ZTI9S19770C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19770C16),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19770C16),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  S19770C14  : S19770C15 , S19770C16 {
  __tsi64 s19770c14f0;
  long double s19770c14f1;
  ::S20176C3_nt s19770c14f2;
  int s19770c14f3[9];
  short s19770c14f4;
  char s19770c14f5:5;
  virtual  ~S19770C14(); // _ZN9S19770C14D2Ev
  virtual void  v11(); // _ZN9S19770C143v11Ev
  S19770C14(); // tgen
};
//SIG(-1 S19770C14) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 Fi Fp FC6{ m Fp[2]}} VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} VBC9{ VBC3 BC7 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC4 Fp Fs Fl Fi FL FC4[4] Fi} BC10{ VBC7 Fp Fs Fl Fi:6 Fp[2]} vd v1 FL FD FC8 Fi[9] Fs Fc:5}


 S19770C14 ::~S19770C14(){ note_dtor("S19770C14", this);}
void  S19770C14 ::v11(){vfunc_called(this, "_ZN9S19770C143v11Ev");}
S19770C14 ::S19770C14(){ note_ctor("S19770C14", this);} // tgen

static void Test_S19770C14()
{
  extern Class_Descriptor cd_S19770C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(369,805)];
    init_test(&cd_S19770C14, buf);
    S19770C14 *dp, &lv = *(dp=new (buf) S19770C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5888,3216), "sizeof(S19770C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C14)");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*), ABISELECT(4560,2488), "S19770C14");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(5024,2744), "S19770C14");
    check_base_class_offset(lv, (S19770C3*)(S19770C16*), ABISELECT(5024,2744), "S19770C14");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(5392,2940), "S19770C14");
    check_base_class_offset(lv, (S19770C9*)(S19770C13*), ABISELECT(4560,2488), "S19770C14");
    check_base_class_offset(lv, (S19770C13*)(S19770C15*), ABISELECT(4464,2432), "S19770C14");
    check_base_class_offset(lv, (S19770C13*)(S19770C12*), ABISELECT(4464,2432), "S19770C14");
    /*is_ambiguous_... S19770C12::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*), ABISELECT(5408,2948), "S19770C14");
    /*is_ambiguous_... S19770C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*), ABISELECT(5776,3144), "S19770C14");
    check_base_class_offset(lv, (S19770C12*)(S19770C15*), ABISELECT(5408,2948), "S19770C14");
    check_base_class_offset(lv, (S19770C15*), 0, "S19770C14");
    check_base_class_offset(lv, (S19770C16*), ABISELECT(4328,2340), "S19770C14");
    check_field_offset(lv, s19770c14f0, ABISELECT(4384,2368), "S19770C14.s19770c14f0");
    check_field_offset(lv, s19770c14f1, ABISELECT(4400,2376), "S19770C14.s19770c14f1");
    check_field_offset(lv, s19770c14f2, ABISELECT(4416,2388), "S19770C14.s19770c14f2");
    check_field_offset(lv, s19770c14f3, ABISELECT(4420,2392), "S19770C14.s19770c14f3");
    check_field_offset(lv, s19770c14f4, ABISELECT(4456,2428), "S19770C14.s19770c14f4");
    set_bf_and_test(lv, s19770c14f5, ABISELECT(4458,2430), 0, 5, 1, "S19770C14");
    set_bf_and_test(lv, s19770c14f5, ABISELECT(4458,2430), 0, 5, hide_sll(1LL<<4), "S19770C14");
    test_class_info(&lv, &cd_S19770C14);
    dp->~S19770C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C14(Test_S19770C14, "S19770C14", ABISELECT(5888,3216));

#else // __cplusplus

extern void _ZN9S19770C14C1Ev();
extern void _ZN9S19770C14D2Ev();
Name_Map name_map_S19770C14[] = {
  NSPAIR(_ZN9S19770C14C1Ev),
  NSPAIR(_ZN9S19770C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C13;
extern VTBL_ENTRY _ZTI9S19770C13[];
extern  VTBL_ENTRY _ZTV9S19770C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C13[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C15;
extern VTBL_ENTRY _ZTI9S19770C15[];
extern  VTBL_ENTRY _ZTV9S19770C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C15[];
extern Class_Descriptor cd_S19770C16;
extern VTBL_ENTRY _ZTI9S19770C16[];
extern  VTBL_ENTRY _ZTV9S19770C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C16[];
static Base_Class bases_S19770C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C5,    ABISELECT(4560,2488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C3,    ABISELECT(5024,2744), //bcp->offset
    26, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5392,2940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C9,    ABISELECT(4560,2488), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19770C13,    ABISELECT(4464,2432), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19770C3,    ABISELECT(5408,2948), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5776,3144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    ABISELECT(5408,2948), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19770C15,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19770C16,    ABISELECT(4328,2340), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19770C14[];
extern void _ZN9S19770C14D1Ev();
extern void _ZN9S19770C14D0Ev();
extern void _ZN9S19770C143v11Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev)();
extern void ABISELECT(_ZThn5408_N9S19770C14D1Ev,_ZThn2948_N9S19770C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev)();
extern void ABISELECT(_ZThn5408_N9S19770C14D0Ev,_ZThn2948_N9S19770C14D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY vtc_S19770C14[] = {
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN9S19770C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
  ABISELECT(696,404),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2488),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  0,
  ABISELECT(-5024,-2744),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  ABISELECT(-5408,-2948),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2948),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
extern VTBL_ENTRY _ZTV9S19770C14[];
extern void _ZN9S19770C15D1Ev();
extern void _ZN9S19770C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C15__9S19770C14[] = {
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN9S19770C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C15__9S19770C14[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C15__9S19770C14[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2488),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C15__9S19770C14[] = {
  0,
  ABISELECT(-5024,-2744),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev)();
extern void ABISELECT(_ZThn5408_N9S19770C15D1Ev,_ZThn2948_N9S19770C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev)();
extern void ABISELECT(_ZThn5408_N9S19770C15D0Ev,_ZThn2948_N9S19770C15D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C15__9S19770C14[] = {
  0,
  ABISELECT(-5408,-2948),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2948),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C16__9S19770C14[] = {
  ABISELECT(696,404),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C16__9S19770C14[] = {
  0,
  ABISELECT(-696,-404),
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C14[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C13__9S19770C14[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C13__9S19770C14[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C14[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__9S19770C14[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C14[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12__9S19770C14[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12__9S19770C14[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C12__9S19770C14[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTT_ENTRY vtt_S19770C14[] = {
  {&(_ZTV9S19770C14[7]),  7,43},
  {&(_tg__ZTV9S19770C15__9S19770C14[7]),  7,9},
  {&(_tg__ZTV9S19770C13__9S19770C15__9S19770C14[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C15__9S19770C14[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C15__9S19770C14[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C15__9S19770C14[9]),  9,13},
  {&(_tg__ZTV9S19770C16__9S19770C14[3]),  3,3},
  {&(_tg__ZTV8S19770C3__9S19770C16__9S19770C14[3]),  3,4},
  {&(_ZTV9S19770C14[18]),  18,43},
  {&(_ZTV9S19770C14[24]),  24,43},
  {&(_ZTV9S19770C14[29]),  29,43},
  {&(_ZTV9S19770C14[39]),  39,43},
  {&(_ZTV9S19770C14[13]),  13,43},
  {&(_tg__ZTV9S19770C13__9S19770C14[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C13__9S19770C14[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C13__9S19770C14[3]),  3,4},
  {&(_tg__ZTV8S19770C9__9S19770C14[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__9S19770C14[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C14[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C12__9S19770C14[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C12__9S19770C14[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C12__9S19770C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19770C14[];
extern  VTBL_ENTRY _ZTV9S19770C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C14[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19770C15D0Ev,_ZThn2948_N9S19770C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19770C15D1Ev,_ZThn2948_N9S19770C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19770C14D0Ev,_ZThn2948_N9S19770C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19770C14D1Ev,_ZThn2948_N9S19770C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19770C14 = {  "S19770C14", // class name
  bases_S19770C14, 10,
  &(vtc_S19770C14[0]), // expected_vtbl_contents
  &(vtt_S19770C14[0]), // expected_vtt_contents
  ABISELECT(5888,3216), // object size
  NSPAIRA(_ZTI9S19770C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19770C14),43, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19770C14),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C17  : S19770C12 {
  int s19770c17f0;
  ::S20176C3_nt s19770c17f1;
  void *s19770c17f2;
  int s19770c17f3;
  char s19770c17f4[8];
  short s19770c17f5;
  int s19770c17f6;
  virtual  ~S19770C17(); // _ZN9S19770C17D2Ev
  S19770C17(); // tgen
};
//SIG(-1 S19770C17) C1{ BC2{ VBC3{ VBC4{ BC5{ v1 Fi Fp FC6{ m Fp[2]}} VBC7{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v3 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC7 BC6 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC8 Fp Fi Fc[8] Fs Fi}


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

static void Test_S19770C17()
{
  extern Class_Descriptor cd_S19770C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,205)];
    init_test(&cd_S19770C17, buf);
    S19770C17 *dp, &lv = *(dp=new (buf) S19770C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,816), "sizeof(S19770C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C17)");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*), ABISELECT(624,356), "S19770C17");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(1088,612), "S19770C17");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(1456,808), "S19770C17");
    check_base_class_offset(lv, (S19770C9*)(S19770C13*), ABISELECT(624,356), "S19770C17");
    check_base_class_offset(lv, (S19770C13*)(S19770C12*), ABISELECT(520,300), "S19770C17");
    /*is_ambiguous_... S19770C12::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*), 0, "S19770C17");
    /*is_ambiguous_... S19770C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*), ABISELECT(368,196), "S19770C17");
    check_base_class_offset(lv, (S19770C12*), 0, "S19770C17");
    check_field_offset(lv, s19770c17f0, ABISELECT(480,268), "S19770C17.s19770c17f0");
    check_field_offset(lv, s19770c17f1, ABISELECT(484,272), "S19770C17.s19770c17f1");
    check_field_offset(lv, s19770c17f2, ABISELECT(488,276), "S19770C17.s19770c17f2");
    check_field_offset(lv, s19770c17f3, ABISELECT(496,280), "S19770C17.s19770c17f3");
    check_field_offset(lv, s19770c17f4, ABISELECT(500,284), "S19770C17.s19770c17f4");
    check_field_offset(lv, s19770c17f5, ABISELECT(508,292), "S19770C17.s19770c17f5");
    check_field_offset(lv, s19770c17f6, ABISELECT(512,296), "S19770C17.s19770c17f6");
    test_class_info(&lv, &cd_S19770C17);
    dp->~S19770C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C17(Test_S19770C17, "S19770C17", ABISELECT(1472,816));

#else // __cplusplus

extern void _ZN9S19770C17C1Ev();
extern void _ZN9S19770C17D2Ev();
Name_Map name_map_S19770C17[] = {
  NSPAIR(_ZN9S19770C17C1Ev),
  NSPAIR(_ZN9S19770C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C13;
extern VTBL_ENTRY _ZTI9S19770C13[];
extern  VTBL_ENTRY _ZTV9S19770C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C13[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
static Base_Class bases_S19770C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C5,    ABISELECT(624,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C3,    ABISELECT(1088,612), //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
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(1456,808), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C9,    ABISELECT(624,356), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19770C13,    ABISELECT(520,300), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19770C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19770C17[];
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C17D1Ev();
extern void _ZN9S19770C17D0Ev();
extern void _ZN9S19770C122v6Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY vtc_S19770C17[] = {
  ABISELECT(1456,808),
  ABISELECT(1088,612),
  ABISELECT(624,356),
  ABISELECT(520,300),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C17[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C17D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-520,-300),
  (VTBL_ENTRY)&(_ZTI9S19770C17[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-624,-356),
  (VTBL_ENTRY)&(_ZTI9S19770C17[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  0,
  ABISELECT(-1088,-612),
  (VTBL_ENTRY)&(_ZTI9S19770C17[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern VTBL_ENTRY _ZTV9S19770C17[];
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C17[] = {
  ABISELECT(1456,808),
  ABISELECT(1088,612),
  ABISELECT(624,356),
  ABISELECT(520,300),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12__9S19770C17[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-520,-300),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12__9S19770C17[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-624,-356),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C12__9S19770C17[] = {
  0,
  ABISELECT(-1088,-612),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C17[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C13__9S19770C17[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C13__9S19770C17[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C17[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__9S19770C17[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTT_ENTRY vtt_S19770C17[] = {
  {&(_ZTV9S19770C17[6]),  6,27},
  {&(_tg__ZTV9S19770C12__9S19770C17[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C12__9S19770C17[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C12__9S19770C17[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C12__9S19770C17[3]),  3,4},
  {&(_ZTV9S19770C17[15]),  15,27},
  {&(_ZTV9S19770C17[21]),  21,27},
  {&(_ZTV9S19770C17[26]),  26,27},
  {&(_tg__ZTV9S19770C13__9S19770C17[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C13__9S19770C17[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C13__9S19770C17[3]),  3,4},
  {&(_tg__ZTV8S19770C9__9S19770C17[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__9S19770C17[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19770C17[];
extern  VTBL_ENTRY _ZTV9S19770C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C17[];
Class_Descriptor cd_S19770C17 = {  "S19770C17", // class name
  bases_S19770C17, 8,
  &(vtc_S19770C17[0]), // expected_vtbl_contents
  &(vtt_S19770C17[0]), // expected_vtt_contents
  ABISELECT(1472,816), // object size
  NSPAIRA(_ZTI9S19770C17),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19770C17),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19770C17),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C18  : S19770C12 , S19770C14 , virtual S20177C15 {
  int s19770c18f0;
  void *s19770c18f1;
  short s19770c18f2;
  void *s19770c18f3[2];
  char s19770c18f4[8];
  ~S19770C18(); // tgen
  S19770C18(); // tgen
};
//SIG(-1 S19770C18) C1{ BC2{ VBC3{ VBC4{ BC5{ v1 Fi Fp FC6{ m Fp[2]}} VBC7{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v3 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC7 BC6 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC9{ BC10{ VBC3 VBC2 vd Fl Fp FC4 Fp Fs Fl Fi FL FC4[4] Fi} BC11{ VBC7 Fp Fs Fl Fi:6 Fp[2]} vd v5 FL FD FC8 Fi[9] Fs Fc:5} VBC12{ m Fl FC6[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]}


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

static void Test_S19770C18()
{
  extern Class_Descriptor cd_S19770C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(412,899)];
    init_test(&cd_S19770C18, buf);
    S19770C18 *dp, &lv = *(dp=new (buf) S19770C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6576,3592), "sizeof(S19770C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C18)");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*), ABISELECT(5088,2784), "S19770C18");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(5552,3040), "S19770C18");
    check_base_class_offset(lv, (S19770C3*)(S19770C16*)(S19770C14*), ABISELECT(5552,3040), "S19770C18");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(5920,3236), "S19770C18");
    check_base_class_offset(lv, (S19770C9*)(S19770C13*), ABISELECT(5088,2784), "S19770C18");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C12*), ABISELECT(4984,2728), "S19770C18");
    check_base_class_offset(lv, (S19770C13*)(S19770C15*)(S19770C14*), ABISELECT(4984,2728), "S19770C18");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C12*), ABISELECT(4984,2728), "S19770C18");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*), 0, "S19770C18");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*), ABISELECT(368,196), "S19770C18");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C12*), 0, "S19770C18");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*), ABISELECT(5936,3244), "S19770C18");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*), ABISELECT(6304,3440), "S19770C18");
    check_base_class_offset(lv, (S19770C12*)(S19770C15*)(S19770C14*), ABISELECT(5936,3244), "S19770C18");
    check_base_class_offset(lv, (S19770C15*)(S19770C14*), ABISELECT(480,268), "S19770C18");
    check_base_class_offset(lv, (S19770C16*)(S19770C14*), ABISELECT(4808,2608), "S19770C18");
    check_base_class_offset(lv, (S19770C14*), ABISELECT(480,268), "S19770C18");
    check_base_class_offset(lv, (S20177C15*), ABISELECT(6416,3512), "S19770C18");
    check_field_offset(lv, s19770c18f0, ABISELECT(4940,2700), "S19770C18.s19770c18f0");
    check_field_offset(lv, s19770c18f1, ABISELECT(4944,2704), "S19770C18.s19770c18f1");
    check_field_offset(lv, s19770c18f2, ABISELECT(4952,2708), "S19770C18.s19770c18f2");
    check_field_offset(lv, s19770c18f3, ABISELECT(4960,2712), "S19770C18.s19770c18f3");
    check_field_offset(lv, s19770c18f4, ABISELECT(4976,2720), "S19770C18.s19770c18f4");
    test_class_info(&lv, &cd_S19770C18);
    dp->~S19770C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C18(Test_S19770C18, "S19770C18", ABISELECT(6576,3592));

#else // __cplusplus

extern void _ZN9S19770C18C1Ev();
extern void _ZN9S19770C18D1Ev();
Name_Map name_map_S19770C18[] = {
  NSPAIR(_ZN9S19770C18C1Ev),
  NSPAIR(_ZN9S19770C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C13;
extern VTBL_ENTRY _ZTI9S19770C13[];
extern  VTBL_ENTRY _ZTV9S19770C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C13[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C15;
extern VTBL_ENTRY _ZTI9S19770C15[];
extern  VTBL_ENTRY _ZTV9S19770C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C15[];
extern Class_Descriptor cd_S19770C16;
extern VTBL_ENTRY _ZTI9S19770C16[];
extern  VTBL_ENTRY _ZTV9S19770C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C16[];
extern Class_Descriptor cd_S19770C14;
extern VTBL_ENTRY _ZTI9S19770C14[];
extern  VTBL_ENTRY _ZTV9S19770C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C14[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
static Base_Class bases_S19770C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C5,    ABISELECT(5088,2784), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C3,    ABISELECT(5552,3040), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5920,3236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C9,    ABISELECT(5088,2784), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19770C13,    ABISELECT(4984,2728), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19770C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19770C3,    ABISELECT(5936,3244), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(6304,3440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    ABISELECT(5936,3244), //bcp->offset
    42, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19770C15,    ABISELECT(480,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19770C16,    ABISELECT(4808,2608), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19770C14,    ABISELECT(480,268), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C15,    ABISELECT(6416,3512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19770C18[];
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C18D1Ev();
extern void _ZN9S19770C18D0Ev();
extern void _ZN9S19770C122v6Ev();
extern void ABISELECT(_ZThn480_N9S19770C18D1Ev,_ZThn268_N9S19770C18D1Ev)();
extern void ABISELECT(_ZThn480_N9S19770C18D0Ev,_ZThn268_N9S19770C18D0Ev)();
extern void _ZN9S19770C143v11Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C18D1Ev,_ZTv0_n32_N9S19770C18D1Ev)();
extern void ABISELECT(_ZThn5936_N9S19770C18D1Ev,_ZThn3244_N9S19770C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C18D0Ev,_ZTv0_n32_N9S19770C18D0Ev)();
extern void ABISELECT(_ZThn5936_N9S19770C18D0Ev,_ZThn3244_N9S19770C18D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY vtc_S19770C18[] = {
  ABISELECT(6416,3512),
  ABISELECT(5936,3244),
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C18D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S19770C18D1Ev,_ZThn268_N9S19770C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S19770C18D0Ev,_ZThn268_N9S19770C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
  ABISELECT(744,432),
  ABISELECT(-4808,-2608),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  0,
  ABISELECT(-5552,-3040),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  ABISELECT(-5936,-3244),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5936,-3244),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C18D1Ev,_ZTv0_n32_N9S19770C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C18D0Ev,_ZTv0_n32_N9S19770C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
extern VTBL_ENTRY _ZTV9S19770C18[];
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__A__9S19770C18[] = {
  ABISELECT(5920,3236),
  ABISELECT(5552,3040),
  ABISELECT(5088,2784),
  ABISELECT(4984,2728),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12__A__9S19770C18[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2728),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12__A__9S19770C18[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2784),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C12__A__9S19770C18[] = {
  0,
  ABISELECT(-5552,-3040),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN9S19770C14D1Ev();
extern void _ZN9S19770C14D0Ev();
extern void _ZN9S19770C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C14__9S19770C18[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN9S19770C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
};
extern void _ZN9S19770C15D1Ev();
extern void _ZN9S19770C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C159S19770C14__9S19770C18[] = {
  ABISELECT(5456,2976),
  ABISELECT(5440,2968),
  ABISELECT(5072,2772),
  ABISELECT(4608,2516),
  ABISELECT(4504,2460),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN9S19770C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C159S19770C14__9S19770C18[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C159S19770C14__9S19770C18[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C159S19770C14__9S19770C18[] = {
  0,
  ABISELECT(-5072,-2772),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev)();
extern void ABISELECT(_ZThn5456_N9S19770C15D1Ev,_ZThn2976_N9S19770C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev)();
extern void ABISELECT(_ZThn5456_N9S19770C15D0Ev,_ZThn2976_N9S19770C15D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C159S19770C14__9S19770C18[] = {
  0,
  ABISELECT(-5456,-2976),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2976),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C169S19770C14__9S19770C18[] = {
  ABISELECT(744,432),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C169S19770C14__9S19770C18[] = {
  0,
  ABISELECT(-744,-432),
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C14__9S19770C18[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2460),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C14__9S19770C18[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2516),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C14__9S19770C18[] = {
  0,
  ABISELECT(-5072,-2772),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev)();
extern void ABISELECT(_ZThn5456_N9S19770C14D1Ev,_ZThn2976_N9S19770C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev)();
extern void ABISELECT(_ZThn5456_N9S19770C14D0Ev,_ZThn2976_N9S19770C14D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C14__9S19770C18[] = {
  0,
  ABISELECT(-5456,-2976),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2976),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C16__9S19770C14__9S19770C18[] = {
  ABISELECT(744,432),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C18[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C13__9S19770C18[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C13__9S19770C18[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C18[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__9S19770C18[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__A1__9S19770C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12__A1__9S19770C18[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12__A1__9S19770C18[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C12__A1__9S19770C18[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTT_ENTRY vtt_S19770C18[] = {
  {&(_ZTV9S19770C18[8]),  8,55},
  {&(_tg__ZTV9S19770C12__A__9S19770C18[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C12__A__9S19770C18[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C12__A__9S19770C18[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C12__A__9S19770C18[3]),  3,4},
  {&(_tg__ZTV9S19770C14__9S19770C18[7]),  7,10},
  {&(_tg__ZTV9S19770C159S19770C14__9S19770C18[7]),  7,9},
  {&(_tg__ZTV9S19770C13__9S19770C159S19770C14__9S19770C18[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C159S19770C14__9S19770C18[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C159S19770C14__9S19770C18[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C159S19770C14__9S19770C18[9]),  9,13},
  {&(_tg__ZTV9S19770C169S19770C14__9S19770C18[3]),  3,3},
  {&(_tg__ZTV8S19770C3__9S19770C169S19770C14__9S19770C18[3]),  3,4},
  {&(_tg__ZTV9S19770C13__9S19770C14__9S19770C18[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C14__9S19770C18[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C14__9S19770C18[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C14__9S19770C18[9]),  9,13},
  {&(_tg__ZTV9S19770C16__9S19770C14__9S19770C18[3]),  3,3},
  {&(_ZTV9S19770C18[30]),  30,55},
  {&(_ZTV9S19770C18[36]),  36,55},
  {&(_ZTV9S19770C18[41]),  41,55},
  {&(_ZTV9S19770C18[19]),  19,55},
  {&(_ZTV9S19770C18[51]),  51,55},
  {&(_ZTV9S19770C18[25]),  25,55},
  {&(_tg__ZTV9S19770C13__9S19770C18[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C13__9S19770C18[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C13__9S19770C18[3]),  3,4},
  {&(_tg__ZTV8S19770C9__9S19770C18[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__9S19770C18[3]),  3,4},
  {&(_tg__ZTV9S19770C12__A1__9S19770C18[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C12__A1__9S19770C18[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C12__A1__9S19770C18[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C12__A1__9S19770C18[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19770C18[];
extern  VTBL_ENTRY _ZTV9S19770C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C18[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S19770C14D0Ev,_ZThn2976_N9S19770C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S19770C14D1Ev,_ZThn2976_N9S19770C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S19770C15D0Ev,_ZThn2976_N9S19770C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S19770C15D1Ev,_ZThn2976_N9S19770C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C18D0Ev,_ZTv0_n32_N9S19770C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S19770C18D0Ev,_ZThn3244_N9S19770C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C18D1Ev,_ZTv0_n32_N9S19770C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S19770C18D1Ev,_ZThn3244_N9S19770C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19770C18 = {  "S19770C18", // class name
  bases_S19770C18, 15,
  &(vtc_S19770C18[0]), // expected_vtbl_contents
  &(vtt_S19770C18[0]), // expected_vtt_contents
  ABISELECT(6576,3592), // object size
  NSPAIRA(_ZTI9S19770C18),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19770C18),55, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19770C18),33, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C6  : virtual S19770C7 , virtual S19770C14 , virtual S19770C17 , S19770C18 {
  ::S19770C9 s19770c6f0[10];
  int s19770c6f1[9];
  ::S20176C3_nt s19770c6f2;
  int s19770c6f3;
  void *s19770c6f4;
  long double s19770c6f5[4];
  char s19770c6f6[5];
  ::S20177C15 s19770c6f7;
  long s19770c6f8;
  virtual  ~S19770C6(); // _ZN8S19770C6D2Ev
  virtual void  v12(); // _ZN8S19770C63v12Ev
  S19770C6(); // tgen
};
//SIG(-1 S19770C6) C1{ VBC2{ BC3{ VBC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC5 BC6{ BC4 VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} BC7 vd v5 FL:25 Fp Fi[3] FC5} VBC6 VBC9{ VBC10{ VBC7 VBC11{ VBC12{ VBC6 Fi Fc Fp[6] Fi[2] Fp FC5} BC7 BC5 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v7 v8 FC11[7] Fi Fs Fi FC6 Fl[9]} vd Fc Fi[3]} vd v9 v10 FD[2] FC8 Fi:16 Fi:3} VBC13{ BC14{ VBC12 VBC11 vd Fl Fp FC6 Fp Fs Fl Fi FL FC6[4] Fi} BC15{ VBC7 Fp Fs Fl Fi:6 Fp[2]} vd v11 FL FD FC8 Fi[9] Fs Fc:5} VBC16{ BC11 vd Fi FC8 Fp Fi Fc[8] Fs Fi} BC17{ BC11 BC13 VBC18{ m Fl FC5[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} vd v1 FC6[10] Fi[9] FC8 Fi Fp FD[4] Fc[5] FC18 Fl}


 S19770C6 ::~S19770C6(){ note_dtor("S19770C6", this);}
void  S19770C6 ::v12(){vfunc_called(this, "_ZN8S19770C63v12Ev");}
S19770C6 ::S19770C6(){ note_ctor("S19770C6", this);} // tgen

static void Test_S19770C6()
{
  extern Class_Descriptor cd_S19770C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2017,4416)];
    init_test(&cd_S19770C6, buf);
    S19770C6 *dp, &lv = *(dp=new (buf) S19770C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32256,17660), "sizeof(S19770C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C6)");
    /*is_ambiguous_... S19770C8::S19770C5 */ AMB_check_base_class_offset(lv, (S19770C5*)(S19770C8*)(S19770C7*), ABISELECT(14696,8024), "S19770C6");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C8*)(S19770C7*), ABISELECT(14736,8044), "S19770C6");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*)(S19770C8*)(S19770C7*), ABISELECT(14736,8044), "S19770C6");
    /*is_ambiguous_... S19770C6::S19770C9 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(14736,8044), "S19770C6");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*)(S19770C8*)(S19770C7*), ABISELECT(13776,7516), "S19770C6");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*)(S19770C8*)(S19770C7*), ABISELECT(14752,8052), "S19770C6");
    /*is_ambiguous_... S19770C6::S19770C9 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(14752,8052), "S19770C6");
    /*is_ambiguous_... S19770C11::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C11*), ABISELECT(14752,8052), "S19770C6");
    /*is_ambiguous_... S19770C6::S19770C14 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C16*)(S19770C14*), ABISELECT(14752,8052), "S19770C6");
    check_base_class_offset(lv, (S19770C3*)(S19770C16*)(S19770C14*)(S19770C18*), ABISELECT(14752,8052), "S19770C6");
    check_base_class_offset(lv, (S19770C9*)(S19770C8*)(S19770C7*), ABISELECT(13776,7516), "S19770C6");
    /*is_ambiguous_... S19770C8::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C8*)(S19770C7*), ABISELECT(14240,7772), "S19770C6");
    check_base_class_offset(lv, (S19770C8*)(S19770C7*), ABISELECT(13776,7516), "S19770C6");
    /*is_ambiguous_... S19770C6::S19770C9 */ AMB_check_base_class_offset(lv, (S19770C5*)(S19770C9*), ABISELECT(15120,8248), "S19770C6");
    /*is_ambiguous_... S19770C7::S19770C9 */ AMB_check_base_class_offset(lv, (S19770C9*)(S19770C7*), ABISELECT(15120,8248), "S19770C6");
    check_base_class_offset(lv, (S19770C9*)(S19770C13*), ABISELECT(15120,8248), "S19770C6");
    /*is_ambiguous_... S19770C6::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C12*), ABISELECT(27008,14792), "S19770C6");
    /*is_ambiguous_... S19770C6::S19770C14 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C15*)(S19770C14*), ABISELECT(27008,14792), "S19770C6");
    check_base_class_offset(lv, (S19770C13*)(S19770C12*)(S19770C17*), ABISELECT(27008,14792), "S19770C6");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C12*)(S19770C18*), ABISELECT(27008,14792), "S19770C6");
    check_base_class_offset(lv, (S19770C13*)(S19770C15*)(S19770C14*)(S19770C18*), ABISELECT(27008,14792), "S19770C6");
    /*is_ambiguous_... S19770C6::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*), ABISELECT(26528,14524), "S19770C6");
    /*is_ambiguous_... S19770C6::S19770C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*), ABISELECT(26896,14720), "S19770C6");
    check_base_class_offset(lv, (S19770C12*)(S19770C11*), ABISELECT(26528,14524), "S19770C6");
    /*is_ambiguous_... S19770C6::S19770C14 */ AMB_check_base_class_offset(lv, (S19770C12*)(S19770C15*)(S19770C14*), ABISELECT(26528,14524), "S19770C6");
    check_base_class_offset(lv, (S19770C12*)(S19770C15*)(S19770C14*)(S19770C18*), ABISELECT(26528,14524), "S19770C6");
    check_base_class_offset(lv, (S19770C11*)(S19770C10*), ABISELECT(15600,8524), "S19770C6");
    check_base_class_offset(lv, (S19770C10*)(S19770C7*), ABISELECT(15576,8504), "S19770C6");
    check_base_class_offset(lv, (S19770C7*), ABISELECT(13776,7516), "S19770C6");
    /*is_ambiguous_... S19770C6::S19770C14 */ AMB_check_base_class_offset(lv, (S19770C15*)(S19770C14*), ABISELECT(27104,14848), "S19770C6");
    /*is_ambiguous_... S19770C6::S19770C14 */ AMB_check_base_class_offset(lv, (S19770C16*)(S19770C14*), ABISELECT(31432,17188), "S19770C6");
    /*is_ambiguous_... S19770C6::S19770C14 */ AMB_check_base_class_offset(lv, (S19770C14*), ABISELECT(27104,14848), "S19770C6");
    /*is_ambiguous_... S19770C12::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*)(S19770C17*), ABISELECT(31568,17280), "S19770C6");
    /*is_ambiguous_... S19770C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*)(S19770C17*), ABISELECT(31936,17476), "S19770C6");
    check_base_class_offset(lv, (S19770C12*)(S19770C17*), ABISELECT(31568,17280), "S19770C6");
    check_base_class_offset(lv, (S19770C17*), ABISELECT(31568,17280), "S19770C6");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*)(S19770C18*), 0, "S19770C6");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*)(S19770C18*), ABISELECT(368,196), "S19770C6");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C12*)(S19770C18*), 0, "S19770C6");
    check_base_class_offset(lv, (S19770C15*)(S19770C14*)(S19770C18*), ABISELECT(480,268), "S19770C6");
    check_base_class_offset(lv, (S19770C16*)(S19770C14*)(S19770C18*), ABISELECT(4808,2608), "S19770C6");
    check_base_class_offset(lv, (S19770C14*)(S19770C18*), ABISELECT(480,268), "S19770C6");
    check_base_class_offset(lv, (S20177C15*)(S19770C18*), ABISELECT(32088,17580), "S19770C6");
    check_base_class_offset(lv, (S19770C18*), 0, "S19770C6");
    check_field_offset(lv, s19770c6f0, ABISELECT(4992,2728), "S19770C6.s19770c6f0");
    check_field_offset(lv, s19770c6f1, ABISELECT(13472,7328), "S19770C6.s19770c6f1");
    check_field_offset(lv, s19770c6f2, ABISELECT(13508,7364), "S19770C6.s19770c6f2");
    check_field_offset(lv, s19770c6f3, ABISELECT(13512,7368), "S19770C6.s19770c6f3");
    check_field_offset(lv, s19770c6f4, ABISELECT(13520,7372), "S19770C6.s19770c6f4");
    check_field_offset(lv, s19770c6f5, ABISELECT(13536,7376), "S19770C6.s19770c6f5");
    check_field_offset(lv, s19770c6f6, ABISELECT(13600,7424), "S19770C6.s19770c6f6");
    check_field_offset(lv, s19770c6f7, ABISELECT(13608,7432), "S19770C6.s19770c6f7");
    check_field_offset(lv, s19770c6f8, ABISELECT(13768,7512), "S19770C6.s19770c6f8");
    test_class_info(&lv, &cd_S19770C6);
    dp->~S19770C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C6(Test_S19770C6, "S19770C6", ABISELECT(32256,17660));

#else // __cplusplus

extern void _ZN8S19770C6C1Ev();
extern void _ZN8S19770C6D2Ev();
Name_Map name_map_S19770C6[] = {
  NSPAIR(_ZN8S19770C6C1Ev),
  NSPAIR(_ZN8S19770C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S19770C8;
extern VTBL_ENTRY _ZTI8S19770C8[];
extern  VTBL_ENTRY _ZTV8S19770C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C8[];
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C13;
extern VTBL_ENTRY _ZTI9S19770C13[];
extern  VTBL_ENTRY _ZTV9S19770C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C13[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C11;
extern VTBL_ENTRY _ZTI9S19770C11[];
extern  VTBL_ENTRY _ZTV9S19770C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C11[];
extern Class_Descriptor cd_S19770C10;
extern VTBL_ENTRY _ZTI9S19770C10[];
extern  VTBL_ENTRY _ZTV9S19770C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C10[];
extern Class_Descriptor cd_S19770C7;
extern VTBL_ENTRY _ZTI8S19770C7[];
extern  VTBL_ENTRY _ZTV8S19770C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C7[];
extern Class_Descriptor cd_S19770C15;
extern VTBL_ENTRY _ZTI9S19770C15[];
extern  VTBL_ENTRY _ZTV9S19770C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C15[];
extern Class_Descriptor cd_S19770C16;
extern VTBL_ENTRY _ZTI9S19770C16[];
extern  VTBL_ENTRY _ZTV9S19770C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C16[];
extern Class_Descriptor cd_S19770C14;
extern VTBL_ENTRY _ZTI9S19770C14[];
extern  VTBL_ENTRY _ZTV9S19770C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C14[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C17;
extern VTBL_ENTRY _ZTI9S19770C17[];
extern  VTBL_ENTRY _ZTV9S19770C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C17[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C15;
extern VTBL_ENTRY _ZTI9S19770C15[];
extern  VTBL_ENTRY _ZTV9S19770C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C15[];
extern Class_Descriptor cd_S19770C16;
extern VTBL_ENTRY _ZTI9S19770C16[];
extern  VTBL_ENTRY _ZTV9S19770C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C16[];
extern Class_Descriptor cd_S19770C14;
extern VTBL_ENTRY _ZTI9S19770C14[];
extern  VTBL_ENTRY _ZTV9S19770C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C14[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
extern Class_Descriptor cd_S19770C18;
extern VTBL_ENTRY _ZTI9S19770C18[];
extern  VTBL_ENTRY _ZTV9S19770C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C18[];
static Base_Class bases_S19770C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C5,    ABISELECT(14696,8024), //bcp->offset
    59, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(14736,8044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C5,    ABISELECT(13776,7516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19770C3,    ABISELECT(14752,8052), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19770C9,    ABISELECT(13776,7516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19770C3,    ABISELECT(14240,7772), //bcp->offset
    56, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19770C8,    ABISELECT(13776,7516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19770C5,    ABISELECT(15120,8248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19770C9,    ABISELECT(15120,8248), //bcp->offset
    67, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19770C13,    ABISELECT(27008,14792), //bcp->offset
    113, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19770C3,    ABISELECT(26528,14524), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(26896,14720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    ABISELECT(26528,14524), //bcp->offset
    100, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19770C11,    ABISELECT(15600,8524), //bcp->offset
    86, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19770C10,    ABISELECT(15576,8504), //bcp->offset
    75, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19770C7,    ABISELECT(13776,7516), //bcp->offset
    32, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19770C15,    ABISELECT(27104,14848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19770C16,    ABISELECT(31432,17188), //bcp->offset
    130, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19770C14,    ABISELECT(27104,14848), //bcp->offset
    118, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19770C3,    ABISELECT(31568,17280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(31936,17476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    ABISELECT(31568,17280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19770C17,    ABISELECT(31568,17280), //bcp->offset
    133, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19770C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19770C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19770C15,    ABISELECT(480,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19770C16,    ABISELECT(4808,2608), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19770C14,    ABISELECT(480,268), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20177C15,    ABISELECT(32088,17580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S19770C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19770C6[];
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C6D1Ev();
extern void _ZN8S19770C6D0Ev();
extern void _ZN9S19770C122v6Ev();
extern void _ZN8S19770C63v12Ev();
extern void ABISELECT(_ZThn480_N8S19770C6D1Ev,_ZThn268_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn480_N8S19770C6D0Ev,_ZThn268_N8S19770C6D0Ev)();
extern void _ZN9S19770C143v11Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void ABISELECT(_ZTv0_n104_N8S19770C6D1Ev,_ZTv0_n52_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn13776_N8S19770C6D1Ev,_ZThn7516_N8S19770C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19770C6D0Ev,_ZTv0_n52_N8S19770C6D0Ev)();
extern void ABISELECT(_ZThn13776_N8S19770C6D0Ev,_ZThn7516_N8S19770C6D0Ev)() __attribute__((weak));
extern void _ZN8S19770C82v5Ev();
extern void _ZN8S19770C72v9Ev();
extern void _ZN8S19770C73v10Ev();
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S19770C6D1Ev,_ZTv0_n36_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn15576_N8S19770C6D1Ev,_ZThn8504_N8S19770C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19770C6D0Ev,_ZTv0_n36_N8S19770C6D0Ev)();
extern void ABISELECT(_ZThn15576_N8S19770C6D0Ev,_ZThn8504_N8S19770C6D0Ev)() __attribute__((weak));
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19770C6D1Ev,_ZTv0_n40_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn15600_N8S19770C6D1Ev,_ZThn8524_N8S19770C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19770C6D0Ev,_ZTv0_n40_N8S19770C6D0Ev)();
extern void ABISELECT(_ZThn15600_N8S19770C6D0Ev,_ZThn8524_N8S19770C6D0Ev)() __attribute__((weak));
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn26528_N8S19770C6D1Ev,_ZThn14524_N8S19770C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev)();
extern void ABISELECT(_ZThn26528_N8S19770C6D0Ev,_ZThn14524_N8S19770C6D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn27104_N8S19770C6D1Ev,_ZThn14848_N8S19770C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev)();
extern void ABISELECT(_ZThn27104_N8S19770C6D0Ev,_ZThn14848_N8S19770C6D0Ev)() __attribute__((weak));
extern void _ZN9S19770C143v11Ev();
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn31568_N8S19770C6D1Ev,_ZThn17280_N8S19770C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev)();
extern void ABISELECT(_ZThn31568_N8S19770C6D0Ev,_ZThn17280_N8S19770C6D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY vtc_S19770C6[] = {
  ABISELECT(31568,17280),
  ABISELECT(27104,14848),
  ABISELECT(15600,8524),
  ABISELECT(15576,8504),
  ABISELECT(14696,8024),
  ABISELECT(13776,7516),
  ABISELECT(32088,17580),
  ABISELECT(26528,14524),
  ABISELECT(14736,8044),
  ABISELECT(14752,8052),
  ABISELECT(15120,8248),
  ABISELECT(27008,14792),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19770C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19770C6D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  (VTBL_ENTRY)&_ZN8S19770C63v12Ev,
  ABISELECT(26048,14256),
  ABISELECT(14256,7776),
  ABISELECT(14272,7784),
  ABISELECT(14640,7980),
  ABISELECT(26528,14524),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N8S19770C6D1Ev,_ZThn268_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N8S19770C6D0Ev,_ZThn268_N8S19770C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
  ABISELECT(9944,5444),
  ABISELECT(-4808,-2608),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  0,
  0,
  ABISELECT(464,256),
  0,
  ABISELECT(-13776,-7516),
  0,
  0,
  ABISELECT(13232,7276),
  ABISELECT(12752,7008),
  ABISELECT(1824,1008),
  ABISELECT(1800,988),
  ABISELECT(1344,732),
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  ABISELECT(-13776,-7516),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19770C6D1Ev,_ZTv0_n52_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19770C6D0Ev,_ZTv0_n52_N8S19770C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19770C82v5Ev,
  (VTBL_ENTRY)&_ZN8S19770C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19770C73v10Ev,
  ABISELECT(-14240,-7772),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  ABISELECT(-14696,-8024),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  0,
  ABISELECT(-14752,-8052),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-15120,-8248),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  ABISELECT(-15576,-8504),
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6288),
  ABISELECT(10952,6020),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  ABISELECT(-15576,-8504),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19770C6D1Ev,_ZTv0_n36_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19770C6D0Ev,_ZTv0_n36_N8S19770C6D0Ev),
  ABISELECT(-15600,-8524),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-848,-472),
  ABISELECT(-15600,-8524),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19770C6D1Ev,_ZTv0_n40_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19770C6D0Ev,_ZTv0_n40_N8S19770C6D0Ev),
  0,
  ABISELECT(-26528,-14524),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-26528,-14524),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-27008,-14792),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  0,
  ABISELECT(-27104,-14848),
  ABISELECT(-576,-324),
  ABISELECT(-12368,-6804),
  ABISELECT(-12352,-6796),
  ABISELECT(-11984,-6600),
  ABISELECT(-96,-56),
  ABISELECT(-27104,-14848),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
  ABISELECT(-16680,-9136),
  ABISELECT(-31432,-17188),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  0,
  ABISELECT(-31568,-17280),
  0,
  ABISELECT(-16832,-9236),
  ABISELECT(-16816,-9228),
  ABISELECT(-16448,-9032),
  ABISELECT(-4560,-2488),
  ABISELECT(-31568,-17280),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
extern VTBL_ENTRY _ZTV8S19770C6[];
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C18D1Ev();
extern void _ZN9S19770C18D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C18__8S19770C6[] = {
  ABISELECT(32088,17580),
  ABISELECT(26528,14524),
  ABISELECT(14736,8044),
  ABISELECT(14752,8052),
  ABISELECT(15120,8248),
  ABISELECT(27008,14792),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C18D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C129S19770C18__A2__8S19770C6[] = {
  ABISELECT(14736,8044),
  ABISELECT(14752,8052),
  ABISELECT(15120,8248),
  ABISELECT(27008,14792),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C129S19770C18__A2__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-27008,-14792),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C129S19770C18__A2__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-15120,-8248),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C129S19770C18__A2__8S19770C6[] = {
  0,
  ABISELECT(-14752,-8052),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN9S19770C14D1Ev();
extern void _ZN9S19770C14D0Ev();
extern void _ZN9S19770C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C149S19770C18__A1__8S19770C6[] = {
  ABISELECT(26048,14256),
  ABISELECT(14256,7776),
  ABISELECT(14272,7784),
  ABISELECT(14640,7980),
  ABISELECT(26528,14524),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN9S19770C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
};
extern void _ZN9S19770C15D1Ev();
extern void _ZN9S19770C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C159S19770C149S19770C18__A1__8S19770C6[] = {
  ABISELECT(26048,14256),
  ABISELECT(14256,7776),
  ABISELECT(14272,7784),
  ABISELECT(14640,7980),
  ABISELECT(26528,14524),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN9S19770C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C159S19770C149S19770C18__A1__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-26528,-14524),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C159S19770C149S19770C18__A1__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-14640,-7980),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C159S19770C149S19770C18__A1__8S19770C6[] = {
  0,
  ABISELECT(-14272,-7784),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev)();
extern void ABISELECT(_ZThn26048_N9S19770C15D1Ev,_ZThn14256_N9S19770C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev)();
extern void ABISELECT(_ZThn26048_N9S19770C15D0Ev,_ZThn14256_N9S19770C15D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C159S19770C149S19770C18__A1__8S19770C6[] = {
  0,
  ABISELECT(-26048,-14256),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-26048,-14256),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C169S19770C149S19770C18__A1__8S19770C6[] = {
  ABISELECT(9944,5444),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C169S19770C149S19770C18__A1__8S19770C6[] = {
  0,
  ABISELECT(-9944,-5444),
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C149S19770C18__A1__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-26528,-14524),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C149S19770C18__A1__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-14640,-7980),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C149S19770C18__A1__8S19770C6[] = {
  0,
  ABISELECT(-14272,-7784),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev)();
extern void ABISELECT(_ZThn26048_N9S19770C14D1Ev,_ZThn14256_N9S19770C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev)();
extern void ABISELECT(_ZThn26048_N9S19770C14D0Ev,_ZThn14256_N9S19770C14D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C149S19770C18__A1__8S19770C6[] = {
  0,
  ABISELECT(-26048,-14256),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-26048,-14256),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C16__9S19770C149S19770C18__A1__8S19770C6[] = {
  ABISELECT(9944,5444),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C18__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-27008,-14792),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C18__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-15120,-8248),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C18__8S19770C6[] = {
  0,
  ABISELECT(-14752,-8052),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void ABISELECT(_ZThn480_N9S19770C18D1Ev,_ZThn268_N9S19770C18D1Ev)();
extern void ABISELECT(_ZThn480_N9S19770C18D0Ev,_ZThn268_N9S19770C18D0Ev)();
extern void _ZN9S19770C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C14__9S19770C18__8S19770C6[] = {
  ABISELECT(26048,14256),
  ABISELECT(14256,7776),
  ABISELECT(14272,7784),
  ABISELECT(14640,7980),
  ABISELECT(26528,14524),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S19770C18D1Ev,_ZThn268_N9S19770C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S19770C18D0Ev,_ZThn268_N9S19770C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C18D1Ev,_ZTv0_n32_N9S19770C18D1Ev)();
extern void ABISELECT(_ZThn26528_N9S19770C18D1Ev,_ZThn14524_N9S19770C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C18D0Ev,_ZTv0_n32_N9S19770C18D0Ev)();
extern void ABISELECT(_ZThn26528_N9S19770C18D0Ev,_ZThn14524_N9S19770C18D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__A1__9S19770C18__8S19770C6[] = {
  0,
  ABISELECT(-26528,-14524),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-26528,-14524),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C18D1Ev,_ZTv0_n32_N9S19770C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C18D0Ev,_ZTv0_n32_N9S19770C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C169S19770C14__9S19770C18__8S19770C6[] = {
  ABISELECT(9944,5444),
  ABISELECT(-4808,-2608),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C7D1Ev();
extern void _ZN8S19770C7D0Ev();
extern void _ZN8S19770C82v5Ev();
extern void _ZN8S19770C72v9Ev();
extern void _ZN8S19770C73v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C7__8S19770C6[] = {
  ABISELECT(13232,7276),
  ABISELECT(12752,7008),
  ABISELECT(1824,1008),
  ABISELECT(1800,988),
  ABISELECT(1344,732),
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19770C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19770C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19770C82v5Ev,
  (VTBL_ENTRY)&_ZN8S19770C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19770C73v10Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C8D1Ev();
extern void _ZN8S19770C8D0Ev();
extern void _ZN8S19770C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C88S19770C7__8S19770C6[] = {
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19770C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19770C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19770C82v5Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C98S19770C88S19770C7__8S19770C6[] = {
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C98S19770C88S19770C7__8S19770C6[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C5__8S19770C88S19770C7__8S19770C6[] = {
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C88S19770C7__8S19770C6[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C5__8S19770C7__8S19770C6[] = {
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C7__8S19770C6[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__A1__8S19770C7__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-1344,-732),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S19770C7D1Ev,_ZTv0_n36_N8S19770C7D1Ev)();
extern void ABISELECT(_ZThn1800_N8S19770C7D1Ev,_ZThn988_N8S19770C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19770C7D0Ev,_ZTv0_n36_N8S19770C7D0Ev)();
extern void ABISELECT(_ZThn1800_N8S19770C7D0Ev,_ZThn988_N8S19770C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19770C10__8S19770C7__8S19770C6[] = {
  ABISELECT(-1800,-988),
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6288),
  ABISELECT(10952,6020),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  ABISELECT(-1800,-988),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19770C7D1Ev,_ZTv0_n36_N8S19770C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19770C7D0Ev,_ZTv0_n36_N8S19770C7D0Ev),
};
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19770C7D1Ev,_ZTv0_n40_N8S19770C7D1Ev)();
extern void ABISELECT(_ZThn1824_N8S19770C7D1Ev,_ZThn1008_N8S19770C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19770C7D0Ev,_ZTv0_n40_N8S19770C7D0Ev)();
extern void ABISELECT(_ZThn1824_N8S19770C7D0Ev,_ZThn1008_N8S19770C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19770C11__8S19770C7__8S19770C6[] = {
  ABISELECT(-1824,-1008),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-848,-472),
  ABISELECT(-1824,-1008),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19770C7D1Ev,_ZTv0_n40_N8S19770C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19770C7D0Ev,_ZTv0_n40_N8S19770C7D0Ev),
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19770C7D1Ev,_ZTv0_n32_N8S19770C7D1Ev)();
extern void ABISELECT(_ZThn12752_N8S19770C7D1Ev,_ZThn7008_N8S19770C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C7D0Ev,_ZTv0_n32_N8S19770C7D0Ev)();
extern void ABISELECT(_ZThn12752_N8S19770C7D0Ev,_ZThn7008_N8S19770C7D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__8S19770C7__8S19770C6[] = {
  0,
  ABISELECT(-12752,-7008),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-12752,-7008),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C7D1Ev,_ZTv0_n32_N8S19770C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C7D0Ev,_ZTv0_n32_N8S19770C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__8S19770C7__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-13232,-7276),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__A1__8S19770C6[] = {
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__A1__8S19770C6[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN9S19770C10D1Ev();
extern void _ZN9S19770C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C10__8S19770C6[] = {
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6288),
  ABISELECT(10952,6020),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN9S19770C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C10D0Ev,
};
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N9S19770C10D1Ev,_ZTv0_n40_N9S19770C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19770C10D1Ev,_ZThn20_N9S19770C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19770C10D0Ev,_ZTv0_n40_N9S19770C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19770C10D0Ev,_ZThn20_N9S19770C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19770C11__9S19770C10__8S19770C6[] = {
  ABISELECT(-24,-20),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-848,-472),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19770C10D1Ev,_ZTv0_n40_N9S19770C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19770C10D0Ev,_ZTv0_n40_N9S19770C10D0Ev),
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C10__8S19770C6[] = {
  0,
  ABISELECT(824,452),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C10D1Ev,_ZTv0_n32_N9S19770C10D1Ev)();
extern void ABISELECT(_ZThn10952_N9S19770C10D1Ev,_ZThn6020_N9S19770C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C10D0Ev,_ZTv0_n32_N9S19770C10D0Ev)();
extern void ABISELECT(_ZThn10952_N9S19770C10D0Ev,_ZThn6020_N9S19770C10D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C10__8S19770C6[] = {
  0,
  ABISELECT(-10952,-6020),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-10952,-6020),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C10D1Ev,_ZTv0_n32_N9S19770C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C10D0Ev,_ZTv0_n32_N9S19770C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C10__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-11432,-6288),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C10__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(456,256),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void _ZN9S19770C11D1Ev();
extern void _ZN9S19770C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C11__8S19770C6[] = {
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-848,-472),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19770C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C11D0Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C11__8S19770C6[] = {
  0,
  ABISELECT(848,472),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev)();
extern void ABISELECT(_ZThn10928_N9S19770C11D1Ev,_ZThn6000_N9S19770C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev)();
extern void ABISELECT(_ZThn10928_N9S19770C11D0Ev,_ZThn6000_N9S19770C11D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C11__8S19770C6[] = {
  0,
  ABISELECT(-10928,-6000),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C11__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-11408,-6268),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C11__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(480,276),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__8S19770C6[] = {
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11408,6276),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C12__8S19770C6[] = {
  0,
  ABISELECT(11776,6472),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C13__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11888,6544),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C13__8S19770C6[] = {
  0,
  ABISELECT(12256,6740),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN9S19770C14D1Ev();
extern void _ZN9S19770C14D0Ev();
extern void _ZN9S19770C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C14__8S19770C6[] = {
  ABISELECT(-576,-324),
  ABISELECT(-12368,-6804),
  ABISELECT(-12352,-6796),
  ABISELECT(-11984,-6600),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN9S19770C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
};
extern void _ZN9S19770C15D1Ev();
extern void _ZN9S19770C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C159S19770C14__8S19770C6[] = {
  ABISELECT(-576,-324),
  ABISELECT(-12368,-6804),
  ABISELECT(-12352,-6796),
  ABISELECT(-11984,-6600),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN9S19770C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C159S19770C14__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C159S19770C14__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11984,6600),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C159S19770C14__8S19770C6[] = {
  0,
  ABISELECT(12352,6796),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev)();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C159S19770C14__8S19770C6[] = {
  0,
  ABISELECT(576,324),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C169S19770C14__8S19770C6[] = {
  ABISELECT(-16680,-9136),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C169S19770C14__8S19770C6[] = {
  0,
  ABISELECT(16680,9136),
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C14__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C14__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11984,6600),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C14__8S19770C6[] = {
  0,
  ABISELECT(12352,6796),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev)();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C14__8S19770C6[] = {
  0,
  ABISELECT(576,324),
  0,
  ABISELECT(-11792,-6480),
  ABISELECT(-11776,-6472),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C16__9S19770C14__8S19770C6[] = {
  ABISELECT(-16680,-9136),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C17D1Ev();
extern void _ZN9S19770C17D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C17__8S19770C6[] = {
  ABISELECT(-16832,-9236),
  ABISELECT(-16816,-9228),
  ABISELECT(-16448,-9032),
  ABISELECT(-4560,-2488),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C17[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C17D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C129S19770C17__A1__8S19770C6[] = {
  ABISELECT(-16832,-9236),
  ABISELECT(-16816,-9228),
  ABISELECT(-16448,-9032),
  ABISELECT(-4560,-2488),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C129S19770C17__A1__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(4560,2488),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C129S19770C17__A1__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(16448,9032),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C129S19770C17__A1__8S19770C6[] = {
  0,
  ABISELECT(16816,9228),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C17__8S19770C6[] = {
  ABISELECT(-12272,-6748),
  ABISELECT(-12256,-6740),
  ABISELECT(-11888,-6544),
  ABISELECT(4560,2488),
  (VTBL_ENTRY)&(_ZTI9S19770C17[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C17__8S19770C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(16448,9032),
  (VTBL_ENTRY)&(_ZTI9S19770C17[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C17__8S19770C6[] = {
  0,
  ABISELECT(16816,9228),
  (VTBL_ENTRY)&(_ZTI9S19770C17[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTT_ENTRY vtt_S19770C6[] = {
  {&(_ZTV8S19770C6[14]),  14,146},
  {&(_tg__ZTV9S19770C18__8S19770C6[8]),  8,12},
  {&(_tg__ZTV9S19770C129S19770C18__A2__8S19770C6[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C129S19770C18__A2__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C129S19770C18__A2__8S19770C6[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C129S19770C18__A2__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C149S19770C18__A1__8S19770C6[7]),  7,10},
  {&(_tg__ZTV9S19770C159S19770C149S19770C18__A1__8S19770C6[7]),  7,9},
  {&(_tg__ZTV9S19770C13__9S19770C159S19770C149S19770C18__A1__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C159S19770C149S19770C18__A1__8S19770C6[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C159S19770C149S19770C18__A1__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C159S19770C149S19770C18__A1__8S19770C6[9]),  9,13},
  {&(_tg__ZTV9S19770C169S19770C149S19770C18__A1__8S19770C6[3]),  3,3},
  {&(_tg__ZTV8S19770C3__9S19770C169S19770C149S19770C18__A1__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C13__9S19770C149S19770C18__A1__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C149S19770C18__A1__8S19770C6[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C149S19770C18__A1__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C149S19770C18__A1__8S19770C6[9]),  9,13},
  {&(_tg__ZTV9S19770C16__9S19770C149S19770C18__A1__8S19770C6[3]),  3,3},
  {&(_tg__ZTV9S19770C13__9S19770C18__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C18__8S19770C6[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C18__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C14__9S19770C18__8S19770C6[7]),  7,10},
  {&(_tg__ZTV9S19770C12__A1__9S19770C18__8S19770C6[9]),  9,13},
  {&(_tg__ZTV9S19770C169S19770C14__9S19770C18__8S19770C6[3]),  3,3},
  {&(_ZTV8S19770C6[49]),  49,146},
  {&(_ZTV8S19770C6[62]),  62,146},
  {&(_ZTV8S19770C6[66]),  66,146},
  {&(_ZTV8S19770C6[58]),  58,146},
  {&(_ZTV8S19770C6[73]),  73,146},
  {&(_ZTV8S19770C6[84]),  84,146},
  {&(_ZTV8S19770C6[96]),  96,146},
  {&(_ZTV8S19770C6[109]),  109,146},
  {&(_ZTV8S19770C6[118]),  118,146},
  {&(_ZTV8S19770C6[127]),  127,146},
  {&(_ZTV8S19770C6[133]),  133,146},
  {&(_ZTV8S19770C6[142]),  142,146},
  {&(_ZTV8S19770C6[26]),  26,146},
  {&(_ZTV8S19770C6[32]),  32,146},
  {&(_tg__ZTV8S19770C7__8S19770C6[10]),  10,17},
  {&(_tg__ZTV8S19770C88S19770C7__8S19770C6[5]),  5,10},
  {&(_tg__ZTV8S19770C98S19770C88S19770C7__8S19770C6[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C98S19770C88S19770C7__8S19770C6[3]),  3,4},
  {&(_tg__ZTV8S19770C5__8S19770C88S19770C7__8S19770C6[3]),  3,4},
  {&(_tg__ZTV8S19770C3__8S19770C88S19770C7__8S19770C6[3]),  3,4},
  {&(_tg__ZTV8S19770C5__8S19770C7__8S19770C6[3]),  3,4},
  {&(_tg__ZTV8S19770C3__8S19770C7__8S19770C6[3]),  3,4},
  {&(_tg__ZTV8S19770C9__A1__8S19770C7__8S19770C6[6]),  6,8},
  {&(_tg__ZTV9S19770C10__8S19770C7__8S19770C6[9]),  9,11},
  {&(_tg__ZTV9S19770C11__8S19770C7__8S19770C6[10]),  10,14},
  {&(_tg__ZTV9S19770C12__8S19770C7__8S19770C6[9]),  9,13},
  {&(_tg__ZTV9S19770C13__8S19770C7__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__A1__8S19770C6[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__A1__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C10__8S19770C6[8]),  8,10},
  {&(_tg__ZTV9S19770C11__9S19770C10__8S19770C6[10]),  10,14},
  {&(_tg__ZTV8S19770C3__9S19770C10__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C10__8S19770C6[9]),  9,13},
  {&(_tg__ZTV9S19770C13__9S19770C10__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C10__8S19770C6[6]),  6,8},
  {&(_tg__ZTV9S19770C11__8S19770C6[7]),  7,11},
  {&(_tg__ZTV8S19770C3__9S19770C11__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C11__8S19770C6[9]),  9,13},
  {&(_tg__ZTV9S19770C13__9S19770C11__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C11__8S19770C6[6]),  6,8},
  {&(_tg__ZTV9S19770C12__8S19770C6[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C12__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C12__8S19770C6[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C12__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C13__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C13__8S19770C6[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C13__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C14__8S19770C6[7]),  7,10},
  {&(_tg__ZTV9S19770C159S19770C14__8S19770C6[7]),  7,9},
  {&(_tg__ZTV9S19770C13__9S19770C159S19770C14__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C159S19770C14__8S19770C6[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C159S19770C14__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C159S19770C14__8S19770C6[9]),  9,13},
  {&(_tg__ZTV9S19770C169S19770C14__8S19770C6[3]),  3,3},
  {&(_tg__ZTV8S19770C3__9S19770C169S19770C14__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C13__9S19770C14__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C14__8S19770C6[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C14__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C14__8S19770C6[9]),  9,13},
  {&(_tg__ZTV9S19770C16__9S19770C14__8S19770C6[3]),  3,3},
  {&(_tg__ZTV9S19770C17__8S19770C6[6]),  6,10},
  {&(_tg__ZTV9S19770C129S19770C17__A1__8S19770C6[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C129S19770C17__A1__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C129S19770C17__A1__8S19770C6[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C129S19770C17__A1__8S19770C6[3]),  3,4},
  {&(_tg__ZTV9S19770C13__9S19770C17__8S19770C6[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C17__8S19770C6[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C17__8S19770C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19770C6[];
extern  VTBL_ENTRY _ZTV8S19770C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C6[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S19770C11D0Ev,_ZThn6000_N9S19770C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S19770C11D1Ev,_ZThn6000_N9S19770C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C10D0Ev,_ZTv0_n32_N9S19770C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S19770C10D0Ev,_ZThn6020_N9S19770C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C10D1Ev,_ZTv0_n32_N9S19770C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S19770C10D1Ev,_ZThn6020_N9S19770C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19770C10D0Ev,_ZTv0_n40_N9S19770C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19770C10D0Ev,_ZThn20_N9S19770C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19770C10D1Ev,_ZTv0_n40_N9S19770C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19770C10D1Ev,_ZThn20_N9S19770C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19770C7D0Ev,_ZTv0_n32_N8S19770C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12752_N8S19770C7D0Ev,_ZThn7008_N8S19770C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19770C7D1Ev,_ZTv0_n32_N8S19770C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12752_N8S19770C7D1Ev,_ZThn7008_N8S19770C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19770C7D0Ev,_ZTv0_n40_N8S19770C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N8S19770C7D0Ev,_ZThn1008_N8S19770C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19770C7D1Ev,_ZTv0_n40_N8S19770C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N8S19770C7D1Ev,_ZThn1008_N8S19770C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19770C7D0Ev,_ZTv0_n36_N8S19770C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1800_N8S19770C7D0Ev,_ZThn988_N8S19770C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19770C7D1Ev,_ZTv0_n36_N8S19770C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1800_N8S19770C7D1Ev,_ZThn988_N8S19770C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C18D0Ev,_ZTv0_n32_N9S19770C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26528_N9S19770C18D0Ev,_ZThn14524_N9S19770C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C18D1Ev,_ZTv0_n32_N9S19770C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26528_N9S19770C18D1Ev,_ZThn14524_N9S19770C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26048_N9S19770C14D0Ev,_ZThn14256_N9S19770C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26048_N9S19770C14D1Ev,_ZThn14256_N9S19770C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26048_N9S19770C15D0Ev,_ZThn14256_N9S19770C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26048_N9S19770C15D1Ev,_ZThn14256_N9S19770C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31568_N8S19770C6D0Ev,_ZThn17280_N8S19770C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27104_N8S19770C6D0Ev,_ZThn14848_N8S19770C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26528_N8S19770C6D0Ev,_ZThn14524_N8S19770C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31568_N8S19770C6D1Ev,_ZThn17280_N8S19770C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27104_N8S19770C6D1Ev,_ZThn14848_N8S19770C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26528_N8S19770C6D1Ev,_ZThn14524_N8S19770C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19770C6D0Ev,_ZTv0_n40_N8S19770C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15600_N8S19770C6D0Ev,_ZThn8524_N8S19770C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19770C6D1Ev,_ZTv0_n40_N8S19770C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15600_N8S19770C6D1Ev,_ZThn8524_N8S19770C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19770C6D0Ev,_ZTv0_n36_N8S19770C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15576_N8S19770C6D0Ev,_ZThn8504_N8S19770C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19770C6D1Ev,_ZTv0_n36_N8S19770C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15576_N8S19770C6D1Ev,_ZThn8504_N8S19770C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19770C6D0Ev,_ZTv0_n52_N8S19770C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13776_N8S19770C6D0Ev,_ZThn7516_N8S19770C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19770C6D1Ev,_ZTv0_n52_N8S19770C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13776_N8S19770C6D1Ev,_ZThn7516_N8S19770C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19770C6 = {  "S19770C6", // class name
  bases_S19770C6, 31,
  &(vtc_S19770C6[0]), // expected_vtbl_contents
  &(vtt_S19770C6[0]), // expected_vtt_contents
  ABISELECT(32256,17660), // object size
  NSPAIRA(_ZTI8S19770C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19770C6),146, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19770C6),93, //virtual table table var
  26, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C20  : virtual S19770C14 , S19770C12 , virtual S19770C15 {
  ::S19770C16 s19770c20f0;
  virtual  ~S19770C20(); // _ZN9S19770C20D2Ev
  S19770C20(); // tgen
};
//SIG(-1 S19770C20) C1{ VBC2{ BC3{ VBC4{ VBC5{ BC6{ v1 Fi Fp FC7{ m Fp[2]}} VBC8{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC9{} FC7 FC7[9] Fp FC6 FC6} VBC7 v3 Fp FL Fc[2] FC8 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} VBC10{ VBC4 BC8 BC7 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC5 Fp Fs Fl Fi FL FC5[4] Fi} BC11{ VBC8 Fp Fs Fl Fi:6 Fp[2]} vd v5 FL FD FC9 Fi[9] Fs Fc:5} BC10 VBC3 vd FC11}


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

static void Test_S19770C20()
{
  extern Class_Descriptor cd_S19770C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(697,1513)];
    init_test(&cd_S19770C20, buf);
    S19770C20 *dp, &lv = *(dp=new (buf) S19770C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11136,6048), "sizeof(S19770C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C20)");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*), ABISELECT(5472,2980), "S19770C20");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(5936,3236), "S19770C20");
    check_base_class_offset(lv, (S19770C3*)(S19770C16*)(S19770C14*), ABISELECT(5936,3236), "S19770C20");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(6304,3432), "S19770C20");
    check_base_class_offset(lv, (S19770C9*)(S19770C13*), ABISELECT(5472,2980), "S19770C20");
    check_base_class_offset(lv, (S19770C13*)(S19770C15*)(S19770C14*), ABISELECT(5376,2924), "S19770C20");
    /*is_ambiguous_... S19770C20::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C12*), ABISELECT(5376,2924), "S19770C20");
    /*is_ambiguous_... S19770C20::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C12*), ABISELECT(5376,2924), "S19770C20");
    /*is_ambiguous_... S19770C20::S19770C15 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C15*), ABISELECT(5376,2924), "S19770C20");
    /*is_ambiguous_... S19770C20::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*), ABISELECT(6320,3440), "S19770C20");
    /*is_ambiguous_... S19770C20::S19770C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*), ABISELECT(6688,3636), "S19770C20");
    check_base_class_offset(lv, (S19770C12*)(S19770C15*)(S19770C14*), ABISELECT(6320,3440), "S19770C20");
    /*is_ambiguous_... S19770C20::S19770C15 */ AMB_check_base_class_offset(lv, (S19770C12*)(S19770C15*), ABISELECT(6320,3440), "S19770C20");
    check_base_class_offset(lv, (S19770C15*)(S19770C14*), ABISELECT(912,492), "S19770C20");
    check_base_class_offset(lv, (S19770C16*)(S19770C14*), ABISELECT(5240,2832), "S19770C20");
    check_base_class_offset(lv, (S19770C14*), ABISELECT(912,492), "S19770C20");
    /*is_ambiguous_... S19770C20::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*), 0, "S19770C20");
    /*is_ambiguous_... S19770C20::S19770C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*), ABISELECT(368,196), "S19770C20");
    /*is_ambiguous_... S19770C20::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C12*), 0, "S19770C20");
    /*is_ambiguous_... S19770C20::S19770C15 */ AMB_check_base_class_offset(lv, (S19770C15*), ABISELECT(6800,3708), "S19770C20");
    check_field_offset(lv, s19770c20f0, ABISELECT(480,268), "S19770C20.s19770c20f0");
    test_class_info(&lv, &cd_S19770C20);
    dp->~S19770C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C20(Test_S19770C20, "S19770C20", ABISELECT(11136,6048));

#else // __cplusplus

extern void _ZN9S19770C20C1Ev();
extern void _ZN9S19770C20D2Ev();
Name_Map name_map_S19770C20[] = {
  NSPAIR(_ZN9S19770C20C1Ev),
  NSPAIR(_ZN9S19770C20D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C13;
extern VTBL_ENTRY _ZTI9S19770C13[];
extern  VTBL_ENTRY _ZTV9S19770C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C13[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C15;
extern VTBL_ENTRY _ZTI9S19770C15[];
extern  VTBL_ENTRY _ZTV9S19770C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C15[];
extern Class_Descriptor cd_S19770C16;
extern VTBL_ENTRY _ZTI9S19770C16[];
extern  VTBL_ENTRY _ZTV9S19770C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C16[];
extern Class_Descriptor cd_S19770C14;
extern VTBL_ENTRY _ZTI9S19770C14[];
extern  VTBL_ENTRY _ZTV9S19770C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C14[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C15;
extern VTBL_ENTRY _ZTI9S19770C15[];
extern  VTBL_ENTRY _ZTV9S19770C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C15[];
static Base_Class bases_S19770C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19770C5,    ABISELECT(5472,2980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C3,    ABISELECT(5936,3236), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(6304,3432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C9,    ABISELECT(5472,2980), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19770C13,    ABISELECT(5376,2924), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19770C3,    ABISELECT(6320,3440), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(6688,3636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    ABISELECT(6320,3440), //bcp->offset
    45, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19770C15,    ABISELECT(912,492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19770C16,    ABISELECT(5240,2832), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19770C14,    ABISELECT(912,492), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19770C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    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},
  {&cd_S19770C15,    ABISELECT(6800,3708), //bcp->offset
    58, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19770C20[];
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C20D1Ev();
extern void _ZN9S19770C20D0Ev();
extern void _ZN9S19770C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev)();
extern void ABISELECT(_ZThn912_N9S19770C20D1Ev,_ZThn492_N9S19770C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev)();
extern void ABISELECT(_ZThn912_N9S19770C20D0Ev,_ZThn492_N9S19770C20D0Ev)() __attribute__((weak));
extern void _ZN9S19770C143v11Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev)();
extern void ABISELECT(_ZThn6320_N9S19770C20D1Ev,_ZThn3440_N9S19770C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev)();
extern void ABISELECT(_ZThn6320_N9S19770C20D0Ev,_ZThn3440_N9S19770C20D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev)();
extern void ABISELECT(_ZThn6800_N9S19770C20D1Ev,_ZThn3708_N9S19770C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev)();
extern void ABISELECT(_ZThn6800_N9S19770C20D0Ev,_ZThn3708_N9S19770C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19770C20[] = {
  ABISELECT(6800,3708),
  ABISELECT(6320,3440),
  ABISELECT(912,492),
  ABISELECT(6304,3432),
  ABISELECT(5936,3236),
  ABISELECT(5472,2980),
  ABISELECT(5376,2924),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C20D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  0,
  ABISELECT(-912,-492),
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  ABISELECT(-912,-492),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
  ABISELECT(696,404),
  ABISELECT(-5240,-2832),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-5376,-2924),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5472,-2980),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  0,
  ABISELECT(-5936,-3236),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  ABISELECT(-6320,-3440),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-6320,-3440),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  ABISELECT(-6800,-3708),
  ABISELECT(-480,-268),
  ABISELECT(-496,-276),
  ABISELECT(-864,-472),
  ABISELECT(-1328,-728),
  ABISELECT(-1424,-784),
  ABISELECT(-6800,-3708),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev),
};
extern VTBL_ENTRY _ZTV9S19770C20[];
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__A__9S19770C20[] = {
  ABISELECT(6304,3432),
  ABISELECT(5936,3236),
  ABISELECT(5472,2980),
  ABISELECT(5376,2924),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12__A__9S19770C20[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-5376,-2924),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12__A__9S19770C20[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5472,-2980),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C12__A__9S19770C20[] = {
  0,
  ABISELECT(-5936,-3236),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN9S19770C14D1Ev();
extern void _ZN9S19770C14D0Ev();
extern void _ZN9S19770C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C14__9S19770C20[] = {
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN9S19770C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
};
extern void _ZN9S19770C15D1Ev();
extern void _ZN9S19770C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C159S19770C14__9S19770C20[] = {
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN9S19770C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C159S19770C14__9S19770C20[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C159S19770C14__9S19770C20[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2488),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C159S19770C14__9S19770C20[] = {
  0,
  ABISELECT(-5024,-2744),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev)();
extern void ABISELECT(_ZThn5408_N9S19770C15D1Ev,_ZThn2948_N9S19770C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev)();
extern void ABISELECT(_ZThn5408_N9S19770C15D0Ev,_ZThn2948_N9S19770C15D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C159S19770C14__9S19770C20[] = {
  0,
  ABISELECT(-5408,-2948),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2948),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C169S19770C14__9S19770C20[] = {
  ABISELECT(696,404),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C169S19770C14__9S19770C20[] = {
  0,
  ABISELECT(-696,-404),
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C14__9S19770C20[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C14__9S19770C20[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2488),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C14__9S19770C20[] = {
  0,
  ABISELECT(-5024,-2744),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev)();
extern void ABISELECT(_ZThn5408_N9S19770C14D1Ev,_ZThn2948_N9S19770C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev)();
extern void ABISELECT(_ZThn5408_N9S19770C14D0Ev,_ZThn2948_N9S19770C14D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C14__9S19770C20[] = {
  0,
  ABISELECT(-5408,-2948),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2948),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C16__9S19770C14__9S19770C20[] = {
  ABISELECT(696,404),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C20[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C13__9S19770C20[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C13__9S19770C20[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C20[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__9S19770C20[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C20[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12__9S19770C20[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12__9S19770C20[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C12__9S19770C20[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN9S19770C15D1Ev();
extern void _ZN9S19770C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C15__A1__9S19770C20[] = {
  ABISELECT(-480,-268),
  ABISELECT(-496,-276),
  ABISELECT(-864,-472),
  ABISELECT(-1328,-728),
  ABISELECT(-1424,-784),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN9S19770C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C15__A1__9S19770C20[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(1424,784),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C15__A1__9S19770C20[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(1328,728),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C15__A1__9S19770C20[] = {
  0,
  ABISELECT(864,472),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev)();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C15__A1__9S19770C20[] = {
  0,
  ABISELECT(480,268),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(480,268),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTT_ENTRY vtt_S19770C20[] = {
  {&(_ZTV9S19770C20[9]),  9,68},
  {&(_tg__ZTV9S19770C12__A__9S19770C20[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C12__A__9S19770C20[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C12__A__9S19770C20[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C12__A__9S19770C20[3]),  3,4},
  {&(_ZTV9S19770C20[22]),  22,68},
  {&(_ZTV9S19770C20[33]),  33,68},
  {&(_ZTV9S19770C20[39]),  39,68},
  {&(_ZTV9S19770C20[44]),  44,68},
  {&(_ZTV9S19770C20[54]),  54,68},
  {&(_ZTV9S19770C20[28]),  28,68},
  {&(_ZTV9S19770C20[66]),  66,68},
  {&(_tg__ZTV9S19770C14__9S19770C20[7]),  7,10},
  {&(_tg__ZTV9S19770C159S19770C14__9S19770C20[7]),  7,9},
  {&(_tg__ZTV9S19770C13__9S19770C159S19770C14__9S19770C20[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C159S19770C14__9S19770C20[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C159S19770C14__9S19770C20[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C159S19770C14__9S19770C20[9]),  9,13},
  {&(_tg__ZTV9S19770C169S19770C14__9S19770C20[3]),  3,3},
  {&(_tg__ZTV8S19770C3__9S19770C169S19770C14__9S19770C20[3]),  3,4},
  {&(_tg__ZTV9S19770C13__9S19770C14__9S19770C20[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C14__9S19770C20[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C14__9S19770C20[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C14__9S19770C20[9]),  9,13},
  {&(_tg__ZTV9S19770C16__9S19770C14__9S19770C20[3]),  3,3},
  {&(_tg__ZTV9S19770C13__9S19770C20[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C13__9S19770C20[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C13__9S19770C20[3]),  3,4},
  {&(_tg__ZTV8S19770C9__9S19770C20[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__9S19770C20[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C20[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C12__9S19770C20[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C12__9S19770C20[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C12__9S19770C20[3]),  3,4},
  {&(_tg__ZTV9S19770C15__A1__9S19770C20[7]),  7,9},
  {&(_tg__ZTV9S19770C13__9S19770C15__A1__9S19770C20[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C15__A1__9S19770C20[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C15__A1__9S19770C20[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C15__A1__9S19770C20[9]),  9,13},
};
extern VTBL_ENTRY _ZTI9S19770C20[];
extern  VTBL_ENTRY _ZTV9S19770C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C20[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19770C14D0Ev,_ZThn2948_N9S19770C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19770C14D1Ev,_ZThn2948_N9S19770C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19770C15D0Ev,_ZThn2948_N9S19770C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19770C15D1Ev,_ZThn2948_N9S19770C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N9S19770C20D0Ev,_ZThn3708_N9S19770C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N9S19770C20D0Ev,_ZThn3440_N9S19770C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn912_N9S19770C20D0Ev,_ZThn492_N9S19770C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N9S19770C20D1Ev,_ZThn3708_N9S19770C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N9S19770C20D1Ev,_ZThn3440_N9S19770C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn912_N9S19770C20D1Ev,_ZThn492_N9S19770C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19770C20 = {  "S19770C20", // class name
  bases_S19770C20, 15,
  &(vtc_S19770C20[0]), // expected_vtbl_contents
  &(vtt_S19770C20[0]), // expected_vtt_contents
  ABISELECT(11136,6048), // object size
  NSPAIRA(_ZTI9S19770C20),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19770C20),68, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19770C20),39, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19770C1  : virtual S281C37_nt , virtual S19770C3 , virtual S19770C6 , S19770C20 , virtual S6041C23 {
  int s19770c1f0;
  void *s19770c1f1[4];
  long double s19770c1f2[2];
  int s19770c1f3;
  void *s19770c1f4;
  int s19770c1f5;
  void *s19770c1f6;
  virtual  ~S19770C1(); // _ZN8S19770C1D2Ev
  virtual void  v1(); // _ZN8S19770C12v1Ev
  S19770C1(); // tgen
};
//SIG(1 S19770C1) C1{ VBC2{ m Fp[2]} VBC3{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC2 FC2[9] Fp FC5{ v3 Fi Fp FC2} FC5} VBC6{ VBC7{ BC8{ VBC5 VBC2 BC9{ BC5 VBC3 VBC2 v4 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} BC3 vd v5 FL:25 Fp Fi[3] FC2} VBC9 VBC10{ VBC11{ VBC3 VBC12{ VBC13{ VBC9 Fi Fc Fp[6] Fi[2] Fp FC2} BC3 BC2 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v7 v8 FC12[7] Fi Fs Fi FC9 Fl[9]} vd Fc Fi[3]} vd v9 v10 FD[2] FC4 Fi:16 Fi:3} VBC14{ BC15{ VBC13 VBC12 vd Fl Fp FC9 Fp Fs Fl Fi FL FC9[4] Fi} BC16{ VBC3 Fp Fs Fl Fi:6 Fp[2]} vd v11 FL FD FC4 Fi[9] Fs Fc:5} VBC17{ BC12 vd Fi FC4 Fp Fi Fc[8] Fs Fi} BC18{ BC12 BC14 VBC19{ m Fl FC2[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} vd v12 FC9[10] Fi[9] FC4 Fi Fp FD[4] Fc[5] FC19 Fl} BC20{ VBC14 BC12 VBC15 vd FC16} VBC21{ m Fi Fp[10] Fc FC22{ VBC23{ v15 Fi[6] Fc:2 FD Fp[2] Fi FD FC4 FC2 FC2[9] Fp FC24{ v16 Fi Fp FC2} FC24} VBC25{ VBC26{ VBC27{ BC24 VBC23 VBC2 v17 Fp FL Fc[2] FC23 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC2} BC23 BC2 vd v18 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v13 v14 FC25[7] Fi Fs Fi FC27 Fl[9]} Fs:12 FC28{ VBC24 VBC2 BC27 BC23 vd v19 FL:25 Fp Fi[3] FC2}} vd v1 Fi Fp[4] FD[2] Fi Fp Fi Fp}


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

static void Test_S19770C1()
{
  extern Class_Descriptor cd_S19770C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3213,7024)];
    init_test(&cd_S19770C1, buf);
    S19770C1 *dp, &lv = *(dp=new (buf) S19770C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(51392,28092), "sizeof(S19770C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19770C1)");
    /*is_ambiguous_... S19770C1::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(1024,552), "S19770C1");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C8*)(S19770C7*), ABISELECT(1024,552), "S19770C1");
    check_base_class_offset(lv, (S281C37_nt*)(S19770C9*)(S19770C8*)(S19770C7*), ABISELECT(1024,552), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C9 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C9*), ABISELECT(1024,552), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*), ABISELECT(1040,560), "S19770C1");
    check_base_class_offset(lv, (S19770C3*)(S19770C9*)(S19770C8*)(S19770C7*), ABISELECT(1040,560), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C9 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C9*), ABISELECT(1040,560), "S19770C1");
    /*is_ambiguous_... S19770C11::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C11*), ABISELECT(1040,560), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C14 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C16*)(S19770C14*), ABISELECT(1040,560), "S19770C1");
    check_base_class_offset(lv, (S19770C3*)(S19770C16*)(S19770C14*)(S19770C18*)(S19770C6*), ABISELECT(1040,560), "S19770C1");
    /*is_ambiguous_... S19770C8::S19770C5 */ AMB_check_base_class_offset(lv, (S19770C5*)(S19770C8*)(S19770C7*), ABISELECT(16104,8780), "S19770C1");
    check_base_class_offset(lv, (S19770C5*)(S19770C9*)(S19770C8*)(S19770C7*), ABISELECT(15184,8272), "S19770C1");
    check_base_class_offset(lv, (S19770C9*)(S19770C8*)(S19770C7*), ABISELECT(15184,8272), "S19770C1");
    /*is_ambiguous_... S19770C8::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C8*)(S19770C7*), ABISELECT(15648,8528), "S19770C1");
    check_base_class_offset(lv, (S19770C8*)(S19770C7*), ABISELECT(15184,8272), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C9 */ AMB_check_base_class_offset(lv, (S19770C5*)(S19770C9*), ABISELECT(16144,8800), "S19770C1");
    /*is_ambiguous_... S19770C7::S19770C9 */ AMB_check_base_class_offset(lv, (S19770C9*)(S19770C7*), ABISELECT(16144,8800), "S19770C1");
    check_base_class_offset(lv, (S19770C9*)(S19770C13*), ABISELECT(16144,8800), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C12*), ABISELECT(28032,15344), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C14 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C15*)(S19770C14*), ABISELECT(28032,15344), "S19770C1");
    check_base_class_offset(lv, (S19770C13*)(S19770C12*)(S19770C17*), ABISELECT(28032,15344), "S19770C1");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C12*)(S19770C18*)(S19770C6*), ABISELECT(28032,15344), "S19770C1");
    check_base_class_offset(lv, (S19770C13*)(S19770C15*)(S19770C14*)(S19770C18*)(S19770C6*), ABISELECT(28032,15344), "S19770C1");
    /*is_ambiguous_... S19770C20::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C12*)(S19770C20*), ABISELECT(28032,15344), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C15 */ AMB_check_base_class_offset(lv, (S19770C13*)(S19770C15*), ABISELECT(28032,15344), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*), ABISELECT(27552,15076), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*), ABISELECT(27920,15272), "S19770C1");
    check_base_class_offset(lv, (S19770C12*)(S19770C11*), ABISELECT(27552,15076), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C14 */ AMB_check_base_class_offset(lv, (S19770C12*)(S19770C15*)(S19770C14*), ABISELECT(27552,15076), "S19770C1");
    check_base_class_offset(lv, (S19770C12*)(S19770C15*)(S19770C14*)(S19770C18*)(S19770C6*), ABISELECT(27552,15076), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C15 */ AMB_check_base_class_offset(lv, (S19770C12*)(S19770C15*), ABISELECT(27552,15076), "S19770C1");
    check_base_class_offset(lv, (S19770C11*)(S19770C10*), ABISELECT(16624,9076), "S19770C1");
    check_base_class_offset(lv, (S19770C10*)(S19770C7*), ABISELECT(16600,9056), "S19770C1");
    check_base_class_offset(lv, (S19770C7*)(S19770C6*), ABISELECT(15184,8272), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C14 */ AMB_check_base_class_offset(lv, (S19770C15*)(S19770C14*), ABISELECT(28128,15400), "S19770C1");
    /*is_ambiguous_... S19770C1::S19770C14 */ AMB_check_base_class_offset(lv, (S19770C16*)(S19770C14*), ABISELECT(32456,17740), "S19770C1");
    /*is_ambiguous_... S19770C6::S19770C14 */ AMB_check_base_class_offset(lv, (S19770C14*)(S19770C6*), ABISELECT(28128,15400), "S19770C1");
    check_base_class_offset(lv, (S19770C14*)(S19770C20*), ABISELECT(28128,15400), "S19770C1");
    /*is_ambiguous_... S19770C12::S19770C3 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*)(S19770C17*), ABISELECT(32592,17832), "S19770C1");
    /*is_ambiguous_... S19770C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*)(S19770C17*), ABISELECT(32960,18028), "S19770C1");
    check_base_class_offset(lv, (S19770C12*)(S19770C17*), ABISELECT(32592,17832), "S19770C1");
    check_base_class_offset(lv, (S19770C17*)(S19770C6*), ABISELECT(32592,17832), "S19770C1");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*)(S19770C18*)(S19770C6*), ABISELECT(1408,756), "S19770C1");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*)(S19770C18*)(S19770C6*), ABISELECT(1776,952), "S19770C1");
    /*is_ambiguous_... S19770C18::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C12*)(S19770C18*)(S19770C6*), ABISELECT(1408,756), "S19770C1");
    check_base_class_offset(lv, (S19770C15*)(S19770C14*)(S19770C18*)(S19770C6*), ABISELECT(1888,1024), "S19770C1");
    check_base_class_offset(lv, (S19770C16*)(S19770C14*)(S19770C18*)(S19770C6*), ABISELECT(6216,3364), "S19770C1");
    check_base_class_offset(lv, (S19770C14*)(S19770C18*)(S19770C6*), ABISELECT(1888,1024), "S19770C1");
    check_base_class_offset(lv, (S20177C15*)(S19770C18*)(S19770C6*), ABISELECT(33112,18132), "S19770C1");
    check_base_class_offset(lv, (S19770C18*)(S19770C6*), ABISELECT(1408,756), "S19770C1");
    check_base_class_offset(lv, (S19770C6*), ABISELECT(1408,756), "S19770C1");
    /*is_ambiguous_... S19770C20::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C3*)(S19770C12*)(S19770C20*), 0, "S19770C1");
    /*is_ambiguous_... S19770C20::S19770C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19770C12*)(S19770C20*), ABISELECT(368,196), "S19770C1");
    /*is_ambiguous_... S19770C20::S19770C12 */ AMB_check_base_class_offset(lv, (S19770C12*)(S19770C20*), 0, "S19770C1");
    /*is_ambiguous_... S19770C20::S19770C15 */ AMB_check_base_class_offset(lv, (S19770C15*)(S19770C20*), ABISELECT(33280,18212), "S19770C1");
    check_base_class_offset(lv, (S19770C20*), 0, "S19770C1");
    check_base_class_offset(lv, (S6041C23*), ABISELECT(37616,20552), "S19770C1");
    check_field_offset(lv, s19770c1f0, ABISELECT(912,492), "S19770C1.s19770c1f0");
    check_field_offset(lv, s19770c1f1, ABISELECT(920,496), "S19770C1.s19770c1f1");
    check_field_offset(lv, s19770c1f2, ABISELECT(960,512), "S19770C1.s19770c1f2");
    check_field_offset(lv, s19770c1f3, ABISELECT(992,536), "S19770C1.s19770c1f3");
    check_field_offset(lv, s19770c1f4, ABISELECT(1000,540), "S19770C1.s19770c1f4");
    check_field_offset(lv, s19770c1f5, ABISELECT(1008,544), "S19770C1.s19770c1f5");
    check_field_offset(lv, s19770c1f6, ABISELECT(1016,548), "S19770C1.s19770c1f6");
    test_class_info(&lv, &cd_S19770C1);
    dp->~S19770C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19770C1(Test_S19770C1, "S19770C1", ABISELECT(51392,28092));

#else // __cplusplus

extern void _ZN8S19770C1C1Ev();
extern void _ZN8S19770C1D2Ev();
Name_Map name_map_S19770C1[] = {
  NSPAIR(_ZN8S19770C1C1Ev),
  NSPAIR(_ZN8S19770C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S19770C8;
extern VTBL_ENTRY _ZTI8S19770C8[];
extern  VTBL_ENTRY _ZTV8S19770C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C8[];
extern Class_Descriptor cd_S19770C5;
extern VTBL_ENTRY _ZTI8S19770C5[];
extern  VTBL_ENTRY _ZTV8S19770C5[];
extern Class_Descriptor cd_S19770C9;
extern VTBL_ENTRY _ZTI8S19770C9[];
extern  VTBL_ENTRY _ZTV8S19770C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C9[];
extern Class_Descriptor cd_S19770C13;
extern VTBL_ENTRY _ZTI9S19770C13[];
extern  VTBL_ENTRY _ZTV9S19770C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C13[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C11;
extern VTBL_ENTRY _ZTI9S19770C11[];
extern  VTBL_ENTRY _ZTV9S19770C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C11[];
extern Class_Descriptor cd_S19770C10;
extern VTBL_ENTRY _ZTI9S19770C10[];
extern  VTBL_ENTRY _ZTV9S19770C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C10[];
extern Class_Descriptor cd_S19770C7;
extern VTBL_ENTRY _ZTI8S19770C7[];
extern  VTBL_ENTRY _ZTV8S19770C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C7[];
extern Class_Descriptor cd_S19770C15;
extern VTBL_ENTRY _ZTI9S19770C15[];
extern  VTBL_ENTRY _ZTV9S19770C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C15[];
extern Class_Descriptor cd_S19770C16;
extern VTBL_ENTRY _ZTI9S19770C16[];
extern  VTBL_ENTRY _ZTV9S19770C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C16[];
extern Class_Descriptor cd_S19770C14;
extern VTBL_ENTRY _ZTI9S19770C14[];
extern  VTBL_ENTRY _ZTV9S19770C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C14[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C17;
extern VTBL_ENTRY _ZTI9S19770C17[];
extern  VTBL_ENTRY _ZTV9S19770C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C17[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C15;
extern VTBL_ENTRY _ZTI9S19770C15[];
extern  VTBL_ENTRY _ZTV9S19770C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C15[];
extern Class_Descriptor cd_S19770C16;
extern VTBL_ENTRY _ZTI9S19770C16[];
extern  VTBL_ENTRY _ZTV9S19770C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C16[];
extern Class_Descriptor cd_S19770C14;
extern VTBL_ENTRY _ZTI9S19770C14[];
extern  VTBL_ENTRY _ZTV9S19770C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C14[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
extern Class_Descriptor cd_S19770C18;
extern VTBL_ENTRY _ZTI9S19770C18[];
extern  VTBL_ENTRY _ZTV9S19770C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C18[];
extern Class_Descriptor cd_S19770C6;
extern VTBL_ENTRY _ZTI8S19770C6[];
extern  VTBL_ENTRY _ZTV8S19770C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C6[];
extern Class_Descriptor cd_S19770C3;
extern VTBL_ENTRY _ZTI8S19770C3[];
extern  VTBL_ENTRY _ZTV8S19770C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19770C12;
extern VTBL_ENTRY _ZTI9S19770C12[];
extern  VTBL_ENTRY _ZTV9S19770C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C12[];
extern Class_Descriptor cd_S19770C15;
extern VTBL_ENTRY _ZTI9S19770C15[];
extern  VTBL_ENTRY _ZTV9S19770C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C15[];
extern Class_Descriptor cd_S19770C20;
extern VTBL_ENTRY _ZTI9S19770C20[];
extern  VTBL_ENTRY _ZTV9S19770C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19770C20[];
extern Class_Descriptor cd_S6041C23;
extern VTBL_ENTRY _ZTI8S6041C23[];
static Base_Class bases_S19770C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C37_nt,    ABISELECT(1024,552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19770C3,    ABISELECT(1040,560), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19770C5,    ABISELECT(16104,8780), //bcp->offset
    90, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19770C5,    ABISELECT(15184,8272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19770C9,    ABISELECT(15184,8272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19770C3,    ABISELECT(15648,8528), //bcp->offset
    87, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19770C8,    ABISELECT(15184,8272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19770C5,    ABISELECT(16144,8800), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19770C9,    ABISELECT(16144,8800), //bcp->offset
    94, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19770C13,    ABISELECT(28032,15344), //bcp->offset
    140, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    99, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19770C3,    ABISELECT(27552,15076), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(27920,15272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    ABISELECT(27552,15076), //bcp->offset
    127, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    95, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19770C11,    ABISELECT(16624,9076), //bcp->offset
    113, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19770C10,    ABISELECT(16600,9056), //bcp->offset
    102, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19770C7,    ABISELECT(15184,8272), //bcp->offset
    63, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S19770C15,    ABISELECT(28128,15400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19770C16,    ABISELECT(32456,17740), //bcp->offset
    157, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19770C14,    ABISELECT(28128,15400), //bcp->offset
    145, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S19770C3,    ABISELECT(32592,17832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(32960,18028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19770C12,    ABISELECT(32592,17832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19770C17,    ABISELECT(32592,17832), //bcp->offset
    160, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S19770C3,    ABISELECT(1408,756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(1776,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19770C12,    ABISELECT(1408,756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19770C15,    ABISELECT(1888,1024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19770C16,    ABISELECT(6216,3364), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19770C14,    ABISELECT(1888,1024), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20177C15,    ABISELECT(33112,18132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S19770C18,    ABISELECT(1408,756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19770C6,    ABISELECT(1408,756), //bcp->offset
    26, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19770C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19770C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19770C15,    ABISELECT(33280,18212), //bcp->offset
    173, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S19770C20,    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
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6041C23,    ABISELECT(37616,20552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19770C1[];
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C1D1Ev();
extern void _ZN8S19770C1D0Ev();
extern void _ZN9S19770C122v6Ev();
extern void _ZN8S19770C12v1Ev();
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n128_N8S19770C1D1Ev,_ZTv0_n64_N8S19770C1D1Ev)();
extern void ABISELECT(_ZThn1408_N8S19770C1D1Ev,_ZThn756_N8S19770C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N8S19770C1D0Ev,_ZTv0_n64_N8S19770C1D0Ev)();
extern void ABISELECT(_ZThn1408_N8S19770C1D0Ev,_ZThn756_N8S19770C1D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
extern void _ZN8S19770C63v12Ev();
extern void ABISELECT(_ZTvn480_n128_N8S19770C1D1Ev,_ZTvn268_n64_N8S19770C1D1Ev)();
extern void ABISELECT(_ZTvn480_n128_N8S19770C1D0Ev,_ZTvn268_n64_N8S19770C1D0Ev)();
extern void _ZN9S19770C143v11Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void ABISELECT(_ZTv0_n104_N8S19770C1D1Ev,_ZTv0_n52_N8S19770C1D1Ev)();
extern void ABISELECT(_ZThn15184_N8S19770C1D1Ev,_ZThn8272_N8S19770C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19770C1D0Ev,_ZTv0_n52_N8S19770C1D0Ev)();
extern void ABISELECT(_ZThn15184_N8S19770C1D0Ev,_ZThn8272_N8S19770C1D0Ev)() __attribute__((weak));
extern void _ZN8S19770C82v5Ev();
extern void _ZN8S19770C72v9Ev();
extern void _ZN8S19770C73v10Ev();
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S19770C1D1Ev,_ZTv0_n36_N8S19770C1D1Ev)();
extern void ABISELECT(_ZThn16600_N8S19770C1D1Ev,_ZThn9056_N8S19770C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19770C1D0Ev,_ZTv0_n36_N8S19770C1D0Ev)();
extern void ABISELECT(_ZThn16600_N8S19770C1D0Ev,_ZThn9056_N8S19770C1D0Ev)() __attribute__((weak));
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19770C1D1Ev,_ZTv0_n40_N8S19770C1D1Ev)();
extern void ABISELECT(_ZThn16624_N8S19770C1D1Ev,_ZThn9076_N8S19770C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19770C1D0Ev,_ZTv0_n40_N8S19770C1D0Ev)();
extern void ABISELECT(_ZThn16624_N8S19770C1D0Ev,_ZThn9076_N8S19770C1D0Ev)() __attribute__((weak));
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19770C1D1Ev,_ZTv0_n32_N8S19770C1D1Ev)();
extern void ABISELECT(_ZThn27552_N8S19770C1D1Ev,_ZThn15076_N8S19770C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C1D0Ev,_ZTv0_n32_N8S19770C1D0Ev)();
extern void ABISELECT(_ZThn27552_N8S19770C1D0Ev,_ZThn15076_N8S19770C1D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S19770C1D1Ev,_ZTv0_n32_N8S19770C1D1Ev)();
extern void ABISELECT(_ZThn28128_N8S19770C1D1Ev,_ZThn15400_N8S19770C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C1D0Ev,_ZTv0_n32_N8S19770C1D0Ev)();
extern void ABISELECT(_ZThn28128_N8S19770C1D0Ev,_ZThn15400_N8S19770C1D0Ev)() __attribute__((weak));
extern void _ZN9S19770C143v11Ev();
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19770C1D1Ev,_ZTv0_n32_N8S19770C1D1Ev)();
extern void ABISELECT(_ZThn32592_N8S19770C1D1Ev,_ZThn17832_N8S19770C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C1D0Ev,_ZTv0_n32_N8S19770C1D0Ev)();
extern void ABISELECT(_ZThn32592_N8S19770C1D0Ev,_ZThn17832_N8S19770C1D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S19770C1D1Ev,_ZTv0_n32_N8S19770C1D1Ev)();
extern void ABISELECT(_ZThn33280_N8S19770C1D1Ev,_ZThn18212_N8S19770C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C1D0Ev,_ZTv0_n32_N8S19770C1D0Ev)();
extern void ABISELECT(_ZThn33280_N8S19770C1D0Ev,_ZThn18212_N8S19770C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19770C1[] = {
  ABISELECT(37616,20552),
  ABISELECT(33112,18132),
  ABISELECT(32592,17832),
  ABISELECT(16624,9076),
  ABISELECT(16600,9056),
  ABISELECT(16104,8780),
  ABISELECT(15184,8272),
  ABISELECT(1408,756),
  ABISELECT(33280,18212),
  ABISELECT(27552,15076),
  ABISELECT(28128,15400),
  ABISELECT(1024,552),
  ABISELECT(1040,560),
  ABISELECT(16144,8800),
  ABISELECT(28032,15344),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19770C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19770C1D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  (VTBL_ENTRY)&_ZN8S19770C12v1Ev,
  0,
  ABISELECT(-1040,-560),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  ABISELECT(480,268),
  0,
  ABISELECT(-1408,-756),
  0,
  ABISELECT(31184,17076),
  ABISELECT(26720,14644),
  ABISELECT(15216,8320),
  ABISELECT(15192,8300),
  ABISELECT(14696,8024),
  ABISELECT(13776,7516),
  ABISELECT(31704,17376),
  ABISELECT(26144,14320),
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(14736,8044),
  ABISELECT(26624,14588),
  ABISELECT(-1408,-756),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S19770C1D1Ev,_ZTv0_n64_N8S19770C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S19770C1D0Ev,_ZTv0_n64_N8S19770C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  (VTBL_ENTRY)&_ZN8S19770C63v12Ev,
  ABISELECT(25664,14052),
  ABISELECT(-864,-472),
  ABISELECT(-848,-464),
  ABISELECT(14256,7776),
  ABISELECT(26144,14320),
  ABISELECT(-1888,-1024),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n128_N8S19770C1D1Ev,_ZTvn268_n64_N8S19770C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n128_N8S19770C1D0Ev,_ZTvn268_n64_N8S19770C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
  ABISELECT(-5176,-2804),
  ABISELECT(-6216,-3364),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  0,
  0,
  ABISELECT(464,256),
  0,
  ABISELECT(-15184,-8272),
  0,
  0,
  ABISELECT(12848,7072),
  ABISELECT(12368,6804),
  ABISELECT(1440,804),
  ABISELECT(1416,784),
  ABISELECT(960,528),
  ABISELECT(920,508),
  ABISELECT(-14160,-7720),
  ABISELECT(-14144,-7712),
  ABISELECT(-15184,-8272),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19770C1D1Ev,_ZTv0_n52_N8S19770C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19770C1D0Ev,_ZTv0_n52_N8S19770C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19770C82v5Ev,
  (VTBL_ENTRY)&_ZN8S19770C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19770C73v10Ev,
  ABISELECT(-15648,-8528),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  0,
  ABISELECT(-16104,-8780),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(-16144,-8800),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  ABISELECT(-16600,-9056),
  ABISELECT(-15576,-8504),
  ABISELECT(-456,-256),
  ABISELECT(11432,6288),
  ABISELECT(10952,6020),
  ABISELECT(-15560,-8496),
  ABISELECT(24,20),
  ABISELECT(-16600,-9056),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19770C1D1Ev,_ZTv0_n36_N8S19770C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19770C1D0Ev,_ZTv0_n36_N8S19770C1D0Ev),
  ABISELECT(-16624,-9076),
  0,
  0,
  ABISELECT(-15600,-8524),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-15584,-8516),
  ABISELECT(-16624,-9076),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19770C1D1Ev,_ZTv0_n40_N8S19770C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19770C1D0Ev,_ZTv0_n40_N8S19770C1D0Ev),
  0,
  ABISELECT(-27552,-15076),
  0,
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-27552,-15076),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C1D1Ev,_ZTv0_n32_N8S19770C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C1D0Ev,_ZTv0_n32_N8S19770C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(-28032,-15344),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  0,
  ABISELECT(-28128,-15400),
  ABISELECT(-576,-324),
  ABISELECT(-27104,-14848),
  ABISELECT(-27088,-14840),
  ABISELECT(-11984,-6600),
  ABISELECT(-96,-56),
  ABISELECT(-28128,-15400),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C1D1Ev,_ZTv0_n32_N8S19770C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C1D0Ev,_ZTv0_n32_N8S19770C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
  ABISELECT(-31416,-17180),
  ABISELECT(-32456,-17740),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  0,
  ABISELECT(-32592,-17832),
  0,
  ABISELECT(-31568,-17280),
  ABISELECT(-31552,-17272),
  ABISELECT(-16448,-9032),
  ABISELECT(-4560,-2488),
  ABISELECT(-32592,-17832),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C1D1Ev,_ZTv0_n32_N8S19770C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C1D0Ev,_ZTv0_n32_N8S19770C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  ABISELECT(-33280,-18212),
  ABISELECT(-5728,-3136),
  ABISELECT(-32256,-17660),
  ABISELECT(-32240,-17652),
  ABISELECT(-17136,-9412),
  ABISELECT(-5248,-2868),
  ABISELECT(-33280,-18212),
  (VTBL_ENTRY)&(_ZTI8S19770C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C1D1Ev,_ZTv0_n32_N8S19770C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C1D0Ev,_ZTv0_n32_N8S19770C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19770C1[];
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C20D1Ev();
extern void _ZN9S19770C20D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C20__8S19770C1[] = {
  ABISELECT(33280,18212),
  ABISELECT(27552,15076),
  ABISELECT(28128,15400),
  ABISELECT(1024,552),
  ABISELECT(1040,560),
  ABISELECT(16144,8800),
  ABISELECT(28032,15344),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C20D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C129S19770C20__A3__8S19770C1[] = {
  ABISELECT(1024,552),
  ABISELECT(1040,560),
  ABISELECT(16144,8800),
  ABISELECT(28032,15344),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C129S19770C20__A3__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(-28032,-15344),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C129S19770C20__A3__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(-16144,-8800),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C129S19770C20__A3__8S19770C1[] = {
  0,
  ABISELECT(-1040,-560),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev)();
extern void ABISELECT(_ZThn28128_N9S19770C20D1Ev,_ZThn15400_N9S19770C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev)();
extern void ABISELECT(_ZThn28128_N9S19770C20D0Ev,_ZThn15400_N9S19770C20D0Ev)() __attribute__((weak));
extern void _ZN9S19770C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C14__9S19770C20__8S19770C1[] = {
  0,
  ABISELECT(-28128,-15400),
  ABISELECT(-576,-324),
  ABISELECT(-27104,-14848),
  ABISELECT(-27088,-14840),
  ABISELECT(-11984,-6600),
  ABISELECT(-96,-56),
  ABISELECT(-28128,-15400),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C20__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(-28032,-15344),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C20__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(-16144,-8800),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C20__8S19770C1[] = {
  0,
  ABISELECT(-1040,-560),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev)();
extern void ABISELECT(_ZThn27552_N9S19770C20D1Ev,_ZThn15076_N9S19770C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev)();
extern void ABISELECT(_ZThn27552_N9S19770C20D0Ev,_ZThn15076_N9S19770C20D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C20__8S19770C1[] = {
  0,
  ABISELECT(-27552,-15076),
  0,
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-27552,-15076),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C169S19770C14__9S19770C20__8S19770C1[] = {
  ABISELECT(-31416,-17180),
  ABISELECT(-32456,-17740),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
};
extern void ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev)();
extern void ABISELECT(_ZThn33280_N9S19770C20D1Ev,_ZThn18212_N9S19770C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev)();
extern void ABISELECT(_ZThn33280_N9S19770C20D0Ev,_ZThn18212_N9S19770C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19770C15__A1__9S19770C20__8S19770C1[] = {
  ABISELECT(-33280,-18212),
  ABISELECT(-5728,-3136),
  ABISELECT(-32256,-17660),
  ABISELECT(-32240,-17652),
  ABISELECT(-17136,-9412),
  ABISELECT(-5248,-2868),
  ABISELECT(-33280,-18212),
  (VTBL_ENTRY)&(_ZTI9S19770C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev),
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN8S19770C6D1Ev();
extern void _ZN8S19770C6D0Ev();
extern void _ZN9S19770C122v6Ev();
extern void _ZN8S19770C63v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C6__8S19770C1[] = {
  ABISELECT(31184,17076),
  ABISELECT(26720,14644),
  ABISELECT(15216,8320),
  ABISELECT(15192,8300),
  ABISELECT(14696,8024),
  ABISELECT(13776,7516),
  ABISELECT(31704,17376),
  ABISELECT(26144,14320),
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(14736,8044),
  ABISELECT(26624,14588),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19770C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19770C6D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
  (VTBL_ENTRY)&_ZN8S19770C63v12Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C18D1Ev();
extern void _ZN9S19770C18D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C188S19770C6__8S19770C1[] = {
  ABISELECT(31704,17376),
  ABISELECT(26144,14320),
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(14736,8044),
  ABISELECT(26624,14588),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C18D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C129S19770C188S19770C6__A2__8S19770C1[] = {
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(14736,8044),
  ABISELECT(26624,14588),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C129S19770C188S19770C6__A2__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(-26624,-14588),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C129S19770C188S19770C6__A2__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(-14736,-8044),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C129S19770C188S19770C6__A2__8S19770C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN9S19770C14D1Ev();
extern void _ZN9S19770C14D0Ev();
extern void _ZN9S19770C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  ABISELECT(25664,14052),
  ABISELECT(-864,-472),
  ABISELECT(-848,-464),
  ABISELECT(14256,7776),
  ABISELECT(26144,14320),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN9S19770C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
};
extern void _ZN9S19770C15D1Ev();
extern void _ZN9S19770C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C159S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  ABISELECT(25664,14052),
  ABISELECT(-864,-472),
  ABISELECT(-848,-464),
  ABISELECT(14256,7776),
  ABISELECT(26144,14320),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN9S19770C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C159S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(-26144,-14320),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C159S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(-14256,-7776),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C159S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev)();
extern void ABISELECT(_ZThn25664_N9S19770C15D1Ev,_ZThn14052_N9S19770C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev)();
extern void ABISELECT(_ZThn25664_N9S19770C15D0Ev,_ZThn14052_N9S19770C15D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C159S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  0,
  ABISELECT(-25664,-14052),
  0,
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-25664,-14052),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C169S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  ABISELECT(-5176,-2804),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C169S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  0,
  ABISELECT(5176,2804),
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(-26144,-14320),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(-14256,-7776),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev)();
extern void ABISELECT(_ZThn25664_N9S19770C14D1Ev,_ZThn14052_N9S19770C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev)();
extern void ABISELECT(_ZThn25664_N9S19770C14D0Ev,_ZThn14052_N9S19770C14D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  0,
  ABISELECT(-25664,-14052),
  0,
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-25664,-14052),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C16__9S19770C149S19770C188S19770C6__A1__8S19770C1[] = {
  ABISELECT(-5176,-2804),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C188S19770C6__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(-26624,-14588),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C188S19770C6__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(-14736,-8044),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C188S19770C6__8S19770C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void ABISELECT(_ZThn480_N9S19770C18D1Ev,_ZThn268_N9S19770C18D1Ev)();
extern void ABISELECT(_ZThn480_N9S19770C18D0Ev,_ZThn268_N9S19770C18D0Ev)();
extern void _ZN9S19770C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C14__9S19770C188S19770C6__8S19770C1[] = {
  ABISELECT(25664,14052),
  ABISELECT(-864,-472),
  ABISELECT(-848,-464),
  ABISELECT(14256,7776),
  ABISELECT(26144,14320),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S19770C18D1Ev,_ZThn268_N9S19770C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S19770C18D0Ev,_ZThn268_N9S19770C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C18D1Ev,_ZTv0_n32_N9S19770C18D1Ev)();
extern void ABISELECT(_ZThn26144_N9S19770C18D1Ev,_ZThn14320_N9S19770C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C18D0Ev,_ZTv0_n32_N9S19770C18D0Ev)();
extern void ABISELECT(_ZThn26144_N9S19770C18D0Ev,_ZThn14320_N9S19770C18D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__A1__9S19770C188S19770C6__8S19770C1[] = {
  0,
  ABISELECT(-26144,-14320),
  0,
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-26144,-14320),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C18D1Ev,_ZTv0_n32_N9S19770C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C18D0Ev,_ZTv0_n32_N9S19770C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C169S19770C14__9S19770C188S19770C6__8S19770C1[] = {
  ABISELECT(-5176,-2804),
  ABISELECT(-4808,-2608),
  (VTBL_ENTRY)&(_ZTI9S19770C18[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void ABISELECT(_ZTv0_n104_N8S19770C6D1Ev,_ZTv0_n52_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn13776_N8S19770C6D1Ev,_ZThn7516_N8S19770C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19770C6D0Ev,_ZTv0_n52_N8S19770C6D0Ev)();
extern void ABISELECT(_ZThn13776_N8S19770C6D0Ev,_ZThn7516_N8S19770C6D0Ev)() __attribute__((weak));
extern void _ZN8S19770C82v5Ev();
extern void _ZN8S19770C72v9Ev();
extern void _ZN8S19770C73v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C7__8S19770C6__8S19770C1[] = {
  0,
  0,
  ABISELECT(464,256),
  0,
  ABISELECT(-13776,-7516),
  0,
  0,
  ABISELECT(12848,7072),
  ABISELECT(12368,6804),
  ABISELECT(1440,804),
  ABISELECT(1416,784),
  ABISELECT(960,528),
  ABISELECT(920,508),
  ABISELECT(-14160,-7720),
  ABISELECT(-14144,-7712),
  ABISELECT(-13776,-7516),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19770C6D1Ev,_ZTv0_n52_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19770C6D0Ev,_ZTv0_n52_N8S19770C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19770C82v5Ev,
  (VTBL_ENTRY)&_ZN8S19770C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19770C73v10Ev,
};
extern void _ZN8S19770C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C5__8S19770C6__8S19770C1[] = {
  0,
  ABISELECT(-14696,-8024),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C6__8S19770C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C38S19770C88S19770C7__A1__8S19770C6__8S19770C1[] = {
  ABISELECT(-14240,-7772),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__A1__8S19770C6__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(-14736,-8044),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S19770C6D1Ev,_ZTv0_n36_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn15192_N8S19770C6D1Ev,_ZThn8300_N8S19770C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19770C6D0Ev,_ZTv0_n36_N8S19770C6D0Ev)();
extern void ABISELECT(_ZThn15192_N8S19770C6D0Ev,_ZThn8300_N8S19770C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19770C10__8S19770C6__8S19770C1[] = {
  ABISELECT(-15192,-8300),
  ABISELECT(-15576,-8504),
  ABISELECT(-456,-256),
  ABISELECT(11432,6288),
  ABISELECT(10952,6020),
  ABISELECT(-15560,-8496),
  ABISELECT(24,20),
  ABISELECT(-15192,-8300),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19770C6D1Ev,_ZTv0_n36_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19770C6D0Ev,_ZTv0_n36_N8S19770C6D0Ev),
};
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19770C6D1Ev,_ZTv0_n40_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn15216_N8S19770C6D1Ev,_ZThn8320_N8S19770C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19770C6D0Ev,_ZTv0_n40_N8S19770C6D0Ev)();
extern void ABISELECT(_ZThn15216_N8S19770C6D0Ev,_ZThn8320_N8S19770C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19770C11__8S19770C6__8S19770C1[] = {
  ABISELECT(-15216,-8320),
  0,
  0,
  ABISELECT(-15600,-8524),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-15584,-8516),
  ABISELECT(-15216,-8320),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19770C6D1Ev,_ZTv0_n40_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19770C6D0Ev,_ZTv0_n40_N8S19770C6D0Ev),
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn26144_N8S19770C6D1Ev,_ZThn14320_N8S19770C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev)();
extern void ABISELECT(_ZThn26144_N8S19770C6D0Ev,_ZThn14320_N8S19770C6D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__8S19770C6__8S19770C1[] = {
  0,
  ABISELECT(-26144,-14320),
  0,
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-26144,-14320),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__8S19770C6__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(-26624,-14588),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
};
extern void ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn26720_N8S19770C6D1Ev,_ZThn14644_N8S19770C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev)();
extern void ABISELECT(_ZThn26720_N8S19770C6D0Ev,_ZThn14644_N8S19770C6D0Ev)() __attribute__((weak));
extern void _ZN9S19770C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C14__8S19770C6__8S19770C1[] = {
  0,
  ABISELECT(-26720,-14644),
  ABISELECT(-576,-324),
  ABISELECT(-27104,-14848),
  ABISELECT(-27088,-14840),
  ABISELECT(-11984,-6600),
  ABISELECT(-96,-56),
  ABISELECT(-26720,-14644),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C169S19770C14__8S19770C6__8S19770C1[] = {
  ABISELECT(-31416,-17180),
  ABISELECT(-31048,-16984),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn31184_N8S19770C6D1Ev,_ZThn17076_N8S19770C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev)();
extern void ABISELECT(_ZThn31184_N8S19770C6D0Ev,_ZThn17076_N8S19770C6D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C17__8S19770C6__8S19770C1[] = {
  0,
  ABISELECT(-31184,-17076),
  0,
  ABISELECT(-31568,-17280),
  ABISELECT(-31552,-17272),
  ABISELECT(-16448,-9032),
  ABISELECT(-4560,-2488),
  ABISELECT(-31184,-17076),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
extern void ABISELECT(_ZThn480_N8S19770C6D1Ev,_ZThn268_N8S19770C6D1Ev)();
extern void ABISELECT(_ZThn480_N8S19770C6D0Ev,_ZThn268_N8S19770C6D0Ev)();
extern void _ZN9S19770C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C149S19770C18__A1__8S19770C6__8S19770C1[] = {
  ABISELECT(25664,14052),
  ABISELECT(-864,-472),
  ABISELECT(-848,-464),
  ABISELECT(14256,7776),
  ABISELECT(26144,14320),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N8S19770C6D1Ev,_ZThn268_N8S19770C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N8S19770C6D0Ev,_ZThn268_N8S19770C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C169S19770C149S19770C18__A1__8S19770C6__8S19770C1[] = {
  ABISELECT(-5176,-2804),
  ABISELECT(-4808,-2608),
  (VTBL_ENTRY)&(_ZTI8S19770C6[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C7D1Ev();
extern void _ZN8S19770C7D0Ev();
extern void _ZN8S19770C82v5Ev();
extern void _ZN8S19770C72v9Ev();
extern void _ZN8S19770C73v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C7__8S19770C1[] = {
  ABISELECT(12848,7072),
  ABISELECT(12368,6804),
  ABISELECT(1440,804),
  ABISELECT(1416,784),
  ABISELECT(960,528),
  ABISELECT(920,508),
  ABISELECT(-14160,-7720),
  ABISELECT(-14144,-7712),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19770C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19770C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19770C82v5Ev,
  (VTBL_ENTRY)&_ZN8S19770C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19770C73v10Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
extern void _ZN8S19770C8D1Ev();
extern void _ZN8S19770C8D0Ev();
extern void _ZN8S19770C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C88S19770C7__8S19770C1[] = {
  ABISELECT(920,508),
  ABISELECT(-14160,-7720),
  ABISELECT(-14144,-7712),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19770C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19770C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19770C82v5Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C98S19770C88S19770C7__8S19770C1[] = {
  ABISELECT(-14160,-7720),
  ABISELECT(-14144,-7712),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C98S19770C88S19770C7__8S19770C1[] = {
  0,
  ABISELECT(14144,7712),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C5__8S19770C88S19770C7__8S19770C1[] = {
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C88S19770C7__8S19770C1[] = {
  0,
  ABISELECT(14144,7712),
  (VTBL_ENTRY)&(_ZTI8S19770C8[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C5__8S19770C7__8S19770C1[] = {
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C7__8S19770C1[] = {
  0,
  ABISELECT(14144,7712),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__A1__8S19770C7__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(-960,-528),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S19770C7D1Ev,_ZTv0_n36_N8S19770C7D1Ev)();
extern void ABISELECT(_ZThn1416_N8S19770C7D1Ev,_ZThn784_N8S19770C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19770C7D0Ev,_ZTv0_n36_N8S19770C7D0Ev)();
extern void ABISELECT(_ZThn1416_N8S19770C7D0Ev,_ZThn784_N8S19770C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19770C10__8S19770C7__8S19770C1[] = {
  ABISELECT(-1416,-784),
  ABISELECT(-15576,-8504),
  ABISELECT(-456,-256),
  ABISELECT(11432,6288),
  ABISELECT(10952,6020),
  ABISELECT(-15560,-8496),
  ABISELECT(24,20),
  ABISELECT(-1416,-784),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19770C7D1Ev,_ZTv0_n36_N8S19770C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19770C7D0Ev,_ZTv0_n36_N8S19770C7D0Ev),
};
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19770C7D1Ev,_ZTv0_n40_N8S19770C7D1Ev)();
extern void ABISELECT(_ZThn1440_N8S19770C7D1Ev,_ZThn804_N8S19770C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19770C7D0Ev,_ZTv0_n40_N8S19770C7D0Ev)();
extern void ABISELECT(_ZThn1440_N8S19770C7D0Ev,_ZThn804_N8S19770C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19770C11__8S19770C7__8S19770C1[] = {
  ABISELECT(-1440,-804),
  0,
  0,
  ABISELECT(-15600,-8524),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-15584,-8516),
  ABISELECT(-1440,-804),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19770C7D1Ev,_ZTv0_n40_N8S19770C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19770C7D0Ev,_ZTv0_n40_N8S19770C7D0Ev),
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19770C7D1Ev,_ZTv0_n32_N8S19770C7D1Ev)();
extern void ABISELECT(_ZThn12368_N8S19770C7D1Ev,_ZThn6804_N8S19770C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19770C7D0Ev,_ZTv0_n32_N8S19770C7D0Ev)();
extern void ABISELECT(_ZThn12368_N8S19770C7D0Ev,_ZThn6804_N8S19770C7D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__8S19770C7__8S19770C1[] = {
  0,
  ABISELECT(-12368,-6804),
  0,
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-12368,-6804),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C7D1Ev,_ZTv0_n32_N8S19770C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19770C7D0Ev,_ZTv0_n32_N8S19770C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__8S19770C7__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(-12848,-7072),
  (VTBL_ENTRY)&(_ZTI8S19770C7[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__A1__8S19770C1[] = {
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  0,
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__8S19770C9__A1__8S19770C1[] = {
  0,
  ABISELECT(15104,8240),
  (VTBL_ENTRY)&(_ZTI8S19770C9[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN9S19770C10D1Ev();
extern void _ZN9S19770C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C10__8S19770C1[] = {
  ABISELECT(-15576,-8504),
  ABISELECT(-456,-256),
  ABISELECT(11432,6288),
  ABISELECT(10952,6020),
  ABISELECT(-15560,-8496),
  ABISELECT(24,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN9S19770C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C10D0Ev,
};
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N9S19770C10D1Ev,_ZTv0_n40_N9S19770C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19770C10D1Ev,_ZThn20_N9S19770C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19770C10D0Ev,_ZTv0_n40_N9S19770C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19770C10D0Ev,_ZThn20_N9S19770C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19770C11__9S19770C10__8S19770C1[] = {
  ABISELECT(-24,-20),
  0,
  0,
  ABISELECT(-15600,-8524),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-15584,-8516),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19770C10D1Ev,_ZTv0_n40_N9S19770C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19770C10D0Ev,_ZTv0_n40_N9S19770C10D0Ev),
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C10__8S19770C1[] = {
  0,
  ABISELECT(15560,8496),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C10D1Ev,_ZTv0_n32_N9S19770C10D1Ev)();
extern void ABISELECT(_ZThn10952_N9S19770C10D1Ev,_ZThn6020_N9S19770C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C10D0Ev,_ZTv0_n32_N9S19770C10D0Ev)();
extern void ABISELECT(_ZThn10952_N9S19770C10D0Ev,_ZThn6020_N9S19770C10D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C10__8S19770C1[] = {
  0,
  ABISELECT(-10952,-6020),
  0,
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-10952,-6020),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C10D1Ev,_ZTv0_n32_N9S19770C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C10D0Ev,_ZTv0_n32_N9S19770C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C10__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(-11432,-6288),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C10__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(456,256),
  (VTBL_ENTRY)&(_ZTI9S19770C10[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN9S19770C112v7Ev();
extern void _ZN9S19770C112v8Ev();
extern void _ZN9S19770C11D1Ev();
extern void _ZN9S19770C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C11__8S19770C1[] = {
  ABISELECT(-15600,-8524),
  ABISELECT(-480,-276),
  ABISELECT(11408,6268),
  ABISELECT(10928,6000),
  ABISELECT(-15584,-8516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN9S19770C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19770C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19770C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C11D0Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C11__8S19770C1[] = {
  0,
  ABISELECT(15584,8516),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev)();
extern void ABISELECT(_ZThn10928_N9S19770C11D1Ev,_ZThn6000_N9S19770C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev)();
extern void ABISELECT(_ZThn10928_N9S19770C11D0Ev,_ZThn6000_N9S19770C11D0Ev)() __attribute__((weak));
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C11__8S19770C1[] = {
  0,
  ABISELECT(-10928,-6000),
  0,
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C11__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(-11408,-6268),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C11__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(480,276),
  (VTBL_ENTRY)&(_ZTI9S19770C11[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__8S19770C1[] = {
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C12__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C12__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(11408,6276),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C12__8S19770C1[] = {
  0,
  ABISELECT(26512,14516),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C13__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(11888,6544),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C13__8S19770C1[] = {
  0,
  ABISELECT(26992,14784),
  (VTBL_ENTRY)&(_ZTI9S19770C13[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN9S19770C14D1Ev();
extern void _ZN9S19770C14D0Ev();
extern void _ZN9S19770C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C14__8S19770C1[] = {
  ABISELECT(-576,-324),
  ABISELECT(-27104,-14848),
  ABISELECT(-27088,-14840),
  ABISELECT(-11984,-6600),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN9S19770C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C143v11Ev,
};
extern void _ZN9S19770C15D1Ev();
extern void _ZN9S19770C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C159S19770C14__8S19770C1[] = {
  ABISELECT(-576,-324),
  ABISELECT(-27104,-14848),
  ABISELECT(-27088,-14840),
  ABISELECT(-11984,-6600),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN9S19770C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C159S19770C14__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C159S19770C14__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(11984,6600),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C159S19770C14__8S19770C1[] = {
  0,
  ABISELECT(27088,14840),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev)();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C159S19770C14__8S19770C1[] = {
  0,
  ABISELECT(576,324),
  0,
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C169S19770C14__8S19770C1[] = {
  ABISELECT(-31416,-17180),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C169S19770C14__8S19770C1[] = {
  0,
  ABISELECT(31416,17180),
  (VTBL_ENTRY)&(_ZTI9S19770C16[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C14__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C14__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(11984,6600),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C14__8S19770C1[] = {
  0,
  ABISELECT(27088,14840),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev)();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C14__8S19770C1[] = {
  0,
  ABISELECT(576,324),
  0,
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C16__9S19770C14__8S19770C1[] = {
  ABISELECT(-31416,-17180),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S19770C14[0]),
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C17D1Ev();
extern void _ZN9S19770C17D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C17__8S19770C1[] = {
  ABISELECT(-31568,-17280),
  ABISELECT(-31552,-17272),
  ABISELECT(-16448,-9032),
  ABISELECT(-4560,-2488),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C17[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C17D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void _ZN9S19770C12D1Ev();
extern void _ZN9S19770C12D0Ev();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C129S19770C17__A1__8S19770C1[] = {
  ABISELECT(-31568,-17280),
  ABISELECT(-31552,-17272),
  ABISELECT(-16448,-9032),
  ABISELECT(-4560,-2488),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C129S19770C17__A1__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(4560,2488),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C129S19770C17__A1__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(16448,9032),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C129S19770C17__A1__8S19770C1[] = {
  0,
  ABISELECT(31552,17272),
  (VTBL_ENTRY)&(_ZTI9S19770C12[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C17__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(4560,2488),
  (VTBL_ENTRY)&(_ZTI9S19770C17[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C17__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(16448,9032),
  (VTBL_ENTRY)&(_ZTI9S19770C17[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C17__8S19770C1[] = {
  0,
  ABISELECT(31552,17272),
  (VTBL_ENTRY)&(_ZTI9S19770C17[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN9S19770C15D1Ev();
extern void _ZN9S19770C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C15__A2__8S19770C1[] = {
  ABISELECT(-5728,-3136),
  ABISELECT(-32256,-17660),
  ABISELECT(-32240,-17652),
  ABISELECT(-17136,-9412),
  ABISELECT(-5248,-2868),
  0,
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN9S19770C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19770C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19770C13__9S19770C15__A2__8S19770C1[] = {
  ABISELECT(-27008,-14792),
  ABISELECT(-26992,-14784),
  ABISELECT(-11888,-6544),
  ABISELECT(5248,2868),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
};
extern void _ZN8S19770C52v2Ev();
extern void _ZN8S19770C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C9__9S19770C15__A2__8S19770C1[] = {
  0,
  0,
  ABISELECT(-15120,-8248),
  ABISELECT(-15104,-8240),
  ABISELECT(17136,9412),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19770C92v4Ev,
};
extern void _ZN8S19770C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19770C3__9S19770C15__A2__8S19770C1[] = {
  0,
  ABISELECT(32240,17652),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
};
extern void _ZN8S19770C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev)();
extern void _ZN9S19770C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19770C12__9S19770C15__A2__8S19770C1[] = {
  0,
  ABISELECT(5728,3136),
  0,
  ABISELECT(-26528,-14524),
  ABISELECT(-26512,-14516),
  ABISELECT(-11408,-6276),
  ABISELECT(480,268),
  ABISELECT(5728,3136),
  (VTBL_ENTRY)&(_ZTI9S19770C15[0]),
  (VTBL_ENTRY)&_ZN8S19770C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19770C122v6Ev,
};
static  VTT_ENTRY vtt_S19770C1[] = {
  {&(_ZTV8S19770C1[17]),  17,183},
  {&(_tg__ZTV9S19770C20__8S19770C1[9]),  9,13},
  {&(_tg__ZTV9S19770C129S19770C20__A3__8S19770C1[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C129S19770C20__A3__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C129S19770C20__A3__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C129S19770C20__A3__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C14__9S19770C20__8S19770C1[9]),  9,12},
  {&(_tg__ZTV9S19770C13__9S19770C20__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C20__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C20__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C20__8S19770C1[9]),  9,13},
  {&(_tg__ZTV9S19770C169S19770C14__9S19770C20__8S19770C1[3]),  3,3},
  {&(_tg__ZTV9S19770C15__A1__9S19770C20__8S19770C1[8]),  8,10},
  {&(_ZTV8S19770C1[25]),  25,183},
  {&(_ZTV8S19770C1[45]),  45,183},
  {&(_ZTV8S19770C1[80]),  80,183},
  {&(_ZTV8S19770C1[93]),  93,183},
  {&(_ZTV8S19770C1[89]),  89,183},
  {&(_ZTV8S19770C1[100]),  100,183},
  {&(_ZTV8S19770C1[111]),  111,183},
  {&(_ZTV8S19770C1[123]),  123,183},
  {&(_ZTV8S19770C1[136]),  136,183},
  {&(_ZTV8S19770C1[145]),  145,183},
  {&(_ZTV8S19770C1[154]),  154,183},
  {&(_ZTV8S19770C1[160]),  160,183},
  {&(_ZTV8S19770C1[169]),  169,183},
  {&(_ZTV8S19770C1[57]),  57,183},
  {&(_ZTV8S19770C1[63]),  63,183},
  {&(_ZTV8S19770C1[181]),  181,183},
  {&(_tg__ZTV8S19770C6__8S19770C1[14]),  14,19},
  {&(_tg__ZTV9S19770C188S19770C6__8S19770C1[8]),  8,12},
  {&(_tg__ZTV9S19770C129S19770C188S19770C6__A2__8S19770C1[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C129S19770C188S19770C6__A2__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C129S19770C188S19770C6__A2__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C129S19770C188S19770C6__A2__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C149S19770C188S19770C6__A1__8S19770C1[7]),  7,10},
  {&(_tg__ZTV9S19770C159S19770C149S19770C188S19770C6__A1__8S19770C1[7]),  7,9},
  {&(_tg__ZTV9S19770C13__9S19770C159S19770C149S19770C188S19770C6__A1__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C159S19770C149S19770C188S19770C6__A1__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C159S19770C149S19770C188S19770C6__A1__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C159S19770C149S19770C188S19770C6__A1__8S19770C1[9]),  9,13},
  {&(_tg__ZTV9S19770C169S19770C149S19770C188S19770C6__A1__8S19770C1[3]),  3,3},
  {&(_tg__ZTV8S19770C3__9S19770C169S19770C149S19770C188S19770C6__A1__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C13__9S19770C149S19770C188S19770C6__A1__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C149S19770C188S19770C6__A1__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C149S19770C188S19770C6__A1__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C149S19770C188S19770C6__A1__8S19770C1[9]),  9,13},
  {&(_tg__ZTV9S19770C16__9S19770C149S19770C188S19770C6__A1__8S19770C1[3]),  3,3},
  {&(_tg__ZTV9S19770C13__9S19770C188S19770C6__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C188S19770C6__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C188S19770C6__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C14__9S19770C188S19770C6__8S19770C1[7]),  7,10},
  {&(_tg__ZTV9S19770C12__A1__9S19770C188S19770C6__8S19770C1[9]),  9,13},
  {&(_tg__ZTV9S19770C169S19770C14__9S19770C188S19770C6__8S19770C1[3]),  3,3},
  {&(_tg__ZTV8S19770C7__8S19770C6__8S19770C1[17]),  17,24},
  {&(_tg__ZTV8S19770C5__8S19770C6__8S19770C1[3]),  3,4},
  {&(_tg__ZTV8S19770C3__8S19770C6__8S19770C1[3]),  3,4},
  {&(_tg__ZTV8S19770C38S19770C88S19770C7__A1__8S19770C6__8S19770C1[2]),  2,3},
  {&(_tg__ZTV8S19770C9__A1__8S19770C6__8S19770C1[6]),  6,8},
  {&(_tg__ZTV9S19770C10__8S19770C6__8S19770C1[9]),  9,11},
  {&(_tg__ZTV9S19770C11__8S19770C6__8S19770C1[10]),  10,14},
  {&(_tg__ZTV9S19770C12__8S19770C6__8S19770C1[9]),  9,13},
  {&(_tg__ZTV9S19770C13__8S19770C6__8S19770C1[5]),  5,5},
  {&(_tg__ZTV9S19770C14__8S19770C6__8S19770C1[9]),  9,12},
  {&(_tg__ZTV9S19770C169S19770C14__8S19770C6__8S19770C1[3]),  3,3},
  {&(_tg__ZTV9S19770C17__8S19770C6__8S19770C1[9]),  9,13},
  {&(_tg__ZTV9S19770C149S19770C18__A1__8S19770C6__8S19770C1[7]),  7,10},
  {&(_tg__ZTV9S19770C169S19770C149S19770C18__A1__8S19770C6__8S19770C1[3]),  3,3},
  {&(_tg__ZTV8S19770C7__8S19770C1[10]),  10,17},
  {&(_tg__ZTV8S19770C88S19770C7__8S19770C1[5]),  5,10},
  {&(_tg__ZTV8S19770C98S19770C88S19770C7__8S19770C1[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C98S19770C88S19770C7__8S19770C1[3]),  3,4},
  {&(_tg__ZTV8S19770C5__8S19770C88S19770C7__8S19770C1[3]),  3,4},
  {&(_tg__ZTV8S19770C3__8S19770C88S19770C7__8S19770C1[3]),  3,4},
  {&(_tg__ZTV8S19770C5__8S19770C7__8S19770C1[3]),  3,4},
  {&(_tg__ZTV8S19770C3__8S19770C7__8S19770C1[3]),  3,4},
  {&(_tg__ZTV8S19770C9__A1__8S19770C7__8S19770C1[6]),  6,8},
  {&(_tg__ZTV9S19770C10__8S19770C7__8S19770C1[9]),  9,11},
  {&(_tg__ZTV9S19770C11__8S19770C7__8S19770C1[10]),  10,14},
  {&(_tg__ZTV9S19770C12__8S19770C7__8S19770C1[9]),  9,13},
  {&(_tg__ZTV9S19770C13__8S19770C7__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__A1__8S19770C1[4]),  4,6},
  {&(_tg__ZTV8S19770C3__8S19770C9__A1__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C10__8S19770C1[8]),  8,10},
  {&(_tg__ZTV9S19770C11__9S19770C10__8S19770C1[10]),  10,14},
  {&(_tg__ZTV8S19770C3__9S19770C10__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C10__8S19770C1[9]),  9,13},
  {&(_tg__ZTV9S19770C13__9S19770C10__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C10__8S19770C1[6]),  6,8},
  {&(_tg__ZTV9S19770C11__8S19770C1[7]),  7,11},
  {&(_tg__ZTV8S19770C3__9S19770C11__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C11__8S19770C1[9]),  9,13},
  {&(_tg__ZTV9S19770C13__9S19770C11__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C11__8S19770C1[6]),  6,8},
  {&(_tg__ZTV9S19770C12__8S19770C1[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C12__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C12__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C12__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C13__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C13__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C13__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C14__8S19770C1[7]),  7,10},
  {&(_tg__ZTV9S19770C159S19770C14__8S19770C1[7]),  7,9},
  {&(_tg__ZTV9S19770C13__9S19770C159S19770C14__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C159S19770C14__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C159S19770C14__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C159S19770C14__8S19770C1[9]),  9,13},
  {&(_tg__ZTV9S19770C169S19770C14__8S19770C1[3]),  3,3},
  {&(_tg__ZTV8S19770C3__9S19770C169S19770C14__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C13__9S19770C14__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C14__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C14__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C14__8S19770C1[9]),  9,13},
  {&(_tg__ZTV9S19770C16__9S19770C14__8S19770C1[3]),  3,3},
  {&(_tg__ZTV9S19770C17__8S19770C1[6]),  6,10},
  {&(_tg__ZTV9S19770C129S19770C17__A1__8S19770C1[6]),  6,10},
  {&(_tg__ZTV9S19770C13__9S19770C129S19770C17__A1__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C129S19770C17__A1__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C129S19770C17__A1__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C13__9S19770C17__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C17__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C17__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C15__A2__8S19770C1[7]),  7,9},
  {&(_tg__ZTV9S19770C13__9S19770C15__A2__8S19770C1[5]),  5,5},
  {&(_tg__ZTV8S19770C9__9S19770C15__A2__8S19770C1[6]),  6,8},
  {&(_tg__ZTV8S19770C3__9S19770C15__A2__8S19770C1[3]),  3,4},
  {&(_tg__ZTV9S19770C12__9S19770C15__A2__8S19770C1[9]),  9,13},
};
extern VTBL_ENTRY _ZTI8S19770C1[];
extern  VTBL_ENTRY _ZTV8S19770C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19770C1[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C11D0Ev,_ZTv0_n32_N9S19770C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S19770C11D0Ev,_ZThn6000_N9S19770C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C11D1Ev,_ZTv0_n32_N9S19770C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S19770C11D1Ev,_ZThn6000_N9S19770C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C10D0Ev,_ZTv0_n32_N9S19770C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S19770C10D0Ev,_ZThn6020_N9S19770C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C10D1Ev,_ZTv0_n32_N9S19770C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S19770C10D1Ev,_ZThn6020_N9S19770C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19770C10D0Ev,_ZTv0_n40_N9S19770C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19770C10D0Ev,_ZThn20_N9S19770C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19770C10D1Ev,_ZTv0_n40_N9S19770C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19770C10D1Ev,_ZThn20_N9S19770C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19770C7D0Ev,_ZTv0_n32_N8S19770C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12368_N8S19770C7D0Ev,_ZThn6804_N8S19770C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19770C7D1Ev,_ZTv0_n32_N8S19770C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12368_N8S19770C7D1Ev,_ZThn6804_N8S19770C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19770C7D0Ev,_ZTv0_n40_N8S19770C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N8S19770C7D0Ev,_ZThn804_N8S19770C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19770C7D1Ev,_ZTv0_n40_N8S19770C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N8S19770C7D1Ev,_ZThn804_N8S19770C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19770C7D0Ev,_ZTv0_n36_N8S19770C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1416_N8S19770C7D0Ev,_ZThn784_N8S19770C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19770C7D1Ev,_ZTv0_n36_N8S19770C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1416_N8S19770C7D1Ev,_ZThn784_N8S19770C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19770C6D0Ev,_ZTv0_n32_N8S19770C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31184_N8S19770C6D0Ev,_ZThn17076_N8S19770C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26720_N8S19770C6D0Ev,_ZThn14644_N8S19770C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26144_N8S19770C6D0Ev,_ZThn14320_N8S19770C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19770C6D1Ev,_ZTv0_n32_N8S19770C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31184_N8S19770C6D1Ev,_ZThn17076_N8S19770C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26720_N8S19770C6D1Ev,_ZThn14644_N8S19770C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26144_N8S19770C6D1Ev,_ZThn14320_N8S19770C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19770C6D0Ev,_ZTv0_n40_N8S19770C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15216_N8S19770C6D0Ev,_ZThn8320_N8S19770C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19770C6D1Ev,_ZTv0_n40_N8S19770C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15216_N8S19770C6D1Ev,_ZThn8320_N8S19770C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19770C6D0Ev,_ZTv0_n36_N8S19770C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15192_N8S19770C6D0Ev,_ZThn8300_N8S19770C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19770C6D1Ev,_ZTv0_n36_N8S19770C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15192_N8S19770C6D1Ev,_ZThn8300_N8S19770C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19770C6D0Ev,_ZTv0_n52_N8S19770C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13776_N8S19770C6D0Ev,_ZThn7516_N8S19770C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19770C6D1Ev,_ZTv0_n52_N8S19770C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13776_N8S19770C6D1Ev,_ZThn7516_N8S19770C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C18D0Ev,_ZTv0_n32_N9S19770C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26144_N9S19770C18D0Ev,_ZThn14320_N9S19770C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C18D1Ev,_ZTv0_n32_N9S19770C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26144_N9S19770C18D1Ev,_ZThn14320_N9S19770C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C14D0Ev,_ZTv0_n32_N9S19770C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25664_N9S19770C14D0Ev,_ZThn14052_N9S19770C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C14D1Ev,_ZTv0_n32_N9S19770C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25664_N9S19770C14D1Ev,_ZThn14052_N9S19770C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C15D0Ev,_ZTv0_n32_N9S19770C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25664_N9S19770C15D0Ev,_ZThn14052_N9S19770C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C15D1Ev,_ZTv0_n32_N9S19770C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25664_N9S19770C15D1Ev,_ZThn14052_N9S19770C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C20D0Ev,_ZTv0_n32_N9S19770C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N9S19770C20D0Ev,_ZThn18212_N9S19770C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27552_N9S19770C20D0Ev,_ZThn15076_N9S19770C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28128_N9S19770C20D0Ev,_ZThn15400_N9S19770C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19770C20D1Ev,_ZTv0_n32_N9S19770C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N9S19770C20D1Ev,_ZThn18212_N9S19770C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27552_N9S19770C20D1Ev,_ZThn15076_N9S19770C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28128_N9S19770C20D1Ev,_ZThn15400_N9S19770C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19770C1D0Ev,_ZTv0_n32_N8S19770C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N8S19770C1D0Ev,_ZThn18212_N8S19770C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32592_N8S19770C1D0Ev,_ZThn17832_N8S19770C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28128_N8S19770C1D0Ev,_ZThn15400_N8S19770C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27552_N8S19770C1D0Ev,_ZThn15076_N8S19770C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19770C1D1Ev,_ZTv0_n32_N8S19770C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N8S19770C1D1Ev,_ZThn18212_N8S19770C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32592_N8S19770C1D1Ev,_ZThn17832_N8S19770C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28128_N8S19770C1D1Ev,_ZThn15400_N8S19770C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27552_N8S19770C1D1Ev,_ZThn15076_N8S19770C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19770C1D0Ev,_ZTv0_n40_N8S19770C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16624_N8S19770C1D0Ev,_ZThn9076_N8S19770C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19770C1D1Ev,_ZTv0_n40_N8S19770C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16624_N8S19770C1D1Ev,_ZThn9076_N8S19770C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19770C1D0Ev,_ZTv0_n36_N8S19770C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16600_N8S19770C1D0Ev,_ZThn9056_N8S19770C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19770C1D1Ev,_ZTv0_n36_N8S19770C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16600_N8S19770C1D1Ev,_ZThn9056_N8S19770C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19770C1D0Ev,_ZTv0_n52_N8S19770C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15184_N8S19770C1D0Ev,_ZThn8272_N8S19770C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19770C1D1Ev,_ZTv0_n52_N8S19770C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15184_N8S19770C1D1Ev,_ZThn8272_N8S19770C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S19770C1D0Ev,_ZTv0_n64_N8S19770C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1408_N8S19770C1D0Ev,_ZThn756_N8S19770C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S19770C1D1Ev,_ZTv0_n64_N8S19770C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1408_N8S19770C1D1Ev,_ZThn756_N8S19770C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19770C1 = {  "S19770C1", // class name
  bases_S19770C1, 38,
  &(vtc_S19770C1[0]), // expected_vtbl_contents
  &(vtt_S19770C1[0]), // expected_vtt_contents
  ABISELECT(51392,28092), // object size
  NSPAIRA(_ZTI8S19770C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19770C1),183, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19770C1),127, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C5  {
  int s19769c5f0;
  void *s19769c5f1;
  ::S281C37_nt s19769c5f2;
  virtual void  v2(); // _ZN8S19769C52v2Ev
  ~S19769C5(); // tgen
  S19769C5(); // tgen
};
//SIG(-1 S19769C5) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S19769C5()
{
  extern Class_Descriptor cd_S19769C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19769C5, buf);
    S19769C5 *dp, &lv = *(dp=new (buf) S19769C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19769C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19769C5)");
    check_field_offset(lv, s19769c5f0, ABISELECT(8,4), "S19769C5.s19769c5f0");
    check_field_offset(lv, s19769c5f1, ABISELECT(16,8), "S19769C5.s19769c5f1");
    check_field_offset(lv, s19769c5f2, ABISELECT(24,12), "S19769C5.s19769c5f2");
    test_class_info(&lv, &cd_S19769C5);
    dp->~S19769C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C5(Test_S19769C5, "S19769C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19769C5C1Ev();
extern void _ZN8S19769C5D1Ev();
Name_Map name_map_S19769C5[] = {
  NSPAIR(_ZN8S19769C5C1Ev),
  NSPAIR(_ZN8S19769C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19769C5[];
extern void _ZN8S19769C52v2Ev();
static  VTBL_ENTRY vtc_S19769C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C5[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
Class_Descriptor cd_S19769C5 = {  "S19769C5", // class name
  0,0,//no base classes
  &(vtc_S19769C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19769C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19769C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C3  {
  int s19769c3f0[6];
  char s19769c3f1:2;
  long double s19769c3f2;
  void *s19769c3f3[2];
  int s19769c3f4;
  long double s19769c3f5;
  ::S20176C3_nt s19769c3f6;
  ::S281C37_nt s19769c3f7;
  ::S281C37_nt s19769c3f8[9];
  void *s19769c3f9;
  ::S19769C5 s19769c3f10;
  ::S19769C5 s19769c3f11;
  virtual void  v3(); // _ZN8S19769C32v3Ev
  ~S19769C3(); // tgen
  S19769C3(); // tgen
};
//SIG(-1 S19769C3) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S19769C3()
{
  extern Class_Descriptor cd_S19769C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S19769C3, buf);
    S19769C3 *dp, &lv = *(dp=new (buf) S19769C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S19769C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C3)");
    check_field_offset(lv, s19769c3f0, ABISELECT(8,4), "S19769C3.s19769c3f0");
    set_bf_and_test(lv, s19769c3f1, ABISELECT(32,28), 0, 2, 1, "S19769C3");
    set_bf_and_test(lv, s19769c3f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S19769C3");
    check_field_offset(lv, s19769c3f2, ABISELECT(48,32), "S19769C3.s19769c3f2");
    check_field_offset(lv, s19769c3f3, ABISELECT(64,44), "S19769C3.s19769c3f3");
    check_field_offset(lv, s19769c3f4, ABISELECT(80,52), "S19769C3.s19769c3f4");
    check_field_offset(lv, s19769c3f5, ABISELECT(96,56), "S19769C3.s19769c3f5");
    check_field_offset(lv, s19769c3f6, ABISELECT(112,68), "S19769C3.s19769c3f6");
    check_field_offset(lv, s19769c3f7, ABISELECT(120,72), "S19769C3.s19769c3f7");
    check_field_offset(lv, s19769c3f8, ABISELECT(136,80), "S19769C3.s19769c3f8");
    check_field_offset(lv, s19769c3f9, ABISELECT(280,152), "S19769C3.s19769c3f9");
    check_field_offset(lv, s19769c3f10, ABISELECT(288,156), "S19769C3.s19769c3f10");
    check_field_offset(lv, s19769c3f11, ABISELECT(328,176), "S19769C3.s19769c3f11");
    test_class_info(&lv, &cd_S19769C3);
    dp->~S19769C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C3(Test_S19769C3, "S19769C3", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN8S19769C3C1Ev();
extern void _ZN8S19769C3D1Ev();
Name_Map name_map_S19769C3[] = {
  NSPAIR(_ZN8S19769C3C1Ev),
  NSPAIR(_ZN8S19769C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19769C3[];
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY vtc_S19769C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C3[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
Class_Descriptor cd_S19769C3 = {  "S19769C3", // class name
  0,0,//no base classes
  &(vtc_S19769C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI8S19769C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19769C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C9  : S19769C5 , virtual S19769C3 , virtual S281C37_nt {
  void *s19769c9f0;
  __tsi64 s19769c9f1;
  char s19769c9f2[2];
  ::S19769C3 s19769c9f3;
  short s19769c9f4[7];
  int s19769c9f5;
  char s19769c9f6;
  int s19769c9f7:20;
  virtual void  v4(); // _ZN8S19769C92v4Ev
  ~S19769C9(); // tgen
  S19769C9(); // tgen
};
//SIG(-1 S19769C9) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


void  S19769C9 ::v4(){vfunc_called(this, "_ZN8S19769C92v4Ev");}
S19769C9 ::~S19769C9(){ note_dtor("S19769C9", this);} // tgen
S19769C9 ::S19769C9(){ note_ctor("S19769C9", this);} // tgen

static void Test_S19769C9()
{
  extern Class_Descriptor cd_S19769C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S19769C9, buf);
    S19769C9 *dp, &lv = *(dp=new (buf) S19769C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S19769C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C9)");
    check_base_class_offset(lv, (S19769C5*), 0, "S19769C9");
    check_base_class_offset(lv, (S19769C3*), ABISELECT(464,256), "S19769C9");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S19769C9");
    check_field_offset(lv, s19769c9f0, ABISELECT(40,20), "S19769C9.s19769c9f0");
    check_field_offset(lv, s19769c9f1, ABISELECT(48,24), "S19769C9.s19769c9f1");
    check_field_offset(lv, s19769c9f2, ABISELECT(56,32), "S19769C9.s19769c9f2");
    check_field_offset(lv, s19769c9f3, ABISELECT(64,36), "S19769C9.s19769c9f3");
    check_field_offset(lv, s19769c9f4, ABISELECT(432,232), "S19769C9.s19769c9f4");
    check_field_offset(lv, s19769c9f5, ABISELECT(448,248), "S19769C9.s19769c9f5");
    check_field_offset(lv, s19769c9f6, ABISELECT(452,252), "S19769C9.s19769c9f6");
    set_bf_and_test(lv, s19769c9f7, ABISELECT(453,253), 0, 20, 1, "S19769C9");
    set_bf_and_test(lv, s19769c9f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S19769C9");
    test_class_info(&lv, &cd_S19769C9);
    dp->~S19769C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C9(Test_S19769C9, "S19769C9", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN8S19769C9C1Ev();
extern void _ZN8S19769C9D1Ev();
Name_Map name_map_S19769C9[] = {
  NSPAIR(_ZN8S19769C9C1Ev),
  NSPAIR(_ZN8S19769C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S19769C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19769C3,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19769C9[];
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY vtc_S19769C9[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S19769C9[];
static  VTT_ENTRY vtt_S19769C9[] = {
  {&(_ZTV8S19769C9[4]),  4,10},
  {&(_ZTV8S19769C9[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
Class_Descriptor cd_S19769C9 = {  "S19769C9", // class name
  bases_S19769C9, 3,
  &(vtc_S19769C9[0]), // expected_vtbl_contents
  &(vtt_S19769C9[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI8S19769C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19769C9),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19769C9),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  S19769C8  : virtual S19769C5 , virtual S281C37_nt , S19769C9 , S19769C3 {
  int s19769c8f0:25;
  void *s19769c8f1;
  int s19769c8f2[3];
  ::S281C37_nt s19769c8f3;
  virtual  ~S19769C8(); // _ZN8S19769C8D2Ev
  virtual void  v5(); // _ZN8S19769C82v5Ev
  S19769C8(); // tgen
};
//SIG(-1 S19769C8) C1{ VBC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC3 BC4{ BC2 VBC5{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC3 FC3[9] Fp FC2 FC2} VBC3 v4 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} BC5 vd v1 Fi:25 Fp Fi[3] FC3}


 S19769C8 ::~S19769C8(){ note_dtor("S19769C8", this);}
void  S19769C8 ::v5(){vfunc_called(this, "_ZN8S19769C82v5Ev");}
S19769C8 ::S19769C8(){ note_ctor("S19769C8", this);} // tgen

static void Test_S19769C8()
{
  extern Class_Descriptor cd_S19769C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(83,177)];
    init_test(&cd_S19769C8, buf);
    S19769C8 *dp, &lv = *(dp=new (buf) S19769C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1312,704), "sizeof(S19769C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C8)");
    /*is_ambiguous_... S19769C8::S19769C5 */ AMB_check_base_class_offset(lv, (S19769C5*), ABISELECT(880,480), "S19769C8");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(920,500), "S19769C8");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(920,500), "S19769C8");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*), 0, "S19769C8");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(944,508), "S19769C8");
    check_base_class_offset(lv, (S19769C9*), 0, "S19769C8");
    /*is_ambiguous_... S19769C8::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*), ABISELECT(464,256), "S19769C8");
    set_bf_and_test(lv, s19769c8f0, ABISELECT(832,452), 0, 25, 1, "S19769C8");
    set_bf_and_test(lv, s19769c8f0, ABISELECT(832,452), 0, 25, hide_sll(1LL<<24), "S19769C8");
    check_field_offset(lv, s19769c8f1, ABISELECT(840,456), "S19769C8.s19769c8f1");
    check_field_offset(lv, s19769c8f2, ABISELECT(848,460), "S19769C8.s19769c8f2");
    check_field_offset(lv, s19769c8f3, ABISELECT(864,472), "S19769C8.s19769c8f3");
    test_class_info(&lv, &cd_S19769C8);
    dp->~S19769C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C8(Test_S19769C8, "S19769C8", ABISELECT(1312,704));

#else // __cplusplus

extern void _ZN8S19769C8C1Ev();
extern void _ZN8S19769C8D2Ev();
Name_Map name_map_S19769C8[] = {
  NSPAIR(_ZN8S19769C8C1Ev),
  NSPAIR(_ZN8S19769C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
static Base_Class bases_S19769C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C5,    ABISELECT(880,480), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(920,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19769C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C3,    ABISELECT(944,508), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19769C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19769C3,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19769C8[];
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C8D1Ev();
extern void _ZN8S19769C8D0Ev();
extern void _ZN8S19769C82v5Ev();
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY vtc_S19769C8[] = {
  ABISELECT(880,480),
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19769C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19769C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19769C82v5Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  ABISELECT(-880,-480),
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S19769C8[];
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__8S19769C8[] = {
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__8S19769C8[] = {
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTT_ENTRY vtt_S19769C8[] = {
  {&(_ZTV8S19769C8[5]),  5,21},
  {&(_tg__ZTV8S19769C9__8S19769C8[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__8S19769C8[3]),  3,4},
  {&(_ZTV8S19769C8[16]),  16,21},
  {&(_ZTV8S19769C8[20]),  20,21},
};
extern VTBL_ENTRY _ZTI8S19769C8[];
extern  VTBL_ENTRY _ZTV8S19769C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C8[];
Class_Descriptor cd_S19769C8 = {  "S19769C8", // class name
  bases_S19769C8, 6,
  &(vtc_S19769C8[0]), // expected_vtbl_contents
  &(vtt_S19769C8[0]), // expected_vtt_contents
  ABISELECT(1312,704), // object size
  NSPAIRA(_ZTI8S19769C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19769C8),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19769C8),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C13  : virtual S19769C9 {
  int s19769c13f0;
  char s19769c13f1;
  void *s19769c13f2[6];
  int s19769c13f3[2];
  void *s19769c13f4;
  ::S281C37_nt s19769c13f5;
  ~S19769C13(); // tgen
  S19769C13(); // tgen
};
//SIG(-1 S19769C13) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S19769C13()
{
  extern Class_Descriptor cd_S19769C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S19769C13, buf);
    S19769C13 *dp, &lv = *(dp=new (buf) S19769C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S19769C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C13)");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*), ABISELECT(96,56), "S19769C13");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(560,312), "S19769C13");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(928,508), "S19769C13");
    check_base_class_offset(lv, (S19769C9*), ABISELECT(96,56), "S19769C13");
    check_field_offset(lv, s19769c13f0, ABISELECT(8,4), "S19769C13.s19769c13f0");
    check_field_offset(lv, s19769c13f1, ABISELECT(12,8), "S19769C13.s19769c13f1");
    check_field_offset(lv, s19769c13f2, ABISELECT(16,12), "S19769C13.s19769c13f2");
    check_field_offset(lv, s19769c13f3, ABISELECT(64,36), "S19769C13.s19769c13f3");
    check_field_offset(lv, s19769c13f4, ABISELECT(72,44), "S19769C13.s19769c13f4");
    check_field_offset(lv, s19769c13f5, ABISELECT(80,48), "S19769C13.s19769c13f5");
    test_class_info(&lv, &cd_S19769C13);
    dp->~S19769C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C13(Test_S19769C13, "S19769C13", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN9S19769C13C1Ev();
extern void _ZN9S19769C13D1Ev();
Name_Map name_map_S19769C13[] = {
  NSPAIR(_ZN9S19769C13C1Ev),
  NSPAIR(_ZN9S19769C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
static Base_Class bases_S19769C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C5,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19769C3,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19769C9,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19769C13[];
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY vtc_S19769C13[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern VTBL_ENTRY _ZTV9S19769C13[];
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C13[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__9S19769C13[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTT_ENTRY vtt_S19769C13[] = {
  {&(_ZTV9S19769C13[5]),  5,17},
  {&(_ZTV9S19769C13[11]),  11,17},
  {&(_ZTV9S19769C13[16]),  16,17},
  {&(_tg__ZTV8S19769C9__9S19769C13[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__9S19769C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19769C13[];
extern  VTBL_ENTRY _ZTV9S19769C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C13[];
Class_Descriptor cd_S19769C13 = {  "S19769C13", // class name
  bases_S19769C13, 4,
  &(vtc_S19769C13[0]), // expected_vtbl_contents
  &(vtt_S19769C13[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI9S19769C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19769C13),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19769C13),5, //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  S19769C12  : virtual S19769C13 , S19769C3 , S281C37_nt {
  char s19769c12f0;
  int s19769c12f1[2];
  long double s19769c12f2[2];
  short s19769c12f3;
  void *s19769c12f4;
  int s19769c12f5;
  __tsi64 s19769c12f6;
  int s19769c12f7;
  void *s19769c12f8;
  virtual  ~S19769C12(); // _ZN9S19769C12D2Ev
  virtual void  v6(); // _ZN9S19769C122v6Ev
  S19769C12(); // tgen
};
//SIG(-1 S19769C12) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S19769C12 ::~S19769C12(){ note_dtor("S19769C12", this);}
void  S19769C12 ::v6(){vfunc_called(this, "_ZN9S19769C122v6Ev");}
S19769C12 ::S19769C12(){ note_ctor("S19769C12", this);} // tgen

static void Test_S19769C12()
{
  extern Class_Descriptor cd_S19769C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S19769C12, buf);
    S19769C12 *dp, &lv = *(dp=new (buf) S19769C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S19769C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C12)");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*), ABISELECT(576,324), "S19769C12");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(1040,580), "S19769C12");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(1408,776), "S19769C12");
    check_base_class_offset(lv, (S19769C9*)(S19769C13*), ABISELECT(576,324), "S19769C12");
    check_base_class_offset(lv, (S19769C13*), ABISELECT(480,268), "S19769C12");
    /*is_ambiguous_... S19769C12::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*), 0, "S19769C12");
    /*is_ambiguous_... S19769C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S19769C12");
    check_field_offset(lv, s19769c12f0, ABISELECT(384,204), "S19769C12.s19769c12f0");
    check_field_offset(lv, s19769c12f1, ABISELECT(388,208), "S19769C12.s19769c12f1");
    check_field_offset(lv, s19769c12f2, ABISELECT(400,216), "S19769C12.s19769c12f2");
    check_field_offset(lv, s19769c12f3, ABISELECT(432,240), "S19769C12.s19769c12f3");
    check_field_offset(lv, s19769c12f4, ABISELECT(440,244), "S19769C12.s19769c12f4");
    check_field_offset(lv, s19769c12f5, ABISELECT(448,248), "S19769C12.s19769c12f5");
    check_field_offset(lv, s19769c12f6, ABISELECT(456,252), "S19769C12.s19769c12f6");
    check_field_offset(lv, s19769c12f7, ABISELECT(464,260), "S19769C12.s19769c12f7");
    check_field_offset(lv, s19769c12f8, ABISELECT(472,264), "S19769C12.s19769c12f8");
    test_class_info(&lv, &cd_S19769C12);
    dp->~S19769C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C12(Test_S19769C12, "S19769C12", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN9S19769C12C1Ev();
extern void _ZN9S19769C12D2Ev();
Name_Map name_map_S19769C12[] = {
  NSPAIR(_ZN9S19769C12C1Ev),
  NSPAIR(_ZN9S19769C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C13;
extern VTBL_ENTRY _ZTI9S19769C13[];
extern  VTBL_ENTRY _ZTV9S19769C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C13[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S19769C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19769C3,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C9,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19769C13,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19769C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19769C12[];
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY vtc_S19769C12[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern VTBL_ENTRY _ZTV9S19769C12[];
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C13__9S19769C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C13__9S19769C12[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__9S19769C12[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTT_ENTRY vtt_S19769C12[] = {
  {&(_ZTV9S19769C12[6]),  6,27},
  {&(_ZTV9S19769C12[15]),  15,27},
  {&(_ZTV9S19769C12[21]),  21,27},
  {&(_ZTV9S19769C12[26]),  26,27},
  {&(_tg__ZTV9S19769C13__9S19769C12[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C13__9S19769C12[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C13__9S19769C12[3]),  3,4},
  {&(_tg__ZTV8S19769C9__9S19769C12[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__9S19769C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
Class_Descriptor cd_S19769C12 = {  "S19769C12", // class name
  bases_S19769C12, 7,
  &(vtc_S19769C12[0]), // expected_vtbl_contents
  &(vtt_S19769C12[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI9S19769C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19769C12),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19769C12),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C11  : virtual S19769C3 , virtual S19769C12 {
  ::S19769C12 s19769c11f0[7];
  int s19769c11f1;
  short s19769c11f2;
  int s19769c11f3;
  ::S19769C9 s19769c11f4;
  __tsi64 s19769c11f5[9];
  virtual void  v7(); // _ZN9S19769C112v7Ev
  virtual void  v8(); // _ZN9S19769C112v8Ev
  ~S19769C11(); // tgen
  S19769C11(); // tgen
};
//SIG(-1 S19769C11) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 FL[9]}


void  S19769C11 ::v7(){vfunc_called(this, "_ZN9S19769C112v7Ev");}
void  S19769C11 ::v8(){vfunc_called(this, "_ZN9S19769C112v8Ev");}
S19769C11 ::~S19769C11(){ note_dtor("S19769C11", this);} // tgen
S19769C11 ::S19769C11(){ note_ctor("S19769C11", this);} // tgen

static void Test_S19769C11()
{
  extern Class_Descriptor cd_S19769C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1706)];
    init_test(&cd_S19769C11, buf);
    S19769C11 *dp, &lv = *(dp=new (buf) S19769C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6820), "sizeof(S19769C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C11)");
    /*is_ambiguous_... S19769C11::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*), ABISELECT(10928,6036), "S19769C11");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(10928,6036), "S19769C11");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*), ABISELECT(11872,6556), "S19769C11");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(12328,6812), "S19769C11");
    check_base_class_offset(lv, (S19769C9*)(S19769C13*), ABISELECT(11872,6556), "S19769C11");
    check_base_class_offset(lv, (S19769C13*)(S19769C12*), ABISELECT(11776,6500), "S19769C11");
    /*is_ambiguous_... S19769C12::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*), ABISELECT(11296,6232), "S19769C11");
    /*is_ambiguous_... S19769C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*), ABISELECT(11664,6428), "S19769C11");
    check_base_class_offset(lv, (S19769C12*), ABISELECT(11296,6232), "S19769C11");
    check_field_offset(lv, s19769c11f0, ABISELECT(16,4), "S19769C11.s19769c11f0");
    check_field_offset(lv, s19769c11f1, ABISELECT(9984,5492), "S19769C11.s19769c11f1");
    check_field_offset(lv, s19769c11f2, ABISELECT(9988,5496), "S19769C11.s19769c11f2");
    check_field_offset(lv, s19769c11f3, ABISELECT(9992,5500), "S19769C11.s19769c11f3");
    check_field_offset(lv, s19769c11f4, ABISELECT(10000,5504), "S19769C11.s19769c11f4");
    check_field_offset(lv, s19769c11f5, ABISELECT(10848,5964), "S19769C11.s19769c11f5");
    test_class_info(&lv, &cd_S19769C11);
    dp->~S19769C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C11(Test_S19769C11, "S19769C11", ABISELECT(12352,6820));

#else // __cplusplus

extern void _ZN9S19769C11C1Ev();
extern void _ZN9S19769C11D1Ev();
Name_Map name_map_S19769C11[] = {
  NSPAIR(_ZN9S19769C11C1Ev),
  NSPAIR(_ZN9S19769C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C13;
extern VTBL_ENTRY _ZTI9S19769C13[];
extern  VTBL_ENTRY _ZTV9S19769C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C13[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
static Base_Class bases_S19769C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C3,    ABISELECT(10928,6036), //bcp->offset
    11, //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_S19769C5,    ABISELECT(11872,6556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C9,    ABISELECT(11872,6556), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19769C13,    ABISELECT(11776,6500), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19769C3,    ABISELECT(11296,6232), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    ABISELECT(11296,6232), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19769C11[];
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void _ZN9S19769C11D1Ev();
extern void _ZN9S19769C11D0Ev();
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev)();
extern void ABISELECT(_ZThn11296_N9S19769C11D1Ev,_ZThn6232_N9S19769C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev)();
extern void ABISELECT(_ZThn11296_N9S19769C11D0Ev,_ZThn6232_N9S19769C11D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY vtc_S19769C11[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19769C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C11D0Ev,
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern VTBL_ENTRY _ZTV9S19769C11[];
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C11[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12__9S19769C11[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12__9S19769C11[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C12__9S19769C11[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C11[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C13__9S19769C11[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C13__9S19769C11[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C11[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__9S19769C11[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTT_ENTRY vtt_S19769C11[] = {
  {&(_ZTV9S19769C11[7]),  7,41},
  {&(_ZTV9S19769C11[14]),  14,41},
  {&(_ZTV9S19769C11[24]),  24,41},
  {&(_ZTV9S19769C11[33]),  33,41},
  {&(_ZTV9S19769C11[39]),  39,41},
  {&(_tg__ZTV9S19769C12__9S19769C11[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C12__9S19769C11[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C12__9S19769C11[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C12__9S19769C11[3]),  3,4},
  {&(_tg__ZTV9S19769C13__9S19769C11[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C13__9S19769C11[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C13__9S19769C11[3]),  3,4},
  {&(_tg__ZTV8S19769C9__9S19769C11[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__9S19769C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19769C11[];
extern  VTBL_ENTRY _ZTV9S19769C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C11[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S19769C11D0Ev,_ZThn6232_N9S19769C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S19769C11D1Ev,_ZThn6232_N9S19769C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19769C11 = {  "S19769C11", // class name
  bases_S19769C11, 8,
  &(vtc_S19769C11[0]), // expected_vtbl_contents
  &(vtt_S19769C11[0]), // expected_vtt_contents
  ABISELECT(12352,6820), // object size
  NSPAIRA(_ZTI9S19769C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19769C11),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19769C11),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C10  : virtual S19769C11 {
  char s19769c10f0;
  int s19769c10f1[3];
  virtual  ~S19769C10(); // _ZN9S19769C10D2Ev
  S19769C10(); // tgen
};
//SIG(-1 S19769C10) C1{ VBC2{ VBC3{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v2 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v3 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v5 v6 FC7[7] Fi Fs Fi FC9 FL[9]} vd Fc Fi[3]}


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

static void Test_S19769C10()
{
  extern Class_Descriptor cd_S19769C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(775,1711)];
    init_test(&cd_S19769C10, buf);
    S19769C10 *dp, &lv = *(dp=new (buf) S19769C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12384,6840), "sizeof(S19769C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C10)");
    /*is_ambiguous_... S19769C11::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C11*), ABISELECT(10960,6056), "S19769C10");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(10960,6056), "S19769C10");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*), ABISELECT(11904,6576), "S19769C10");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(12360,6832), "S19769C10");
    check_base_class_offset(lv, (S19769C9*)(S19769C13*), ABISELECT(11904,6576), "S19769C10");
    check_base_class_offset(lv, (S19769C13*)(S19769C12*), ABISELECT(11808,6520), "S19769C10");
    /*is_ambiguous_... S19769C12::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*), ABISELECT(11328,6252), "S19769C10");
    /*is_ambiguous_... S19769C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*), ABISELECT(11696,6448), "S19769C10");
    check_base_class_offset(lv, (S19769C12*)(S19769C11*), ABISELECT(11328,6252), "S19769C10");
    check_base_class_offset(lv, (S19769C11*), ABISELECT(32,20), "S19769C10");
    check_field_offset(lv, s19769c10f0, ABISELECT(8,4), "S19769C10.s19769c10f0");
    check_field_offset(lv, s19769c10f1, ABISELECT(12,8), "S19769C10.s19769c10f1");
    test_class_info(&lv, &cd_S19769C10);
    dp->~S19769C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C10(Test_S19769C10, "S19769C10", ABISELECT(12384,6840));

#else // __cplusplus

extern void _ZN9S19769C10C1Ev();
extern void _ZN9S19769C10D2Ev();
Name_Map name_map_S19769C10[] = {
  NSPAIR(_ZN9S19769C10C1Ev),
  NSPAIR(_ZN9S19769C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C13;
extern VTBL_ENTRY _ZTI9S19769C13[];
extern  VTBL_ENTRY _ZTV9S19769C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C13[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C11;
extern VTBL_ENTRY _ZTI9S19769C11[];
extern  VTBL_ENTRY _ZTV9S19769C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C11[];
static Base_Class bases_S19769C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C3,    ABISELECT(10960,6056), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S19769C5,    ABISELECT(11904,6576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12360,6832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C9,    ABISELECT(11904,6576), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19769C13,    ABISELECT(11808,6520), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19769C3,    ABISELECT(11328,6252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11696,6448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    ABISELECT(11328,6252), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19769C11,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19769C10[];
extern void _ZN9S19769C10D1Ev();
extern void _ZN9S19769C10D0Ev();
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N9S19769C10D1Ev,_ZTv0_n40_N9S19769C10D1Ev)();
extern void ABISELECT(_ZThn32_N9S19769C10D1Ev,_ZThn20_N9S19769C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19769C10D0Ev,_ZTv0_n40_N9S19769C10D0Ev)();
extern void ABISELECT(_ZThn32_N9S19769C10D0Ev,_ZThn20_N9S19769C10D0Ev)() __attribute__((weak));
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C10D1Ev,_ZTv0_n32_N9S19769C10D1Ev)();
extern void ABISELECT(_ZThn11328_N9S19769C10D1Ev,_ZThn6252_N9S19769C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C10D0Ev,_ZTv0_n32_N9S19769C10D0Ev)();
extern void ABISELECT(_ZThn11328_N9S19769C10D0Ev,_ZThn6252_N9S19769C10D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY vtc_S19769C10[] = {
  ABISELECT(12360,6832),
  ABISELECT(11904,6576),
  ABISELECT(11808,6520),
  ABISELECT(11328,6252),
  ABISELECT(10960,6056),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN9S19769C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C10D0Ev,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19769C10D1Ev,_ZTv0_n40_N9S19769C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19769C10D0Ev,_ZTv0_n40_N9S19769C10D0Ev),
  0,
  ABISELECT(-10960,-6056),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  ABISELECT(-11328,-6252),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11328,-6252),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C10D1Ev,_ZTv0_n32_N9S19769C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C10D0Ev,_ZTv0_n32_N9S19769C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11808,-6520),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11904,-6576),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern VTBL_ENTRY _ZTV9S19769C10[];
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void _ZN9S19769C11D1Ev();
extern void _ZN9S19769C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C11__9S19769C10[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19769C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C11D0Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C11__9S19769C10[] = {
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev)();
extern void ABISELECT(_ZThn11296_N9S19769C11D1Ev,_ZThn6232_N9S19769C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev)();
extern void ABISELECT(_ZThn11296_N9S19769C11D0Ev,_ZThn6232_N9S19769C11D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C11__9S19769C10[] = {
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C11__9S19769C10[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C11__9S19769C10[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C10[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12__9S19769C10[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12__9S19769C10[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C12__9S19769C10[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C10[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C13__9S19769C10[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C13__9S19769C10[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C10[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__9S19769C10[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTT_ENTRY vtt_S19769C10[] = {
  {&(_ZTV9S19769C10[8]),  8,54},
  {&(_ZTV9S19769C10[20]),  20,54},
  {&(_ZTV9S19769C10[27]),  27,54},
  {&(_ZTV9S19769C10[37]),  37,54},
  {&(_ZTV9S19769C10[46]),  46,54},
  {&(_ZTV9S19769C10[52]),  52,54},
  {&(_tg__ZTV9S19769C11__9S19769C10[7]),  7,11},
  {&(_tg__ZTV8S19769C3__9S19769C11__9S19769C10[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C11__9S19769C10[9]),  9,13},
  {&(_tg__ZTV9S19769C13__9S19769C11__9S19769C10[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C11__9S19769C10[6]),  6,8},
  {&(_tg__ZTV9S19769C12__9S19769C10[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C12__9S19769C10[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C12__9S19769C10[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C12__9S19769C10[3]),  3,4},
  {&(_tg__ZTV9S19769C13__9S19769C10[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C13__9S19769C10[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C13__9S19769C10[3]),  3,4},
  {&(_tg__ZTV8S19769C9__9S19769C10[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__9S19769C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19769C10[];
extern  VTBL_ENTRY _ZTV9S19769C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C10[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S19769C11D0Ev,_ZThn6232_N9S19769C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S19769C11D1Ev,_ZThn6232_N9S19769C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C10D0Ev,_ZTv0_n32_N9S19769C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N9S19769C10D0Ev,_ZThn6252_N9S19769C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C10D1Ev,_ZTv0_n32_N9S19769C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N9S19769C10D1Ev,_ZThn6252_N9S19769C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19769C10D0Ev,_ZTv0_n40_N9S19769C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19769C10D0Ev,_ZThn20_N9S19769C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19769C10D1Ev,_ZTv0_n40_N9S19769C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19769C10D1Ev,_ZThn20_N9S19769C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19769C10 = {  "S19769C10", // class name
  bases_S19769C10, 9,
  &(vtc_S19769C10[0]), // expected_vtbl_contents
  &(vtt_S19769C10[0]), // expected_vtt_contents
  ABISELECT(12384,6840), // object size
  NSPAIRA(_ZTI9S19769C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19769C10),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19769C10),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C7  : S19769C8 , virtual S19769C9 , virtual S19769C10 {
  long double s19769c7f0[2];
  ::S20176C3_nt s19769c7f1;
  int s19769c7f2:16;
  int s19769c7f3:3;
  virtual  ~S19769C7(); // _ZN8S19769C7D2Ev
  virtual void  v9(); // _ZN8S19769C72v9Ev
  virtual void  v10(); // _ZN8S19769C73v10Ev
  S19769C7(); // tgen
};
//SIG(-1 S19769C7) C1{ BC2{ VBC3{ v3 Fi Fp FC4{ m Fp[2]}} VBC4 BC5{ BC3 VBC6{ v4 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC4 FC4[9] Fp FC3 FC3} VBC4 v5 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} BC6 vd v6 Fi:25 Fp Fi[3] FC4} VBC5 VBC8{ VBC9{ VBC6 VBC10{ VBC11{ VBC5 Fi Fc Fp[6] Fi[2] Fp FC4} BC6 BC4 vd v7 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v8 v9 FC10[7] Fi Fs Fi FC5 FL[9]} vd Fc Fi[3]} vd v1 v2 FD[2] FC7 Fi:16 Fi:3}


 S19769C7 ::~S19769C7(){ note_dtor("S19769C7", this);}
void  S19769C7 ::v9(){vfunc_called(this, "_ZN8S19769C72v9Ev");}
void  S19769C7 ::v10(){vfunc_called(this, "_ZN8S19769C73v10Ev");}
S19769C7 ::S19769C7(){ note_ctor("S19769C7", this);} // tgen

static void Test_S19769C7()
{
  extern Class_Descriptor cd_S19769C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(834,1843)];
    init_test(&cd_S19769C7, buf);
    S19769C7 *dp, &lv = *(dp=new (buf) S19769C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13328,7368), "sizeof(S19769C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C7)");
    /*is_ambiguous_... S19769C8::S19769C5 */ AMB_check_base_class_offset(lv, (S19769C5*)(S19769C8*), ABISELECT(920,508), "S19769C7");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C8*), ABISELECT(960,528), "S19769C7");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*)(S19769C8*), ABISELECT(960,528), "S19769C7");
    /*is_ambiguous_... S19769C7::S19769C9 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(960,528), "S19769C7");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*)(S19769C8*), 0, "S19769C7");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*)(S19769C8*), ABISELECT(976,536), "S19769C7");
    /*is_ambiguous_... S19769C7::S19769C9 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(976,536), "S19769C7");
    /*is_ambiguous_... S19769C11::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C11*), ABISELECT(976,536), "S19769C7");
    check_base_class_offset(lv, (S19769C9*)(S19769C8*), 0, "S19769C7");
    /*is_ambiguous_... S19769C8::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C8*), ABISELECT(464,256), "S19769C7");
    check_base_class_offset(lv, (S19769C8*), 0, "S19769C7");
    /*is_ambiguous_... S19769C7::S19769C9 */ AMB_check_base_class_offset(lv, (S19769C5*)(S19769C9*), ABISELECT(1344,732), "S19769C7");
    /*is_ambiguous_... S19769C7::S19769C9 */ AMB_check_base_class_offset(lv, (S19769C9*), ABISELECT(1344,732), "S19769C7");
    check_base_class_offset(lv, (S19769C9*)(S19769C13*), ABISELECT(1344,732), "S19769C7");
    check_base_class_offset(lv, (S19769C13*)(S19769C12*), ABISELECT(13232,7312), "S19769C7");
    /*is_ambiguous_... S19769C12::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*), ABISELECT(12752,7044), "S19769C7");
    /*is_ambiguous_... S19769C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*), ABISELECT(13120,7240), "S19769C7");
    check_base_class_offset(lv, (S19769C12*)(S19769C11*), ABISELECT(12752,7044), "S19769C7");
    check_base_class_offset(lv, (S19769C11*)(S19769C10*), ABISELECT(1824,1008), "S19769C7");
    check_base_class_offset(lv, (S19769C10*), ABISELECT(1800,988), "S19769C7");
    check_field_offset(lv, s19769c7f0, ABISELECT(880,480), "S19769C7.s19769c7f0");
    check_field_offset(lv, s19769c7f1, ABISELECT(912,504), "S19769C7.s19769c7f1");
    set_bf_and_test(lv, s19769c7f2, ABISELECT(913,505), 0, 16, 1, "S19769C7");
    set_bf_and_test(lv, s19769c7f2, ABISELECT(913,505), 0, 16, hide_sll(1LL<<15), "S19769C7");
    set_bf_and_test(lv, s19769c7f3, ABISELECT(915,507), 0, 3, 1, "S19769C7");
    set_bf_and_test(lv, s19769c7f3, ABISELECT(915,507), 0, 3, hide_sll(1LL<<2), "S19769C7");
    test_class_info(&lv, &cd_S19769C7);
    dp->~S19769C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C7(Test_S19769C7, "S19769C7", ABISELECT(13328,7368));

#else // __cplusplus

extern void _ZN8S19769C7C1Ev();
extern void _ZN8S19769C7D2Ev();
Name_Map name_map_S19769C7[] = {
  NSPAIR(_ZN8S19769C7C1Ev),
  NSPAIR(_ZN8S19769C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S19769C8;
extern VTBL_ENTRY _ZTI8S19769C8[];
extern  VTBL_ENTRY _ZTV8S19769C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C8[];
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C13;
extern VTBL_ENTRY _ZTI9S19769C13[];
extern  VTBL_ENTRY _ZTV9S19769C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C13[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C11;
extern VTBL_ENTRY _ZTI9S19769C11[];
extern  VTBL_ENTRY _ZTV9S19769C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C11[];
extern Class_Descriptor cd_S19769C10;
extern VTBL_ENTRY _ZTI9S19769C10[];
extern  VTBL_ENTRY _ZTV9S19769C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C10[];
static Base_Class bases_S19769C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C5,    ABISELECT(920,508), //bcp->offset
    20, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(960,528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19769C3,    ABISELECT(976,536), //bcp->offset
    24, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19769C9,    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
    11, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19769C3,    ABISELECT(464,256), //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
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19769C8,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19769C5,    ABISELECT(1344,732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19769C9,    ABISELECT(1344,732), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19769C13,    ABISELECT(13232,7312), //bcp->offset
    74, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19769C3,    ABISELECT(12752,7044), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(13120,7240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    ABISELECT(12752,7044), //bcp->offset
    61, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19769C11,    ABISELECT(1824,1008), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19769C10,    ABISELECT(1800,988), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19769C7[];
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C7D1Ev();
extern void _ZN8S19769C7D0Ev();
extern void _ZN8S19769C82v5Ev();
extern void _ZN8S19769C72v9Ev();
extern void _ZN8S19769C73v10Ev();
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S19769C7D1Ev,_ZTv0_n36_N8S19769C7D1Ev)();
extern void ABISELECT(_ZThn1800_N8S19769C7D1Ev,_ZThn988_N8S19769C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19769C7D0Ev,_ZTv0_n36_N8S19769C7D0Ev)();
extern void ABISELECT(_ZThn1800_N8S19769C7D0Ev,_ZThn988_N8S19769C7D0Ev)() __attribute__((weak));
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19769C7D1Ev,_ZTv0_n40_N8S19769C7D1Ev)();
extern void ABISELECT(_ZThn1824_N8S19769C7D1Ev,_ZThn1008_N8S19769C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19769C7D0Ev,_ZTv0_n40_N8S19769C7D0Ev)();
extern void ABISELECT(_ZThn1824_N8S19769C7D0Ev,_ZThn1008_N8S19769C7D0Ev)() __attribute__((weak));
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19769C7D1Ev,_ZTv0_n32_N8S19769C7D1Ev)();
extern void ABISELECT(_ZThn12752_N8S19769C7D1Ev,_ZThn7044_N8S19769C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C7D0Ev,_ZTv0_n32_N8S19769C7D0Ev)();
extern void ABISELECT(_ZThn12752_N8S19769C7D0Ev,_ZThn7044_N8S19769C7D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY vtc_S19769C7[] = {
  ABISELECT(13232,7312),
  ABISELECT(12752,7044),
  ABISELECT(1824,1008),
  ABISELECT(1800,988),
  ABISELECT(1344,732),
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19769C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19769C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19769C82v5Ev,
  (VTBL_ENTRY)&_ZN8S19769C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19769C73v10Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-1344,-732),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  ABISELECT(-1800,-988),
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6324),
  ABISELECT(10952,6056),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  ABISELECT(-1800,-988),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19769C7D1Ev,_ZTv0_n36_N8S19769C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19769C7D0Ev,_ZTv0_n36_N8S19769C7D0Ev),
  ABISELECT(-1824,-1008),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-848,-472),
  ABISELECT(-1824,-1008),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19769C7D1Ev,_ZTv0_n40_N8S19769C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19769C7D0Ev,_ZTv0_n40_N8S19769C7D0Ev),
  0,
  ABISELECT(-12752,-7044),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-12752,-7044),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C7D1Ev,_ZTv0_n32_N8S19769C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C7D0Ev,_ZTv0_n32_N8S19769C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-13232,-7312),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
};
extern VTBL_ENTRY _ZTV8S19769C7[];
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C8D1Ev();
extern void _ZN8S19769C8D0Ev();
extern void _ZN8S19769C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C8__8S19769C7[] = {
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19769C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19769C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19769C82v5Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C98S19769C8__8S19769C7[] = {
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C98S19769C8__8S19769C7[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C5__8S19769C8__8S19769C7[] = {
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C8__8S19769C7[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__A1__8S19769C7[] = {
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__A1__8S19769C7[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN9S19769C10D1Ev();
extern void _ZN9S19769C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C10__8S19769C7[] = {
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6324),
  ABISELECT(10952,6056),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN9S19769C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C10D0Ev,
};
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N9S19769C10D1Ev,_ZTv0_n40_N9S19769C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19769C10D1Ev,_ZThn20_N9S19769C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19769C10D0Ev,_ZTv0_n40_N9S19769C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19769C10D0Ev,_ZThn20_N9S19769C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19769C11__9S19769C10__8S19769C7[] = {
  ABISELECT(-24,-20),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-848,-472),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19769C10D1Ev,_ZTv0_n40_N9S19769C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19769C10D0Ev,_ZTv0_n40_N9S19769C10D0Ev),
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C10__8S19769C7[] = {
  0,
  ABISELECT(824,452),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C10D1Ev,_ZTv0_n32_N9S19769C10D1Ev)();
extern void ABISELECT(_ZThn10952_N9S19769C10D1Ev,_ZThn6056_N9S19769C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C10D0Ev,_ZTv0_n32_N9S19769C10D0Ev)();
extern void ABISELECT(_ZThn10952_N9S19769C10D0Ev,_ZThn6056_N9S19769C10D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C10__8S19769C7[] = {
  0,
  ABISELECT(-10952,-6056),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-10952,-6056),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C10D1Ev,_ZTv0_n32_N9S19769C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C10D0Ev,_ZTv0_n32_N9S19769C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C10__8S19769C7[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-11432,-6324),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C10__8S19769C7[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(456,256),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void _ZN9S19769C11D1Ev();
extern void _ZN9S19769C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C11__8S19769C7[] = {
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-848,-472),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19769C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C11D0Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C11__8S19769C7[] = {
  0,
  ABISELECT(848,472),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev)();
extern void ABISELECT(_ZThn10928_N9S19769C11D1Ev,_ZThn6036_N9S19769C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev)();
extern void ABISELECT(_ZThn10928_N9S19769C11D0Ev,_ZThn6036_N9S19769C11D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C11__8S19769C7[] = {
  0,
  ABISELECT(-10928,-6036),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C11__8S19769C7[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-11408,-6304),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C11__8S19769C7[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(480,276),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__8S19769C7[] = {
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12__8S19769C7[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12__8S19769C7[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11408,6312),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C12__8S19769C7[] = {
  0,
  ABISELECT(11776,6508),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__8S19769C7[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C13__8S19769C7[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11888,6580),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C13__8S19769C7[] = {
  0,
  ABISELECT(12256,6776),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTT_ENTRY vtt_S19769C7[] = {
  {&(_ZTV8S19769C7[10]),  10,79},
  {&(_tg__ZTV8S19769C8__8S19769C7[5]),  5,10},
  {&(_tg__ZTV8S19769C98S19769C8__8S19769C7[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C98S19769C8__8S19769C7[3]),  3,4},
  {&(_tg__ZTV8S19769C5__8S19769C8__8S19769C7[3]),  3,4},
  {&(_tg__ZTV8S19769C3__8S19769C8__8S19769C7[3]),  3,4},
  {&(_ZTV8S19769C7[23]),  23,79},
  {&(_ZTV8S19769C7[27]),  27,79},
  {&(_ZTV8S19769C7[34]),  34,79},
  {&(_ZTV8S19769C7[45]),  45,79},
  {&(_ZTV8S19769C7[57]),  57,79},
  {&(_ZTV8S19769C7[70]),  70,79},
  {&(_ZTV8S19769C7[79]),  79,79},
  {&(_tg__ZTV8S19769C9__A1__8S19769C7[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__A1__8S19769C7[3]),  3,4},
  {&(_tg__ZTV9S19769C10__8S19769C7[8]),  8,10},
  {&(_tg__ZTV9S19769C11__9S19769C10__8S19769C7[10]),  10,14},
  {&(_tg__ZTV8S19769C3__9S19769C10__8S19769C7[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C10__8S19769C7[9]),  9,13},
  {&(_tg__ZTV9S19769C13__9S19769C10__8S19769C7[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C10__8S19769C7[6]),  6,8},
  {&(_tg__ZTV9S19769C11__8S19769C7[7]),  7,11},
  {&(_tg__ZTV8S19769C3__9S19769C11__8S19769C7[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C11__8S19769C7[9]),  9,13},
  {&(_tg__ZTV9S19769C13__9S19769C11__8S19769C7[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C11__8S19769C7[6]),  6,8},
  {&(_tg__ZTV9S19769C12__8S19769C7[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C12__8S19769C7[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C12__8S19769C7[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C12__8S19769C7[3]),  3,4},
  {&(_tg__ZTV9S19769C13__8S19769C7[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C13__8S19769C7[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C13__8S19769C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19769C7[];
extern  VTBL_ENTRY _ZTV8S19769C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C7[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S19769C11D0Ev,_ZThn6036_N9S19769C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S19769C11D1Ev,_ZThn6036_N9S19769C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C10D0Ev,_ZTv0_n32_N9S19769C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S19769C10D0Ev,_ZThn6056_N9S19769C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C10D1Ev,_ZTv0_n32_N9S19769C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S19769C10D1Ev,_ZThn6056_N9S19769C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19769C10D0Ev,_ZTv0_n40_N9S19769C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19769C10D0Ev,_ZThn20_N9S19769C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19769C10D1Ev,_ZTv0_n40_N9S19769C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19769C10D1Ev,_ZThn20_N9S19769C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19769C7D0Ev,_ZTv0_n32_N8S19769C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12752_N8S19769C7D0Ev,_ZThn7044_N8S19769C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19769C7D1Ev,_ZTv0_n32_N8S19769C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12752_N8S19769C7D1Ev,_ZThn7044_N8S19769C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19769C7D0Ev,_ZTv0_n40_N8S19769C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N8S19769C7D0Ev,_ZThn1008_N8S19769C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19769C7D1Ev,_ZTv0_n40_N8S19769C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N8S19769C7D1Ev,_ZThn1008_N8S19769C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19769C7D0Ev,_ZTv0_n36_N8S19769C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1800_N8S19769C7D0Ev,_ZThn988_N8S19769C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19769C7D1Ev,_ZTv0_n36_N8S19769C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1800_N8S19769C7D1Ev,_ZThn988_N8S19769C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19769C7 = {  "S19769C7", // class name
  bases_S19769C7, 15,
  &(vtc_S19769C7[0]), // expected_vtbl_contents
  &(vtt_S19769C7[0]), // expected_vtt_contents
  ABISELECT(13328,7368), // object size
  NSPAIRA(_ZTI8S19769C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19769C7),79, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19769C7),33, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C15  : virtual S19769C13 , virtual S19769C12 {
  long s19769c15f0;
  void *s19769c15f1;
  ::S19769C9 s19769c15f2;
  void *s19769c15f3;
  short s19769c15f4;
  __tsi64 s19769c15f5;
  int s19769c15f6;
  __tsi64 s19769c15f7;
  ::S19769C9 s19769c15f8[4];
  int s19769c15f9;
  virtual  ~S19769C15(); // _ZN9S19769C15D2Ev
  S19769C15(); // tgen
};
//SIG(-1 S19769C15) C1{ VBC2{ VBC3{ BC4{ v1 Fi Fp FC5{ m Fp[2]}} VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC8{ VBC2 BC6 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC3 Fp Fs FL Fi FL FC3[4] Fi}


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

static void Test_S19769C15()
{
  extern Class_Descriptor cd_S19769C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(361,783)];
    init_test(&cd_S19769C15, buf);
    S19769C15 *dp, &lv = *(dp=new (buf) S19769C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5760,3128), "sizeof(S19769C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C15)");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*), ABISELECT(4432,2400), "S19769C15");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(4896,2656), "S19769C15");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(5264,2852), "S19769C15");
    check_base_class_offset(lv, (S19769C9*)(S19769C13*), ABISELECT(4432,2400), "S19769C15");
    check_base_class_offset(lv, (S19769C13*), ABISELECT(4328,2344), "S19769C15");
    check_base_class_offset(lv, (S19769C13*)(S19769C12*), ABISELECT(4328,2344), "S19769C15");
    /*is_ambiguous_... S19769C12::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*), ABISELECT(5280,2860), "S19769C15");
    /*is_ambiguous_... S19769C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*), ABISELECT(5648,3056), "S19769C15");
    check_base_class_offset(lv, (S19769C12*), ABISELECT(5280,2860), "S19769C15");
    check_field_offset(lv, s19769c15f0, ABISELECT(8,4), "S19769C15.s19769c15f0");
    check_field_offset(lv, s19769c15f1, ABISELECT(16,8), "S19769C15.s19769c15f1");
    check_field_offset(lv, s19769c15f2, ABISELECT(32,12), "S19769C15.s19769c15f2");
    check_field_offset(lv, s19769c15f3, ABISELECT(880,472), "S19769C15.s19769c15f3");
    check_field_offset(lv, s19769c15f4, ABISELECT(888,476), "S19769C15.s19769c15f4");
    check_field_offset(lv, s19769c15f5, ABISELECT(896,480), "S19769C15.s19769c15f5");
    check_field_offset(lv, s19769c15f6, ABISELECT(904,488), "S19769C15.s19769c15f6");
    check_field_offset(lv, s19769c15f7, ABISELECT(912,492), "S19769C15.s19769c15f7");
    check_field_offset(lv, s19769c15f8, ABISELECT(928,500), "S19769C15.s19769c15f8");
    check_field_offset(lv, s19769c15f9, ABISELECT(4320,2340), "S19769C15.s19769c15f9");
    test_class_info(&lv, &cd_S19769C15);
    dp->~S19769C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C15(Test_S19769C15, "S19769C15", ABISELECT(5760,3128));

#else // __cplusplus

extern void _ZN9S19769C15C1Ev();
extern void _ZN9S19769C15D2Ev();
Name_Map name_map_S19769C15[] = {
  NSPAIR(_ZN9S19769C15C1Ev),
  NSPAIR(_ZN9S19769C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C13;
extern VTBL_ENTRY _ZTI9S19769C13[];
extern  VTBL_ENTRY _ZTV9S19769C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C13[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
static Base_Class bases_S19769C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C5,    ABISELECT(4432,2400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C3,    ABISELECT(4896,2656), //bcp->offset
    22, //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_S281C37_nt,    ABISELECT(5264,2852), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C9,    ABISELECT(4432,2400), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19769C13,    ABISELECT(4328,2344), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19769C3,    ABISELECT(5280,2860), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5648,3056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    ABISELECT(5280,2860), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19769C15[];
extern void _ZN9S19769C15D1Ev();
extern void _ZN9S19769C15D0Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev)();
extern void ABISELECT(_ZThn5280_N9S19769C15D1Ev,_ZThn2860_N9S19769C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev)();
extern void ABISELECT(_ZThn5280_N9S19769C15D0Ev,_ZThn2860_N9S19769C15D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY vtc_S19769C15[] = {
  ABISELECT(5280,2860),
  ABISELECT(5264,2852),
  ABISELECT(4896,2656),
  ABISELECT(4432,2400),
  ABISELECT(4328,2344),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN9S19769C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C15D0Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4432,-2400),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  0,
  ABISELECT(-4896,-2656),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  ABISELECT(-5280,-2860),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5280,-2860),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
extern VTBL_ENTRY _ZTV9S19769C15[];
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C15[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C13__9S19769C15[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C13__9S19769C15[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C15[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__9S19769C15[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12__9S19769C15[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12__9S19769C15[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C12__9S19769C15[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTT_ENTRY vtt_S19769C15[] = {
  {&(_ZTV9S19769C15[7]),  7,39},
  {&(_ZTV9S19769C15[14]),  14,39},
  {&(_ZTV9S19769C15[20]),  20,39},
  {&(_ZTV9S19769C15[25]),  25,39},
  {&(_ZTV9S19769C15[35]),  35,39},
  {&(_tg__ZTV9S19769C13__9S19769C15[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C13__9S19769C15[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C13__9S19769C15[3]),  3,4},
  {&(_tg__ZTV8S19769C9__9S19769C15[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__9S19769C15[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C15[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C12__9S19769C15[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C12__9S19769C15[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C12__9S19769C15[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19769C15[];
extern  VTBL_ENTRY _ZTV9S19769C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C15[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N9S19769C15D0Ev,_ZThn2860_N9S19769C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N9S19769C15D1Ev,_ZThn2860_N9S19769C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19769C15 = {  "S19769C15", // class name
  bases_S19769C15, 8,
  &(vtc_S19769C15[0]), // expected_vtbl_contents
  &(vtt_S19769C15[0]), // expected_vtt_contents
  ABISELECT(5760,3128), // object size
  NSPAIRA(_ZTI9S19769C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19769C15),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19769C15),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C16  : virtual S19769C3 {
  void *s19769c16f0;
  short s19769c16f1;
  __tsi64 s19769c16f2;
  int s19769c16f3:6;
  void *s19769c16f4[2];
  ~S19769C16(); // tgen
  S19769C16(); // tgen
};
//SIG(-1 S19769C16) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} Fp Fs FL Fi:6 Fp[2]}


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

static void Test_S19769C16()
{
  extern Class_Descriptor cd_S19769C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,58)];
    init_test(&cd_S19769C16, buf);
    S19769C16 *dp, &lv = *(dp=new (buf) S19769C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,228), "sizeof(S19769C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C16)");
    check_base_class_offset(lv, (S19769C3*), ABISELECT(64,32), "S19769C16");
    check_field_offset(lv, s19769c16f0, ABISELECT(8,4), "S19769C16.s19769c16f0");
    check_field_offset(lv, s19769c16f1, ABISELECT(16,8), "S19769C16.s19769c16f1");
    check_field_offset(lv, s19769c16f2, ABISELECT(24,12), "S19769C16.s19769c16f2");
    set_bf_and_test(lv, s19769c16f3, ABISELECT(32,20), 0, 6, 1, "S19769C16");
    set_bf_and_test(lv, s19769c16f3, ABISELECT(32,20), 0, 6, hide_sll(1LL<<5), "S19769C16");
    check_field_offset(lv, s19769c16f4, ABISELECT(40,24), "S19769C16.s19769c16f4");
    test_class_info(&lv, &cd_S19769C16);
    dp->~S19769C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C16(Test_S19769C16, "S19769C16", ABISELECT(432,228));

#else // __cplusplus

extern void _ZN9S19769C16C1Ev();
extern void _ZN9S19769C16D1Ev();
Name_Map name_map_S19769C16[] = {
  NSPAIR(_ZN9S19769C16C1Ev),
  NSPAIR(_ZN9S19769C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
static Base_Class bases_S19769C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C3,    ABISELECT(64,32), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19769C16[];
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY vtc_S19769C16[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern VTBL_ENTRY _ZTV9S19769C16[];
static  VTT_ENTRY vtt_S19769C16[] = {
  {&(_ZTV9S19769C16[3]),  3,7},
  {&(_ZTV9S19769C16[6]),  6,7},
};
extern VTBL_ENTRY _ZTI9S19769C16[];
extern  VTBL_ENTRY _ZTV9S19769C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C16[];
Class_Descriptor cd_S19769C16 = {  "S19769C16", // class name
  bases_S19769C16, 1,
  &(vtc_S19769C16[0]), // expected_vtbl_contents
  &(vtt_S19769C16[0]), // expected_vtt_contents
  ABISELECT(432,228), // object size
  NSPAIRA(_ZTI9S19769C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19769C16),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19769C16),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  S19769C14  : S19769C15 , S19769C16 {
  __tsi64 s19769c14f0;
  long double s19769c14f1;
  ::S20176C3_nt s19769c14f2;
  int s19769c14f3[9];
  short s19769c14f4;
  char s19769c14f5:5;
  virtual  ~S19769C14(); // _ZN9S19769C14D2Ev
  virtual void  v11(); // _ZN9S19769C143v11Ev
  S19769C14(); // tgen
};
//SIG(-1 S19769C14) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 Fi Fp FC6{ m Fp[2]}} VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} VBC9{ VBC3 BC7 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC4 Fp Fs FL Fi FL FC4[4] Fi} BC10{ VBC7 Fp Fs FL Fi:6 Fp[2]} vd v1 FL FD FC8 Fi[9] Fs Fc:5}


 S19769C14 ::~S19769C14(){ note_dtor("S19769C14", this);}
void  S19769C14 ::v11(){vfunc_called(this, "_ZN9S19769C143v11Ev");}
S19769C14 ::S19769C14(){ note_ctor("S19769C14", this);} // tgen

static void Test_S19769C14()
{
  extern Class_Descriptor cd_S19769C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(369,807)];
    init_test(&cd_S19769C14, buf);
    S19769C14 *dp, &lv = *(dp=new (buf) S19769C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5888,3224), "sizeof(S19769C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C14)");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*), ABISELECT(4560,2496), "S19769C14");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(5024,2752), "S19769C14");
    check_base_class_offset(lv, (S19769C3*)(S19769C16*), ABISELECT(5024,2752), "S19769C14");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(5392,2948), "S19769C14");
    check_base_class_offset(lv, (S19769C9*)(S19769C13*), ABISELECT(4560,2496), "S19769C14");
    check_base_class_offset(lv, (S19769C13*)(S19769C15*), ABISELECT(4464,2440), "S19769C14");
    check_base_class_offset(lv, (S19769C13*)(S19769C12*), ABISELECT(4464,2440), "S19769C14");
    /*is_ambiguous_... S19769C12::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*), ABISELECT(5408,2956), "S19769C14");
    /*is_ambiguous_... S19769C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*), ABISELECT(5776,3152), "S19769C14");
    check_base_class_offset(lv, (S19769C12*)(S19769C15*), ABISELECT(5408,2956), "S19769C14");
    check_base_class_offset(lv, (S19769C15*), 0, "S19769C14");
    check_base_class_offset(lv, (S19769C16*), ABISELECT(4328,2344), "S19769C14");
    check_field_offset(lv, s19769c14f0, ABISELECT(4384,2376), "S19769C14.s19769c14f0");
    check_field_offset(lv, s19769c14f1, ABISELECT(4400,2384), "S19769C14.s19769c14f1");
    check_field_offset(lv, s19769c14f2, ABISELECT(4416,2396), "S19769C14.s19769c14f2");
    check_field_offset(lv, s19769c14f3, ABISELECT(4420,2400), "S19769C14.s19769c14f3");
    check_field_offset(lv, s19769c14f4, ABISELECT(4456,2436), "S19769C14.s19769c14f4");
    set_bf_and_test(lv, s19769c14f5, ABISELECT(4458,2438), 0, 5, 1, "S19769C14");
    set_bf_and_test(lv, s19769c14f5, ABISELECT(4458,2438), 0, 5, hide_sll(1LL<<4), "S19769C14");
    test_class_info(&lv, &cd_S19769C14);
    dp->~S19769C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C14(Test_S19769C14, "S19769C14", ABISELECT(5888,3224));

#else // __cplusplus

extern void _ZN9S19769C14C1Ev();
extern void _ZN9S19769C14D2Ev();
Name_Map name_map_S19769C14[] = {
  NSPAIR(_ZN9S19769C14C1Ev),
  NSPAIR(_ZN9S19769C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C13;
extern VTBL_ENTRY _ZTI9S19769C13[];
extern  VTBL_ENTRY _ZTV9S19769C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C13[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C15;
extern VTBL_ENTRY _ZTI9S19769C15[];
extern  VTBL_ENTRY _ZTV9S19769C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C15[];
extern Class_Descriptor cd_S19769C16;
extern VTBL_ENTRY _ZTI9S19769C16[];
extern  VTBL_ENTRY _ZTV9S19769C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C16[];
static Base_Class bases_S19769C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C5,    ABISELECT(4560,2496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C3,    ABISELECT(5024,2752), //bcp->offset
    26, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5392,2948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C9,    ABISELECT(4560,2496), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19769C13,    ABISELECT(4464,2440), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19769C3,    ABISELECT(5408,2956), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5776,3152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    ABISELECT(5408,2956), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19769C15,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19769C16,    ABISELECT(4328,2344), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19769C14[];
extern void _ZN9S19769C14D1Ev();
extern void _ZN9S19769C14D0Ev();
extern void _ZN9S19769C143v11Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev)();
extern void ABISELECT(_ZThn5408_N9S19769C14D1Ev,_ZThn2956_N9S19769C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev)();
extern void ABISELECT(_ZThn5408_N9S19769C14D0Ev,_ZThn2956_N9S19769C14D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY vtc_S19769C14[] = {
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN9S19769C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
  ABISELECT(696,408),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2496),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  0,
  ABISELECT(-5024,-2752),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  ABISELECT(-5408,-2956),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2956),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
extern VTBL_ENTRY _ZTV9S19769C14[];
extern void _ZN9S19769C15D1Ev();
extern void _ZN9S19769C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C15__9S19769C14[] = {
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN9S19769C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C15__9S19769C14[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C15__9S19769C14[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2496),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C15__9S19769C14[] = {
  0,
  ABISELECT(-5024,-2752),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev)();
extern void ABISELECT(_ZThn5408_N9S19769C15D1Ev,_ZThn2956_N9S19769C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev)();
extern void ABISELECT(_ZThn5408_N9S19769C15D0Ev,_ZThn2956_N9S19769C15D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C15__9S19769C14[] = {
  0,
  ABISELECT(-5408,-2956),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2956),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C16__9S19769C14[] = {
  ABISELECT(696,408),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C16__9S19769C14[] = {
  0,
  ABISELECT(-696,-408),
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C14[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C13__9S19769C14[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C13__9S19769C14[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C14[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__9S19769C14[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C14[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12__9S19769C14[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12__9S19769C14[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C12__9S19769C14[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTT_ENTRY vtt_S19769C14[] = {
  {&(_ZTV9S19769C14[7]),  7,43},
  {&(_tg__ZTV9S19769C15__9S19769C14[7]),  7,9},
  {&(_tg__ZTV9S19769C13__9S19769C15__9S19769C14[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C15__9S19769C14[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C15__9S19769C14[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C15__9S19769C14[9]),  9,13},
  {&(_tg__ZTV9S19769C16__9S19769C14[3]),  3,3},
  {&(_tg__ZTV8S19769C3__9S19769C16__9S19769C14[3]),  3,4},
  {&(_ZTV9S19769C14[18]),  18,43},
  {&(_ZTV9S19769C14[24]),  24,43},
  {&(_ZTV9S19769C14[29]),  29,43},
  {&(_ZTV9S19769C14[39]),  39,43},
  {&(_ZTV9S19769C14[13]),  13,43},
  {&(_tg__ZTV9S19769C13__9S19769C14[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C13__9S19769C14[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C13__9S19769C14[3]),  3,4},
  {&(_tg__ZTV8S19769C9__9S19769C14[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__9S19769C14[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C14[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C12__9S19769C14[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C12__9S19769C14[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C12__9S19769C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19769C14[];
extern  VTBL_ENTRY _ZTV9S19769C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C14[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19769C15D0Ev,_ZThn2956_N9S19769C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19769C15D1Ev,_ZThn2956_N9S19769C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19769C14D0Ev,_ZThn2956_N9S19769C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19769C14D1Ev,_ZThn2956_N9S19769C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19769C14 = {  "S19769C14", // class name
  bases_S19769C14, 10,
  &(vtc_S19769C14[0]), // expected_vtbl_contents
  &(vtt_S19769C14[0]), // expected_vtt_contents
  ABISELECT(5888,3224), // object size
  NSPAIRA(_ZTI9S19769C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19769C14),43, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19769C14),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C17  : S19769C12 {
  int s19769c17f0;
  ::S20176C3_nt s19769c17f1;
  void *s19769c17f2;
  int s19769c17f3;
  char s19769c17f4[8];
  short s19769c17f5;
  int s19769c17f6;
  virtual  ~S19769C17(); // _ZN9S19769C17D2Ev
  S19769C17(); // tgen
};
//SIG(-1 S19769C17) C1{ BC2{ VBC3{ VBC4{ BC5{ v1 Fi Fp FC6{ m Fp[2]}} VBC7{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v3 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC7 BC6 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC8 Fp Fi Fc[8] Fs Fi}


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

static void Test_S19769C17()
{
  extern Class_Descriptor cd_S19769C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,205)];
    init_test(&cd_S19769C17, buf);
    S19769C17 *dp, &lv = *(dp=new (buf) S19769C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,816), "sizeof(S19769C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C17)");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*), ABISELECT(624,356), "S19769C17");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(1088,612), "S19769C17");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(1456,808), "S19769C17");
    check_base_class_offset(lv, (S19769C9*)(S19769C13*), ABISELECT(624,356), "S19769C17");
    check_base_class_offset(lv, (S19769C13*)(S19769C12*), ABISELECT(520,300), "S19769C17");
    /*is_ambiguous_... S19769C12::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*), 0, "S19769C17");
    /*is_ambiguous_... S19769C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*), ABISELECT(368,196), "S19769C17");
    check_base_class_offset(lv, (S19769C12*), 0, "S19769C17");
    check_field_offset(lv, s19769c17f0, ABISELECT(480,268), "S19769C17.s19769c17f0");
    check_field_offset(lv, s19769c17f1, ABISELECT(484,272), "S19769C17.s19769c17f1");
    check_field_offset(lv, s19769c17f2, ABISELECT(488,276), "S19769C17.s19769c17f2");
    check_field_offset(lv, s19769c17f3, ABISELECT(496,280), "S19769C17.s19769c17f3");
    check_field_offset(lv, s19769c17f4, ABISELECT(500,284), "S19769C17.s19769c17f4");
    check_field_offset(lv, s19769c17f5, ABISELECT(508,292), "S19769C17.s19769c17f5");
    check_field_offset(lv, s19769c17f6, ABISELECT(512,296), "S19769C17.s19769c17f6");
    test_class_info(&lv, &cd_S19769C17);
    dp->~S19769C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C17(Test_S19769C17, "S19769C17", ABISELECT(1472,816));

#else // __cplusplus

extern void _ZN9S19769C17C1Ev();
extern void _ZN9S19769C17D2Ev();
Name_Map name_map_S19769C17[] = {
  NSPAIR(_ZN9S19769C17C1Ev),
  NSPAIR(_ZN9S19769C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C13;
extern VTBL_ENTRY _ZTI9S19769C13[];
extern  VTBL_ENTRY _ZTV9S19769C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C13[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
static Base_Class bases_S19769C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C5,    ABISELECT(624,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C3,    ABISELECT(1088,612), //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
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(1456,808), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C9,    ABISELECT(624,356), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19769C13,    ABISELECT(520,300), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19769C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19769C17[];
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C17D1Ev();
extern void _ZN9S19769C17D0Ev();
extern void _ZN9S19769C122v6Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY vtc_S19769C17[] = {
  ABISELECT(1456,808),
  ABISELECT(1088,612),
  ABISELECT(624,356),
  ABISELECT(520,300),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C17[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C17D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-520,-300),
  (VTBL_ENTRY)&(_ZTI9S19769C17[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-624,-356),
  (VTBL_ENTRY)&(_ZTI9S19769C17[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  0,
  ABISELECT(-1088,-612),
  (VTBL_ENTRY)&(_ZTI9S19769C17[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern VTBL_ENTRY _ZTV9S19769C17[];
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C17[] = {
  ABISELECT(1456,808),
  ABISELECT(1088,612),
  ABISELECT(624,356),
  ABISELECT(520,300),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12__9S19769C17[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-520,-300),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12__9S19769C17[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-624,-356),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C12__9S19769C17[] = {
  0,
  ABISELECT(-1088,-612),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C17[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C13__9S19769C17[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C13__9S19769C17[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C17[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__9S19769C17[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTT_ENTRY vtt_S19769C17[] = {
  {&(_ZTV9S19769C17[6]),  6,27},
  {&(_tg__ZTV9S19769C12__9S19769C17[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C12__9S19769C17[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C12__9S19769C17[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C12__9S19769C17[3]),  3,4},
  {&(_ZTV9S19769C17[15]),  15,27},
  {&(_ZTV9S19769C17[21]),  21,27},
  {&(_ZTV9S19769C17[26]),  26,27},
  {&(_tg__ZTV9S19769C13__9S19769C17[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C13__9S19769C17[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C13__9S19769C17[3]),  3,4},
  {&(_tg__ZTV8S19769C9__9S19769C17[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__9S19769C17[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19769C17[];
extern  VTBL_ENTRY _ZTV9S19769C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C17[];
Class_Descriptor cd_S19769C17 = {  "S19769C17", // class name
  bases_S19769C17, 8,
  &(vtc_S19769C17[0]), // expected_vtbl_contents
  &(vtt_S19769C17[0]), // expected_vtt_contents
  ABISELECT(1472,816), // object size
  NSPAIRA(_ZTI9S19769C17),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19769C17),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19769C17),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C18  : S19769C12 , S19769C14 , virtual S20176C15 {
  int s19769c18f0;
  void *s19769c18f1;
  short s19769c18f2;
  void *s19769c18f3[2];
  char s19769c18f4[8];
  ~S19769C18(); // tgen
  S19769C18(); // tgen
};
//SIG(-1 S19769C18) C1{ BC2{ VBC3{ VBC4{ BC5{ v1 Fi Fp FC6{ m Fp[2]}} VBC7{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v3 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC7 BC6 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC9{ BC10{ VBC3 VBC2 vd Fl Fp FC4 Fp Fs FL Fi FL FC4[4] Fi} BC11{ VBC7 Fp Fs FL Fi:6 Fp[2]} vd v5 FL FD FC8 Fi[9] Fs Fc:5} VBC12{ m FL FC6[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]}


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

static void Test_S19769C18()
{
  extern Class_Descriptor cd_S19769C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(412,902)];
    init_test(&cd_S19769C18, buf);
    S19769C18 *dp, &lv = *(dp=new (buf) S19769C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6576,3604), "sizeof(S19769C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C18)");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*), ABISELECT(5088,2792), "S19769C18");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(5552,3048), "S19769C18");
    check_base_class_offset(lv, (S19769C3*)(S19769C16*)(S19769C14*), ABISELECT(5552,3048), "S19769C18");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(5920,3244), "S19769C18");
    check_base_class_offset(lv, (S19769C9*)(S19769C13*), ABISELECT(5088,2792), "S19769C18");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C12*), ABISELECT(4984,2736), "S19769C18");
    check_base_class_offset(lv, (S19769C13*)(S19769C15*)(S19769C14*), ABISELECT(4984,2736), "S19769C18");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C12*), ABISELECT(4984,2736), "S19769C18");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*), 0, "S19769C18");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*), ABISELECT(368,196), "S19769C18");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C12*), 0, "S19769C18");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*), ABISELECT(5936,3252), "S19769C18");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*), ABISELECT(6304,3448), "S19769C18");
    check_base_class_offset(lv, (S19769C12*)(S19769C15*)(S19769C14*), ABISELECT(5936,3252), "S19769C18");
    check_base_class_offset(lv, (S19769C15*)(S19769C14*), ABISELECT(480,268), "S19769C18");
    check_base_class_offset(lv, (S19769C16*)(S19769C14*), ABISELECT(4808,2612), "S19769C18");
    check_base_class_offset(lv, (S19769C14*), ABISELECT(480,268), "S19769C18");
    check_base_class_offset(lv, (S20176C15*), ABISELECT(6416,3520), "S19769C18");
    check_field_offset(lv, s19769c18f0, ABISELECT(4940,2708), "S19769C18.s19769c18f0");
    check_field_offset(lv, s19769c18f1, ABISELECT(4944,2712), "S19769C18.s19769c18f1");
    check_field_offset(lv, s19769c18f2, ABISELECT(4952,2716), "S19769C18.s19769c18f2");
    check_field_offset(lv, s19769c18f3, ABISELECT(4960,2720), "S19769C18.s19769c18f3");
    check_field_offset(lv, s19769c18f4, ABISELECT(4976,2728), "S19769C18.s19769c18f4");
    test_class_info(&lv, &cd_S19769C18);
    dp->~S19769C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C18(Test_S19769C18, "S19769C18", ABISELECT(6576,3604));

#else // __cplusplus

extern void _ZN9S19769C18C1Ev();
extern void _ZN9S19769C18D1Ev();
Name_Map name_map_S19769C18[] = {
  NSPAIR(_ZN9S19769C18C1Ev),
  NSPAIR(_ZN9S19769C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C13;
extern VTBL_ENTRY _ZTI9S19769C13[];
extern  VTBL_ENTRY _ZTV9S19769C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C13[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C15;
extern VTBL_ENTRY _ZTI9S19769C15[];
extern  VTBL_ENTRY _ZTV9S19769C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C15[];
extern Class_Descriptor cd_S19769C16;
extern VTBL_ENTRY _ZTI9S19769C16[];
extern  VTBL_ENTRY _ZTV9S19769C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C16[];
extern Class_Descriptor cd_S19769C14;
extern VTBL_ENTRY _ZTI9S19769C14[];
extern  VTBL_ENTRY _ZTV9S19769C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C14[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
static Base_Class bases_S19769C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C5,    ABISELECT(5088,2792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C3,    ABISELECT(5552,3048), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5920,3244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C9,    ABISELECT(5088,2792), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19769C13,    ABISELECT(4984,2736), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19769C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19769C3,    ABISELECT(5936,3252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(6304,3448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    ABISELECT(5936,3252), //bcp->offset
    42, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19769C15,    ABISELECT(480,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19769C16,    ABISELECT(4808,2612), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19769C14,    ABISELECT(480,268), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C15,    ABISELECT(6416,3520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19769C18[];
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C18D1Ev();
extern void _ZN9S19769C18D0Ev();
extern void _ZN9S19769C122v6Ev();
extern void ABISELECT(_ZThn480_N9S19769C18D1Ev,_ZThn268_N9S19769C18D1Ev)();
extern void ABISELECT(_ZThn480_N9S19769C18D0Ev,_ZThn268_N9S19769C18D0Ev)();
extern void _ZN9S19769C143v11Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C18D1Ev,_ZTv0_n32_N9S19769C18D1Ev)();
extern void ABISELECT(_ZThn5936_N9S19769C18D1Ev,_ZThn3252_N9S19769C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C18D0Ev,_ZTv0_n32_N9S19769C18D0Ev)();
extern void ABISELECT(_ZThn5936_N9S19769C18D0Ev,_ZThn3252_N9S19769C18D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY vtc_S19769C18[] = {
  ABISELECT(6416,3520),
  ABISELECT(5936,3252),
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C18D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S19769C18D1Ev,_ZThn268_N9S19769C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S19769C18D0Ev,_ZThn268_N9S19769C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
  ABISELECT(744,436),
  ABISELECT(-4808,-2612),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  0,
  ABISELECT(-5552,-3048),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  ABISELECT(-5936,-3252),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5936,-3252),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C18D1Ev,_ZTv0_n32_N9S19769C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C18D0Ev,_ZTv0_n32_N9S19769C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
extern VTBL_ENTRY _ZTV9S19769C18[];
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__A__9S19769C18[] = {
  ABISELECT(5920,3244),
  ABISELECT(5552,3048),
  ABISELECT(5088,2792),
  ABISELECT(4984,2736),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12__A__9S19769C18[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4984,-2736),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12__A__9S19769C18[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5088,-2792),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C12__A__9S19769C18[] = {
  0,
  ABISELECT(-5552,-3048),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN9S19769C14D1Ev();
extern void _ZN9S19769C14D0Ev();
extern void _ZN9S19769C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C14__9S19769C18[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN9S19769C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
};
extern void _ZN9S19769C15D1Ev();
extern void _ZN9S19769C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C159S19769C14__9S19769C18[] = {
  ABISELECT(5456,2984),
  ABISELECT(5440,2976),
  ABISELECT(5072,2780),
  ABISELECT(4608,2524),
  ABISELECT(4504,2468),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN9S19769C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C159S19769C14__9S19769C18[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C159S19769C14__9S19769C18[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C159S19769C14__9S19769C18[] = {
  0,
  ABISELECT(-5072,-2780),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev)();
extern void ABISELECT(_ZThn5456_N9S19769C15D1Ev,_ZThn2984_N9S19769C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev)();
extern void ABISELECT(_ZThn5456_N9S19769C15D0Ev,_ZThn2984_N9S19769C15D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C159S19769C14__9S19769C18[] = {
  0,
  ABISELECT(-5456,-2984),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2984),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C169S19769C14__9S19769C18[] = {
  ABISELECT(744,436),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C169S19769C14__9S19769C18[] = {
  0,
  ABISELECT(-744,-436),
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C14__9S19769C18[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4504,-2468),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C14__9S19769C18[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4608,-2524),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C14__9S19769C18[] = {
  0,
  ABISELECT(-5072,-2780),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev)();
extern void ABISELECT(_ZThn5456_N9S19769C14D1Ev,_ZThn2984_N9S19769C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev)();
extern void ABISELECT(_ZThn5456_N9S19769C14D0Ev,_ZThn2984_N9S19769C14D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C14__9S19769C18[] = {
  0,
  ABISELECT(-5456,-2984),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5456,-2984),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C16__9S19769C14__9S19769C18[] = {
  ABISELECT(744,436),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C18[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C13__9S19769C18[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C13__9S19769C18[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C18[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__9S19769C18[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__A1__9S19769C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12__A1__9S19769C18[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12__A1__9S19769C18[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C12__A1__9S19769C18[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTT_ENTRY vtt_S19769C18[] = {
  {&(_ZTV9S19769C18[8]),  8,55},
  {&(_tg__ZTV9S19769C12__A__9S19769C18[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C12__A__9S19769C18[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C12__A__9S19769C18[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C12__A__9S19769C18[3]),  3,4},
  {&(_tg__ZTV9S19769C14__9S19769C18[7]),  7,10},
  {&(_tg__ZTV9S19769C159S19769C14__9S19769C18[7]),  7,9},
  {&(_tg__ZTV9S19769C13__9S19769C159S19769C14__9S19769C18[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C159S19769C14__9S19769C18[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C159S19769C14__9S19769C18[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C159S19769C14__9S19769C18[9]),  9,13},
  {&(_tg__ZTV9S19769C169S19769C14__9S19769C18[3]),  3,3},
  {&(_tg__ZTV8S19769C3__9S19769C169S19769C14__9S19769C18[3]),  3,4},
  {&(_tg__ZTV9S19769C13__9S19769C14__9S19769C18[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C14__9S19769C18[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C14__9S19769C18[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C14__9S19769C18[9]),  9,13},
  {&(_tg__ZTV9S19769C16__9S19769C14__9S19769C18[3]),  3,3},
  {&(_ZTV9S19769C18[30]),  30,55},
  {&(_ZTV9S19769C18[36]),  36,55},
  {&(_ZTV9S19769C18[41]),  41,55},
  {&(_ZTV9S19769C18[19]),  19,55},
  {&(_ZTV9S19769C18[51]),  51,55},
  {&(_ZTV9S19769C18[25]),  25,55},
  {&(_tg__ZTV9S19769C13__9S19769C18[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C13__9S19769C18[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C13__9S19769C18[3]),  3,4},
  {&(_tg__ZTV8S19769C9__9S19769C18[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__9S19769C18[3]),  3,4},
  {&(_tg__ZTV9S19769C12__A1__9S19769C18[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C12__A1__9S19769C18[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C12__A1__9S19769C18[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C12__A1__9S19769C18[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19769C18[];
extern  VTBL_ENTRY _ZTV9S19769C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C18[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S19769C14D0Ev,_ZThn2984_N9S19769C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S19769C14D1Ev,_ZThn2984_N9S19769C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S19769C15D0Ev,_ZThn2984_N9S19769C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N9S19769C15D1Ev,_ZThn2984_N9S19769C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C18D0Ev,_ZTv0_n32_N9S19769C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S19769C18D0Ev,_ZThn3252_N9S19769C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C18D1Ev,_ZTv0_n32_N9S19769C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5936_N9S19769C18D1Ev,_ZThn3252_N9S19769C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19769C18 = {  "S19769C18", // class name
  bases_S19769C18, 15,
  &(vtc_S19769C18[0]), // expected_vtbl_contents
  &(vtt_S19769C18[0]), // expected_vtt_contents
  ABISELECT(6576,3604), // object size
  NSPAIRA(_ZTI9S19769C18),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19769C18),55, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19769C18),33, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C6  : virtual S19769C7 , virtual S19769C14 , virtual S19769C17 , S19769C18 {
  ::S19769C9 s19769c6f0[10];
  int s19769c6f1[9];
  ::S20176C3_nt s19769c6f2;
  int s19769c6f3;
  void *s19769c6f4;
  long double s19769c6f5[4];
  char s19769c6f6[5];
  ::S20176C15 s19769c6f7;
  __tsi64 s19769c6f8;
  virtual  ~S19769C6(); // _ZN8S19769C6D2Ev
  virtual void  v12(); // _ZN8S19769C63v12Ev
  S19769C6(); // tgen
};
//SIG(-1 S19769C6) C1{ VBC2{ BC3{ VBC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC5 BC6{ BC4 VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} BC7 vd v5 Fi:25 Fp Fi[3] FC5} VBC6 VBC9{ VBC10{ VBC7 VBC11{ VBC12{ VBC6 Fi Fc Fp[6] Fi[2] Fp FC5} BC7 BC5 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v7 v8 FC11[7] Fi Fs Fi FC6 FL[9]} vd Fc Fi[3]} vd v9 v10 FD[2] FC8 Fi:16 Fi:3} VBC13{ BC14{ VBC12 VBC11 vd Fl Fp FC6 Fp Fs FL Fi FL FC6[4] Fi} BC15{ VBC7 Fp Fs FL Fi:6 Fp[2]} vd v11 FL FD FC8 Fi[9] Fs Fc:5} VBC16{ BC11 vd Fi FC8 Fp Fi Fc[8] Fs Fi} BC17{ BC11 BC13 VBC18{ m FL FC5[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} vd v1 FC6[10] Fi[9] FC8 Fi Fp FD[4] Fc[5] FC18 FL}


 S19769C6 ::~S19769C6(){ note_dtor("S19769C6", this);}
void  S19769C6 ::v12(){vfunc_called(this, "_ZN8S19769C63v12Ev");}
S19769C6 ::S19769C6(){ note_ctor("S19769C6", this);} // tgen

static void Test_S19769C6()
{
  extern Class_Descriptor cd_S19769C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2017,4432)];
    init_test(&cd_S19769C6, buf);
    S19769C6 *dp, &lv = *(dp=new (buf) S19769C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32256,17724), "sizeof(S19769C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C6)");
    /*is_ambiguous_... S19769C8::S19769C5 */ AMB_check_base_class_offset(lv, (S19769C5*)(S19769C8*)(S19769C7*), ABISELECT(14696,8040), "S19769C6");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C8*)(S19769C7*), ABISELECT(14736,8060), "S19769C6");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*)(S19769C8*)(S19769C7*), ABISELECT(14736,8060), "S19769C6");
    /*is_ambiguous_... S19769C6::S19769C9 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(14736,8060), "S19769C6");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*)(S19769C8*)(S19769C7*), ABISELECT(13776,7532), "S19769C6");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*)(S19769C8*)(S19769C7*), ABISELECT(14752,8068), "S19769C6");
    /*is_ambiguous_... S19769C6::S19769C9 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(14752,8068), "S19769C6");
    /*is_ambiguous_... S19769C11::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C11*), ABISELECT(14752,8068), "S19769C6");
    /*is_ambiguous_... S19769C6::S19769C14 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C16*)(S19769C14*), ABISELECT(14752,8068), "S19769C6");
    check_base_class_offset(lv, (S19769C3*)(S19769C16*)(S19769C14*)(S19769C18*), ABISELECT(14752,8068), "S19769C6");
    check_base_class_offset(lv, (S19769C9*)(S19769C8*)(S19769C7*), ABISELECT(13776,7532), "S19769C6");
    /*is_ambiguous_... S19769C8::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C8*)(S19769C7*), ABISELECT(14240,7788), "S19769C6");
    check_base_class_offset(lv, (S19769C8*)(S19769C7*), ABISELECT(13776,7532), "S19769C6");
    /*is_ambiguous_... S19769C6::S19769C9 */ AMB_check_base_class_offset(lv, (S19769C5*)(S19769C9*), ABISELECT(15120,8264), "S19769C6");
    /*is_ambiguous_... S19769C7::S19769C9 */ AMB_check_base_class_offset(lv, (S19769C9*)(S19769C7*), ABISELECT(15120,8264), "S19769C6");
    check_base_class_offset(lv, (S19769C9*)(S19769C13*), ABISELECT(15120,8264), "S19769C6");
    /*is_ambiguous_... S19769C6::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C12*), ABISELECT(27008,14844), "S19769C6");
    /*is_ambiguous_... S19769C6::S19769C14 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C15*)(S19769C14*), ABISELECT(27008,14844), "S19769C6");
    check_base_class_offset(lv, (S19769C13*)(S19769C12*)(S19769C17*), ABISELECT(27008,14844), "S19769C6");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C12*)(S19769C18*), ABISELECT(27008,14844), "S19769C6");
    check_base_class_offset(lv, (S19769C13*)(S19769C15*)(S19769C14*)(S19769C18*), ABISELECT(27008,14844), "S19769C6");
    /*is_ambiguous_... S19769C6::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*), ABISELECT(26528,14576), "S19769C6");
    /*is_ambiguous_... S19769C6::S19769C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*), ABISELECT(26896,14772), "S19769C6");
    check_base_class_offset(lv, (S19769C12*)(S19769C11*), ABISELECT(26528,14576), "S19769C6");
    /*is_ambiguous_... S19769C6::S19769C14 */ AMB_check_base_class_offset(lv, (S19769C12*)(S19769C15*)(S19769C14*), ABISELECT(26528,14576), "S19769C6");
    check_base_class_offset(lv, (S19769C12*)(S19769C15*)(S19769C14*)(S19769C18*), ABISELECT(26528,14576), "S19769C6");
    check_base_class_offset(lv, (S19769C11*)(S19769C10*), ABISELECT(15600,8540), "S19769C6");
    check_base_class_offset(lv, (S19769C10*)(S19769C7*), ABISELECT(15576,8520), "S19769C6");
    check_base_class_offset(lv, (S19769C7*), ABISELECT(13776,7532), "S19769C6");
    /*is_ambiguous_... S19769C6::S19769C14 */ AMB_check_base_class_offset(lv, (S19769C15*)(S19769C14*), ABISELECT(27104,14900), "S19769C6");
    /*is_ambiguous_... S19769C6::S19769C14 */ AMB_check_base_class_offset(lv, (S19769C16*)(S19769C14*), ABISELECT(31432,17244), "S19769C6");
    /*is_ambiguous_... S19769C6::S19769C14 */ AMB_check_base_class_offset(lv, (S19769C14*), ABISELECT(27104,14900), "S19769C6");
    /*is_ambiguous_... S19769C12::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*)(S19769C17*), ABISELECT(31568,17340), "S19769C6");
    /*is_ambiguous_... S19769C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*)(S19769C17*), ABISELECT(31936,17536), "S19769C6");
    check_base_class_offset(lv, (S19769C12*)(S19769C17*), ABISELECT(31568,17340), "S19769C6");
    check_base_class_offset(lv, (S19769C17*), ABISELECT(31568,17340), "S19769C6");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*)(S19769C18*), 0, "S19769C6");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*)(S19769C18*), ABISELECT(368,196), "S19769C6");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C12*)(S19769C18*), 0, "S19769C6");
    check_base_class_offset(lv, (S19769C15*)(S19769C14*)(S19769C18*), ABISELECT(480,268), "S19769C6");
    check_base_class_offset(lv, (S19769C16*)(S19769C14*)(S19769C18*), ABISELECT(4808,2612), "S19769C6");
    check_base_class_offset(lv, (S19769C14*)(S19769C18*), ABISELECT(480,268), "S19769C6");
    check_base_class_offset(lv, (S20176C15*)(S19769C18*), ABISELECT(32088,17640), "S19769C6");
    check_base_class_offset(lv, (S19769C18*), 0, "S19769C6");
    check_field_offset(lv, s19769c6f0, ABISELECT(4992,2736), "S19769C6.s19769c6f0");
    check_field_offset(lv, s19769c6f1, ABISELECT(13472,7336), "S19769C6.s19769c6f1");
    check_field_offset(lv, s19769c6f2, ABISELECT(13508,7372), "S19769C6.s19769c6f2");
    check_field_offset(lv, s19769c6f3, ABISELECT(13512,7376), "S19769C6.s19769c6f3");
    check_field_offset(lv, s19769c6f4, ABISELECT(13520,7380), "S19769C6.s19769c6f4");
    check_field_offset(lv, s19769c6f5, ABISELECT(13536,7384), "S19769C6.s19769c6f5");
    check_field_offset(lv, s19769c6f6, ABISELECT(13600,7432), "S19769C6.s19769c6f6");
    check_field_offset(lv, s19769c6f7, ABISELECT(13608,7440), "S19769C6.s19769c6f7");
    check_field_offset(lv, s19769c6f8, ABISELECT(13768,7524), "S19769C6.s19769c6f8");
    test_class_info(&lv, &cd_S19769C6);
    dp->~S19769C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C6(Test_S19769C6, "S19769C6", ABISELECT(32256,17724));

#else // __cplusplus

extern void _ZN8S19769C6C1Ev();
extern void _ZN8S19769C6D2Ev();
Name_Map name_map_S19769C6[] = {
  NSPAIR(_ZN8S19769C6C1Ev),
  NSPAIR(_ZN8S19769C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S19769C8;
extern VTBL_ENTRY _ZTI8S19769C8[];
extern  VTBL_ENTRY _ZTV8S19769C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C8[];
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C13;
extern VTBL_ENTRY _ZTI9S19769C13[];
extern  VTBL_ENTRY _ZTV9S19769C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C13[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C11;
extern VTBL_ENTRY _ZTI9S19769C11[];
extern  VTBL_ENTRY _ZTV9S19769C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C11[];
extern Class_Descriptor cd_S19769C10;
extern VTBL_ENTRY _ZTI9S19769C10[];
extern  VTBL_ENTRY _ZTV9S19769C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C10[];
extern Class_Descriptor cd_S19769C7;
extern VTBL_ENTRY _ZTI8S19769C7[];
extern  VTBL_ENTRY _ZTV8S19769C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C7[];
extern Class_Descriptor cd_S19769C15;
extern VTBL_ENTRY _ZTI9S19769C15[];
extern  VTBL_ENTRY _ZTV9S19769C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C15[];
extern Class_Descriptor cd_S19769C16;
extern VTBL_ENTRY _ZTI9S19769C16[];
extern  VTBL_ENTRY _ZTV9S19769C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C16[];
extern Class_Descriptor cd_S19769C14;
extern VTBL_ENTRY _ZTI9S19769C14[];
extern  VTBL_ENTRY _ZTV9S19769C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C14[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C17;
extern VTBL_ENTRY _ZTI9S19769C17[];
extern  VTBL_ENTRY _ZTV9S19769C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C17[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C15;
extern VTBL_ENTRY _ZTI9S19769C15[];
extern  VTBL_ENTRY _ZTV9S19769C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C15[];
extern Class_Descriptor cd_S19769C16;
extern VTBL_ENTRY _ZTI9S19769C16[];
extern  VTBL_ENTRY _ZTV9S19769C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C16[];
extern Class_Descriptor cd_S19769C14;
extern VTBL_ENTRY _ZTI9S19769C14[];
extern  VTBL_ENTRY _ZTV9S19769C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C14[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
extern Class_Descriptor cd_S19769C18;
extern VTBL_ENTRY _ZTI9S19769C18[];
extern  VTBL_ENTRY _ZTV9S19769C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C18[];
static Base_Class bases_S19769C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C5,    ABISELECT(14696,8040), //bcp->offset
    59, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(14736,8060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C5,    ABISELECT(13776,7532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19769C3,    ABISELECT(14752,8068), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19769C9,    ABISELECT(13776,7532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19769C3,    ABISELECT(14240,7788), //bcp->offset
    56, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19769C8,    ABISELECT(13776,7532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19769C5,    ABISELECT(15120,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19769C9,    ABISELECT(15120,8264), //bcp->offset
    67, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19769C13,    ABISELECT(27008,14844), //bcp->offset
    113, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19769C3,    ABISELECT(26528,14576), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(26896,14772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    ABISELECT(26528,14576), //bcp->offset
    100, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19769C11,    ABISELECT(15600,8540), //bcp->offset
    86, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19769C10,    ABISELECT(15576,8520), //bcp->offset
    75, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19769C7,    ABISELECT(13776,7532), //bcp->offset
    32, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19769C15,    ABISELECT(27104,14900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19769C16,    ABISELECT(31432,17244), //bcp->offset
    130, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19769C14,    ABISELECT(27104,14900), //bcp->offset
    118, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19769C3,    ABISELECT(31568,17340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(31936,17536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    ABISELECT(31568,17340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19769C17,    ABISELECT(31568,17340), //bcp->offset
    133, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19769C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19769C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19769C15,    ABISELECT(480,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19769C16,    ABISELECT(4808,2612), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19769C14,    ABISELECT(480,268), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20176C15,    ABISELECT(32088,17640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S19769C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19769C6[];
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C6D1Ev();
extern void _ZN8S19769C6D0Ev();
extern void _ZN9S19769C122v6Ev();
extern void _ZN8S19769C63v12Ev();
extern void ABISELECT(_ZThn480_N8S19769C6D1Ev,_ZThn268_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn480_N8S19769C6D0Ev,_ZThn268_N8S19769C6D0Ev)();
extern void _ZN9S19769C143v11Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void ABISELECT(_ZTv0_n104_N8S19769C6D1Ev,_ZTv0_n52_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn13776_N8S19769C6D1Ev,_ZThn7532_N8S19769C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19769C6D0Ev,_ZTv0_n52_N8S19769C6D0Ev)();
extern void ABISELECT(_ZThn13776_N8S19769C6D0Ev,_ZThn7532_N8S19769C6D0Ev)() __attribute__((weak));
extern void _ZN8S19769C82v5Ev();
extern void _ZN8S19769C72v9Ev();
extern void _ZN8S19769C73v10Ev();
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S19769C6D1Ev,_ZTv0_n36_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn15576_N8S19769C6D1Ev,_ZThn8520_N8S19769C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19769C6D0Ev,_ZTv0_n36_N8S19769C6D0Ev)();
extern void ABISELECT(_ZThn15576_N8S19769C6D0Ev,_ZThn8520_N8S19769C6D0Ev)() __attribute__((weak));
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19769C6D1Ev,_ZTv0_n40_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn15600_N8S19769C6D1Ev,_ZThn8540_N8S19769C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19769C6D0Ev,_ZTv0_n40_N8S19769C6D0Ev)();
extern void ABISELECT(_ZThn15600_N8S19769C6D0Ev,_ZThn8540_N8S19769C6D0Ev)() __attribute__((weak));
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn26528_N8S19769C6D1Ev,_ZThn14576_N8S19769C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev)();
extern void ABISELECT(_ZThn26528_N8S19769C6D0Ev,_ZThn14576_N8S19769C6D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn27104_N8S19769C6D1Ev,_ZThn14900_N8S19769C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev)();
extern void ABISELECT(_ZThn27104_N8S19769C6D0Ev,_ZThn14900_N8S19769C6D0Ev)() __attribute__((weak));
extern void _ZN9S19769C143v11Ev();
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn31568_N8S19769C6D1Ev,_ZThn17340_N8S19769C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev)();
extern void ABISELECT(_ZThn31568_N8S19769C6D0Ev,_ZThn17340_N8S19769C6D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY vtc_S19769C6[] = {
  ABISELECT(31568,17340),
  ABISELECT(27104,14900),
  ABISELECT(15600,8540),
  ABISELECT(15576,8520),
  ABISELECT(14696,8040),
  ABISELECT(13776,7532),
  ABISELECT(32088,17640),
  ABISELECT(26528,14576),
  ABISELECT(14736,8060),
  ABISELECT(14752,8068),
  ABISELECT(15120,8264),
  ABISELECT(27008,14844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19769C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19769C6D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  (VTBL_ENTRY)&_ZN8S19769C63v12Ev,
  ABISELECT(26048,14308),
  ABISELECT(14256,7792),
  ABISELECT(14272,7800),
  ABISELECT(14640,7996),
  ABISELECT(26528,14576),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N8S19769C6D1Ev,_ZThn268_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N8S19769C6D0Ev,_ZThn268_N8S19769C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
  ABISELECT(9944,5456),
  ABISELECT(-4808,-2612),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  0,
  0,
  ABISELECT(464,256),
  0,
  ABISELECT(-13776,-7532),
  0,
  0,
  ABISELECT(13232,7312),
  ABISELECT(12752,7044),
  ABISELECT(1824,1008),
  ABISELECT(1800,988),
  ABISELECT(1344,732),
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  ABISELECT(-13776,-7532),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19769C6D1Ev,_ZTv0_n52_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19769C6D0Ev,_ZTv0_n52_N8S19769C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19769C82v5Ev,
  (VTBL_ENTRY)&_ZN8S19769C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19769C73v10Ev,
  ABISELECT(-14240,-7788),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  ABISELECT(-14696,-8040),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  0,
  ABISELECT(-14752,-8068),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-15120,-8264),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  ABISELECT(-15576,-8520),
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6324),
  ABISELECT(10952,6056),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  ABISELECT(-15576,-8520),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19769C6D1Ev,_ZTv0_n36_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19769C6D0Ev,_ZTv0_n36_N8S19769C6D0Ev),
  ABISELECT(-15600,-8540),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-848,-472),
  ABISELECT(-15600,-8540),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19769C6D1Ev,_ZTv0_n40_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19769C6D0Ev,_ZTv0_n40_N8S19769C6D0Ev),
  0,
  ABISELECT(-26528,-14576),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-26528,-14576),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-27008,-14844),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  0,
  ABISELECT(-27104,-14900),
  ABISELECT(-576,-324),
  ABISELECT(-12368,-6840),
  ABISELECT(-12352,-6832),
  ABISELECT(-11984,-6636),
  ABISELECT(-96,-56),
  ABISELECT(-27104,-14900),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
  ABISELECT(-16680,-9176),
  ABISELECT(-31432,-17244),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  0,
  ABISELECT(-31568,-17340),
  0,
  ABISELECT(-16832,-9280),
  ABISELECT(-16816,-9272),
  ABISELECT(-16448,-9076),
  ABISELECT(-4560,-2496),
  ABISELECT(-31568,-17340),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
extern VTBL_ENTRY _ZTV8S19769C6[];
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C18D1Ev();
extern void _ZN9S19769C18D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C18__8S19769C6[] = {
  ABISELECT(32088,17640),
  ABISELECT(26528,14576),
  ABISELECT(14736,8060),
  ABISELECT(14752,8068),
  ABISELECT(15120,8264),
  ABISELECT(27008,14844),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C18D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C129S19769C18__A2__8S19769C6[] = {
  ABISELECT(14736,8060),
  ABISELECT(14752,8068),
  ABISELECT(15120,8264),
  ABISELECT(27008,14844),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C129S19769C18__A2__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-27008,-14844),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C129S19769C18__A2__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-15120,-8264),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C129S19769C18__A2__8S19769C6[] = {
  0,
  ABISELECT(-14752,-8068),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN9S19769C14D1Ev();
extern void _ZN9S19769C14D0Ev();
extern void _ZN9S19769C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C149S19769C18__A1__8S19769C6[] = {
  ABISELECT(26048,14308),
  ABISELECT(14256,7792),
  ABISELECT(14272,7800),
  ABISELECT(14640,7996),
  ABISELECT(26528,14576),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN9S19769C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
};
extern void _ZN9S19769C15D1Ev();
extern void _ZN9S19769C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C159S19769C149S19769C18__A1__8S19769C6[] = {
  ABISELECT(26048,14308),
  ABISELECT(14256,7792),
  ABISELECT(14272,7800),
  ABISELECT(14640,7996),
  ABISELECT(26528,14576),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN9S19769C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C159S19769C149S19769C18__A1__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-26528,-14576),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C159S19769C149S19769C18__A1__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-14640,-7996),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C159S19769C149S19769C18__A1__8S19769C6[] = {
  0,
  ABISELECT(-14272,-7800),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev)();
extern void ABISELECT(_ZThn26048_N9S19769C15D1Ev,_ZThn14308_N9S19769C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev)();
extern void ABISELECT(_ZThn26048_N9S19769C15D0Ev,_ZThn14308_N9S19769C15D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C159S19769C149S19769C18__A1__8S19769C6[] = {
  0,
  ABISELECT(-26048,-14308),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-26048,-14308),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C169S19769C149S19769C18__A1__8S19769C6[] = {
  ABISELECT(9944,5456),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C169S19769C149S19769C18__A1__8S19769C6[] = {
  0,
  ABISELECT(-9944,-5456),
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C149S19769C18__A1__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-26528,-14576),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C149S19769C18__A1__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-14640,-7996),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C149S19769C18__A1__8S19769C6[] = {
  0,
  ABISELECT(-14272,-7800),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev)();
extern void ABISELECT(_ZThn26048_N9S19769C14D1Ev,_ZThn14308_N9S19769C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev)();
extern void ABISELECT(_ZThn26048_N9S19769C14D0Ev,_ZThn14308_N9S19769C14D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C149S19769C18__A1__8S19769C6[] = {
  0,
  ABISELECT(-26048,-14308),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-26048,-14308),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C16__9S19769C149S19769C18__A1__8S19769C6[] = {
  ABISELECT(9944,5456),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C18__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-27008,-14844),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C18__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-15120,-8264),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C18__8S19769C6[] = {
  0,
  ABISELECT(-14752,-8068),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void ABISELECT(_ZThn480_N9S19769C18D1Ev,_ZThn268_N9S19769C18D1Ev)();
extern void ABISELECT(_ZThn480_N9S19769C18D0Ev,_ZThn268_N9S19769C18D0Ev)();
extern void _ZN9S19769C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C14__9S19769C18__8S19769C6[] = {
  ABISELECT(26048,14308),
  ABISELECT(14256,7792),
  ABISELECT(14272,7800),
  ABISELECT(14640,7996),
  ABISELECT(26528,14576),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S19769C18D1Ev,_ZThn268_N9S19769C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S19769C18D0Ev,_ZThn268_N9S19769C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C18D1Ev,_ZTv0_n32_N9S19769C18D1Ev)();
extern void ABISELECT(_ZThn26528_N9S19769C18D1Ev,_ZThn14576_N9S19769C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C18D0Ev,_ZTv0_n32_N9S19769C18D0Ev)();
extern void ABISELECT(_ZThn26528_N9S19769C18D0Ev,_ZThn14576_N9S19769C18D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__A1__9S19769C18__8S19769C6[] = {
  0,
  ABISELECT(-26528,-14576),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-26528,-14576),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C18D1Ev,_ZTv0_n32_N9S19769C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C18D0Ev,_ZTv0_n32_N9S19769C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C169S19769C14__9S19769C18__8S19769C6[] = {
  ABISELECT(9944,5456),
  ABISELECT(-4808,-2612),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C7D1Ev();
extern void _ZN8S19769C7D0Ev();
extern void _ZN8S19769C82v5Ev();
extern void _ZN8S19769C72v9Ev();
extern void _ZN8S19769C73v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C7__8S19769C6[] = {
  ABISELECT(13232,7312),
  ABISELECT(12752,7044),
  ABISELECT(1824,1008),
  ABISELECT(1800,988),
  ABISELECT(1344,732),
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19769C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19769C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19769C82v5Ev,
  (VTBL_ENTRY)&_ZN8S19769C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19769C73v10Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C8D1Ev();
extern void _ZN8S19769C8D0Ev();
extern void _ZN8S19769C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C88S19769C7__8S19769C6[] = {
  ABISELECT(920,508),
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19769C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19769C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19769C82v5Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C98S19769C88S19769C7__8S19769C6[] = {
  ABISELECT(960,528),
  ABISELECT(976,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C98S19769C88S19769C7__8S19769C6[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C5__8S19769C88S19769C7__8S19769C6[] = {
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C88S19769C7__8S19769C6[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C5__8S19769C7__8S19769C6[] = {
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C7__8S19769C6[] = {
  0,
  ABISELECT(-976,-536),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__A1__8S19769C7__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(-1344,-732),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S19769C7D1Ev,_ZTv0_n36_N8S19769C7D1Ev)();
extern void ABISELECT(_ZThn1800_N8S19769C7D1Ev,_ZThn988_N8S19769C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19769C7D0Ev,_ZTv0_n36_N8S19769C7D0Ev)();
extern void ABISELECT(_ZThn1800_N8S19769C7D0Ev,_ZThn988_N8S19769C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19769C10__8S19769C7__8S19769C6[] = {
  ABISELECT(-1800,-988),
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6324),
  ABISELECT(10952,6056),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  ABISELECT(-1800,-988),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19769C7D1Ev,_ZTv0_n36_N8S19769C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19769C7D0Ev,_ZTv0_n36_N8S19769C7D0Ev),
};
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19769C7D1Ev,_ZTv0_n40_N8S19769C7D1Ev)();
extern void ABISELECT(_ZThn1824_N8S19769C7D1Ev,_ZThn1008_N8S19769C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19769C7D0Ev,_ZTv0_n40_N8S19769C7D0Ev)();
extern void ABISELECT(_ZThn1824_N8S19769C7D0Ev,_ZThn1008_N8S19769C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19769C11__8S19769C7__8S19769C6[] = {
  ABISELECT(-1824,-1008),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-848,-472),
  ABISELECT(-1824,-1008),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19769C7D1Ev,_ZTv0_n40_N8S19769C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19769C7D0Ev,_ZTv0_n40_N8S19769C7D0Ev),
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19769C7D1Ev,_ZTv0_n32_N8S19769C7D1Ev)();
extern void ABISELECT(_ZThn12752_N8S19769C7D1Ev,_ZThn7044_N8S19769C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C7D0Ev,_ZTv0_n32_N8S19769C7D0Ev)();
extern void ABISELECT(_ZThn12752_N8S19769C7D0Ev,_ZThn7044_N8S19769C7D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__8S19769C7__8S19769C6[] = {
  0,
  ABISELECT(-12752,-7044),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-12752,-7044),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C7D1Ev,_ZTv0_n32_N8S19769C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C7D0Ev,_ZTv0_n32_N8S19769C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__8S19769C7__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-13232,-7312),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__A1__8S19769C6[] = {
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__A1__8S19769C6[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN9S19769C10D1Ev();
extern void _ZN9S19769C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C10__8S19769C6[] = {
  ABISELECT(-840,-460),
  ABISELECT(-456,-256),
  ABISELECT(11432,6324),
  ABISELECT(10952,6056),
  ABISELECT(-824,-452),
  ABISELECT(24,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN9S19769C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C10D0Ev,
};
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N9S19769C10D1Ev,_ZTv0_n40_N9S19769C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19769C10D1Ev,_ZThn20_N9S19769C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19769C10D0Ev,_ZTv0_n40_N9S19769C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19769C10D0Ev,_ZThn20_N9S19769C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19769C11__9S19769C10__8S19769C6[] = {
  ABISELECT(-24,-20),
  0,
  0,
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-848,-472),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19769C10D1Ev,_ZTv0_n40_N9S19769C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19769C10D0Ev,_ZTv0_n40_N9S19769C10D0Ev),
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C10__8S19769C6[] = {
  0,
  ABISELECT(824,452),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C10D1Ev,_ZTv0_n32_N9S19769C10D1Ev)();
extern void ABISELECT(_ZThn10952_N9S19769C10D1Ev,_ZThn6056_N9S19769C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C10D0Ev,_ZTv0_n32_N9S19769C10D0Ev)();
extern void ABISELECT(_ZThn10952_N9S19769C10D0Ev,_ZThn6056_N9S19769C10D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C10__8S19769C6[] = {
  0,
  ABISELECT(-10952,-6056),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-10952,-6056),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C10D1Ev,_ZTv0_n32_N9S19769C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C10D0Ev,_ZTv0_n32_N9S19769C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C10__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-11432,-6324),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C10__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(456,256),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void _ZN9S19769C11D1Ev();
extern void _ZN9S19769C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C11__8S19769C6[] = {
  ABISELECT(-864,-480),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-848,-472),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19769C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C11D0Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C11__8S19769C6[] = {
  0,
  ABISELECT(848,472),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev)();
extern void ABISELECT(_ZThn10928_N9S19769C11D1Ev,_ZThn6036_N9S19769C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev)();
extern void ABISELECT(_ZThn10928_N9S19769C11D0Ev,_ZThn6036_N9S19769C11D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C11__8S19769C6[] = {
  0,
  ABISELECT(-10928,-6036),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C11__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-11408,-6304),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C11__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(480,276),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__8S19769C6[] = {
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11408,6312),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C12__8S19769C6[] = {
  0,
  ABISELECT(11776,6508),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C13__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11888,6580),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C13__8S19769C6[] = {
  0,
  ABISELECT(12256,6776),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN9S19769C14D1Ev();
extern void _ZN9S19769C14D0Ev();
extern void _ZN9S19769C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C14__8S19769C6[] = {
  ABISELECT(-576,-324),
  ABISELECT(-12368,-6840),
  ABISELECT(-12352,-6832),
  ABISELECT(-11984,-6636),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN9S19769C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
};
extern void _ZN9S19769C15D1Ev();
extern void _ZN9S19769C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C159S19769C14__8S19769C6[] = {
  ABISELECT(-576,-324),
  ABISELECT(-12368,-6840),
  ABISELECT(-12352,-6832),
  ABISELECT(-11984,-6636),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN9S19769C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C159S19769C14__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C159S19769C14__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11984,6636),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C159S19769C14__8S19769C6[] = {
  0,
  ABISELECT(12352,6832),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev)();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C159S19769C14__8S19769C6[] = {
  0,
  ABISELECT(576,324),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C169S19769C14__8S19769C6[] = {
  ABISELECT(-16680,-9176),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C169S19769C14__8S19769C6[] = {
  0,
  ABISELECT(16680,9176),
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C14__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C14__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(11984,6636),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C14__8S19769C6[] = {
  0,
  ABISELECT(12352,6832),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev)();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C14__8S19769C6[] = {
  0,
  ABISELECT(576,324),
  0,
  ABISELECT(-11792,-6516),
  ABISELECT(-11776,-6508),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C16__9S19769C14__8S19769C6[] = {
  ABISELECT(-16680,-9176),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C17D1Ev();
extern void _ZN9S19769C17D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C17__8S19769C6[] = {
  ABISELECT(-16832,-9280),
  ABISELECT(-16816,-9272),
  ABISELECT(-16448,-9076),
  ABISELECT(-4560,-2496),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C17[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C17D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C129S19769C17__A1__8S19769C6[] = {
  ABISELECT(-16832,-9280),
  ABISELECT(-16816,-9272),
  ABISELECT(-16448,-9076),
  ABISELECT(-4560,-2496),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C129S19769C17__A1__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(4560,2496),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C129S19769C17__A1__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(16448,9076),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C129S19769C17__A1__8S19769C6[] = {
  0,
  ABISELECT(16816,9272),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C17__8S19769C6[] = {
  ABISELECT(-12272,-6784),
  ABISELECT(-12256,-6776),
  ABISELECT(-11888,-6580),
  ABISELECT(4560,2496),
  (VTBL_ENTRY)&(_ZTI9S19769C17[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C17__8S19769C6[] = {
  0,
  0,
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(16448,9076),
  (VTBL_ENTRY)&(_ZTI9S19769C17[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C17__8S19769C6[] = {
  0,
  ABISELECT(16816,9272),
  (VTBL_ENTRY)&(_ZTI9S19769C17[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTT_ENTRY vtt_S19769C6[] = {
  {&(_ZTV8S19769C6[14]),  14,146},
  {&(_tg__ZTV9S19769C18__8S19769C6[8]),  8,12},
  {&(_tg__ZTV9S19769C129S19769C18__A2__8S19769C6[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C129S19769C18__A2__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C129S19769C18__A2__8S19769C6[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C129S19769C18__A2__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C149S19769C18__A1__8S19769C6[7]),  7,10},
  {&(_tg__ZTV9S19769C159S19769C149S19769C18__A1__8S19769C6[7]),  7,9},
  {&(_tg__ZTV9S19769C13__9S19769C159S19769C149S19769C18__A1__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C159S19769C149S19769C18__A1__8S19769C6[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C159S19769C149S19769C18__A1__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C159S19769C149S19769C18__A1__8S19769C6[9]),  9,13},
  {&(_tg__ZTV9S19769C169S19769C149S19769C18__A1__8S19769C6[3]),  3,3},
  {&(_tg__ZTV8S19769C3__9S19769C169S19769C149S19769C18__A1__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C13__9S19769C149S19769C18__A1__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C149S19769C18__A1__8S19769C6[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C149S19769C18__A1__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C149S19769C18__A1__8S19769C6[9]),  9,13},
  {&(_tg__ZTV9S19769C16__9S19769C149S19769C18__A1__8S19769C6[3]),  3,3},
  {&(_tg__ZTV9S19769C13__9S19769C18__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C18__8S19769C6[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C18__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C14__9S19769C18__8S19769C6[7]),  7,10},
  {&(_tg__ZTV9S19769C12__A1__9S19769C18__8S19769C6[9]),  9,13},
  {&(_tg__ZTV9S19769C169S19769C14__9S19769C18__8S19769C6[3]),  3,3},
  {&(_ZTV8S19769C6[49]),  49,146},
  {&(_ZTV8S19769C6[62]),  62,146},
  {&(_ZTV8S19769C6[66]),  66,146},
  {&(_ZTV8S19769C6[58]),  58,146},
  {&(_ZTV8S19769C6[73]),  73,146},
  {&(_ZTV8S19769C6[84]),  84,146},
  {&(_ZTV8S19769C6[96]),  96,146},
  {&(_ZTV8S19769C6[109]),  109,146},
  {&(_ZTV8S19769C6[118]),  118,146},
  {&(_ZTV8S19769C6[127]),  127,146},
  {&(_ZTV8S19769C6[133]),  133,146},
  {&(_ZTV8S19769C6[142]),  142,146},
  {&(_ZTV8S19769C6[26]),  26,146},
  {&(_ZTV8S19769C6[32]),  32,146},
  {&(_tg__ZTV8S19769C7__8S19769C6[10]),  10,17},
  {&(_tg__ZTV8S19769C88S19769C7__8S19769C6[5]),  5,10},
  {&(_tg__ZTV8S19769C98S19769C88S19769C7__8S19769C6[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C98S19769C88S19769C7__8S19769C6[3]),  3,4},
  {&(_tg__ZTV8S19769C5__8S19769C88S19769C7__8S19769C6[3]),  3,4},
  {&(_tg__ZTV8S19769C3__8S19769C88S19769C7__8S19769C6[3]),  3,4},
  {&(_tg__ZTV8S19769C5__8S19769C7__8S19769C6[3]),  3,4},
  {&(_tg__ZTV8S19769C3__8S19769C7__8S19769C6[3]),  3,4},
  {&(_tg__ZTV8S19769C9__A1__8S19769C7__8S19769C6[6]),  6,8},
  {&(_tg__ZTV9S19769C10__8S19769C7__8S19769C6[9]),  9,11},
  {&(_tg__ZTV9S19769C11__8S19769C7__8S19769C6[10]),  10,14},
  {&(_tg__ZTV9S19769C12__8S19769C7__8S19769C6[9]),  9,13},
  {&(_tg__ZTV9S19769C13__8S19769C7__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__A1__8S19769C6[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__A1__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C10__8S19769C6[8]),  8,10},
  {&(_tg__ZTV9S19769C11__9S19769C10__8S19769C6[10]),  10,14},
  {&(_tg__ZTV8S19769C3__9S19769C10__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C10__8S19769C6[9]),  9,13},
  {&(_tg__ZTV9S19769C13__9S19769C10__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C10__8S19769C6[6]),  6,8},
  {&(_tg__ZTV9S19769C11__8S19769C6[7]),  7,11},
  {&(_tg__ZTV8S19769C3__9S19769C11__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C11__8S19769C6[9]),  9,13},
  {&(_tg__ZTV9S19769C13__9S19769C11__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C11__8S19769C6[6]),  6,8},
  {&(_tg__ZTV9S19769C12__8S19769C6[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C12__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C12__8S19769C6[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C12__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C13__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C13__8S19769C6[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C13__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C14__8S19769C6[7]),  7,10},
  {&(_tg__ZTV9S19769C159S19769C14__8S19769C6[7]),  7,9},
  {&(_tg__ZTV9S19769C13__9S19769C159S19769C14__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C159S19769C14__8S19769C6[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C159S19769C14__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C159S19769C14__8S19769C6[9]),  9,13},
  {&(_tg__ZTV9S19769C169S19769C14__8S19769C6[3]),  3,3},
  {&(_tg__ZTV8S19769C3__9S19769C169S19769C14__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C13__9S19769C14__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C14__8S19769C6[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C14__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C14__8S19769C6[9]),  9,13},
  {&(_tg__ZTV9S19769C16__9S19769C14__8S19769C6[3]),  3,3},
  {&(_tg__ZTV9S19769C17__8S19769C6[6]),  6,10},
  {&(_tg__ZTV9S19769C129S19769C17__A1__8S19769C6[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C129S19769C17__A1__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C129S19769C17__A1__8S19769C6[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C129S19769C17__A1__8S19769C6[3]),  3,4},
  {&(_tg__ZTV9S19769C13__9S19769C17__8S19769C6[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C17__8S19769C6[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C17__8S19769C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19769C6[];
extern  VTBL_ENTRY _ZTV8S19769C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C6[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S19769C11D0Ev,_ZThn6036_N9S19769C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S19769C11D1Ev,_ZThn6036_N9S19769C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C10D0Ev,_ZTv0_n32_N9S19769C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S19769C10D0Ev,_ZThn6056_N9S19769C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C10D1Ev,_ZTv0_n32_N9S19769C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S19769C10D1Ev,_ZThn6056_N9S19769C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19769C10D0Ev,_ZTv0_n40_N9S19769C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19769C10D0Ev,_ZThn20_N9S19769C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19769C10D1Ev,_ZTv0_n40_N9S19769C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19769C10D1Ev,_ZThn20_N9S19769C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19769C7D0Ev,_ZTv0_n32_N8S19769C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12752_N8S19769C7D0Ev,_ZThn7044_N8S19769C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19769C7D1Ev,_ZTv0_n32_N8S19769C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12752_N8S19769C7D1Ev,_ZThn7044_N8S19769C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19769C7D0Ev,_ZTv0_n40_N8S19769C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N8S19769C7D0Ev,_ZThn1008_N8S19769C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19769C7D1Ev,_ZTv0_n40_N8S19769C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N8S19769C7D1Ev,_ZThn1008_N8S19769C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19769C7D0Ev,_ZTv0_n36_N8S19769C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1800_N8S19769C7D0Ev,_ZThn988_N8S19769C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19769C7D1Ev,_ZTv0_n36_N8S19769C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1800_N8S19769C7D1Ev,_ZThn988_N8S19769C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C18D0Ev,_ZTv0_n32_N9S19769C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26528_N9S19769C18D0Ev,_ZThn14576_N9S19769C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C18D1Ev,_ZTv0_n32_N9S19769C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26528_N9S19769C18D1Ev,_ZThn14576_N9S19769C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26048_N9S19769C14D0Ev,_ZThn14308_N9S19769C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26048_N9S19769C14D1Ev,_ZThn14308_N9S19769C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26048_N9S19769C15D0Ev,_ZThn14308_N9S19769C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26048_N9S19769C15D1Ev,_ZThn14308_N9S19769C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31568_N8S19769C6D0Ev,_ZThn17340_N8S19769C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27104_N8S19769C6D0Ev,_ZThn14900_N8S19769C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26528_N8S19769C6D0Ev,_ZThn14576_N8S19769C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31568_N8S19769C6D1Ev,_ZThn17340_N8S19769C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27104_N8S19769C6D1Ev,_ZThn14900_N8S19769C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26528_N8S19769C6D1Ev,_ZThn14576_N8S19769C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19769C6D0Ev,_ZTv0_n40_N8S19769C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15600_N8S19769C6D0Ev,_ZThn8540_N8S19769C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19769C6D1Ev,_ZTv0_n40_N8S19769C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15600_N8S19769C6D1Ev,_ZThn8540_N8S19769C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19769C6D0Ev,_ZTv0_n36_N8S19769C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15576_N8S19769C6D0Ev,_ZThn8520_N8S19769C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19769C6D1Ev,_ZTv0_n36_N8S19769C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15576_N8S19769C6D1Ev,_ZThn8520_N8S19769C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19769C6D0Ev,_ZTv0_n52_N8S19769C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13776_N8S19769C6D0Ev,_ZThn7532_N8S19769C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19769C6D1Ev,_ZTv0_n52_N8S19769C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13776_N8S19769C6D1Ev,_ZThn7532_N8S19769C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19769C6 = {  "S19769C6", // class name
  bases_S19769C6, 31,
  &(vtc_S19769C6[0]), // expected_vtbl_contents
  &(vtt_S19769C6[0]), // expected_vtt_contents
  ABISELECT(32256,17724), // object size
  NSPAIRA(_ZTI8S19769C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19769C6),146, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19769C6),93, //virtual table table var
  26, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C20  : virtual S19769C14 , S19769C12 , virtual S19769C15 {
  ::S19769C16 s19769c20f0;
  virtual  ~S19769C20(); // _ZN9S19769C20D2Ev
  S19769C20(); // tgen
};
//SIG(-1 S19769C20) C1{ VBC2{ BC3{ VBC4{ VBC5{ BC6{ v1 Fi Fp FC7{ m Fp[2]}} VBC8{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC9{} FC7 FC7[9] Fp FC6 FC6} VBC7 v3 Fp FL Fc[2] FC8 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} VBC10{ VBC4 BC8 BC7 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC5 Fp Fs FL Fi FL FC5[4] Fi} BC11{ VBC8 Fp Fs FL Fi:6 Fp[2]} vd v5 FL FD FC9 Fi[9] Fs Fc:5} BC10 VBC3 vd FC11}


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

static void Test_S19769C20()
{
  extern Class_Descriptor cd_S19769C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(697,1517)];
    init_test(&cd_S19769C20, buf);
    S19769C20 *dp, &lv = *(dp=new (buf) S19769C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11136,6064), "sizeof(S19769C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C20)");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*), ABISELECT(5472,2992), "S19769C20");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(5936,3248), "S19769C20");
    check_base_class_offset(lv, (S19769C3*)(S19769C16*)(S19769C14*), ABISELECT(5936,3248), "S19769C20");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(6304,3444), "S19769C20");
    check_base_class_offset(lv, (S19769C9*)(S19769C13*), ABISELECT(5472,2992), "S19769C20");
    check_base_class_offset(lv, (S19769C13*)(S19769C15*)(S19769C14*), ABISELECT(5376,2936), "S19769C20");
    /*is_ambiguous_... S19769C20::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C12*), ABISELECT(5376,2936), "S19769C20");
    /*is_ambiguous_... S19769C20::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C12*), ABISELECT(5376,2936), "S19769C20");
    /*is_ambiguous_... S19769C20::S19769C15 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C15*), ABISELECT(5376,2936), "S19769C20");
    /*is_ambiguous_... S19769C20::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*), ABISELECT(6320,3452), "S19769C20");
    /*is_ambiguous_... S19769C20::S19769C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*), ABISELECT(6688,3648), "S19769C20");
    check_base_class_offset(lv, (S19769C12*)(S19769C15*)(S19769C14*), ABISELECT(6320,3452), "S19769C20");
    /*is_ambiguous_... S19769C20::S19769C15 */ AMB_check_base_class_offset(lv, (S19769C12*)(S19769C15*), ABISELECT(6320,3452), "S19769C20");
    check_base_class_offset(lv, (S19769C15*)(S19769C14*), ABISELECT(912,496), "S19769C20");
    check_base_class_offset(lv, (S19769C16*)(S19769C14*), ABISELECT(5240,2840), "S19769C20");
    check_base_class_offset(lv, (S19769C14*), ABISELECT(912,496), "S19769C20");
    /*is_ambiguous_... S19769C20::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*), 0, "S19769C20");
    /*is_ambiguous_... S19769C20::S19769C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*), ABISELECT(368,196), "S19769C20");
    /*is_ambiguous_... S19769C20::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C12*), 0, "S19769C20");
    /*is_ambiguous_... S19769C20::S19769C15 */ AMB_check_base_class_offset(lv, (S19769C15*), ABISELECT(6800,3720), "S19769C20");
    check_field_offset(lv, s19769c20f0, ABISELECT(480,268), "S19769C20.s19769c20f0");
    test_class_info(&lv, &cd_S19769C20);
    dp->~S19769C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C20(Test_S19769C20, "S19769C20", ABISELECT(11136,6064));

#else // __cplusplus

extern void _ZN9S19769C20C1Ev();
extern void _ZN9S19769C20D2Ev();
Name_Map name_map_S19769C20[] = {
  NSPAIR(_ZN9S19769C20C1Ev),
  NSPAIR(_ZN9S19769C20D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C13;
extern VTBL_ENTRY _ZTI9S19769C13[];
extern  VTBL_ENTRY _ZTV9S19769C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C13[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C15;
extern VTBL_ENTRY _ZTI9S19769C15[];
extern  VTBL_ENTRY _ZTV9S19769C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C15[];
extern Class_Descriptor cd_S19769C16;
extern VTBL_ENTRY _ZTI9S19769C16[];
extern  VTBL_ENTRY _ZTV9S19769C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C16[];
extern Class_Descriptor cd_S19769C14;
extern VTBL_ENTRY _ZTI9S19769C14[];
extern  VTBL_ENTRY _ZTV9S19769C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C14[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C15;
extern VTBL_ENTRY _ZTI9S19769C15[];
extern  VTBL_ENTRY _ZTV9S19769C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C15[];
static Base_Class bases_S19769C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19769C5,    ABISELECT(5472,2992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C3,    ABISELECT(5936,3248), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(6304,3444), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C9,    ABISELECT(5472,2992), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19769C13,    ABISELECT(5376,2936), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19769C3,    ABISELECT(6320,3452), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(6688,3648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    ABISELECT(6320,3452), //bcp->offset
    45, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19769C15,    ABISELECT(912,496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19769C16,    ABISELECT(5240,2840), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19769C14,    ABISELECT(912,496), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19769C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    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},
  {&cd_S19769C15,    ABISELECT(6800,3720), //bcp->offset
    58, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19769C20[];
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C20D1Ev();
extern void _ZN9S19769C20D0Ev();
extern void _ZN9S19769C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev)();
extern void ABISELECT(_ZThn912_N9S19769C20D1Ev,_ZThn496_N9S19769C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev)();
extern void ABISELECT(_ZThn912_N9S19769C20D0Ev,_ZThn496_N9S19769C20D0Ev)() __attribute__((weak));
extern void _ZN9S19769C143v11Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev)();
extern void ABISELECT(_ZThn6320_N9S19769C20D1Ev,_ZThn3452_N9S19769C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev)();
extern void ABISELECT(_ZThn6320_N9S19769C20D0Ev,_ZThn3452_N9S19769C20D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev)();
extern void ABISELECT(_ZThn6800_N9S19769C20D1Ev,_ZThn3720_N9S19769C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev)();
extern void ABISELECT(_ZThn6800_N9S19769C20D0Ev,_ZThn3720_N9S19769C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19769C20[] = {
  ABISELECT(6800,3720),
  ABISELECT(6320,3452),
  ABISELECT(912,496),
  ABISELECT(6304,3444),
  ABISELECT(5936,3248),
  ABISELECT(5472,2992),
  ABISELECT(5376,2936),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C20D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  0,
  ABISELECT(-912,-496),
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  ABISELECT(-912,-496),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
  ABISELECT(696,408),
  ABISELECT(-5240,-2840),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-5376,-2936),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5472,-2992),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  0,
  ABISELECT(-5936,-3248),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  ABISELECT(-6320,-3452),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-6320,-3452),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  ABISELECT(-6800,-3720),
  ABISELECT(-480,-268),
  ABISELECT(-496,-276),
  ABISELECT(-864,-472),
  ABISELECT(-1328,-728),
  ABISELECT(-1424,-784),
  ABISELECT(-6800,-3720),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev),
};
extern VTBL_ENTRY _ZTV9S19769C20[];
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__A__9S19769C20[] = {
  ABISELECT(6304,3444),
  ABISELECT(5936,3248),
  ABISELECT(5472,2992),
  ABISELECT(5376,2936),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12__A__9S19769C20[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-5376,-2936),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12__A__9S19769C20[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5472,-2992),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C12__A__9S19769C20[] = {
  0,
  ABISELECT(-5936,-3248),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN9S19769C14D1Ev();
extern void _ZN9S19769C14D0Ev();
extern void _ZN9S19769C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C14__9S19769C20[] = {
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN9S19769C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
};
extern void _ZN9S19769C15D1Ev();
extern void _ZN9S19769C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C159S19769C14__9S19769C20[] = {
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN9S19769C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C159S19769C14__9S19769C20[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C159S19769C14__9S19769C20[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2496),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C159S19769C14__9S19769C20[] = {
  0,
  ABISELECT(-5024,-2752),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev)();
extern void ABISELECT(_ZThn5408_N9S19769C15D1Ev,_ZThn2956_N9S19769C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev)();
extern void ABISELECT(_ZThn5408_N9S19769C15D0Ev,_ZThn2956_N9S19769C15D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C159S19769C14__9S19769C20[] = {
  0,
  ABISELECT(-5408,-2956),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2956),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C169S19769C14__9S19769C20[] = {
  ABISELECT(696,408),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C169S19769C14__9S19769C20[] = {
  0,
  ABISELECT(-696,-408),
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C14__9S19769C20[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C14__9S19769C20[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2496),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C14__9S19769C20[] = {
  0,
  ABISELECT(-5024,-2752),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev)();
extern void ABISELECT(_ZThn5408_N9S19769C14D1Ev,_ZThn2956_N9S19769C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev)();
extern void ABISELECT(_ZThn5408_N9S19769C14D0Ev,_ZThn2956_N9S19769C14D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C14__9S19769C20[] = {
  0,
  ABISELECT(-5408,-2956),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2956),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C16__9S19769C14__9S19769C20[] = {
  ABISELECT(696,408),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C20[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C13__9S19769C20[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C13__9S19769C20[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C20[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__9S19769C20[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C20[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12__9S19769C20[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12__9S19769C20[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C12__9S19769C20[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN9S19769C15D1Ev();
extern void _ZN9S19769C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C15__A1__9S19769C20[] = {
  ABISELECT(-480,-268),
  ABISELECT(-496,-276),
  ABISELECT(-864,-472),
  ABISELECT(-1328,-728),
  ABISELECT(-1424,-784),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN9S19769C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C15__A1__9S19769C20[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(1424,784),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C15__A1__9S19769C20[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(1328,728),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C15__A1__9S19769C20[] = {
  0,
  ABISELECT(864,472),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev)();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C15__A1__9S19769C20[] = {
  0,
  ABISELECT(480,268),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(480,268),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTT_ENTRY vtt_S19769C20[] = {
  {&(_ZTV9S19769C20[9]),  9,68},
  {&(_tg__ZTV9S19769C12__A__9S19769C20[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C12__A__9S19769C20[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C12__A__9S19769C20[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C12__A__9S19769C20[3]),  3,4},
  {&(_ZTV9S19769C20[22]),  22,68},
  {&(_ZTV9S19769C20[33]),  33,68},
  {&(_ZTV9S19769C20[39]),  39,68},
  {&(_ZTV9S19769C20[44]),  44,68},
  {&(_ZTV9S19769C20[54]),  54,68},
  {&(_ZTV9S19769C20[28]),  28,68},
  {&(_ZTV9S19769C20[66]),  66,68},
  {&(_tg__ZTV9S19769C14__9S19769C20[7]),  7,10},
  {&(_tg__ZTV9S19769C159S19769C14__9S19769C20[7]),  7,9},
  {&(_tg__ZTV9S19769C13__9S19769C159S19769C14__9S19769C20[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C159S19769C14__9S19769C20[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C159S19769C14__9S19769C20[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C159S19769C14__9S19769C20[9]),  9,13},
  {&(_tg__ZTV9S19769C169S19769C14__9S19769C20[3]),  3,3},
  {&(_tg__ZTV8S19769C3__9S19769C169S19769C14__9S19769C20[3]),  3,4},
  {&(_tg__ZTV9S19769C13__9S19769C14__9S19769C20[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C14__9S19769C20[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C14__9S19769C20[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C14__9S19769C20[9]),  9,13},
  {&(_tg__ZTV9S19769C16__9S19769C14__9S19769C20[3]),  3,3},
  {&(_tg__ZTV9S19769C13__9S19769C20[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C13__9S19769C20[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C13__9S19769C20[3]),  3,4},
  {&(_tg__ZTV8S19769C9__9S19769C20[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__9S19769C20[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C20[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C12__9S19769C20[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C12__9S19769C20[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C12__9S19769C20[3]),  3,4},
  {&(_tg__ZTV9S19769C15__A1__9S19769C20[7]),  7,9},
  {&(_tg__ZTV9S19769C13__9S19769C15__A1__9S19769C20[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C15__A1__9S19769C20[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C15__A1__9S19769C20[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C15__A1__9S19769C20[9]),  9,13},
};
extern VTBL_ENTRY _ZTI9S19769C20[];
extern  VTBL_ENTRY _ZTV9S19769C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C20[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19769C14D0Ev,_ZThn2956_N9S19769C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19769C14D1Ev,_ZThn2956_N9S19769C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19769C15D0Ev,_ZThn2956_N9S19769C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S19769C15D1Ev,_ZThn2956_N9S19769C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N9S19769C20D0Ev,_ZThn3720_N9S19769C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N9S19769C20D0Ev,_ZThn3452_N9S19769C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn912_N9S19769C20D0Ev,_ZThn496_N9S19769C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N9S19769C20D1Ev,_ZThn3720_N9S19769C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N9S19769C20D1Ev,_ZThn3452_N9S19769C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn912_N9S19769C20D1Ev,_ZThn496_N9S19769C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19769C20 = {  "S19769C20", // class name
  bases_S19769C20, 15,
  &(vtc_S19769C20[0]), // expected_vtbl_contents
  &(vtt_S19769C20[0]), // expected_vtt_contents
  ABISELECT(11136,6064), // object size
  NSPAIRA(_ZTI9S19769C20),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19769C20),68, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19769C20),39, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19769C1  : virtual S281C37_nt , virtual S19769C3 , virtual S19769C6 , S19769C20 , virtual S6040C23 {
  int s19769c1f0;
  void *s19769c1f1[4];
  long double s19769c1f2[2];
  int s19769c1f3;
  void *s19769c1f4;
  int s19769c1f5;
  void *s19769c1f6;
  virtual  ~S19769C1(); // _ZN8S19769C1D2Ev
  virtual void  v1(); // _ZN8S19769C12v1Ev
  S19769C1(); // tgen
};
//SIG(1 S19769C1) C1{ VBC2{ m Fp[2]} VBC3{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC2 FC2[9] Fp FC5{ v3 Fi Fp FC2} FC5} VBC6{ VBC7{ BC8{ VBC5 VBC2 BC9{ BC5 VBC3 VBC2 v4 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} BC3 vd v5 Fi:25 Fp Fi[3] FC2} VBC9 VBC10{ VBC11{ VBC3 VBC12{ VBC13{ VBC9 Fi Fc Fp[6] Fi[2] Fp FC2} BC3 BC2 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v7 v8 FC12[7] Fi Fs Fi FC9 FL[9]} vd Fc Fi[3]} vd v9 v10 FD[2] FC4 Fi:16 Fi:3} VBC14{ BC15{ VBC13 VBC12 vd Fl Fp FC9 Fp Fs FL Fi FL FC9[4] Fi} BC16{ VBC3 Fp Fs FL Fi:6 Fp[2]} vd v11 FL FD FC4 Fi[9] Fs Fc:5} VBC17{ BC12 vd Fi FC4 Fp Fi Fc[8] Fs Fi} BC18{ BC12 BC14 VBC19{ m FL FC2[8] Fi Fp[2]} Fi Fp Fs Fp[2] Fc[8]} vd v12 FC9[10] Fi[9] FC4 Fi Fp FD[4] Fc[5] FC19 FL} BC20{ VBC14 BC12 VBC15 vd FC16} VBC21{ m Fi Fp[10] Fc FC22{ VBC23{ v15 Fi[6] Fc:2 FD Fp[2] Fi FD FC4 FC2 FC2[9] Fp FC24{ v16 Fi Fp FC2} FC24} VBC25{ VBC26{ VBC27{ BC24 VBC23 VBC2 v17 Fp FL Fc[2] FC23 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC2} BC23 BC2 vd v18 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v13 v14 FC25[7] Fi Fs Fi FC27 FL[9]} Fs:12 FC28{ VBC24 VBC2 BC27 BC23 vd v19 Fi:25 Fp Fi[3] FC2}} vd v1 Fi Fp[4] FD[2] Fi Fp Fi Fp}


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

static void Test_S19769C1()
{
  extern Class_Descriptor cd_S19769C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3213,7051)];
    init_test(&cd_S19769C1, buf);
    S19769C1 *dp, &lv = *(dp=new (buf) S19769C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(51392,28200), "sizeof(S19769C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19769C1)");
    /*is_ambiguous_... S19769C1::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(1024,556), "S19769C1");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C8*)(S19769C7*), ABISELECT(1024,556), "S19769C1");
    check_base_class_offset(lv, (S281C37_nt*)(S19769C9*)(S19769C8*)(S19769C7*), ABISELECT(1024,556), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C9 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C9*), ABISELECT(1024,556), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*), ABISELECT(1040,564), "S19769C1");
    check_base_class_offset(lv, (S19769C3*)(S19769C9*)(S19769C8*)(S19769C7*), ABISELECT(1040,564), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C9 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C9*), ABISELECT(1040,564), "S19769C1");
    /*is_ambiguous_... S19769C11::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C11*), ABISELECT(1040,564), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C14 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C16*)(S19769C14*), ABISELECT(1040,564), "S19769C1");
    check_base_class_offset(lv, (S19769C3*)(S19769C16*)(S19769C14*)(S19769C18*)(S19769C6*), ABISELECT(1040,564), "S19769C1");
    /*is_ambiguous_... S19769C8::S19769C5 */ AMB_check_base_class_offset(lv, (S19769C5*)(S19769C8*)(S19769C7*), ABISELECT(16104,8800), "S19769C1");
    check_base_class_offset(lv, (S19769C5*)(S19769C9*)(S19769C8*)(S19769C7*), ABISELECT(15184,8292), "S19769C1");
    check_base_class_offset(lv, (S19769C9*)(S19769C8*)(S19769C7*), ABISELECT(15184,8292), "S19769C1");
    /*is_ambiguous_... S19769C8::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C8*)(S19769C7*), ABISELECT(15648,8548), "S19769C1");
    check_base_class_offset(lv, (S19769C8*)(S19769C7*), ABISELECT(15184,8292), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C9 */ AMB_check_base_class_offset(lv, (S19769C5*)(S19769C9*), ABISELECT(16144,8820), "S19769C1");
    /*is_ambiguous_... S19769C7::S19769C9 */ AMB_check_base_class_offset(lv, (S19769C9*)(S19769C7*), ABISELECT(16144,8820), "S19769C1");
    check_base_class_offset(lv, (S19769C9*)(S19769C13*), ABISELECT(16144,8820), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C12*), ABISELECT(28032,15400), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C14 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C15*)(S19769C14*), ABISELECT(28032,15400), "S19769C1");
    check_base_class_offset(lv, (S19769C13*)(S19769C12*)(S19769C17*), ABISELECT(28032,15400), "S19769C1");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C12*)(S19769C18*)(S19769C6*), ABISELECT(28032,15400), "S19769C1");
    check_base_class_offset(lv, (S19769C13*)(S19769C15*)(S19769C14*)(S19769C18*)(S19769C6*), ABISELECT(28032,15400), "S19769C1");
    /*is_ambiguous_... S19769C20::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C12*)(S19769C20*), ABISELECT(28032,15400), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C15 */ AMB_check_base_class_offset(lv, (S19769C13*)(S19769C15*), ABISELECT(28032,15400), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*), ABISELECT(27552,15132), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*), ABISELECT(27920,15328), "S19769C1");
    check_base_class_offset(lv, (S19769C12*)(S19769C11*), ABISELECT(27552,15132), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C14 */ AMB_check_base_class_offset(lv, (S19769C12*)(S19769C15*)(S19769C14*), ABISELECT(27552,15132), "S19769C1");
    check_base_class_offset(lv, (S19769C12*)(S19769C15*)(S19769C14*)(S19769C18*)(S19769C6*), ABISELECT(27552,15132), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C15 */ AMB_check_base_class_offset(lv, (S19769C12*)(S19769C15*), ABISELECT(27552,15132), "S19769C1");
    check_base_class_offset(lv, (S19769C11*)(S19769C10*), ABISELECT(16624,9096), "S19769C1");
    check_base_class_offset(lv, (S19769C10*)(S19769C7*), ABISELECT(16600,9076), "S19769C1");
    check_base_class_offset(lv, (S19769C7*)(S19769C6*), ABISELECT(15184,8292), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C14 */ AMB_check_base_class_offset(lv, (S19769C15*)(S19769C14*), ABISELECT(28128,15456), "S19769C1");
    /*is_ambiguous_... S19769C1::S19769C14 */ AMB_check_base_class_offset(lv, (S19769C16*)(S19769C14*), ABISELECT(32456,17800), "S19769C1");
    /*is_ambiguous_... S19769C6::S19769C14 */ AMB_check_base_class_offset(lv, (S19769C14*)(S19769C6*), ABISELECT(28128,15456), "S19769C1");
    check_base_class_offset(lv, (S19769C14*)(S19769C20*), ABISELECT(28128,15456), "S19769C1");
    /*is_ambiguous_... S19769C12::S19769C3 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*)(S19769C17*), ABISELECT(32592,17896), "S19769C1");
    /*is_ambiguous_... S19769C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*)(S19769C17*), ABISELECT(32960,18092), "S19769C1");
    check_base_class_offset(lv, (S19769C12*)(S19769C17*), ABISELECT(32592,17896), "S19769C1");
    check_base_class_offset(lv, (S19769C17*)(S19769C6*), ABISELECT(32592,17896), "S19769C1");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*)(S19769C18*)(S19769C6*), ABISELECT(1408,760), "S19769C1");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*)(S19769C18*)(S19769C6*), ABISELECT(1776,956), "S19769C1");
    /*is_ambiguous_... S19769C18::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C12*)(S19769C18*)(S19769C6*), ABISELECT(1408,760), "S19769C1");
    check_base_class_offset(lv, (S19769C15*)(S19769C14*)(S19769C18*)(S19769C6*), ABISELECT(1888,1028), "S19769C1");
    check_base_class_offset(lv, (S19769C16*)(S19769C14*)(S19769C18*)(S19769C6*), ABISELECT(6216,3372), "S19769C1");
    check_base_class_offset(lv, (S19769C14*)(S19769C18*)(S19769C6*), ABISELECT(1888,1028), "S19769C1");
    check_base_class_offset(lv, (S20176C15*)(S19769C18*)(S19769C6*), ABISELECT(33112,18196), "S19769C1");
    check_base_class_offset(lv, (S19769C18*)(S19769C6*), ABISELECT(1408,760), "S19769C1");
    check_base_class_offset(lv, (S19769C6*), ABISELECT(1408,760), "S19769C1");
    /*is_ambiguous_... S19769C20::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C3*)(S19769C12*)(S19769C20*), 0, "S19769C1");
    /*is_ambiguous_... S19769C20::S19769C12 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S19769C12*)(S19769C20*), ABISELECT(368,196), "S19769C1");
    /*is_ambiguous_... S19769C20::S19769C12 */ AMB_check_base_class_offset(lv, (S19769C12*)(S19769C20*), 0, "S19769C1");
    /*is_ambiguous_... S19769C20::S19769C15 */ AMB_check_base_class_offset(lv, (S19769C15*)(S19769C20*), ABISELECT(33280,18280), "S19769C1");
    check_base_class_offset(lv, (S19769C20*), 0, "S19769C1");
    check_base_class_offset(lv, (S6040C23*), ABISELECT(37616,20624), "S19769C1");
    check_field_offset(lv, s19769c1f0, ABISELECT(912,496), "S19769C1.s19769c1f0");
    check_field_offset(lv, s19769c1f1, ABISELECT(920,500), "S19769C1.s19769c1f1");
    check_field_offset(lv, s19769c1f2, ABISELECT(960,516), "S19769C1.s19769c1f2");
    check_field_offset(lv, s19769c1f3, ABISELECT(992,540), "S19769C1.s19769c1f3");
    check_field_offset(lv, s19769c1f4, ABISELECT(1000,544), "S19769C1.s19769c1f4");
    check_field_offset(lv, s19769c1f5, ABISELECT(1008,548), "S19769C1.s19769c1f5");
    check_field_offset(lv, s19769c1f6, ABISELECT(1016,552), "S19769C1.s19769c1f6");
    test_class_info(&lv, &cd_S19769C1);
    dp->~S19769C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19769C1(Test_S19769C1, "S19769C1", ABISELECT(51392,28200));

#else // __cplusplus

extern void _ZN8S19769C1C1Ev();
extern void _ZN8S19769C1D2Ev();
Name_Map name_map_S19769C1[] = {
  NSPAIR(_ZN8S19769C1C1Ev),
  NSPAIR(_ZN8S19769C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S19769C8;
extern VTBL_ENTRY _ZTI8S19769C8[];
extern  VTBL_ENTRY _ZTV8S19769C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C8[];
extern Class_Descriptor cd_S19769C5;
extern VTBL_ENTRY _ZTI8S19769C5[];
extern  VTBL_ENTRY _ZTV8S19769C5[];
extern Class_Descriptor cd_S19769C9;
extern VTBL_ENTRY _ZTI8S19769C9[];
extern  VTBL_ENTRY _ZTV8S19769C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C9[];
extern Class_Descriptor cd_S19769C13;
extern VTBL_ENTRY _ZTI9S19769C13[];
extern  VTBL_ENTRY _ZTV9S19769C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C13[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C11;
extern VTBL_ENTRY _ZTI9S19769C11[];
extern  VTBL_ENTRY _ZTV9S19769C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C11[];
extern Class_Descriptor cd_S19769C10;
extern VTBL_ENTRY _ZTI9S19769C10[];
extern  VTBL_ENTRY _ZTV9S19769C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C10[];
extern Class_Descriptor cd_S19769C7;
extern VTBL_ENTRY _ZTI8S19769C7[];
extern  VTBL_ENTRY _ZTV8S19769C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C7[];
extern Class_Descriptor cd_S19769C15;
extern VTBL_ENTRY _ZTI9S19769C15[];
extern  VTBL_ENTRY _ZTV9S19769C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C15[];
extern Class_Descriptor cd_S19769C16;
extern VTBL_ENTRY _ZTI9S19769C16[];
extern  VTBL_ENTRY _ZTV9S19769C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C16[];
extern Class_Descriptor cd_S19769C14;
extern VTBL_ENTRY _ZTI9S19769C14[];
extern  VTBL_ENTRY _ZTV9S19769C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C14[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C17;
extern VTBL_ENTRY _ZTI9S19769C17[];
extern  VTBL_ENTRY _ZTV9S19769C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C17[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C15;
extern VTBL_ENTRY _ZTI9S19769C15[];
extern  VTBL_ENTRY _ZTV9S19769C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C15[];
extern Class_Descriptor cd_S19769C16;
extern VTBL_ENTRY _ZTI9S19769C16[];
extern  VTBL_ENTRY _ZTV9S19769C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C16[];
extern Class_Descriptor cd_S19769C14;
extern VTBL_ENTRY _ZTI9S19769C14[];
extern  VTBL_ENTRY _ZTV9S19769C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C14[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
extern Class_Descriptor cd_S19769C18;
extern VTBL_ENTRY _ZTI9S19769C18[];
extern  VTBL_ENTRY _ZTV9S19769C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C18[];
extern Class_Descriptor cd_S19769C6;
extern VTBL_ENTRY _ZTI8S19769C6[];
extern  VTBL_ENTRY _ZTV8S19769C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C6[];
extern Class_Descriptor cd_S19769C3;
extern VTBL_ENTRY _ZTI8S19769C3[];
extern  VTBL_ENTRY _ZTV8S19769C3[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S19769C12;
extern VTBL_ENTRY _ZTI9S19769C12[];
extern  VTBL_ENTRY _ZTV9S19769C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C12[];
extern Class_Descriptor cd_S19769C15;
extern VTBL_ENTRY _ZTI9S19769C15[];
extern  VTBL_ENTRY _ZTV9S19769C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C15[];
extern Class_Descriptor cd_S19769C20;
extern VTBL_ENTRY _ZTI9S19769C20[];
extern  VTBL_ENTRY _ZTV9S19769C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19769C20[];
extern Class_Descriptor cd_S6040C23;
extern VTBL_ENTRY _ZTI8S6040C23[];
static Base_Class bases_S19769C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S281C37_nt,    ABISELECT(1024,556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19769C3,    ABISELECT(1040,564), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19769C5,    ABISELECT(16104,8800), //bcp->offset
    90, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19769C5,    ABISELECT(15184,8292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19769C9,    ABISELECT(15184,8292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19769C3,    ABISELECT(15648,8548), //bcp->offset
    87, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19769C8,    ABISELECT(15184,8292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19769C5,    ABISELECT(16144,8820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19769C9,    ABISELECT(16144,8820), //bcp->offset
    94, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19769C13,    ABISELECT(28032,15400), //bcp->offset
    140, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    99, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19769C3,    ABISELECT(27552,15132), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(27920,15328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    ABISELECT(27552,15132), //bcp->offset
    127, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    95, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19769C11,    ABISELECT(16624,9096), //bcp->offset
    113, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19769C10,    ABISELECT(16600,9076), //bcp->offset
    102, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19769C7,    ABISELECT(15184,8292), //bcp->offset
    63, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S19769C15,    ABISELECT(28128,15456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19769C16,    ABISELECT(32456,17800), //bcp->offset
    157, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19769C14,    ABISELECT(28128,15456), //bcp->offset
    145, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S19769C3,    ABISELECT(32592,17896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(32960,18092), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19769C12,    ABISELECT(32592,17896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19769C17,    ABISELECT(32592,17896), //bcp->offset
    160, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S19769C3,    ABISELECT(1408,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(1776,956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19769C12,    ABISELECT(1408,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19769C15,    ABISELECT(1888,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19769C16,    ABISELECT(6216,3372), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19769C14,    ABISELECT(1888,1028), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20176C15,    ABISELECT(33112,18196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S19769C18,    ABISELECT(1408,760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19769C6,    ABISELECT(1408,760), //bcp->offset
    26, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19769C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19769C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19769C15,    ABISELECT(33280,18280), //bcp->offset
    173, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S19769C20,    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
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6040C23,    ABISELECT(37616,20624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19769C1[];
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C1D1Ev();
extern void _ZN8S19769C1D0Ev();
extern void _ZN9S19769C122v6Ev();
extern void _ZN8S19769C12v1Ev();
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n128_N8S19769C1D1Ev,_ZTv0_n64_N8S19769C1D1Ev)();
extern void ABISELECT(_ZThn1408_N8S19769C1D1Ev,_ZThn760_N8S19769C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n128_N8S19769C1D0Ev,_ZTv0_n64_N8S19769C1D0Ev)();
extern void ABISELECT(_ZThn1408_N8S19769C1D0Ev,_ZThn760_N8S19769C1D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
extern void _ZN8S19769C63v12Ev();
extern void ABISELECT(_ZTvn480_n128_N8S19769C1D1Ev,_ZTvn268_n64_N8S19769C1D1Ev)();
extern void ABISELECT(_ZTvn480_n128_N8S19769C1D0Ev,_ZTvn268_n64_N8S19769C1D0Ev)();
extern void _ZN9S19769C143v11Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void ABISELECT(_ZTv0_n104_N8S19769C1D1Ev,_ZTv0_n52_N8S19769C1D1Ev)();
extern void ABISELECT(_ZThn15184_N8S19769C1D1Ev,_ZThn8292_N8S19769C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19769C1D0Ev,_ZTv0_n52_N8S19769C1D0Ev)();
extern void ABISELECT(_ZThn15184_N8S19769C1D0Ev,_ZThn8292_N8S19769C1D0Ev)() __attribute__((weak));
extern void _ZN8S19769C82v5Ev();
extern void _ZN8S19769C72v9Ev();
extern void _ZN8S19769C73v10Ev();
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S19769C1D1Ev,_ZTv0_n36_N8S19769C1D1Ev)();
extern void ABISELECT(_ZThn16600_N8S19769C1D1Ev,_ZThn9076_N8S19769C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19769C1D0Ev,_ZTv0_n36_N8S19769C1D0Ev)();
extern void ABISELECT(_ZThn16600_N8S19769C1D0Ev,_ZThn9076_N8S19769C1D0Ev)() __attribute__((weak));
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19769C1D1Ev,_ZTv0_n40_N8S19769C1D1Ev)();
extern void ABISELECT(_ZThn16624_N8S19769C1D1Ev,_ZThn9096_N8S19769C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19769C1D0Ev,_ZTv0_n40_N8S19769C1D0Ev)();
extern void ABISELECT(_ZThn16624_N8S19769C1D0Ev,_ZThn9096_N8S19769C1D0Ev)() __attribute__((weak));
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19769C1D1Ev,_ZTv0_n32_N8S19769C1D1Ev)();
extern void ABISELECT(_ZThn27552_N8S19769C1D1Ev,_ZThn15132_N8S19769C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C1D0Ev,_ZTv0_n32_N8S19769C1D0Ev)();
extern void ABISELECT(_ZThn27552_N8S19769C1D0Ev,_ZThn15132_N8S19769C1D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S19769C1D1Ev,_ZTv0_n32_N8S19769C1D1Ev)();
extern void ABISELECT(_ZThn28128_N8S19769C1D1Ev,_ZThn15456_N8S19769C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C1D0Ev,_ZTv0_n32_N8S19769C1D0Ev)();
extern void ABISELECT(_ZThn28128_N8S19769C1D0Ev,_ZThn15456_N8S19769C1D0Ev)() __attribute__((weak));
extern void _ZN9S19769C143v11Ev();
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19769C1D1Ev,_ZTv0_n32_N8S19769C1D1Ev)();
extern void ABISELECT(_ZThn32592_N8S19769C1D1Ev,_ZThn17896_N8S19769C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C1D0Ev,_ZTv0_n32_N8S19769C1D0Ev)();
extern void ABISELECT(_ZThn32592_N8S19769C1D0Ev,_ZThn17896_N8S19769C1D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S19769C1D1Ev,_ZTv0_n32_N8S19769C1D1Ev)();
extern void ABISELECT(_ZThn33280_N8S19769C1D1Ev,_ZThn18280_N8S19769C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C1D0Ev,_ZTv0_n32_N8S19769C1D0Ev)();
extern void ABISELECT(_ZThn33280_N8S19769C1D0Ev,_ZThn18280_N8S19769C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19769C1[] = {
  ABISELECT(37616,20624),
  ABISELECT(33112,18196),
  ABISELECT(32592,17896),
  ABISELECT(16624,9096),
  ABISELECT(16600,9076),
  ABISELECT(16104,8800),
  ABISELECT(15184,8292),
  ABISELECT(1408,760),
  ABISELECT(33280,18280),
  ABISELECT(27552,15132),
  ABISELECT(28128,15456),
  ABISELECT(1024,556),
  ABISELECT(1040,564),
  ABISELECT(16144,8820),
  ABISELECT(28032,15400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19769C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19769C1D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  (VTBL_ENTRY)&_ZN8S19769C12v1Ev,
  0,
  ABISELECT(-1040,-564),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  ABISELECT(480,268),
  0,
  ABISELECT(-1408,-760),
  0,
  ABISELECT(31184,17136),
  ABISELECT(26720,14696),
  ABISELECT(15216,8336),
  ABISELECT(15192,8316),
  ABISELECT(14696,8040),
  ABISELECT(13776,7532),
  ABISELECT(31704,17436),
  ABISELECT(26144,14372),
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(14736,8060),
  ABISELECT(26624,14640),
  ABISELECT(-1408,-760),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S19769C1D1Ev,_ZTv0_n64_N8S19769C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n128_N8S19769C1D0Ev,_ZTv0_n64_N8S19769C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  (VTBL_ENTRY)&_ZN8S19769C63v12Ev,
  ABISELECT(25664,14104),
  ABISELECT(-864,-472),
  ABISELECT(-848,-464),
  ABISELECT(14256,7792),
  ABISELECT(26144,14372),
  ABISELECT(-1888,-1028),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n128_N8S19769C1D1Ev,_ZTvn268_n64_N8S19769C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n128_N8S19769C1D0Ev,_ZTvn268_n64_N8S19769C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
  ABISELECT(-5176,-2808),
  ABISELECT(-6216,-3372),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  0,
  0,
  ABISELECT(464,256),
  0,
  ABISELECT(-15184,-8292),
  0,
  0,
  ABISELECT(12848,7108),
  ABISELECT(12368,6840),
  ABISELECT(1440,804),
  ABISELECT(1416,784),
  ABISELECT(960,528),
  ABISELECT(920,508),
  ABISELECT(-14160,-7736),
  ABISELECT(-14144,-7728),
  ABISELECT(-15184,-8292),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19769C1D1Ev,_ZTv0_n52_N8S19769C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19769C1D0Ev,_ZTv0_n52_N8S19769C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19769C82v5Ev,
  (VTBL_ENTRY)&_ZN8S19769C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19769C73v10Ev,
  ABISELECT(-15648,-8548),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  0,
  ABISELECT(-16104,-8800),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(-16144,-8820),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  ABISELECT(-16600,-9076),
  ABISELECT(-15576,-8520),
  ABISELECT(-456,-256),
  ABISELECT(11432,6324),
  ABISELECT(10952,6056),
  ABISELECT(-15560,-8512),
  ABISELECT(24,20),
  ABISELECT(-16600,-9076),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19769C1D1Ev,_ZTv0_n36_N8S19769C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19769C1D0Ev,_ZTv0_n36_N8S19769C1D0Ev),
  ABISELECT(-16624,-9096),
  0,
  0,
  ABISELECT(-15600,-8540),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-15584,-8532),
  ABISELECT(-16624,-9096),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19769C1D1Ev,_ZTv0_n40_N8S19769C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19769C1D0Ev,_ZTv0_n40_N8S19769C1D0Ev),
  0,
  ABISELECT(-27552,-15132),
  0,
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-27552,-15132),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C1D1Ev,_ZTv0_n32_N8S19769C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C1D0Ev,_ZTv0_n32_N8S19769C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(-28032,-15400),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  0,
  ABISELECT(-28128,-15456),
  ABISELECT(-576,-324),
  ABISELECT(-27104,-14900),
  ABISELECT(-27088,-14892),
  ABISELECT(-11984,-6636),
  ABISELECT(-96,-56),
  ABISELECT(-28128,-15456),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C1D1Ev,_ZTv0_n32_N8S19769C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C1D0Ev,_ZTv0_n32_N8S19769C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
  ABISELECT(-31416,-17236),
  ABISELECT(-32456,-17800),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  0,
  ABISELECT(-32592,-17896),
  0,
  ABISELECT(-31568,-17340),
  ABISELECT(-31552,-17332),
  ABISELECT(-16448,-9076),
  ABISELECT(-4560,-2496),
  ABISELECT(-32592,-17896),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C1D1Ev,_ZTv0_n32_N8S19769C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C1D0Ev,_ZTv0_n32_N8S19769C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  ABISELECT(-33280,-18280),
  ABISELECT(-5728,-3148),
  ABISELECT(-32256,-17724),
  ABISELECT(-32240,-17716),
  ABISELECT(-17136,-9460),
  ABISELECT(-5248,-2880),
  ABISELECT(-33280,-18280),
  (VTBL_ENTRY)&(_ZTI8S19769C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C1D1Ev,_ZTv0_n32_N8S19769C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C1D0Ev,_ZTv0_n32_N8S19769C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19769C1[];
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C20D1Ev();
extern void _ZN9S19769C20D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C20__8S19769C1[] = {
  ABISELECT(33280,18280),
  ABISELECT(27552,15132),
  ABISELECT(28128,15456),
  ABISELECT(1024,556),
  ABISELECT(1040,564),
  ABISELECT(16144,8820),
  ABISELECT(28032,15400),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C20D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C129S19769C20__A3__8S19769C1[] = {
  ABISELECT(1024,556),
  ABISELECT(1040,564),
  ABISELECT(16144,8820),
  ABISELECT(28032,15400),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C129S19769C20__A3__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(-28032,-15400),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C129S19769C20__A3__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(-16144,-8820),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C129S19769C20__A3__8S19769C1[] = {
  0,
  ABISELECT(-1040,-564),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev)();
extern void ABISELECT(_ZThn28128_N9S19769C20D1Ev,_ZThn15456_N9S19769C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev)();
extern void ABISELECT(_ZThn28128_N9S19769C20D0Ev,_ZThn15456_N9S19769C20D0Ev)() __attribute__((weak));
extern void _ZN9S19769C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C14__9S19769C20__8S19769C1[] = {
  0,
  ABISELECT(-28128,-15456),
  ABISELECT(-576,-324),
  ABISELECT(-27104,-14900),
  ABISELECT(-27088,-14892),
  ABISELECT(-11984,-6636),
  ABISELECT(-96,-56),
  ABISELECT(-28128,-15456),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C20__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(-28032,-15400),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C20__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(-16144,-8820),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C20__8S19769C1[] = {
  0,
  ABISELECT(-1040,-564),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev)();
extern void ABISELECT(_ZThn27552_N9S19769C20D1Ev,_ZThn15132_N9S19769C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev)();
extern void ABISELECT(_ZThn27552_N9S19769C20D0Ev,_ZThn15132_N9S19769C20D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C20__8S19769C1[] = {
  0,
  ABISELECT(-27552,-15132),
  0,
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-27552,-15132),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C169S19769C14__9S19769C20__8S19769C1[] = {
  ABISELECT(-31416,-17236),
  ABISELECT(-32456,-17800),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
};
extern void ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev)();
extern void ABISELECT(_ZThn33280_N9S19769C20D1Ev,_ZThn18280_N9S19769C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev)();
extern void ABISELECT(_ZThn33280_N9S19769C20D0Ev,_ZThn18280_N9S19769C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19769C15__A1__9S19769C20__8S19769C1[] = {
  ABISELECT(-33280,-18280),
  ABISELECT(-5728,-3148),
  ABISELECT(-32256,-17724),
  ABISELECT(-32240,-17716),
  ABISELECT(-17136,-9460),
  ABISELECT(-5248,-2880),
  ABISELECT(-33280,-18280),
  (VTBL_ENTRY)&(_ZTI9S19769C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev),
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN8S19769C6D1Ev();
extern void _ZN8S19769C6D0Ev();
extern void _ZN9S19769C122v6Ev();
extern void _ZN8S19769C63v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C6__8S19769C1[] = {
  ABISELECT(31184,17136),
  ABISELECT(26720,14696),
  ABISELECT(15216,8336),
  ABISELECT(15192,8316),
  ABISELECT(14696,8040),
  ABISELECT(13776,7532),
  ABISELECT(31704,17436),
  ABISELECT(26144,14372),
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(14736,8060),
  ABISELECT(26624,14640),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19769C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19769C6D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
  (VTBL_ENTRY)&_ZN8S19769C63v12Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C18D1Ev();
extern void _ZN9S19769C18D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C188S19769C6__8S19769C1[] = {
  ABISELECT(31704,17436),
  ABISELECT(26144,14372),
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(14736,8060),
  ABISELECT(26624,14640),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C18D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C129S19769C188S19769C6__A2__8S19769C1[] = {
  ABISELECT(-384,-204),
  ABISELECT(-368,-196),
  ABISELECT(14736,8060),
  ABISELECT(26624,14640),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C129S19769C188S19769C6__A2__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(-26624,-14640),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C129S19769C188S19769C6__A2__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(-14736,-8060),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C129S19769C188S19769C6__A2__8S19769C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN9S19769C14D1Ev();
extern void _ZN9S19769C14D0Ev();
extern void _ZN9S19769C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  ABISELECT(25664,14104),
  ABISELECT(-864,-472),
  ABISELECT(-848,-464),
  ABISELECT(14256,7792),
  ABISELECT(26144,14372),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN9S19769C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
};
extern void _ZN9S19769C15D1Ev();
extern void _ZN9S19769C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C159S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  ABISELECT(25664,14104),
  ABISELECT(-864,-472),
  ABISELECT(-848,-464),
  ABISELECT(14256,7792),
  ABISELECT(26144,14372),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN9S19769C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C159S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(-26144,-14372),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C159S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(-14256,-7792),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C159S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev)();
extern void ABISELECT(_ZThn25664_N9S19769C15D1Ev,_ZThn14104_N9S19769C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev)();
extern void ABISELECT(_ZThn25664_N9S19769C15D0Ev,_ZThn14104_N9S19769C15D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C159S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  0,
  ABISELECT(-25664,-14104),
  0,
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-25664,-14104),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C169S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  ABISELECT(-5176,-2808),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C169S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  0,
  ABISELECT(5176,2808),
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(-26144,-14372),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(-14256,-7792),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev)();
extern void ABISELECT(_ZThn25664_N9S19769C14D1Ev,_ZThn14104_N9S19769C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev)();
extern void ABISELECT(_ZThn25664_N9S19769C14D0Ev,_ZThn14104_N9S19769C14D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  0,
  ABISELECT(-25664,-14104),
  0,
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-25664,-14104),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C16__9S19769C149S19769C188S19769C6__A1__8S19769C1[] = {
  ABISELECT(-5176,-2808),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C188S19769C6__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(-26624,-14640),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C188S19769C6__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(-14736,-8060),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C188S19769C6__8S19769C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void ABISELECT(_ZThn480_N9S19769C18D1Ev,_ZThn268_N9S19769C18D1Ev)();
extern void ABISELECT(_ZThn480_N9S19769C18D0Ev,_ZThn268_N9S19769C18D0Ev)();
extern void _ZN9S19769C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C14__9S19769C188S19769C6__8S19769C1[] = {
  ABISELECT(25664,14104),
  ABISELECT(-864,-472),
  ABISELECT(-848,-464),
  ABISELECT(14256,7792),
  ABISELECT(26144,14372),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S19769C18D1Ev,_ZThn268_N9S19769C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N9S19769C18D0Ev,_ZThn268_N9S19769C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C18D1Ev,_ZTv0_n32_N9S19769C18D1Ev)();
extern void ABISELECT(_ZThn26144_N9S19769C18D1Ev,_ZThn14372_N9S19769C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C18D0Ev,_ZTv0_n32_N9S19769C18D0Ev)();
extern void ABISELECT(_ZThn26144_N9S19769C18D0Ev,_ZThn14372_N9S19769C18D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__A1__9S19769C188S19769C6__8S19769C1[] = {
  0,
  ABISELECT(-26144,-14372),
  0,
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-26144,-14372),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C18D1Ev,_ZTv0_n32_N9S19769C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C18D0Ev,_ZTv0_n32_N9S19769C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C169S19769C14__9S19769C188S19769C6__8S19769C1[] = {
  ABISELECT(-5176,-2808),
  ABISELECT(-4808,-2612),
  (VTBL_ENTRY)&(_ZTI9S19769C18[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void ABISELECT(_ZTv0_n104_N8S19769C6D1Ev,_ZTv0_n52_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn13776_N8S19769C6D1Ev,_ZThn7532_N8S19769C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19769C6D0Ev,_ZTv0_n52_N8S19769C6D0Ev)();
extern void ABISELECT(_ZThn13776_N8S19769C6D0Ev,_ZThn7532_N8S19769C6D0Ev)() __attribute__((weak));
extern void _ZN8S19769C82v5Ev();
extern void _ZN8S19769C72v9Ev();
extern void _ZN8S19769C73v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C7__8S19769C6__8S19769C1[] = {
  0,
  0,
  ABISELECT(464,256),
  0,
  ABISELECT(-13776,-7532),
  0,
  0,
  ABISELECT(12848,7108),
  ABISELECT(12368,6840),
  ABISELECT(1440,804),
  ABISELECT(1416,784),
  ABISELECT(960,528),
  ABISELECT(920,508),
  ABISELECT(-14160,-7736),
  ABISELECT(-14144,-7728),
  ABISELECT(-13776,-7532),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19769C6D1Ev,_ZTv0_n52_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19769C6D0Ev,_ZTv0_n52_N8S19769C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19769C82v5Ev,
  (VTBL_ENTRY)&_ZN8S19769C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19769C73v10Ev,
};
extern void _ZN8S19769C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C5__8S19769C6__8S19769C1[] = {
  0,
  ABISELECT(-14696,-8040),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C6__8S19769C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C38S19769C88S19769C7__A1__8S19769C6__8S19769C1[] = {
  ABISELECT(-14240,-7788),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__A1__8S19769C6__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(-14736,-8060),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S19769C6D1Ev,_ZTv0_n36_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn15192_N8S19769C6D1Ev,_ZThn8316_N8S19769C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19769C6D0Ev,_ZTv0_n36_N8S19769C6D0Ev)();
extern void ABISELECT(_ZThn15192_N8S19769C6D0Ev,_ZThn8316_N8S19769C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19769C10__8S19769C6__8S19769C1[] = {
  ABISELECT(-15192,-8316),
  ABISELECT(-15576,-8520),
  ABISELECT(-456,-256),
  ABISELECT(11432,6324),
  ABISELECT(10952,6056),
  ABISELECT(-15560,-8512),
  ABISELECT(24,20),
  ABISELECT(-15192,-8316),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19769C6D1Ev,_ZTv0_n36_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19769C6D0Ev,_ZTv0_n36_N8S19769C6D0Ev),
};
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19769C6D1Ev,_ZTv0_n40_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn15216_N8S19769C6D1Ev,_ZThn8336_N8S19769C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19769C6D0Ev,_ZTv0_n40_N8S19769C6D0Ev)();
extern void ABISELECT(_ZThn15216_N8S19769C6D0Ev,_ZThn8336_N8S19769C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19769C11__8S19769C6__8S19769C1[] = {
  ABISELECT(-15216,-8336),
  0,
  0,
  ABISELECT(-15600,-8540),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-15584,-8532),
  ABISELECT(-15216,-8336),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19769C6D1Ev,_ZTv0_n40_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19769C6D0Ev,_ZTv0_n40_N8S19769C6D0Ev),
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn26144_N8S19769C6D1Ev,_ZThn14372_N8S19769C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev)();
extern void ABISELECT(_ZThn26144_N8S19769C6D0Ev,_ZThn14372_N8S19769C6D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__8S19769C6__8S19769C1[] = {
  0,
  ABISELECT(-26144,-14372),
  0,
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-26144,-14372),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__8S19769C6__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(-26624,-14640),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
};
extern void ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn26720_N8S19769C6D1Ev,_ZThn14696_N8S19769C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev)();
extern void ABISELECT(_ZThn26720_N8S19769C6D0Ev,_ZThn14696_N8S19769C6D0Ev)() __attribute__((weak));
extern void _ZN9S19769C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C14__8S19769C6__8S19769C1[] = {
  0,
  ABISELECT(-26720,-14696),
  ABISELECT(-576,-324),
  ABISELECT(-27104,-14900),
  ABISELECT(-27088,-14892),
  ABISELECT(-11984,-6636),
  ABISELECT(-96,-56),
  ABISELECT(-26720,-14696),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C169S19769C14__8S19769C6__8S19769C1[] = {
  ABISELECT(-31416,-17236),
  ABISELECT(-31048,-17040),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn31184_N8S19769C6D1Ev,_ZThn17136_N8S19769C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev)();
extern void ABISELECT(_ZThn31184_N8S19769C6D0Ev,_ZThn17136_N8S19769C6D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C17__8S19769C6__8S19769C1[] = {
  0,
  ABISELECT(-31184,-17136),
  0,
  ABISELECT(-31568,-17340),
  ABISELECT(-31552,-17332),
  ABISELECT(-16448,-9076),
  ABISELECT(-4560,-2496),
  ABISELECT(-31184,-17136),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
extern void ABISELECT(_ZThn480_N8S19769C6D1Ev,_ZThn268_N8S19769C6D1Ev)();
extern void ABISELECT(_ZThn480_N8S19769C6D0Ev,_ZThn268_N8S19769C6D0Ev)();
extern void _ZN9S19769C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C149S19769C18__A1__8S19769C6__8S19769C1[] = {
  ABISELECT(25664,14104),
  ABISELECT(-864,-472),
  ABISELECT(-848,-464),
  ABISELECT(14256,7792),
  ABISELECT(26144,14372),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N8S19769C6D1Ev,_ZThn268_N8S19769C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N8S19769C6D0Ev,_ZThn268_N8S19769C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C169S19769C149S19769C18__A1__8S19769C6__8S19769C1[] = {
  ABISELECT(-5176,-2808),
  ABISELECT(-4808,-2612),
  (VTBL_ENTRY)&(_ZTI8S19769C6[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C7D1Ev();
extern void _ZN8S19769C7D0Ev();
extern void _ZN8S19769C82v5Ev();
extern void _ZN8S19769C72v9Ev();
extern void _ZN8S19769C73v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C7__8S19769C1[] = {
  ABISELECT(12848,7108),
  ABISELECT(12368,6840),
  ABISELECT(1440,804),
  ABISELECT(1416,784),
  ABISELECT(960,528),
  ABISELECT(920,508),
  ABISELECT(-14160,-7736),
  ABISELECT(-14144,-7728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19769C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19769C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19769C82v5Ev,
  (VTBL_ENTRY)&_ZN8S19769C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19769C73v10Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
extern void _ZN8S19769C8D1Ev();
extern void _ZN8S19769C8D0Ev();
extern void _ZN8S19769C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C88S19769C7__8S19769C1[] = {
  ABISELECT(920,508),
  ABISELECT(-14160,-7736),
  ABISELECT(-14144,-7728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
  (VTBL_ENTRY)&_ZN8S19769C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19769C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19769C82v5Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C98S19769C88S19769C7__8S19769C1[] = {
  ABISELECT(-14160,-7736),
  ABISELECT(-14144,-7728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C98S19769C88S19769C7__8S19769C1[] = {
  0,
  ABISELECT(14144,7728),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C5__8S19769C88S19769C7__8S19769C1[] = {
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C88S19769C7__8S19769C1[] = {
  0,
  ABISELECT(14144,7728),
  (VTBL_ENTRY)&(_ZTI8S19769C8[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C5__8S19769C7__8S19769C1[] = {
  0,
  ABISELECT(-920,-508),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C7__8S19769C1[] = {
  0,
  ABISELECT(14144,7728),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__A1__8S19769C7__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(-960,-528),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S19769C7D1Ev,_ZTv0_n36_N8S19769C7D1Ev)();
extern void ABISELECT(_ZThn1416_N8S19769C7D1Ev,_ZThn784_N8S19769C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19769C7D0Ev,_ZTv0_n36_N8S19769C7D0Ev)();
extern void ABISELECT(_ZThn1416_N8S19769C7D0Ev,_ZThn784_N8S19769C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19769C10__8S19769C7__8S19769C1[] = {
  ABISELECT(-1416,-784),
  ABISELECT(-15576,-8520),
  ABISELECT(-456,-256),
  ABISELECT(11432,6324),
  ABISELECT(10952,6056),
  ABISELECT(-15560,-8512),
  ABISELECT(24,20),
  ABISELECT(-1416,-784),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19769C7D1Ev,_ZTv0_n36_N8S19769C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19769C7D0Ev,_ZTv0_n36_N8S19769C7D0Ev),
};
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19769C7D1Ev,_ZTv0_n40_N8S19769C7D1Ev)();
extern void ABISELECT(_ZThn1440_N8S19769C7D1Ev,_ZThn804_N8S19769C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19769C7D0Ev,_ZTv0_n40_N8S19769C7D0Ev)();
extern void ABISELECT(_ZThn1440_N8S19769C7D0Ev,_ZThn804_N8S19769C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19769C11__8S19769C7__8S19769C1[] = {
  ABISELECT(-1440,-804),
  0,
  0,
  ABISELECT(-15600,-8540),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-15584,-8532),
  ABISELECT(-1440,-804),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19769C7D1Ev,_ZTv0_n40_N8S19769C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19769C7D0Ev,_ZTv0_n40_N8S19769C7D0Ev),
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19769C7D1Ev,_ZTv0_n32_N8S19769C7D1Ev)();
extern void ABISELECT(_ZThn12368_N8S19769C7D1Ev,_ZThn6840_N8S19769C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19769C7D0Ev,_ZTv0_n32_N8S19769C7D0Ev)();
extern void ABISELECT(_ZThn12368_N8S19769C7D0Ev,_ZThn6840_N8S19769C7D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__8S19769C7__8S19769C1[] = {
  0,
  ABISELECT(-12368,-6840),
  0,
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-12368,-6840),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C7D1Ev,_ZTv0_n32_N8S19769C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19769C7D0Ev,_ZTv0_n32_N8S19769C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__8S19769C7__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(-12848,-7108),
  (VTBL_ENTRY)&(_ZTI8S19769C7[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__A1__8S19769C1[] = {
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__8S19769C9__A1__8S19769C1[] = {
  0,
  ABISELECT(15104,8256),
  (VTBL_ENTRY)&(_ZTI8S19769C9[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN9S19769C10D1Ev();
extern void _ZN9S19769C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C10__8S19769C1[] = {
  ABISELECT(-15576,-8520),
  ABISELECT(-456,-256),
  ABISELECT(11432,6324),
  ABISELECT(10952,6056),
  ABISELECT(-15560,-8512),
  ABISELECT(24,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN9S19769C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C10D0Ev,
};
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void ABISELECT(_ZTv0_n80_N9S19769C10D1Ev,_ZTv0_n40_N9S19769C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19769C10D1Ev,_ZThn20_N9S19769C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19769C10D0Ev,_ZTv0_n40_N9S19769C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19769C10D0Ev,_ZThn20_N9S19769C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19769C11__9S19769C10__8S19769C1[] = {
  ABISELECT(-24,-20),
  0,
  0,
  ABISELECT(-15600,-8540),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-15584,-8532),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19769C10D1Ev,_ZTv0_n40_N9S19769C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19769C10D0Ev,_ZTv0_n40_N9S19769C10D0Ev),
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C10__8S19769C1[] = {
  0,
  ABISELECT(15560,8512),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C10D1Ev,_ZTv0_n32_N9S19769C10D1Ev)();
extern void ABISELECT(_ZThn10952_N9S19769C10D1Ev,_ZThn6056_N9S19769C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C10D0Ev,_ZTv0_n32_N9S19769C10D0Ev)();
extern void ABISELECT(_ZThn10952_N9S19769C10D0Ev,_ZThn6056_N9S19769C10D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C10__8S19769C1[] = {
  0,
  ABISELECT(-10952,-6056),
  0,
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-10952,-6056),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C10D1Ev,_ZTv0_n32_N9S19769C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C10D0Ev,_ZTv0_n32_N9S19769C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C10__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(-11432,-6324),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C10__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(456,256),
  (VTBL_ENTRY)&(_ZTI9S19769C10[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN9S19769C112v7Ev();
extern void _ZN9S19769C112v8Ev();
extern void _ZN9S19769C11D1Ev();
extern void _ZN9S19769C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C11__8S19769C1[] = {
  ABISELECT(-15600,-8540),
  ABISELECT(-480,-276),
  ABISELECT(11408,6304),
  ABISELECT(10928,6036),
  ABISELECT(-15584,-8532),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN9S19769C112v7Ev,
  (VTBL_ENTRY)&_ZN9S19769C112v8Ev,
  (VTBL_ENTRY)&_ZN9S19769C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C11D0Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C11__8S19769C1[] = {
  0,
  ABISELECT(15584,8532),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev)();
extern void ABISELECT(_ZThn10928_N9S19769C11D1Ev,_ZThn6036_N9S19769C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev)();
extern void ABISELECT(_ZThn10928_N9S19769C11D0Ev,_ZThn6036_N9S19769C11D0Ev)() __attribute__((weak));
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C11__8S19769C1[] = {
  0,
  ABISELECT(-10928,-6036),
  0,
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C11__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(-11408,-6304),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C11__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(480,276),
  (VTBL_ENTRY)&(_ZTI9S19769C11[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__8S19769C1[] = {
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C12__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C12__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(11408,6312),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C12__8S19769C1[] = {
  0,
  ABISELECT(26512,14568),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C13__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(11888,6580),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C13__8S19769C1[] = {
  0,
  ABISELECT(26992,14836),
  (VTBL_ENTRY)&(_ZTI9S19769C13[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN9S19769C14D1Ev();
extern void _ZN9S19769C14D0Ev();
extern void _ZN9S19769C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C14__8S19769C1[] = {
  ABISELECT(-576,-324),
  ABISELECT(-27104,-14900),
  ABISELECT(-27088,-14892),
  ABISELECT(-11984,-6636),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN9S19769C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C143v11Ev,
};
extern void _ZN9S19769C15D1Ev();
extern void _ZN9S19769C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C159S19769C14__8S19769C1[] = {
  ABISELECT(-576,-324),
  ABISELECT(-27104,-14900),
  ABISELECT(-27088,-14892),
  ABISELECT(-11984,-6636),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN9S19769C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C159S19769C14__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C159S19769C14__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(11984,6636),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C159S19769C14__8S19769C1[] = {
  0,
  ABISELECT(27088,14892),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev)();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C159S19769C14__8S19769C1[] = {
  0,
  ABISELECT(576,324),
  0,
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C169S19769C14__8S19769C1[] = {
  ABISELECT(-31416,-17236),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C169S19769C14__8S19769C1[] = {
  0,
  ABISELECT(31416,17236),
  (VTBL_ENTRY)&(_ZTI9S19769C16[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C14__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C14__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(11984,6636),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C14__8S19769C1[] = {
  0,
  ABISELECT(27088,14892),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev)();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C14__8S19769C1[] = {
  0,
  ABISELECT(576,324),
  0,
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C16__9S19769C14__8S19769C1[] = {
  ABISELECT(-31416,-17236),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S19769C14[0]),
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C17D1Ev();
extern void _ZN9S19769C17D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C17__8S19769C1[] = {
  ABISELECT(-31568,-17340),
  ABISELECT(-31552,-17332),
  ABISELECT(-16448,-9076),
  ABISELECT(-4560,-2496),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C17[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C17D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void _ZN9S19769C12D1Ev();
extern void _ZN9S19769C12D0Ev();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C129S19769C17__A1__8S19769C1[] = {
  ABISELECT(-31568,-17340),
  ABISELECT(-31552,-17332),
  ABISELECT(-16448,-9076),
  ABISELECT(-4560,-2496),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C129S19769C17__A1__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(4560,2496),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C129S19769C17__A1__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(16448,9076),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C129S19769C17__A1__8S19769C1[] = {
  0,
  ABISELECT(31552,17332),
  (VTBL_ENTRY)&(_ZTI9S19769C12[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C17__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(4560,2496),
  (VTBL_ENTRY)&(_ZTI9S19769C17[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C17__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(16448,9076),
  (VTBL_ENTRY)&(_ZTI9S19769C17[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C17__8S19769C1[] = {
  0,
  ABISELECT(31552,17332),
  (VTBL_ENTRY)&(_ZTI9S19769C17[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN9S19769C15D1Ev();
extern void _ZN9S19769C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C15__A2__8S19769C1[] = {
  ABISELECT(-5728,-3148),
  ABISELECT(-32256,-17724),
  ABISELECT(-32240,-17716),
  ABISELECT(-17136,-9460),
  ABISELECT(-5248,-2880),
  0,
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN9S19769C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19769C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19769C13__9S19769C15__A2__8S19769C1[] = {
  ABISELECT(-27008,-14844),
  ABISELECT(-26992,-14836),
  ABISELECT(-11888,-6580),
  ABISELECT(5248,2880),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
};
extern void _ZN8S19769C52v2Ev();
extern void _ZN8S19769C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C9__9S19769C15__A2__8S19769C1[] = {
  0,
  0,
  ABISELECT(-15120,-8264),
  ABISELECT(-15104,-8256),
  ABISELECT(17136,9460),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19769C92v4Ev,
};
extern void _ZN8S19769C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19769C3__9S19769C15__A2__8S19769C1[] = {
  0,
  ABISELECT(32240,17716),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
};
extern void _ZN8S19769C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev)();
extern void _ZN9S19769C122v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19769C12__9S19769C15__A2__8S19769C1[] = {
  0,
  ABISELECT(5728,3148),
  0,
  ABISELECT(-26528,-14576),
  ABISELECT(-26512,-14568),
  ABISELECT(-11408,-6312),
  ABISELECT(480,268),
  ABISELECT(5728,3148),
  (VTBL_ENTRY)&(_ZTI9S19769C15[0]),
  (VTBL_ENTRY)&_ZN8S19769C32v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19769C122v6Ev,
};
static  VTT_ENTRY vtt_S19769C1[] = {
  {&(_ZTV8S19769C1[17]),  17,183},
  {&(_tg__ZTV9S19769C20__8S19769C1[9]),  9,13},
  {&(_tg__ZTV9S19769C129S19769C20__A3__8S19769C1[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C129S19769C20__A3__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C129S19769C20__A3__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C129S19769C20__A3__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C14__9S19769C20__8S19769C1[9]),  9,12},
  {&(_tg__ZTV9S19769C13__9S19769C20__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C20__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C20__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C20__8S19769C1[9]),  9,13},
  {&(_tg__ZTV9S19769C169S19769C14__9S19769C20__8S19769C1[3]),  3,3},
  {&(_tg__ZTV9S19769C15__A1__9S19769C20__8S19769C1[8]),  8,10},
  {&(_ZTV8S19769C1[25]),  25,183},
  {&(_ZTV8S19769C1[45]),  45,183},
  {&(_ZTV8S19769C1[80]),  80,183},
  {&(_ZTV8S19769C1[93]),  93,183},
  {&(_ZTV8S19769C1[89]),  89,183},
  {&(_ZTV8S19769C1[100]),  100,183},
  {&(_ZTV8S19769C1[111]),  111,183},
  {&(_ZTV8S19769C1[123]),  123,183},
  {&(_ZTV8S19769C1[136]),  136,183},
  {&(_ZTV8S19769C1[145]),  145,183},
  {&(_ZTV8S19769C1[154]),  154,183},
  {&(_ZTV8S19769C1[160]),  160,183},
  {&(_ZTV8S19769C1[169]),  169,183},
  {&(_ZTV8S19769C1[57]),  57,183},
  {&(_ZTV8S19769C1[63]),  63,183},
  {&(_ZTV8S19769C1[181]),  181,183},
  {&(_tg__ZTV8S19769C6__8S19769C1[14]),  14,19},
  {&(_tg__ZTV9S19769C188S19769C6__8S19769C1[8]),  8,12},
  {&(_tg__ZTV9S19769C129S19769C188S19769C6__A2__8S19769C1[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C129S19769C188S19769C6__A2__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C129S19769C188S19769C6__A2__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C129S19769C188S19769C6__A2__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C149S19769C188S19769C6__A1__8S19769C1[7]),  7,10},
  {&(_tg__ZTV9S19769C159S19769C149S19769C188S19769C6__A1__8S19769C1[7]),  7,9},
  {&(_tg__ZTV9S19769C13__9S19769C159S19769C149S19769C188S19769C6__A1__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C159S19769C149S19769C188S19769C6__A1__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C159S19769C149S19769C188S19769C6__A1__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C159S19769C149S19769C188S19769C6__A1__8S19769C1[9]),  9,13},
  {&(_tg__ZTV9S19769C169S19769C149S19769C188S19769C6__A1__8S19769C1[3]),  3,3},
  {&(_tg__ZTV8S19769C3__9S19769C169S19769C149S19769C188S19769C6__A1__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C13__9S19769C149S19769C188S19769C6__A1__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C149S19769C188S19769C6__A1__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C149S19769C188S19769C6__A1__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C149S19769C188S19769C6__A1__8S19769C1[9]),  9,13},
  {&(_tg__ZTV9S19769C16__9S19769C149S19769C188S19769C6__A1__8S19769C1[3]),  3,3},
  {&(_tg__ZTV9S19769C13__9S19769C188S19769C6__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C188S19769C6__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C188S19769C6__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C14__9S19769C188S19769C6__8S19769C1[7]),  7,10},
  {&(_tg__ZTV9S19769C12__A1__9S19769C188S19769C6__8S19769C1[9]),  9,13},
  {&(_tg__ZTV9S19769C169S19769C14__9S19769C188S19769C6__8S19769C1[3]),  3,3},
  {&(_tg__ZTV8S19769C7__8S19769C6__8S19769C1[17]),  17,24},
  {&(_tg__ZTV8S19769C5__8S19769C6__8S19769C1[3]),  3,4},
  {&(_tg__ZTV8S19769C3__8S19769C6__8S19769C1[3]),  3,4},
  {&(_tg__ZTV8S19769C38S19769C88S19769C7__A1__8S19769C6__8S19769C1[2]),  2,3},
  {&(_tg__ZTV8S19769C9__A1__8S19769C6__8S19769C1[6]),  6,8},
  {&(_tg__ZTV9S19769C10__8S19769C6__8S19769C1[9]),  9,11},
  {&(_tg__ZTV9S19769C11__8S19769C6__8S19769C1[10]),  10,14},
  {&(_tg__ZTV9S19769C12__8S19769C6__8S19769C1[9]),  9,13},
  {&(_tg__ZTV9S19769C13__8S19769C6__8S19769C1[5]),  5,5},
  {&(_tg__ZTV9S19769C14__8S19769C6__8S19769C1[9]),  9,12},
  {&(_tg__ZTV9S19769C169S19769C14__8S19769C6__8S19769C1[3]),  3,3},
  {&(_tg__ZTV9S19769C17__8S19769C6__8S19769C1[9]),  9,13},
  {&(_tg__ZTV9S19769C149S19769C18__A1__8S19769C6__8S19769C1[7]),  7,10},
  {&(_tg__ZTV9S19769C169S19769C149S19769C18__A1__8S19769C6__8S19769C1[3]),  3,3},
  {&(_tg__ZTV8S19769C7__8S19769C1[10]),  10,17},
  {&(_tg__ZTV8S19769C88S19769C7__8S19769C1[5]),  5,10},
  {&(_tg__ZTV8S19769C98S19769C88S19769C7__8S19769C1[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C98S19769C88S19769C7__8S19769C1[3]),  3,4},
  {&(_tg__ZTV8S19769C5__8S19769C88S19769C7__8S19769C1[3]),  3,4},
  {&(_tg__ZTV8S19769C3__8S19769C88S19769C7__8S19769C1[3]),  3,4},
  {&(_tg__ZTV8S19769C5__8S19769C7__8S19769C1[3]),  3,4},
  {&(_tg__ZTV8S19769C3__8S19769C7__8S19769C1[3]),  3,4},
  {&(_tg__ZTV8S19769C9__A1__8S19769C7__8S19769C1[6]),  6,8},
  {&(_tg__ZTV9S19769C10__8S19769C7__8S19769C1[9]),  9,11},
  {&(_tg__ZTV9S19769C11__8S19769C7__8S19769C1[10]),  10,14},
  {&(_tg__ZTV9S19769C12__8S19769C7__8S19769C1[9]),  9,13},
  {&(_tg__ZTV9S19769C13__8S19769C7__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__A1__8S19769C1[4]),  4,6},
  {&(_tg__ZTV8S19769C3__8S19769C9__A1__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C10__8S19769C1[8]),  8,10},
  {&(_tg__ZTV9S19769C11__9S19769C10__8S19769C1[10]),  10,14},
  {&(_tg__ZTV8S19769C3__9S19769C10__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C10__8S19769C1[9]),  9,13},
  {&(_tg__ZTV9S19769C13__9S19769C10__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C10__8S19769C1[6]),  6,8},
  {&(_tg__ZTV9S19769C11__8S19769C1[7]),  7,11},
  {&(_tg__ZTV8S19769C3__9S19769C11__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C11__8S19769C1[9]),  9,13},
  {&(_tg__ZTV9S19769C13__9S19769C11__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C11__8S19769C1[6]),  6,8},
  {&(_tg__ZTV9S19769C12__8S19769C1[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C12__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C12__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C12__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C13__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C13__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C13__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C14__8S19769C1[7]),  7,10},
  {&(_tg__ZTV9S19769C159S19769C14__8S19769C1[7]),  7,9},
  {&(_tg__ZTV9S19769C13__9S19769C159S19769C14__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C159S19769C14__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C159S19769C14__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C159S19769C14__8S19769C1[9]),  9,13},
  {&(_tg__ZTV9S19769C169S19769C14__8S19769C1[3]),  3,3},
  {&(_tg__ZTV8S19769C3__9S19769C169S19769C14__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C13__9S19769C14__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C14__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C14__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C14__8S19769C1[9]),  9,13},
  {&(_tg__ZTV9S19769C16__9S19769C14__8S19769C1[3]),  3,3},
  {&(_tg__ZTV9S19769C17__8S19769C1[6]),  6,10},
  {&(_tg__ZTV9S19769C129S19769C17__A1__8S19769C1[6]),  6,10},
  {&(_tg__ZTV9S19769C13__9S19769C129S19769C17__A1__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C129S19769C17__A1__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C129S19769C17__A1__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C13__9S19769C17__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C17__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C17__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C15__A2__8S19769C1[7]),  7,9},
  {&(_tg__ZTV9S19769C13__9S19769C15__A2__8S19769C1[5]),  5,5},
  {&(_tg__ZTV8S19769C9__9S19769C15__A2__8S19769C1[6]),  6,8},
  {&(_tg__ZTV8S19769C3__9S19769C15__A2__8S19769C1[3]),  3,4},
  {&(_tg__ZTV9S19769C12__9S19769C15__A2__8S19769C1[9]),  9,13},
};
extern VTBL_ENTRY _ZTI8S19769C1[];
extern  VTBL_ENTRY _ZTV8S19769C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19769C1[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C11D0Ev,_ZTv0_n32_N9S19769C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S19769C11D0Ev,_ZThn6036_N9S19769C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C11D1Ev,_ZTv0_n32_N9S19769C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10928_N9S19769C11D1Ev,_ZThn6036_N9S19769C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C10D0Ev,_ZTv0_n32_N9S19769C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S19769C10D0Ev,_ZThn6056_N9S19769C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C10D1Ev,_ZTv0_n32_N9S19769C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10952_N9S19769C10D1Ev,_ZThn6056_N9S19769C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19769C10D0Ev,_ZTv0_n40_N9S19769C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19769C10D0Ev,_ZThn20_N9S19769C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19769C10D1Ev,_ZTv0_n40_N9S19769C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19769C10D1Ev,_ZThn20_N9S19769C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19769C7D0Ev,_ZTv0_n32_N8S19769C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12368_N8S19769C7D0Ev,_ZThn6840_N8S19769C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19769C7D1Ev,_ZTv0_n32_N8S19769C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12368_N8S19769C7D1Ev,_ZThn6840_N8S19769C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19769C7D0Ev,_ZTv0_n40_N8S19769C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N8S19769C7D0Ev,_ZThn804_N8S19769C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19769C7D1Ev,_ZTv0_n40_N8S19769C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N8S19769C7D1Ev,_ZThn804_N8S19769C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19769C7D0Ev,_ZTv0_n36_N8S19769C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1416_N8S19769C7D0Ev,_ZThn784_N8S19769C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19769C7D1Ev,_ZTv0_n36_N8S19769C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1416_N8S19769C7D1Ev,_ZThn784_N8S19769C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19769C6D0Ev,_ZTv0_n32_N8S19769C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31184_N8S19769C6D0Ev,_ZThn17136_N8S19769C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26720_N8S19769C6D0Ev,_ZThn14696_N8S19769C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26144_N8S19769C6D0Ev,_ZThn14372_N8S19769C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19769C6D1Ev,_ZTv0_n32_N8S19769C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31184_N8S19769C6D1Ev,_ZThn17136_N8S19769C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26720_N8S19769C6D1Ev,_ZThn14696_N8S19769C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26144_N8S19769C6D1Ev,_ZThn14372_N8S19769C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19769C6D0Ev,_ZTv0_n40_N8S19769C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15216_N8S19769C6D0Ev,_ZThn8336_N8S19769C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19769C6D1Ev,_ZTv0_n40_N8S19769C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15216_N8S19769C6D1Ev,_ZThn8336_N8S19769C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19769C6D0Ev,_ZTv0_n36_N8S19769C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15192_N8S19769C6D0Ev,_ZThn8316_N8S19769C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19769C6D1Ev,_ZTv0_n36_N8S19769C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15192_N8S19769C6D1Ev,_ZThn8316_N8S19769C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19769C6D0Ev,_ZTv0_n52_N8S19769C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13776_N8S19769C6D0Ev,_ZThn7532_N8S19769C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19769C6D1Ev,_ZTv0_n52_N8S19769C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13776_N8S19769C6D1Ev,_ZThn7532_N8S19769C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C18D0Ev,_ZTv0_n32_N9S19769C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26144_N9S19769C18D0Ev,_ZThn14372_N9S19769C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C18D1Ev,_ZTv0_n32_N9S19769C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26144_N9S19769C18D1Ev,_ZThn14372_N9S19769C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C14D0Ev,_ZTv0_n32_N9S19769C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25664_N9S19769C14D0Ev,_ZThn14104_N9S19769C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C14D1Ev,_ZTv0_n32_N9S19769C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25664_N9S19769C14D1Ev,_ZThn14104_N9S19769C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C15D0Ev,_ZTv0_n32_N9S19769C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25664_N9S19769C15D0Ev,_ZThn14104_N9S19769C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C15D1Ev,_ZTv0_n32_N9S19769C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25664_N9S19769C15D1Ev,_ZThn14104_N9S19769C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C20D0Ev,_ZTv0_n32_N9S19769C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N9S19769C20D0Ev,_ZThn18280_N9S19769C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27552_N9S19769C20D0Ev,_ZThn15132_N9S19769C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28128_N9S19769C20D0Ev,_ZThn15456_N9S19769C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19769C20D1Ev,_ZTv0_n32_N9S19769C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N9S19769C20D1Ev,_ZThn18280_N9S19769C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27552_N9S19769C20D1Ev,_ZThn15132_N9S19769C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28128_N9S19769C20D1Ev,_ZThn15456_N9S19769C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19769C1D0Ev,_ZTv0_n32_N8S19769C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N8S19769C1D0Ev,_ZThn18280_N8S19769C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32592_N8S19769C1D0Ev,_ZThn17896_N8S19769C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28128_N8S19769C1D0Ev,_ZThn15456_N8S19769C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27552_N8S19769C1D0Ev,_ZThn15132_N8S19769C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19769C1D1Ev,_ZTv0_n32_N8S19769C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N8S19769C1D1Ev,_ZThn18280_N8S19769C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32592_N8S19769C1D1Ev,_ZThn17896_N8S19769C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28128_N8S19769C1D1Ev,_ZThn15456_N8S19769C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27552_N8S19769C1D1Ev,_ZThn15132_N8S19769C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19769C1D0Ev,_ZTv0_n40_N8S19769C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16624_N8S19769C1D0Ev,_ZThn9096_N8S19769C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19769C1D1Ev,_ZTv0_n40_N8S19769C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16624_N8S19769C1D1Ev,_ZThn9096_N8S19769C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19769C1D0Ev,_ZTv0_n36_N8S19769C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16600_N8S19769C1D0Ev,_ZThn9076_N8S19769C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19769C1D1Ev,_ZTv0_n36_N8S19769C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16600_N8S19769C1D1Ev,_ZThn9076_N8S19769C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19769C1D0Ev,_ZTv0_n52_N8S19769C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15184_N8S19769C1D0Ev,_ZThn8292_N8S19769C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19769C1D1Ev,_ZTv0_n52_N8S19769C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15184_N8S19769C1D1Ev,_ZThn8292_N8S19769C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S19769C1D0Ev,_ZTv0_n64_N8S19769C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1408_N8S19769C1D0Ev,_ZThn760_N8S19769C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n128_N8S19769C1D1Ev,_ZTv0_n64_N8S19769C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1408_N8S19769C1D1Ev,_ZThn760_N8S19769C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19769C1 = {  "S19769C1", // class name
  bases_S19769C1, 38,
  &(vtc_S19769C1[0]), // expected_vtbl_contents
  &(vtt_S19769C1[0]), // expected_vtt_contents
  ABISELECT(51392,28200), // object size
  NSPAIRA(_ZTI8S19769C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19769C1),183, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19769C1),127, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C5_nt  {
  int s770c5f0;
  void  mf770c5(); // _ZN9S770C5_nt7mf770c5Ev
  virtual  ~S770C5_nt(); // _ZN9S770C5_ntD1Ev
  S770C5_nt(); // tgen
};
//SIG(-1 S770C5_nt) C1{ vd m Fi}


void  S770C5_nt ::mf770c5(){}
 S770C5_nt ::~S770C5_nt(){ note_dtor("S770C5_nt", this);}
S770C5_nt ::S770C5_nt(){ note_ctor("S770C5_nt", this);} // tgen

//skip512 S770C5_nt

#else // __cplusplus

extern void _ZN9S770C5_ntC1Ev();
extern void _ZN9S770C5_ntD1Ev();
Name_Map name_map_S770C5_nt[] = {
  NSPAIR(_ZN9S770C5_ntC1Ev),
  NSPAIR(_ZN9S770C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern void _ZN9S770C5_ntD1Ev();
extern void _ZN9S770C5_ntD0Ev();
static  VTBL_ENTRY vtc_S770C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S770C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S770C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S770C5_ntD0Ev,
};
extern VTBL_ENTRY _ZTI9S770C5_nt[];
VTBL_ENTRY *P__ZTI9S770C5_nt = _ZTI9S770C5_nt; 
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
Class_Descriptor cd_S770C5_nt = {  "S770C5_nt", // class name
  0,0,//no base classes
  &(vtc_S770C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S770C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S770C5_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  S770C4  : S770C5_nt {
  virtual void  v7(); // _ZN6S770C42v7Ev
  virtual void  v8(); // _ZN6S770C42v8Ev
  virtual void  v9(); // _ZN6S770C42v9Ev
  virtual void  v10(); // _ZN6S770C43v10Ev
  virtual void  v11(); // _ZN6S770C43v11Ev
  ~S770C4(); // tgen
  S770C4(); // tgen
};
//SIG(-1 S770C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S770C4 ::v7(){vfunc_called(this, "_ZN6S770C42v7Ev");}
void  S770C4 ::v8(){vfunc_called(this, "_ZN6S770C42v8Ev");}
void  S770C4 ::v9(){vfunc_called(this, "_ZN6S770C42v9Ev");}
void  S770C4 ::v10(){vfunc_called(this, "_ZN6S770C43v10Ev");}
void  S770C4 ::v11(){vfunc_called(this, "_ZN6S770C43v11Ev");}
S770C4 ::~S770C4(){ note_dtor("S770C4", this);} // tgen
S770C4 ::S770C4(){ note_ctor("S770C4", this);} // tgen

static void Test_S770C4()
{
  extern Class_Descriptor cd_S770C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S770C4, buf);
    S770C4 *dp, &lv = *(dp=new (buf) S770C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S770C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S770C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S770C4");
    test_class_info(&lv, &cd_S770C4);
    dp->~S770C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS770C4(Test_S770C4, "S770C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S770C4C1Ev();
extern void _ZN6S770C4D1Ev();
Name_Map name_map_S770C4[] = {
  NSPAIR(_ZN6S770C4C1Ev),
  NSPAIR(_ZN6S770C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S770C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S770C4[];
extern void _ZN6S770C4D1Ev();
extern void _ZN6S770C4D0Ev();
extern void _ZN6S770C42v7Ev();
extern void _ZN6S770C42v8Ev();
extern void _ZN6S770C42v9Ev();
extern void _ZN6S770C43v10Ev();
extern void _ZN6S770C43v11Ev();
static  VTBL_ENTRY vtc_S770C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S770C4[0]),
  (VTBL_ENTRY)&_ZN6S770C4D1Ev,
  (VTBL_ENTRY)&_ZN6S770C4D0Ev,
  (VTBL_ENTRY)&_ZN6S770C42v7Ev,
  (VTBL_ENTRY)&_ZN6S770C42v8Ev,
  (VTBL_ENTRY)&_ZN6S770C42v9Ev,
  (VTBL_ENTRY)&_ZN6S770C43v10Ev,
  (VTBL_ENTRY)&_ZN6S770C43v11Ev,
};
extern VTBL_ENTRY _ZTI6S770C4[];
extern  VTBL_ENTRY _ZTV6S770C4[];
Class_Descriptor cd_S770C4 = {  "S770C4", // class name
  bases_S770C4, 1,
  &(vtc_S770C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S770C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S770C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C6_nt  {
  ::S2215C37 s770c6f0;
  void *s770c6f1[2];
  void  mf770c6(); // _ZN9S770C6_nt7mf770c6Ev
};
//SIG(-1 S770C6_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S770C6_nt ::mf770c6(){}

//skip512 S770C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C3  : S770C4 {
  void *s770c3f0[3];
  ::S770C6_nt s770c3f1;
  virtual void  v12(); // _ZN6S770C33v12Ev
  virtual void  v13(); // _ZN6S770C33v13Ev
  virtual void  v14(); // _ZN6S770C33v14Ev
  virtual void  v15(); // _ZN6S770C33v15Ev
  virtual void  v16(); // _ZN6S770C33v16Ev
  virtual void  v17(); // _ZN6S770C33v17Ev
  virtual void  v18(); // _ZN6S770C33v18Ev
  virtual void  v19(); // _ZN6S770C33v19Ev
  virtual void  v20(); // _ZN6S770C33v20Ev
  virtual void  v21(); // _ZN6S770C33v21Ev
  virtual void  v22(); // _ZN6S770C33v22Ev
  ~S770C3(); // tgen
  S770C3(); // tgen
};
//SIG(-1 S770C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S770C3 ::v12(){vfunc_called(this, "_ZN6S770C33v12Ev");}
void  S770C3 ::v13(){vfunc_called(this, "_ZN6S770C33v13Ev");}
void  S770C3 ::v14(){vfunc_called(this, "_ZN6S770C33v14Ev");}
void  S770C3 ::v15(){vfunc_called(this, "_ZN6S770C33v15Ev");}
void  S770C3 ::v16(){vfunc_called(this, "_ZN6S770C33v16Ev");}
void  S770C3 ::v17(){vfunc_called(this, "_ZN6S770C33v17Ev");}
void  S770C3 ::v18(){vfunc_called(this, "_ZN6S770C33v18Ev");}
void  S770C3 ::v19(){vfunc_called(this, "_ZN6S770C33v19Ev");}
void  S770C3 ::v20(){vfunc_called(this, "_ZN6S770C33v20Ev");}
void  S770C3 ::v21(){vfunc_called(this, "_ZN6S770C33v21Ev");}
void  S770C3 ::v22(){vfunc_called(this, "_ZN6S770C33v22Ev");}
S770C3 ::~S770C3(){ note_dtor("S770C3", this);} // tgen
S770C3 ::S770C3(){ note_ctor("S770C3", this);} // tgen

static void Test_S770C3()
{
  extern Class_Descriptor cd_S770C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S770C3, buf);
    S770C3 *dp, &lv = *(dp=new (buf) S770C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S770C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S770C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S770C4*), 0, "S770C3");
    check_base_class_offset(lv, (S770C4*), 0, "S770C3");
    check_field_offset(lv, s770c3f0, ABISELECT(16,8), "S770C3.s770c3f0");
    check_field_offset(lv, s770c3f1, ABISELECT(40,20), "S770C3.s770c3f1");
    test_class_info(&lv, &cd_S770C3);
    dp->~S770C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS770C3(Test_S770C3, "S770C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S770C3C1Ev();
extern void _ZN6S770C3D1Ev();
Name_Map name_map_S770C3[] = {
  NSPAIR(_ZN6S770C3C1Ev),
  NSPAIR(_ZN6S770C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S770C4;
extern VTBL_ENTRY _ZTI6S770C4[];
extern  VTBL_ENTRY _ZTV6S770C4[];
static Base_Class bases_S770C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S770C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S770C3[];
extern void _ZN6S770C3D1Ev();
extern void _ZN6S770C3D0Ev();
extern void _ZN6S770C42v7Ev();
extern void _ZN6S770C42v8Ev();
extern void _ZN6S770C42v9Ev();
extern void _ZN6S770C43v10Ev();
extern void _ZN6S770C43v11Ev();
extern void _ZN6S770C33v12Ev();
extern void _ZN6S770C33v13Ev();
extern void _ZN6S770C33v14Ev();
extern void _ZN6S770C33v15Ev();
extern void _ZN6S770C33v16Ev();
extern void _ZN6S770C33v17Ev();
extern void _ZN6S770C33v18Ev();
extern void _ZN6S770C33v19Ev();
extern void _ZN6S770C33v20Ev();
extern void _ZN6S770C33v21Ev();
extern void _ZN6S770C33v22Ev();
static  VTBL_ENTRY vtc_S770C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S770C3[0]),
  (VTBL_ENTRY)&_ZN6S770C3D1Ev,
  (VTBL_ENTRY)&_ZN6S770C3D0Ev,
  (VTBL_ENTRY)&_ZN6S770C42v7Ev,
  (VTBL_ENTRY)&_ZN6S770C42v8Ev,
  (VTBL_ENTRY)&_ZN6S770C42v9Ev,
  (VTBL_ENTRY)&_ZN6S770C43v10Ev,
  (VTBL_ENTRY)&_ZN6S770C43v11Ev,
  (VTBL_ENTRY)&_ZN6S770C33v12Ev,
  (VTBL_ENTRY)&_ZN6S770C33v13Ev,
  (VTBL_ENTRY)&_ZN6S770C33v14Ev,
  (VTBL_ENTRY)&_ZN6S770C33v15Ev,
  (VTBL_ENTRY)&_ZN6S770C33v16Ev,
  (VTBL_ENTRY)&_ZN6S770C33v17Ev,
  (VTBL_ENTRY)&_ZN6S770C33v18Ev,
  (VTBL_ENTRY)&_ZN6S770C33v19Ev,
  (VTBL_ENTRY)&_ZN6S770C33v20Ev,
  (VTBL_ENTRY)&_ZN6S770C33v21Ev,
  (VTBL_ENTRY)&_ZN6S770C33v22Ev,
};
extern VTBL_ENTRY _ZTI6S770C3[];
extern  VTBL_ENTRY _ZTV6S770C3[];
Class_Descriptor cd_S770C3 = {  "S770C3", // class name
  bases_S770C3, 2,
  &(vtc_S770C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S770C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S770C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C9_nt  {
  void *s770c9f0;
  void  mf770c9(); // _ZN9S770C9_nt7mf770c9Ev
};
//SIG(-1 S770C9_nt) C1{ m Fp}


void  S770C9_nt ::mf770c9(){}

//skip512 S770C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C2  : S770C3 {
  ::S770C6_nt s770c2f0;
  ::S770C9_nt s770c2f1;
  void *s770c2f2[3];
  virtual void  v23(); // _ZN6S770C23v23Ev
  virtual void  v24(); // _ZN6S770C23v24Ev
  virtual void  v25(); // _ZN6S770C23v25Ev
  virtual void  v26(); // _ZN6S770C23v26Ev
  virtual void  v27(); // _ZN6S770C23v27Ev
  virtual void  v28(); // _ZN6S770C23v28Ev
  virtual void  v29(); // _ZN6S770C23v29Ev
  virtual void  v30(); // _ZN6S770C23v30Ev
  ~S770C2(); // tgen
  S770C2(); // tgen
};
//SIG(-1 S770C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S770C2 ::v23(){vfunc_called(this, "_ZN6S770C23v23Ev");}
void  S770C2 ::v24(){vfunc_called(this, "_ZN6S770C23v24Ev");}
void  S770C2 ::v25(){vfunc_called(this, "_ZN6S770C23v25Ev");}
void  S770C2 ::v26(){vfunc_called(this, "_ZN6S770C23v26Ev");}
void  S770C2 ::v27(){vfunc_called(this, "_ZN6S770C23v27Ev");}
void  S770C2 ::v28(){vfunc_called(this, "_ZN6S770C23v28Ev");}
void  S770C2 ::v29(){vfunc_called(this, "_ZN6S770C23v29Ev");}
void  S770C2 ::v30(){vfunc_called(this, "_ZN6S770C23v30Ev");}
S770C2 ::~S770C2(){ note_dtor("S770C2", this);} // tgen
S770C2 ::S770C2(){ note_ctor("S770C2", this);} // tgen

static void Test_S770C2()
{
  extern Class_Descriptor cd_S770C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S770C2, buf);
    S770C2 *dp, &lv = *(dp=new (buf) S770C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S770C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S770C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S770C4*)(S770C3*), 0, "S770C2");
    check_base_class_offset(lv, (S770C4*)(S770C3*), 0, "S770C2");
    check_base_class_offset(lv, (S770C3*), 0, "S770C2");
    check_field_offset(lv, s770c2f0, ABISELECT(80,44), "S770C2.s770c2f0");
    check_field_offset(lv, s770c2f1, ABISELECT(120,68), "S770C2.s770c2f1");
    check_field_offset(lv, s770c2f2, ABISELECT(128,72), "S770C2.s770c2f2");
    test_class_info(&lv, &cd_S770C2);
    dp->~S770C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS770C2(Test_S770C2, "S770C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S770C2C1Ev();
extern void _ZN6S770C2D1Ev();
Name_Map name_map_S770C2[] = {
  NSPAIR(_ZN6S770C2C1Ev),
  NSPAIR(_ZN6S770C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S770C4;
extern VTBL_ENTRY _ZTI6S770C4[];
extern  VTBL_ENTRY _ZTV6S770C4[];
extern Class_Descriptor cd_S770C3;
extern VTBL_ENTRY _ZTI6S770C3[];
extern  VTBL_ENTRY _ZTV6S770C3[];
static Base_Class bases_S770C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S770C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S770C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S770C2[];
extern void _ZN6S770C2D1Ev();
extern void _ZN6S770C2D0Ev();
extern void _ZN6S770C42v7Ev();
extern void _ZN6S770C42v8Ev();
extern void _ZN6S770C42v9Ev();
extern void _ZN6S770C43v10Ev();
extern void _ZN6S770C43v11Ev();
extern void _ZN6S770C33v12Ev();
extern void _ZN6S770C33v13Ev();
extern void _ZN6S770C33v14Ev();
extern void _ZN6S770C33v15Ev();
extern void _ZN6S770C33v16Ev();
extern void _ZN6S770C33v17Ev();
extern void _ZN6S770C33v18Ev();
extern void _ZN6S770C33v19Ev();
extern void _ZN6S770C33v20Ev();
extern void _ZN6S770C33v21Ev();
extern void _ZN6S770C33v22Ev();
extern void _ZN6S770C23v23Ev();
extern void _ZN6S770C23v24Ev();
extern void _ZN6S770C23v25Ev();
extern void _ZN6S770C23v26Ev();
extern void _ZN6S770C23v27Ev();
extern void _ZN6S770C23v28Ev();
extern void _ZN6S770C23v29Ev();
extern void _ZN6S770C23v30Ev();
static  VTBL_ENTRY vtc_S770C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S770C2[0]),
  (VTBL_ENTRY)&_ZN6S770C2D1Ev,
  (VTBL_ENTRY)&_ZN6S770C2D0Ev,
  (VTBL_ENTRY)&_ZN6S770C42v7Ev,
  (VTBL_ENTRY)&_ZN6S770C42v8Ev,
  (VTBL_ENTRY)&_ZN6S770C42v9Ev,
  (VTBL_ENTRY)&_ZN6S770C43v10Ev,
  (VTBL_ENTRY)&_ZN6S770C43v11Ev,
  (VTBL_ENTRY)&_ZN6S770C33v12Ev,
  (VTBL_ENTRY)&_ZN6S770C33v13Ev,
  (VTBL_ENTRY)&_ZN6S770C33v14Ev,
  (VTBL_ENTRY)&_ZN6S770C33v15Ev,
  (VTBL_ENTRY)&_ZN6S770C33v16Ev,
  (VTBL_ENTRY)&_ZN6S770C33v17Ev,
  (VTBL_ENTRY)&_ZN6S770C33v18Ev,
  (VTBL_ENTRY)&_ZN6S770C33v19Ev,
  (VTBL_ENTRY)&_ZN6S770C33v20Ev,
  (VTBL_ENTRY)&_ZN6S770C33v21Ev,
  (VTBL_ENTRY)&_ZN6S770C33v22Ev,
  (VTBL_ENTRY)&_ZN6S770C23v23Ev,
  (VTBL_ENTRY)&_ZN6S770C23v24Ev,
  (VTBL_ENTRY)&_ZN6S770C23v25Ev,
  (VTBL_ENTRY)&_ZN6S770C23v26Ev,
  (VTBL_ENTRY)&_ZN6S770C23v27Ev,
  (VTBL_ENTRY)&_ZN6S770C23v28Ev,
  (VTBL_ENTRY)&_ZN6S770C23v29Ev,
  (VTBL_ENTRY)&_ZN6S770C23v30Ev,
};
extern VTBL_ENTRY _ZTI6S770C2[];
extern  VTBL_ENTRY _ZTV6S770C2[];
Class_Descriptor cd_S770C2 = {  "S770C2", // class name
  bases_S770C2, 3,
  &(vtc_S770C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S770C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S770C2),28, //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  S770C11_nt  {
  char s770c11f0[20];
};
//SIG(-1 S770C11_nt) C1{ Fc[20]}



//skip512 S770C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C10_nt  {
  ::S770C11_nt s770c10f0;
  char s770c10f1[16];
};
//SIG(-1 S770C10_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S770C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C14  {
  char s770c14f0[52];
};
//SIG(-1 S770C14) C1{ Fc[52]}



static void Test_S770C14()
{
  {
    init_simple_test("S770C14");
    S770C14 lv;
    check2(sizeof(lv), 52, "sizeof(S770C14)");
    check2(__alignof__(lv), 1, "__alignof__(S770C14)");
    check_field_offset(lv, s770c14f0, 0, "S770C14.s770c14f0");
  }
}
static Arrange_To_Call_Me vS770C14(Test_S770C14, "S770C14", 52);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C15_nt  {
  char s770c15f0[128];
};
//SIG(-1 S770C15_nt) C1{ Fc[128]}



//skip512 S770C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C13  {
  ::S770C10_nt s770c13f0;
  ::S770C14 s770c13f1;
  ::S770C15_nt s770c13f2;
};
//SIG(-1 S770C13) C1{ FC2{ FC3{ Fc[20]} Fc[16]} FC4{ Fc[52]} FC5{ Fc[128]}}



static void Test_S770C13()
{
  {
    init_simple_test("S770C13");
    S770C13 lv;
    check2(sizeof(lv), 216, "sizeof(S770C13)");
    check2(__alignof__(lv), 1, "__alignof__(S770C13)");
    check_field_offset(lv, s770c13f0, 0, "S770C13.s770c13f0");
    check_field_offset(lv, s770c13f1, 36, "S770C13.s770c13f1");
    check_field_offset(lv, s770c13f2, 88, "S770C13.s770c13f2");
  }
}
static Arrange_To_Call_Me vS770C13(Test_S770C13, "S770C13", 216);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C16_nt  {
  char s770c16f0[4];
};
//SIG(-1 S770C16_nt) C1{ Fc[4]}



//skip512 S770C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C17  {
  int s770c17f0[3];
  char s770c17f1[4];
};
//SIG(-1 S770C17) C1{ Fi[3] Fc[4]}



static void Test_S770C17()
{
  {
    init_simple_test("S770C17");
    S770C17 lv;
    check2(sizeof(lv), 16, "sizeof(S770C17)");
    check2(__alignof__(lv), 4, "__alignof__(S770C17)");
    check_field_offset(lv, s770c17f0, 0, "S770C17.s770c17f0");
    check_field_offset(lv, s770c17f1, 12, "S770C17.s770c17f1");
  }
}
static Arrange_To_Call_Me vS770C17(Test_S770C17, "S770C17", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C18_nt  {
  char s770c18f0[64];
};
//SIG(-1 S770C18_nt) C1{ Fc[64]}



//skip512 S770C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C20_nt  {
  int s770c20f0;
  int s770c20f1;
};
//SIG(1 S770C20_nt) C1{ Fi[2]}



//skip512 S770C20_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C21  {
  int s770c21f0;
  int s770c21f1;
  int s770c21f2;
  char s770c21f3[128];
};
//SIG(1 S770C21) C1{ Fi[3] Fc[128]}



static void Test_S770C21()
{
  {
    init_simple_test("S770C21");
    S770C21 lv;
    check2(sizeof(lv), 140, "sizeof(S770C21)");
    check2(__alignof__(lv), 4, "__alignof__(S770C21)");
    check_field_offset(lv, s770c21f0, 0, "S770C21.s770c21f0");
    check_field_offset(lv, s770c21f1, 4, "S770C21.s770c21f1");
    check_field_offset(lv, s770c21f2, 8, "S770C21.s770c21f2");
    check_field_offset(lv, s770c21f3, 12, "S770C21.s770c21f3");
  }
}
static Arrange_To_Call_Me vS770C21(Test_S770C21, "S770C21", 140);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S770C19  {
  ::S770C20_nt s770c19f0;
  __tsi64 s770c19f1;
  ::S770C21 s770c19f2;
};
//SIG(1 S770C19) U1{ FC2{ Fi Fi} FL FC3{ Fi Fi Fi Fc[128]}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S770C12  {
  ::S770C13 s770c12f0;
  ::S770C16_nt s770c12f1;
  ::S770C17 s770c12f2;
  int s770c12f3;
  ::S770C18_nt s770c12f4;
  ::S770C19 s770c12f5;
  int s770c12f6;
};
//SIG(-1 S770C12) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fc[52]} FC6{ Fc[128]}} FC7{ Fc[4]} FC8{ Fi[3] Fc[4]} Fi FC9{ Fc[64]} FU10{ FC11{ Fi Fi} FL FC12{ Fi Fi Fi Fc[128]}} Fi}



static void Test_S770C12()
{
  {
    init_simple_test("S770C12");
    S770C12 lv;
    check2(sizeof(lv), ABISELECT(456,448), "sizeof(S770C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S770C12)");
    check_field_offset(lv, s770c12f0, 0, "S770C12.s770c12f0");
    check_field_offset(lv, s770c12f1, 216, "S770C12.s770c12f1");
    check_field_offset(lv, s770c12f2, 220, "S770C12.s770c12f2");
    check_field_offset(lv, s770c12f3, 236, "S770C12.s770c12f3");
    check_field_offset(lv, s770c12f4, 240, "S770C12.s770c12f4");
    check_field_offset(lv, s770c12f5, 304, "S770C12.s770c12f5");
    check_field_offset(lv, s770c12f6, ABISELECT(448,444), "S770C12.s770c12f6");
  }
}
static Arrange_To_Call_Me vS770C12(Test_S770C12, "S770C12", ABISELECT(456,448));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C25  {
  char s770c25f0[9];
  char s770c25f1;
  char s770c25f2;
  char s770c25f3;
};
//SIG(-1 S770C25) C1{ Fc[12]}



static void Test_S770C25()
{
  {
    init_simple_test("S770C25");
    S770C25 lv;
    check2(sizeof(lv), 12, "sizeof(S770C25)");
    check2(__alignof__(lv), 1, "__alignof__(S770C25)");
    check_field_offset(lv, s770c25f0, 0, "S770C25.s770c25f0");
    check_field_offset(lv, s770c25f1, 9, "S770C25.s770c25f1");
    check_field_offset(lv, s770c25f2, 10, "S770C25.s770c25f2");
    check_field_offset(lv, s770c25f3, 11, "S770C25.s770c25f3");
  }
}
static Arrange_To_Call_Me vS770C25(Test_S770C25, "S770C25", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C27  {
  int s770c27f0;
  int s770c27f1;
  char s770c27f2[192];
  char s770c27f3[128];
  int s770c27f4;
};
//SIG(-1 S770C27) C1{ Fi[2] Fc[320] Fi}



static void Test_S770C27()
{
  {
    init_simple_test("S770C27");
    S770C27 lv;
    check2(sizeof(lv), 332, "sizeof(S770C27)");
    check2(__alignof__(lv), 4, "__alignof__(S770C27)");
    check_field_offset(lv, s770c27f0, 0, "S770C27.s770c27f0");
    check_field_offset(lv, s770c27f1, 4, "S770C27.s770c27f1");
    check_field_offset(lv, s770c27f2, 8, "S770C27.s770c27f2");
    check_field_offset(lv, s770c27f3, 200, "S770C27.s770c27f3");
    check_field_offset(lv, s770c27f4, 328, "S770C27.s770c27f4");
  }
}
static Arrange_To_Call_Me vS770C27(Test_S770C27, "S770C27", 332);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C26  {
  int s770c26f0;
  char s770c26f1[128];
  ::S770C27 s770c26f2;
};
//SIG(-1 S770C26) C1{ Fi Fc[128] FC2{ Fi[2] Fc[320] Fi}}



static void Test_S770C26()
{
  {
    init_simple_test("S770C26");
    S770C26 lv;
    check2(sizeof(lv), 464, "sizeof(S770C26)");
    check2(__alignof__(lv), 4, "__alignof__(S770C26)");
    check_field_offset(lv, s770c26f0, 0, "S770C26.s770c26f0");
    check_field_offset(lv, s770c26f1, 4, "S770C26.s770c26f1");
    check_field_offset(lv, s770c26f2, 132, "S770C26.s770c26f2");
  }
}
static Arrange_To_Call_Me vS770C26(Test_S770C26, "S770C26", 464);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C24  {
  int s770c24f0;
  ::S770C25 s770c24f1;
  char s770c24f2[48];
  ::S770C25 s770c24f3;
  ::S770C25 s770c24f4;
  ::S770C26 s770c24f5;
};
//SIG(-1 S770C24) C1{ Fi FC2{ Fc[12]} Fc[48] FC2 FC2 FC3{ Fi Fc[128] FC4{ Fi[2] Fc[320] Fi}}}



static void Test_S770C24()
{
  {
    init_simple_test("S770C24");
    S770C24 lv;
    check2(sizeof(lv), 552, "sizeof(S770C24)");
    check2(__alignof__(lv), 4, "__alignof__(S770C24)");
    check_field_offset(lv, s770c24f0, 0, "S770C24.s770c24f0");
    check_field_offset(lv, s770c24f1, 4, "S770C24.s770c24f1");
    check_field_offset(lv, s770c24f2, 16, "S770C24.s770c24f2");
    check_field_offset(lv, s770c24f3, 64, "S770C24.s770c24f3");
    check_field_offset(lv, s770c24f4, 76, "S770C24.s770c24f4");
    check_field_offset(lv, s770c24f5, 88, "S770C24.s770c24f5");
  }
}
static Arrange_To_Call_Me vS770C24(Test_S770C24, "S770C24", 552);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S770C1  : S770C2 {
  ::S770C10_nt s770c1f0;
  ::S770C12 s770c1f1;
  ::S2215C20_nt s770c1f2;
  ::S2215C20_nt s770c1f3;
  ::S2215C20_nt s770c1f4;
  ::S2215C20_nt s770c1f5;
  ::S2215C20_nt s770c1f6;
  char s770c1f7;
  __tsi64 s770c1f8;
  int s770c1f9;
  int s770c1f10;
  ::S2215C20_nt s770c1f11;
  int s770c1f12;
  int s770c1f13;
  ::S770C24 s770c1f14;
  __tsi64 s770c1f15;
  ::S2215C20_nt s770c1f16;
  __tsi64 s770c1f17;
  char s770c1f18;
  ::S2215C20_nt s770c1f19;
  ::S2215C20_nt s770c1f20;
  char s770c1f21;
  __tsi64 s770c1f22;
  int s770c1f23;
  char s770c1f24;
  char s770c1f25;
  char s770c1f26;
  char s770c1f27;
  char s770c1f28;
  char s770c1f29;
  ::S770C9_nt s770c1f30;
  void *s770c1f31;
  int s770c1f32;
  int s770c1f33;
  virtual  ~S770C1(); // _ZN6S770C1D1Ev
  virtual void  v1(); // _ZN6S770C12v1Ev
  virtual void  v2(); // _ZN6S770C12v2Ev
  virtual void  v3(); // _ZN6S770C12v3Ev
  virtual void  v4(); // _ZN6S770C12v4Ev
  virtual void  v5(); // _ZN6S770C12v5Ev
  virtual void  v6(); // _ZN6S770C12v6Ev
  S770C1(); // tgen
};
//SIG(1 S770C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v7 v8 v9 v10 v11} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v23 v24 v25 v26 v27 v28 v29 v30 FC6 FC9{ m Fp} Fp[3]} vd v1 v2 v3 v4 v5 v6 FC10{ FC11{ Fc[20]} Fc[16]} FC12{ FC13{ FC10 FC14{ Fc[52]} FC15{ Fc[128]}} FC16{ Fc[4]} FC17{ Fi[3] Fc[4]} Fi FC18{ Fc[64]} FU19{ FC20{ Fi Fi} FL FC21{ Fi Fi Fi Fc[128]}} Fi} FC22{ m Fp Fi FC23{ m}} FC22 FC22 FC22 FC22 Fc FL Fi Fi FC22 Fi Fi FC24{ Fi FC25{ Fc[9] Fc Fc Fc} Fc[48] FC25 FC25 FC26{ Fi Fc[128] FC27{ Fi Fi Fc[192] Fc[128] Fi}}} FL FC22 FL Fc FC22 FC22 Fc FL Fi Fc Fc Fc Fc Fc Fc FC9 Fp Fi Fi}


 S770C1 ::~S770C1(){ note_dtor("S770C1", this);}
void  S770C1 ::v1(){vfunc_called(this, "_ZN6S770C12v1Ev");}
void  S770C1 ::v2(){vfunc_called(this, "_ZN6S770C12v2Ev");}
void  S770C1 ::v3(){vfunc_called(this, "_ZN6S770C12v3Ev");}
void  S770C1 ::v4(){vfunc_called(this, "_ZN6S770C12v4Ev");}
void  S770C1 ::v5(){vfunc_called(this, "_ZN6S770C12v5Ev");}
void  S770C1 ::v6(){vfunc_called(this, "_ZN6S770C12v6Ev");}
S770C1 ::S770C1(){ note_ctor("S770C1", this);} // tgen

static void Test_S770C1()
{
  extern Class_Descriptor cd_S770C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(183,330)];
    init_test(&cd_S770C1, buf);
    S770C1 *dp, &lv = *(dp=new (buf) S770C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1456,1316), "sizeof(S770C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S770C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S770C4*)(S770C3*)(S770C2*), 0, "S770C1");
    check_base_class_offset(lv, (S770C4*)(S770C3*)(S770C2*), 0, "S770C1");
    check_base_class_offset(lv, (S770C3*)(S770C2*), 0, "S770C1");
    check_base_class_offset(lv, (S770C2*), 0, "S770C1");
    check_field_offset(lv, s770c1f0, ABISELECT(152,84), "S770C1.s770c1f0");
    check_field_offset(lv, s770c1f1, ABISELECT(192,120), "S770C1.s770c1f1");
    check_field_offset(lv, s770c1f2, ABISELECT(648,568), "S770C1.s770c1f2");
    check_field_offset(lv, s770c1f3, ABISELECT(664,580), "S770C1.s770c1f3");
    check_field_offset(lv, s770c1f4, ABISELECT(680,592), "S770C1.s770c1f4");
    check_field_offset(lv, s770c1f5, ABISELECT(696,604), "S770C1.s770c1f5");
    check_field_offset(lv, s770c1f6, ABISELECT(712,616), "S770C1.s770c1f6");
    check_field_offset(lv, s770c1f7, ABISELECT(728,628), "S770C1.s770c1f7");
    check_field_offset(lv, s770c1f8, ABISELECT(736,632), "S770C1.s770c1f8");
    check_field_offset(lv, s770c1f9, ABISELECT(744,640), "S770C1.s770c1f9");
    check_field_offset(lv, s770c1f10, ABISELECT(748,644), "S770C1.s770c1f10");
    check_field_offset(lv, s770c1f11, ABISELECT(752,648), "S770C1.s770c1f11");
    check_field_offset(lv, s770c1f12, ABISELECT(768,660), "S770C1.s770c1f12");
    check_field_offset(lv, s770c1f13, ABISELECT(772,664), "S770C1.s770c1f13");
    check_field_offset(lv, s770c1f14, ABISELECT(776,668), "S770C1.s770c1f14");
    check_field_offset(lv, s770c1f15, ABISELECT(1328,1220), "S770C1.s770c1f15");
    check_field_offset(lv, s770c1f16, ABISELECT(1336,1228), "S770C1.s770c1f16");
    check_field_offset(lv, s770c1f17, ABISELECT(1352,1240), "S770C1.s770c1f17");
    check_field_offset(lv, s770c1f18, ABISELECT(1360,1248), "S770C1.s770c1f18");
    check_field_offset(lv, s770c1f19, ABISELECT(1368,1252), "S770C1.s770c1f19");
    check_field_offset(lv, s770c1f20, ABISELECT(1384,1264), "S770C1.s770c1f20");
    check_field_offset(lv, s770c1f21, ABISELECT(1400,1276), "S770C1.s770c1f21");
    check_field_offset(lv, s770c1f22, ABISELECT(1408,1280), "S770C1.s770c1f22");
    check_field_offset(lv, s770c1f23, ABISELECT(1416,1288), "S770C1.s770c1f23");
    check_field_offset(lv, s770c1f24, ABISELECT(1420,1292), "S770C1.s770c1f24");
    check_field_offset(lv, s770c1f25, ABISELECT(1421,1293), "S770C1.s770c1f25");
    check_field_offset(lv, s770c1f26, ABISELECT(1422,1294), "S770C1.s770c1f26");
    check_field_offset(lv, s770c1f27, ABISELECT(1423,1295), "S770C1.s770c1f27");
    check_field_offset(lv, s770c1f28, ABISELECT(1424,1296), "S770C1.s770c1f28");
    check_field_offset(lv, s770c1f29, ABISELECT(1425,1297), "S770C1.s770c1f29");
    check_field_offset(lv, s770c1f30, ABISELECT(1432,1300), "S770C1.s770c1f30");
    check_field_offset(lv, s770c1f31, ABISELECT(1440,1304), "S770C1.s770c1f31");
    check_field_offset(lv, s770c1f32, ABISELECT(1448,1308), "S770C1.s770c1f32");
    check_field_offset(lv, s770c1f33, ABISELECT(1452,1312), "S770C1.s770c1f33");
    test_class_info(&lv, &cd_S770C1);
    dp->~S770C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS770C1(Test_S770C1, "S770C1", ABISELECT(1456,1316));

#else // __cplusplus

extern void _ZN6S770C1C1Ev();
extern void _ZN6S770C1D1Ev();
Name_Map name_map_S770C1[] = {
  NSPAIR(_ZN6S770C1C1Ev),
  NSPAIR(_ZN6S770C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S770C4;
extern VTBL_ENTRY _ZTI6S770C4[];
extern  VTBL_ENTRY _ZTV6S770C4[];
extern Class_Descriptor cd_S770C3;
extern VTBL_ENTRY _ZTI6S770C3[];
extern  VTBL_ENTRY _ZTV6S770C3[];
extern Class_Descriptor cd_S770C2;
extern VTBL_ENTRY _ZTI6S770C2[];
extern  VTBL_ENTRY _ZTV6S770C2[];
static Base_Class bases_S770C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S770C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S770C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S770C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S770C1[];
extern void _ZN6S770C1D1Ev();
extern void _ZN6S770C1D0Ev();
extern void _ZN6S770C42v7Ev();
extern void _ZN6S770C42v8Ev();
extern void _ZN6S770C42v9Ev();
extern void _ZN6S770C43v10Ev();
extern void _ZN6S770C43v11Ev();
extern void _ZN6S770C33v12Ev();
extern void _ZN6S770C33v13Ev();
extern void _ZN6S770C33v14Ev();
extern void _ZN6S770C33v15Ev();
extern void _ZN6S770C33v16Ev();
extern void _ZN6S770C33v17Ev();
extern void _ZN6S770C33v18Ev();
extern void _ZN6S770C33v19Ev();
extern void _ZN6S770C33v20Ev();
extern void _ZN6S770C33v21Ev();
extern void _ZN6S770C33v22Ev();
extern void _ZN6S770C23v23Ev();
extern void _ZN6S770C23v24Ev();
extern void _ZN6S770C23v25Ev();
extern void _ZN6S770C23v26Ev();
extern void _ZN6S770C23v27Ev();
extern void _ZN6S770C23v28Ev();
extern void _ZN6S770C23v29Ev();
extern void _ZN6S770C23v30Ev();
extern void _ZN6S770C12v1Ev();
extern void _ZN6S770C12v2Ev();
extern void _ZN6S770C12v3Ev();
extern void _ZN6S770C12v4Ev();
extern void _ZN6S770C12v5Ev();
extern void _ZN6S770C12v6Ev();
static  VTBL_ENTRY vtc_S770C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S770C1[0]),
  (VTBL_ENTRY)&_ZN6S770C1D1Ev,
  (VTBL_ENTRY)&_ZN6S770C1D0Ev,
  (VTBL_ENTRY)&_ZN6S770C42v7Ev,
  (VTBL_ENTRY)&_ZN6S770C42v8Ev,
  (VTBL_ENTRY)&_ZN6S770C42v9Ev,
  (VTBL_ENTRY)&_ZN6S770C43v10Ev,
  (VTBL_ENTRY)&_ZN6S770C43v11Ev,
  (VTBL_ENTRY)&_ZN6S770C33v12Ev,
  (VTBL_ENTRY)&_ZN6S770C33v13Ev,
  (VTBL_ENTRY)&_ZN6S770C33v14Ev,
  (VTBL_ENTRY)&_ZN6S770C33v15Ev,
  (VTBL_ENTRY)&_ZN6S770C33v16Ev,
  (VTBL_ENTRY)&_ZN6S770C33v17Ev,
  (VTBL_ENTRY)&_ZN6S770C33v18Ev,
  (VTBL_ENTRY)&_ZN6S770C33v19Ev,
  (VTBL_ENTRY)&_ZN6S770C33v20Ev,
  (VTBL_ENTRY)&_ZN6S770C33v21Ev,
  (VTBL_ENTRY)&_ZN6S770C33v22Ev,
  (VTBL_ENTRY)&_ZN6S770C23v23Ev,
  (VTBL_ENTRY)&_ZN6S770C23v24Ev,
  (VTBL_ENTRY)&_ZN6S770C23v25Ev,
  (VTBL_ENTRY)&_ZN6S770C23v26Ev,
  (VTBL_ENTRY)&_ZN6S770C23v27Ev,
  (VTBL_ENTRY)&_ZN6S770C23v28Ev,
  (VTBL_ENTRY)&_ZN6S770C23v29Ev,
  (VTBL_ENTRY)&_ZN6S770C23v30Ev,
  (VTBL_ENTRY)&_ZN6S770C12v1Ev,
  (VTBL_ENTRY)&_ZN6S770C12v2Ev,
  (VTBL_ENTRY)&_ZN6S770C12v3Ev,
  (VTBL_ENTRY)&_ZN6S770C12v4Ev,
  (VTBL_ENTRY)&_ZN6S770C12v5Ev,
  (VTBL_ENTRY)&_ZN6S770C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S770C1[];
extern  VTBL_ENTRY _ZTV6S770C1[];
Class_Descriptor cd_S770C1 = {  "S770C1", // class name
  bases_S770C1, 4,
  &(vtc_S770C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1456,1316), // object size
  NSPAIRA(_ZTI6S770C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S770C1),34, //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  S7799C7  {
  int s7799c7f0;
  void *s7799c7f1;
  ::S281C37_nt s7799c7f2;
  virtual void  v3(); // _ZN7S7799C72v3Ev
  ~S7799C7(); // tgen
  S7799C7(); // tgen
};
//SIG(-1 S7799C7) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S7799C7()
{
  extern Class_Descriptor cd_S7799C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7799C7, buf);
    S7799C7 *dp, &lv = *(dp=new (buf) S7799C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7799C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7799C7)");
    check_field_offset(lv, s7799c7f0, ABISELECT(8,4), "S7799C7.s7799c7f0");
    check_field_offset(lv, s7799c7f1, ABISELECT(16,8), "S7799C7.s7799c7f1");
    check_field_offset(lv, s7799c7f2, ABISELECT(24,12), "S7799C7.s7799c7f2");
    test_class_info(&lv, &cd_S7799C7);
    dp->~S7799C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C7(Test_S7799C7, "S7799C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7799C7C1Ev();
extern void _ZN7S7799C7D1Ev();
Name_Map name_map_S7799C7[] = {
  NSPAIR(_ZN7S7799C7C1Ev),
  NSPAIR(_ZN7S7799C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7799C7[];
extern void _ZN7S7799C72v3Ev();
static  VTBL_ENTRY vtc_S7799C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C7[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
};
extern VTBL_ENTRY _ZTI7S7799C7[];
extern  VTBL_ENTRY _ZTV7S7799C7[];
Class_Descriptor cd_S7799C7 = {  "S7799C7", // class name
  0,0,//no base classes
  &(vtc_S7799C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7799C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7799C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7799C4  {
  int s7799c4f0[6];
  char s7799c4f1:2;
  long double s7799c4f2;
  void *s7799c4f3[2];
  int s7799c4f4;
  long double s7799c4f5;
  ::S20176C3_nt s7799c4f6;
  ::S281C37_nt s7799c4f7;
  ::S281C37_nt s7799c4f8[9];
  void *s7799c4f9;
  ::S7799C7 s7799c4f10;
  ::S7799C7 s7799c4f11;
  virtual void  v4(); // _ZN7S7799C42v4Ev
  ~S7799C4(); // tgen
  S7799C4(); // tgen
};
//SIG(-1 S7799C4) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


void  S7799C4 ::v4(){vfunc_called(this, "_ZN7S7799C42v4Ev");}
S7799C4 ::~S7799C4(){ note_dtor("S7799C4", this);} // tgen
S7799C4 ::S7799C4(){ note_ctor("S7799C4", this);} // tgen

static void Test_S7799C4()
{
  extern Class_Descriptor cd_S7799C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S7799C4, buf);
    S7799C4 *dp, &lv = *(dp=new (buf) S7799C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S7799C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7799C4)");
    check_field_offset(lv, s7799c4f0, ABISELECT(8,4), "S7799C4.s7799c4f0");
    set_bf_and_test(lv, s7799c4f1, ABISELECT(32,28), 0, 2, 1, "S7799C4");
    set_bf_and_test(lv, s7799c4f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S7799C4");
    check_field_offset(lv, s7799c4f2, ABISELECT(48,32), "S7799C4.s7799c4f2");
    check_field_offset(lv, s7799c4f3, ABISELECT(64,44), "S7799C4.s7799c4f3");
    check_field_offset(lv, s7799c4f4, ABISELECT(80,52), "S7799C4.s7799c4f4");
    check_field_offset(lv, s7799c4f5, ABISELECT(96,56), "S7799C4.s7799c4f5");
    check_field_offset(lv, s7799c4f6, ABISELECT(112,68), "S7799C4.s7799c4f6");
    check_field_offset(lv, s7799c4f7, ABISELECT(120,72), "S7799C4.s7799c4f7");
    check_field_offset(lv, s7799c4f8, ABISELECT(136,80), "S7799C4.s7799c4f8");
    check_field_offset(lv, s7799c4f9, ABISELECT(280,152), "S7799C4.s7799c4f9");
    check_field_offset(lv, s7799c4f10, ABISELECT(288,156), "S7799C4.s7799c4f10");
    check_field_offset(lv, s7799c4f11, ABISELECT(328,176), "S7799C4.s7799c4f11");
    test_class_info(&lv, &cd_S7799C4);
    dp->~S7799C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C4(Test_S7799C4, "S7799C4", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN7S7799C4C1Ev();
extern void _ZN7S7799C4D1Ev();
Name_Map name_map_S7799C4[] = {
  NSPAIR(_ZN7S7799C4C1Ev),
  NSPAIR(_ZN7S7799C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7799C4[];
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY vtc_S7799C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C4[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
Class_Descriptor cd_S7799C4 = {  "S7799C4", // class name
  0,0,//no base classes
  &(vtc_S7799C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI7S7799C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7799C4),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7799C10  : S7799C7 , virtual S7799C4 , virtual S281C37_nt {
  void *s7799c10f0;
  __tsi64 s7799c10f1;
  char s7799c10f2[2];
  ::S7799C4 s7799c10f3;
  short s7799c10f4[7];
  int s7799c10f5;
  char s7799c10f6;
  int s7799c10f7:20;
  virtual void  v5(); // _ZN8S7799C102v5Ev
  ~S7799C10(); // tgen
  S7799C10(); // tgen
};
//SIG(-1 S7799C10) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


void  S7799C10 ::v5(){vfunc_called(this, "_ZN8S7799C102v5Ev");}
S7799C10 ::~S7799C10(){ note_dtor("S7799C10", this);} // tgen
S7799C10 ::S7799C10(){ note_ctor("S7799C10", this);} // tgen

static void Test_S7799C10()
{
  extern Class_Descriptor cd_S7799C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S7799C10, buf);
    S7799C10 *dp, &lv = *(dp=new (buf) S7799C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S7799C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7799C10)");
    check_base_class_offset(lv, (S7799C7*), 0, "S7799C10");
    check_base_class_offset(lv, (S7799C4*), ABISELECT(464,256), "S7799C10");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S7799C10");
    check_field_offset(lv, s7799c10f0, ABISELECT(40,20), "S7799C10.s7799c10f0");
    check_field_offset(lv, s7799c10f1, ABISELECT(48,24), "S7799C10.s7799c10f1");
    check_field_offset(lv, s7799c10f2, ABISELECT(56,32), "S7799C10.s7799c10f2");
    check_field_offset(lv, s7799c10f3, ABISELECT(64,36), "S7799C10.s7799c10f3");
    check_field_offset(lv, s7799c10f4, ABISELECT(432,232), "S7799C10.s7799c10f4");
    check_field_offset(lv, s7799c10f5, ABISELECT(448,248), "S7799C10.s7799c10f5");
    check_field_offset(lv, s7799c10f6, ABISELECT(452,252), "S7799C10.s7799c10f6");
    set_bf_and_test(lv, s7799c10f7, ABISELECT(453,253), 0, 20, 1, "S7799C10");
    set_bf_and_test(lv, s7799c10f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S7799C10");
    test_class_info(&lv, &cd_S7799C10);
    dp->~S7799C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C10(Test_S7799C10, "S7799C10", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN8S7799C10C1Ev();
extern void _ZN8S7799C10D1Ev();
Name_Map name_map_S7799C10[] = {
  NSPAIR(_ZN8S7799C10C1Ev),
  NSPAIR(_ZN8S7799C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7799C7;
extern VTBL_ENTRY _ZTI7S7799C7[];
extern  VTBL_ENTRY _ZTV7S7799C7[];
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S7799C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7799C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7799C4,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7799C10[];
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY vtc_S7799C10[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S7799C10[];
static  VTT_ENTRY vtt_S7799C10[] = {
  {&(_ZTV8S7799C10[4]),  4,10},
  {&(_ZTV8S7799C10[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S7799C10[];
extern  VTBL_ENTRY _ZTV8S7799C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C10[];
Class_Descriptor cd_S7799C10 = {  "S7799C10", // class name
  bases_S7799C10, 3,
  &(vtc_S7799C10[0]), // expected_vtbl_contents
  &(vtt_S7799C10[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI8S7799C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7799C10),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7799C10),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  S7799C9  : virtual S7799C10 {
  int s7799c9f0;
  char s7799c9f1;
  void *s7799c9f2[6];
  int s7799c9f3[2];
  void *s7799c9f4;
  ::S281C37_nt s7799c9f5;
  ~S7799C9(); // tgen
  S7799C9(); // tgen
};
//SIG(-1 S7799C9) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S7799C9()
{
  extern Class_Descriptor cd_S7799C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S7799C9, buf);
    S7799C9 *dp, &lv = *(dp=new (buf) S7799C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S7799C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7799C9)");
    check_base_class_offset(lv, (S7799C7*)(S7799C10*), ABISELECT(96,56), "S7799C9");
    check_base_class_offset(lv, (S7799C4*)(S7799C10*), ABISELECT(560,312), "S7799C9");
    check_base_class_offset(lv, (S281C37_nt*)(S7799C10*), ABISELECT(928,508), "S7799C9");
    check_base_class_offset(lv, (S7799C10*), ABISELECT(96,56), "S7799C9");
    check_field_offset(lv, s7799c9f0, ABISELECT(8,4), "S7799C9.s7799c9f0");
    check_field_offset(lv, s7799c9f1, ABISELECT(12,8), "S7799C9.s7799c9f1");
    check_field_offset(lv, s7799c9f2, ABISELECT(16,12), "S7799C9.s7799c9f2");
    check_field_offset(lv, s7799c9f3, ABISELECT(64,36), "S7799C9.s7799c9f3");
    check_field_offset(lv, s7799c9f4, ABISELECT(72,44), "S7799C9.s7799c9f4");
    check_field_offset(lv, s7799c9f5, ABISELECT(80,48), "S7799C9.s7799c9f5");
    test_class_info(&lv, &cd_S7799C9);
    dp->~S7799C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C9(Test_S7799C9, "S7799C9", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN7S7799C9C1Ev();
extern void _ZN7S7799C9D1Ev();
Name_Map name_map_S7799C9[] = {
  NSPAIR(_ZN7S7799C9C1Ev),
  NSPAIR(_ZN7S7799C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7799C7;
extern VTBL_ENTRY _ZTI7S7799C7[];
extern  VTBL_ENTRY _ZTV7S7799C7[];
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C10;
extern VTBL_ENTRY _ZTI8S7799C10[];
extern  VTBL_ENTRY _ZTV8S7799C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C10[];
static Base_Class bases_S7799C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7799C7,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7799C4,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7799C10,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7799C9[];
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY vtc_S7799C9[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7799C9[];
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C9[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C10__7S7799C9[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTT_ENTRY vtt_S7799C9[] = {
  {&(_ZTV7S7799C9[5]),  5,17},
  {&(_ZTV7S7799C9[11]),  11,17},
  {&(_ZTV7S7799C9[16]),  16,17},
  {&(_tg__ZTV8S7799C10__7S7799C9[4]),  4,6},
  {&(_tg__ZTV7S7799C4__8S7799C10__7S7799C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7799C9[];
extern  VTBL_ENTRY _ZTV7S7799C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C9[];
Class_Descriptor cd_S7799C9 = {  "S7799C9", // class name
  bases_S7799C9, 4,
  &(vtc_S7799C9[0]), // expected_vtbl_contents
  &(vtt_S7799C9[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI7S7799C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7799C9),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7799C9),5, //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  S7799C8  : virtual S7799C9 , S7799C4 , S281C37_nt {
  char s7799c8f0;
  int s7799c8f1[2];
  long double s7799c8f2[2];
  short s7799c8f3;
  void *s7799c8f4;
  int s7799c8f5;
  __tsi64 s7799c8f6;
  int s7799c8f7;
  void *s7799c8f8;
  virtual  ~S7799C8(); // _ZN7S7799C8D2Ev
  virtual void  v6(); // _ZN7S7799C82v6Ev
  S7799C8(); // tgen
};
//SIG(-1 S7799C8) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S7799C8 ::~S7799C8(){ note_dtor("S7799C8", this);}
void  S7799C8 ::v6(){vfunc_called(this, "_ZN7S7799C82v6Ev");}
S7799C8 ::S7799C8(){ note_ctor("S7799C8", this);} // tgen

static void Test_S7799C8()
{
  extern Class_Descriptor cd_S7799C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S7799C8, buf);
    S7799C8 *dp, &lv = *(dp=new (buf) S7799C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S7799C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7799C8)");
    check_base_class_offset(lv, (S7799C7*)(S7799C10*), ABISELECT(576,324), "S7799C8");
    check_base_class_offset(lv, (S7799C4*)(S7799C10*), ABISELECT(1040,580), "S7799C8");
    check_base_class_offset(lv, (S281C37_nt*)(S7799C10*), ABISELECT(1408,776), "S7799C8");
    check_base_class_offset(lv, (S7799C10*)(S7799C9*), ABISELECT(576,324), "S7799C8");
    check_base_class_offset(lv, (S7799C9*), ABISELECT(480,268), "S7799C8");
    /*is_ambiguous_... S7799C8::S7799C4 */ AMB_check_base_class_offset(lv, (S7799C4*), 0, "S7799C8");
    /*is_ambiguous_... S7799C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S7799C8");
    check_field_offset(lv, s7799c8f0, ABISELECT(384,204), "S7799C8.s7799c8f0");
    check_field_offset(lv, s7799c8f1, ABISELECT(388,208), "S7799C8.s7799c8f1");
    check_field_offset(lv, s7799c8f2, ABISELECT(400,216), "S7799C8.s7799c8f2");
    check_field_offset(lv, s7799c8f3, ABISELECT(432,240), "S7799C8.s7799c8f3");
    check_field_offset(lv, s7799c8f4, ABISELECT(440,244), "S7799C8.s7799c8f4");
    check_field_offset(lv, s7799c8f5, ABISELECT(448,248), "S7799C8.s7799c8f5");
    check_field_offset(lv, s7799c8f6, ABISELECT(456,252), "S7799C8.s7799c8f6");
    check_field_offset(lv, s7799c8f7, ABISELECT(464,260), "S7799C8.s7799c8f7");
    check_field_offset(lv, s7799c8f8, ABISELECT(472,264), "S7799C8.s7799c8f8");
    test_class_info(&lv, &cd_S7799C8);
    dp->~S7799C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C8(Test_S7799C8, "S7799C8", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN7S7799C8C1Ev();
extern void _ZN7S7799C8D2Ev();
Name_Map name_map_S7799C8[] = {
  NSPAIR(_ZN7S7799C8C1Ev),
  NSPAIR(_ZN7S7799C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7799C7;
extern VTBL_ENTRY _ZTI7S7799C7[];
extern  VTBL_ENTRY _ZTV7S7799C7[];
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C10;
extern VTBL_ENTRY _ZTI8S7799C10[];
extern  VTBL_ENTRY _ZTV8S7799C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C10[];
extern Class_Descriptor cd_S7799C9;
extern VTBL_ENTRY _ZTI7S7799C9[];
extern  VTBL_ENTRY _ZTV7S7799C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C9[];
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S7799C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7799C7,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7799C4,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C10,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7799C9,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7799C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7799C8[];
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C8D1Ev();
extern void _ZN7S7799C8D0Ev();
extern void _ZN7S7799C82v6Ev();
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY vtc_S7799C8[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7799C8[];
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C8[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C9__7S7799C8[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C9__7S7799C8[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C8[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C10__7S7799C8[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTT_ENTRY vtt_S7799C8[] = {
  {&(_ZTV7S7799C8[6]),  6,27},
  {&(_ZTV7S7799C8[15]),  15,27},
  {&(_ZTV7S7799C8[21]),  21,27},
  {&(_ZTV7S7799C8[26]),  26,27},
  {&(_tg__ZTV7S7799C9__7S7799C8[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C9__7S7799C8[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C9__7S7799C8[3]),  3,4},
  {&(_tg__ZTV8S7799C10__7S7799C8[4]),  4,6},
  {&(_tg__ZTV7S7799C4__8S7799C10__7S7799C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7799C8[];
extern  VTBL_ENTRY _ZTV7S7799C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C8[];
Class_Descriptor cd_S7799C8 = {  "S7799C8", // class name
  bases_S7799C8, 7,
  &(vtc_S7799C8[0]), // expected_vtbl_contents
  &(vtt_S7799C8[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI7S7799C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7799C8),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7799C8),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7799C3  : virtual S7799C4 , virtual S7799C8 {
  ::S7799C8 s7799c3f0[7];
  int s7799c3f1;
  short s7799c3f2;
  int s7799c3f3;
  ::S7799C10 s7799c3f4;
  __tsi64 s7799c3f5[9];
  virtual void  v7(); // _ZN7S7799C32v7Ev
  virtual void  v8(); // _ZN7S7799C32v8Ev
  ~S7799C3(); // tgen
  S7799C3(); // tgen
};
//SIG(-1 S7799C3) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 FL[9]}


void  S7799C3 ::v7(){vfunc_called(this, "_ZN7S7799C32v7Ev");}
void  S7799C3 ::v8(){vfunc_called(this, "_ZN7S7799C32v8Ev");}
S7799C3 ::~S7799C3(){ note_dtor("S7799C3", this);} // tgen
S7799C3 ::S7799C3(){ note_ctor("S7799C3", this);} // tgen

static void Test_S7799C3()
{
  extern Class_Descriptor cd_S7799C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1706)];
    init_test(&cd_S7799C3, buf);
    S7799C3 *dp, &lv = *(dp=new (buf) S7799C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6820), "sizeof(S7799C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7799C3)");
    /*is_ambiguous_... S7799C3::S7799C4 */ AMB_check_base_class_offset(lv, (S7799C4*), ABISELECT(10928,6036), "S7799C3");
    check_base_class_offset(lv, (S7799C4*)(S7799C10*), ABISELECT(10928,6036), "S7799C3");
    check_base_class_offset(lv, (S7799C7*)(S7799C10*), ABISELECT(11872,6556), "S7799C3");
    check_base_class_offset(lv, (S281C37_nt*)(S7799C10*), ABISELECT(12328,6812), "S7799C3");
    check_base_class_offset(lv, (S7799C10*)(S7799C9*), ABISELECT(11872,6556), "S7799C3");
    check_base_class_offset(lv, (S7799C9*)(S7799C8*), ABISELECT(11776,6500), "S7799C3");
    /*is_ambiguous_... S7799C8::S7799C4 */ AMB_check_base_class_offset(lv, (S7799C4*)(S7799C8*), ABISELECT(11296,6232), "S7799C3");
    /*is_ambiguous_... S7799C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7799C8*), ABISELECT(11664,6428), "S7799C3");
    check_base_class_offset(lv, (S7799C8*), ABISELECT(11296,6232), "S7799C3");
    check_field_offset(lv, s7799c3f0, ABISELECT(16,4), "S7799C3.s7799c3f0");
    check_field_offset(lv, s7799c3f1, ABISELECT(9984,5492), "S7799C3.s7799c3f1");
    check_field_offset(lv, s7799c3f2, ABISELECT(9988,5496), "S7799C3.s7799c3f2");
    check_field_offset(lv, s7799c3f3, ABISELECT(9992,5500), "S7799C3.s7799c3f3");
    check_field_offset(lv, s7799c3f4, ABISELECT(10000,5504), "S7799C3.s7799c3f4");
    check_field_offset(lv, s7799c3f5, ABISELECT(10848,5964), "S7799C3.s7799c3f5");
    test_class_info(&lv, &cd_S7799C3);
    dp->~S7799C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C3(Test_S7799C3, "S7799C3", ABISELECT(12352,6820));

#else // __cplusplus

extern void _ZN7S7799C3C1Ev();
extern void _ZN7S7799C3D1Ev();
Name_Map name_map_S7799C3[] = {
  NSPAIR(_ZN7S7799C3C1Ev),
  NSPAIR(_ZN7S7799C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S7799C7;
extern VTBL_ENTRY _ZTI7S7799C7[];
extern  VTBL_ENTRY _ZTV7S7799C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C10;
extern VTBL_ENTRY _ZTI8S7799C10[];
extern  VTBL_ENTRY _ZTV8S7799C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C10[];
extern Class_Descriptor cd_S7799C9;
extern VTBL_ENTRY _ZTI7S7799C9[];
extern  VTBL_ENTRY _ZTV7S7799C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C9[];
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C8;
extern VTBL_ENTRY _ZTI7S7799C8[];
extern  VTBL_ENTRY _ZTV7S7799C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C8[];
static Base_Class bases_S7799C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7799C4,    ABISELECT(10928,6036), //bcp->offset
    11, //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_S7799C7,    ABISELECT(11872,6556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C10,    ABISELECT(11872,6556), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7799C9,    ABISELECT(11776,6500), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7799C4,    ABISELECT(11296,6232), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C8,    ABISELECT(11296,6232), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7799C3[];
extern void _ZN7S7799C32v7Ev();
extern void _ZN7S7799C32v8Ev();
extern void _ZN7S7799C3D1Ev();
extern void _ZN7S7799C3D0Ev();
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7799C3D1Ev,_ZTv0_n32_N7S7799C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7799C3D1Ev,_ZThn6232_N7S7799C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7799C3D0Ev,_ZTv0_n32_N7S7799C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7799C3D0Ev,_ZThn6232_N7S7799C3D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY vtc_S7799C3[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7799C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7799C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C3D0Ev,
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C3D1Ev,_ZTv0_n32_N7S7799C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C3D0Ev,_ZTv0_n32_N7S7799C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern VTBL_ENTRY _ZTV7S7799C3[];
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C8D1Ev();
extern void _ZN7S7799C8D0Ev();
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__7S7799C3[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C8__7S7799C3[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C8__7S7799C3[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C8__7S7799C3[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C3[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C9__7S7799C3[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C9__7S7799C3[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C3[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C10__7S7799C3[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTT_ENTRY vtt_S7799C3[] = {
  {&(_ZTV7S7799C3[7]),  7,41},
  {&(_ZTV7S7799C3[14]),  14,41},
  {&(_ZTV7S7799C3[24]),  24,41},
  {&(_ZTV7S7799C3[33]),  33,41},
  {&(_ZTV7S7799C3[39]),  39,41},
  {&(_tg__ZTV7S7799C8__7S7799C3[6]),  6,10},
  {&(_tg__ZTV7S7799C9__7S7799C8__7S7799C3[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C8__7S7799C3[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C8__7S7799C3[3]),  3,4},
  {&(_tg__ZTV7S7799C9__7S7799C3[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C9__7S7799C3[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C9__7S7799C3[3]),  3,4},
  {&(_tg__ZTV8S7799C10__7S7799C3[4]),  4,6},
  {&(_tg__ZTV7S7799C4__8S7799C10__7S7799C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7799C3[];
extern  VTBL_ENTRY _ZTV7S7799C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C3[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C3D0Ev,_ZTv0_n32_N7S7799C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7799C3D0Ev,_ZThn6232_N7S7799C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C3D1Ev,_ZTv0_n32_N7S7799C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7799C3D1Ev,_ZThn6232_N7S7799C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7799C3 = {  "S7799C3", // class name
  bases_S7799C3, 8,
  &(vtc_S7799C3[0]), // expected_vtbl_contents
  &(vtt_S7799C3[0]), // expected_vtt_contents
  ABISELECT(12352,6820), // object size
  NSPAIRA(_ZTI7S7799C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7799C3),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7799C3),14, //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  S7799C2  : virtual S7799C3 {
  char s7799c2f0;
  int s7799c2f1[3];
  virtual  ~S7799C2(); // _ZN7S7799C2D2Ev
  S7799C2(); // tgen
};
//SIG(-1 S7799C2) C1{ VBC2{ VBC3{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v2 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v3 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v5 v6 FC7[7] Fi Fs Fi FC9 FL[9]} vd Fc Fi[3]}


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

static void Test_S7799C2()
{
  extern Class_Descriptor cd_S7799C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(775,1711)];
    init_test(&cd_S7799C2, buf);
    S7799C2 *dp, &lv = *(dp=new (buf) S7799C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12384,6840), "sizeof(S7799C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7799C2)");
    /*is_ambiguous_... S7799C3::S7799C4 */ AMB_check_base_class_offset(lv, (S7799C4*)(S7799C3*), ABISELECT(10960,6056), "S7799C2");
    check_base_class_offset(lv, (S7799C4*)(S7799C10*), ABISELECT(10960,6056), "S7799C2");
    check_base_class_offset(lv, (S7799C7*)(S7799C10*), ABISELECT(11904,6576), "S7799C2");
    check_base_class_offset(lv, (S281C37_nt*)(S7799C10*), ABISELECT(12360,6832), "S7799C2");
    check_base_class_offset(lv, (S7799C10*)(S7799C9*), ABISELECT(11904,6576), "S7799C2");
    check_base_class_offset(lv, (S7799C9*)(S7799C8*), ABISELECT(11808,6520), "S7799C2");
    /*is_ambiguous_... S7799C8::S7799C4 */ AMB_check_base_class_offset(lv, (S7799C4*)(S7799C8*), ABISELECT(11328,6252), "S7799C2");
    /*is_ambiguous_... S7799C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7799C8*), ABISELECT(11696,6448), "S7799C2");
    check_base_class_offset(lv, (S7799C8*)(S7799C3*), ABISELECT(11328,6252), "S7799C2");
    check_base_class_offset(lv, (S7799C3*), ABISELECT(32,20), "S7799C2");
    check_field_offset(lv, s7799c2f0, ABISELECT(8,4), "S7799C2.s7799c2f0");
    check_field_offset(lv, s7799c2f1, ABISELECT(12,8), "S7799C2.s7799c2f1");
    test_class_info(&lv, &cd_S7799C2);
    dp->~S7799C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C2(Test_S7799C2, "S7799C2", ABISELECT(12384,6840));

#else // __cplusplus

extern void _ZN7S7799C2C1Ev();
extern void _ZN7S7799C2D2Ev();
Name_Map name_map_S7799C2[] = {
  NSPAIR(_ZN7S7799C2C1Ev),
  NSPAIR(_ZN7S7799C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S7799C7;
extern VTBL_ENTRY _ZTI7S7799C7[];
extern  VTBL_ENTRY _ZTV7S7799C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C10;
extern VTBL_ENTRY _ZTI8S7799C10[];
extern  VTBL_ENTRY _ZTV8S7799C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C10[];
extern Class_Descriptor cd_S7799C9;
extern VTBL_ENTRY _ZTI7S7799C9[];
extern  VTBL_ENTRY _ZTV7S7799C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C9[];
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C8;
extern VTBL_ENTRY _ZTI7S7799C8[];
extern  VTBL_ENTRY _ZTV7S7799C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C8[];
extern Class_Descriptor cd_S7799C3;
extern VTBL_ENTRY _ZTI7S7799C3[];
extern  VTBL_ENTRY _ZTV7S7799C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C3[];
static Base_Class bases_S7799C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7799C4,    ABISELECT(10960,6056), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S7799C7,    ABISELECT(11904,6576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12360,6832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C10,    ABISELECT(11904,6576), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7799C9,    ABISELECT(11808,6520), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7799C4,    ABISELECT(11328,6252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11696,6448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C8,    ABISELECT(11328,6252), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7799C3,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7799C2[];
extern void _ZN7S7799C2D1Ev();
extern void _ZN7S7799C2D0Ev();
extern void _ZN7S7799C32v7Ev();
extern void _ZN7S7799C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N7S7799C2D1Ev,_ZTv0_n40_N7S7799C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7799C2D1Ev,_ZThn20_N7S7799C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7799C2D0Ev,_ZTv0_n40_N7S7799C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7799C2D0Ev,_ZThn20_N7S7799C2D0Ev)() __attribute__((weak));
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7799C2D1Ev,_ZTv0_n32_N7S7799C2D1Ev)();
extern void ABISELECT(_ZThn11328_N7S7799C2D1Ev,_ZThn6252_N7S7799C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7799C2D0Ev,_ZTv0_n32_N7S7799C2D0Ev)();
extern void ABISELECT(_ZThn11328_N7S7799C2D0Ev,_ZThn6252_N7S7799C2D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY vtc_S7799C2[] = {
  ABISELECT(12360,6832),
  ABISELECT(11904,6576),
  ABISELECT(11808,6520),
  ABISELECT(11328,6252),
  ABISELECT(10960,6056),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C2D0Ev,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7799C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7799C2D1Ev,_ZTv0_n40_N7S7799C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7799C2D0Ev,_ZTv0_n40_N7S7799C2D0Ev),
  0,
  ABISELECT(-10960,-6056),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  0,
  ABISELECT(-11328,-6252),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11328,-6252),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C2D1Ev,_ZTv0_n32_N7S7799C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C2D0Ev,_ZTv0_n32_N7S7799C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11808,-6520),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11904,-6576),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern VTBL_ENTRY _ZTV7S7799C2[];
extern void _ZN7S7799C32v7Ev();
extern void _ZN7S7799C32v8Ev();
extern void _ZN7S7799C3D1Ev();
extern void _ZN7S7799C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C3__7S7799C2[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7799C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7799C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C3D0Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C3__7S7799C2[] = {
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7799C3D1Ev,_ZTv0_n32_N7S7799C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7799C3D1Ev,_ZThn6232_N7S7799C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7799C3D0Ev,_ZTv0_n32_N7S7799C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7799C3D0Ev,_ZThn6232_N7S7799C3D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__7S7799C3__7S7799C2[] = {
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C3D1Ev,_ZTv0_n32_N7S7799C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C3D0Ev,_ZTv0_n32_N7S7799C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C3__7S7799C2[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C3__7S7799C2[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C8D1Ev();
extern void _ZN7S7799C8D0Ev();
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__7S7799C2[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C8__7S7799C2[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C8__7S7799C2[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C8__7S7799C2[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C2[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C9__7S7799C2[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C9__7S7799C2[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C2[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C10__7S7799C2[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTT_ENTRY vtt_S7799C2[] = {
  {&(_ZTV7S7799C2[8]),  8,54},
  {&(_ZTV7S7799C2[20]),  20,54},
  {&(_ZTV7S7799C2[27]),  27,54},
  {&(_ZTV7S7799C2[37]),  37,54},
  {&(_ZTV7S7799C2[46]),  46,54},
  {&(_ZTV7S7799C2[52]),  52,54},
  {&(_tg__ZTV7S7799C3__7S7799C2[7]),  7,11},
  {&(_tg__ZTV7S7799C4__7S7799C3__7S7799C2[3]),  3,4},
  {&(_tg__ZTV7S7799C8__7S7799C3__7S7799C2[9]),  9,13},
  {&(_tg__ZTV7S7799C9__7S7799C3__7S7799C2[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C3__7S7799C2[6]),  6,8},
  {&(_tg__ZTV7S7799C8__7S7799C2[6]),  6,10},
  {&(_tg__ZTV7S7799C9__7S7799C8__7S7799C2[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C8__7S7799C2[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C8__7S7799C2[3]),  3,4},
  {&(_tg__ZTV7S7799C9__7S7799C2[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C9__7S7799C2[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C9__7S7799C2[3]),  3,4},
  {&(_tg__ZTV8S7799C10__7S7799C2[4]),  4,6},
  {&(_tg__ZTV7S7799C4__8S7799C10__7S7799C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7799C2[];
extern  VTBL_ENTRY _ZTV7S7799C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C2[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C3D0Ev,_ZTv0_n32_N7S7799C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7799C3D0Ev,_ZThn6232_N7S7799C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C3D1Ev,_ZTv0_n32_N7S7799C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7799C3D1Ev,_ZThn6232_N7S7799C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C2D0Ev,_ZTv0_n32_N7S7799C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N7S7799C2D0Ev,_ZThn6252_N7S7799C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C2D1Ev,_ZTv0_n32_N7S7799C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N7S7799C2D1Ev,_ZThn6252_N7S7799C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7799C2D0Ev,_ZTv0_n40_N7S7799C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7799C2D0Ev,_ZThn20_N7S7799C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7799C2D1Ev,_ZTv0_n40_N7S7799C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7799C2D1Ev,_ZThn20_N7S7799C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7799C2 = {  "S7799C2", // class name
  bases_S7799C2, 9,
  &(vtc_S7799C2[0]), // expected_vtbl_contents
  &(vtt_S7799C2[0]), // expected_vtt_contents
  ABISELECT(12384,6840), // object size
  NSPAIRA(_ZTI7S7799C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7799C2),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7799C2),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7799C11  {
  short s7799c11f0;
  char s7799c11f1;
  __tsi64 s7799c11f2;
  void *s7799c11f3;
  int s7799c11f4;
  long double s7799c11f5;
  long s7799c11f6;
  ::S20176C18 s7799c11f7;
  char s7799c11f8:2;
  ::S7799C4 s7799c11f9;
  virtual void  v9(); // _ZN8S7799C112v9Ev
  ~S7799C11(); // tgen
  S7799C11(); // tgen
};
//SIG(-1 S7799C11) C1{ v1 Fs Fc FL Fp Fi FD Fl FC2{ BC3{ VBC4{ VBC5{ BC6{ v2 Fi Fp FC7{ m Fp[2]}} VBC8{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC9{} FC7 FC7[9] Fp FC6 FC6} VBC7 v4 Fp FL Fc[2] FC8 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC8 BC7 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC9 Fp Fi Fc[8] Fs Fi} Fc:2 FC10{ v6 Fi[6] Fc:2 FD Fp[2] Fi FD FC9 FC7 FC7[9] Fp FC11{ v7 Fi Fp FC7} FC11}}


void  S7799C11 ::v9(){vfunc_called(this, "_ZN8S7799C112v9Ev");}
S7799C11 ::~S7799C11(){ note_dtor("S7799C11", this);} // tgen
S7799C11 ::S7799C11(){ note_ctor("S7799C11", this);} // tgen

static void Test_S7799C11()
{
  extern Class_Descriptor cd_S7799C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(122,265)];
    init_test(&cd_S7799C11, buf);
    S7799C11 *dp, &lv = *(dp=new (buf) S7799C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1936,1056), "sizeof(S7799C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7799C11)");
    check_field_offset(lv, s7799c11f0, ABISELECT(8,4), "S7799C11.s7799c11f0");
    check_field_offset(lv, s7799c11f1, ABISELECT(10,6), "S7799C11.s7799c11f1");
    check_field_offset(lv, s7799c11f2, ABISELECT(16,8), "S7799C11.s7799c11f2");
    check_field_offset(lv, s7799c11f3, ABISELECT(24,16), "S7799C11.s7799c11f3");
    check_field_offset(lv, s7799c11f4, ABISELECT(32,20), "S7799C11.s7799c11f4");
    check_field_offset(lv, s7799c11f5, ABISELECT(48,24), "S7799C11.s7799c11f5");
    check_field_offset(lv, s7799c11f6, ABISELECT(64,36), "S7799C11.s7799c11f6");
    check_field_offset(lv, s7799c11f7, ABISELECT(80,40), "S7799C11.s7799c11f7");
    set_bf_and_test(lv, s7799c11f8, ABISELECT(1552,856), 0, 2, 1, "S7799C11");
    set_bf_and_test(lv, s7799c11f8, ABISELECT(1552,856), 0, 2, hide_sll(1LL<<1), "S7799C11");
    check_field_offset(lv, s7799c11f9, ABISELECT(1568,860), "S7799C11.s7799c11f9");
    test_class_info(&lv, &cd_S7799C11);
    dp->~S7799C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C11(Test_S7799C11, "S7799C11", ABISELECT(1936,1056));

#else // __cplusplus

extern void _ZN8S7799C11C1Ev();
extern void _ZN8S7799C11D1Ev();
Name_Map name_map_S7799C11[] = {
  NSPAIR(_ZN8S7799C11C1Ev),
  NSPAIR(_ZN8S7799C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7799C11[];
extern void _ZN8S7799C112v9Ev();
static  VTBL_ENTRY vtc_S7799C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C11[0]),
  (VTBL_ENTRY)&_ZN8S7799C112v9Ev,
};
extern VTBL_ENTRY _ZTI8S7799C11[];
extern  VTBL_ENTRY _ZTV8S7799C11[];
Class_Descriptor cd_S7799C11 = {  "S7799C11", // class name
  0,0,//no base classes
  &(vtc_S7799C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1936,1056), // object size
  NSPAIRA(_ZTI8S7799C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7799C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7799C13  {
  long s7799c13f0;
  char s7799c13f1;
  short s7799c13f2[2];
  virtual void  v10(); // _ZN8S7799C133v10Ev
  ~S7799C13(); // tgen
  S7799C13(); // tgen
};
//SIG(-1 S7799C13) C1{ v1 Fl Fc Fs[2]}


void  S7799C13 ::v10(){vfunc_called(this, "_ZN8S7799C133v10Ev");}
S7799C13 ::~S7799C13(){ note_dtor("S7799C13", this);} // tgen
S7799C13 ::S7799C13(){ note_ctor("S7799C13", this);} // tgen

static void Test_S7799C13()
{
  extern Class_Descriptor cd_S7799C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7799C13, buf);
    S7799C13 *dp, &lv = *(dp=new (buf) S7799C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7799C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7799C13)");
    check_field_offset(lv, s7799c13f0, ABISELECT(8,4), "S7799C13.s7799c13f0");
    check_field_offset(lv, s7799c13f1, ABISELECT(16,8), "S7799C13.s7799c13f1");
    check_field_offset(lv, s7799c13f2, ABISELECT(18,10), "S7799C13.s7799c13f2");
    test_class_info(&lv, &cd_S7799C13);
    dp->~S7799C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C13(Test_S7799C13, "S7799C13", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S7799C13C1Ev();
extern void _ZN8S7799C13D1Ev();
Name_Map name_map_S7799C13[] = {
  NSPAIR(_ZN8S7799C13C1Ev),
  NSPAIR(_ZN8S7799C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7799C13[];
extern void _ZN8S7799C133v10Ev();
static  VTBL_ENTRY vtc_S7799C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C13[0]),
  (VTBL_ENTRY)&_ZN8S7799C133v10Ev,
};
extern VTBL_ENTRY _ZTI8S7799C13[];
extern  VTBL_ENTRY _ZTV8S7799C13[];
Class_Descriptor cd_S7799C13 = {  "S7799C13", // class name
  0,0,//no base classes
  &(vtc_S7799C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S7799C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7799C13),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  S7799C16  : virtual S7799C9 , virtual S7799C8 {
  long s7799c16f0;
  void *s7799c16f1;
  ::S7799C10 s7799c16f2;
  void *s7799c16f3;
  short s7799c16f4;
  __tsi64 s7799c16f5;
  int s7799c16f6;
  __tsi64 s7799c16f7;
  ::S7799C10 s7799c16f8[4];
  int s7799c16f9;
  virtual  ~S7799C16(); // _ZN8S7799C16D2Ev
  S7799C16(); // tgen
};
//SIG(-1 S7799C16) C1{ VBC2{ VBC3{ BC4{ v1 Fi Fp FC5{ m Fp[2]}} VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC8{ VBC2 BC6 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC3 Fp Fs FL Fi FL FC3[4] Fi}


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

static void Test_S7799C16()
{
  extern Class_Descriptor cd_S7799C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(361,783)];
    init_test(&cd_S7799C16, buf);
    S7799C16 *dp, &lv = *(dp=new (buf) S7799C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5760,3128), "sizeof(S7799C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7799C16)");
    check_base_class_offset(lv, (S7799C7*)(S7799C10*), ABISELECT(4432,2400), "S7799C16");
    check_base_class_offset(lv, (S7799C4*)(S7799C10*), ABISELECT(4896,2656), "S7799C16");
    check_base_class_offset(lv, (S281C37_nt*)(S7799C10*), ABISELECT(5264,2852), "S7799C16");
    check_base_class_offset(lv, (S7799C10*)(S7799C9*), ABISELECT(4432,2400), "S7799C16");
    check_base_class_offset(lv, (S7799C9*), ABISELECT(4328,2344), "S7799C16");
    check_base_class_offset(lv, (S7799C9*)(S7799C8*), ABISELECT(4328,2344), "S7799C16");
    /*is_ambiguous_... S7799C8::S7799C4 */ AMB_check_base_class_offset(lv, (S7799C4*)(S7799C8*), ABISELECT(5280,2860), "S7799C16");
    /*is_ambiguous_... S7799C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7799C8*), ABISELECT(5648,3056), "S7799C16");
    check_base_class_offset(lv, (S7799C8*), ABISELECT(5280,2860), "S7799C16");
    check_field_offset(lv, s7799c16f0, ABISELECT(8,4), "S7799C16.s7799c16f0");
    check_field_offset(lv, s7799c16f1, ABISELECT(16,8), "S7799C16.s7799c16f1");
    check_field_offset(lv, s7799c16f2, ABISELECT(32,12), "S7799C16.s7799c16f2");
    check_field_offset(lv, s7799c16f3, ABISELECT(880,472), "S7799C16.s7799c16f3");
    check_field_offset(lv, s7799c16f4, ABISELECT(888,476), "S7799C16.s7799c16f4");
    check_field_offset(lv, s7799c16f5, ABISELECT(896,480), "S7799C16.s7799c16f5");
    check_field_offset(lv, s7799c16f6, ABISELECT(904,488), "S7799C16.s7799c16f6");
    check_field_offset(lv, s7799c16f7, ABISELECT(912,492), "S7799C16.s7799c16f7");
    check_field_offset(lv, s7799c16f8, ABISELECT(928,500), "S7799C16.s7799c16f8");
    check_field_offset(lv, s7799c16f9, ABISELECT(4320,2340), "S7799C16.s7799c16f9");
    test_class_info(&lv, &cd_S7799C16);
    dp->~S7799C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C16(Test_S7799C16, "S7799C16", ABISELECT(5760,3128));

#else // __cplusplus

extern void _ZN8S7799C16C1Ev();
extern void _ZN8S7799C16D2Ev();
Name_Map name_map_S7799C16[] = {
  NSPAIR(_ZN8S7799C16C1Ev),
  NSPAIR(_ZN8S7799C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7799C7;
extern VTBL_ENTRY _ZTI7S7799C7[];
extern  VTBL_ENTRY _ZTV7S7799C7[];
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C10;
extern VTBL_ENTRY _ZTI8S7799C10[];
extern  VTBL_ENTRY _ZTV8S7799C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C10[];
extern Class_Descriptor cd_S7799C9;
extern VTBL_ENTRY _ZTI7S7799C9[];
extern  VTBL_ENTRY _ZTV7S7799C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C9[];
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C8;
extern VTBL_ENTRY _ZTI7S7799C8[];
extern  VTBL_ENTRY _ZTV7S7799C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C8[];
static Base_Class bases_S7799C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7799C7,    ABISELECT(4432,2400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C4,    ABISELECT(4896,2656), //bcp->offset
    22, //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_S281C37_nt,    ABISELECT(5264,2852), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C10,    ABISELECT(4432,2400), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7799C9,    ABISELECT(4328,2344), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7799C4,    ABISELECT(5280,2860), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5648,3056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C8,    ABISELECT(5280,2860), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7799C16[];
extern void _ZN8S7799C16D1Ev();
extern void _ZN8S7799C16D0Ev();
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7799C16D1Ev,_ZTv0_n32_N8S7799C16D1Ev)();
extern void ABISELECT(_ZThn5280_N8S7799C16D1Ev,_ZThn2860_N8S7799C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7799C16D0Ev,_ZTv0_n32_N8S7799C16D0Ev)();
extern void ABISELECT(_ZThn5280_N8S7799C16D0Ev,_ZThn2860_N8S7799C16D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY vtc_S7799C16[] = {
  ABISELECT(5280,2860),
  ABISELECT(5264,2852),
  ABISELECT(4896,2656),
  ABISELECT(4432,2400),
  ABISELECT(4328,2344),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN8S7799C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7799C16D0Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4432,-2400),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
  0,
  ABISELECT(-4896,-2656),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  0,
  ABISELECT(-5280,-2860),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5280,-2860),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C16D1Ev,_ZTv0_n32_N8S7799C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C16D0Ev,_ZTv0_n32_N8S7799C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
extern VTBL_ENTRY _ZTV8S7799C16[];
static  VTBL_ENTRY _tg__ZTV7S7799C9__8S7799C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C9__8S7799C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C9__8S7799C16[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__8S7799C16[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C10__8S7799C16[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C8D1Ev();
extern void _ZN7S7799C8D0Ev();
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__8S7799C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C8__8S7799C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C8__8S7799C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C8__8S7799C16[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTT_ENTRY vtt_S7799C16[] = {
  {&(_ZTV8S7799C16[7]),  7,39},
  {&(_ZTV8S7799C16[14]),  14,39},
  {&(_ZTV8S7799C16[20]),  20,39},
  {&(_ZTV8S7799C16[25]),  25,39},
  {&(_ZTV8S7799C16[35]),  35,39},
  {&(_tg__ZTV7S7799C9__8S7799C16[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C9__8S7799C16[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C9__8S7799C16[3]),  3,4},
  {&(_tg__ZTV8S7799C10__8S7799C16[4]),  4,6},
  {&(_tg__ZTV7S7799C4__8S7799C10__8S7799C16[3]),  3,4},
  {&(_tg__ZTV7S7799C8__8S7799C16[6]),  6,10},
  {&(_tg__ZTV7S7799C9__7S7799C8__8S7799C16[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C8__8S7799C16[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C8__8S7799C16[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7799C16[];
extern  VTBL_ENTRY _ZTV8S7799C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C16[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C16D0Ev,_ZTv0_n32_N8S7799C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N8S7799C16D0Ev,_ZThn2860_N8S7799C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C16D1Ev,_ZTv0_n32_N8S7799C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N8S7799C16D1Ev,_ZThn2860_N8S7799C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7799C16 = {  "S7799C16", // class name
  bases_S7799C16, 8,
  &(vtc_S7799C16[0]), // expected_vtbl_contents
  &(vtt_S7799C16[0]), // expected_vtt_contents
  ABISELECT(5760,3128), // object size
  NSPAIRA(_ZTI8S7799C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7799C16),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7799C16),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7799C17  : virtual S7799C4 {
  void *s7799c17f0;
  short s7799c17f1;
  __tsi64 s7799c17f2;
  int s7799c17f3:6;
  void *s7799c17f4[2];
  ~S7799C17(); // tgen
  S7799C17(); // tgen
};
//SIG(-1 S7799C17) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} Fp Fs FL Fi:6 Fp[2]}


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

static void Test_S7799C17()
{
  extern Class_Descriptor cd_S7799C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,58)];
    init_test(&cd_S7799C17, buf);
    S7799C17 *dp, &lv = *(dp=new (buf) S7799C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,228), "sizeof(S7799C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7799C17)");
    check_base_class_offset(lv, (S7799C4*), ABISELECT(64,32), "S7799C17");
    check_field_offset(lv, s7799c17f0, ABISELECT(8,4), "S7799C17.s7799c17f0");
    check_field_offset(lv, s7799c17f1, ABISELECT(16,8), "S7799C17.s7799c17f1");
    check_field_offset(lv, s7799c17f2, ABISELECT(24,12), "S7799C17.s7799c17f2");
    set_bf_and_test(lv, s7799c17f3, ABISELECT(32,20), 0, 6, 1, "S7799C17");
    set_bf_and_test(lv, s7799c17f3, ABISELECT(32,20), 0, 6, hide_sll(1LL<<5), "S7799C17");
    check_field_offset(lv, s7799c17f4, ABISELECT(40,24), "S7799C17.s7799c17f4");
    test_class_info(&lv, &cd_S7799C17);
    dp->~S7799C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C17(Test_S7799C17, "S7799C17", ABISELECT(432,228));

#else // __cplusplus

extern void _ZN8S7799C17C1Ev();
extern void _ZN8S7799C17D1Ev();
Name_Map name_map_S7799C17[] = {
  NSPAIR(_ZN8S7799C17C1Ev),
  NSPAIR(_ZN8S7799C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
static Base_Class bases_S7799C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7799C4,    ABISELECT(64,32), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7799C17[];
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY vtc_S7799C17[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C17[0]),
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7799C17[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S7799C17[];
static  VTT_ENTRY vtt_S7799C17[] = {
  {&(_ZTV8S7799C17[3]),  3,7},
  {&(_ZTV8S7799C17[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S7799C17[];
extern  VTBL_ENTRY _ZTV8S7799C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C17[];
Class_Descriptor cd_S7799C17 = {  "S7799C17", // class name
  bases_S7799C17, 1,
  &(vtc_S7799C17[0]), // expected_vtbl_contents
  &(vtt_S7799C17[0]), // expected_vtt_contents
  ABISELECT(432,228), // object size
  NSPAIRA(_ZTI8S7799C17),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7799C17),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7799C17),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  S7799C15  : S7799C16 , S7799C17 {
  __tsi64 s7799c15f0;
  long double s7799c15f1;
  ::S20176C3_nt s7799c15f2;
  int s7799c15f3[9];
  short s7799c15f4;
  char s7799c15f5:5;
  virtual  ~S7799C15(); // _ZN8S7799C15D2Ev
  virtual void  v11(); // _ZN8S7799C153v11Ev
  S7799C15(); // tgen
};
//SIG(-1 S7799C15) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 Fi Fp FC6{ m Fp[2]}} VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} VBC9{ VBC3 BC7 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC4 Fp Fs FL Fi FL FC4[4] Fi} BC10{ VBC7 Fp Fs FL Fi:6 Fp[2]} vd v1 FL FD FC8 Fi[9] Fs Fc:5}


 S7799C15 ::~S7799C15(){ note_dtor("S7799C15", this);}
void  S7799C15 ::v11(){vfunc_called(this, "_ZN8S7799C153v11Ev");}
S7799C15 ::S7799C15(){ note_ctor("S7799C15", this);} // tgen

static void Test_S7799C15()
{
  extern Class_Descriptor cd_S7799C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(369,807)];
    init_test(&cd_S7799C15, buf);
    S7799C15 *dp, &lv = *(dp=new (buf) S7799C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5888,3224), "sizeof(S7799C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7799C15)");
    check_base_class_offset(lv, (S7799C7*)(S7799C10*), ABISELECT(4560,2496), "S7799C15");
    check_base_class_offset(lv, (S7799C4*)(S7799C10*), ABISELECT(5024,2752), "S7799C15");
    check_base_class_offset(lv, (S7799C4*)(S7799C17*), ABISELECT(5024,2752), "S7799C15");
    check_base_class_offset(lv, (S281C37_nt*)(S7799C10*), ABISELECT(5392,2948), "S7799C15");
    check_base_class_offset(lv, (S7799C10*)(S7799C9*), ABISELECT(4560,2496), "S7799C15");
    check_base_class_offset(lv, (S7799C9*)(S7799C16*), ABISELECT(4464,2440), "S7799C15");
    check_base_class_offset(lv, (S7799C9*)(S7799C8*), ABISELECT(4464,2440), "S7799C15");
    /*is_ambiguous_... S7799C8::S7799C4 */ AMB_check_base_class_offset(lv, (S7799C4*)(S7799C8*), ABISELECT(5408,2956), "S7799C15");
    /*is_ambiguous_... S7799C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7799C8*), ABISELECT(5776,3152), "S7799C15");
    check_base_class_offset(lv, (S7799C8*)(S7799C16*), ABISELECT(5408,2956), "S7799C15");
    check_base_class_offset(lv, (S7799C16*), 0, "S7799C15");
    check_base_class_offset(lv, (S7799C17*), ABISELECT(4328,2344), "S7799C15");
    check_field_offset(lv, s7799c15f0, ABISELECT(4384,2376), "S7799C15.s7799c15f0");
    check_field_offset(lv, s7799c15f1, ABISELECT(4400,2384), "S7799C15.s7799c15f1");
    check_field_offset(lv, s7799c15f2, ABISELECT(4416,2396), "S7799C15.s7799c15f2");
    check_field_offset(lv, s7799c15f3, ABISELECT(4420,2400), "S7799C15.s7799c15f3");
    check_field_offset(lv, s7799c15f4, ABISELECT(4456,2436), "S7799C15.s7799c15f4");
    set_bf_and_test(lv, s7799c15f5, ABISELECT(4458,2438), 0, 5, 1, "S7799C15");
    set_bf_and_test(lv, s7799c15f5, ABISELECT(4458,2438), 0, 5, hide_sll(1LL<<4), "S7799C15");
    test_class_info(&lv, &cd_S7799C15);
    dp->~S7799C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C15(Test_S7799C15, "S7799C15", ABISELECT(5888,3224));

#else // __cplusplus

extern void _ZN8S7799C15C1Ev();
extern void _ZN8S7799C15D2Ev();
Name_Map name_map_S7799C15[] = {
  NSPAIR(_ZN8S7799C15C1Ev),
  NSPAIR(_ZN8S7799C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7799C7;
extern VTBL_ENTRY _ZTI7S7799C7[];
extern  VTBL_ENTRY _ZTV7S7799C7[];
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C10;
extern VTBL_ENTRY _ZTI8S7799C10[];
extern  VTBL_ENTRY _ZTV8S7799C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C10[];
extern Class_Descriptor cd_S7799C9;
extern VTBL_ENTRY _ZTI7S7799C9[];
extern  VTBL_ENTRY _ZTV7S7799C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C9[];
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C8;
extern VTBL_ENTRY _ZTI7S7799C8[];
extern  VTBL_ENTRY _ZTV7S7799C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C8[];
extern Class_Descriptor cd_S7799C16;
extern VTBL_ENTRY _ZTI8S7799C16[];
extern  VTBL_ENTRY _ZTV8S7799C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C16[];
extern Class_Descriptor cd_S7799C17;
extern VTBL_ENTRY _ZTI8S7799C17[];
extern  VTBL_ENTRY _ZTV8S7799C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C17[];
static Base_Class bases_S7799C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7799C7,    ABISELECT(4560,2496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C4,    ABISELECT(5024,2752), //bcp->offset
    26, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5392,2948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C10,    ABISELECT(4560,2496), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7799C9,    ABISELECT(4464,2440), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7799C4,    ABISELECT(5408,2956), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5776,3152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C8,    ABISELECT(5408,2956), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7799C16,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7799C17,    ABISELECT(4328,2344), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7799C15[];
extern void _ZN8S7799C15D1Ev();
extern void _ZN8S7799C15D0Ev();
extern void _ZN8S7799C153v11Ev();
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7799C15D1Ev,_ZTv0_n32_N8S7799C15D1Ev)();
extern void ABISELECT(_ZThn5408_N8S7799C15D1Ev,_ZThn2956_N8S7799C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7799C15D0Ev,_ZTv0_n32_N8S7799C15D0Ev)();
extern void ABISELECT(_ZThn5408_N8S7799C15D0Ev,_ZThn2956_N8S7799C15D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY vtc_S7799C15[] = {
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  (VTBL_ENTRY)&_ZN8S7799C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7799C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7799C153v11Ev,
  ABISELECT(696,408),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2496),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
  0,
  ABISELECT(-5024,-2752),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  0,
  ABISELECT(-5408,-2956),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2956),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C15D1Ev,_ZTv0_n32_N8S7799C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C15D0Ev,_ZTv0_n32_N8S7799C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
extern VTBL_ENTRY _ZTV8S7799C15[];
extern void _ZN8S7799C16D1Ev();
extern void _ZN8S7799C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C16__8S7799C15[] = {
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN8S7799C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7799C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__8S7799C16__8S7799C15[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__8S7799C16__8S7799C15[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2496),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C16__8S7799C15[] = {
  0,
  ABISELECT(-5024,-2752),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7799C16D1Ev,_ZTv0_n32_N8S7799C16D1Ev)();
extern void ABISELECT(_ZThn5408_N8S7799C16D1Ev,_ZThn2956_N8S7799C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7799C16D0Ev,_ZTv0_n32_N8S7799C16D0Ev)();
extern void ABISELECT(_ZThn5408_N8S7799C16D0Ev,_ZThn2956_N8S7799C16D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__8S7799C16__8S7799C15[] = {
  0,
  ABISELECT(-5408,-2956),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2956),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C16D1Ev,_ZTv0_n32_N8S7799C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C16D0Ev,_ZTv0_n32_N8S7799C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7799C17__8S7799C15[] = {
  ABISELECT(696,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C17[0]),
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C17__8S7799C15[] = {
  0,
  ABISELECT(-696,-408),
  (VTBL_ENTRY)&(_ZTI8S7799C17[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__8S7799C15[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C9__8S7799C15[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C9__8S7799C15[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__8S7799C15[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C10__8S7799C15[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C8D1Ev();
extern void _ZN7S7799C8D0Ev();
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__8S7799C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C8__8S7799C15[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C8__8S7799C15[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C8__8S7799C15[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTT_ENTRY vtt_S7799C15[] = {
  {&(_ZTV8S7799C15[7]),  7,43},
  {&(_tg__ZTV8S7799C16__8S7799C15[7]),  7,9},
  {&(_tg__ZTV7S7799C9__8S7799C16__8S7799C15[5]),  5,5},
  {&(_tg__ZTV8S7799C10__8S7799C16__8S7799C15[6]),  6,8},
  {&(_tg__ZTV7S7799C4__8S7799C16__8S7799C15[3]),  3,4},
  {&(_tg__ZTV7S7799C8__8S7799C16__8S7799C15[9]),  9,13},
  {&(_tg__ZTV8S7799C17__8S7799C15[3]),  3,3},
  {&(_tg__ZTV7S7799C4__8S7799C17__8S7799C15[3]),  3,4},
  {&(_ZTV8S7799C15[18]),  18,43},
  {&(_ZTV8S7799C15[24]),  24,43},
  {&(_ZTV8S7799C15[29]),  29,43},
  {&(_ZTV8S7799C15[39]),  39,43},
  {&(_ZTV8S7799C15[13]),  13,43},
  {&(_tg__ZTV7S7799C9__8S7799C15[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C9__8S7799C15[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C9__8S7799C15[3]),  3,4},
  {&(_tg__ZTV8S7799C10__8S7799C15[4]),  4,6},
  {&(_tg__ZTV7S7799C4__8S7799C10__8S7799C15[3]),  3,4},
  {&(_tg__ZTV7S7799C8__8S7799C15[6]),  6,10},
  {&(_tg__ZTV7S7799C9__7S7799C8__8S7799C15[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C8__8S7799C15[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C8__8S7799C15[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7799C15[];
extern  VTBL_ENTRY _ZTV8S7799C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C15[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C16D0Ev,_ZTv0_n32_N8S7799C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S7799C16D0Ev,_ZThn2956_N8S7799C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C16D1Ev,_ZTv0_n32_N8S7799C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S7799C16D1Ev,_ZThn2956_N8S7799C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C15D0Ev,_ZTv0_n32_N8S7799C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S7799C15D0Ev,_ZThn2956_N8S7799C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C15D1Ev,_ZTv0_n32_N8S7799C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S7799C15D1Ev,_ZThn2956_N8S7799C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7799C15 = {  "S7799C15", // class name
  bases_S7799C15, 10,
  &(vtc_S7799C15[0]), // expected_vtbl_contents
  &(vtt_S7799C15[0]), // expected_vtt_contents
  ABISELECT(5888,3224), // object size
  NSPAIRA(_ZTI8S7799C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7799C15),43, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7799C15),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7799C14  : S7799C2 , S7799C15 {
  __tsi64 s7799c14f0;
  int s7799c14f1;
  void *s7799c14f2;
  char s7799c14f3;
  int s7799c14f4;
  ::S20176C3_nt s7799c14f5;
  virtual void  v12(); // _ZN8S7799C143v12Ev
  virtual void  v13(); // _ZN8S7799C143v13Ev
  ~S7799C14(); // tgen
  S7799C14(); // tgen
};
//SIG(-1 S7799C14) C1{ BC2{ VBC3{ VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC6{ m Fp[2]} FC6[9] Fp FC7{ v4 Fi Fp FC6} FC7} VBC8{ VBC9{ VBC10{ BC7 VBC4 VBC6 v5 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC4 BC6 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v7 v8 FC8[7] Fi Fs Fi FC10 FL[9]} vd Fc Fi[3]} BC11{ BC12{ VBC9 VBC8 vd Fl Fp FC10 Fp Fs FL Fi FL FC10[4] Fi} BC13{ VBC4 Fp Fs FL Fi:6 Fp[2]} vd v9 FL FD FC5 Fi[9] Fs Fc:5} v1 v2 FL Fi Fp Fc Fi FC5}


void  S7799C14 ::v12(){vfunc_called(this, "_ZN8S7799C143v12Ev");}
void  S7799C14 ::v13(){vfunc_called(this, "_ZN8S7799C143v13Ev");}
S7799C14 ::~S7799C14(){ note_dtor("S7799C14", this);} // tgen
S7799C14 ::S7799C14(){ note_ctor("S7799C14", this);} // tgen

static void Test_S7799C14()
{
  extern Class_Descriptor cd_S7799C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1057,2328)];
    init_test(&cd_S7799C14, buf);
    S7799C14 *dp, &lv = *(dp=new (buf) S7799C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16896,9308), "sizeof(S7799C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7799C14)");
    /*is_ambiguous_... S7799C3::S7799C4 */ AMB_check_base_class_offset(lv, (S7799C4*)(S7799C3*), ABISELECT(15472,8524), "S7799C14");
    check_base_class_offset(lv, (S7799C4*)(S7799C10*), ABISELECT(15472,8524), "S7799C14");
    check_base_class_offset(lv, (S7799C4*)(S7799C17*)(S7799C15*), ABISELECT(15472,8524), "S7799C14");
    check_base_class_offset(lv, (S7799C7*)(S7799C10*), ABISELECT(16416,9044), "S7799C14");
    check_base_class_offset(lv, (S281C37_nt*)(S7799C10*), ABISELECT(16872,9300), "S7799C14");
    check_base_class_offset(lv, (S7799C10*)(S7799C9*), ABISELECT(16416,9044), "S7799C14");
    check_base_class_offset(lv, (S7799C9*)(S7799C8*), ABISELECT(16320,8988), "S7799C14");
    check_base_class_offset(lv, (S7799C9*)(S7799C16*)(S7799C15*), ABISELECT(16320,8988), "S7799C14");
    /*is_ambiguous_... S7799C8::S7799C4 */ AMB_check_base_class_offset(lv, (S7799C4*)(S7799C8*), ABISELECT(15840,8720), "S7799C14");
    /*is_ambiguous_... S7799C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7799C8*), ABISELECT(16208,8916), "S7799C14");
    check_base_class_offset(lv, (S7799C8*)(S7799C3*), ABISELECT(15840,8720), "S7799C14");
    check_base_class_offset(lv, (S7799C8*)(S7799C16*)(S7799C15*), ABISELECT(15840,8720), "S7799C14");
    check_base_class_offset(lv, (S7799C3*)(S7799C2*), ABISELECT(4544,2488), "S7799C14");
    check_base_class_offset(lv, (S7799C2*), 0, "S7799C14");
    check_base_class_offset(lv, (S7799C16*)(S7799C15*), ABISELECT(32,20), "S7799C14");
    check_base_class_offset(lv, (S7799C17*)(S7799C15*), ABISELECT(4360,2364), "S7799C14");
    check_base_class_offset(lv, (S7799C15*), ABISELECT(32,20), "S7799C14");
    check_field_offset(lv, s7799c14f0, ABISELECT(4496,2460), "S7799C14.s7799c14f0");
    check_field_offset(lv, s7799c14f1, ABISELECT(4504,2468), "S7799C14.s7799c14f1");
    check_field_offset(lv, s7799c14f2, ABISELECT(4512,2472), "S7799C14.s7799c14f2");
    check_field_offset(lv, s7799c14f3, ABISELECT(4520,2476), "S7799C14.s7799c14f3");
    check_field_offset(lv, s7799c14f4, ABISELECT(4524,2480), "S7799C14.s7799c14f4");
    check_field_offset(lv, s7799c14f5, ABISELECT(4528,2484), "S7799C14.s7799c14f5");
    test_class_info(&lv, &cd_S7799C14);
    dp->~S7799C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C14(Test_S7799C14, "S7799C14", ABISELECT(16896,9308));

#else // __cplusplus

extern void _ZN8S7799C14C1Ev();
extern void _ZN8S7799C14D1Ev();
Name_Map name_map_S7799C14[] = {
  NSPAIR(_ZN8S7799C14C1Ev),
  NSPAIR(_ZN8S7799C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S7799C7;
extern VTBL_ENTRY _ZTI7S7799C7[];
extern  VTBL_ENTRY _ZTV7S7799C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C10;
extern VTBL_ENTRY _ZTI8S7799C10[];
extern  VTBL_ENTRY _ZTV8S7799C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C10[];
extern Class_Descriptor cd_S7799C9;
extern VTBL_ENTRY _ZTI7S7799C9[];
extern  VTBL_ENTRY _ZTV7S7799C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C9[];
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C8;
extern VTBL_ENTRY _ZTI7S7799C8[];
extern  VTBL_ENTRY _ZTV7S7799C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C8[];
extern Class_Descriptor cd_S7799C3;
extern VTBL_ENTRY _ZTI7S7799C3[];
extern  VTBL_ENTRY _ZTV7S7799C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C3[];
extern Class_Descriptor cd_S7799C2;
extern VTBL_ENTRY _ZTI7S7799C2[];
extern  VTBL_ENTRY _ZTV7S7799C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C2[];
extern Class_Descriptor cd_S7799C16;
extern VTBL_ENTRY _ZTI8S7799C16[];
extern  VTBL_ENTRY _ZTV8S7799C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C16[];
extern Class_Descriptor cd_S7799C17;
extern VTBL_ENTRY _ZTI8S7799C17[];
extern  VTBL_ENTRY _ZTV8S7799C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C17[];
extern Class_Descriptor cd_S7799C15;
extern VTBL_ENTRY _ZTI8S7799C15[];
extern  VTBL_ENTRY _ZTV8S7799C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C15[];
static Base_Class bases_S7799C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7799C4,    ABISELECT(15472,8524), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7799C7,    ABISELECT(16416,9044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(16872,9300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C10,    ABISELECT(16416,9044), //bcp->offset
    61, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7799C9,    ABISELECT(16320,8988), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7799C4,    ABISELECT(15840,8720), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(16208,8916), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C8,    ABISELECT(15840,8720), //bcp->offset
    43, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7799C3,    ABISELECT(4544,2488), //bcp->offset
    25, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7799C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7799C16,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7799C17,    ABISELECT(4360,2364), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7799C15,    ABISELECT(32,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7799C14[];
extern void _ZN8S7799C14D1Ev();
extern void _ZN8S7799C14D0Ev();
extern void _ZN8S7799C143v12Ev();
extern void _ZN8S7799C143v13Ev();
extern void ABISELECT(_ZThn32_N8S7799C14D1Ev,_ZThn20_N8S7799C14D1Ev)();
extern void ABISELECT(_ZThn32_N8S7799C14D0Ev,_ZThn20_N8S7799C14D0Ev)();
extern void _ZN8S7799C153v11Ev();
extern void _ZN7S7799C32v7Ev();
extern void _ZN7S7799C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S7799C14D1Ev,_ZTv0_n40_N8S7799C14D1Ev)();
extern void ABISELECT(_ZThn4544_N8S7799C14D1Ev,_ZThn2488_N8S7799C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7799C14D0Ev,_ZTv0_n40_N8S7799C14D0Ev)();
extern void ABISELECT(_ZThn4544_N8S7799C14D0Ev,_ZThn2488_N8S7799C14D0Ev)() __attribute__((weak));
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7799C14D1Ev,_ZTv0_n32_N8S7799C14D1Ev)();
extern void ABISELECT(_ZThn15840_N8S7799C14D1Ev,_ZThn8720_N8S7799C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7799C14D0Ev,_ZTv0_n32_N8S7799C14D0Ev)();
extern void ABISELECT(_ZThn15840_N8S7799C14D0Ev,_ZThn8720_N8S7799C14D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY vtc_S7799C14[] = {
  ABISELECT(16872,9300),
  ABISELECT(16416,9044),
  ABISELECT(16320,8988),
  ABISELECT(15840,8720),
  ABISELECT(15472,8524),
  ABISELECT(4544,2488),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  (VTBL_ENTRY)&_ZN8S7799C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7799C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7799C143v12Ev,
  (VTBL_ENTRY)&_ZN8S7799C143v13Ev,
  ABISELECT(15808,8700),
  ABISELECT(16840,9280),
  ABISELECT(15440,8504),
  ABISELECT(16384,9024),
  ABISELECT(16288,8968),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7799C14D1Ev,_ZThn20_N8S7799C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7799C14D0Ev,_ZThn20_N8S7799C14D0Ev),
  (VTBL_ENTRY)&_ZN8S7799C153v11Ev,
  ABISELECT(11112,6160),
  ABISELECT(-4360,-2364),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  ABISELECT(-4544,-2488),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-4544,-2488),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  (VTBL_ENTRY)&_ZN7S7799C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7799C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7799C14D1Ev,_ZTv0_n40_N8S7799C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7799C14D0Ev,_ZTv0_n40_N8S7799C14D0Ev),
  0,
  ABISELECT(-15472,-8524),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  0,
  ABISELECT(-15840,-8720),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15840,-8720),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C14D1Ev,_ZTv0_n32_N8S7799C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C14D0Ev,_ZTv0_n32_N8S7799C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16320,-8988),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16416,-9044),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S7799C14[];
extern void _ZN7S7799C2D1Ev();
extern void _ZN7S7799C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C2__8S7799C14[] = {
  ABISELECT(16872,9300),
  ABISELECT(16416,9044),
  ABISELECT(16320,8988),
  ABISELECT(15840,8720),
  ABISELECT(15472,8524),
  ABISELECT(4544,2488),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C2D0Ev,
};
extern void _ZN7S7799C32v7Ev();
extern void _ZN7S7799C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N7S7799C2D1Ev,_ZTv0_n40_N7S7799C2D1Ev)();
extern void ABISELECT(_ZThn4544_N7S7799C2D1Ev,_ZThn2488_N7S7799C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7799C2D0Ev,_ZTv0_n40_N7S7799C2D0Ev)();
extern void ABISELECT(_ZThn4544_N7S7799C2D0Ev,_ZThn2488_N7S7799C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7799C3__7S7799C2__8S7799C14[] = {
  ABISELECT(-4544,-2488),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-4544,-2488),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7799C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7799C2D1Ev,_ZTv0_n40_N7S7799C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7799C2D0Ev,_ZTv0_n40_N7S7799C2D0Ev),
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C2__8S7799C14[] = {
  0,
  ABISELECT(-15472,-8524),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7799C2D1Ev,_ZTv0_n32_N7S7799C2D1Ev)();
extern void ABISELECT(_ZThn15840_N7S7799C2D1Ev,_ZThn8720_N7S7799C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7799C2D0Ev,_ZTv0_n32_N7S7799C2D0Ev)();
extern void ABISELECT(_ZThn15840_N7S7799C2D0Ev,_ZThn8720_N7S7799C2D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__7S7799C2__8S7799C14[] = {
  0,
  ABISELECT(-15840,-8720),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15840,-8720),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C2D1Ev,_ZTv0_n32_N7S7799C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C2D0Ev,_ZTv0_n32_N7S7799C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C2__8S7799C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16320,-8988),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C2__8S7799C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16416,-9044),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN8S7799C15D1Ev();
extern void _ZN8S7799C15D0Ev();
extern void _ZN8S7799C153v11Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C15__8S7799C14[] = {
  ABISELECT(15808,8700),
  ABISELECT(16840,9280),
  ABISELECT(15440,8504),
  ABISELECT(16384,9024),
  ABISELECT(16288,8968),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  (VTBL_ENTRY)&_ZN8S7799C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7799C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7799C153v11Ev,
};
extern void _ZN8S7799C16D1Ev();
extern void _ZN8S7799C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C168S7799C15__8S7799C14[] = {
  ABISELECT(15808,8700),
  ABISELECT(16840,9280),
  ABISELECT(15440,8504),
  ABISELECT(16384,9024),
  ABISELECT(16288,8968),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN8S7799C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7799C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__8S7799C168S7799C15__8S7799C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16288,-8968),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__8S7799C168S7799C15__8S7799C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16384,-9024),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C168S7799C15__8S7799C14[] = {
  0,
  ABISELECT(-15440,-8504),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7799C16D1Ev,_ZTv0_n32_N8S7799C16D1Ev)();
extern void ABISELECT(_ZThn15808_N8S7799C16D1Ev,_ZThn8700_N8S7799C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7799C16D0Ev,_ZTv0_n32_N8S7799C16D0Ev)();
extern void ABISELECT(_ZThn15808_N8S7799C16D0Ev,_ZThn8700_N8S7799C16D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__8S7799C168S7799C15__8S7799C14[] = {
  0,
  ABISELECT(-15808,-8700),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15808,-8700),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C16D1Ev,_ZTv0_n32_N8S7799C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C16D0Ev,_ZTv0_n32_N8S7799C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7799C178S7799C15__8S7799C14[] = {
  ABISELECT(11112,6160),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C17[0]),
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C178S7799C15__8S7799C14[] = {
  0,
  ABISELECT(-11112,-6160),
  (VTBL_ENTRY)&(_ZTI8S7799C17[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__8S7799C15__8S7799C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16288,-8968),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__8S7799C15__8S7799C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16384,-9024),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C15__8S7799C14[] = {
  0,
  ABISELECT(-15440,-8504),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7799C15D1Ev,_ZTv0_n32_N8S7799C15D1Ev)();
extern void ABISELECT(_ZThn15808_N8S7799C15D1Ev,_ZThn8700_N8S7799C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7799C15D0Ev,_ZTv0_n32_N8S7799C15D0Ev)();
extern void ABISELECT(_ZThn15808_N8S7799C15D0Ev,_ZThn8700_N8S7799C15D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__8S7799C15__8S7799C14[] = {
  0,
  ABISELECT(-15808,-8700),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15808,-8700),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C15D1Ev,_ZTv0_n32_N8S7799C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C15D0Ev,_ZTv0_n32_N8S7799C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7799C17__8S7799C15__8S7799C14[] = {
  ABISELECT(11112,6160),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
};
extern void _ZN7S7799C32v7Ev();
extern void _ZN7S7799C32v8Ev();
extern void _ZN7S7799C3D1Ev();
extern void _ZN7S7799C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C3__8S7799C14[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7799C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7799C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C3D0Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C3__8S7799C14[] = {
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7799C3D1Ev,_ZTv0_n32_N7S7799C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7799C3D1Ev,_ZThn6232_N7S7799C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7799C3D0Ev,_ZTv0_n32_N7S7799C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7799C3D0Ev,_ZThn6232_N7S7799C3D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__7S7799C3__8S7799C14[] = {
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C3D1Ev,_ZTv0_n32_N7S7799C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C3D0Ev,_ZTv0_n32_N7S7799C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C3__8S7799C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C3__8S7799C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C8D1Ev();
extern void _ZN7S7799C8D0Ev();
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__8S7799C14[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C8__8S7799C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C8__8S7799C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C8__8S7799C14[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__8S7799C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C9__8S7799C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C9__8S7799C14[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__8S7799C14[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C10__8S7799C14[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTT_ENTRY vtt_S7799C14[] = {
  {&(_ZTV8S7799C14[8]),  8,69},
  {&(_tg__ZTV7S7799C2__8S7799C14[8]),  8,10},
  {&(_tg__ZTV7S7799C3__7S7799C2__8S7799C14[10]),  10,14},
  {&(_tg__ZTV7S7799C4__7S7799C2__8S7799C14[3]),  3,4},
  {&(_tg__ZTV7S7799C8__7S7799C2__8S7799C14[9]),  9,13},
  {&(_tg__ZTV7S7799C9__7S7799C2__8S7799C14[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C2__8S7799C14[6]),  6,8},
  {&(_tg__ZTV8S7799C15__8S7799C14[7]),  7,10},
  {&(_tg__ZTV8S7799C168S7799C15__8S7799C14[7]),  7,9},
  {&(_tg__ZTV7S7799C9__8S7799C168S7799C15__8S7799C14[5]),  5,5},
  {&(_tg__ZTV8S7799C10__8S7799C168S7799C15__8S7799C14[6]),  6,8},
  {&(_tg__ZTV7S7799C4__8S7799C168S7799C15__8S7799C14[3]),  3,4},
  {&(_tg__ZTV7S7799C8__8S7799C168S7799C15__8S7799C14[9]),  9,13},
  {&(_tg__ZTV8S7799C178S7799C15__8S7799C14[3]),  3,3},
  {&(_tg__ZTV7S7799C4__8S7799C178S7799C15__8S7799C14[3]),  3,4},
  {&(_tg__ZTV7S7799C9__8S7799C15__8S7799C14[5]),  5,5},
  {&(_tg__ZTV8S7799C10__8S7799C15__8S7799C14[6]),  6,8},
  {&(_tg__ZTV7S7799C4__8S7799C15__8S7799C14[3]),  3,4},
  {&(_tg__ZTV7S7799C8__8S7799C15__8S7799C14[9]),  9,13},
  {&(_tg__ZTV8S7799C17__8S7799C15__8S7799C14[3]),  3,3},
  {&(_ZTV8S7799C14[35]),  35,69},
  {&(_ZTV8S7799C14[42]),  42,69},
  {&(_ZTV8S7799C14[52]),  52,69},
  {&(_ZTV8S7799C14[61]),  61,69},
  {&(_ZTV8S7799C14[67]),  67,69},
  {&(_ZTV8S7799C14[19]),  19,69},
  {&(_ZTV8S7799C14[25]),  25,69},
  {&(_tg__ZTV7S7799C3__8S7799C14[7]),  7,11},
  {&(_tg__ZTV7S7799C4__7S7799C3__8S7799C14[3]),  3,4},
  {&(_tg__ZTV7S7799C8__7S7799C3__8S7799C14[9]),  9,13},
  {&(_tg__ZTV7S7799C9__7S7799C3__8S7799C14[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C3__8S7799C14[6]),  6,8},
  {&(_tg__ZTV7S7799C8__8S7799C14[6]),  6,10},
  {&(_tg__ZTV7S7799C9__7S7799C8__8S7799C14[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C8__8S7799C14[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C8__8S7799C14[3]),  3,4},
  {&(_tg__ZTV7S7799C9__8S7799C14[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C9__8S7799C14[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C9__8S7799C14[3]),  3,4},
  {&(_tg__ZTV8S7799C10__8S7799C14[4]),  4,6},
  {&(_tg__ZTV7S7799C4__8S7799C10__8S7799C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7799C14[];
extern  VTBL_ENTRY _ZTV8S7799C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C14[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C3D0Ev,_ZTv0_n32_N7S7799C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7799C3D0Ev,_ZThn6232_N7S7799C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C3D1Ev,_ZTv0_n32_N7S7799C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7799C3D1Ev,_ZThn6232_N7S7799C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C15D0Ev,_ZTv0_n32_N8S7799C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7799C15D0Ev,_ZThn8700_N8S7799C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C15D1Ev,_ZTv0_n32_N8S7799C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7799C15D1Ev,_ZThn8700_N8S7799C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C16D0Ev,_ZTv0_n32_N8S7799C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7799C16D0Ev,_ZThn8700_N8S7799C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C16D1Ev,_ZTv0_n32_N8S7799C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7799C16D1Ev,_ZThn8700_N8S7799C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C2D0Ev,_ZTv0_n32_N7S7799C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N7S7799C2D0Ev,_ZThn8720_N7S7799C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C2D1Ev,_ZTv0_n32_N7S7799C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N7S7799C2D1Ev,_ZThn8720_N7S7799C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7799C2D0Ev,_ZTv0_n40_N7S7799C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N7S7799C2D0Ev,_ZThn2488_N7S7799C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7799C2D1Ev,_ZTv0_n40_N7S7799C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N7S7799C2D1Ev,_ZThn2488_N7S7799C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C14D0Ev,_ZTv0_n32_N8S7799C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N8S7799C14D0Ev,_ZThn8720_N8S7799C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C14D1Ev,_ZTv0_n32_N8S7799C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N8S7799C14D1Ev,_ZThn8720_N8S7799C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7799C14D0Ev,_ZTv0_n40_N8S7799C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S7799C14D0Ev,_ZThn2488_N8S7799C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7799C14D1Ev,_ZTv0_n40_N8S7799C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S7799C14D1Ev,_ZThn2488_N8S7799C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7799C14 = {  "S7799C14", // class name
  bases_S7799C14, 13,
  &(vtc_S7799C14[0]), // expected_vtbl_contents
  &(vtt_S7799C14[0]), // expected_vtt_contents
  ABISELECT(16896,9308), // object size
  NSPAIRA(_ZTI8S7799C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7799C14),69, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7799C14),41, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7799C1  : S7799C2 , S7799C11 , virtual S7799C13 , S7799C14 , virtual S20176C15 {
  __tsi64 s7799c1f0;
  int s7799c1f1[2];
  void *s7799c1f2;
  virtual void  v1(); // _ZN7S7799C12v1Ev
  virtual void  v2(); // _ZN7S7799C12v2Ev
  ~S7799C1(); // tgen
  S7799C1(); // tgen
};
//SIG(1 S7799C1) C1{ BC2{ VBC3{ VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC6{ m Fp[2]} FC6[9] Fp FC7{ v4 Fi Fp FC6} FC7} VBC8{ VBC9{ VBC10{ BC7 VBC4 VBC6 v5 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC4 BC6 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v7 v8 FC8[7] Fi Fs Fi FC10 FL[9]} vd Fc Fi[3]} BC11{ v9 Fs Fc FL Fp Fi FD Fl FC12{ BC13{ VBC14{ VBC15{ BC16{ v14 Fi Fp FC6} VBC17{ v15 Fi[6] Fc:2 FD Fp[2] Fi FD FC5 FC6 FC6[9] Fp FC16 FC16} VBC6 v16 Fp FL Fc[2] FC17 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC17 BC6 vd v17 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC5 Fp Fi Fc[8] Fs Fi} Fc:2 FC4} VBC18{ v10 Fl Fc Fs[2]} BC19{ BC2 BC20{ BC21{ VBC9 VBC8 vd Fl Fp FC10 Fp Fs FL Fi FL FC10[4] Fi} BC22{ VBC4 Fp Fs FL Fi:6 Fp[2]} vd v11 FL FD FC5 Fi[9] Fs Fc:5} v12 v13 FL Fi Fp Fc Fi FC5} VBC23{ m FL FC6[8] Fi Fp[2]} v1 v2 FL Fi[2] Fp}


void  S7799C1 ::v1(){vfunc_called(this, "_ZN7S7799C12v1Ev");}
void  S7799C1 ::v2(){vfunc_called(this, "_ZN7S7799C12v2Ev");}
S7799C1 ::~S7799C1(){ note_dtor("S7799C1", this);} // tgen
S7799C1 ::S7799C1(){ note_ctor("S7799C1", this);} // tgen

static void Test_S7799C1()
{
  extern Class_Descriptor cd_S7799C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1192,2627)];
    init_test(&cd_S7799C1, buf);
    S7799C1 *dp, &lv = *(dp=new (buf) S7799C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(19056,10504), "sizeof(S7799C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7799C1)");
    /*is_ambiguous_... S7799C3::S7799C4 */ AMB_check_base_class_offset(lv, (S7799C4*)(S7799C3*), ABISELECT(17456,9620), "S7799C1");
    check_base_class_offset(lv, (S7799C4*)(S7799C10*), ABISELECT(17456,9620), "S7799C1");
    check_base_class_offset(lv, (S7799C4*)(S7799C17*)(S7799C15*)(S7799C14*), ABISELECT(17456,9620), "S7799C1");
    check_base_class_offset(lv, (S7799C7*)(S7799C10*), ABISELECT(18400,10140), "S7799C1");
    check_base_class_offset(lv, (S281C37_nt*)(S7799C10*), ABISELECT(18856,10396), "S7799C1");
    check_base_class_offset(lv, (S7799C10*)(S7799C9*), ABISELECT(18400,10140), "S7799C1");
    check_base_class_offset(lv, (S7799C9*)(S7799C8*), ABISELECT(18304,10084), "S7799C1");
    check_base_class_offset(lv, (S7799C9*)(S7799C16*)(S7799C15*)(S7799C14*), ABISELECT(18304,10084), "S7799C1");
    /*is_ambiguous_... S7799C8::S7799C4 */ AMB_check_base_class_offset(lv, (S7799C4*)(S7799C8*), ABISELECT(17824,9816), "S7799C1");
    /*is_ambiguous_... S7799C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7799C8*), ABISELECT(18192,10012), "S7799C1");
    check_base_class_offset(lv, (S7799C8*)(S7799C3*), ABISELECT(17824,9816), "S7799C1");
    check_base_class_offset(lv, (S7799C8*)(S7799C16*)(S7799C15*)(S7799C14*), ABISELECT(17824,9816), "S7799C1");
    /*is_ambiguous_... S7799C1::S7799C2 */ AMB_check_base_class_offset(lv, (S7799C3*)(S7799C2*), ABISELECT(6528,3584), "S7799C1");
    check_base_class_offset(lv, (S7799C3*)(S7799C2*)(S7799C14*), ABISELECT(6528,3584), "S7799C1");
    /*is_ambiguous_... S7799C1::S7799C2 */ AMB_check_base_class_offset(lv, (S7799C2*), 0, "S7799C1");
    check_base_class_offset(lv, (S7799C11*), ABISELECT(32,20), "S7799C1");
    check_base_class_offset(lv, (S7799C13*), ABISELECT(18872,10404), "S7799C1");
    check_base_class_offset(lv, (S7799C2*)(S7799C14*), ABISELECT(1968,1076), "S7799C1");
    check_base_class_offset(lv, (S7799C16*)(S7799C15*)(S7799C14*), ABISELECT(2000,1096), "S7799C1");
    check_base_class_offset(lv, (S7799C17*)(S7799C15*)(S7799C14*), ABISELECT(6328,3440), "S7799C1");
    check_base_class_offset(lv, (S7799C15*)(S7799C14*), ABISELECT(2000,1096), "S7799C1");
    check_base_class_offset(lv, (S7799C14*), ABISELECT(1968,1076), "S7799C1");
    check_base_class_offset(lv, (S20176C15*), ABISELECT(18896,10420), "S7799C1");
    check_field_offset(lv, s7799c1f0, ABISELECT(6504,3564), "S7799C1.s7799c1f0");
    check_field_offset(lv, s7799c1f1, ABISELECT(6512,3572), "S7799C1.s7799c1f1");
    check_field_offset(lv, s7799c1f2, ABISELECT(6520,3580), "S7799C1.s7799c1f2");
    test_class_info(&lv, &cd_S7799C1);
    dp->~S7799C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7799C1(Test_S7799C1, "S7799C1", ABISELECT(19056,10504));

#else // __cplusplus

extern void _ZN7S7799C1C1Ev();
extern void _ZN7S7799C1D1Ev();
Name_Map name_map_S7799C1[] = {
  NSPAIR(_ZN7S7799C1C1Ev),
  NSPAIR(_ZN7S7799C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S7799C7;
extern VTBL_ENTRY _ZTI7S7799C7[];
extern  VTBL_ENTRY _ZTV7S7799C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C10;
extern VTBL_ENTRY _ZTI8S7799C10[];
extern  VTBL_ENTRY _ZTV8S7799C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C10[];
extern Class_Descriptor cd_S7799C9;
extern VTBL_ENTRY _ZTI7S7799C9[];
extern  VTBL_ENTRY _ZTV7S7799C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C9[];
extern Class_Descriptor cd_S7799C4;
extern VTBL_ENTRY _ZTI7S7799C4[];
extern  VTBL_ENTRY _ZTV7S7799C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7799C8;
extern VTBL_ENTRY _ZTI7S7799C8[];
extern  VTBL_ENTRY _ZTV7S7799C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C8[];
extern Class_Descriptor cd_S7799C3;
extern VTBL_ENTRY _ZTI7S7799C3[];
extern  VTBL_ENTRY _ZTV7S7799C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C3[];
extern Class_Descriptor cd_S7799C2;
extern VTBL_ENTRY _ZTI7S7799C2[];
extern  VTBL_ENTRY _ZTV7S7799C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C2[];
extern Class_Descriptor cd_S7799C11;
extern VTBL_ENTRY _ZTI8S7799C11[];
extern  VTBL_ENTRY _ZTV8S7799C11[];
extern Class_Descriptor cd_S7799C13;
extern VTBL_ENTRY _ZTI8S7799C13[];
extern  VTBL_ENTRY _ZTV8S7799C13[];
extern Class_Descriptor cd_S7799C2;
extern VTBL_ENTRY _ZTI7S7799C2[];
extern  VTBL_ENTRY _ZTV7S7799C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C2[];
extern Class_Descriptor cd_S7799C16;
extern VTBL_ENTRY _ZTI8S7799C16[];
extern  VTBL_ENTRY _ZTV8S7799C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C16[];
extern Class_Descriptor cd_S7799C17;
extern VTBL_ENTRY _ZTI8S7799C17[];
extern  VTBL_ENTRY _ZTV8S7799C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C17[];
extern Class_Descriptor cd_S7799C15;
extern VTBL_ENTRY _ZTI8S7799C15[];
extern  VTBL_ENTRY _ZTV8S7799C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C15[];
extern Class_Descriptor cd_S7799C14;
extern VTBL_ENTRY _ZTI8S7799C14[];
extern  VTBL_ENTRY _ZTV8S7799C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7799C14[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
static Base_Class bases_S7799C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7799C4,    ABISELECT(17456,9620), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7799C7,    ABISELECT(18400,10140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(18856,10396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C10,    ABISELECT(18400,10140), //bcp->offset
    78, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7799C9,    ABISELECT(18304,10084), //bcp->offset
    73, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7799C4,    ABISELECT(17824,9816), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(18192,10012), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7799C8,    ABISELECT(17824,9816), //bcp->offset
    60, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7799C3,    ABISELECT(6528,3584), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7799C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7799C11,    ABISELECT(32,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7799C13,    ABISELECT(18872,10404), //bcp->offset
    86, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7799C2,    ABISELECT(1968,1076), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7799C16,    ABISELECT(2000,1096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7799C17,    ABISELECT(6328,3440), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7799C15,    ABISELECT(2000,1096), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7799C14,    ABISELECT(1968,1076), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C15,    ABISELECT(18896,10420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7799C1[];
extern void _ZN7S7799C1D1Ev();
extern void _ZN7S7799C1D0Ev();
extern void _ZN7S7799C12v1Ev();
extern void _ZN7S7799C12v2Ev();
extern void _ZN8S7799C112v9Ev();
extern void ABISELECT(_ZThn1968_N7S7799C1D1Ev,_ZThn1076_N7S7799C1D1Ev)();
extern void ABISELECT(_ZThn1968_N7S7799C1D0Ev,_ZThn1076_N7S7799C1D0Ev)();
extern void _ZN8S7799C143v12Ev();
extern void _ZN8S7799C143v13Ev();
extern void ABISELECT(_ZThn2000_N7S7799C1D1Ev,_ZThn1096_N7S7799C1D1Ev)();
extern void ABISELECT(_ZThn2000_N7S7799C1D0Ev,_ZThn1096_N7S7799C1D0Ev)();
extern void _ZN8S7799C153v11Ev();
extern void _ZN7S7799C32v7Ev();
extern void _ZN7S7799C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N7S7799C1D1Ev,_ZTv0_n40_N7S7799C1D1Ev)();
extern void ABISELECT(_ZThn6528_N7S7799C1D1Ev,_ZThn3584_N7S7799C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7799C1D0Ev,_ZTv0_n40_N7S7799C1D0Ev)();
extern void ABISELECT(_ZThn6528_N7S7799C1D0Ev,_ZThn3584_N7S7799C1D0Ev)() __attribute__((weak));
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7799C1D1Ev,_ZTv0_n32_N7S7799C1D1Ev)();
extern void ABISELECT(_ZThn17824_N7S7799C1D1Ev,_ZThn9816_N7S7799C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7799C1D0Ev,_ZTv0_n32_N7S7799C1D0Ev)();
extern void ABISELECT(_ZThn17824_N7S7799C1D0Ev,_ZThn9816_N7S7799C1D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
extern void _ZN8S7799C133v10Ev();
static  VTBL_ENTRY vtc_S7799C1[] = {
  ABISELECT(18896,10420),
  ABISELECT(18872,10404),
  ABISELECT(18856,10396),
  ABISELECT(18400,10140),
  ABISELECT(18304,10084),
  ABISELECT(17824,9816),
  ABISELECT(17456,9620),
  ABISELECT(6528,3584),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C1[0]),
  (VTBL_ENTRY)&_ZN7S7799C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7799C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7799C12v2Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7799C1[0]),
  (VTBL_ENTRY)&_ZN8S7799C112v9Ev,
  ABISELECT(16888,9320),
  ABISELECT(16432,9064),
  ABISELECT(16336,9008),
  ABISELECT(15856,8740),
  ABISELECT(15488,8544),
  ABISELECT(4560,2508),
  ABISELECT(-1968,-1076),
  (VTBL_ENTRY)&(_ZTI7S7799C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1968_N7S7799C1D1Ev,_ZThn1076_N7S7799C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1968_N7S7799C1D0Ev,_ZThn1076_N7S7799C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7799C143v12Ev,
  (VTBL_ENTRY)&_ZN8S7799C143v13Ev,
  ABISELECT(15824,8720),
  ABISELECT(16856,9300),
  ABISELECT(15456,8524),
  ABISELECT(16400,9044),
  ABISELECT(16304,8988),
  ABISELECT(-2000,-1096),
  (VTBL_ENTRY)&(_ZTI7S7799C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2000_N7S7799C1D1Ev,_ZThn1096_N7S7799C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2000_N7S7799C1D0Ev,_ZThn1096_N7S7799C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7799C153v11Ev,
  ABISELECT(11128,6180),
  ABISELECT(-6328,-3440),
  (VTBL_ENTRY)&(_ZTI7S7799C1[0]),
  ABISELECT(-6528,-3584),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-6528,-3584),
  (VTBL_ENTRY)&(_ZTI7S7799C1[0]),
  (VTBL_ENTRY)&_ZN7S7799C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7799C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7799C1D1Ev,_ZTv0_n40_N7S7799C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7799C1D0Ev,_ZTv0_n40_N7S7799C1D0Ev),
  0,
  ABISELECT(-17456,-9620),
  (VTBL_ENTRY)&(_ZTI7S7799C1[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  0,
  ABISELECT(-17824,-9816),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-17824,-9816),
  (VTBL_ENTRY)&(_ZTI7S7799C1[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C1D1Ev,_ZTv0_n32_N7S7799C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C1D0Ev,_ZTv0_n32_N7S7799C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-18304,-10084),
  (VTBL_ENTRY)&(_ZTI7S7799C1[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-18400,-10140),
  (VTBL_ENTRY)&(_ZTI7S7799C1[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
  0,
  ABISELECT(-18872,-10404),
  (VTBL_ENTRY)&(_ZTI7S7799C1[0]),
  (VTBL_ENTRY)&_ZN8S7799C133v10Ev,
};
extern VTBL_ENTRY _ZTV7S7799C1[];
extern void _ZN7S7799C2D1Ev();
extern void _ZN7S7799C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C2__7S7799C1[] = {
  ABISELECT(18856,10396),
  ABISELECT(18400,10140),
  ABISELECT(18304,10084),
  ABISELECT(17824,9816),
  ABISELECT(17456,9620),
  ABISELECT(6528,3584),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C2D0Ev,
};
extern void _ZN7S7799C32v7Ev();
extern void _ZN7S7799C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N7S7799C2D1Ev,_ZTv0_n40_N7S7799C2D1Ev)();
extern void ABISELECT(_ZThn6528_N7S7799C2D1Ev,_ZThn3584_N7S7799C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7799C2D0Ev,_ZTv0_n40_N7S7799C2D0Ev)();
extern void ABISELECT(_ZThn6528_N7S7799C2D0Ev,_ZThn3584_N7S7799C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7799C3__7S7799C2__7S7799C1[] = {
  ABISELECT(-6528,-3584),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-6528,-3584),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7799C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7799C2D1Ev,_ZTv0_n40_N7S7799C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7799C2D0Ev,_ZTv0_n40_N7S7799C2D0Ev),
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C2__7S7799C1[] = {
  0,
  ABISELECT(-17456,-9620),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7799C2D1Ev,_ZTv0_n32_N7S7799C2D1Ev)();
extern void ABISELECT(_ZThn17824_N7S7799C2D1Ev,_ZThn9816_N7S7799C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7799C2D0Ev,_ZTv0_n32_N7S7799C2D0Ev)();
extern void ABISELECT(_ZThn17824_N7S7799C2D0Ev,_ZThn9816_N7S7799C2D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__7S7799C2__7S7799C1[] = {
  0,
  ABISELECT(-17824,-9816),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-17824,-9816),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C2D1Ev,_ZTv0_n32_N7S7799C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C2D0Ev,_ZTv0_n32_N7S7799C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C2__7S7799C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-18304,-10084),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C2__7S7799C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-18400,-10140),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN8S7799C14D1Ev();
extern void _ZN8S7799C14D0Ev();
extern void _ZN8S7799C143v12Ev();
extern void _ZN8S7799C143v13Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C14__7S7799C1[] = {
  ABISELECT(16888,9320),
  ABISELECT(16432,9064),
  ABISELECT(16336,9008),
  ABISELECT(15856,8740),
  ABISELECT(15488,8544),
  ABISELECT(4560,2508),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  (VTBL_ENTRY)&_ZN8S7799C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7799C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7799C143v12Ev,
  (VTBL_ENTRY)&_ZN8S7799C143v13Ev,
};
extern void _ZN7S7799C2D1Ev();
extern void _ZN7S7799C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C28S7799C14__A1__7S7799C1[] = {
  ABISELECT(16888,9320),
  ABISELECT(16432,9064),
  ABISELECT(16336,9008),
  ABISELECT(15856,8740),
  ABISELECT(15488,8544),
  ABISELECT(4560,2508),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C2D0Ev,
};
extern void _ZN7S7799C32v7Ev();
extern void _ZN7S7799C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N7S7799C2D1Ev,_ZTv0_n40_N7S7799C2D1Ev)();
extern void ABISELECT(_ZThn4560_N7S7799C2D1Ev,_ZThn2508_N7S7799C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7799C2D0Ev,_ZTv0_n40_N7S7799C2D0Ev)();
extern void ABISELECT(_ZThn4560_N7S7799C2D0Ev,_ZThn2508_N7S7799C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7799C3__7S7799C28S7799C14__A1__7S7799C1[] = {
  ABISELECT(-4560,-2508),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-4560,-2508),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7799C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7799C2D1Ev,_ZTv0_n40_N7S7799C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7799C2D0Ev,_ZTv0_n40_N7S7799C2D0Ev),
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C28S7799C14__A1__7S7799C1[] = {
  0,
  ABISELECT(-15488,-8544),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7799C2D1Ev,_ZTv0_n32_N7S7799C2D1Ev)();
extern void ABISELECT(_ZThn15856_N7S7799C2D1Ev,_ZThn8740_N7S7799C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7799C2D0Ev,_ZTv0_n32_N7S7799C2D0Ev)();
extern void ABISELECT(_ZThn15856_N7S7799C2D0Ev,_ZThn8740_N7S7799C2D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__7S7799C28S7799C14__A1__7S7799C1[] = {
  0,
  ABISELECT(-15856,-8740),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15856,-8740),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C2D1Ev,_ZTv0_n32_N7S7799C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C2D0Ev,_ZTv0_n32_N7S7799C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C28S7799C14__A1__7S7799C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16336,-9008),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C28S7799C14__A1__7S7799C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16432,-9064),
  (VTBL_ENTRY)&(_ZTI7S7799C2[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN8S7799C15D1Ev();
extern void _ZN8S7799C15D0Ev();
extern void _ZN8S7799C153v11Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C158S7799C14__7S7799C1[] = {
  ABISELECT(15824,8720),
  ABISELECT(16856,9300),
  ABISELECT(15456,8524),
  ABISELECT(16400,9044),
  ABISELECT(16304,8988),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  (VTBL_ENTRY)&_ZN8S7799C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7799C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7799C153v11Ev,
};
extern void _ZN8S7799C16D1Ev();
extern void _ZN8S7799C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C168S7799C158S7799C14__7S7799C1[] = {
  ABISELECT(15824,8720),
  ABISELECT(16856,9300),
  ABISELECT(15456,8524),
  ABISELECT(16400,9044),
  ABISELECT(16304,8988),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN8S7799C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7799C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__8S7799C168S7799C158S7799C14__7S7799C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16304,-8988),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__8S7799C168S7799C158S7799C14__7S7799C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16400,-9044),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C168S7799C158S7799C14__7S7799C1[] = {
  0,
  ABISELECT(-15456,-8524),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7799C16D1Ev,_ZTv0_n32_N8S7799C16D1Ev)();
extern void ABISELECT(_ZThn15824_N8S7799C16D1Ev,_ZThn8720_N8S7799C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7799C16D0Ev,_ZTv0_n32_N8S7799C16D0Ev)();
extern void ABISELECT(_ZThn15824_N8S7799C16D0Ev,_ZThn8720_N8S7799C16D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__8S7799C168S7799C158S7799C14__7S7799C1[] = {
  0,
  ABISELECT(-15824,-8720),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15824,-8720),
  (VTBL_ENTRY)&(_ZTI8S7799C16[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C16D1Ev,_ZTv0_n32_N8S7799C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C16D0Ev,_ZTv0_n32_N8S7799C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7799C178S7799C158S7799C14__7S7799C1[] = {
  ABISELECT(11128,6180),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C17[0]),
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C178S7799C158S7799C14__7S7799C1[] = {
  0,
  ABISELECT(-11128,-6180),
  (VTBL_ENTRY)&(_ZTI8S7799C17[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__8S7799C158S7799C14__7S7799C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16304,-8988),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__8S7799C158S7799C14__7S7799C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16400,-9044),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C158S7799C14__7S7799C1[] = {
  0,
  ABISELECT(-15456,-8524),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7799C15D1Ev,_ZTv0_n32_N8S7799C15D1Ev)();
extern void ABISELECT(_ZThn15824_N8S7799C15D1Ev,_ZThn8720_N8S7799C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7799C15D0Ev,_ZTv0_n32_N8S7799C15D0Ev)();
extern void ABISELECT(_ZThn15824_N8S7799C15D0Ev,_ZThn8720_N8S7799C15D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__8S7799C158S7799C14__7S7799C1[] = {
  0,
  ABISELECT(-15824,-8720),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15824,-8720),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C15D1Ev,_ZTv0_n32_N8S7799C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C15D0Ev,_ZTv0_n32_N8S7799C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7799C17__8S7799C158S7799C14__7S7799C1[] = {
  ABISELECT(11128,6180),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI8S7799C15[0]),
};
extern void _ZN7S7799C32v7Ev();
extern void _ZN7S7799C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S7799C14D1Ev,_ZTv0_n40_N8S7799C14D1Ev)();
extern void ABISELECT(_ZThn4560_N8S7799C14D1Ev,_ZThn2508_N8S7799C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7799C14D0Ev,_ZTv0_n40_N8S7799C14D0Ev)();
extern void ABISELECT(_ZThn4560_N8S7799C14D0Ev,_ZThn2508_N8S7799C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7799C3__8S7799C14__7S7799C1[] = {
  ABISELECT(-4560,-2508),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-4560,-2508),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  (VTBL_ENTRY)&_ZN7S7799C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7799C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7799C14D1Ev,_ZTv0_n40_N8S7799C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7799C14D0Ev,_ZTv0_n40_N8S7799C14D0Ev),
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C14__7S7799C1[] = {
  0,
  ABISELECT(-15488,-8544),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7799C14D1Ev,_ZTv0_n32_N8S7799C14D1Ev)();
extern void ABISELECT(_ZThn15856_N8S7799C14D1Ev,_ZThn8740_N8S7799C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7799C14D0Ev,_ZTv0_n32_N8S7799C14D0Ev)();
extern void ABISELECT(_ZThn15856_N8S7799C14D0Ev,_ZThn8740_N8S7799C14D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__8S7799C14__7S7799C1[] = {
  0,
  ABISELECT(-15856,-8740),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15856,-8740),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C14D1Ev,_ZTv0_n32_N8S7799C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7799C14D0Ev,_ZTv0_n32_N8S7799C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__8S7799C14__7S7799C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16336,-9008),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__8S7799C14__7S7799C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16432,-9064),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void ABISELECT(_ZThn32_N8S7799C14D1Ev,_ZThn20_N8S7799C14D1Ev)();
extern void ABISELECT(_ZThn32_N8S7799C14D0Ev,_ZThn20_N8S7799C14D0Ev)();
extern void _ZN8S7799C153v11Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C15__8S7799C14__7S7799C1[] = {
  ABISELECT(15824,8720),
  ABISELECT(16856,9300),
  ABISELECT(15456,8524),
  ABISELECT(16400,9044),
  ABISELECT(16304,8988),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7799C14D1Ev,_ZThn20_N8S7799C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7799C14D0Ev,_ZThn20_N8S7799C14D0Ev),
  (VTBL_ENTRY)&_ZN8S7799C153v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7799C178S7799C15__8S7799C14__7S7799C1[] = {
  ABISELECT(11128,6180),
  ABISELECT(-4360,-2364),
  (VTBL_ENTRY)&(_ZTI8S7799C14[0]),
};
extern void _ZN7S7799C32v7Ev();
extern void _ZN7S7799C32v8Ev();
extern void _ZN7S7799C3D1Ev();
extern void _ZN7S7799C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C3__7S7799C1[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7799C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7799C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C3D0Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C3__7S7799C1[] = {
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7799C3D1Ev,_ZTv0_n32_N7S7799C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7799C3D1Ev,_ZThn6232_N7S7799C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7799C3D0Ev,_ZTv0_n32_N7S7799C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7799C3D0Ev,_ZThn6232_N7S7799C3D0Ev)() __attribute__((weak));
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__7S7799C3__7S7799C1[] = {
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C3D1Ev,_ZTv0_n32_N7S7799C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7799C3D0Ev,_ZTv0_n32_N7S7799C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C3__7S7799C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C3__7S7799C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI7S7799C3[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
extern void _ZN7S7799C8D1Ev();
extern void _ZN7S7799C8D0Ev();
extern void _ZN7S7799C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C8__7S7799C1[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7799C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7799C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C8__7S7799C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C8__7S7799C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C8__7S7799C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7799C8[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7799C9__7S7799C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C9__7S7799C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__7S7799C9__7S7799C1[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7799C9[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
extern void _ZN7S7799C72v3Ev();
extern void _ZN8S7799C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7799C10__7S7799C1[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7799C102v5Ev,
};
extern void _ZN7S7799C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7799C4__8S7799C10__7S7799C1[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7799C10[0]),
  (VTBL_ENTRY)&_ZN7S7799C42v4Ev,
};
static  VTT_ENTRY vtt_S7799C1[] = {
  {&(_ZTV7S7799C1[10]),  10,90},
  {&(_tg__ZTV7S7799C2__7S7799C1[8]),  8,10},
  {&(_tg__ZTV7S7799C3__7S7799C2__7S7799C1[10]),  10,14},
  {&(_tg__ZTV7S7799C4__7S7799C2__7S7799C1[3]),  3,4},
  {&(_tg__ZTV7S7799C8__7S7799C2__7S7799C1[9]),  9,13},
  {&(_tg__ZTV7S7799C9__7S7799C2__7S7799C1[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C2__7S7799C1[6]),  6,8},
  {&(_tg__ZTV8S7799C14__7S7799C1[8]),  8,12},
  {&(_tg__ZTV7S7799C28S7799C14__A1__7S7799C1[8]),  8,10},
  {&(_tg__ZTV7S7799C3__7S7799C28S7799C14__A1__7S7799C1[10]),  10,14},
  {&(_tg__ZTV7S7799C4__7S7799C28S7799C14__A1__7S7799C1[3]),  3,4},
  {&(_tg__ZTV7S7799C8__7S7799C28S7799C14__A1__7S7799C1[9]),  9,13},
  {&(_tg__ZTV7S7799C9__7S7799C28S7799C14__A1__7S7799C1[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C28S7799C14__A1__7S7799C1[6]),  6,8},
  {&(_tg__ZTV8S7799C158S7799C14__7S7799C1[7]),  7,10},
  {&(_tg__ZTV8S7799C168S7799C158S7799C14__7S7799C1[7]),  7,9},
  {&(_tg__ZTV7S7799C9__8S7799C168S7799C158S7799C14__7S7799C1[5]),  5,5},
  {&(_tg__ZTV8S7799C10__8S7799C168S7799C158S7799C14__7S7799C1[6]),  6,8},
  {&(_tg__ZTV7S7799C4__8S7799C168S7799C158S7799C14__7S7799C1[3]),  3,4},
  {&(_tg__ZTV7S7799C8__8S7799C168S7799C158S7799C14__7S7799C1[9]),  9,13},
  {&(_tg__ZTV8S7799C178S7799C158S7799C14__7S7799C1[3]),  3,3},
  {&(_tg__ZTV7S7799C4__8S7799C178S7799C158S7799C14__7S7799C1[3]),  3,4},
  {&(_tg__ZTV7S7799C9__8S7799C158S7799C14__7S7799C1[5]),  5,5},
  {&(_tg__ZTV8S7799C10__8S7799C158S7799C14__7S7799C1[6]),  6,8},
  {&(_tg__ZTV7S7799C4__8S7799C158S7799C14__7S7799C1[3]),  3,4},
  {&(_tg__ZTV7S7799C8__8S7799C158S7799C14__7S7799C1[9]),  9,13},
  {&(_tg__ZTV8S7799C17__8S7799C158S7799C14__7S7799C1[3]),  3,3},
  {&(_tg__ZTV7S7799C3__8S7799C14__7S7799C1[10]),  10,14},
  {&(_tg__ZTV7S7799C4__8S7799C14__7S7799C1[3]),  3,4},
  {&(_tg__ZTV7S7799C8__8S7799C14__7S7799C1[9]),  9,13},
  {&(_tg__ZTV7S7799C9__8S7799C14__7S7799C1[5]),  5,5},
  {&(_tg__ZTV8S7799C10__8S7799C14__7S7799C1[6]),  6,8},
  {&(_tg__ZTV8S7799C15__8S7799C14__7S7799C1[7]),  7,10},
  {&(_tg__ZTV8S7799C178S7799C15__8S7799C14__7S7799C1[3]),  3,3},
  {&(_ZTV7S7799C1[52]),  52,90},
  {&(_ZTV7S7799C1[59]),  59,90},
  {&(_ZTV7S7799C1[69]),  69,90},
  {&(_ZTV7S7799C1[78]),  78,90},
  {&(_ZTV7S7799C1[84]),  84,90},
  {&(_ZTV7S7799C1[89]),  89,90},
  {&(_ZTV7S7799C1[25]),  25,90},
  {&(_ZTV7S7799C1[36]),  36,90},
  {&(_ZTV7S7799C1[42]),  42,90},
  {&(_tg__ZTV7S7799C3__7S7799C1[7]),  7,11},
  {&(_tg__ZTV7S7799C4__7S7799C3__7S7799C1[3]),  3,4},
  {&(_tg__ZTV7S7799C8__7S7799C3__7S7799C1[9]),  9,13},
  {&(_tg__ZTV7S7799C9__7S7799C3__7S7799C1[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C3__7S7799C1[6]),  6,8},
  {&(_tg__ZTV7S7799C8__7S7799C1[6]),  6,10},
  {&(_tg__ZTV7S7799C9__7S7799C8__7S7799C1[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C8__7S7799C1[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C8__7S7799C1[3]),  3,4},
  {&(_tg__ZTV7S7799C9__7S7799C1[5]),  5,5},
  {&(_tg__ZTV8S7799C10__7S7799C9__7S7799C1[6]),  6,8},
  {&(_tg__ZTV7S7799C4__7S7799C9__7S7799C1[3]),  3,4},
  {&(_tg__ZTV8S7799C10__7S7799C1[4]),  4,6},
  {&(_tg__ZTV7S7799C4__8S7799C10__7S7799C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7799C1[];
extern  VTBL_ENTRY _ZTV7S7799C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7799C1[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C3D0Ev,_ZTv0_n32_N7S7799C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7799C3D0Ev,_ZThn6232_N7S7799C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C3D1Ev,_ZTv0_n32_N7S7799C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7799C3D1Ev,_ZThn6232_N7S7799C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C14D0Ev,_ZTv0_n32_N8S7799C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15856_N8S7799C14D0Ev,_ZThn8740_N8S7799C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C14D1Ev,_ZTv0_n32_N8S7799C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15856_N8S7799C14D1Ev,_ZThn8740_N8S7799C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7799C14D0Ev,_ZTv0_n40_N8S7799C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4560_N8S7799C14D0Ev,_ZThn2508_N8S7799C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7799C14D1Ev,_ZTv0_n40_N8S7799C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4560_N8S7799C14D1Ev,_ZThn2508_N8S7799C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C15D0Ev,_ZTv0_n32_N8S7799C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15824_N8S7799C15D0Ev,_ZThn8720_N8S7799C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C15D1Ev,_ZTv0_n32_N8S7799C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15824_N8S7799C15D1Ev,_ZThn8720_N8S7799C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C16D0Ev,_ZTv0_n32_N8S7799C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15824_N8S7799C16D0Ev,_ZThn8720_N8S7799C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7799C16D1Ev,_ZTv0_n32_N8S7799C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15824_N8S7799C16D1Ev,_ZThn8720_N8S7799C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C2D0Ev,_ZTv0_n32_N7S7799C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15856_N7S7799C2D0Ev,_ZThn8740_N7S7799C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17824_N7S7799C2D0Ev,_ZThn9816_N7S7799C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C2D1Ev,_ZTv0_n32_N7S7799C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15856_N7S7799C2D1Ev,_ZThn8740_N7S7799C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17824_N7S7799C2D1Ev,_ZThn9816_N7S7799C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7799C2D0Ev,_ZTv0_n40_N7S7799C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4560_N7S7799C2D0Ev,_ZThn2508_N7S7799C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6528_N7S7799C2D0Ev,_ZThn3584_N7S7799C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7799C2D1Ev,_ZTv0_n40_N7S7799C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4560_N7S7799C2D1Ev,_ZThn2508_N7S7799C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6528_N7S7799C2D1Ev,_ZThn3584_N7S7799C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C1D0Ev,_ZTv0_n32_N7S7799C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17824_N7S7799C1D0Ev,_ZThn9816_N7S7799C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7799C1D1Ev,_ZTv0_n32_N7S7799C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17824_N7S7799C1D1Ev,_ZThn9816_N7S7799C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7799C1D0Ev,_ZTv0_n40_N7S7799C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6528_N7S7799C1D0Ev,_ZThn3584_N7S7799C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7799C1D1Ev,_ZTv0_n40_N7S7799C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6528_N7S7799C1D1Ev,_ZThn3584_N7S7799C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7799C1 = {  "S7799C1", // class name
  bases_S7799C1, 18,
  &(vtc_S7799C1[0]), // expected_vtbl_contents
  &(vtt_S7799C1[0]), // expected_vtt_contents
  ABISELECT(19056,10504), // object size
  NSPAIRA(_ZTI7S7799C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7799C1),90, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7799C1),57, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7798C7  {
  int s7798c7f0;
  void *s7798c7f1;
  ::S281C37_nt s7798c7f2;
  virtual void  v3(); // _ZN7S7798C72v3Ev
  ~S7798C7(); // tgen
  S7798C7(); // tgen
};
//SIG(-1 S7798C7) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S7798C7()
{
  extern Class_Descriptor cd_S7798C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7798C7, buf);
    S7798C7 *dp, &lv = *(dp=new (buf) S7798C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7798C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7798C7)");
    check_field_offset(lv, s7798c7f0, ABISELECT(8,4), "S7798C7.s7798c7f0");
    check_field_offset(lv, s7798c7f1, ABISELECT(16,8), "S7798C7.s7798c7f1");
    check_field_offset(lv, s7798c7f2, ABISELECT(24,12), "S7798C7.s7798c7f2");
    test_class_info(&lv, &cd_S7798C7);
    dp->~S7798C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C7(Test_S7798C7, "S7798C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7798C7C1Ev();
extern void _ZN7S7798C7D1Ev();
Name_Map name_map_S7798C7[] = {
  NSPAIR(_ZN7S7798C7C1Ev),
  NSPAIR(_ZN7S7798C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7798C7[];
extern void _ZN7S7798C72v3Ev();
static  VTBL_ENTRY vtc_S7798C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C7[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
};
extern VTBL_ENTRY _ZTI7S7798C7[];
extern  VTBL_ENTRY _ZTV7S7798C7[];
Class_Descriptor cd_S7798C7 = {  "S7798C7", // class name
  0,0,//no base classes
  &(vtc_S7798C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7798C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7798C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7798C4  {
  int s7798c4f0[6];
  char s7798c4f1:2;
  long double s7798c4f2;
  void *s7798c4f3[2];
  int s7798c4f4;
  long double s7798c4f5;
  ::S20176C3_nt s7798c4f6;
  ::S281C37_nt s7798c4f7;
  ::S281C37_nt s7798c4f8[9];
  void *s7798c4f9;
  ::S7798C7 s7798c4f10;
  ::S7798C7 s7798c4f11;
  virtual void  v4(); // _ZN7S7798C42v4Ev
  ~S7798C4(); // tgen
  S7798C4(); // tgen
};
//SIG(-1 S7798C4) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


void  S7798C4 ::v4(){vfunc_called(this, "_ZN7S7798C42v4Ev");}
S7798C4 ::~S7798C4(){ note_dtor("S7798C4", this);} // tgen
S7798C4 ::S7798C4(){ note_ctor("S7798C4", this);} // tgen

static void Test_S7798C4()
{
  extern Class_Descriptor cd_S7798C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S7798C4, buf);
    S7798C4 *dp, &lv = *(dp=new (buf) S7798C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S7798C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7798C4)");
    check_field_offset(lv, s7798c4f0, ABISELECT(8,4), "S7798C4.s7798c4f0");
    set_bf_and_test(lv, s7798c4f1, ABISELECT(32,28), 0, 2, 1, "S7798C4");
    set_bf_and_test(lv, s7798c4f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S7798C4");
    check_field_offset(lv, s7798c4f2, ABISELECT(48,32), "S7798C4.s7798c4f2");
    check_field_offset(lv, s7798c4f3, ABISELECT(64,44), "S7798C4.s7798c4f3");
    check_field_offset(lv, s7798c4f4, ABISELECT(80,52), "S7798C4.s7798c4f4");
    check_field_offset(lv, s7798c4f5, ABISELECT(96,56), "S7798C4.s7798c4f5");
    check_field_offset(lv, s7798c4f6, ABISELECT(112,68), "S7798C4.s7798c4f6");
    check_field_offset(lv, s7798c4f7, ABISELECT(120,72), "S7798C4.s7798c4f7");
    check_field_offset(lv, s7798c4f8, ABISELECT(136,80), "S7798C4.s7798c4f8");
    check_field_offset(lv, s7798c4f9, ABISELECT(280,152), "S7798C4.s7798c4f9");
    check_field_offset(lv, s7798c4f10, ABISELECT(288,156), "S7798C4.s7798c4f10");
    check_field_offset(lv, s7798c4f11, ABISELECT(328,176), "S7798C4.s7798c4f11");
    test_class_info(&lv, &cd_S7798C4);
    dp->~S7798C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C4(Test_S7798C4, "S7798C4", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN7S7798C4C1Ev();
extern void _ZN7S7798C4D1Ev();
Name_Map name_map_S7798C4[] = {
  NSPAIR(_ZN7S7798C4C1Ev),
  NSPAIR(_ZN7S7798C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7798C4[];
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY vtc_S7798C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C4[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
Class_Descriptor cd_S7798C4 = {  "S7798C4", // class name
  0,0,//no base classes
  &(vtc_S7798C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI7S7798C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7798C4),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7798C10  : S7798C7 , virtual S7798C4 , virtual S281C37_nt {
  void *s7798c10f0;
  __tsi64 s7798c10f1;
  char s7798c10f2[2];
  ::S7798C4 s7798c10f3;
  short s7798c10f4[7];
  int s7798c10f5;
  char s7798c10f6;
  int s7798c10f7:20;
  virtual void  v5(); // _ZN8S7798C102v5Ev
  ~S7798C10(); // tgen
  S7798C10(); // tgen
};
//SIG(-1 S7798C10) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


void  S7798C10 ::v5(){vfunc_called(this, "_ZN8S7798C102v5Ev");}
S7798C10 ::~S7798C10(){ note_dtor("S7798C10", this);} // tgen
S7798C10 ::S7798C10(){ note_ctor("S7798C10", this);} // tgen

static void Test_S7798C10()
{
  extern Class_Descriptor cd_S7798C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S7798C10, buf);
    S7798C10 *dp, &lv = *(dp=new (buf) S7798C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S7798C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7798C10)");
    check_base_class_offset(lv, (S7798C7*), 0, "S7798C10");
    check_base_class_offset(lv, (S7798C4*), ABISELECT(464,256), "S7798C10");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S7798C10");
    check_field_offset(lv, s7798c10f0, ABISELECT(40,20), "S7798C10.s7798c10f0");
    check_field_offset(lv, s7798c10f1, ABISELECT(48,24), "S7798C10.s7798c10f1");
    check_field_offset(lv, s7798c10f2, ABISELECT(56,32), "S7798C10.s7798c10f2");
    check_field_offset(lv, s7798c10f3, ABISELECT(64,36), "S7798C10.s7798c10f3");
    check_field_offset(lv, s7798c10f4, ABISELECT(432,232), "S7798C10.s7798c10f4");
    check_field_offset(lv, s7798c10f5, ABISELECT(448,248), "S7798C10.s7798c10f5");
    check_field_offset(lv, s7798c10f6, ABISELECT(452,252), "S7798C10.s7798c10f6");
    set_bf_and_test(lv, s7798c10f7, ABISELECT(453,253), 0, 20, 1, "S7798C10");
    set_bf_and_test(lv, s7798c10f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S7798C10");
    test_class_info(&lv, &cd_S7798C10);
    dp->~S7798C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C10(Test_S7798C10, "S7798C10", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN8S7798C10C1Ev();
extern void _ZN8S7798C10D1Ev();
Name_Map name_map_S7798C10[] = {
  NSPAIR(_ZN8S7798C10C1Ev),
  NSPAIR(_ZN8S7798C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7798C7;
extern VTBL_ENTRY _ZTI7S7798C7[];
extern  VTBL_ENTRY _ZTV7S7798C7[];
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S7798C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7798C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7798C4,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7798C10[];
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY vtc_S7798C10[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S7798C10[];
static  VTT_ENTRY vtt_S7798C10[] = {
  {&(_ZTV8S7798C10[4]),  4,10},
  {&(_ZTV8S7798C10[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S7798C10[];
extern  VTBL_ENTRY _ZTV8S7798C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C10[];
Class_Descriptor cd_S7798C10 = {  "S7798C10", // class name
  bases_S7798C10, 3,
  &(vtc_S7798C10[0]), // expected_vtbl_contents
  &(vtt_S7798C10[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI8S7798C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7798C10),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7798C10),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  S7798C9  : virtual S7798C10 {
  int s7798c9f0;
  char s7798c9f1;
  void *s7798c9f2[6];
  int s7798c9f3[2];
  void *s7798c9f4;
  ::S281C37_nt s7798c9f5;
  ~S7798C9(); // tgen
  S7798C9(); // tgen
};
//SIG(-1 S7798C9) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S7798C9()
{
  extern Class_Descriptor cd_S7798C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S7798C9, buf);
    S7798C9 *dp, &lv = *(dp=new (buf) S7798C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S7798C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7798C9)");
    check_base_class_offset(lv, (S7798C7*)(S7798C10*), ABISELECT(96,56), "S7798C9");
    check_base_class_offset(lv, (S7798C4*)(S7798C10*), ABISELECT(560,312), "S7798C9");
    check_base_class_offset(lv, (S281C37_nt*)(S7798C10*), ABISELECT(928,508), "S7798C9");
    check_base_class_offset(lv, (S7798C10*), ABISELECT(96,56), "S7798C9");
    check_field_offset(lv, s7798c9f0, ABISELECT(8,4), "S7798C9.s7798c9f0");
    check_field_offset(lv, s7798c9f1, ABISELECT(12,8), "S7798C9.s7798c9f1");
    check_field_offset(lv, s7798c9f2, ABISELECT(16,12), "S7798C9.s7798c9f2");
    check_field_offset(lv, s7798c9f3, ABISELECT(64,36), "S7798C9.s7798c9f3");
    check_field_offset(lv, s7798c9f4, ABISELECT(72,44), "S7798C9.s7798c9f4");
    check_field_offset(lv, s7798c9f5, ABISELECT(80,48), "S7798C9.s7798c9f5");
    test_class_info(&lv, &cd_S7798C9);
    dp->~S7798C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C9(Test_S7798C9, "S7798C9", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN7S7798C9C1Ev();
extern void _ZN7S7798C9D1Ev();
Name_Map name_map_S7798C9[] = {
  NSPAIR(_ZN7S7798C9C1Ev),
  NSPAIR(_ZN7S7798C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7798C7;
extern VTBL_ENTRY _ZTI7S7798C7[];
extern  VTBL_ENTRY _ZTV7S7798C7[];
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C10;
extern VTBL_ENTRY _ZTI8S7798C10[];
extern  VTBL_ENTRY _ZTV8S7798C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C10[];
static Base_Class bases_S7798C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7798C7,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7798C4,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7798C10,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7798C9[];
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY vtc_S7798C9[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7798C9[];
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C9[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C10__7S7798C9[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTT_ENTRY vtt_S7798C9[] = {
  {&(_ZTV7S7798C9[5]),  5,17},
  {&(_ZTV7S7798C9[11]),  11,17},
  {&(_ZTV7S7798C9[16]),  16,17},
  {&(_tg__ZTV8S7798C10__7S7798C9[4]),  4,6},
  {&(_tg__ZTV7S7798C4__8S7798C10__7S7798C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7798C9[];
extern  VTBL_ENTRY _ZTV7S7798C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C9[];
Class_Descriptor cd_S7798C9 = {  "S7798C9", // class name
  bases_S7798C9, 4,
  &(vtc_S7798C9[0]), // expected_vtbl_contents
  &(vtt_S7798C9[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI7S7798C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7798C9),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7798C9),5, //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  S7798C8  : virtual S7798C9 , S7798C4 , S281C37_nt {
  char s7798c8f0;
  int s7798c8f1[2];
  long double s7798c8f2[2];
  short s7798c8f3;
  void *s7798c8f4;
  int s7798c8f5;
  __tsi64 s7798c8f6;
  int s7798c8f7;
  void *s7798c8f8;
  virtual  ~S7798C8(); // _ZN7S7798C8D2Ev
  virtual void  v6(); // _ZN7S7798C82v6Ev
  S7798C8(); // tgen
};
//SIG(-1 S7798C8) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S7798C8 ::~S7798C8(){ note_dtor("S7798C8", this);}
void  S7798C8 ::v6(){vfunc_called(this, "_ZN7S7798C82v6Ev");}
S7798C8 ::S7798C8(){ note_ctor("S7798C8", this);} // tgen

static void Test_S7798C8()
{
  extern Class_Descriptor cd_S7798C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S7798C8, buf);
    S7798C8 *dp, &lv = *(dp=new (buf) S7798C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S7798C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7798C8)");
    check_base_class_offset(lv, (S7798C7*)(S7798C10*), ABISELECT(576,324), "S7798C8");
    check_base_class_offset(lv, (S7798C4*)(S7798C10*), ABISELECT(1040,580), "S7798C8");
    check_base_class_offset(lv, (S281C37_nt*)(S7798C10*), ABISELECT(1408,776), "S7798C8");
    check_base_class_offset(lv, (S7798C10*)(S7798C9*), ABISELECT(576,324), "S7798C8");
    check_base_class_offset(lv, (S7798C9*), ABISELECT(480,268), "S7798C8");
    /*is_ambiguous_... S7798C8::S7798C4 */ AMB_check_base_class_offset(lv, (S7798C4*), 0, "S7798C8");
    /*is_ambiguous_... S7798C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S7798C8");
    check_field_offset(lv, s7798c8f0, ABISELECT(384,204), "S7798C8.s7798c8f0");
    check_field_offset(lv, s7798c8f1, ABISELECT(388,208), "S7798C8.s7798c8f1");
    check_field_offset(lv, s7798c8f2, ABISELECT(400,216), "S7798C8.s7798c8f2");
    check_field_offset(lv, s7798c8f3, ABISELECT(432,240), "S7798C8.s7798c8f3");
    check_field_offset(lv, s7798c8f4, ABISELECT(440,244), "S7798C8.s7798c8f4");
    check_field_offset(lv, s7798c8f5, ABISELECT(448,248), "S7798C8.s7798c8f5");
    check_field_offset(lv, s7798c8f6, ABISELECT(456,252), "S7798C8.s7798c8f6");
    check_field_offset(lv, s7798c8f7, ABISELECT(464,260), "S7798C8.s7798c8f7");
    check_field_offset(lv, s7798c8f8, ABISELECT(472,264), "S7798C8.s7798c8f8");
    test_class_info(&lv, &cd_S7798C8);
    dp->~S7798C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C8(Test_S7798C8, "S7798C8", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN7S7798C8C1Ev();
extern void _ZN7S7798C8D2Ev();
Name_Map name_map_S7798C8[] = {
  NSPAIR(_ZN7S7798C8C1Ev),
  NSPAIR(_ZN7S7798C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7798C7;
extern VTBL_ENTRY _ZTI7S7798C7[];
extern  VTBL_ENTRY _ZTV7S7798C7[];
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C10;
extern VTBL_ENTRY _ZTI8S7798C10[];
extern  VTBL_ENTRY _ZTV8S7798C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C10[];
extern Class_Descriptor cd_S7798C9;
extern VTBL_ENTRY _ZTI7S7798C9[];
extern  VTBL_ENTRY _ZTV7S7798C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C9[];
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S7798C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7798C7,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7798C4,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C10,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7798C9,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7798C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7798C8[];
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C8D1Ev();
extern void _ZN7S7798C8D0Ev();
extern void _ZN7S7798C82v6Ev();
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY vtc_S7798C8[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7798C8[];
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C8[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C9__7S7798C8[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C9__7S7798C8[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C8[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C10__7S7798C8[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTT_ENTRY vtt_S7798C8[] = {
  {&(_ZTV7S7798C8[6]),  6,27},
  {&(_ZTV7S7798C8[15]),  15,27},
  {&(_ZTV7S7798C8[21]),  21,27},
  {&(_ZTV7S7798C8[26]),  26,27},
  {&(_tg__ZTV7S7798C9__7S7798C8[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C9__7S7798C8[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C9__7S7798C8[3]),  3,4},
  {&(_tg__ZTV8S7798C10__7S7798C8[4]),  4,6},
  {&(_tg__ZTV7S7798C4__8S7798C10__7S7798C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7798C8[];
extern  VTBL_ENTRY _ZTV7S7798C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C8[];
Class_Descriptor cd_S7798C8 = {  "S7798C8", // class name
  bases_S7798C8, 7,
  &(vtc_S7798C8[0]), // expected_vtbl_contents
  &(vtt_S7798C8[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI7S7798C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7798C8),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7798C8),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7798C3  : virtual S7798C4 , virtual S7798C8 {
  ::S7798C8 s7798c3f0[7];
  int s7798c3f1;
  short s7798c3f2;
  int s7798c3f3;
  ::S7798C10 s7798c3f4;
  long s7798c3f5[9];
  virtual void  v7(); // _ZN7S7798C32v7Ev
  virtual void  v8(); // _ZN7S7798C32v8Ev
  ~S7798C3(); // tgen
  S7798C3(); // tgen
};
//SIG(-1 S7798C3) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 Fl[9]}


void  S7798C3 ::v7(){vfunc_called(this, "_ZN7S7798C32v7Ev");}
void  S7798C3 ::v8(){vfunc_called(this, "_ZN7S7798C32v8Ev");}
S7798C3 ::~S7798C3(){ note_dtor("S7798C3", this);} // tgen
S7798C3 ::S7798C3(){ note_ctor("S7798C3", this);} // tgen

static void Test_S7798C3()
{
  extern Class_Descriptor cd_S7798C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1697)];
    init_test(&cd_S7798C3, buf);
    S7798C3 *dp, &lv = *(dp=new (buf) S7798C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6784), "sizeof(S7798C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7798C3)");
    /*is_ambiguous_... S7798C3::S7798C4 */ AMB_check_base_class_offset(lv, (S7798C4*), ABISELECT(10928,6000), "S7798C3");
    check_base_class_offset(lv, (S7798C4*)(S7798C10*), ABISELECT(10928,6000), "S7798C3");
    check_base_class_offset(lv, (S7798C7*)(S7798C10*), ABISELECT(11872,6520), "S7798C3");
    check_base_class_offset(lv, (S281C37_nt*)(S7798C10*), ABISELECT(12328,6776), "S7798C3");
    check_base_class_offset(lv, (S7798C10*)(S7798C9*), ABISELECT(11872,6520), "S7798C3");
    check_base_class_offset(lv, (S7798C9*)(S7798C8*), ABISELECT(11776,6464), "S7798C3");
    /*is_ambiguous_... S7798C8::S7798C4 */ AMB_check_base_class_offset(lv, (S7798C4*)(S7798C8*), ABISELECT(11296,6196), "S7798C3");
    /*is_ambiguous_... S7798C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7798C8*), ABISELECT(11664,6392), "S7798C3");
    check_base_class_offset(lv, (S7798C8*), ABISELECT(11296,6196), "S7798C3");
    check_field_offset(lv, s7798c3f0, ABISELECT(16,4), "S7798C3.s7798c3f0");
    check_field_offset(lv, s7798c3f1, ABISELECT(9984,5492), "S7798C3.s7798c3f1");
    check_field_offset(lv, s7798c3f2, ABISELECT(9988,5496), "S7798C3.s7798c3f2");
    check_field_offset(lv, s7798c3f3, ABISELECT(9992,5500), "S7798C3.s7798c3f3");
    check_field_offset(lv, s7798c3f4, ABISELECT(10000,5504), "S7798C3.s7798c3f4");
    check_field_offset(lv, s7798c3f5, ABISELECT(10848,5964), "S7798C3.s7798c3f5");
    test_class_info(&lv, &cd_S7798C3);
    dp->~S7798C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C3(Test_S7798C3, "S7798C3", ABISELECT(12352,6784));

#else // __cplusplus

extern void _ZN7S7798C3C1Ev();
extern void _ZN7S7798C3D1Ev();
Name_Map name_map_S7798C3[] = {
  NSPAIR(_ZN7S7798C3C1Ev),
  NSPAIR(_ZN7S7798C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S7798C7;
extern VTBL_ENTRY _ZTI7S7798C7[];
extern  VTBL_ENTRY _ZTV7S7798C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C10;
extern VTBL_ENTRY _ZTI8S7798C10[];
extern  VTBL_ENTRY _ZTV8S7798C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C10[];
extern Class_Descriptor cd_S7798C9;
extern VTBL_ENTRY _ZTI7S7798C9[];
extern  VTBL_ENTRY _ZTV7S7798C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C9[];
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C8;
extern VTBL_ENTRY _ZTI7S7798C8[];
extern  VTBL_ENTRY _ZTV7S7798C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C8[];
static Base_Class bases_S7798C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7798C4,    ABISELECT(10928,6000), //bcp->offset
    11, //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_S7798C7,    ABISELECT(11872,6520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C10,    ABISELECT(11872,6520), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7798C9,    ABISELECT(11776,6464), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7798C4,    ABISELECT(11296,6196), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C8,    ABISELECT(11296,6196), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7798C3[];
extern void _ZN7S7798C32v7Ev();
extern void _ZN7S7798C32v8Ev();
extern void _ZN7S7798C3D1Ev();
extern void _ZN7S7798C3D0Ev();
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7798C3D1Ev,_ZTv0_n32_N7S7798C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7798C3D1Ev,_ZThn6196_N7S7798C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7798C3D0Ev,_ZTv0_n32_N7S7798C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7798C3D0Ev,_ZThn6196_N7S7798C3D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY vtc_S7798C3[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7798C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7798C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C3D0Ev,
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C3D1Ev,_ZTv0_n32_N7S7798C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C3D0Ev,_ZTv0_n32_N7S7798C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern VTBL_ENTRY _ZTV7S7798C3[];
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C8D1Ev();
extern void _ZN7S7798C8D0Ev();
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__7S7798C3[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C8__7S7798C3[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C8__7S7798C3[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C8__7S7798C3[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C3[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C9__7S7798C3[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C9__7S7798C3[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C3[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C10__7S7798C3[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTT_ENTRY vtt_S7798C3[] = {
  {&(_ZTV7S7798C3[7]),  7,41},
  {&(_ZTV7S7798C3[14]),  14,41},
  {&(_ZTV7S7798C3[24]),  24,41},
  {&(_ZTV7S7798C3[33]),  33,41},
  {&(_ZTV7S7798C3[39]),  39,41},
  {&(_tg__ZTV7S7798C8__7S7798C3[6]),  6,10},
  {&(_tg__ZTV7S7798C9__7S7798C8__7S7798C3[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C8__7S7798C3[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C8__7S7798C3[3]),  3,4},
  {&(_tg__ZTV7S7798C9__7S7798C3[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C9__7S7798C3[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C9__7S7798C3[3]),  3,4},
  {&(_tg__ZTV8S7798C10__7S7798C3[4]),  4,6},
  {&(_tg__ZTV7S7798C4__8S7798C10__7S7798C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7798C3[];
extern  VTBL_ENTRY _ZTV7S7798C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C3[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C3D0Ev,_ZTv0_n32_N7S7798C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7798C3D0Ev,_ZThn6196_N7S7798C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C3D1Ev,_ZTv0_n32_N7S7798C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7798C3D1Ev,_ZThn6196_N7S7798C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7798C3 = {  "S7798C3", // class name
  bases_S7798C3, 8,
  &(vtc_S7798C3[0]), // expected_vtbl_contents
  &(vtt_S7798C3[0]), // expected_vtt_contents
  ABISELECT(12352,6784), // object size
  NSPAIRA(_ZTI7S7798C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7798C3),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7798C3),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7798C2  : virtual S7798C3 {
  char s7798c2f0;
  int s7798c2f1[3];
  virtual  ~S7798C2(); // _ZN7S7798C2D2Ev
  S7798C2(); // tgen
};
//SIG(-1 S7798C2) C1{ VBC2{ VBC3{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v2 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v3 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v5 v6 FC7[7] Fi Fs Fi FC9 Fl[9]} vd Fc Fi[3]}


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

static void Test_S7798C2()
{
  extern Class_Descriptor cd_S7798C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(775,1702)];
    init_test(&cd_S7798C2, buf);
    S7798C2 *dp, &lv = *(dp=new (buf) S7798C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12384,6804), "sizeof(S7798C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7798C2)");
    /*is_ambiguous_... S7798C3::S7798C4 */ AMB_check_base_class_offset(lv, (S7798C4*)(S7798C3*), ABISELECT(10960,6020), "S7798C2");
    check_base_class_offset(lv, (S7798C4*)(S7798C10*), ABISELECT(10960,6020), "S7798C2");
    check_base_class_offset(lv, (S7798C7*)(S7798C10*), ABISELECT(11904,6540), "S7798C2");
    check_base_class_offset(lv, (S281C37_nt*)(S7798C10*), ABISELECT(12360,6796), "S7798C2");
    check_base_class_offset(lv, (S7798C10*)(S7798C9*), ABISELECT(11904,6540), "S7798C2");
    check_base_class_offset(lv, (S7798C9*)(S7798C8*), ABISELECT(11808,6484), "S7798C2");
    /*is_ambiguous_... S7798C8::S7798C4 */ AMB_check_base_class_offset(lv, (S7798C4*)(S7798C8*), ABISELECT(11328,6216), "S7798C2");
    /*is_ambiguous_... S7798C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7798C8*), ABISELECT(11696,6412), "S7798C2");
    check_base_class_offset(lv, (S7798C8*)(S7798C3*), ABISELECT(11328,6216), "S7798C2");
    check_base_class_offset(lv, (S7798C3*), ABISELECT(32,20), "S7798C2");
    check_field_offset(lv, s7798c2f0, ABISELECT(8,4), "S7798C2.s7798c2f0");
    check_field_offset(lv, s7798c2f1, ABISELECT(12,8), "S7798C2.s7798c2f1");
    test_class_info(&lv, &cd_S7798C2);
    dp->~S7798C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C2(Test_S7798C2, "S7798C2", ABISELECT(12384,6804));

#else // __cplusplus

extern void _ZN7S7798C2C1Ev();
extern void _ZN7S7798C2D2Ev();
Name_Map name_map_S7798C2[] = {
  NSPAIR(_ZN7S7798C2C1Ev),
  NSPAIR(_ZN7S7798C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S7798C7;
extern VTBL_ENTRY _ZTI7S7798C7[];
extern  VTBL_ENTRY _ZTV7S7798C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C10;
extern VTBL_ENTRY _ZTI8S7798C10[];
extern  VTBL_ENTRY _ZTV8S7798C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C10[];
extern Class_Descriptor cd_S7798C9;
extern VTBL_ENTRY _ZTI7S7798C9[];
extern  VTBL_ENTRY _ZTV7S7798C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C9[];
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C8;
extern VTBL_ENTRY _ZTI7S7798C8[];
extern  VTBL_ENTRY _ZTV7S7798C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C8[];
extern Class_Descriptor cd_S7798C3;
extern VTBL_ENTRY _ZTI7S7798C3[];
extern  VTBL_ENTRY _ZTV7S7798C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C3[];
static Base_Class bases_S7798C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7798C4,    ABISELECT(10960,6020), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S7798C7,    ABISELECT(11904,6540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12360,6796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C10,    ABISELECT(11904,6540), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7798C9,    ABISELECT(11808,6484), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7798C4,    ABISELECT(11328,6216), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11696,6412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C8,    ABISELECT(11328,6216), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7798C3,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7798C2[];
extern void _ZN7S7798C2D1Ev();
extern void _ZN7S7798C2D0Ev();
extern void _ZN7S7798C32v7Ev();
extern void _ZN7S7798C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N7S7798C2D1Ev,_ZTv0_n40_N7S7798C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7798C2D1Ev,_ZThn20_N7S7798C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7798C2D0Ev,_ZTv0_n40_N7S7798C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7798C2D0Ev,_ZThn20_N7S7798C2D0Ev)() __attribute__((weak));
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7798C2D1Ev,_ZTv0_n32_N7S7798C2D1Ev)();
extern void ABISELECT(_ZThn11328_N7S7798C2D1Ev,_ZThn6216_N7S7798C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7798C2D0Ev,_ZTv0_n32_N7S7798C2D0Ev)();
extern void ABISELECT(_ZThn11328_N7S7798C2D0Ev,_ZThn6216_N7S7798C2D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY vtc_S7798C2[] = {
  ABISELECT(12360,6796),
  ABISELECT(11904,6540),
  ABISELECT(11808,6484),
  ABISELECT(11328,6216),
  ABISELECT(10960,6020),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C2D0Ev,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7798C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7798C2D1Ev,_ZTv0_n40_N7S7798C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7798C2D0Ev,_ZTv0_n40_N7S7798C2D0Ev),
  0,
  ABISELECT(-10960,-6020),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  0,
  ABISELECT(-11328,-6216),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11328,-6216),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C2D1Ev,_ZTv0_n32_N7S7798C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C2D0Ev,_ZTv0_n32_N7S7798C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11808,-6484),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11904,-6540),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern VTBL_ENTRY _ZTV7S7798C2[];
extern void _ZN7S7798C32v7Ev();
extern void _ZN7S7798C32v8Ev();
extern void _ZN7S7798C3D1Ev();
extern void _ZN7S7798C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C3__7S7798C2[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7798C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7798C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C3D0Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C3__7S7798C2[] = {
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7798C3D1Ev,_ZTv0_n32_N7S7798C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7798C3D1Ev,_ZThn6196_N7S7798C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7798C3D0Ev,_ZTv0_n32_N7S7798C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7798C3D0Ev,_ZThn6196_N7S7798C3D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__7S7798C3__7S7798C2[] = {
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C3D1Ev,_ZTv0_n32_N7S7798C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C3D0Ev,_ZTv0_n32_N7S7798C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C3__7S7798C2[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C3__7S7798C2[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C8D1Ev();
extern void _ZN7S7798C8D0Ev();
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__7S7798C2[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C8__7S7798C2[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C8__7S7798C2[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C8__7S7798C2[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C2[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C9__7S7798C2[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C9__7S7798C2[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C2[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C10__7S7798C2[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTT_ENTRY vtt_S7798C2[] = {
  {&(_ZTV7S7798C2[8]),  8,54},
  {&(_ZTV7S7798C2[20]),  20,54},
  {&(_ZTV7S7798C2[27]),  27,54},
  {&(_ZTV7S7798C2[37]),  37,54},
  {&(_ZTV7S7798C2[46]),  46,54},
  {&(_ZTV7S7798C2[52]),  52,54},
  {&(_tg__ZTV7S7798C3__7S7798C2[7]),  7,11},
  {&(_tg__ZTV7S7798C4__7S7798C3__7S7798C2[3]),  3,4},
  {&(_tg__ZTV7S7798C8__7S7798C3__7S7798C2[9]),  9,13},
  {&(_tg__ZTV7S7798C9__7S7798C3__7S7798C2[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C3__7S7798C2[6]),  6,8},
  {&(_tg__ZTV7S7798C8__7S7798C2[6]),  6,10},
  {&(_tg__ZTV7S7798C9__7S7798C8__7S7798C2[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C8__7S7798C2[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C8__7S7798C2[3]),  3,4},
  {&(_tg__ZTV7S7798C9__7S7798C2[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C9__7S7798C2[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C9__7S7798C2[3]),  3,4},
  {&(_tg__ZTV8S7798C10__7S7798C2[4]),  4,6},
  {&(_tg__ZTV7S7798C4__8S7798C10__7S7798C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7798C2[];
extern  VTBL_ENTRY _ZTV7S7798C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C2[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C3D0Ev,_ZTv0_n32_N7S7798C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7798C3D0Ev,_ZThn6196_N7S7798C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C3D1Ev,_ZTv0_n32_N7S7798C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7798C3D1Ev,_ZThn6196_N7S7798C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C2D0Ev,_ZTv0_n32_N7S7798C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N7S7798C2D0Ev,_ZThn6216_N7S7798C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C2D1Ev,_ZTv0_n32_N7S7798C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N7S7798C2D1Ev,_ZThn6216_N7S7798C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7798C2D0Ev,_ZTv0_n40_N7S7798C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7798C2D0Ev,_ZThn20_N7S7798C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7798C2D1Ev,_ZTv0_n40_N7S7798C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7798C2D1Ev,_ZThn20_N7S7798C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7798C2 = {  "S7798C2", // class name
  bases_S7798C2, 9,
  &(vtc_S7798C2[0]), // expected_vtbl_contents
  &(vtt_S7798C2[0]), // expected_vtt_contents
  ABISELECT(12384,6804), // object size
  NSPAIRA(_ZTI7S7798C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7798C2),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7798C2),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7798C11  {
  short s7798c11f0;
  char s7798c11f1;
  __tsi64 s7798c11f2;
  void *s7798c11f3;
  int s7798c11f4;
  long double s7798c11f5;
  long s7798c11f6;
  ::S20176C18 s7798c11f7;
  char s7798c11f8:2;
  ::S7798C4 s7798c11f9;
  virtual void  v9(); // _ZN8S7798C112v9Ev
  ~S7798C11(); // tgen
  S7798C11(); // tgen
};
//SIG(-1 S7798C11) C1{ v1 Fs Fc FL Fp Fi FD Fl FC2{ BC3{ VBC4{ VBC5{ BC6{ v2 Fi Fp FC7{ m Fp[2]}} VBC8{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC9{} FC7 FC7[9] Fp FC6 FC6} VBC7 v4 Fp FL Fc[2] FC8 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC8 BC7 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC9 Fp Fi Fc[8] Fs Fi} Fc:2 FC10{ v6 Fi[6] Fc:2 FD Fp[2] Fi FD FC9 FC7 FC7[9] Fp FC11{ v7 Fi Fp FC7} FC11}}


void  S7798C11 ::v9(){vfunc_called(this, "_ZN8S7798C112v9Ev");}
S7798C11 ::~S7798C11(){ note_dtor("S7798C11", this);} // tgen
S7798C11 ::S7798C11(){ note_ctor("S7798C11", this);} // tgen

static void Test_S7798C11()
{
  extern Class_Descriptor cd_S7798C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(122,265)];
    init_test(&cd_S7798C11, buf);
    S7798C11 *dp, &lv = *(dp=new (buf) S7798C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1936,1056), "sizeof(S7798C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7798C11)");
    check_field_offset(lv, s7798c11f0, ABISELECT(8,4), "S7798C11.s7798c11f0");
    check_field_offset(lv, s7798c11f1, ABISELECT(10,6), "S7798C11.s7798c11f1");
    check_field_offset(lv, s7798c11f2, ABISELECT(16,8), "S7798C11.s7798c11f2");
    check_field_offset(lv, s7798c11f3, ABISELECT(24,16), "S7798C11.s7798c11f3");
    check_field_offset(lv, s7798c11f4, ABISELECT(32,20), "S7798C11.s7798c11f4");
    check_field_offset(lv, s7798c11f5, ABISELECT(48,24), "S7798C11.s7798c11f5");
    check_field_offset(lv, s7798c11f6, ABISELECT(64,36), "S7798C11.s7798c11f6");
    check_field_offset(lv, s7798c11f7, ABISELECT(80,40), "S7798C11.s7798c11f7");
    set_bf_and_test(lv, s7798c11f8, ABISELECT(1552,856), 0, 2, 1, "S7798C11");
    set_bf_and_test(lv, s7798c11f8, ABISELECT(1552,856), 0, 2, hide_sll(1LL<<1), "S7798C11");
    check_field_offset(lv, s7798c11f9, ABISELECT(1568,860), "S7798C11.s7798c11f9");
    test_class_info(&lv, &cd_S7798C11);
    dp->~S7798C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C11(Test_S7798C11, "S7798C11", ABISELECT(1936,1056));

#else // __cplusplus

extern void _ZN8S7798C11C1Ev();
extern void _ZN8S7798C11D1Ev();
Name_Map name_map_S7798C11[] = {
  NSPAIR(_ZN8S7798C11C1Ev),
  NSPAIR(_ZN8S7798C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7798C11[];
extern void _ZN8S7798C112v9Ev();
static  VTBL_ENTRY vtc_S7798C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C11[0]),
  (VTBL_ENTRY)&_ZN8S7798C112v9Ev,
};
extern VTBL_ENTRY _ZTI8S7798C11[];
extern  VTBL_ENTRY _ZTV8S7798C11[];
Class_Descriptor cd_S7798C11 = {  "S7798C11", // class name
  0,0,//no base classes
  &(vtc_S7798C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1936,1056), // object size
  NSPAIRA(_ZTI8S7798C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7798C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7798C13  {
  long s7798c13f0;
  char s7798c13f1;
  short s7798c13f2[2];
  virtual void  v10(); // _ZN8S7798C133v10Ev
  ~S7798C13(); // tgen
  S7798C13(); // tgen
};
//SIG(-1 S7798C13) C1{ v1 Fl Fc Fs[2]}


void  S7798C13 ::v10(){vfunc_called(this, "_ZN8S7798C133v10Ev");}
S7798C13 ::~S7798C13(){ note_dtor("S7798C13", this);} // tgen
S7798C13 ::S7798C13(){ note_ctor("S7798C13", this);} // tgen

static void Test_S7798C13()
{
  extern Class_Descriptor cd_S7798C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7798C13, buf);
    S7798C13 *dp, &lv = *(dp=new (buf) S7798C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7798C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7798C13)");
    check_field_offset(lv, s7798c13f0, ABISELECT(8,4), "S7798C13.s7798c13f0");
    check_field_offset(lv, s7798c13f1, ABISELECT(16,8), "S7798C13.s7798c13f1");
    check_field_offset(lv, s7798c13f2, ABISELECT(18,10), "S7798C13.s7798c13f2");
    test_class_info(&lv, &cd_S7798C13);
    dp->~S7798C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C13(Test_S7798C13, "S7798C13", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S7798C13C1Ev();
extern void _ZN8S7798C13D1Ev();
Name_Map name_map_S7798C13[] = {
  NSPAIR(_ZN8S7798C13C1Ev),
  NSPAIR(_ZN8S7798C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7798C13[];
extern void _ZN8S7798C133v10Ev();
static  VTBL_ENTRY vtc_S7798C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C13[0]),
  (VTBL_ENTRY)&_ZN8S7798C133v10Ev,
};
extern VTBL_ENTRY _ZTI8S7798C13[];
extern  VTBL_ENTRY _ZTV8S7798C13[];
Class_Descriptor cd_S7798C13 = {  "S7798C13", // class name
  0,0,//no base classes
  &(vtc_S7798C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S7798C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7798C13),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  S7798C16  : virtual S7798C9 , virtual S7798C8 {
  long s7798c16f0;
  void *s7798c16f1;
  ::S7798C10 s7798c16f2;
  void *s7798c16f3;
  short s7798c16f4;
  long s7798c16f5;
  int s7798c16f6;
  __tsi64 s7798c16f7;
  ::S7798C10 s7798c16f8[4];
  int s7798c16f9;
  virtual  ~S7798C16(); // _ZN8S7798C16D2Ev
  S7798C16(); // tgen
};
//SIG(-1 S7798C16) C1{ VBC2{ VBC3{ BC4{ v1 Fi Fp FC5{ m Fp[2]}} VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC8{ VBC2 BC6 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC3 Fp Fs Fl Fi FL FC3[4] Fi}


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

static void Test_S7798C16()
{
  extern Class_Descriptor cd_S7798C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(361,782)];
    init_test(&cd_S7798C16, buf);
    S7798C16 *dp, &lv = *(dp=new (buf) S7798C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5760,3124), "sizeof(S7798C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7798C16)");
    check_base_class_offset(lv, (S7798C7*)(S7798C10*), ABISELECT(4432,2396), "S7798C16");
    check_base_class_offset(lv, (S7798C4*)(S7798C10*), ABISELECT(4896,2652), "S7798C16");
    check_base_class_offset(lv, (S281C37_nt*)(S7798C10*), ABISELECT(5264,2848), "S7798C16");
    check_base_class_offset(lv, (S7798C10*)(S7798C9*), ABISELECT(4432,2396), "S7798C16");
    check_base_class_offset(lv, (S7798C9*), ABISELECT(4328,2340), "S7798C16");
    check_base_class_offset(lv, (S7798C9*)(S7798C8*), ABISELECT(4328,2340), "S7798C16");
    /*is_ambiguous_... S7798C8::S7798C4 */ AMB_check_base_class_offset(lv, (S7798C4*)(S7798C8*), ABISELECT(5280,2856), "S7798C16");
    /*is_ambiguous_... S7798C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7798C8*), ABISELECT(5648,3052), "S7798C16");
    check_base_class_offset(lv, (S7798C8*), ABISELECT(5280,2856), "S7798C16");
    check_field_offset(lv, s7798c16f0, ABISELECT(8,4), "S7798C16.s7798c16f0");
    check_field_offset(lv, s7798c16f1, ABISELECT(16,8), "S7798C16.s7798c16f1");
    check_field_offset(lv, s7798c16f2, ABISELECT(32,12), "S7798C16.s7798c16f2");
    check_field_offset(lv, s7798c16f3, ABISELECT(880,472), "S7798C16.s7798c16f3");
    check_field_offset(lv, s7798c16f4, ABISELECT(888,476), "S7798C16.s7798c16f4");
    check_field_offset(lv, s7798c16f5, ABISELECT(896,480), "S7798C16.s7798c16f5");
    check_field_offset(lv, s7798c16f6, ABISELECT(904,484), "S7798C16.s7798c16f6");
    check_field_offset(lv, s7798c16f7, ABISELECT(912,488), "S7798C16.s7798c16f7");
    check_field_offset(lv, s7798c16f8, ABISELECT(928,496), "S7798C16.s7798c16f8");
    check_field_offset(lv, s7798c16f9, ABISELECT(4320,2336), "S7798C16.s7798c16f9");
    test_class_info(&lv, &cd_S7798C16);
    dp->~S7798C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C16(Test_S7798C16, "S7798C16", ABISELECT(5760,3124));

#else // __cplusplus

extern void _ZN8S7798C16C1Ev();
extern void _ZN8S7798C16D2Ev();
Name_Map name_map_S7798C16[] = {
  NSPAIR(_ZN8S7798C16C1Ev),
  NSPAIR(_ZN8S7798C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7798C7;
extern VTBL_ENTRY _ZTI7S7798C7[];
extern  VTBL_ENTRY _ZTV7S7798C7[];
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C10;
extern VTBL_ENTRY _ZTI8S7798C10[];
extern  VTBL_ENTRY _ZTV8S7798C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C10[];
extern Class_Descriptor cd_S7798C9;
extern VTBL_ENTRY _ZTI7S7798C9[];
extern  VTBL_ENTRY _ZTV7S7798C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C9[];
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C8;
extern VTBL_ENTRY _ZTI7S7798C8[];
extern  VTBL_ENTRY _ZTV7S7798C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C8[];
static Base_Class bases_S7798C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7798C7,    ABISELECT(4432,2396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C4,    ABISELECT(4896,2652), //bcp->offset
    22, //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_S281C37_nt,    ABISELECT(5264,2848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C10,    ABISELECT(4432,2396), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7798C9,    ABISELECT(4328,2340), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7798C4,    ABISELECT(5280,2856), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5648,3052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C8,    ABISELECT(5280,2856), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7798C16[];
extern void _ZN8S7798C16D1Ev();
extern void _ZN8S7798C16D0Ev();
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7798C16D1Ev,_ZTv0_n32_N8S7798C16D1Ev)();
extern void ABISELECT(_ZThn5280_N8S7798C16D1Ev,_ZThn2856_N8S7798C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7798C16D0Ev,_ZTv0_n32_N8S7798C16D0Ev)();
extern void ABISELECT(_ZThn5280_N8S7798C16D0Ev,_ZThn2856_N8S7798C16D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY vtc_S7798C16[] = {
  ABISELECT(5280,2856),
  ABISELECT(5264,2848),
  ABISELECT(4896,2652),
  ABISELECT(4432,2396),
  ABISELECT(4328,2340),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN8S7798C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7798C16D0Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4432,-2396),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
  0,
  ABISELECT(-4896,-2652),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  0,
  ABISELECT(-5280,-2856),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5280,-2856),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C16D1Ev,_ZTv0_n32_N8S7798C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C16D0Ev,_ZTv0_n32_N8S7798C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
extern VTBL_ENTRY _ZTV8S7798C16[];
static  VTBL_ENTRY _tg__ZTV7S7798C9__8S7798C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C9__8S7798C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C9__8S7798C16[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__8S7798C16[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C10__8S7798C16[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C8D1Ev();
extern void _ZN7S7798C8D0Ev();
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__8S7798C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C8__8S7798C16[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C8__8S7798C16[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C8__8S7798C16[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTT_ENTRY vtt_S7798C16[] = {
  {&(_ZTV8S7798C16[7]),  7,39},
  {&(_ZTV8S7798C16[14]),  14,39},
  {&(_ZTV8S7798C16[20]),  20,39},
  {&(_ZTV8S7798C16[25]),  25,39},
  {&(_ZTV8S7798C16[35]),  35,39},
  {&(_tg__ZTV7S7798C9__8S7798C16[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C9__8S7798C16[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C9__8S7798C16[3]),  3,4},
  {&(_tg__ZTV8S7798C10__8S7798C16[4]),  4,6},
  {&(_tg__ZTV7S7798C4__8S7798C10__8S7798C16[3]),  3,4},
  {&(_tg__ZTV7S7798C8__8S7798C16[6]),  6,10},
  {&(_tg__ZTV7S7798C9__7S7798C8__8S7798C16[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C8__8S7798C16[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C8__8S7798C16[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7798C16[];
extern  VTBL_ENTRY _ZTV8S7798C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C16[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C16D0Ev,_ZTv0_n32_N8S7798C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N8S7798C16D0Ev,_ZThn2856_N8S7798C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C16D1Ev,_ZTv0_n32_N8S7798C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N8S7798C16D1Ev,_ZThn2856_N8S7798C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7798C16 = {  "S7798C16", // class name
  bases_S7798C16, 8,
  &(vtc_S7798C16[0]), // expected_vtbl_contents
  &(vtt_S7798C16[0]), // expected_vtt_contents
  ABISELECT(5760,3124), // object size
  NSPAIRA(_ZTI8S7798C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7798C16),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7798C16),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7798C17  : virtual S7798C4 {
  void *s7798c17f0;
  short s7798c17f1;
  long s7798c17f2;
  int s7798c17f3:6;
  void *s7798c17f4[2];
  ~S7798C17(); // tgen
  S7798C17(); // tgen
};
//SIG(-1 S7798C17) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} Fp Fs Fl Fi:6 Fp[2]}


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

static void Test_S7798C17()
{
  extern Class_Descriptor cd_S7798C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,57)];
    init_test(&cd_S7798C17, buf);
    S7798C17 *dp, &lv = *(dp=new (buf) S7798C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,224), "sizeof(S7798C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7798C17)");
    check_base_class_offset(lv, (S7798C4*), ABISELECT(64,28), "S7798C17");
    check_field_offset(lv, s7798c17f0, ABISELECT(8,4), "S7798C17.s7798c17f0");
    check_field_offset(lv, s7798c17f1, ABISELECT(16,8), "S7798C17.s7798c17f1");
    check_field_offset(lv, s7798c17f2, ABISELECT(24,12), "S7798C17.s7798c17f2");
    set_bf_and_test(lv, s7798c17f3, ABISELECT(32,16), 0, 6, 1, "S7798C17");
    set_bf_and_test(lv, s7798c17f3, ABISELECT(32,16), 0, 6, hide_sll(1LL<<5), "S7798C17");
    check_field_offset(lv, s7798c17f4, ABISELECT(40,20), "S7798C17.s7798c17f4");
    test_class_info(&lv, &cd_S7798C17);
    dp->~S7798C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C17(Test_S7798C17, "S7798C17", ABISELECT(432,224));

#else // __cplusplus

extern void _ZN8S7798C17C1Ev();
extern void _ZN8S7798C17D1Ev();
Name_Map name_map_S7798C17[] = {
  NSPAIR(_ZN8S7798C17C1Ev),
  NSPAIR(_ZN8S7798C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
static Base_Class bases_S7798C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7798C4,    ABISELECT(64,28), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7798C17[];
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY vtc_S7798C17[] = {
  ABISELECT(64,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C17[0]),
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S7798C17[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S7798C17[];
static  VTT_ENTRY vtt_S7798C17[] = {
  {&(_ZTV8S7798C17[3]),  3,7},
  {&(_ZTV8S7798C17[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S7798C17[];
extern  VTBL_ENTRY _ZTV8S7798C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C17[];
Class_Descriptor cd_S7798C17 = {  "S7798C17", // class name
  bases_S7798C17, 1,
  &(vtc_S7798C17[0]), // expected_vtbl_contents
  &(vtt_S7798C17[0]), // expected_vtt_contents
  ABISELECT(432,224), // object size
  NSPAIRA(_ZTI8S7798C17),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7798C17),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7798C17),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  S7798C15  : S7798C16 , S7798C17 {
  __tsi64 s7798c15f0;
  long double s7798c15f1;
  ::S20176C3_nt s7798c15f2;
  int s7798c15f3[9];
  short s7798c15f4;
  char s7798c15f5:5;
  virtual  ~S7798C15(); // _ZN8S7798C15D2Ev
  virtual void  v11(); // _ZN8S7798C153v11Ev
  S7798C15(); // tgen
};
//SIG(-1 S7798C15) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 Fi Fp FC6{ m Fp[2]}} VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} VBC9{ VBC3 BC7 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC4 Fp Fs Fl Fi FL FC4[4] Fi} BC10{ VBC7 Fp Fs Fl Fi:6 Fp[2]} vd v1 FL FD FC8 Fi[9] Fs Fc:5}


 S7798C15 ::~S7798C15(){ note_dtor("S7798C15", this);}
void  S7798C15 ::v11(){vfunc_called(this, "_ZN8S7798C153v11Ev");}
S7798C15 ::S7798C15(){ note_ctor("S7798C15", this);} // tgen

static void Test_S7798C15()
{
  extern Class_Descriptor cd_S7798C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(369,805)];
    init_test(&cd_S7798C15, buf);
    S7798C15 *dp, &lv = *(dp=new (buf) S7798C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5888,3216), "sizeof(S7798C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7798C15)");
    check_base_class_offset(lv, (S7798C7*)(S7798C10*), ABISELECT(4560,2488), "S7798C15");
    check_base_class_offset(lv, (S7798C4*)(S7798C10*), ABISELECT(5024,2744), "S7798C15");
    check_base_class_offset(lv, (S7798C4*)(S7798C17*), ABISELECT(5024,2744), "S7798C15");
    check_base_class_offset(lv, (S281C37_nt*)(S7798C10*), ABISELECT(5392,2940), "S7798C15");
    check_base_class_offset(lv, (S7798C10*)(S7798C9*), ABISELECT(4560,2488), "S7798C15");
    check_base_class_offset(lv, (S7798C9*)(S7798C16*), ABISELECT(4464,2432), "S7798C15");
    check_base_class_offset(lv, (S7798C9*)(S7798C8*), ABISELECT(4464,2432), "S7798C15");
    /*is_ambiguous_... S7798C8::S7798C4 */ AMB_check_base_class_offset(lv, (S7798C4*)(S7798C8*), ABISELECT(5408,2948), "S7798C15");
    /*is_ambiguous_... S7798C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7798C8*), ABISELECT(5776,3144), "S7798C15");
    check_base_class_offset(lv, (S7798C8*)(S7798C16*), ABISELECT(5408,2948), "S7798C15");
    check_base_class_offset(lv, (S7798C16*), 0, "S7798C15");
    check_base_class_offset(lv, (S7798C17*), ABISELECT(4328,2340), "S7798C15");
    check_field_offset(lv, s7798c15f0, ABISELECT(4384,2368), "S7798C15.s7798c15f0");
    check_field_offset(lv, s7798c15f1, ABISELECT(4400,2376), "S7798C15.s7798c15f1");
    check_field_offset(lv, s7798c15f2, ABISELECT(4416,2388), "S7798C15.s7798c15f2");
    check_field_offset(lv, s7798c15f3, ABISELECT(4420,2392), "S7798C15.s7798c15f3");
    check_field_offset(lv, s7798c15f4, ABISELECT(4456,2428), "S7798C15.s7798c15f4");
    set_bf_and_test(lv, s7798c15f5, ABISELECT(4458,2430), 0, 5, 1, "S7798C15");
    set_bf_and_test(lv, s7798c15f5, ABISELECT(4458,2430), 0, 5, hide_sll(1LL<<4), "S7798C15");
    test_class_info(&lv, &cd_S7798C15);
    dp->~S7798C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C15(Test_S7798C15, "S7798C15", ABISELECT(5888,3216));

#else // __cplusplus

extern void _ZN8S7798C15C1Ev();
extern void _ZN8S7798C15D2Ev();
Name_Map name_map_S7798C15[] = {
  NSPAIR(_ZN8S7798C15C1Ev),
  NSPAIR(_ZN8S7798C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7798C7;
extern VTBL_ENTRY _ZTI7S7798C7[];
extern  VTBL_ENTRY _ZTV7S7798C7[];
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C10;
extern VTBL_ENTRY _ZTI8S7798C10[];
extern  VTBL_ENTRY _ZTV8S7798C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C10[];
extern Class_Descriptor cd_S7798C9;
extern VTBL_ENTRY _ZTI7S7798C9[];
extern  VTBL_ENTRY _ZTV7S7798C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C9[];
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C8;
extern VTBL_ENTRY _ZTI7S7798C8[];
extern  VTBL_ENTRY _ZTV7S7798C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C8[];
extern Class_Descriptor cd_S7798C16;
extern VTBL_ENTRY _ZTI8S7798C16[];
extern  VTBL_ENTRY _ZTV8S7798C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C16[];
extern Class_Descriptor cd_S7798C17;
extern VTBL_ENTRY _ZTI8S7798C17[];
extern  VTBL_ENTRY _ZTV8S7798C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C17[];
static Base_Class bases_S7798C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7798C7,    ABISELECT(4560,2488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C4,    ABISELECT(5024,2744), //bcp->offset
    26, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5392,2940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C10,    ABISELECT(4560,2488), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7798C9,    ABISELECT(4464,2432), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7798C4,    ABISELECT(5408,2948), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5776,3144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C8,    ABISELECT(5408,2948), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7798C16,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7798C17,    ABISELECT(4328,2340), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7798C15[];
extern void _ZN8S7798C15D1Ev();
extern void _ZN8S7798C15D0Ev();
extern void _ZN8S7798C153v11Ev();
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7798C15D1Ev,_ZTv0_n32_N8S7798C15D1Ev)();
extern void ABISELECT(_ZThn5408_N8S7798C15D1Ev,_ZThn2948_N8S7798C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7798C15D0Ev,_ZTv0_n32_N8S7798C15D0Ev)();
extern void ABISELECT(_ZThn5408_N8S7798C15D0Ev,_ZThn2948_N8S7798C15D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY vtc_S7798C15[] = {
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  (VTBL_ENTRY)&_ZN8S7798C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7798C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7798C153v11Ev,
  ABISELECT(696,404),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2488),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
  0,
  ABISELECT(-5024,-2744),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  0,
  ABISELECT(-5408,-2948),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2948),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C15D1Ev,_ZTv0_n32_N8S7798C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C15D0Ev,_ZTv0_n32_N8S7798C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
extern VTBL_ENTRY _ZTV8S7798C15[];
extern void _ZN8S7798C16D1Ev();
extern void _ZN8S7798C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C16__8S7798C15[] = {
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN8S7798C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7798C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__8S7798C16__8S7798C15[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__8S7798C16__8S7798C15[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2488),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C16__8S7798C15[] = {
  0,
  ABISELECT(-5024,-2744),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7798C16D1Ev,_ZTv0_n32_N8S7798C16D1Ev)();
extern void ABISELECT(_ZThn5408_N8S7798C16D1Ev,_ZThn2948_N8S7798C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7798C16D0Ev,_ZTv0_n32_N8S7798C16D0Ev)();
extern void ABISELECT(_ZThn5408_N8S7798C16D0Ev,_ZThn2948_N8S7798C16D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__8S7798C16__8S7798C15[] = {
  0,
  ABISELECT(-5408,-2948),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2948),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C16D1Ev,_ZTv0_n32_N8S7798C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C16D0Ev,_ZTv0_n32_N8S7798C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7798C17__8S7798C15[] = {
  ABISELECT(696,404),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C17[0]),
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C17__8S7798C15[] = {
  0,
  ABISELECT(-696,-404),
  (VTBL_ENTRY)&(_ZTI8S7798C17[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__8S7798C15[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C9__8S7798C15[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C9__8S7798C15[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__8S7798C15[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C10__8S7798C15[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C8D1Ev();
extern void _ZN7S7798C8D0Ev();
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__8S7798C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C8__8S7798C15[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C8__8S7798C15[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C8__8S7798C15[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTT_ENTRY vtt_S7798C15[] = {
  {&(_ZTV8S7798C15[7]),  7,43},
  {&(_tg__ZTV8S7798C16__8S7798C15[7]),  7,9},
  {&(_tg__ZTV7S7798C9__8S7798C16__8S7798C15[5]),  5,5},
  {&(_tg__ZTV8S7798C10__8S7798C16__8S7798C15[6]),  6,8},
  {&(_tg__ZTV7S7798C4__8S7798C16__8S7798C15[3]),  3,4},
  {&(_tg__ZTV7S7798C8__8S7798C16__8S7798C15[9]),  9,13},
  {&(_tg__ZTV8S7798C17__8S7798C15[3]),  3,3},
  {&(_tg__ZTV7S7798C4__8S7798C17__8S7798C15[3]),  3,4},
  {&(_ZTV8S7798C15[18]),  18,43},
  {&(_ZTV8S7798C15[24]),  24,43},
  {&(_ZTV8S7798C15[29]),  29,43},
  {&(_ZTV8S7798C15[39]),  39,43},
  {&(_ZTV8S7798C15[13]),  13,43},
  {&(_tg__ZTV7S7798C9__8S7798C15[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C9__8S7798C15[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C9__8S7798C15[3]),  3,4},
  {&(_tg__ZTV8S7798C10__8S7798C15[4]),  4,6},
  {&(_tg__ZTV7S7798C4__8S7798C10__8S7798C15[3]),  3,4},
  {&(_tg__ZTV7S7798C8__8S7798C15[6]),  6,10},
  {&(_tg__ZTV7S7798C9__7S7798C8__8S7798C15[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C8__8S7798C15[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C8__8S7798C15[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7798C15[];
extern  VTBL_ENTRY _ZTV8S7798C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C15[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C16D0Ev,_ZTv0_n32_N8S7798C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S7798C16D0Ev,_ZThn2948_N8S7798C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C16D1Ev,_ZTv0_n32_N8S7798C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S7798C16D1Ev,_ZThn2948_N8S7798C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C15D0Ev,_ZTv0_n32_N8S7798C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S7798C15D0Ev,_ZThn2948_N8S7798C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C15D1Ev,_ZTv0_n32_N8S7798C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N8S7798C15D1Ev,_ZThn2948_N8S7798C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7798C15 = {  "S7798C15", // class name
  bases_S7798C15, 10,
  &(vtc_S7798C15[0]), // expected_vtbl_contents
  &(vtt_S7798C15[0]), // expected_vtt_contents
  ABISELECT(5888,3216), // object size
  NSPAIRA(_ZTI8S7798C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7798C15),43, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7798C15),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7798C14  : S7798C2 , S7798C15 {
  long s7798c14f0;
  int s7798c14f1;
  void *s7798c14f2;
  char s7798c14f3;
  int s7798c14f4;
  ::S20176C3_nt s7798c14f5;
  virtual void  v12(); // _ZN8S7798C143v12Ev
  virtual void  v13(); // _ZN8S7798C143v13Ev
  ~S7798C14(); // tgen
  S7798C14(); // tgen
};
//SIG(-1 S7798C14) C1{ BC2{ VBC3{ VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC6{ m Fp[2]} FC6[9] Fp FC7{ v4 Fi Fp FC6} FC7} VBC8{ VBC9{ VBC10{ BC7 VBC4 VBC6 v5 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC4 BC6 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v7 v8 FC8[7] Fi Fs Fi FC10 Fl[9]} vd Fc Fi[3]} BC11{ BC12{ VBC9 VBC8 vd Fl Fp FC10 Fp Fs Fl Fi FL FC10[4] Fi} BC13{ VBC4 Fp Fs Fl Fi:6 Fp[2]} vd v9 FL FD FC5 Fi[9] Fs Fc:5} v1 v2 Fl Fi Fp Fc Fi FC5}


void  S7798C14 ::v12(){vfunc_called(this, "_ZN8S7798C143v12Ev");}
void  S7798C14 ::v13(){vfunc_called(this, "_ZN8S7798C143v13Ev");}
S7798C14 ::~S7798C14(){ note_dtor("S7798C14", this);} // tgen
S7798C14 ::S7798C14(){ note_ctor("S7798C14", this);} // tgen

static void Test_S7798C14()
{
  extern Class_Descriptor cd_S7798C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1057,2316)];
    init_test(&cd_S7798C14, buf);
    S7798C14 *dp, &lv = *(dp=new (buf) S7798C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16896,9260), "sizeof(S7798C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7798C14)");
    /*is_ambiguous_... S7798C3::S7798C4 */ AMB_check_base_class_offset(lv, (S7798C4*)(S7798C3*), ABISELECT(15472,8476), "S7798C14");
    check_base_class_offset(lv, (S7798C4*)(S7798C10*), ABISELECT(15472,8476), "S7798C14");
    check_base_class_offset(lv, (S7798C4*)(S7798C17*)(S7798C15*), ABISELECT(15472,8476), "S7798C14");
    check_base_class_offset(lv, (S7798C7*)(S7798C10*), ABISELECT(16416,8996), "S7798C14");
    check_base_class_offset(lv, (S281C37_nt*)(S7798C10*), ABISELECT(16872,9252), "S7798C14");
    check_base_class_offset(lv, (S7798C10*)(S7798C9*), ABISELECT(16416,8996), "S7798C14");
    check_base_class_offset(lv, (S7798C9*)(S7798C8*), ABISELECT(16320,8940), "S7798C14");
    check_base_class_offset(lv, (S7798C9*)(S7798C16*)(S7798C15*), ABISELECT(16320,8940), "S7798C14");
    /*is_ambiguous_... S7798C8::S7798C4 */ AMB_check_base_class_offset(lv, (S7798C4*)(S7798C8*), ABISELECT(15840,8672), "S7798C14");
    /*is_ambiguous_... S7798C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7798C8*), ABISELECT(16208,8868), "S7798C14");
    check_base_class_offset(lv, (S7798C8*)(S7798C3*), ABISELECT(15840,8672), "S7798C14");
    check_base_class_offset(lv, (S7798C8*)(S7798C16*)(S7798C15*), ABISELECT(15840,8672), "S7798C14");
    check_base_class_offset(lv, (S7798C3*)(S7798C2*), ABISELECT(4544,2476), "S7798C14");
    check_base_class_offset(lv, (S7798C2*), 0, "S7798C14");
    check_base_class_offset(lv, (S7798C16*)(S7798C15*), ABISELECT(32,20), "S7798C14");
    check_base_class_offset(lv, (S7798C17*)(S7798C15*), ABISELECT(4360,2360), "S7798C14");
    check_base_class_offset(lv, (S7798C15*), ABISELECT(32,20), "S7798C14");
    check_field_offset(lv, s7798c14f0, ABISELECT(4496,2452), "S7798C14.s7798c14f0");
    check_field_offset(lv, s7798c14f1, ABISELECT(4504,2456), "S7798C14.s7798c14f1");
    check_field_offset(lv, s7798c14f2, ABISELECT(4512,2460), "S7798C14.s7798c14f2");
    check_field_offset(lv, s7798c14f3, ABISELECT(4520,2464), "S7798C14.s7798c14f3");
    check_field_offset(lv, s7798c14f4, ABISELECT(4524,2468), "S7798C14.s7798c14f4");
    check_field_offset(lv, s7798c14f5, ABISELECT(4528,2472), "S7798C14.s7798c14f5");
    test_class_info(&lv, &cd_S7798C14);
    dp->~S7798C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C14(Test_S7798C14, "S7798C14", ABISELECT(16896,9260));

#else // __cplusplus

extern void _ZN8S7798C14C1Ev();
extern void _ZN8S7798C14D1Ev();
Name_Map name_map_S7798C14[] = {
  NSPAIR(_ZN8S7798C14C1Ev),
  NSPAIR(_ZN8S7798C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S7798C7;
extern VTBL_ENTRY _ZTI7S7798C7[];
extern  VTBL_ENTRY _ZTV7S7798C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C10;
extern VTBL_ENTRY _ZTI8S7798C10[];
extern  VTBL_ENTRY _ZTV8S7798C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C10[];
extern Class_Descriptor cd_S7798C9;
extern VTBL_ENTRY _ZTI7S7798C9[];
extern  VTBL_ENTRY _ZTV7S7798C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C9[];
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C8;
extern VTBL_ENTRY _ZTI7S7798C8[];
extern  VTBL_ENTRY _ZTV7S7798C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C8[];
extern Class_Descriptor cd_S7798C3;
extern VTBL_ENTRY _ZTI7S7798C3[];
extern  VTBL_ENTRY _ZTV7S7798C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C3[];
extern Class_Descriptor cd_S7798C2;
extern VTBL_ENTRY _ZTI7S7798C2[];
extern  VTBL_ENTRY _ZTV7S7798C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C2[];
extern Class_Descriptor cd_S7798C16;
extern VTBL_ENTRY _ZTI8S7798C16[];
extern  VTBL_ENTRY _ZTV8S7798C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C16[];
extern Class_Descriptor cd_S7798C17;
extern VTBL_ENTRY _ZTI8S7798C17[];
extern  VTBL_ENTRY _ZTV8S7798C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C17[];
extern Class_Descriptor cd_S7798C15;
extern VTBL_ENTRY _ZTI8S7798C15[];
extern  VTBL_ENTRY _ZTV8S7798C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C15[];
static Base_Class bases_S7798C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7798C4,    ABISELECT(15472,8476), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7798C7,    ABISELECT(16416,8996), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(16872,9252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C10,    ABISELECT(16416,8996), //bcp->offset
    61, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7798C9,    ABISELECT(16320,8940), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7798C4,    ABISELECT(15840,8672), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(16208,8868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C8,    ABISELECT(15840,8672), //bcp->offset
    43, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7798C3,    ABISELECT(4544,2476), //bcp->offset
    25, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7798C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7798C16,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7798C17,    ABISELECT(4360,2360), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7798C15,    ABISELECT(32,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7798C14[];
extern void _ZN8S7798C14D1Ev();
extern void _ZN8S7798C14D0Ev();
extern void _ZN8S7798C143v12Ev();
extern void _ZN8S7798C143v13Ev();
extern void ABISELECT(_ZThn32_N8S7798C14D1Ev,_ZThn20_N8S7798C14D1Ev)();
extern void ABISELECT(_ZThn32_N8S7798C14D0Ev,_ZThn20_N8S7798C14D0Ev)();
extern void _ZN8S7798C153v11Ev();
extern void _ZN7S7798C32v7Ev();
extern void _ZN7S7798C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S7798C14D1Ev,_ZTv0_n40_N8S7798C14D1Ev)();
extern void ABISELECT(_ZThn4544_N8S7798C14D1Ev,_ZThn2476_N8S7798C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7798C14D0Ev,_ZTv0_n40_N8S7798C14D0Ev)();
extern void ABISELECT(_ZThn4544_N8S7798C14D0Ev,_ZThn2476_N8S7798C14D0Ev)() __attribute__((weak));
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7798C14D1Ev,_ZTv0_n32_N8S7798C14D1Ev)();
extern void ABISELECT(_ZThn15840_N8S7798C14D1Ev,_ZThn8672_N8S7798C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7798C14D0Ev,_ZTv0_n32_N8S7798C14D0Ev)();
extern void ABISELECT(_ZThn15840_N8S7798C14D0Ev,_ZThn8672_N8S7798C14D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY vtc_S7798C14[] = {
  ABISELECT(16872,9252),
  ABISELECT(16416,8996),
  ABISELECT(16320,8940),
  ABISELECT(15840,8672),
  ABISELECT(15472,8476),
  ABISELECT(4544,2476),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  (VTBL_ENTRY)&_ZN8S7798C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7798C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7798C143v12Ev,
  (VTBL_ENTRY)&_ZN8S7798C143v13Ev,
  ABISELECT(15808,8652),
  ABISELECT(16840,9232),
  ABISELECT(15440,8456),
  ABISELECT(16384,8976),
  ABISELECT(16288,8920),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7798C14D1Ev,_ZThn20_N8S7798C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7798C14D0Ev,_ZThn20_N8S7798C14D0Ev),
  (VTBL_ENTRY)&_ZN8S7798C153v11Ev,
  ABISELECT(11112,6116),
  ABISELECT(-4360,-2360),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  ABISELECT(-4544,-2476),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-4544,-2476),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  (VTBL_ENTRY)&_ZN7S7798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7798C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7798C14D1Ev,_ZTv0_n40_N8S7798C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7798C14D0Ev,_ZTv0_n40_N8S7798C14D0Ev),
  0,
  ABISELECT(-15472,-8476),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  0,
  ABISELECT(-15840,-8672),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15840,-8672),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C14D1Ev,_ZTv0_n32_N8S7798C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C14D0Ev,_ZTv0_n32_N8S7798C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16320,-8940),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16416,-8996),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S7798C14[];
extern void _ZN7S7798C2D1Ev();
extern void _ZN7S7798C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C2__8S7798C14[] = {
  ABISELECT(16872,9252),
  ABISELECT(16416,8996),
  ABISELECT(16320,8940),
  ABISELECT(15840,8672),
  ABISELECT(15472,8476),
  ABISELECT(4544,2476),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C2D0Ev,
};
extern void _ZN7S7798C32v7Ev();
extern void _ZN7S7798C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N7S7798C2D1Ev,_ZTv0_n40_N7S7798C2D1Ev)();
extern void ABISELECT(_ZThn4544_N7S7798C2D1Ev,_ZThn2476_N7S7798C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7798C2D0Ev,_ZTv0_n40_N7S7798C2D0Ev)();
extern void ABISELECT(_ZThn4544_N7S7798C2D0Ev,_ZThn2476_N7S7798C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7798C3__7S7798C2__8S7798C14[] = {
  ABISELECT(-4544,-2476),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-4544,-2476),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7798C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7798C2D1Ev,_ZTv0_n40_N7S7798C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7798C2D0Ev,_ZTv0_n40_N7S7798C2D0Ev),
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C2__8S7798C14[] = {
  0,
  ABISELECT(-15472,-8476),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7798C2D1Ev,_ZTv0_n32_N7S7798C2D1Ev)();
extern void ABISELECT(_ZThn15840_N7S7798C2D1Ev,_ZThn8672_N7S7798C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7798C2D0Ev,_ZTv0_n32_N7S7798C2D0Ev)();
extern void ABISELECT(_ZThn15840_N7S7798C2D0Ev,_ZThn8672_N7S7798C2D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__7S7798C2__8S7798C14[] = {
  0,
  ABISELECT(-15840,-8672),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15840,-8672),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C2D1Ev,_ZTv0_n32_N7S7798C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C2D0Ev,_ZTv0_n32_N7S7798C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C2__8S7798C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16320,-8940),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C2__8S7798C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16416,-8996),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN8S7798C15D1Ev();
extern void _ZN8S7798C15D0Ev();
extern void _ZN8S7798C153v11Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C15__8S7798C14[] = {
  ABISELECT(15808,8652),
  ABISELECT(16840,9232),
  ABISELECT(15440,8456),
  ABISELECT(16384,8976),
  ABISELECT(16288,8920),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  (VTBL_ENTRY)&_ZN8S7798C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7798C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7798C153v11Ev,
};
extern void _ZN8S7798C16D1Ev();
extern void _ZN8S7798C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C168S7798C15__8S7798C14[] = {
  ABISELECT(15808,8652),
  ABISELECT(16840,9232),
  ABISELECT(15440,8456),
  ABISELECT(16384,8976),
  ABISELECT(16288,8920),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN8S7798C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7798C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__8S7798C168S7798C15__8S7798C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16288,-8920),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__8S7798C168S7798C15__8S7798C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16384,-8976),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C168S7798C15__8S7798C14[] = {
  0,
  ABISELECT(-15440,-8456),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7798C16D1Ev,_ZTv0_n32_N8S7798C16D1Ev)();
extern void ABISELECT(_ZThn15808_N8S7798C16D1Ev,_ZThn8652_N8S7798C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7798C16D0Ev,_ZTv0_n32_N8S7798C16D0Ev)();
extern void ABISELECT(_ZThn15808_N8S7798C16D0Ev,_ZThn8652_N8S7798C16D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__8S7798C168S7798C15__8S7798C14[] = {
  0,
  ABISELECT(-15808,-8652),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15808,-8652),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C16D1Ev,_ZTv0_n32_N8S7798C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C16D0Ev,_ZTv0_n32_N8S7798C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7798C178S7798C15__8S7798C14[] = {
  ABISELECT(11112,6116),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C17[0]),
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C178S7798C15__8S7798C14[] = {
  0,
  ABISELECT(-11112,-6116),
  (VTBL_ENTRY)&(_ZTI8S7798C17[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__8S7798C15__8S7798C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16288,-8920),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__8S7798C15__8S7798C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16384,-8976),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C15__8S7798C14[] = {
  0,
  ABISELECT(-15440,-8456),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7798C15D1Ev,_ZTv0_n32_N8S7798C15D1Ev)();
extern void ABISELECT(_ZThn15808_N8S7798C15D1Ev,_ZThn8652_N8S7798C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7798C15D0Ev,_ZTv0_n32_N8S7798C15D0Ev)();
extern void ABISELECT(_ZThn15808_N8S7798C15D0Ev,_ZThn8652_N8S7798C15D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__8S7798C15__8S7798C14[] = {
  0,
  ABISELECT(-15808,-8652),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15808,-8652),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C15D1Ev,_ZTv0_n32_N8S7798C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C15D0Ev,_ZTv0_n32_N8S7798C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7798C17__8S7798C15__8S7798C14[] = {
  ABISELECT(11112,6116),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
};
extern void _ZN7S7798C32v7Ev();
extern void _ZN7S7798C32v8Ev();
extern void _ZN7S7798C3D1Ev();
extern void _ZN7S7798C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C3__8S7798C14[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7798C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7798C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C3D0Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C3__8S7798C14[] = {
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7798C3D1Ev,_ZTv0_n32_N7S7798C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7798C3D1Ev,_ZThn6196_N7S7798C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7798C3D0Ev,_ZTv0_n32_N7S7798C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7798C3D0Ev,_ZThn6196_N7S7798C3D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__7S7798C3__8S7798C14[] = {
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C3D1Ev,_ZTv0_n32_N7S7798C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C3D0Ev,_ZTv0_n32_N7S7798C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C3__8S7798C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C3__8S7798C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C8D1Ev();
extern void _ZN7S7798C8D0Ev();
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__8S7798C14[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C8__8S7798C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C8__8S7798C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C8__8S7798C14[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__8S7798C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C9__8S7798C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C9__8S7798C14[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__8S7798C14[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C10__8S7798C14[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTT_ENTRY vtt_S7798C14[] = {
  {&(_ZTV8S7798C14[8]),  8,69},
  {&(_tg__ZTV7S7798C2__8S7798C14[8]),  8,10},
  {&(_tg__ZTV7S7798C3__7S7798C2__8S7798C14[10]),  10,14},
  {&(_tg__ZTV7S7798C4__7S7798C2__8S7798C14[3]),  3,4},
  {&(_tg__ZTV7S7798C8__7S7798C2__8S7798C14[9]),  9,13},
  {&(_tg__ZTV7S7798C9__7S7798C2__8S7798C14[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C2__8S7798C14[6]),  6,8},
  {&(_tg__ZTV8S7798C15__8S7798C14[7]),  7,10},
  {&(_tg__ZTV8S7798C168S7798C15__8S7798C14[7]),  7,9},
  {&(_tg__ZTV7S7798C9__8S7798C168S7798C15__8S7798C14[5]),  5,5},
  {&(_tg__ZTV8S7798C10__8S7798C168S7798C15__8S7798C14[6]),  6,8},
  {&(_tg__ZTV7S7798C4__8S7798C168S7798C15__8S7798C14[3]),  3,4},
  {&(_tg__ZTV7S7798C8__8S7798C168S7798C15__8S7798C14[9]),  9,13},
  {&(_tg__ZTV8S7798C178S7798C15__8S7798C14[3]),  3,3},
  {&(_tg__ZTV7S7798C4__8S7798C178S7798C15__8S7798C14[3]),  3,4},
  {&(_tg__ZTV7S7798C9__8S7798C15__8S7798C14[5]),  5,5},
  {&(_tg__ZTV8S7798C10__8S7798C15__8S7798C14[6]),  6,8},
  {&(_tg__ZTV7S7798C4__8S7798C15__8S7798C14[3]),  3,4},
  {&(_tg__ZTV7S7798C8__8S7798C15__8S7798C14[9]),  9,13},
  {&(_tg__ZTV8S7798C17__8S7798C15__8S7798C14[3]),  3,3},
  {&(_ZTV8S7798C14[35]),  35,69},
  {&(_ZTV8S7798C14[42]),  42,69},
  {&(_ZTV8S7798C14[52]),  52,69},
  {&(_ZTV8S7798C14[61]),  61,69},
  {&(_ZTV8S7798C14[67]),  67,69},
  {&(_ZTV8S7798C14[19]),  19,69},
  {&(_ZTV8S7798C14[25]),  25,69},
  {&(_tg__ZTV7S7798C3__8S7798C14[7]),  7,11},
  {&(_tg__ZTV7S7798C4__7S7798C3__8S7798C14[3]),  3,4},
  {&(_tg__ZTV7S7798C8__7S7798C3__8S7798C14[9]),  9,13},
  {&(_tg__ZTV7S7798C9__7S7798C3__8S7798C14[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C3__8S7798C14[6]),  6,8},
  {&(_tg__ZTV7S7798C8__8S7798C14[6]),  6,10},
  {&(_tg__ZTV7S7798C9__7S7798C8__8S7798C14[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C8__8S7798C14[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C8__8S7798C14[3]),  3,4},
  {&(_tg__ZTV7S7798C9__8S7798C14[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C9__8S7798C14[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C9__8S7798C14[3]),  3,4},
  {&(_tg__ZTV8S7798C10__8S7798C14[4]),  4,6},
  {&(_tg__ZTV7S7798C4__8S7798C10__8S7798C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7798C14[];
extern  VTBL_ENTRY _ZTV8S7798C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C14[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C3D0Ev,_ZTv0_n32_N7S7798C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7798C3D0Ev,_ZThn6196_N7S7798C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C3D1Ev,_ZTv0_n32_N7S7798C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7798C3D1Ev,_ZThn6196_N7S7798C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C15D0Ev,_ZTv0_n32_N8S7798C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7798C15D0Ev,_ZThn8652_N8S7798C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C15D1Ev,_ZTv0_n32_N8S7798C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7798C15D1Ev,_ZThn8652_N8S7798C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C16D0Ev,_ZTv0_n32_N8S7798C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7798C16D0Ev,_ZThn8652_N8S7798C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C16D1Ev,_ZTv0_n32_N8S7798C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N8S7798C16D1Ev,_ZThn8652_N8S7798C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C2D0Ev,_ZTv0_n32_N7S7798C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N7S7798C2D0Ev,_ZThn8672_N7S7798C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C2D1Ev,_ZTv0_n32_N7S7798C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N7S7798C2D1Ev,_ZThn8672_N7S7798C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7798C2D0Ev,_ZTv0_n40_N7S7798C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N7S7798C2D0Ev,_ZThn2476_N7S7798C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7798C2D1Ev,_ZTv0_n40_N7S7798C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N7S7798C2D1Ev,_ZThn2476_N7S7798C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C14D0Ev,_ZTv0_n32_N8S7798C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N8S7798C14D0Ev,_ZThn8672_N8S7798C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C14D1Ev,_ZTv0_n32_N8S7798C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N8S7798C14D1Ev,_ZThn8672_N8S7798C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7798C14D0Ev,_ZTv0_n40_N8S7798C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S7798C14D0Ev,_ZThn2476_N8S7798C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7798C14D1Ev,_ZTv0_n40_N8S7798C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S7798C14D1Ev,_ZThn2476_N8S7798C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7798C14 = {  "S7798C14", // class name
  bases_S7798C14, 13,
  &(vtc_S7798C14[0]), // expected_vtbl_contents
  &(vtt_S7798C14[0]), // expected_vtt_contents
  ABISELECT(16896,9260), // object size
  NSPAIRA(_ZTI8S7798C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7798C14),69, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7798C14),41, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7798C1  : S7798C2 , S7798C11 , virtual S7798C13 , S7798C14 , virtual S20177C15 {
  long s7798c1f0;
  int s7798c1f1[2];
  void *s7798c1f2;
  virtual void  v1(); // _ZN7S7798C12v1Ev
  virtual void  v2(); // _ZN7S7798C12v2Ev
  ~S7798C1(); // tgen
  S7798C1(); // tgen
};
//SIG(1 S7798C1) C1{ BC2{ VBC3{ VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC6{ m Fp[2]} FC6[9] Fp FC7{ v4 Fi Fp FC6} FC7} VBC8{ VBC9{ VBC10{ BC7 VBC4 VBC6 v5 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC4 BC6 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v7 v8 FC8[7] Fi Fs Fi FC10 Fl[9]} vd Fc Fi[3]} BC11{ v9 Fs Fc FL Fp Fi FD Fl FC12{ BC13{ VBC14{ VBC15{ BC16{ v14 Fi Fp FC6} VBC17{ v15 Fi[6] Fc:2 FD Fp[2] Fi FD FC5 FC6 FC6[9] Fp FC16 FC16} VBC6 v16 Fp FL Fc[2] FC17 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC17 BC6 vd v17 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC5 Fp Fi Fc[8] Fs Fi} Fc:2 FC4} VBC18{ v10 Fl Fc Fs[2]} BC19{ BC2 BC20{ BC21{ VBC9 VBC8 vd Fl Fp FC10 Fp Fs Fl Fi FL FC10[4] Fi} BC22{ VBC4 Fp Fs Fl Fi:6 Fp[2]} vd v11 FL FD FC5 Fi[9] Fs Fc:5} v12 v13 Fl Fi Fp Fc Fi FC5} VBC23{ m Fl FC6[8] Fi Fp[2]} v1 v2 Fl Fi[2] Fp}


void  S7798C1 ::v1(){vfunc_called(this, "_ZN7S7798C12v1Ev");}
void  S7798C1 ::v2(){vfunc_called(this, "_ZN7S7798C12v2Ev");}
S7798C1 ::~S7798C1(){ note_dtor("S7798C1", this);} // tgen
S7798C1 ::S7798C1(){ note_ctor("S7798C1", this);} // tgen

static void Test_S7798C1()
{
  extern Class_Descriptor cd_S7798C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1192,2613)];
    init_test(&cd_S7798C1, buf);
    S7798C1 *dp, &lv = *(dp=new (buf) S7798C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(19056,10448), "sizeof(S7798C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7798C1)");
    /*is_ambiguous_... S7798C3::S7798C4 */ AMB_check_base_class_offset(lv, (S7798C4*)(S7798C3*), ABISELECT(17456,9568), "S7798C1");
    check_base_class_offset(lv, (S7798C4*)(S7798C10*), ABISELECT(17456,9568), "S7798C1");
    check_base_class_offset(lv, (S7798C4*)(S7798C17*)(S7798C15*)(S7798C14*), ABISELECT(17456,9568), "S7798C1");
    check_base_class_offset(lv, (S7798C7*)(S7798C10*), ABISELECT(18400,10088), "S7798C1");
    check_base_class_offset(lv, (S281C37_nt*)(S7798C10*), ABISELECT(18856,10344), "S7798C1");
    check_base_class_offset(lv, (S7798C10*)(S7798C9*), ABISELECT(18400,10088), "S7798C1");
    check_base_class_offset(lv, (S7798C9*)(S7798C8*), ABISELECT(18304,10032), "S7798C1");
    check_base_class_offset(lv, (S7798C9*)(S7798C16*)(S7798C15*)(S7798C14*), ABISELECT(18304,10032), "S7798C1");
    /*is_ambiguous_... S7798C8::S7798C4 */ AMB_check_base_class_offset(lv, (S7798C4*)(S7798C8*), ABISELECT(17824,9764), "S7798C1");
    /*is_ambiguous_... S7798C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7798C8*), ABISELECT(18192,9960), "S7798C1");
    check_base_class_offset(lv, (S7798C8*)(S7798C3*), ABISELECT(17824,9764), "S7798C1");
    check_base_class_offset(lv, (S7798C8*)(S7798C16*)(S7798C15*)(S7798C14*), ABISELECT(17824,9764), "S7798C1");
    /*is_ambiguous_... S7798C1::S7798C2 */ AMB_check_base_class_offset(lv, (S7798C3*)(S7798C2*), ABISELECT(6528,3568), "S7798C1");
    check_base_class_offset(lv, (S7798C3*)(S7798C2*)(S7798C14*), ABISELECT(6528,3568), "S7798C1");
    /*is_ambiguous_... S7798C1::S7798C2 */ AMB_check_base_class_offset(lv, (S7798C2*), 0, "S7798C1");
    check_base_class_offset(lv, (S7798C11*), ABISELECT(32,20), "S7798C1");
    check_base_class_offset(lv, (S7798C13*), ABISELECT(18872,10352), "S7798C1");
    check_base_class_offset(lv, (S7798C2*)(S7798C14*), ABISELECT(1968,1076), "S7798C1");
    check_base_class_offset(lv, (S7798C16*)(S7798C15*)(S7798C14*), ABISELECT(2000,1096), "S7798C1");
    check_base_class_offset(lv, (S7798C17*)(S7798C15*)(S7798C14*), ABISELECT(6328,3436), "S7798C1");
    check_base_class_offset(lv, (S7798C15*)(S7798C14*), ABISELECT(2000,1096), "S7798C1");
    check_base_class_offset(lv, (S7798C14*), ABISELECT(1968,1076), "S7798C1");
    check_base_class_offset(lv, (S20177C15*), ABISELECT(18896,10368), "S7798C1");
    check_field_offset(lv, s7798c1f0, ABISELECT(6504,3552), "S7798C1.s7798c1f0");
    check_field_offset(lv, s7798c1f1, ABISELECT(6512,3556), "S7798C1.s7798c1f1");
    check_field_offset(lv, s7798c1f2, ABISELECT(6520,3564), "S7798C1.s7798c1f2");
    test_class_info(&lv, &cd_S7798C1);
    dp->~S7798C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7798C1(Test_S7798C1, "S7798C1", ABISELECT(19056,10448));

#else // __cplusplus

extern void _ZN7S7798C1C1Ev();
extern void _ZN7S7798C1D1Ev();
Name_Map name_map_S7798C1[] = {
  NSPAIR(_ZN7S7798C1C1Ev),
  NSPAIR(_ZN7S7798C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S7798C7;
extern VTBL_ENTRY _ZTI7S7798C7[];
extern  VTBL_ENTRY _ZTV7S7798C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C10;
extern VTBL_ENTRY _ZTI8S7798C10[];
extern  VTBL_ENTRY _ZTV8S7798C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C10[];
extern Class_Descriptor cd_S7798C9;
extern VTBL_ENTRY _ZTI7S7798C9[];
extern  VTBL_ENTRY _ZTV7S7798C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C9[];
extern Class_Descriptor cd_S7798C4;
extern VTBL_ENTRY _ZTI7S7798C4[];
extern  VTBL_ENTRY _ZTV7S7798C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7798C8;
extern VTBL_ENTRY _ZTI7S7798C8[];
extern  VTBL_ENTRY _ZTV7S7798C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C8[];
extern Class_Descriptor cd_S7798C3;
extern VTBL_ENTRY _ZTI7S7798C3[];
extern  VTBL_ENTRY _ZTV7S7798C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C3[];
extern Class_Descriptor cd_S7798C2;
extern VTBL_ENTRY _ZTI7S7798C2[];
extern  VTBL_ENTRY _ZTV7S7798C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C2[];
extern Class_Descriptor cd_S7798C11;
extern VTBL_ENTRY _ZTI8S7798C11[];
extern  VTBL_ENTRY _ZTV8S7798C11[];
extern Class_Descriptor cd_S7798C13;
extern VTBL_ENTRY _ZTI8S7798C13[];
extern  VTBL_ENTRY _ZTV8S7798C13[];
extern Class_Descriptor cd_S7798C2;
extern VTBL_ENTRY _ZTI7S7798C2[];
extern  VTBL_ENTRY _ZTV7S7798C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C2[];
extern Class_Descriptor cd_S7798C16;
extern VTBL_ENTRY _ZTI8S7798C16[];
extern  VTBL_ENTRY _ZTV8S7798C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C16[];
extern Class_Descriptor cd_S7798C17;
extern VTBL_ENTRY _ZTI8S7798C17[];
extern  VTBL_ENTRY _ZTV8S7798C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C17[];
extern Class_Descriptor cd_S7798C15;
extern VTBL_ENTRY _ZTI8S7798C15[];
extern  VTBL_ENTRY _ZTV8S7798C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C15[];
extern Class_Descriptor cd_S7798C14;
extern VTBL_ENTRY _ZTI8S7798C14[];
extern  VTBL_ENTRY _ZTV8S7798C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7798C14[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
static Base_Class bases_S7798C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7798C4,    ABISELECT(17456,9568), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7798C7,    ABISELECT(18400,10088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(18856,10344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C10,    ABISELECT(18400,10088), //bcp->offset
    78, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7798C9,    ABISELECT(18304,10032), //bcp->offset
    73, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7798C4,    ABISELECT(17824,9764), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(18192,9960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7798C8,    ABISELECT(17824,9764), //bcp->offset
    60, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7798C3,    ABISELECT(6528,3568), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7798C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7798C11,    ABISELECT(32,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7798C13,    ABISELECT(18872,10352), //bcp->offset
    86, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7798C2,    ABISELECT(1968,1076), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7798C16,    ABISELECT(2000,1096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7798C17,    ABISELECT(6328,3436), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7798C15,    ABISELECT(2000,1096), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7798C14,    ABISELECT(1968,1076), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C15,    ABISELECT(18896,10368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7798C1[];
extern void _ZN7S7798C1D1Ev();
extern void _ZN7S7798C1D0Ev();
extern void _ZN7S7798C12v1Ev();
extern void _ZN7S7798C12v2Ev();
extern void _ZN8S7798C112v9Ev();
extern void ABISELECT(_ZThn1968_N7S7798C1D1Ev,_ZThn1076_N7S7798C1D1Ev)();
extern void ABISELECT(_ZThn1968_N7S7798C1D0Ev,_ZThn1076_N7S7798C1D0Ev)();
extern void _ZN8S7798C143v12Ev();
extern void _ZN8S7798C143v13Ev();
extern void ABISELECT(_ZThn2000_N7S7798C1D1Ev,_ZThn1096_N7S7798C1D1Ev)();
extern void ABISELECT(_ZThn2000_N7S7798C1D0Ev,_ZThn1096_N7S7798C1D0Ev)();
extern void _ZN8S7798C153v11Ev();
extern void _ZN7S7798C32v7Ev();
extern void _ZN7S7798C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N7S7798C1D1Ev,_ZTv0_n40_N7S7798C1D1Ev)();
extern void ABISELECT(_ZThn6528_N7S7798C1D1Ev,_ZThn3568_N7S7798C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7798C1D0Ev,_ZTv0_n40_N7S7798C1D0Ev)();
extern void ABISELECT(_ZThn6528_N7S7798C1D0Ev,_ZThn3568_N7S7798C1D0Ev)() __attribute__((weak));
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7798C1D1Ev,_ZTv0_n32_N7S7798C1D1Ev)();
extern void ABISELECT(_ZThn17824_N7S7798C1D1Ev,_ZThn9764_N7S7798C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7798C1D0Ev,_ZTv0_n32_N7S7798C1D0Ev)();
extern void ABISELECT(_ZThn17824_N7S7798C1D0Ev,_ZThn9764_N7S7798C1D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
extern void _ZN8S7798C133v10Ev();
static  VTBL_ENTRY vtc_S7798C1[] = {
  ABISELECT(18896,10368),
  ABISELECT(18872,10352),
  ABISELECT(18856,10344),
  ABISELECT(18400,10088),
  ABISELECT(18304,10032),
  ABISELECT(17824,9764),
  ABISELECT(17456,9568),
  ABISELECT(6528,3568),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C1[0]),
  (VTBL_ENTRY)&_ZN7S7798C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7798C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7798C12v2Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7798C1[0]),
  (VTBL_ENTRY)&_ZN8S7798C112v9Ev,
  ABISELECT(16888,9268),
  ABISELECT(16432,9012),
  ABISELECT(16336,8956),
  ABISELECT(15856,8688),
  ABISELECT(15488,8492),
  ABISELECT(4560,2492),
  ABISELECT(-1968,-1076),
  (VTBL_ENTRY)&(_ZTI7S7798C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1968_N7S7798C1D1Ev,_ZThn1076_N7S7798C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1968_N7S7798C1D0Ev,_ZThn1076_N7S7798C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7798C143v12Ev,
  (VTBL_ENTRY)&_ZN8S7798C143v13Ev,
  ABISELECT(15824,8668),
  ABISELECT(16856,9248),
  ABISELECT(15456,8472),
  ABISELECT(16400,8992),
  ABISELECT(16304,8936),
  ABISELECT(-2000,-1096),
  (VTBL_ENTRY)&(_ZTI7S7798C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2000_N7S7798C1D1Ev,_ZThn1096_N7S7798C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2000_N7S7798C1D0Ev,_ZThn1096_N7S7798C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7798C153v11Ev,
  ABISELECT(11128,6132),
  ABISELECT(-6328,-3436),
  (VTBL_ENTRY)&(_ZTI7S7798C1[0]),
  ABISELECT(-6528,-3568),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-6528,-3568),
  (VTBL_ENTRY)&(_ZTI7S7798C1[0]),
  (VTBL_ENTRY)&_ZN7S7798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7798C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7798C1D1Ev,_ZTv0_n40_N7S7798C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7798C1D0Ev,_ZTv0_n40_N7S7798C1D0Ev),
  0,
  ABISELECT(-17456,-9568),
  (VTBL_ENTRY)&(_ZTI7S7798C1[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  0,
  ABISELECT(-17824,-9764),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-17824,-9764),
  (VTBL_ENTRY)&(_ZTI7S7798C1[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C1D1Ev,_ZTv0_n32_N7S7798C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C1D0Ev,_ZTv0_n32_N7S7798C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-18304,-10032),
  (VTBL_ENTRY)&(_ZTI7S7798C1[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-18400,-10088),
  (VTBL_ENTRY)&(_ZTI7S7798C1[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
  0,
  ABISELECT(-18872,-10352),
  (VTBL_ENTRY)&(_ZTI7S7798C1[0]),
  (VTBL_ENTRY)&_ZN8S7798C133v10Ev,
};
extern VTBL_ENTRY _ZTV7S7798C1[];
extern void _ZN7S7798C2D1Ev();
extern void _ZN7S7798C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C2__7S7798C1[] = {
  ABISELECT(18856,10344),
  ABISELECT(18400,10088),
  ABISELECT(18304,10032),
  ABISELECT(17824,9764),
  ABISELECT(17456,9568),
  ABISELECT(6528,3568),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C2D0Ev,
};
extern void _ZN7S7798C32v7Ev();
extern void _ZN7S7798C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N7S7798C2D1Ev,_ZTv0_n40_N7S7798C2D1Ev)();
extern void ABISELECT(_ZThn6528_N7S7798C2D1Ev,_ZThn3568_N7S7798C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7798C2D0Ev,_ZTv0_n40_N7S7798C2D0Ev)();
extern void ABISELECT(_ZThn6528_N7S7798C2D0Ev,_ZThn3568_N7S7798C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7798C3__7S7798C2__7S7798C1[] = {
  ABISELECT(-6528,-3568),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-6528,-3568),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7798C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7798C2D1Ev,_ZTv0_n40_N7S7798C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7798C2D0Ev,_ZTv0_n40_N7S7798C2D0Ev),
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C2__7S7798C1[] = {
  0,
  ABISELECT(-17456,-9568),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7798C2D1Ev,_ZTv0_n32_N7S7798C2D1Ev)();
extern void ABISELECT(_ZThn17824_N7S7798C2D1Ev,_ZThn9764_N7S7798C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7798C2D0Ev,_ZTv0_n32_N7S7798C2D0Ev)();
extern void ABISELECT(_ZThn17824_N7S7798C2D0Ev,_ZThn9764_N7S7798C2D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__7S7798C2__7S7798C1[] = {
  0,
  ABISELECT(-17824,-9764),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-17824,-9764),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C2D1Ev,_ZTv0_n32_N7S7798C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C2D0Ev,_ZTv0_n32_N7S7798C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C2__7S7798C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-18304,-10032),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C2__7S7798C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-18400,-10088),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN8S7798C14D1Ev();
extern void _ZN8S7798C14D0Ev();
extern void _ZN8S7798C143v12Ev();
extern void _ZN8S7798C143v13Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C14__7S7798C1[] = {
  ABISELECT(16888,9268),
  ABISELECT(16432,9012),
  ABISELECT(16336,8956),
  ABISELECT(15856,8688),
  ABISELECT(15488,8492),
  ABISELECT(4560,2492),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  (VTBL_ENTRY)&_ZN8S7798C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7798C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7798C143v12Ev,
  (VTBL_ENTRY)&_ZN8S7798C143v13Ev,
};
extern void _ZN7S7798C2D1Ev();
extern void _ZN7S7798C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C28S7798C14__A1__7S7798C1[] = {
  ABISELECT(16888,9268),
  ABISELECT(16432,9012),
  ABISELECT(16336,8956),
  ABISELECT(15856,8688),
  ABISELECT(15488,8492),
  ABISELECT(4560,2492),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C2D0Ev,
};
extern void _ZN7S7798C32v7Ev();
extern void _ZN7S7798C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N7S7798C2D1Ev,_ZTv0_n40_N7S7798C2D1Ev)();
extern void ABISELECT(_ZThn4560_N7S7798C2D1Ev,_ZThn2492_N7S7798C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7798C2D0Ev,_ZTv0_n40_N7S7798C2D0Ev)();
extern void ABISELECT(_ZThn4560_N7S7798C2D0Ev,_ZThn2492_N7S7798C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7798C3__7S7798C28S7798C14__A1__7S7798C1[] = {
  ABISELECT(-4560,-2492),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-4560,-2492),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7798C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7798C2D1Ev,_ZTv0_n40_N7S7798C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7798C2D0Ev,_ZTv0_n40_N7S7798C2D0Ev),
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C28S7798C14__A1__7S7798C1[] = {
  0,
  ABISELECT(-15488,-8492),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7798C2D1Ev,_ZTv0_n32_N7S7798C2D1Ev)();
extern void ABISELECT(_ZThn15856_N7S7798C2D1Ev,_ZThn8688_N7S7798C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7798C2D0Ev,_ZTv0_n32_N7S7798C2D0Ev)();
extern void ABISELECT(_ZThn15856_N7S7798C2D0Ev,_ZThn8688_N7S7798C2D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__7S7798C28S7798C14__A1__7S7798C1[] = {
  0,
  ABISELECT(-15856,-8688),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15856,-8688),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C2D1Ev,_ZTv0_n32_N7S7798C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C2D0Ev,_ZTv0_n32_N7S7798C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C28S7798C14__A1__7S7798C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16336,-8956),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C28S7798C14__A1__7S7798C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16432,-9012),
  (VTBL_ENTRY)&(_ZTI7S7798C2[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN8S7798C15D1Ev();
extern void _ZN8S7798C15D0Ev();
extern void _ZN8S7798C153v11Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C158S7798C14__7S7798C1[] = {
  ABISELECT(15824,8668),
  ABISELECT(16856,9248),
  ABISELECT(15456,8472),
  ABISELECT(16400,8992),
  ABISELECT(16304,8936),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  (VTBL_ENTRY)&_ZN8S7798C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7798C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7798C153v11Ev,
};
extern void _ZN8S7798C16D1Ev();
extern void _ZN8S7798C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C168S7798C158S7798C14__7S7798C1[] = {
  ABISELECT(15824,8668),
  ABISELECT(16856,9248),
  ABISELECT(15456,8472),
  ABISELECT(16400,8992),
  ABISELECT(16304,8936),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN8S7798C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7798C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__8S7798C168S7798C158S7798C14__7S7798C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16304,-8936),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__8S7798C168S7798C158S7798C14__7S7798C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16400,-8992),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C168S7798C158S7798C14__7S7798C1[] = {
  0,
  ABISELECT(-15456,-8472),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7798C16D1Ev,_ZTv0_n32_N8S7798C16D1Ev)();
extern void ABISELECT(_ZThn15824_N8S7798C16D1Ev,_ZThn8668_N8S7798C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7798C16D0Ev,_ZTv0_n32_N8S7798C16D0Ev)();
extern void ABISELECT(_ZThn15824_N8S7798C16D0Ev,_ZThn8668_N8S7798C16D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__8S7798C168S7798C158S7798C14__7S7798C1[] = {
  0,
  ABISELECT(-15824,-8668),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15824,-8668),
  (VTBL_ENTRY)&(_ZTI8S7798C16[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C16D1Ev,_ZTv0_n32_N8S7798C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C16D0Ev,_ZTv0_n32_N8S7798C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7798C178S7798C158S7798C14__7S7798C1[] = {
  ABISELECT(11128,6132),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C17[0]),
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C178S7798C158S7798C14__7S7798C1[] = {
  0,
  ABISELECT(-11128,-6132),
  (VTBL_ENTRY)&(_ZTI8S7798C17[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__8S7798C158S7798C14__7S7798C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16304,-8936),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__8S7798C158S7798C14__7S7798C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16400,-8992),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C158S7798C14__7S7798C1[] = {
  0,
  ABISELECT(-15456,-8472),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7798C15D1Ev,_ZTv0_n32_N8S7798C15D1Ev)();
extern void ABISELECT(_ZThn15824_N8S7798C15D1Ev,_ZThn8668_N8S7798C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7798C15D0Ev,_ZTv0_n32_N8S7798C15D0Ev)();
extern void ABISELECT(_ZThn15824_N8S7798C15D0Ev,_ZThn8668_N8S7798C15D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__8S7798C158S7798C14__7S7798C1[] = {
  0,
  ABISELECT(-15824,-8668),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15824,-8668),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C15D1Ev,_ZTv0_n32_N8S7798C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C15D0Ev,_ZTv0_n32_N8S7798C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7798C17__8S7798C158S7798C14__7S7798C1[] = {
  ABISELECT(11128,6132),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI8S7798C15[0]),
};
extern void _ZN7S7798C32v7Ev();
extern void _ZN7S7798C32v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S7798C14D1Ev,_ZTv0_n40_N8S7798C14D1Ev)();
extern void ABISELECT(_ZThn4560_N8S7798C14D1Ev,_ZThn2492_N8S7798C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S7798C14D0Ev,_ZTv0_n40_N8S7798C14D0Ev)();
extern void ABISELECT(_ZThn4560_N8S7798C14D0Ev,_ZThn2492_N8S7798C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7798C3__8S7798C14__7S7798C1[] = {
  ABISELECT(-4560,-2492),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-4560,-2492),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  (VTBL_ENTRY)&_ZN7S7798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7798C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7798C14D1Ev,_ZTv0_n40_N8S7798C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S7798C14D0Ev,_ZTv0_n40_N8S7798C14D0Ev),
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C14__7S7798C1[] = {
  0,
  ABISELECT(-15488,-8492),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S7798C14D1Ev,_ZTv0_n32_N8S7798C14D1Ev)();
extern void ABISELECT(_ZThn15856_N8S7798C14D1Ev,_ZThn8688_N8S7798C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7798C14D0Ev,_ZTv0_n32_N8S7798C14D0Ev)();
extern void ABISELECT(_ZThn15856_N8S7798C14D0Ev,_ZThn8688_N8S7798C14D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__8S7798C14__7S7798C1[] = {
  0,
  ABISELECT(-15856,-8688),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15856,-8688),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C14D1Ev,_ZTv0_n32_N8S7798C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7798C14D0Ev,_ZTv0_n32_N8S7798C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__8S7798C14__7S7798C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16336,-8956),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__8S7798C14__7S7798C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16432,-9012),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void ABISELECT(_ZThn32_N8S7798C14D1Ev,_ZThn20_N8S7798C14D1Ev)();
extern void ABISELECT(_ZThn32_N8S7798C14D0Ev,_ZThn20_N8S7798C14D0Ev)();
extern void _ZN8S7798C153v11Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C15__8S7798C14__7S7798C1[] = {
  ABISELECT(15824,8668),
  ABISELECT(16856,9248),
  ABISELECT(15456,8472),
  ABISELECT(16400,8992),
  ABISELECT(16304,8936),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7798C14D1Ev,_ZThn20_N8S7798C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7798C14D0Ev,_ZThn20_N8S7798C14D0Ev),
  (VTBL_ENTRY)&_ZN8S7798C153v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7798C178S7798C15__8S7798C14__7S7798C1[] = {
  ABISELECT(11128,6132),
  ABISELECT(-4360,-2360),
  (VTBL_ENTRY)&(_ZTI8S7798C14[0]),
};
extern void _ZN7S7798C32v7Ev();
extern void _ZN7S7798C32v8Ev();
extern void _ZN7S7798C3D1Ev();
extern void _ZN7S7798C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C3__7S7798C1[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7798C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7798C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C3D0Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C3__7S7798C1[] = {
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S7798C3D1Ev,_ZTv0_n32_N7S7798C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7798C3D1Ev,_ZThn6196_N7S7798C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7798C3D0Ev,_ZTv0_n32_N7S7798C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7798C3D0Ev,_ZThn6196_N7S7798C3D0Ev)() __attribute__((weak));
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__7S7798C3__7S7798C1[] = {
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C3D1Ev,_ZTv0_n32_N7S7798C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7798C3D0Ev,_ZTv0_n32_N7S7798C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C3__7S7798C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C3__7S7798C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI7S7798C3[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
extern void _ZN7S7798C8D1Ev();
extern void _ZN7S7798C8D0Ev();
extern void _ZN7S7798C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C8__7S7798C1[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7798C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7798C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C8__7S7798C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C8__7S7798C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C8__7S7798C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7798C8[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7798C9__7S7798C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C9__7S7798C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__7S7798C9__7S7798C1[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7798C9[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
extern void _ZN7S7798C72v3Ev();
extern void _ZN8S7798C102v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7798C10__7S7798C1[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C72v3Ev,
  (VTBL_ENTRY)&_ZN8S7798C102v5Ev,
};
extern void _ZN7S7798C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7798C4__8S7798C10__7S7798C1[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7798C10[0]),
  (VTBL_ENTRY)&_ZN7S7798C42v4Ev,
};
static  VTT_ENTRY vtt_S7798C1[] = {
  {&(_ZTV7S7798C1[10]),  10,90},
  {&(_tg__ZTV7S7798C2__7S7798C1[8]),  8,10},
  {&(_tg__ZTV7S7798C3__7S7798C2__7S7798C1[10]),  10,14},
  {&(_tg__ZTV7S7798C4__7S7798C2__7S7798C1[3]),  3,4},
  {&(_tg__ZTV7S7798C8__7S7798C2__7S7798C1[9]),  9,13},
  {&(_tg__ZTV7S7798C9__7S7798C2__7S7798C1[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C2__7S7798C1[6]),  6,8},
  {&(_tg__ZTV8S7798C14__7S7798C1[8]),  8,12},
  {&(_tg__ZTV7S7798C28S7798C14__A1__7S7798C1[8]),  8,10},
  {&(_tg__ZTV7S7798C3__7S7798C28S7798C14__A1__7S7798C1[10]),  10,14},
  {&(_tg__ZTV7S7798C4__7S7798C28S7798C14__A1__7S7798C1[3]),  3,4},
  {&(_tg__ZTV7S7798C8__7S7798C28S7798C14__A1__7S7798C1[9]),  9,13},
  {&(_tg__ZTV7S7798C9__7S7798C28S7798C14__A1__7S7798C1[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C28S7798C14__A1__7S7798C1[6]),  6,8},
  {&(_tg__ZTV8S7798C158S7798C14__7S7798C1[7]),  7,10},
  {&(_tg__ZTV8S7798C168S7798C158S7798C14__7S7798C1[7]),  7,9},
  {&(_tg__ZTV7S7798C9__8S7798C168S7798C158S7798C14__7S7798C1[5]),  5,5},
  {&(_tg__ZTV8S7798C10__8S7798C168S7798C158S7798C14__7S7798C1[6]),  6,8},
  {&(_tg__ZTV7S7798C4__8S7798C168S7798C158S7798C14__7S7798C1[3]),  3,4},
  {&(_tg__ZTV7S7798C8__8S7798C168S7798C158S7798C14__7S7798C1[9]),  9,13},
  {&(_tg__ZTV8S7798C178S7798C158S7798C14__7S7798C1[3]),  3,3},
  {&(_tg__ZTV7S7798C4__8S7798C178S7798C158S7798C14__7S7798C1[3]),  3,4},
  {&(_tg__ZTV7S7798C9__8S7798C158S7798C14__7S7798C1[5]),  5,5},
  {&(_tg__ZTV8S7798C10__8S7798C158S7798C14__7S7798C1[6]),  6,8},
  {&(_tg__ZTV7S7798C4__8S7798C158S7798C14__7S7798C1[3]),  3,4},
  {&(_tg__ZTV7S7798C8__8S7798C158S7798C14__7S7798C1[9]),  9,13},
  {&(_tg__ZTV8S7798C17__8S7798C158S7798C14__7S7798C1[3]),  3,3},
  {&(_tg__ZTV7S7798C3__8S7798C14__7S7798C1[10]),  10,14},
  {&(_tg__ZTV7S7798C4__8S7798C14__7S7798C1[3]),  3,4},
  {&(_tg__ZTV7S7798C8__8S7798C14__7S7798C1[9]),  9,13},
  {&(_tg__ZTV7S7798C9__8S7798C14__7S7798C1[5]),  5,5},
  {&(_tg__ZTV8S7798C10__8S7798C14__7S7798C1[6]),  6,8},
  {&(_tg__ZTV8S7798C15__8S7798C14__7S7798C1[7]),  7,10},
  {&(_tg__ZTV8S7798C178S7798C15__8S7798C14__7S7798C1[3]),  3,3},
  {&(_ZTV7S7798C1[52]),  52,90},
  {&(_ZTV7S7798C1[59]),  59,90},
  {&(_ZTV7S7798C1[69]),  69,90},
  {&(_ZTV7S7798C1[78]),  78,90},
  {&(_ZTV7S7798C1[84]),  84,90},
  {&(_ZTV7S7798C1[89]),  89,90},
  {&(_ZTV7S7798C1[25]),  25,90},
  {&(_ZTV7S7798C1[36]),  36,90},
  {&(_ZTV7S7798C1[42]),  42,90},
  {&(_tg__ZTV7S7798C3__7S7798C1[7]),  7,11},
  {&(_tg__ZTV7S7798C4__7S7798C3__7S7798C1[3]),  3,4},
  {&(_tg__ZTV7S7798C8__7S7798C3__7S7798C1[9]),  9,13},
  {&(_tg__ZTV7S7798C9__7S7798C3__7S7798C1[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C3__7S7798C1[6]),  6,8},
  {&(_tg__ZTV7S7798C8__7S7798C1[6]),  6,10},
  {&(_tg__ZTV7S7798C9__7S7798C8__7S7798C1[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C8__7S7798C1[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C8__7S7798C1[3]),  3,4},
  {&(_tg__ZTV7S7798C9__7S7798C1[5]),  5,5},
  {&(_tg__ZTV8S7798C10__7S7798C9__7S7798C1[6]),  6,8},
  {&(_tg__ZTV7S7798C4__7S7798C9__7S7798C1[3]),  3,4},
  {&(_tg__ZTV8S7798C10__7S7798C1[4]),  4,6},
  {&(_tg__ZTV7S7798C4__8S7798C10__7S7798C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7798C1[];
extern  VTBL_ENTRY _ZTV7S7798C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7798C1[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C3D0Ev,_ZTv0_n32_N7S7798C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7798C3D0Ev,_ZThn6196_N7S7798C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C3D1Ev,_ZTv0_n32_N7S7798C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7798C3D1Ev,_ZThn6196_N7S7798C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C14D0Ev,_ZTv0_n32_N8S7798C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15856_N8S7798C14D0Ev,_ZThn8688_N8S7798C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C14D1Ev,_ZTv0_n32_N8S7798C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15856_N8S7798C14D1Ev,_ZThn8688_N8S7798C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7798C14D0Ev,_ZTv0_n40_N8S7798C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4560_N8S7798C14D0Ev,_ZThn2492_N8S7798C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S7798C14D1Ev,_ZTv0_n40_N8S7798C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4560_N8S7798C14D1Ev,_ZThn2492_N8S7798C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C15D0Ev,_ZTv0_n32_N8S7798C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15824_N8S7798C15D0Ev,_ZThn8668_N8S7798C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C15D1Ev,_ZTv0_n32_N8S7798C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15824_N8S7798C15D1Ev,_ZThn8668_N8S7798C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C16D0Ev,_ZTv0_n32_N8S7798C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15824_N8S7798C16D0Ev,_ZThn8668_N8S7798C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7798C16D1Ev,_ZTv0_n32_N8S7798C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15824_N8S7798C16D1Ev,_ZThn8668_N8S7798C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C2D0Ev,_ZTv0_n32_N7S7798C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15856_N7S7798C2D0Ev,_ZThn8688_N7S7798C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17824_N7S7798C2D0Ev,_ZThn9764_N7S7798C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C2D1Ev,_ZTv0_n32_N7S7798C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15856_N7S7798C2D1Ev,_ZThn8688_N7S7798C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17824_N7S7798C2D1Ev,_ZThn9764_N7S7798C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7798C2D0Ev,_ZTv0_n40_N7S7798C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4560_N7S7798C2D0Ev,_ZThn2492_N7S7798C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6528_N7S7798C2D0Ev,_ZThn3568_N7S7798C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7798C2D1Ev,_ZTv0_n40_N7S7798C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4560_N7S7798C2D1Ev,_ZThn2492_N7S7798C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6528_N7S7798C2D1Ev,_ZThn3568_N7S7798C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C1D0Ev,_ZTv0_n32_N7S7798C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17824_N7S7798C1D0Ev,_ZThn9764_N7S7798C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7798C1D1Ev,_ZTv0_n32_N7S7798C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17824_N7S7798C1D1Ev,_ZThn9764_N7S7798C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7798C1D0Ev,_ZTv0_n40_N7S7798C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6528_N7S7798C1D0Ev,_ZThn3568_N7S7798C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7798C1D1Ev,_ZTv0_n40_N7S7798C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6528_N7S7798C1D1Ev,_ZThn3568_N7S7798C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7798C1 = {  "S7798C1", // class name
  bases_S7798C1, 18,
  &(vtc_S7798C1[0]), // expected_vtbl_contents
  &(vtt_S7798C1[0]), // expected_vtt_contents
  ABISELECT(19056,10448), // object size
  NSPAIRA(_ZTI7S7798C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7798C1),90, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7798C1),57, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3047C3  {
  void *s3047c3f0;
  ::S2215C25 s3047c3f1;
  virtual  ~S3047C3(); // _ZN7S3047C3D1Ev
  virtual void  v18(); // _ZN7S3047C33v18Ev
  virtual void  v19(); // _ZN7S3047C33v19Ev
  virtual void  v20(); // _ZN7S3047C33v20Ev
  virtual void  v21(); // _ZN7S3047C33v21Ev
  virtual void  v22(); // _ZN7S3047C33v22Ev
  virtual void  v23(); // _ZN7S3047C33v23Ev
  virtual void  v24(); // _ZN7S3047C33v24Ev
  virtual void  v25(); // _ZN7S3047C33v25Ev
  virtual void  v26(); // _ZN7S3047C33v26Ev
  virtual void  v27(); // _ZN7S3047C33v27Ev
  virtual void  v28(); // _ZN7S3047C33v28Ev
  virtual void  v29(); // _ZN7S3047C33v29Ev
  virtual void  v30(); // _ZN7S3047C33v30Ev
  virtual void  v31(); // _ZN7S3047C33v31Ev
  virtual void  v32(); // _ZN7S3047C33v32Ev
  S3047C3(); // tgen
};
//SIG(-1 S3047C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}}}


 S3047C3 ::~S3047C3(){ note_dtor("S3047C3", this);}
void  S3047C3 ::v18(){vfunc_called(this, "_ZN7S3047C33v18Ev");}
void  S3047C3 ::v19(){vfunc_called(this, "_ZN7S3047C33v19Ev");}
void  S3047C3 ::v20(){vfunc_called(this, "_ZN7S3047C33v20Ev");}
void  S3047C3 ::v21(){vfunc_called(this, "_ZN7S3047C33v21Ev");}
void  S3047C3 ::v22(){vfunc_called(this, "_ZN7S3047C33v22Ev");}
void  S3047C3 ::v23(){vfunc_called(this, "_ZN7S3047C33v23Ev");}
void  S3047C3 ::v24(){vfunc_called(this, "_ZN7S3047C33v24Ev");}
void  S3047C3 ::v25(){vfunc_called(this, "_ZN7S3047C33v25Ev");}
void  S3047C3 ::v26(){vfunc_called(this, "_ZN7S3047C33v26Ev");}
void  S3047C3 ::v27(){vfunc_called(this, "_ZN7S3047C33v27Ev");}
void  S3047C3 ::v28(){vfunc_called(this, "_ZN7S3047C33v28Ev");}
void  S3047C3 ::v29(){vfunc_called(this, "_ZN7S3047C33v29Ev");}
void  S3047C3 ::v30(){vfunc_called(this, "_ZN7S3047C33v30Ev");}
void  S3047C3 ::v31(){vfunc_called(this, "_ZN7S3047C33v31Ev");}
void  S3047C3 ::v32(){vfunc_called(this, "_ZN7S3047C33v32Ev");}
S3047C3 ::S3047C3(){ note_ctor("S3047C3", this);} // tgen

static void Test_S3047C3()
{
  extern Class_Descriptor cd_S3047C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3047C3, buf);
    S3047C3 *dp, &lv = *(dp=new (buf) S3047C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3047C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3047C3)");
    check_field_offset(lv, s3047c3f0, ABISELECT(8,4), "S3047C3.s3047c3f0");
    check_field_offset(lv, s3047c3f1, ABISELECT(16,8), "S3047C3.s3047c3f1");
    test_class_info(&lv, &cd_S3047C3);
    dp->~S3047C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3047C3(Test_S3047C3, "S3047C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3047C3C1Ev();
extern void _ZN7S3047C3D1Ev();
Name_Map name_map_S3047C3[] = {
  NSPAIR(_ZN7S3047C3C1Ev),
  NSPAIR(_ZN7S3047C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3047C3[];
extern void _ZN7S3047C3D1Ev();
extern void _ZN7S3047C3D0Ev();
extern void _ZN7S3047C33v18Ev();
extern void _ZN7S3047C33v19Ev();
extern void _ZN7S3047C33v20Ev();
extern void _ZN7S3047C33v21Ev();
extern void _ZN7S3047C33v22Ev();
extern void _ZN7S3047C33v23Ev();
extern void _ZN7S3047C33v24Ev();
extern void _ZN7S3047C33v25Ev();
extern void _ZN7S3047C33v26Ev();
extern void _ZN7S3047C33v27Ev();
extern void _ZN7S3047C33v28Ev();
extern void _ZN7S3047C33v29Ev();
extern void _ZN7S3047C33v30Ev();
extern void _ZN7S3047C33v31Ev();
extern void _ZN7S3047C33v32Ev();
static  VTBL_ENTRY vtc_S3047C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3047C3[0]),
  (VTBL_ENTRY)&_ZN7S3047C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3047C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v32Ev,
};
extern VTBL_ENTRY _ZTI7S3047C3[];
extern  VTBL_ENTRY _ZTV7S3047C3[];
Class_Descriptor cd_S3047C3 = {  "S3047C3", // class name
  0,0,//no base classes
  &(vtc_S3047C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3047C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3047C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3047C2  : S3047C3 {
  ::S2215C37 s3047c2f0;
  virtual  ~S3047C2(); // _ZN7S3047C2D1Ev
  virtual void  v33(); // _ZN7S3047C23v33Ev
  virtual void  v34(); // _ZN7S3047C23v34Ev
  virtual void  v35(); // _ZN7S3047C23v35Ev
  virtual void  v36(); // _ZN7S3047C23v36Ev
  virtual void  v37(); // _ZN7S3047C23v37Ev
  S3047C2(); // tgen
};
//SIG(-1 S3047C2) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}}} vd v1 v2 v3 v4 v5 FC6{ m Fp Fi[2] FC7{ m}}}


 S3047C2 ::~S3047C2(){ note_dtor("S3047C2", this);}
void  S3047C2 ::v33(){vfunc_called(this, "_ZN7S3047C23v33Ev");}
void  S3047C2 ::v34(){vfunc_called(this, "_ZN7S3047C23v34Ev");}
void  S3047C2 ::v35(){vfunc_called(this, "_ZN7S3047C23v35Ev");}
void  S3047C2 ::v36(){vfunc_called(this, "_ZN7S3047C23v36Ev");}
void  S3047C2 ::v37(){vfunc_called(this, "_ZN7S3047C23v37Ev");}
S3047C2 ::S3047C2(){ note_ctor("S3047C2", this);} // tgen

static void Test_S3047C2()
{
  extern Class_Descriptor cd_S3047C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3047C2, buf);
    S3047C2 *dp, &lv = *(dp=new (buf) S3047C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3047C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3047C2)");
    check_base_class_offset(lv, (S3047C3*), 0, "S3047C2");
    check_field_offset(lv, s3047c2f0, ABISELECT(32,20), "S3047C2.s3047c2f0");
    test_class_info(&lv, &cd_S3047C2);
    dp->~S3047C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3047C2(Test_S3047C2, "S3047C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3047C2C1Ev();
extern void _ZN7S3047C2D1Ev();
Name_Map name_map_S3047C2[] = {
  NSPAIR(_ZN7S3047C2C1Ev),
  NSPAIR(_ZN7S3047C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3047C3;
extern VTBL_ENTRY _ZTI7S3047C3[];
extern  VTBL_ENTRY _ZTV7S3047C3[];
static Base_Class bases_S3047C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3047C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3047C2[];
extern void _ZN7S3047C2D1Ev();
extern void _ZN7S3047C2D0Ev();
extern void _ZN7S3047C33v18Ev();
extern void _ZN7S3047C33v19Ev();
extern void _ZN7S3047C33v20Ev();
extern void _ZN7S3047C33v21Ev();
extern void _ZN7S3047C33v22Ev();
extern void _ZN7S3047C33v23Ev();
extern void _ZN7S3047C33v24Ev();
extern void _ZN7S3047C33v25Ev();
extern void _ZN7S3047C33v26Ev();
extern void _ZN7S3047C33v27Ev();
extern void _ZN7S3047C33v28Ev();
extern void _ZN7S3047C33v29Ev();
extern void _ZN7S3047C33v30Ev();
extern void _ZN7S3047C33v31Ev();
extern void _ZN7S3047C33v32Ev();
extern void _ZN7S3047C23v33Ev();
extern void _ZN7S3047C23v34Ev();
extern void _ZN7S3047C23v35Ev();
extern void _ZN7S3047C23v36Ev();
extern void _ZN7S3047C23v37Ev();
static  VTBL_ENTRY vtc_S3047C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3047C2[0]),
  (VTBL_ENTRY)&_ZN7S3047C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3047C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3047C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3047C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3047C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3047C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3047C23v37Ev,
};
extern VTBL_ENTRY _ZTI7S3047C2[];
extern  VTBL_ENTRY _ZTV7S3047C2[];
Class_Descriptor cd_S3047C2 = {  "S3047C2", // class name
  bases_S3047C2, 1,
  &(vtc_S3047C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3047C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3047C2),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3047C12_nt  {
  virtual  ~S3047C12_nt(); // _ZN11S3047C12_ntD1Ev
  virtual void  v38(); // _ZN11S3047C12_nt3v38Ev
  virtual void  v39(); // _ZN11S3047C12_nt3v39Ev
  virtual void  v40(); // _ZN11S3047C12_nt3v40Ev
  S3047C12_nt(); // tgen
};
//SIG(-1 S3047C12_nt) C1{ vd v1 v2 v3}


 S3047C12_nt ::~S3047C12_nt(){ note_dtor("S3047C12_nt", this);}
void  S3047C12_nt ::v38(){vfunc_called(this, "_ZN11S3047C12_nt3v38Ev");}
void  S3047C12_nt ::v39(){vfunc_called(this, "_ZN11S3047C12_nt3v39Ev");}
void  S3047C12_nt ::v40(){vfunc_called(this, "_ZN11S3047C12_nt3v40Ev");}
S3047C12_nt ::S3047C12_nt(){ note_ctor("S3047C12_nt", this);} // tgen

//skip512 S3047C12_nt

#else // __cplusplus

extern void _ZN11S3047C12_ntC1Ev();
extern void _ZN11S3047C12_ntD1Ev();
Name_Map name_map_S3047C12_nt[] = {
  NSPAIR(_ZN11S3047C12_ntC1Ev),
  NSPAIR(_ZN11S3047C12_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3047C12_nt[];
extern void _ZN11S3047C12_ntD1Ev();
extern void _ZN11S3047C12_ntD0Ev();
extern void _ZN11S3047C12_nt3v38Ev();
extern void _ZN11S3047C12_nt3v39Ev();
extern void _ZN11S3047C12_nt3v40Ev();
static  VTBL_ENTRY vtc_S3047C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3047C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S3047C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3047C12_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3047C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S3047C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S3047C12_nt3v40Ev,
};
extern VTBL_ENTRY _ZTI11S3047C12_nt[];
VTBL_ENTRY *P__ZTI11S3047C12_nt = _ZTI11S3047C12_nt; 
extern  VTBL_ENTRY _ZTV11S3047C12_nt[];
Class_Descriptor cd_S3047C12_nt = {  "S3047C12_nt", // class name
  0,0,//no base classes
  &(vtc_S3047C12_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S3047C12_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3047C12_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  S3047C11  : S3047C12_nt {
  virtual  ~S3047C11(); // _ZN8S3047C11D1Ev
  virtual void  v41(); // _ZN8S3047C113v41Ev
  virtual void  v42(); // _ZN8S3047C113v42Ev
  virtual void  v43(); // _ZN8S3047C113v43Ev
  virtual void  v44(); // _ZN8S3047C113v44Ev
  virtual void  v45(); // _ZN8S3047C113v45Ev
  virtual void  v46(); // _ZN8S3047C113v46Ev
  S3047C11(); // tgen
};
//SIG(-1 S3047C11) C1{ BC2{ vd v7 v8 v9} vd v1 v2 v3 v4 v5 v6}


 S3047C11 ::~S3047C11(){ note_dtor("S3047C11", this);}
void  S3047C11 ::v41(){vfunc_called(this, "_ZN8S3047C113v41Ev");}
void  S3047C11 ::v42(){vfunc_called(this, "_ZN8S3047C113v42Ev");}
void  S3047C11 ::v43(){vfunc_called(this, "_ZN8S3047C113v43Ev");}
void  S3047C11 ::v44(){vfunc_called(this, "_ZN8S3047C113v44Ev");}
void  S3047C11 ::v45(){vfunc_called(this, "_ZN8S3047C113v45Ev");}
void  S3047C11 ::v46(){vfunc_called(this, "_ZN8S3047C113v46Ev");}
S3047C11 ::S3047C11(){ note_ctor("S3047C11", this);} // tgen

static void Test_S3047C11()
{
  extern Class_Descriptor cd_S3047C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3047C11, buf);
    S3047C11 *dp, &lv = *(dp=new (buf) S3047C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3047C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3047C11)");
    check_base_class_offset(lv, (S3047C12_nt*), 0, "S3047C11");
    test_class_info(&lv, &cd_S3047C11);
    dp->~S3047C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3047C11(Test_S3047C11, "S3047C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3047C11C1Ev();
extern void _ZN8S3047C11D1Ev();
Name_Map name_map_S3047C11[] = {
  NSPAIR(_ZN8S3047C11C1Ev),
  NSPAIR(_ZN8S3047C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3047C12_nt;
extern VTBL_ENTRY _ZTI11S3047C12_nt[];
extern  VTBL_ENTRY _ZTV11S3047C12_nt[];
static Base_Class bases_S3047C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3047C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3047C11[];
extern void _ZN8S3047C11D1Ev();
extern void _ZN8S3047C11D0Ev();
extern void _ZN11S3047C12_nt3v38Ev();
extern void _ZN11S3047C12_nt3v39Ev();
extern void _ZN11S3047C12_nt3v40Ev();
extern void _ZN8S3047C113v41Ev();
extern void _ZN8S3047C113v42Ev();
extern void _ZN8S3047C113v43Ev();
extern void _ZN8S3047C113v44Ev();
extern void _ZN8S3047C113v45Ev();
extern void _ZN8S3047C113v46Ev();
static  VTBL_ENTRY vtc_S3047C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3047C11[0]),
  (VTBL_ENTRY)&_ZN8S3047C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3047C11D0Ev,
  (VTBL_ENTRY)&_ZN11S3047C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S3047C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S3047C12_nt3v40Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v44Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v45Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v46Ev,
};
extern VTBL_ENTRY _ZTI8S3047C11[];
extern  VTBL_ENTRY _ZTV8S3047C11[];
Class_Descriptor cd_S3047C11 = {  "S3047C11", // class name
  bases_S3047C11, 1,
  &(vtc_S3047C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3047C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3047C11),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S3047C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3047C15_nt  {
  ::S3047C16_nt s3047c15f0;
  void  mf3047c15(); // _ZN11S3047C15_nt9mf3047c15Ev
};
//SIG(-1 S3047C15_nt) C1{ m FC2{ Fl[4]}}


void  S3047C15_nt ::mf3047c15(){}

//skip512 S3047C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3047C10  : S3047C11 {
  ::S2215C29_nt s3047c10f0;
  ::S3047C15_nt s3047c10f1;
  char s3047c10f2;
  virtual  ~S3047C10(); // _ZN8S3047C10D1Ev
  virtual void  v47(); // _ZN8S3047C103v47Ev
  virtual void  v48(); // _ZN8S3047C103v48Ev
  virtual void  v49(); // _ZN8S3047C103v49Ev
  S3047C10(); // tgen
};
//SIG(-1 S3047C10) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10 v11 v12} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ Fl[4]}} Fc}


 S3047C10 ::~S3047C10(){ note_dtor("S3047C10", this);}
void  S3047C10 ::v47(){vfunc_called(this, "_ZN8S3047C103v47Ev");}
void  S3047C10 ::v48(){vfunc_called(this, "_ZN8S3047C103v48Ev");}
void  S3047C10 ::v49(){vfunc_called(this, "_ZN8S3047C103v49Ev");}
S3047C10 ::S3047C10(){ note_ctor("S3047C10", this);} // tgen

static void Test_S3047C10()
{
  extern Class_Descriptor cd_S3047C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S3047C10, buf);
    S3047C10 *dp, &lv = *(dp=new (buf) S3047C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S3047C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3047C10)");
    check_base_class_offset(lv, (S3047C12_nt*)(S3047C11*), 0, "S3047C10");
    check_base_class_offset(lv, (S3047C11*), 0, "S3047C10");
    check_field_offset(lv, s3047c10f0, ABISELECT(8,4), "S3047C10.s3047c10f0");
    check_field_offset(lv, s3047c10f1, ABISELECT(32,20), "S3047C10.s3047c10f1");
    check_field_offset(lv, s3047c10f2, ABISELECT(64,36), "S3047C10.s3047c10f2");
    test_class_info(&lv, &cd_S3047C10);
    dp->~S3047C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3047C10(Test_S3047C10, "S3047C10", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S3047C10C1Ev();
extern void _ZN8S3047C10D1Ev();
Name_Map name_map_S3047C10[] = {
  NSPAIR(_ZN8S3047C10C1Ev),
  NSPAIR(_ZN8S3047C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3047C12_nt;
extern VTBL_ENTRY _ZTI11S3047C12_nt[];
extern  VTBL_ENTRY _ZTV11S3047C12_nt[];
extern Class_Descriptor cd_S3047C11;
extern VTBL_ENTRY _ZTI8S3047C11[];
extern  VTBL_ENTRY _ZTV8S3047C11[];
static Base_Class bases_S3047C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3047C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3047C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S3047C10[];
extern void _ZN8S3047C10D1Ev();
extern void _ZN8S3047C10D0Ev();
extern void _ZN11S3047C12_nt3v38Ev();
extern void _ZN11S3047C12_nt3v39Ev();
extern void _ZN11S3047C12_nt3v40Ev();
extern void _ZN8S3047C113v41Ev();
extern void _ZN8S3047C113v42Ev();
extern void _ZN8S3047C113v43Ev();
extern void _ZN8S3047C113v44Ev();
extern void _ZN8S3047C113v45Ev();
extern void _ZN8S3047C113v46Ev();
extern void _ZN8S3047C103v47Ev();
extern void _ZN8S3047C103v48Ev();
extern void _ZN8S3047C103v49Ev();
static  VTBL_ENTRY vtc_S3047C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3047C10[0]),
  (VTBL_ENTRY)&_ZN8S3047C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3047C10D0Ev,
  (VTBL_ENTRY)&_ZN11S3047C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S3047C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S3047C12_nt3v40Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v44Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v45Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v46Ev,
  (VTBL_ENTRY)&_ZN8S3047C103v47Ev,
  (VTBL_ENTRY)&_ZN8S3047C103v48Ev,
  (VTBL_ENTRY)&_ZN8S3047C103v49Ev,
};
extern VTBL_ENTRY _ZTI8S3047C10[];
extern  VTBL_ENTRY _ZTV8S3047C10[];
Class_Descriptor cd_S3047C10 = {  "S3047C10", // class name
  bases_S3047C10, 2,
  &(vtc_S3047C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S3047C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3047C10),16, //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  S3047C17_nt  {
  virtual  ~S3047C17_nt(); // _ZN11S3047C17_ntD1Ev
  virtual void  v50(); // _ZN11S3047C17_nt3v50Ev
  S3047C17_nt(); // tgen
};
//SIG(-1 S3047C17_nt) C1{ vd v1}


 S3047C17_nt ::~S3047C17_nt(){ note_dtor("S3047C17_nt", this);}
void  S3047C17_nt ::v50(){vfunc_called(this, "_ZN11S3047C17_nt3v50Ev");}
S3047C17_nt ::S3047C17_nt(){ note_ctor("S3047C17_nt", this);} // tgen

//skip512 S3047C17_nt

#else // __cplusplus

extern void _ZN11S3047C17_ntC1Ev();
extern void _ZN11S3047C17_ntD1Ev();
Name_Map name_map_S3047C17_nt[] = {
  NSPAIR(_ZN11S3047C17_ntC1Ev),
  NSPAIR(_ZN11S3047C17_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3047C17_nt[];
extern void _ZN11S3047C17_ntD1Ev();
extern void _ZN11S3047C17_ntD0Ev();
extern void _ZN11S3047C17_nt3v50Ev();
static  VTBL_ENTRY vtc_S3047C17_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3047C17_nt[0]),
  (VTBL_ENTRY)&_ZN11S3047C17_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3047C17_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3047C17_nt3v50Ev,
};
extern VTBL_ENTRY _ZTI11S3047C17_nt[];
VTBL_ENTRY *P__ZTI11S3047C17_nt = _ZTI11S3047C17_nt; 
extern  VTBL_ENTRY _ZTV11S3047C17_nt[];
Class_Descriptor cd_S3047C17_nt = {  "S3047C17_nt", // class name
  0,0,//no base classes
  &(vtc_S3047C17_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S3047C17_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3047C17_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  S3047C21_nt  {
  virtual  ~S3047C21_nt(); // _ZN11S3047C21_ntD1Ev
  virtual void  v53(); // _ZN11S3047C21_nt3v53Ev
  virtual void  v54(); // _ZN11S3047C21_nt3v54Ev
  S3047C21_nt(); // tgen
};
//SIG(-1 S3047C21_nt) C1{ vd v1 v2}


 S3047C21_nt ::~S3047C21_nt(){ note_dtor("S3047C21_nt", this);}
void  S3047C21_nt ::v53(){vfunc_called(this, "_ZN11S3047C21_nt3v53Ev");}
void  S3047C21_nt ::v54(){vfunc_called(this, "_ZN11S3047C21_nt3v54Ev");}
S3047C21_nt ::S3047C21_nt(){ note_ctor("S3047C21_nt", this);} // tgen

//skip512 S3047C21_nt

#else // __cplusplus

extern void _ZN11S3047C21_ntC1Ev();
extern void _ZN11S3047C21_ntD1Ev();
Name_Map name_map_S3047C21_nt[] = {
  NSPAIR(_ZN11S3047C21_ntC1Ev),
  NSPAIR(_ZN11S3047C21_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3047C21_nt[];
extern void _ZN11S3047C21_ntD1Ev();
extern void _ZN11S3047C21_ntD0Ev();
extern void _ZN11S3047C21_nt3v53Ev();
extern void _ZN11S3047C21_nt3v54Ev();
static  VTBL_ENTRY vtc_S3047C21_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3047C21_nt[0]),
  (VTBL_ENTRY)&_ZN11S3047C21_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3047C21_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3047C21_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S3047C21_nt3v54Ev,
};
extern VTBL_ENTRY _ZTI11S3047C21_nt[];
VTBL_ENTRY *P__ZTI11S3047C21_nt = _ZTI11S3047C21_nt; 
extern  VTBL_ENTRY _ZTV11S3047C21_nt[];
Class_Descriptor cd_S3047C21_nt = {  "S3047C21_nt", // class name
  0,0,//no base classes
  &(vtc_S3047C21_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S3047C21_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3047C21_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  S3047C22_nt  : S3047C21_nt {
  __tsi64 s3047c22f0;
  virtual  ~S3047C22_nt(); // _ZN11S3047C22_ntD1Ev
  virtual void  v55(); // _ZN11S3047C22_nt3v55Ev
  virtual void  v56(); // _ZN11S3047C22_nt3v56Ev
  S3047C22_nt(); // tgen
};
//SIG(-1 S3047C22_nt) C1{ BC2{ vd v3 v4} vd v1 v2 FL}


 S3047C22_nt ::~S3047C22_nt(){ note_dtor("S3047C22_nt", this);}
void  S3047C22_nt ::v55(){vfunc_called(this, "_ZN11S3047C22_nt3v55Ev");}
void  S3047C22_nt ::v56(){vfunc_called(this, "_ZN11S3047C22_nt3v56Ev");}
S3047C22_nt ::S3047C22_nt(){ note_ctor("S3047C22_nt", this);} // tgen

//skip512 S3047C22_nt

#else // __cplusplus

extern void _ZN11S3047C22_ntC1Ev();
extern void _ZN11S3047C22_ntD1Ev();
Name_Map name_map_S3047C22_nt[] = {
  NSPAIR(_ZN11S3047C22_ntC1Ev),
  NSPAIR(_ZN11S3047C22_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3047C21_nt;
extern VTBL_ENTRY _ZTI11S3047C21_nt[];
extern  VTBL_ENTRY _ZTV11S3047C21_nt[];
static Base_Class bases_S3047C22_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3047C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S3047C22_nt[];
extern void _ZN11S3047C22_ntD1Ev();
extern void _ZN11S3047C22_ntD0Ev();
extern void _ZN11S3047C21_nt3v53Ev();
extern void _ZN11S3047C21_nt3v54Ev();
extern void _ZN11S3047C22_nt3v55Ev();
extern void _ZN11S3047C22_nt3v56Ev();
static  VTBL_ENTRY vtc_S3047C22_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3047C22_nt[0]),
  (VTBL_ENTRY)&_ZN11S3047C22_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3047C22_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3047C21_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S3047C21_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S3047C22_nt3v55Ev,
  (VTBL_ENTRY)&_ZN11S3047C22_nt3v56Ev,
};
extern VTBL_ENTRY _ZTI11S3047C22_nt[];
VTBL_ENTRY *P__ZTI11S3047C22_nt = _ZTI11S3047C22_nt; 
extern  VTBL_ENTRY _ZTV11S3047C22_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3047C24_nt  {
  void *s3047c24f0;
  int s3047c24f1[2];
  ::S2215C30 s3047c24f2;
  void  mf3047c24(); // _ZN11S3047C24_nt9mf3047c24Ev
};
//SIG(-1 S3047C24_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S3047C24_nt ::mf3047c24(){}

//skip512 S3047C24_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S3047C24_nt[];
VTBL_ENTRY *P__ZTI11S3047C24_nt = _ZTI11S3047C24_nt; 
Class_Descriptor cd_S3047C24_nt = {  "S3047C24_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI11S3047C24_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  S3047C23_nt  : S3047C24_nt , S3047C21_nt {
  virtual  ~S3047C23_nt(); // _ZN11S3047C23_ntD1Ev
  virtual void  v57(); // _ZN11S3047C23_nt3v57Ev
  virtual void  v58(); // _ZN11S3047C23_nt3v58Ev
  S3047C23_nt(); // tgen
};
//SIG(-1 S3047C23_nt) C1{ BC2{ m Fp Fi[2] FC3{ m}} BC4{ vd v3 v4} vd v1 v2}


 S3047C23_nt ::~S3047C23_nt(){ note_dtor("S3047C23_nt", this);}
void  S3047C23_nt ::v57(){vfunc_called(this, "_ZN11S3047C23_nt3v57Ev");}
void  S3047C23_nt ::v58(){vfunc_called(this, "_ZN11S3047C23_nt3v58Ev");}
S3047C23_nt ::S3047C23_nt(){ note_ctor("S3047C23_nt", this);} // tgen

//skip512 S3047C23_nt

#else // __cplusplus

extern void _ZN11S3047C23_ntC1Ev();
extern void _ZN11S3047C23_ntD1Ev();
Name_Map name_map_S3047C23_nt[] = {
  NSPAIR(_ZN11S3047C23_ntC1Ev),
  NSPAIR(_ZN11S3047C23_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3047C24_nt;
extern VTBL_ENTRY _ZTI11S3047C24_nt[];
extern Class_Descriptor cd_S3047C21_nt;
extern VTBL_ENTRY _ZTI11S3047C21_nt[];
extern  VTBL_ENTRY _ZTV11S3047C21_nt[];
static Base_Class bases_S3047C23_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3047C24_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_S3047C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S3047C23_nt[];
extern void _ZN11S3047C23_ntD1Ev();
extern void _ZN11S3047C23_ntD0Ev();
extern void _ZN11S3047C21_nt3v53Ev();
extern void _ZN11S3047C21_nt3v54Ev();
extern void _ZN11S3047C23_nt3v57Ev();
extern void _ZN11S3047C23_nt3v58Ev();
static  VTBL_ENTRY vtc_S3047C23_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3047C23_nt[0]),
  (VTBL_ENTRY)&_ZN11S3047C23_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3047C23_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3047C21_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S3047C21_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S3047C23_nt3v57Ev,
  (VTBL_ENTRY)&_ZN11S3047C23_nt3v58Ev,
};
extern VTBL_ENTRY _ZTI11S3047C23_nt[];
VTBL_ENTRY *P__ZTI11S3047C23_nt = _ZTI11S3047C23_nt; 
extern  VTBL_ENTRY _ZTV11S3047C23_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3047C29_nt  {
  short s3047c29f0[6];
  int s3047c29f1[2];
  char s3047c29f2;
  short s3047c29f3;
  void  mf3047c29(); // _ZN11S3047C29_nt9mf3047c29Ev
};
//SIG(-1 S3047C29_nt) C1{ m Fs[6] Fi[2] Fc Fs}


void  S3047C29_nt ::mf3047c29(){}

//skip512 S3047C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3047C28_nt  {
  ::S3047C29_nt s3047c28f0;
  void  mf3047c28(); // _ZN11S3047C28_nt9mf3047c28Ev
  virtual  ~S3047C28_nt(); // _ZN11S3047C28_ntD1Ev
  S3047C28_nt(); // tgen
};
//SIG(-1 S3047C28_nt) C1{ vd m FC2{ m Fs[6] Fi[2] Fc Fs}}


void  S3047C28_nt ::mf3047c28(){}
 S3047C28_nt ::~S3047C28_nt(){ note_dtor("S3047C28_nt", this);}
S3047C28_nt ::S3047C28_nt(){ note_ctor("S3047C28_nt", this);} // tgen

//skip512 S3047C28_nt

#else // __cplusplus

extern void _ZN11S3047C28_ntC1Ev();
extern void _ZN11S3047C28_ntD1Ev();
Name_Map name_map_S3047C28_nt[] = {
  NSPAIR(_ZN11S3047C28_ntC1Ev),
  NSPAIR(_ZN11S3047C28_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3047C28_nt[];
extern void _ZN11S3047C28_ntD1Ev();
extern void _ZN11S3047C28_ntD0Ev();
static  VTBL_ENTRY vtc_S3047C28_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3047C28_nt[0]),
  (VTBL_ENTRY)&_ZN11S3047C28_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3047C28_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S3047C28_nt[];
VTBL_ENTRY *P__ZTI11S3047C28_nt = _ZTI11S3047C28_nt; 
extern  VTBL_ENTRY _ZTV11S3047C28_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3047C20_nt  : S3047C21_nt {
  int s3047c20f0[5];
  ::S3047C22_nt s3047c20f1;
  ::S3047C23_nt s3047c20f2;
  ::S2215C20_nt s3047c20f3;
  ::S3047C28_nt s3047c20f4;
  ::S3047C28_nt s3047c20f5;
  virtual  ~S3047C20_nt(); // _ZN11S3047C20_ntD1Ev
  virtual void  v51(); // _ZN11S3047C20_nt3v51Ev
  virtual void  v52(); // _ZN11S3047C20_nt3v52Ev
  S3047C20_nt(); // tgen
};
//SIG(-1 S3047C20_nt) C1{ BC2{ vd v3 v4} vd v1 v2 Fi[5] FC3{ BC2 vd v5 v6 FL} FC4{ BC5{ m Fp Fi[2] FC6{ m}} BC2 vd v7 v8} FC7{ m Fp Fi FC8{ m}} FC9{ vd m FC10{ m Fs[6] Fi[2] Fc Fs}} FC9}


 S3047C20_nt ::~S3047C20_nt(){ note_dtor("S3047C20_nt", this);}
void  S3047C20_nt ::v51(){vfunc_called(this, "_ZN11S3047C20_nt3v51Ev");}
void  S3047C20_nt ::v52(){vfunc_called(this, "_ZN11S3047C20_nt3v52Ev");}
S3047C20_nt ::S3047C20_nt(){ note_ctor("S3047C20_nt", this);} // tgen

//skip512 S3047C20_nt

#else // __cplusplus

extern void _ZN11S3047C20_ntC1Ev();
extern void _ZN11S3047C20_ntD1Ev();
Name_Map name_map_S3047C20_nt[] = {
  NSPAIR(_ZN11S3047C20_ntC1Ev),
  NSPAIR(_ZN11S3047C20_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3047C21_nt;
extern VTBL_ENTRY _ZTI11S3047C21_nt[];
extern  VTBL_ENTRY _ZTV11S3047C21_nt[];
static Base_Class bases_S3047C20_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3047C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S3047C20_nt[];
extern void _ZN11S3047C20_ntD1Ev();
extern void _ZN11S3047C20_ntD0Ev();
extern void _ZN11S3047C21_nt3v53Ev();
extern void _ZN11S3047C21_nt3v54Ev();
extern void _ZN11S3047C20_nt3v51Ev();
extern void _ZN11S3047C20_nt3v52Ev();
static  VTBL_ENTRY vtc_S3047C20_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3047C20_nt[0]),
  (VTBL_ENTRY)&_ZN11S3047C20_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3047C20_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3047C21_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S3047C21_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S3047C20_nt3v51Ev,
  (VTBL_ENTRY)&_ZN11S3047C20_nt3v52Ev,
};
extern VTBL_ENTRY _ZTI11S3047C20_nt[];
VTBL_ENTRY *P__ZTI11S3047C20_nt = _ZTI11S3047C20_nt; 
extern  VTBL_ENTRY _ZTV11S3047C20_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3047C18  : S20176C3_nt {
  ::S3047C20_nt s3047c18f0;
};
//SIG(-1 S3047C18) C1{ BC2{} FC3{ BC4{ vd v3 v4} vd v1 v2 Fi[5] FC5{ BC4 vd v5 v6 FL} FC6{ BC7{ m Fp Fi[2] FC8{ m}} BC4 vd v7 v8} FC9{ m Fp Fi FC10{ m}} FC11{ vd m FC12{ m Fs[6] Fi[2] Fc Fs}} FC11}}



static void Test_S3047C18()
{
  extern Class_Descriptor cd_S3047C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,32)];
    init_test(&cd_S3047C18, buf);
    S3047C18 &lv = *(new (buf) S3047C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,124), "sizeof(S3047C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3047C18)");
    check_base_class_offset(lv, (S20176C3_nt*), 0, "S3047C18");
    check_field_offset(lv, s3047c18f0, 0, "S3047C18.s3047c18f0");
    test_class_info(&lv, &cd_S3047C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3047C18(Test_S3047C18, "S3047C18", ABISELECT(160,124));

#else // __cplusplus

extern Class_Descriptor cd_S20176C3_nt;
extern VTBL_ENTRY _ZTI11S20176C3_nt[];
static Base_Class bases_S3047C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3047C18 = {  "S3047C18", // class name
  bases_S3047C18, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,124), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3047C1  : S3047C2 , S3047C10 , S3047C17_nt {
  ::S3047C18 s3047c1f0;
  virtual  ~S3047C1(); // _ZN7S3047C1D1Ev
  virtual void  v1(); // _ZN7S3047C12v1Ev
  virtual void  v2(); // _ZN7S3047C12v2Ev
  virtual void  v3(); // _ZN7S3047C12v3Ev
  virtual void  v4(); // _ZN7S3047C12v4Ev
  virtual void  v5(); // _ZN7S3047C12v5Ev
  virtual void  v6(); // _ZN7S3047C12v6Ev
  virtual void  v7(); // _ZN7S3047C12v7Ev
  virtual void  v8(); // _ZN7S3047C12v8Ev
  virtual void  v9(); // _ZN7S3047C12v9Ev
  virtual void  v10(); // _ZN7S3047C13v10Ev
  virtual void  v11(); // _ZN7S3047C13v11Ev
  virtual void  v12(); // _ZN7S3047C13v12Ev
  virtual void  v13(); // _ZN7S3047C13v13Ev
  virtual void  v14(); // _ZN7S3047C13v14Ev
  virtual void  v15(); // _ZN7S3047C13v15Ev
  virtual void  v16(); // _ZN7S3047C13v16Ev
  virtual void  v17(); // _ZN7S3047C13v17Ev
  S3047C1(); // tgen
};
//SIG(1 S3047C1) C1{ BC2{ BC3{ vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}}} vd v33 v34 v35 v36 v37 FC7{ m Fp Fi[2] FC8{ m}}} BC9{ BC10{ BC11{ vd v38 v39 v40} vd v41 v42 v43 v44 v45 v46} vd v47 v48 v49 FC12{ m Fp Fi[2] FC8} FC13{ m FC14{ Fl[4]}} Fc} BC15{ vd v50} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 FC16{ BC17{} FC18{ BC19{ vd v53 v54} vd v51 v52 Fi[5] FC20{ BC19 vd v55 v56 FL} FC21{ BC22{ m Fp Fi[2] FC8} BC19 vd v57 v58} FC23{ m Fp Fi FC24{ m}} FC25{ vd m FC26{ m Fs[6] Fi[2] Fc Fs}} FC25}}}


 S3047C1 ::~S3047C1(){ note_dtor("S3047C1", this);}
void  S3047C1 ::v1(){vfunc_called(this, "_ZN7S3047C12v1Ev");}
void  S3047C1 ::v2(){vfunc_called(this, "_ZN7S3047C12v2Ev");}
void  S3047C1 ::v3(){vfunc_called(this, "_ZN7S3047C12v3Ev");}
void  S3047C1 ::v4(){vfunc_called(this, "_ZN7S3047C12v4Ev");}
void  S3047C1 ::v5(){vfunc_called(this, "_ZN7S3047C12v5Ev");}
void  S3047C1 ::v6(){vfunc_called(this, "_ZN7S3047C12v6Ev");}
void  S3047C1 ::v7(){vfunc_called(this, "_ZN7S3047C12v7Ev");}
void  S3047C1 ::v8(){vfunc_called(this, "_ZN7S3047C12v8Ev");}
void  S3047C1 ::v9(){vfunc_called(this, "_ZN7S3047C12v9Ev");}
void  S3047C1 ::v10(){vfunc_called(this, "_ZN7S3047C13v10Ev");}
void  S3047C1 ::v11(){vfunc_called(this, "_ZN7S3047C13v11Ev");}
void  S3047C1 ::v12(){vfunc_called(this, "_ZN7S3047C13v12Ev");}
void  S3047C1 ::v13(){vfunc_called(this, "_ZN7S3047C13v13Ev");}
void  S3047C1 ::v14(){vfunc_called(this, "_ZN7S3047C13v14Ev");}
void  S3047C1 ::v15(){vfunc_called(this, "_ZN7S3047C13v15Ev");}
void  S3047C1 ::v16(){vfunc_called(this, "_ZN7S3047C13v16Ev");}
void  S3047C1 ::v17(){vfunc_called(this, "_ZN7S3047C13v17Ev");}
S3047C1 ::S3047C1(){ note_ctor("S3047C1", this);} // tgen

static void Test_S3047C1()
{
  extern Class_Descriptor cd_S3047C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,52)];
    init_test(&cd_S3047C1, buf);
    S3047C1 *dp, &lv = *(dp=new (buf) S3047C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,204), "sizeof(S3047C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3047C1)");
    check_base_class_offset(lv, (S3047C3*)(S3047C2*), 0, "S3047C1");
    check_base_class_offset(lv, (S3047C2*), 0, "S3047C1");
    check_base_class_offset(lv, (S3047C12_nt*)(S3047C11*)(S3047C10*), ABISELECT(56,36), "S3047C1");
    check_base_class_offset(lv, (S3047C11*)(S3047C10*), ABISELECT(56,36), "S3047C1");
    check_base_class_offset(lv, (S3047C10*), ABISELECT(56,36), "S3047C1");
    check_base_class_offset(lv, (S3047C17_nt*), ABISELECT(128,76), "S3047C1");
    check_field_offset(lv, s3047c1f0, ABISELECT(136,80), "S3047C1.s3047c1f0");
    test_class_info(&lv, &cd_S3047C1);
    dp->~S3047C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3047C1(Test_S3047C1, "S3047C1", ABISELECT(296,204));

#else // __cplusplus

extern void _ZN7S3047C1C1Ev();
extern void _ZN7S3047C1D1Ev();
Name_Map name_map_S3047C1[] = {
  NSPAIR(_ZN7S3047C1C1Ev),
  NSPAIR(_ZN7S3047C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3047C3;
extern VTBL_ENTRY _ZTI7S3047C3[];
extern  VTBL_ENTRY _ZTV7S3047C3[];
extern Class_Descriptor cd_S3047C2;
extern VTBL_ENTRY _ZTI7S3047C2[];
extern  VTBL_ENTRY _ZTV7S3047C2[];
extern Class_Descriptor cd_S3047C12_nt;
extern VTBL_ENTRY _ZTI11S3047C12_nt[];
extern  VTBL_ENTRY _ZTV11S3047C12_nt[];
extern Class_Descriptor cd_S3047C11;
extern VTBL_ENTRY _ZTI8S3047C11[];
extern  VTBL_ENTRY _ZTV8S3047C11[];
extern Class_Descriptor cd_S3047C10;
extern VTBL_ENTRY _ZTI8S3047C10[];
extern  VTBL_ENTRY _ZTV8S3047C10[];
extern Class_Descriptor cd_S3047C17_nt;
extern VTBL_ENTRY _ZTI11S3047C17_nt[];
extern  VTBL_ENTRY _ZTV11S3047C17_nt[];
static Base_Class bases_S3047C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3047C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3047C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3047C12_nt,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3047C11,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3047C10,    ABISELECT(56,36), //bcp->offset
    41, //bcp->virtual_function_table_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_S3047C17_nt,    ABISELECT(128,76), //bcp->offset
    57, //bcp->virtual_function_table_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 _ZTI7S3047C1[];
extern void _ZN7S3047C1D1Ev();
extern void _ZN7S3047C1D0Ev();
extern void _ZN7S3047C33v18Ev();
extern void _ZN7S3047C33v19Ev();
extern void _ZN7S3047C33v20Ev();
extern void _ZN7S3047C33v21Ev();
extern void _ZN7S3047C33v22Ev();
extern void _ZN7S3047C33v23Ev();
extern void _ZN7S3047C33v24Ev();
extern void _ZN7S3047C33v25Ev();
extern void _ZN7S3047C33v26Ev();
extern void _ZN7S3047C33v27Ev();
extern void _ZN7S3047C33v28Ev();
extern void _ZN7S3047C33v29Ev();
extern void _ZN7S3047C33v30Ev();
extern void _ZN7S3047C33v31Ev();
extern void _ZN7S3047C33v32Ev();
extern void _ZN7S3047C23v33Ev();
extern void _ZN7S3047C23v34Ev();
extern void _ZN7S3047C23v35Ev();
extern void _ZN7S3047C23v36Ev();
extern void _ZN7S3047C23v37Ev();
extern void _ZN7S3047C12v1Ev();
extern void _ZN7S3047C12v2Ev();
extern void _ZN7S3047C12v3Ev();
extern void _ZN7S3047C12v4Ev();
extern void _ZN7S3047C12v5Ev();
extern void _ZN7S3047C12v6Ev();
extern void _ZN7S3047C12v7Ev();
extern void _ZN7S3047C12v8Ev();
extern void _ZN7S3047C12v9Ev();
extern void _ZN7S3047C13v10Ev();
extern void _ZN7S3047C13v11Ev();
extern void _ZN7S3047C13v12Ev();
extern void _ZN7S3047C13v13Ev();
extern void _ZN7S3047C13v14Ev();
extern void _ZN7S3047C13v15Ev();
extern void _ZN7S3047C13v16Ev();
extern void _ZN7S3047C13v17Ev();
extern void ABISELECT(_ZThn56_N7S3047C1D1Ev,_ZThn36_N7S3047C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3047C1D0Ev,_ZThn36_N7S3047C1D0Ev)();
extern void _ZN11S3047C12_nt3v38Ev();
extern void _ZN11S3047C12_nt3v39Ev();
extern void _ZN11S3047C12_nt3v40Ev();
extern void _ZN8S3047C113v41Ev();
extern void _ZN8S3047C113v42Ev();
extern void _ZN8S3047C113v43Ev();
extern void _ZN8S3047C113v44Ev();
extern void _ZN8S3047C113v45Ev();
extern void _ZN8S3047C113v46Ev();
extern void _ZN8S3047C103v47Ev();
extern void _ZN8S3047C103v48Ev();
extern void _ZN8S3047C103v49Ev();
extern void ABISELECT(_ZThn128_N7S3047C1D1Ev,_ZThn76_N7S3047C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S3047C1D0Ev,_ZThn76_N7S3047C1D0Ev)();
extern void _ZN11S3047C17_nt3v50Ev();
static  VTBL_ENTRY vtc_S3047C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3047C1[0]),
  (VTBL_ENTRY)&_ZN7S3047C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3047C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3047C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3047C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3047C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3047C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3047C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3047C23v37Ev,
  (VTBL_ENTRY)&_ZN7S3047C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3047C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3047C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3047C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3047C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3047C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3047C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3047C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3047C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3047C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3047C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3047C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3047C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3047C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3047C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3047C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3047C13v17Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S3047C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3047C1D1Ev,_ZThn36_N7S3047C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3047C1D0Ev,_ZThn36_N7S3047C1D0Ev),
  (VTBL_ENTRY)&_ZN11S3047C12_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S3047C12_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S3047C12_nt3v40Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v44Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v45Ev,
  (VTBL_ENTRY)&_ZN8S3047C113v46Ev,
  (VTBL_ENTRY)&_ZN8S3047C103v47Ev,
  (VTBL_ENTRY)&_ZN8S3047C103v48Ev,
  (VTBL_ENTRY)&_ZN8S3047C103v49Ev,
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI7S3047C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S3047C1D1Ev,_ZThn76_N7S3047C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S3047C1D0Ev,_ZThn76_N7S3047C1D0Ev),
  (VTBL_ENTRY)&_ZN11S3047C17_nt3v50Ev,
};
extern VTBL_ENTRY _ZTI7S3047C1[];
extern  VTBL_ENTRY _ZTV7S3047C1[];
Class_Descriptor cd_S3047C1 = {  "S3047C1", // class name
  bases_S3047C1, 6,
  &(vtc_S3047C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,204), // object size
  NSPAIRA(_ZTI7S3047C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3047C1),62, //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  S3048C3  {
  void *s3048c3f0;
  ::S2215C25 s3048c3f1;
  virtual  ~S3048C3(); // _ZN7S3048C3D1Ev
  virtual void  v18(); // _ZN7S3048C33v18Ev
  virtual void  v19(); // _ZN7S3048C33v19Ev
  virtual void  v20(); // _ZN7S3048C33v20Ev
  virtual void  v21(); // _ZN7S3048C33v21Ev
  virtual void  v22(); // _ZN7S3048C33v22Ev
  virtual void  v23(); // _ZN7S3048C33v23Ev
  virtual void  v24(); // _ZN7S3048C33v24Ev
  virtual void  v25(); // _ZN7S3048C33v25Ev
  virtual void  v26(); // _ZN7S3048C33v26Ev
  virtual void  v27(); // _ZN7S3048C33v27Ev
  virtual void  v28(); // _ZN7S3048C33v28Ev
  virtual void  v29(); // _ZN7S3048C33v29Ev
  virtual void  v30(); // _ZN7S3048C33v30Ev
  virtual void  v31(); // _ZN7S3048C33v31Ev
  virtual void  v32(); // _ZN7S3048C33v32Ev
  S3048C3(); // tgen
};
//SIG(-1 S3048C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}}}


 S3048C3 ::~S3048C3(){ note_dtor("S3048C3", this);}
void  S3048C3 ::v18(){vfunc_called(this, "_ZN7S3048C33v18Ev");}
void  S3048C3 ::v19(){vfunc_called(this, "_ZN7S3048C33v19Ev");}
void  S3048C3 ::v20(){vfunc_called(this, "_ZN7S3048C33v20Ev");}
void  S3048C3 ::v21(){vfunc_called(this, "_ZN7S3048C33v21Ev");}
void  S3048C3 ::v22(){vfunc_called(this, "_ZN7S3048C33v22Ev");}
void  S3048C3 ::v23(){vfunc_called(this, "_ZN7S3048C33v23Ev");}
void  S3048C3 ::v24(){vfunc_called(this, "_ZN7S3048C33v24Ev");}
void  S3048C3 ::v25(){vfunc_called(this, "_ZN7S3048C33v25Ev");}
void  S3048C3 ::v26(){vfunc_called(this, "_ZN7S3048C33v26Ev");}
void  S3048C3 ::v27(){vfunc_called(this, "_ZN7S3048C33v27Ev");}
void  S3048C3 ::v28(){vfunc_called(this, "_ZN7S3048C33v28Ev");}
void  S3048C3 ::v29(){vfunc_called(this, "_ZN7S3048C33v29Ev");}
void  S3048C3 ::v30(){vfunc_called(this, "_ZN7S3048C33v30Ev");}
void  S3048C3 ::v31(){vfunc_called(this, "_ZN7S3048C33v31Ev");}
void  S3048C3 ::v32(){vfunc_called(this, "_ZN7S3048C33v32Ev");}
S3048C3 ::S3048C3(){ note_ctor("S3048C3", this);} // tgen

static void Test_S3048C3()
{
  extern Class_Descriptor cd_S3048C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3048C3, buf);
    S3048C3 *dp, &lv = *(dp=new (buf) S3048C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3048C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3048C3)");
    check_field_offset(lv, s3048c3f0, ABISELECT(8,4), "S3048C3.s3048c3f0");
    check_field_offset(lv, s3048c3f1, ABISELECT(16,8), "S3048C3.s3048c3f1");
    test_class_info(&lv, &cd_S3048C3);
    dp->~S3048C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3048C3(Test_S3048C3, "S3048C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3048C3C1Ev();
extern void _ZN7S3048C3D1Ev();
Name_Map name_map_S3048C3[] = {
  NSPAIR(_ZN7S3048C3C1Ev),
  NSPAIR(_ZN7S3048C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3048C3[];
extern void _ZN7S3048C3D1Ev();
extern void _ZN7S3048C3D0Ev();
extern void _ZN7S3048C33v18Ev();
extern void _ZN7S3048C33v19Ev();
extern void _ZN7S3048C33v20Ev();
extern void _ZN7S3048C33v21Ev();
extern void _ZN7S3048C33v22Ev();
extern void _ZN7S3048C33v23Ev();
extern void _ZN7S3048C33v24Ev();
extern void _ZN7S3048C33v25Ev();
extern void _ZN7S3048C33v26Ev();
extern void _ZN7S3048C33v27Ev();
extern void _ZN7S3048C33v28Ev();
extern void _ZN7S3048C33v29Ev();
extern void _ZN7S3048C33v30Ev();
extern void _ZN7S3048C33v31Ev();
extern void _ZN7S3048C33v32Ev();
static  VTBL_ENTRY vtc_S3048C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3048C3[0]),
  (VTBL_ENTRY)&_ZN7S3048C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3048C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v32Ev,
};
extern VTBL_ENTRY _ZTI7S3048C3[];
extern  VTBL_ENTRY _ZTV7S3048C3[];
Class_Descriptor cd_S3048C3 = {  "S3048C3", // class name
  0,0,//no base classes
  &(vtc_S3048C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3048C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3048C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3048C2  : S3048C3 {
  ::S3047C24_nt s3048c2f0;
  virtual  ~S3048C2(); // _ZN7S3048C2D1Ev
  virtual void  v33(); // _ZN7S3048C23v33Ev
  virtual void  v34(); // _ZN7S3048C23v34Ev
  virtual void  v35(); // _ZN7S3048C23v35Ev
  virtual void  v36(); // _ZN7S3048C23v36Ev
  virtual void  v37(); // _ZN7S3048C23v37Ev
  S3048C2(); // tgen
};
//SIG(-1 S3048C2) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}}} vd v1 v2 v3 v4 v5 FC6{ m Fp Fi[2] FC7{ m}}}


 S3048C2 ::~S3048C2(){ note_dtor("S3048C2", this);}
void  S3048C2 ::v33(){vfunc_called(this, "_ZN7S3048C23v33Ev");}
void  S3048C2 ::v34(){vfunc_called(this, "_ZN7S3048C23v34Ev");}
void  S3048C2 ::v35(){vfunc_called(this, "_ZN7S3048C23v35Ev");}
void  S3048C2 ::v36(){vfunc_called(this, "_ZN7S3048C23v36Ev");}
void  S3048C2 ::v37(){vfunc_called(this, "_ZN7S3048C23v37Ev");}
S3048C2 ::S3048C2(){ note_ctor("S3048C2", this);} // tgen

static void Test_S3048C2()
{
  extern Class_Descriptor cd_S3048C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3048C2, buf);
    S3048C2 *dp, &lv = *(dp=new (buf) S3048C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3048C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3048C2)");
    check_base_class_offset(lv, (S3048C3*), 0, "S3048C2");
    check_field_offset(lv, s3048c2f0, ABISELECT(32,20), "S3048C2.s3048c2f0");
    test_class_info(&lv, &cd_S3048C2);
    dp->~S3048C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3048C2(Test_S3048C2, "S3048C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3048C2C1Ev();
extern void _ZN7S3048C2D1Ev();
Name_Map name_map_S3048C2[] = {
  NSPAIR(_ZN7S3048C2C1Ev),
  NSPAIR(_ZN7S3048C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3048C3;
extern VTBL_ENTRY _ZTI7S3048C3[];
extern  VTBL_ENTRY _ZTV7S3048C3[];
static Base_Class bases_S3048C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3048C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3048C2[];
extern void _ZN7S3048C2D1Ev();
extern void _ZN7S3048C2D0Ev();
extern void _ZN7S3048C33v18Ev();
extern void _ZN7S3048C33v19Ev();
extern void _ZN7S3048C33v20Ev();
extern void _ZN7S3048C33v21Ev();
extern void _ZN7S3048C33v22Ev();
extern void _ZN7S3048C33v23Ev();
extern void _ZN7S3048C33v24Ev();
extern void _ZN7S3048C33v25Ev();
extern void _ZN7S3048C33v26Ev();
extern void _ZN7S3048C33v27Ev();
extern void _ZN7S3048C33v28Ev();
extern void _ZN7S3048C33v29Ev();
extern void _ZN7S3048C33v30Ev();
extern void _ZN7S3048C33v31Ev();
extern void _ZN7S3048C33v32Ev();
extern void _ZN7S3048C23v33Ev();
extern void _ZN7S3048C23v34Ev();
extern void _ZN7S3048C23v35Ev();
extern void _ZN7S3048C23v36Ev();
extern void _ZN7S3048C23v37Ev();
static  VTBL_ENTRY vtc_S3048C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3048C2[0]),
  (VTBL_ENTRY)&_ZN7S3048C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3048C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3048C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3048C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3048C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3048C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3048C23v37Ev,
};
extern VTBL_ENTRY _ZTI7S3048C2[];
extern  VTBL_ENTRY _ZTV7S3048C2[];
Class_Descriptor cd_S3048C2 = {  "S3048C2", // class name
  bases_S3048C2, 1,
  &(vtc_S3048C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3048C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3048C2),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3048C12  {
  virtual  ~S3048C12(); // _ZN8S3048C12D1Ev
  virtual void  v38(); // _ZN8S3048C123v38Ev
  virtual void  v39(); // _ZN8S3048C123v39Ev
  virtual void  v40(); // _ZN8S3048C123v40Ev
  S3048C12(); // tgen
};
//SIG(-1 S3048C12) C1{ vd v1 v2 v3}


 S3048C12 ::~S3048C12(){ note_dtor("S3048C12", this);}
void  S3048C12 ::v38(){vfunc_called(this, "_ZN8S3048C123v38Ev");}
void  S3048C12 ::v39(){vfunc_called(this, "_ZN8S3048C123v39Ev");}
void  S3048C12 ::v40(){vfunc_called(this, "_ZN8S3048C123v40Ev");}
S3048C12 ::S3048C12(){ note_ctor("S3048C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S3048C12C1Ev();
extern void _ZN8S3048C12D1Ev();
Name_Map name_map_S3048C12[] = {
  NSPAIR(_ZN8S3048C12C1Ev),
  NSPAIR(_ZN8S3048C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3048C12[];
extern void _ZN8S3048C12D1Ev();
extern void _ZN8S3048C12D0Ev();
extern void _ZN8S3048C123v38Ev();
extern void _ZN8S3048C123v39Ev();
extern void _ZN8S3048C123v40Ev();
static  VTBL_ENTRY vtc_S3048C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3048C12[0]),
  (VTBL_ENTRY)&_ZN8S3048C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3048C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3048C123v38Ev,
  (VTBL_ENTRY)&_ZN8S3048C123v39Ev,
  (VTBL_ENTRY)&_ZN8S3048C123v40Ev,
};
extern VTBL_ENTRY _ZTI8S3048C12[];
extern  VTBL_ENTRY _ZTV8S3048C12[];
Class_Descriptor cd_S3048C12 = {  "S3048C12", // class name
  0,0,//no base classes
  &(vtc_S3048C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3048C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3048C12),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  S3048C11  : S3048C12 {
  virtual  ~S3048C11(); // _ZN8S3048C11D1Ev
  virtual void  v41(); // _ZN8S3048C113v41Ev
  virtual void  v42(); // _ZN8S3048C113v42Ev
  virtual void  v43(); // _ZN8S3048C113v43Ev
  virtual void  v44(); // _ZN8S3048C113v44Ev
  virtual void  v45(); // _ZN8S3048C113v45Ev
  virtual void  v46(); // _ZN8S3048C113v46Ev
  S3048C11(); // tgen
};
//SIG(-1 S3048C11) C1{ BC2{ vd v7 v8 v9} vd v1 v2 v3 v4 v5 v6}


 S3048C11 ::~S3048C11(){ note_dtor("S3048C11", this);}
void  S3048C11 ::v41(){vfunc_called(this, "_ZN8S3048C113v41Ev");}
void  S3048C11 ::v42(){vfunc_called(this, "_ZN8S3048C113v42Ev");}
void  S3048C11 ::v43(){vfunc_called(this, "_ZN8S3048C113v43Ev");}
void  S3048C11 ::v44(){vfunc_called(this, "_ZN8S3048C113v44Ev");}
void  S3048C11 ::v45(){vfunc_called(this, "_ZN8S3048C113v45Ev");}
void  S3048C11 ::v46(){vfunc_called(this, "_ZN8S3048C113v46Ev");}
S3048C11 ::S3048C11(){ note_ctor("S3048C11", this);} // tgen

static void Test_S3048C11()
{
  extern Class_Descriptor cd_S3048C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3048C11, buf);
    S3048C11 *dp, &lv = *(dp=new (buf) S3048C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3048C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3048C11)");
    check_base_class_offset(lv, (S3048C12*), 0, "S3048C11");
    test_class_info(&lv, &cd_S3048C11);
    dp->~S3048C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3048C11(Test_S3048C11, "S3048C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3048C11C1Ev();
extern void _ZN8S3048C11D1Ev();
Name_Map name_map_S3048C11[] = {
  NSPAIR(_ZN8S3048C11C1Ev),
  NSPAIR(_ZN8S3048C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3048C12;
extern VTBL_ENTRY _ZTI8S3048C12[];
extern  VTBL_ENTRY _ZTV8S3048C12[];
static Base_Class bases_S3048C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3048C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3048C11[];
extern void _ZN8S3048C11D1Ev();
extern void _ZN8S3048C11D0Ev();
extern void _ZN8S3048C123v38Ev();
extern void _ZN8S3048C123v39Ev();
extern void _ZN8S3048C123v40Ev();
extern void _ZN8S3048C113v41Ev();
extern void _ZN8S3048C113v42Ev();
extern void _ZN8S3048C113v43Ev();
extern void _ZN8S3048C113v44Ev();
extern void _ZN8S3048C113v45Ev();
extern void _ZN8S3048C113v46Ev();
static  VTBL_ENTRY vtc_S3048C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3048C11[0]),
  (VTBL_ENTRY)&_ZN8S3048C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3048C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3048C123v38Ev,
  (VTBL_ENTRY)&_ZN8S3048C123v39Ev,
  (VTBL_ENTRY)&_ZN8S3048C123v40Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v44Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v45Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v46Ev,
};
extern VTBL_ENTRY _ZTI8S3048C11[];
extern  VTBL_ENTRY _ZTV8S3048C11[];
Class_Descriptor cd_S3048C11 = {  "S3048C11", // class name
  bases_S3048C11, 1,
  &(vtc_S3048C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3048C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3048C11),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S3048C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3048C15_nt  {
  ::S3048C16_nt s3048c15f0;
  void  mf3048c15(); // _ZN11S3048C15_nt9mf3048c15Ev
};
//SIG(-1 S3048C15_nt) C1{ m FC2{ FL[4]}}


void  S3048C15_nt ::mf3048c15(){}

//skip512 S3048C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3048C10  : S3048C11 {
  ::S2215C37 s3048c10f0;
  ::S3048C15_nt s3048c10f1;
  char s3048c10f2;
  virtual  ~S3048C10(); // _ZN8S3048C10D1Ev
  virtual void  v47(); // _ZN8S3048C103v47Ev
  virtual void  v48(); // _ZN8S3048C103v48Ev
  virtual void  v49(); // _ZN8S3048C103v49Ev
  S3048C10(); // tgen
};
//SIG(-1 S3048C10) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10 v11 v12} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ FL[4]}} Fc}


 S3048C10 ::~S3048C10(){ note_dtor("S3048C10", this);}
void  S3048C10 ::v47(){vfunc_called(this, "_ZN8S3048C103v47Ev");}
void  S3048C10 ::v48(){vfunc_called(this, "_ZN8S3048C103v48Ev");}
void  S3048C10 ::v49(){vfunc_called(this, "_ZN8S3048C103v49Ev");}
S3048C10 ::S3048C10(){ note_ctor("S3048C10", this);} // tgen

static void Test_S3048C10()
{
  extern Class_Descriptor cd_S3048C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S3048C10, buf);
    S3048C10 *dp, &lv = *(dp=new (buf) S3048C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S3048C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3048C10)");
    check_base_class_offset(lv, (S3048C12*)(S3048C11*), 0, "S3048C10");
    check_base_class_offset(lv, (S3048C11*), 0, "S3048C10");
    check_field_offset(lv, s3048c10f0, ABISELECT(8,4), "S3048C10.s3048c10f0");
    check_field_offset(lv, s3048c10f1, ABISELECT(32,20), "S3048C10.s3048c10f1");
    check_field_offset(lv, s3048c10f2, ABISELECT(64,52), "S3048C10.s3048c10f2");
    test_class_info(&lv, &cd_S3048C10);
    dp->~S3048C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3048C10(Test_S3048C10, "S3048C10", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S3048C10C1Ev();
extern void _ZN8S3048C10D1Ev();
Name_Map name_map_S3048C10[] = {
  NSPAIR(_ZN8S3048C10C1Ev),
  NSPAIR(_ZN8S3048C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3048C12;
extern VTBL_ENTRY _ZTI8S3048C12[];
extern  VTBL_ENTRY _ZTV8S3048C12[];
extern Class_Descriptor cd_S3048C11;
extern VTBL_ENTRY _ZTI8S3048C11[];
extern  VTBL_ENTRY _ZTV8S3048C11[];
static Base_Class bases_S3048C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3048C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3048C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S3048C10[];
extern void _ZN8S3048C10D1Ev();
extern void _ZN8S3048C10D0Ev();
extern void _ZN8S3048C123v38Ev();
extern void _ZN8S3048C123v39Ev();
extern void _ZN8S3048C123v40Ev();
extern void _ZN8S3048C113v41Ev();
extern void _ZN8S3048C113v42Ev();
extern void _ZN8S3048C113v43Ev();
extern void _ZN8S3048C113v44Ev();
extern void _ZN8S3048C113v45Ev();
extern void _ZN8S3048C113v46Ev();
extern void _ZN8S3048C103v47Ev();
extern void _ZN8S3048C103v48Ev();
extern void _ZN8S3048C103v49Ev();
static  VTBL_ENTRY vtc_S3048C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3048C10[0]),
  (VTBL_ENTRY)&_ZN8S3048C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3048C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3048C123v38Ev,
  (VTBL_ENTRY)&_ZN8S3048C123v39Ev,
  (VTBL_ENTRY)&_ZN8S3048C123v40Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v44Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v45Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v46Ev,
  (VTBL_ENTRY)&_ZN8S3048C103v47Ev,
  (VTBL_ENTRY)&_ZN8S3048C103v48Ev,
  (VTBL_ENTRY)&_ZN8S3048C103v49Ev,
};
extern VTBL_ENTRY _ZTI8S3048C10[];
extern  VTBL_ENTRY _ZTV8S3048C10[];
Class_Descriptor cd_S3048C10 = {  "S3048C10", // class name
  bases_S3048C10, 2,
  &(vtc_S3048C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S3048C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3048C10),16, //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  S3048C17  {
  virtual  ~S3048C17(); // _ZN8S3048C17D1Ev
  virtual void  v50(); // _ZN8S3048C173v50Ev
  S3048C17(); // tgen
};
//SIG(-1 S3048C17) C1{ vd v1}


 S3048C17 ::~S3048C17(){ note_dtor("S3048C17", this);}
void  S3048C17 ::v50(){vfunc_called(this, "_ZN8S3048C173v50Ev");}
S3048C17 ::S3048C17(){ note_ctor("S3048C17", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S3048C17C1Ev();
extern void _ZN8S3048C17D1Ev();
Name_Map name_map_S3048C17[] = {
  NSPAIR(_ZN8S3048C17C1Ev),
  NSPAIR(_ZN8S3048C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3048C17[];
extern void _ZN8S3048C17D1Ev();
extern void _ZN8S3048C17D0Ev();
extern void _ZN8S3048C173v50Ev();
static  VTBL_ENTRY vtc_S3048C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3048C17[0]),
  (VTBL_ENTRY)&_ZN8S3048C17D1Ev,
  (VTBL_ENTRY)&_ZN8S3048C17D0Ev,
  (VTBL_ENTRY)&_ZN8S3048C173v50Ev,
};
extern VTBL_ENTRY _ZTI8S3048C17[];
extern  VTBL_ENTRY _ZTV8S3048C17[];
Class_Descriptor cd_S3048C17 = {  "S3048C17", // class name
  0,0,//no base classes
  &(vtc_S3048C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3048C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3048C17),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  S3048C1  : S3048C2 , S3048C10 , S3048C17 {
  ::S3047C18 s3048c1f0;
  virtual  ~S3048C1(); // _ZN7S3048C1D1Ev
  virtual void  v1(); // _ZN7S3048C12v1Ev
  virtual void  v2(); // _ZN7S3048C12v2Ev
  virtual void  v3(); // _ZN7S3048C12v3Ev
  virtual void  v4(); // _ZN7S3048C12v4Ev
  virtual void  v5(); // _ZN7S3048C12v5Ev
  virtual void  v6(); // _ZN7S3048C12v6Ev
  virtual void  v7(); // _ZN7S3048C12v7Ev
  virtual void  v8(); // _ZN7S3048C12v8Ev
  virtual void  v9(); // _ZN7S3048C12v9Ev
  virtual void  v10(); // _ZN7S3048C13v10Ev
  virtual void  v11(); // _ZN7S3048C13v11Ev
  virtual void  v12(); // _ZN7S3048C13v12Ev
  virtual void  v13(); // _ZN7S3048C13v13Ev
  virtual void  v14(); // _ZN7S3048C13v14Ev
  virtual void  v15(); // _ZN7S3048C13v15Ev
  virtual void  v16(); // _ZN7S3048C13v16Ev
  virtual void  v17(); // _ZN7S3048C13v17Ev
  S3048C1(); // tgen
};
//SIG(1 S3048C1) C1{ BC2{ BC3{ vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}}} vd v33 v34 v35 v36 v37 FC7{ m Fp Fi[2] FC8{ m}}} BC9{ BC10{ BC11{ vd v38 v39 v40} vd v41 v42 v43 v44 v45 v46} vd v47 v48 v49 FC12{ m Fp Fi[2] FC8} FC13{ m FC14{ FL[4]}} Fc} BC15{ vd v50} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 FC16{ BC17{} FC18{ BC19{ vd v53 v54} vd v51 v52 Fi[5] FC20{ BC19 vd v55 v56 FL} FC21{ BC7 BC19 vd v57 v58} FC22{ m Fp Fi FC23{ m}} FC24{ vd m FC25{ m Fs[6] Fi[2] Fc Fs}} FC24}}}


 S3048C1 ::~S3048C1(){ note_dtor("S3048C1", this);}
void  S3048C1 ::v1(){vfunc_called(this, "_ZN7S3048C12v1Ev");}
void  S3048C1 ::v2(){vfunc_called(this, "_ZN7S3048C12v2Ev");}
void  S3048C1 ::v3(){vfunc_called(this, "_ZN7S3048C12v3Ev");}
void  S3048C1 ::v4(){vfunc_called(this, "_ZN7S3048C12v4Ev");}
void  S3048C1 ::v5(){vfunc_called(this, "_ZN7S3048C12v5Ev");}
void  S3048C1 ::v6(){vfunc_called(this, "_ZN7S3048C12v6Ev");}
void  S3048C1 ::v7(){vfunc_called(this, "_ZN7S3048C12v7Ev");}
void  S3048C1 ::v8(){vfunc_called(this, "_ZN7S3048C12v8Ev");}
void  S3048C1 ::v9(){vfunc_called(this, "_ZN7S3048C12v9Ev");}
void  S3048C1 ::v10(){vfunc_called(this, "_ZN7S3048C13v10Ev");}
void  S3048C1 ::v11(){vfunc_called(this, "_ZN7S3048C13v11Ev");}
void  S3048C1 ::v12(){vfunc_called(this, "_ZN7S3048C13v12Ev");}
void  S3048C1 ::v13(){vfunc_called(this, "_ZN7S3048C13v13Ev");}
void  S3048C1 ::v14(){vfunc_called(this, "_ZN7S3048C13v14Ev");}
void  S3048C1 ::v15(){vfunc_called(this, "_ZN7S3048C13v15Ev");}
void  S3048C1 ::v16(){vfunc_called(this, "_ZN7S3048C13v16Ev");}
void  S3048C1 ::v17(){vfunc_called(this, "_ZN7S3048C13v17Ev");}
S3048C1 ::S3048C1(){ note_ctor("S3048C1", this);} // tgen

static void Test_S3048C1()
{
  extern Class_Descriptor cd_S3048C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S3048C1, buf);
    S3048C1 *dp, &lv = *(dp=new (buf) S3048C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S3048C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3048C1)");
    check_base_class_offset(lv, (S3048C3*)(S3048C2*), 0, "S3048C1");
    check_base_class_offset(lv, (S3048C2*), 0, "S3048C1");
    check_base_class_offset(lv, (S3048C12*)(S3048C11*)(S3048C10*), ABISELECT(56,36), "S3048C1");
    check_base_class_offset(lv, (S3048C11*)(S3048C10*), ABISELECT(56,36), "S3048C1");
    check_base_class_offset(lv, (S3048C10*), ABISELECT(56,36), "S3048C1");
    check_base_class_offset(lv, (S3048C17*), ABISELECT(128,92), "S3048C1");
    check_field_offset(lv, s3048c1f0, ABISELECT(136,96), "S3048C1.s3048c1f0");
    test_class_info(&lv, &cd_S3048C1);
    dp->~S3048C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3048C1(Test_S3048C1, "S3048C1", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN7S3048C1C1Ev();
extern void _ZN7S3048C1D1Ev();
Name_Map name_map_S3048C1[] = {
  NSPAIR(_ZN7S3048C1C1Ev),
  NSPAIR(_ZN7S3048C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3048C3;
extern VTBL_ENTRY _ZTI7S3048C3[];
extern  VTBL_ENTRY _ZTV7S3048C3[];
extern Class_Descriptor cd_S3048C2;
extern VTBL_ENTRY _ZTI7S3048C2[];
extern  VTBL_ENTRY _ZTV7S3048C2[];
extern Class_Descriptor cd_S3048C12;
extern VTBL_ENTRY _ZTI8S3048C12[];
extern  VTBL_ENTRY _ZTV8S3048C12[];
extern Class_Descriptor cd_S3048C11;
extern VTBL_ENTRY _ZTI8S3048C11[];
extern  VTBL_ENTRY _ZTV8S3048C11[];
extern Class_Descriptor cd_S3048C10;
extern VTBL_ENTRY _ZTI8S3048C10[];
extern  VTBL_ENTRY _ZTV8S3048C10[];
extern Class_Descriptor cd_S3048C17;
extern VTBL_ENTRY _ZTI8S3048C17[];
extern  VTBL_ENTRY _ZTV8S3048C17[];
static Base_Class bases_S3048C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3048C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3048C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3048C12,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3048C11,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3048C10,    ABISELECT(56,36), //bcp->offset
    41, //bcp->virtual_function_table_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_S3048C17,    ABISELECT(128,92), //bcp->offset
    57, //bcp->virtual_function_table_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 _ZTI7S3048C1[];
extern void _ZN7S3048C1D1Ev();
extern void _ZN7S3048C1D0Ev();
extern void _ZN7S3048C33v18Ev();
extern void _ZN7S3048C33v19Ev();
extern void _ZN7S3048C33v20Ev();
extern void _ZN7S3048C33v21Ev();
extern void _ZN7S3048C33v22Ev();
extern void _ZN7S3048C33v23Ev();
extern void _ZN7S3048C33v24Ev();
extern void _ZN7S3048C33v25Ev();
extern void _ZN7S3048C33v26Ev();
extern void _ZN7S3048C33v27Ev();
extern void _ZN7S3048C33v28Ev();
extern void _ZN7S3048C33v29Ev();
extern void _ZN7S3048C33v30Ev();
extern void _ZN7S3048C33v31Ev();
extern void _ZN7S3048C33v32Ev();
extern void _ZN7S3048C23v33Ev();
extern void _ZN7S3048C23v34Ev();
extern void _ZN7S3048C23v35Ev();
extern void _ZN7S3048C23v36Ev();
extern void _ZN7S3048C23v37Ev();
extern void _ZN7S3048C12v1Ev();
extern void _ZN7S3048C12v2Ev();
extern void _ZN7S3048C12v3Ev();
extern void _ZN7S3048C12v4Ev();
extern void _ZN7S3048C12v5Ev();
extern void _ZN7S3048C12v6Ev();
extern void _ZN7S3048C12v7Ev();
extern void _ZN7S3048C12v8Ev();
extern void _ZN7S3048C12v9Ev();
extern void _ZN7S3048C13v10Ev();
extern void _ZN7S3048C13v11Ev();
extern void _ZN7S3048C13v12Ev();
extern void _ZN7S3048C13v13Ev();
extern void _ZN7S3048C13v14Ev();
extern void _ZN7S3048C13v15Ev();
extern void _ZN7S3048C13v16Ev();
extern void _ZN7S3048C13v17Ev();
extern void ABISELECT(_ZThn56_N7S3048C1D1Ev,_ZThn36_N7S3048C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3048C1D0Ev,_ZThn36_N7S3048C1D0Ev)();
extern void _ZN8S3048C123v38Ev();
extern void _ZN8S3048C123v39Ev();
extern void _ZN8S3048C123v40Ev();
extern void _ZN8S3048C113v41Ev();
extern void _ZN8S3048C113v42Ev();
extern void _ZN8S3048C113v43Ev();
extern void _ZN8S3048C113v44Ev();
extern void _ZN8S3048C113v45Ev();
extern void _ZN8S3048C113v46Ev();
extern void _ZN8S3048C103v47Ev();
extern void _ZN8S3048C103v48Ev();
extern void _ZN8S3048C103v49Ev();
extern void ABISELECT(_ZThn128_N7S3048C1D1Ev,_ZThn92_N7S3048C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S3048C1D0Ev,_ZThn92_N7S3048C1D0Ev)();
extern void _ZN8S3048C173v50Ev();
static  VTBL_ENTRY vtc_S3048C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3048C1[0]),
  (VTBL_ENTRY)&_ZN7S3048C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3048C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3048C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3048C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3048C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3048C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3048C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3048C23v37Ev,
  (VTBL_ENTRY)&_ZN7S3048C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3048C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3048C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3048C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3048C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3048C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3048C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3048C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3048C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3048C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3048C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3048C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3048C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3048C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3048C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3048C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3048C13v17Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S3048C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3048C1D1Ev,_ZThn36_N7S3048C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3048C1D0Ev,_ZThn36_N7S3048C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3048C123v38Ev,
  (VTBL_ENTRY)&_ZN8S3048C123v39Ev,
  (VTBL_ENTRY)&_ZN8S3048C123v40Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v44Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v45Ev,
  (VTBL_ENTRY)&_ZN8S3048C113v46Ev,
  (VTBL_ENTRY)&_ZN8S3048C103v47Ev,
  (VTBL_ENTRY)&_ZN8S3048C103v48Ev,
  (VTBL_ENTRY)&_ZN8S3048C103v49Ev,
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI7S3048C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S3048C1D1Ev,_ZThn92_N7S3048C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S3048C1D0Ev,_ZThn92_N7S3048C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3048C173v50Ev,
};
extern VTBL_ENTRY _ZTI7S3048C1[];
extern  VTBL_ENTRY _ZTV7S3048C1[];
Class_Descriptor cd_S3048C1 = {  "S3048C1", // class name
  bases_S3048C1, 6,
  &(vtc_S3048C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI7S3048C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3048C1),62, //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  S3049C3  {
  void *s3049c3f0;
  ::S2215C25 s3049c3f1;
  virtual  ~S3049C3(); // _ZN7S3049C3D1Ev
  virtual void  v18(); // _ZN7S3049C33v18Ev
  virtual void  v19(); // _ZN7S3049C33v19Ev
  virtual void  v20(); // _ZN7S3049C33v20Ev
  virtual void  v21(); // _ZN7S3049C33v21Ev
  virtual void  v22(); // _ZN7S3049C33v22Ev
  virtual void  v23(); // _ZN7S3049C33v23Ev
  virtual void  v24(); // _ZN7S3049C33v24Ev
  virtual void  v25(); // _ZN7S3049C33v25Ev
  virtual void  v26(); // _ZN7S3049C33v26Ev
  virtual void  v27(); // _ZN7S3049C33v27Ev
  virtual void  v28(); // _ZN7S3049C33v28Ev
  virtual void  v29(); // _ZN7S3049C33v29Ev
  virtual void  v30(); // _ZN7S3049C33v30Ev
  virtual void  v31(); // _ZN7S3049C33v31Ev
  virtual void  v32(); // _ZN7S3049C33v32Ev
  S3049C3(); // tgen
};
//SIG(-1 S3049C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}}}


 S3049C3 ::~S3049C3(){ note_dtor("S3049C3", this);}
void  S3049C3 ::v18(){vfunc_called(this, "_ZN7S3049C33v18Ev");}
void  S3049C3 ::v19(){vfunc_called(this, "_ZN7S3049C33v19Ev");}
void  S3049C3 ::v20(){vfunc_called(this, "_ZN7S3049C33v20Ev");}
void  S3049C3 ::v21(){vfunc_called(this, "_ZN7S3049C33v21Ev");}
void  S3049C3 ::v22(){vfunc_called(this, "_ZN7S3049C33v22Ev");}
void  S3049C3 ::v23(){vfunc_called(this, "_ZN7S3049C33v23Ev");}
void  S3049C3 ::v24(){vfunc_called(this, "_ZN7S3049C33v24Ev");}
void  S3049C3 ::v25(){vfunc_called(this, "_ZN7S3049C33v25Ev");}
void  S3049C3 ::v26(){vfunc_called(this, "_ZN7S3049C33v26Ev");}
void  S3049C3 ::v27(){vfunc_called(this, "_ZN7S3049C33v27Ev");}
void  S3049C3 ::v28(){vfunc_called(this, "_ZN7S3049C33v28Ev");}
void  S3049C3 ::v29(){vfunc_called(this, "_ZN7S3049C33v29Ev");}
void  S3049C3 ::v30(){vfunc_called(this, "_ZN7S3049C33v30Ev");}
void  S3049C3 ::v31(){vfunc_called(this, "_ZN7S3049C33v31Ev");}
void  S3049C3 ::v32(){vfunc_called(this, "_ZN7S3049C33v32Ev");}
S3049C3 ::S3049C3(){ note_ctor("S3049C3", this);} // tgen

static void Test_S3049C3()
{
  extern Class_Descriptor cd_S3049C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3049C3, buf);
    S3049C3 *dp, &lv = *(dp=new (buf) S3049C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3049C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3049C3)");
    check_field_offset(lv, s3049c3f0, ABISELECT(8,4), "S3049C3.s3049c3f0");
    check_field_offset(lv, s3049c3f1, ABISELECT(16,8), "S3049C3.s3049c3f1");
    test_class_info(&lv, &cd_S3049C3);
    dp->~S3049C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3049C3(Test_S3049C3, "S3049C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3049C3C1Ev();
extern void _ZN7S3049C3D1Ev();
Name_Map name_map_S3049C3[] = {
  NSPAIR(_ZN7S3049C3C1Ev),
  NSPAIR(_ZN7S3049C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3049C3[];
extern void _ZN7S3049C3D1Ev();
extern void _ZN7S3049C3D0Ev();
extern void _ZN7S3049C33v18Ev();
extern void _ZN7S3049C33v19Ev();
extern void _ZN7S3049C33v20Ev();
extern void _ZN7S3049C33v21Ev();
extern void _ZN7S3049C33v22Ev();
extern void _ZN7S3049C33v23Ev();
extern void _ZN7S3049C33v24Ev();
extern void _ZN7S3049C33v25Ev();
extern void _ZN7S3049C33v26Ev();
extern void _ZN7S3049C33v27Ev();
extern void _ZN7S3049C33v28Ev();
extern void _ZN7S3049C33v29Ev();
extern void _ZN7S3049C33v30Ev();
extern void _ZN7S3049C33v31Ev();
extern void _ZN7S3049C33v32Ev();
static  VTBL_ENTRY vtc_S3049C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3049C3[0]),
  (VTBL_ENTRY)&_ZN7S3049C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3049C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v32Ev,
};
extern VTBL_ENTRY _ZTI7S3049C3[];
extern  VTBL_ENTRY _ZTV7S3049C3[];
Class_Descriptor cd_S3049C3 = {  "S3049C3", // class name
  0,0,//no base classes
  &(vtc_S3049C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3049C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3049C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3049C2  : S3049C3 {
  ::S3047C24_nt s3049c2f0;
  virtual  ~S3049C2(); // _ZN7S3049C2D1Ev
  virtual void  v33(); // _ZN7S3049C23v33Ev
  virtual void  v34(); // _ZN7S3049C23v34Ev
  virtual void  v35(); // _ZN7S3049C23v35Ev
  virtual void  v36(); // _ZN7S3049C23v36Ev
  virtual void  v37(); // _ZN7S3049C23v37Ev
  S3049C2(); // tgen
};
//SIG(-1 S3049C2) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}}} vd v1 v2 v3 v4 v5 FC6{ m Fp Fi[2] FC7{ m}}}


 S3049C2 ::~S3049C2(){ note_dtor("S3049C2", this);}
void  S3049C2 ::v33(){vfunc_called(this, "_ZN7S3049C23v33Ev");}
void  S3049C2 ::v34(){vfunc_called(this, "_ZN7S3049C23v34Ev");}
void  S3049C2 ::v35(){vfunc_called(this, "_ZN7S3049C23v35Ev");}
void  S3049C2 ::v36(){vfunc_called(this, "_ZN7S3049C23v36Ev");}
void  S3049C2 ::v37(){vfunc_called(this, "_ZN7S3049C23v37Ev");}
S3049C2 ::S3049C2(){ note_ctor("S3049C2", this);} // tgen

static void Test_S3049C2()
{
  extern Class_Descriptor cd_S3049C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3049C2, buf);
    S3049C2 *dp, &lv = *(dp=new (buf) S3049C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3049C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3049C2)");
    check_base_class_offset(lv, (S3049C3*), 0, "S3049C2");
    check_field_offset(lv, s3049c2f0, ABISELECT(32,20), "S3049C2.s3049c2f0");
    test_class_info(&lv, &cd_S3049C2);
    dp->~S3049C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3049C2(Test_S3049C2, "S3049C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3049C2C1Ev();
extern void _ZN7S3049C2D1Ev();
Name_Map name_map_S3049C2[] = {
  NSPAIR(_ZN7S3049C2C1Ev),
  NSPAIR(_ZN7S3049C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3049C3;
extern VTBL_ENTRY _ZTI7S3049C3[];
extern  VTBL_ENTRY _ZTV7S3049C3[];
static Base_Class bases_S3049C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3049C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3049C2[];
extern void _ZN7S3049C2D1Ev();
extern void _ZN7S3049C2D0Ev();
extern void _ZN7S3049C33v18Ev();
extern void _ZN7S3049C33v19Ev();
extern void _ZN7S3049C33v20Ev();
extern void _ZN7S3049C33v21Ev();
extern void _ZN7S3049C33v22Ev();
extern void _ZN7S3049C33v23Ev();
extern void _ZN7S3049C33v24Ev();
extern void _ZN7S3049C33v25Ev();
extern void _ZN7S3049C33v26Ev();
extern void _ZN7S3049C33v27Ev();
extern void _ZN7S3049C33v28Ev();
extern void _ZN7S3049C33v29Ev();
extern void _ZN7S3049C33v30Ev();
extern void _ZN7S3049C33v31Ev();
extern void _ZN7S3049C33v32Ev();
extern void _ZN7S3049C23v33Ev();
extern void _ZN7S3049C23v34Ev();
extern void _ZN7S3049C23v35Ev();
extern void _ZN7S3049C23v36Ev();
extern void _ZN7S3049C23v37Ev();
static  VTBL_ENTRY vtc_S3049C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3049C2[0]),
  (VTBL_ENTRY)&_ZN7S3049C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3049C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3049C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3049C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3049C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3049C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3049C23v37Ev,
};
extern VTBL_ENTRY _ZTI7S3049C2[];
extern  VTBL_ENTRY _ZTV7S3049C2[];
Class_Descriptor cd_S3049C2 = {  "S3049C2", // class name
  bases_S3049C2, 1,
  &(vtc_S3049C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3049C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3049C2),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3049C12  {
  virtual  ~S3049C12(); // _ZN8S3049C12D1Ev
  virtual void  v38(); // _ZN8S3049C123v38Ev
  virtual void  v39(); // _ZN8S3049C123v39Ev
  virtual void  v40(); // _ZN8S3049C123v40Ev
  S3049C12(); // tgen
};
//SIG(-1 S3049C12) C1{ vd v1 v2 v3}


 S3049C12 ::~S3049C12(){ note_dtor("S3049C12", this);}
void  S3049C12 ::v38(){vfunc_called(this, "_ZN8S3049C123v38Ev");}
void  S3049C12 ::v39(){vfunc_called(this, "_ZN8S3049C123v39Ev");}
void  S3049C12 ::v40(){vfunc_called(this, "_ZN8S3049C123v40Ev");}
S3049C12 ::S3049C12(){ note_ctor("S3049C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S3049C12C1Ev();
extern void _ZN8S3049C12D1Ev();
Name_Map name_map_S3049C12[] = {
  NSPAIR(_ZN8S3049C12C1Ev),
  NSPAIR(_ZN8S3049C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3049C12[];
extern void _ZN8S3049C12D1Ev();
extern void _ZN8S3049C12D0Ev();
extern void _ZN8S3049C123v38Ev();
extern void _ZN8S3049C123v39Ev();
extern void _ZN8S3049C123v40Ev();
static  VTBL_ENTRY vtc_S3049C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3049C12[0]),
  (VTBL_ENTRY)&_ZN8S3049C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3049C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3049C123v38Ev,
  (VTBL_ENTRY)&_ZN8S3049C123v39Ev,
  (VTBL_ENTRY)&_ZN8S3049C123v40Ev,
};
extern VTBL_ENTRY _ZTI8S3049C12[];
extern  VTBL_ENTRY _ZTV8S3049C12[];
Class_Descriptor cd_S3049C12 = {  "S3049C12", // class name
  0,0,//no base classes
  &(vtc_S3049C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3049C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3049C12),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  S3049C11  : S3049C12 {
  virtual  ~S3049C11(); // _ZN8S3049C11D1Ev
  virtual void  v41(); // _ZN8S3049C113v41Ev
  virtual void  v42(); // _ZN8S3049C113v42Ev
  virtual void  v43(); // _ZN8S3049C113v43Ev
  virtual void  v44(); // _ZN8S3049C113v44Ev
  virtual void  v45(); // _ZN8S3049C113v45Ev
  virtual void  v46(); // _ZN8S3049C113v46Ev
  S3049C11(); // tgen
};
//SIG(-1 S3049C11) C1{ BC2{ vd v7 v8 v9} vd v1 v2 v3 v4 v5 v6}


 S3049C11 ::~S3049C11(){ note_dtor("S3049C11", this);}
void  S3049C11 ::v41(){vfunc_called(this, "_ZN8S3049C113v41Ev");}
void  S3049C11 ::v42(){vfunc_called(this, "_ZN8S3049C113v42Ev");}
void  S3049C11 ::v43(){vfunc_called(this, "_ZN8S3049C113v43Ev");}
void  S3049C11 ::v44(){vfunc_called(this, "_ZN8S3049C113v44Ev");}
void  S3049C11 ::v45(){vfunc_called(this, "_ZN8S3049C113v45Ev");}
void  S3049C11 ::v46(){vfunc_called(this, "_ZN8S3049C113v46Ev");}
S3049C11 ::S3049C11(){ note_ctor("S3049C11", this);} // tgen

static void Test_S3049C11()
{
  extern Class_Descriptor cd_S3049C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3049C11, buf);
    S3049C11 *dp, &lv = *(dp=new (buf) S3049C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3049C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3049C11)");
    check_base_class_offset(lv, (S3049C12*), 0, "S3049C11");
    test_class_info(&lv, &cd_S3049C11);
    dp->~S3049C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3049C11(Test_S3049C11, "S3049C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3049C11C1Ev();
extern void _ZN8S3049C11D1Ev();
Name_Map name_map_S3049C11[] = {
  NSPAIR(_ZN8S3049C11C1Ev),
  NSPAIR(_ZN8S3049C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3049C12;
extern VTBL_ENTRY _ZTI8S3049C12[];
extern  VTBL_ENTRY _ZTV8S3049C12[];
static Base_Class bases_S3049C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3049C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3049C11[];
extern void _ZN8S3049C11D1Ev();
extern void _ZN8S3049C11D0Ev();
extern void _ZN8S3049C123v38Ev();
extern void _ZN8S3049C123v39Ev();
extern void _ZN8S3049C123v40Ev();
extern void _ZN8S3049C113v41Ev();
extern void _ZN8S3049C113v42Ev();
extern void _ZN8S3049C113v43Ev();
extern void _ZN8S3049C113v44Ev();
extern void _ZN8S3049C113v45Ev();
extern void _ZN8S3049C113v46Ev();
static  VTBL_ENTRY vtc_S3049C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3049C11[0]),
  (VTBL_ENTRY)&_ZN8S3049C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3049C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3049C123v38Ev,
  (VTBL_ENTRY)&_ZN8S3049C123v39Ev,
  (VTBL_ENTRY)&_ZN8S3049C123v40Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v44Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v45Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v46Ev,
};
extern VTBL_ENTRY _ZTI8S3049C11[];
extern  VTBL_ENTRY _ZTV8S3049C11[];
Class_Descriptor cd_S3049C11 = {  "S3049C11", // class name
  bases_S3049C11, 1,
  &(vtc_S3049C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3049C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3049C11),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3049C15_nt  {
  __tsi64 s3049c15f0[4];
  void  mf3049c15(); // _ZN11S3049C15_nt9mf3049c15Ev
};
//SIG(-1 S3049C15_nt) C1{ m FL[4]}


void  S3049C15_nt ::mf3049c15(){}

//skip512 S3049C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3049C10  : S3049C11 {
  ::S2215C37 s3049c10f0;
  ::S3049C15_nt s3049c10f1;
  char s3049c10f2;
  virtual  ~S3049C10(); // _ZN8S3049C10D1Ev
  virtual void  v47(); // _ZN8S3049C103v47Ev
  virtual void  v48(); // _ZN8S3049C103v48Ev
  virtual void  v49(); // _ZN8S3049C103v49Ev
  S3049C10(); // tgen
};
//SIG(-1 S3049C10) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10 v11 v12} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S3049C10 ::~S3049C10(){ note_dtor("S3049C10", this);}
void  S3049C10 ::v47(){vfunc_called(this, "_ZN8S3049C103v47Ev");}
void  S3049C10 ::v48(){vfunc_called(this, "_ZN8S3049C103v48Ev");}
void  S3049C10 ::v49(){vfunc_called(this, "_ZN8S3049C103v49Ev");}
S3049C10 ::S3049C10(){ note_ctor("S3049C10", this);} // tgen

static void Test_S3049C10()
{
  extern Class_Descriptor cd_S3049C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S3049C10, buf);
    S3049C10 *dp, &lv = *(dp=new (buf) S3049C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S3049C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3049C10)");
    check_base_class_offset(lv, (S3049C12*)(S3049C11*), 0, "S3049C10");
    check_base_class_offset(lv, (S3049C11*), 0, "S3049C10");
    check_field_offset(lv, s3049c10f0, ABISELECT(8,4), "S3049C10.s3049c10f0");
    check_field_offset(lv, s3049c10f1, ABISELECT(32,20), "S3049C10.s3049c10f1");
    check_field_offset(lv, s3049c10f2, ABISELECT(64,52), "S3049C10.s3049c10f2");
    test_class_info(&lv, &cd_S3049C10);
    dp->~S3049C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3049C10(Test_S3049C10, "S3049C10", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S3049C10C1Ev();
extern void _ZN8S3049C10D1Ev();
Name_Map name_map_S3049C10[] = {
  NSPAIR(_ZN8S3049C10C1Ev),
  NSPAIR(_ZN8S3049C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3049C12;
extern VTBL_ENTRY _ZTI8S3049C12[];
extern  VTBL_ENTRY _ZTV8S3049C12[];
extern Class_Descriptor cd_S3049C11;
extern VTBL_ENTRY _ZTI8S3049C11[];
extern  VTBL_ENTRY _ZTV8S3049C11[];
static Base_Class bases_S3049C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3049C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3049C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S3049C10[];
extern void _ZN8S3049C10D1Ev();
extern void _ZN8S3049C10D0Ev();
extern void _ZN8S3049C123v38Ev();
extern void _ZN8S3049C123v39Ev();
extern void _ZN8S3049C123v40Ev();
extern void _ZN8S3049C113v41Ev();
extern void _ZN8S3049C113v42Ev();
extern void _ZN8S3049C113v43Ev();
extern void _ZN8S3049C113v44Ev();
extern void _ZN8S3049C113v45Ev();
extern void _ZN8S3049C113v46Ev();
extern void _ZN8S3049C103v47Ev();
extern void _ZN8S3049C103v48Ev();
extern void _ZN8S3049C103v49Ev();
static  VTBL_ENTRY vtc_S3049C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3049C10[0]),
  (VTBL_ENTRY)&_ZN8S3049C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3049C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3049C123v38Ev,
  (VTBL_ENTRY)&_ZN8S3049C123v39Ev,
  (VTBL_ENTRY)&_ZN8S3049C123v40Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v44Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v45Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v46Ev,
  (VTBL_ENTRY)&_ZN8S3049C103v47Ev,
  (VTBL_ENTRY)&_ZN8S3049C103v48Ev,
  (VTBL_ENTRY)&_ZN8S3049C103v49Ev,
};
extern VTBL_ENTRY _ZTI8S3049C10[];
extern  VTBL_ENTRY _ZTV8S3049C10[];
Class_Descriptor cd_S3049C10 = {  "S3049C10", // class name
  bases_S3049C10, 2,
  &(vtc_S3049C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S3049C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3049C10),16, //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  S3049C16  {
  virtual  ~S3049C16(); // _ZN8S3049C16D1Ev
  virtual void  v50(); // _ZN8S3049C163v50Ev
  S3049C16(); // tgen
};
//SIG(-1 S3049C16) C1{ vd v1}


 S3049C16 ::~S3049C16(){ note_dtor("S3049C16", this);}
void  S3049C16 ::v50(){vfunc_called(this, "_ZN8S3049C163v50Ev");}
S3049C16 ::S3049C16(){ note_ctor("S3049C16", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S3049C16C1Ev();
extern void _ZN8S3049C16D1Ev();
Name_Map name_map_S3049C16[] = {
  NSPAIR(_ZN8S3049C16C1Ev),
  NSPAIR(_ZN8S3049C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3049C16[];
extern void _ZN8S3049C16D1Ev();
extern void _ZN8S3049C16D0Ev();
extern void _ZN8S3049C163v50Ev();
static  VTBL_ENTRY vtc_S3049C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3049C16[0]),
  (VTBL_ENTRY)&_ZN8S3049C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3049C16D0Ev,
  (VTBL_ENTRY)&_ZN8S3049C163v50Ev,
};
extern VTBL_ENTRY _ZTI8S3049C16[];
extern  VTBL_ENTRY _ZTV8S3049C16[];
Class_Descriptor cd_S3049C16 = {  "S3049C16", // class name
  0,0,//no base classes
  &(vtc_S3049C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3049C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3049C16),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  S3049C1  : S3049C2 , S3049C10 , S3049C16 {
  ::S3047C18 s3049c1f0;
  virtual  ~S3049C1(); // _ZN7S3049C1D1Ev
  virtual void  v1(); // _ZN7S3049C12v1Ev
  virtual void  v2(); // _ZN7S3049C12v2Ev
  virtual void  v3(); // _ZN7S3049C12v3Ev
  virtual void  v4(); // _ZN7S3049C12v4Ev
  virtual void  v5(); // _ZN7S3049C12v5Ev
  virtual void  v6(); // _ZN7S3049C12v6Ev
  virtual void  v7(); // _ZN7S3049C12v7Ev
  virtual void  v8(); // _ZN7S3049C12v8Ev
  virtual void  v9(); // _ZN7S3049C12v9Ev
  virtual void  v10(); // _ZN7S3049C13v10Ev
  virtual void  v11(); // _ZN7S3049C13v11Ev
  virtual void  v12(); // _ZN7S3049C13v12Ev
  virtual void  v13(); // _ZN7S3049C13v13Ev
  virtual void  v14(); // _ZN7S3049C13v14Ev
  virtual void  v15(); // _ZN7S3049C13v15Ev
  virtual void  v16(); // _ZN7S3049C13v16Ev
  virtual void  v17(); // _ZN7S3049C13v17Ev
  S3049C1(); // tgen
};
//SIG(1 S3049C1) C1{ BC2{ BC3{ vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}}} vd v33 v34 v35 v36 v37 FC7{ m Fp Fi[2] FC8{ m}}} BC9{ BC10{ BC11{ vd v38 v39 v40} vd v41 v42 v43 v44 v45 v46} vd v47 v48 v49 FC12{ m Fp Fi[2] FC8} FC13{ m FL[4]} Fc} BC14{ vd v50} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 FC15{ BC16{} FC17{ BC18{ vd v53 v54} vd v51 v52 Fi[5] FC19{ BC18 vd v55 v56 FL} FC20{ BC7 BC18 vd v57 v58} FC21{ m Fp Fi FC22{ m}} FC23{ vd m FC24{ m Fs[6] Fi[2] Fc Fs}} FC23}}}


 S3049C1 ::~S3049C1(){ note_dtor("S3049C1", this);}
void  S3049C1 ::v1(){vfunc_called(this, "_ZN7S3049C12v1Ev");}
void  S3049C1 ::v2(){vfunc_called(this, "_ZN7S3049C12v2Ev");}
void  S3049C1 ::v3(){vfunc_called(this, "_ZN7S3049C12v3Ev");}
void  S3049C1 ::v4(){vfunc_called(this, "_ZN7S3049C12v4Ev");}
void  S3049C1 ::v5(){vfunc_called(this, "_ZN7S3049C12v5Ev");}
void  S3049C1 ::v6(){vfunc_called(this, "_ZN7S3049C12v6Ev");}
void  S3049C1 ::v7(){vfunc_called(this, "_ZN7S3049C12v7Ev");}
void  S3049C1 ::v8(){vfunc_called(this, "_ZN7S3049C12v8Ev");}
void  S3049C1 ::v9(){vfunc_called(this, "_ZN7S3049C12v9Ev");}
void  S3049C1 ::v10(){vfunc_called(this, "_ZN7S3049C13v10Ev");}
void  S3049C1 ::v11(){vfunc_called(this, "_ZN7S3049C13v11Ev");}
void  S3049C1 ::v12(){vfunc_called(this, "_ZN7S3049C13v12Ev");}
void  S3049C1 ::v13(){vfunc_called(this, "_ZN7S3049C13v13Ev");}
void  S3049C1 ::v14(){vfunc_called(this, "_ZN7S3049C13v14Ev");}
void  S3049C1 ::v15(){vfunc_called(this, "_ZN7S3049C13v15Ev");}
void  S3049C1 ::v16(){vfunc_called(this, "_ZN7S3049C13v16Ev");}
void  S3049C1 ::v17(){vfunc_called(this, "_ZN7S3049C13v17Ev");}
S3049C1 ::S3049C1(){ note_ctor("S3049C1", this);} // tgen

static void Test_S3049C1()
{
  extern Class_Descriptor cd_S3049C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S3049C1, buf);
    S3049C1 *dp, &lv = *(dp=new (buf) S3049C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S3049C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3049C1)");
    check_base_class_offset(lv, (S3049C3*)(S3049C2*), 0, "S3049C1");
    check_base_class_offset(lv, (S3049C2*), 0, "S3049C1");
    check_base_class_offset(lv, (S3049C12*)(S3049C11*)(S3049C10*), ABISELECT(56,36), "S3049C1");
    check_base_class_offset(lv, (S3049C11*)(S3049C10*), ABISELECT(56,36), "S3049C1");
    check_base_class_offset(lv, (S3049C10*), ABISELECT(56,36), "S3049C1");
    check_base_class_offset(lv, (S3049C16*), ABISELECT(128,92), "S3049C1");
    check_field_offset(lv, s3049c1f0, ABISELECT(136,96), "S3049C1.s3049c1f0");
    test_class_info(&lv, &cd_S3049C1);
    dp->~S3049C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3049C1(Test_S3049C1, "S3049C1", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN7S3049C1C1Ev();
extern void _ZN7S3049C1D1Ev();
Name_Map name_map_S3049C1[] = {
  NSPAIR(_ZN7S3049C1C1Ev),
  NSPAIR(_ZN7S3049C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3049C3;
extern VTBL_ENTRY _ZTI7S3049C3[];
extern  VTBL_ENTRY _ZTV7S3049C3[];
extern Class_Descriptor cd_S3049C2;
extern VTBL_ENTRY _ZTI7S3049C2[];
extern  VTBL_ENTRY _ZTV7S3049C2[];
extern Class_Descriptor cd_S3049C12;
extern VTBL_ENTRY _ZTI8S3049C12[];
extern  VTBL_ENTRY _ZTV8S3049C12[];
extern Class_Descriptor cd_S3049C11;
extern VTBL_ENTRY _ZTI8S3049C11[];
extern  VTBL_ENTRY _ZTV8S3049C11[];
extern Class_Descriptor cd_S3049C10;
extern VTBL_ENTRY _ZTI8S3049C10[];
extern  VTBL_ENTRY _ZTV8S3049C10[];
extern Class_Descriptor cd_S3049C16;
extern VTBL_ENTRY _ZTI8S3049C16[];
extern  VTBL_ENTRY _ZTV8S3049C16[];
static Base_Class bases_S3049C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3049C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3049C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3049C12,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3049C11,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3049C10,    ABISELECT(56,36), //bcp->offset
    41, //bcp->virtual_function_table_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_S3049C16,    ABISELECT(128,92), //bcp->offset
    57, //bcp->virtual_function_table_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 _ZTI7S3049C1[];
extern void _ZN7S3049C1D1Ev();
extern void _ZN7S3049C1D0Ev();
extern void _ZN7S3049C33v18Ev();
extern void _ZN7S3049C33v19Ev();
extern void _ZN7S3049C33v20Ev();
extern void _ZN7S3049C33v21Ev();
extern void _ZN7S3049C33v22Ev();
extern void _ZN7S3049C33v23Ev();
extern void _ZN7S3049C33v24Ev();
extern void _ZN7S3049C33v25Ev();
extern void _ZN7S3049C33v26Ev();
extern void _ZN7S3049C33v27Ev();
extern void _ZN7S3049C33v28Ev();
extern void _ZN7S3049C33v29Ev();
extern void _ZN7S3049C33v30Ev();
extern void _ZN7S3049C33v31Ev();
extern void _ZN7S3049C33v32Ev();
extern void _ZN7S3049C23v33Ev();
extern void _ZN7S3049C23v34Ev();
extern void _ZN7S3049C23v35Ev();
extern void _ZN7S3049C23v36Ev();
extern void _ZN7S3049C23v37Ev();
extern void _ZN7S3049C12v1Ev();
extern void _ZN7S3049C12v2Ev();
extern void _ZN7S3049C12v3Ev();
extern void _ZN7S3049C12v4Ev();
extern void _ZN7S3049C12v5Ev();
extern void _ZN7S3049C12v6Ev();
extern void _ZN7S3049C12v7Ev();
extern void _ZN7S3049C12v8Ev();
extern void _ZN7S3049C12v9Ev();
extern void _ZN7S3049C13v10Ev();
extern void _ZN7S3049C13v11Ev();
extern void _ZN7S3049C13v12Ev();
extern void _ZN7S3049C13v13Ev();
extern void _ZN7S3049C13v14Ev();
extern void _ZN7S3049C13v15Ev();
extern void _ZN7S3049C13v16Ev();
extern void _ZN7S3049C13v17Ev();
extern void ABISELECT(_ZThn56_N7S3049C1D1Ev,_ZThn36_N7S3049C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3049C1D0Ev,_ZThn36_N7S3049C1D0Ev)();
extern void _ZN8S3049C123v38Ev();
extern void _ZN8S3049C123v39Ev();
extern void _ZN8S3049C123v40Ev();
extern void _ZN8S3049C113v41Ev();
extern void _ZN8S3049C113v42Ev();
extern void _ZN8S3049C113v43Ev();
extern void _ZN8S3049C113v44Ev();
extern void _ZN8S3049C113v45Ev();
extern void _ZN8S3049C113v46Ev();
extern void _ZN8S3049C103v47Ev();
extern void _ZN8S3049C103v48Ev();
extern void _ZN8S3049C103v49Ev();
extern void ABISELECT(_ZThn128_N7S3049C1D1Ev,_ZThn92_N7S3049C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S3049C1D0Ev,_ZThn92_N7S3049C1D0Ev)();
extern void _ZN8S3049C163v50Ev();
static  VTBL_ENTRY vtc_S3049C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3049C1[0]),
  (VTBL_ENTRY)&_ZN7S3049C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3049C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3049C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3049C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3049C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3049C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3049C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3049C23v37Ev,
  (VTBL_ENTRY)&_ZN7S3049C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3049C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3049C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3049C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3049C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3049C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3049C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3049C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3049C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3049C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3049C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3049C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3049C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3049C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3049C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3049C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3049C13v17Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S3049C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3049C1D1Ev,_ZThn36_N7S3049C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3049C1D0Ev,_ZThn36_N7S3049C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3049C123v38Ev,
  (VTBL_ENTRY)&_ZN8S3049C123v39Ev,
  (VTBL_ENTRY)&_ZN8S3049C123v40Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v44Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v45Ev,
  (VTBL_ENTRY)&_ZN8S3049C113v46Ev,
  (VTBL_ENTRY)&_ZN8S3049C103v47Ev,
  (VTBL_ENTRY)&_ZN8S3049C103v48Ev,
  (VTBL_ENTRY)&_ZN8S3049C103v49Ev,
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI7S3049C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S3049C1D1Ev,_ZThn92_N7S3049C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S3049C1D0Ev,_ZThn92_N7S3049C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3049C163v50Ev,
};
extern VTBL_ENTRY _ZTI7S3049C1[];
extern  VTBL_ENTRY _ZTV7S3049C1[];
Class_Descriptor cd_S3049C1 = {  "S3049C1", // class name
  bases_S3049C1, 6,
  &(vtc_S3049C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI7S3049C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3049C1),62, //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  S303C5  : S770C5_nt {
  virtual void  v13(); // _ZN6S303C53v13Ev
  virtual void  v14(); // _ZN6S303C53v14Ev
  virtual void  v15(); // _ZN6S303C53v15Ev
  virtual void  v16(); // _ZN6S303C53v16Ev
  virtual void  v17(); // _ZN6S303C53v17Ev
  ~S303C5(); // tgen
  S303C5(); // tgen
};
//SIG(-1 S303C5) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S303C5 ::v13(){vfunc_called(this, "_ZN6S303C53v13Ev");}
void  S303C5 ::v14(){vfunc_called(this, "_ZN6S303C53v14Ev");}
void  S303C5 ::v15(){vfunc_called(this, "_ZN6S303C53v15Ev");}
void  S303C5 ::v16(){vfunc_called(this, "_ZN6S303C53v16Ev");}
void  S303C5 ::v17(){vfunc_called(this, "_ZN6S303C53v17Ev");}
S303C5 ::~S303C5(){ note_dtor("S303C5", this);} // tgen
S303C5 ::S303C5(){ note_ctor("S303C5", this);} // tgen

static void Test_S303C5()
{
  extern Class_Descriptor cd_S303C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S303C5, buf);
    S303C5 *dp, &lv = *(dp=new (buf) S303C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S303C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S303C5)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S303C5");
    test_class_info(&lv, &cd_S303C5);
    dp->~S303C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS303C5(Test_S303C5, "S303C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S303C5C1Ev();
extern void _ZN6S303C5D1Ev();
Name_Map name_map_S303C5[] = {
  NSPAIR(_ZN6S303C5C1Ev),
  NSPAIR(_ZN6S303C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S303C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S303C5[];
extern void _ZN6S303C5D1Ev();
extern void _ZN6S303C5D0Ev();
extern void _ZN6S303C53v13Ev();
extern void _ZN6S303C53v14Ev();
extern void _ZN6S303C53v15Ev();
extern void _ZN6S303C53v16Ev();
extern void _ZN6S303C53v17Ev();
static  VTBL_ENTRY vtc_S303C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S303C5[0]),
  (VTBL_ENTRY)&_ZN6S303C5D1Ev,
  (VTBL_ENTRY)&_ZN6S303C5D0Ev,
  (VTBL_ENTRY)&_ZN6S303C53v13Ev,
  (VTBL_ENTRY)&_ZN6S303C53v14Ev,
  (VTBL_ENTRY)&_ZN6S303C53v15Ev,
  (VTBL_ENTRY)&_ZN6S303C53v16Ev,
  (VTBL_ENTRY)&_ZN6S303C53v17Ev,
};
extern VTBL_ENTRY _ZTI6S303C5[];
extern  VTBL_ENTRY _ZTV6S303C5[];
Class_Descriptor cd_S303C5 = {  "S303C5", // class name
  bases_S303C5, 1,
  &(vtc_S303C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S303C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S303C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S303C4  : S303C5 {
  void *s303c4f0[3];
  ::S770C6_nt s303c4f1;
  virtual void  v18(); // _ZN6S303C43v18Ev
  virtual void  v19(); // _ZN6S303C43v19Ev
  virtual void  v20(); // _ZN6S303C43v20Ev
  virtual void  v21(); // _ZN6S303C43v21Ev
  virtual void  v22(); // _ZN6S303C43v22Ev
  virtual void  v23(); // _ZN6S303C43v23Ev
  virtual void  v24(); // _ZN6S303C43v24Ev
  virtual void  v25(); // _ZN6S303C43v25Ev
  virtual void  v26(); // _ZN6S303C43v26Ev
  virtual void  v27(); // _ZN6S303C43v27Ev
  virtual void  v28(); // _ZN6S303C43v28Ev
  ~S303C4(); // tgen
  S303C4(); // tgen
};
//SIG(-1 S303C4) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S303C4 ::v18(){vfunc_called(this, "_ZN6S303C43v18Ev");}
void  S303C4 ::v19(){vfunc_called(this, "_ZN6S303C43v19Ev");}
void  S303C4 ::v20(){vfunc_called(this, "_ZN6S303C43v20Ev");}
void  S303C4 ::v21(){vfunc_called(this, "_ZN6S303C43v21Ev");}
void  S303C4 ::v22(){vfunc_called(this, "_ZN6S303C43v22Ev");}
void  S303C4 ::v23(){vfunc_called(this, "_ZN6S303C43v23Ev");}
void  S303C4 ::v24(){vfunc_called(this, "_ZN6S303C43v24Ev");}
void  S303C4 ::v25(){vfunc_called(this, "_ZN6S303C43v25Ev");}
void  S303C4 ::v26(){vfunc_called(this, "_ZN6S303C43v26Ev");}
void  S303C4 ::v27(){vfunc_called(this, "_ZN6S303C43v27Ev");}
void  S303C4 ::v28(){vfunc_called(this, "_ZN6S303C43v28Ev");}
S303C4 ::~S303C4(){ note_dtor("S303C4", this);} // tgen
S303C4 ::S303C4(){ note_ctor("S303C4", this);} // tgen

static void Test_S303C4()
{
  extern Class_Descriptor cd_S303C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S303C4, buf);
    S303C4 *dp, &lv = *(dp=new (buf) S303C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S303C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S303C4)");
    check_base_class_offset(lv, (S770C5_nt*)(S303C5*), 0, "S303C4");
    check_base_class_offset(lv, (S303C5*), 0, "S303C4");
    check_field_offset(lv, s303c4f0, ABISELECT(16,8), "S303C4.s303c4f0");
    check_field_offset(lv, s303c4f1, ABISELECT(40,20), "S303C4.s303c4f1");
    test_class_info(&lv, &cd_S303C4);
    dp->~S303C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS303C4(Test_S303C4, "S303C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S303C4C1Ev();
extern void _ZN6S303C4D1Ev();
Name_Map name_map_S303C4[] = {
  NSPAIR(_ZN6S303C4C1Ev),
  NSPAIR(_ZN6S303C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S303C5;
extern VTBL_ENTRY _ZTI6S303C5[];
extern  VTBL_ENTRY _ZTV6S303C5[];
static Base_Class bases_S303C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S303C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S303C4[];
extern void _ZN6S303C4D1Ev();
extern void _ZN6S303C4D0Ev();
extern void _ZN6S303C53v13Ev();
extern void _ZN6S303C53v14Ev();
extern void _ZN6S303C53v15Ev();
extern void _ZN6S303C53v16Ev();
extern void _ZN6S303C53v17Ev();
extern void _ZN6S303C43v18Ev();
extern void _ZN6S303C43v19Ev();
extern void _ZN6S303C43v20Ev();
extern void _ZN6S303C43v21Ev();
extern void _ZN6S303C43v22Ev();
extern void _ZN6S303C43v23Ev();
extern void _ZN6S303C43v24Ev();
extern void _ZN6S303C43v25Ev();
extern void _ZN6S303C43v26Ev();
extern void _ZN6S303C43v27Ev();
extern void _ZN6S303C43v28Ev();
static  VTBL_ENTRY vtc_S303C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S303C4[0]),
  (VTBL_ENTRY)&_ZN6S303C4D1Ev,
  (VTBL_ENTRY)&_ZN6S303C4D0Ev,
  (VTBL_ENTRY)&_ZN6S303C53v13Ev,
  (VTBL_ENTRY)&_ZN6S303C53v14Ev,
  (VTBL_ENTRY)&_ZN6S303C53v15Ev,
  (VTBL_ENTRY)&_ZN6S303C53v16Ev,
  (VTBL_ENTRY)&_ZN6S303C53v17Ev,
  (VTBL_ENTRY)&_ZN6S303C43v18Ev,
  (VTBL_ENTRY)&_ZN6S303C43v19Ev,
  (VTBL_ENTRY)&_ZN6S303C43v20Ev,
  (VTBL_ENTRY)&_ZN6S303C43v21Ev,
  (VTBL_ENTRY)&_ZN6S303C43v22Ev,
  (VTBL_ENTRY)&_ZN6S303C43v23Ev,
  (VTBL_ENTRY)&_ZN6S303C43v24Ev,
  (VTBL_ENTRY)&_ZN6S303C43v25Ev,
  (VTBL_ENTRY)&_ZN6S303C43v26Ev,
  (VTBL_ENTRY)&_ZN6S303C43v27Ev,
  (VTBL_ENTRY)&_ZN6S303C43v28Ev,
};
extern VTBL_ENTRY _ZTI6S303C4[];
extern  VTBL_ENTRY _ZTV6S303C4[];
Class_Descriptor cd_S303C4 = {  "S303C4", // class name
  bases_S303C4, 2,
  &(vtc_S303C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S303C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S303C4),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S303C3  : S303C4 {
  ::S770C6_nt s303c3f0;
  ::S770C9_nt s303c3f1;
  void *s303c3f2[3];
  virtual void  v29(); // _ZN6S303C33v29Ev
  virtual void  v30(); // _ZN6S303C33v30Ev
  virtual void  v31(); // _ZN6S303C33v31Ev
  virtual void  v32(); // _ZN6S303C33v32Ev
  virtual void  v33(); // _ZN6S303C33v33Ev
  virtual void  v34(); // _ZN6S303C33v34Ev
  virtual void  v35(); // _ZN6S303C33v35Ev
  virtual void  v36(); // _ZN6S303C33v36Ev
  ~S303C3(); // tgen
  S303C3(); // tgen
};
//SIG(-1 S303C3) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S303C3 ::v29(){vfunc_called(this, "_ZN6S303C33v29Ev");}
void  S303C3 ::v30(){vfunc_called(this, "_ZN6S303C33v30Ev");}
void  S303C3 ::v31(){vfunc_called(this, "_ZN6S303C33v31Ev");}
void  S303C3 ::v32(){vfunc_called(this, "_ZN6S303C33v32Ev");}
void  S303C3 ::v33(){vfunc_called(this, "_ZN6S303C33v33Ev");}
void  S303C3 ::v34(){vfunc_called(this, "_ZN6S303C33v34Ev");}
void  S303C3 ::v35(){vfunc_called(this, "_ZN6S303C33v35Ev");}
void  S303C3 ::v36(){vfunc_called(this, "_ZN6S303C33v36Ev");}
S303C3 ::~S303C3(){ note_dtor("S303C3", this);} // tgen
S303C3 ::S303C3(){ note_ctor("S303C3", this);} // tgen

static void Test_S303C3()
{
  extern Class_Descriptor cd_S303C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S303C3, buf);
    S303C3 *dp, &lv = *(dp=new (buf) S303C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S303C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S303C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S303C5*)(S303C4*), 0, "S303C3");
    check_base_class_offset(lv, (S303C5*)(S303C4*), 0, "S303C3");
    check_base_class_offset(lv, (S303C4*), 0, "S303C3");
    check_field_offset(lv, s303c3f0, ABISELECT(80,44), "S303C3.s303c3f0");
    check_field_offset(lv, s303c3f1, ABISELECT(120,68), "S303C3.s303c3f1");
    check_field_offset(lv, s303c3f2, ABISELECT(128,72), "S303C3.s303c3f2");
    test_class_info(&lv, &cd_S303C3);
    dp->~S303C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS303C3(Test_S303C3, "S303C3", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S303C3C1Ev();
extern void _ZN6S303C3D1Ev();
Name_Map name_map_S303C3[] = {
  NSPAIR(_ZN6S303C3C1Ev),
  NSPAIR(_ZN6S303C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S303C5;
extern VTBL_ENTRY _ZTI6S303C5[];
extern  VTBL_ENTRY _ZTV6S303C5[];
extern Class_Descriptor cd_S303C4;
extern VTBL_ENTRY _ZTI6S303C4[];
extern  VTBL_ENTRY _ZTV6S303C4[];
static Base_Class bases_S303C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S303C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S303C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S303C3[];
extern void _ZN6S303C3D1Ev();
extern void _ZN6S303C3D0Ev();
extern void _ZN6S303C53v13Ev();
extern void _ZN6S303C53v14Ev();
extern void _ZN6S303C53v15Ev();
extern void _ZN6S303C53v16Ev();
extern void _ZN6S303C53v17Ev();
extern void _ZN6S303C43v18Ev();
extern void _ZN6S303C43v19Ev();
extern void _ZN6S303C43v20Ev();
extern void _ZN6S303C43v21Ev();
extern void _ZN6S303C43v22Ev();
extern void _ZN6S303C43v23Ev();
extern void _ZN6S303C43v24Ev();
extern void _ZN6S303C43v25Ev();
extern void _ZN6S303C43v26Ev();
extern void _ZN6S303C43v27Ev();
extern void _ZN6S303C43v28Ev();
extern void _ZN6S303C33v29Ev();
extern void _ZN6S303C33v30Ev();
extern void _ZN6S303C33v31Ev();
extern void _ZN6S303C33v32Ev();
extern void _ZN6S303C33v33Ev();
extern void _ZN6S303C33v34Ev();
extern void _ZN6S303C33v35Ev();
extern void _ZN6S303C33v36Ev();
static  VTBL_ENTRY vtc_S303C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S303C3[0]),
  (VTBL_ENTRY)&_ZN6S303C3D1Ev,
  (VTBL_ENTRY)&_ZN6S303C3D0Ev,
  (VTBL_ENTRY)&_ZN6S303C53v13Ev,
  (VTBL_ENTRY)&_ZN6S303C53v14Ev,
  (VTBL_ENTRY)&_ZN6S303C53v15Ev,
  (VTBL_ENTRY)&_ZN6S303C53v16Ev,
  (VTBL_ENTRY)&_ZN6S303C53v17Ev,
  (VTBL_ENTRY)&_ZN6S303C43v18Ev,
  (VTBL_ENTRY)&_ZN6S303C43v19Ev,
  (VTBL_ENTRY)&_ZN6S303C43v20Ev,
  (VTBL_ENTRY)&_ZN6S303C43v21Ev,
  (VTBL_ENTRY)&_ZN6S303C43v22Ev,
  (VTBL_ENTRY)&_ZN6S303C43v23Ev,
  (VTBL_ENTRY)&_ZN6S303C43v24Ev,
  (VTBL_ENTRY)&_ZN6S303C43v25Ev,
  (VTBL_ENTRY)&_ZN6S303C43v26Ev,
  (VTBL_ENTRY)&_ZN6S303C43v27Ev,
  (VTBL_ENTRY)&_ZN6S303C43v28Ev,
  (VTBL_ENTRY)&_ZN6S303C33v29Ev,
  (VTBL_ENTRY)&_ZN6S303C33v30Ev,
  (VTBL_ENTRY)&_ZN6S303C33v31Ev,
  (VTBL_ENTRY)&_ZN6S303C33v32Ev,
  (VTBL_ENTRY)&_ZN6S303C33v33Ev,
  (VTBL_ENTRY)&_ZN6S303C33v34Ev,
  (VTBL_ENTRY)&_ZN6S303C33v35Ev,
  (VTBL_ENTRY)&_ZN6S303C33v36Ev,
};
extern VTBL_ENTRY _ZTI6S303C3[];
extern  VTBL_ENTRY _ZTV6S303C3[];
Class_Descriptor cd_S303C3 = {  "S303C3", // class name
  bases_S303C3, 3,
  &(vtc_S303C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S303C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S303C3),28, //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  S303C12_nt  {
  __tsi64 s303c12f0;
  void  mf303c12(); // _ZN10S303C12_nt8mf303c12Ev
};
//SIG(-1 S303C12_nt) C1{ m FL}


void  S303C12_nt ::mf303c12(){}

//skip512 S303C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S303C11_nt  {
  ::S303C12_nt s303c11f0;
  void  mf303c11(); // _ZN10S303C11_nt8mf303c11Ev
};
//SIG(-1 S303C11_nt) C1{ m FC2{ m FL}}


void  S303C11_nt ::mf303c11(){}

//skip512 S303C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S303C13_nt  {
  __tsi64 s303c13f0[2];
  char s303c13f1;
  int s303c13f2;
  ::S2215C20_nt s303c13f3;
  ::S2215C20_nt s303c13f4;
  ::S2215C20_nt s303c13f5;
  ::S2215C20_nt s303c13f6;
  ::S2215C20_nt s303c13f7;
  ::S2215C20_nt s303c13f8;
  ::S2215C20_nt s303c13f9;
  ::S2215C20_nt s303c13f10;
  ::S2215C20_nt s303c13f11;
  ::S2215C20_nt s303c13f12;
  ::S2215C20_nt s303c13f13;
  ::S2215C20_nt s303c13f14;
  int s303c13f15[3];
  ::S2215C20_nt s303c13f16;
  ::S2215C20_nt s303c13f17;
  ::S2215C20_nt s303c13f18;
  __tsi64 s303c13f19[2];
  int s303c13f20[4];
  ::S2215C20_nt s303c13f21;
  ::S2215C20_nt s303c13f22;
  int s303c13f23[2];
  __tsi64 s303c13f24;
  int s303c13f25[5];
  __tsi64 s303c13f26;
  char s303c13f27;
  void  mf303c13(); // _ZN10S303C13_nt8mf303c13Ev
};
//SIG(-1 S303C13_nt) C1{ m FL[2] Fc Fi FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 Fi[3] FC2 FC2 FC2 FL[2] Fi[4] FC2 FC2 Fi[2] FL Fi[5] FL Fc}


void  S303C13_nt ::mf303c13(){}

//skip512 S303C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S303C2  : S303C3 {
  int s303c2f0;
  ::S303C11_nt s303c2f1;
  ::S303C13_nt s303c2f2;
  int s303c2f3[2];
  char s303c2f4;
  int s303c2f5;
  char s303c2f6;
  ::S2215C20_nt s303c2f7;
  virtual void  v37(); // _ZN6S303C23v37Ev
  virtual void  v38(); // _ZN6S303C23v38Ev
  virtual void  v39(); // _ZN6S303C23v39Ev
  virtual void  v40(); // _ZN6S303C23v40Ev
  virtual void  v41(); // _ZN6S303C23v41Ev
  virtual void  v42(); // _ZN6S303C23v42Ev
  virtual void  v43(); // _ZN6S303C23v43Ev
  virtual void  v44(); // _ZN6S303C23v44Ev
  virtual void  v45(); // _ZN6S303C23v45Ev
  virtual void  v46(); // _ZN6S303C23v46Ev
  virtual void  v47(); // _ZN6S303C23v47Ev
  ~S303C2(); // tgen
  S303C2(); // tgen
};
//SIG(-1 S303C2) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v12 v13 v14 v15 v16} v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v28 v29 v30 v31 v32 v33 v34 v35 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi FC10{ m FC11{ m FL}} FC12{ m FL[2] Fc Fi FC13{ m Fp Fi FC14{ m}} FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13 FC13 Fi[3] FC13 FC13 FC13 FL[2] Fi[4] FC13 FC13 Fi[2] FL Fi[5] FL Fc} Fi[2] Fc Fi Fc FC13}


void  S303C2 ::v37(){vfunc_called(this, "_ZN6S303C23v37Ev");}
void  S303C2 ::v38(){vfunc_called(this, "_ZN6S303C23v38Ev");}
void  S303C2 ::v39(){vfunc_called(this, "_ZN6S303C23v39Ev");}
void  S303C2 ::v40(){vfunc_called(this, "_ZN6S303C23v40Ev");}
void  S303C2 ::v41(){vfunc_called(this, "_ZN6S303C23v41Ev");}
void  S303C2 ::v42(){vfunc_called(this, "_ZN6S303C23v42Ev");}
void  S303C2 ::v43(){vfunc_called(this, "_ZN6S303C23v43Ev");}
void  S303C2 ::v44(){vfunc_called(this, "_ZN6S303C23v44Ev");}
void  S303C2 ::v45(){vfunc_called(this, "_ZN6S303C23v45Ev");}
void  S303C2 ::v46(){vfunc_called(this, "_ZN6S303C23v46Ev");}
void  S303C2 ::v47(){vfunc_called(this, "_ZN6S303C23v47Ev");}
S303C2 ::~S303C2(){ note_dtor("S303C2", this);} // tgen
S303C2 ::S303C2(){ note_ctor("S303C2", this);} // tgen

static void Test_S303C2()
{
  extern Class_Descriptor cd_S303C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(77,113)];
    init_test(&cd_S303C2, buf);
    S303C2 *dp, &lv = *(dp=new (buf) S303C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,448), "sizeof(S303C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S303C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S303C5*)(S303C4*)(S303C3*), 0, "S303C2");
    check_base_class_offset(lv, (S303C5*)(S303C4*)(S303C3*), 0, "S303C2");
    check_base_class_offset(lv, (S303C4*)(S303C3*), 0, "S303C2");
    check_base_class_offset(lv, (S303C3*), 0, "S303C2");
    check_field_offset(lv, s303c2f0, ABISELECT(152,84), "S303C2.s303c2f0");
    check_field_offset(lv, s303c2f1, ABISELECT(160,88), "S303C2.s303c2f1");
    check_field_offset(lv, s303c2f2, ABISELECT(168,96), "S303C2.s303c2f2");
    check_field_offset(lv, s303c2f3, ABISELECT(568,416), "S303C2.s303c2f3");
    check_field_offset(lv, s303c2f4, ABISELECT(576,424), "S303C2.s303c2f4");
    check_field_offset(lv, s303c2f5, ABISELECT(580,428), "S303C2.s303c2f5");
    check_field_offset(lv, s303c2f6, ABISELECT(584,432), "S303C2.s303c2f6");
    check_field_offset(lv, s303c2f7, ABISELECT(592,436), "S303C2.s303c2f7");
    test_class_info(&lv, &cd_S303C2);
    dp->~S303C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS303C2(Test_S303C2, "S303C2", ABISELECT(608,448));

#else // __cplusplus

extern void _ZN6S303C2C1Ev();
extern void _ZN6S303C2D1Ev();
Name_Map name_map_S303C2[] = {
  NSPAIR(_ZN6S303C2C1Ev),
  NSPAIR(_ZN6S303C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S303C5;
extern VTBL_ENTRY _ZTI6S303C5[];
extern  VTBL_ENTRY _ZTV6S303C5[];
extern Class_Descriptor cd_S303C4;
extern VTBL_ENTRY _ZTI6S303C4[];
extern  VTBL_ENTRY _ZTV6S303C4[];
extern Class_Descriptor cd_S303C3;
extern VTBL_ENTRY _ZTI6S303C3[];
extern  VTBL_ENTRY _ZTV6S303C3[];
static Base_Class bases_S303C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S303C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S303C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S303C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S303C2[];
extern void _ZN6S303C2D1Ev();
extern void _ZN6S303C2D0Ev();
extern void _ZN6S303C53v13Ev();
extern void _ZN6S303C53v14Ev();
extern void _ZN6S303C53v15Ev();
extern void _ZN6S303C53v16Ev();
extern void _ZN6S303C53v17Ev();
extern void _ZN6S303C43v18Ev();
extern void _ZN6S303C43v19Ev();
extern void _ZN6S303C43v20Ev();
extern void _ZN6S303C43v21Ev();
extern void _ZN6S303C43v22Ev();
extern void _ZN6S303C43v23Ev();
extern void _ZN6S303C43v24Ev();
extern void _ZN6S303C43v25Ev();
extern void _ZN6S303C43v26Ev();
extern void _ZN6S303C43v27Ev();
extern void _ZN6S303C43v28Ev();
extern void _ZN6S303C33v29Ev();
extern void _ZN6S303C33v30Ev();
extern void _ZN6S303C33v31Ev();
extern void _ZN6S303C33v32Ev();
extern void _ZN6S303C33v33Ev();
extern void _ZN6S303C33v34Ev();
extern void _ZN6S303C33v35Ev();
extern void _ZN6S303C33v36Ev();
extern void _ZN6S303C23v37Ev();
extern void _ZN6S303C23v38Ev();
extern void _ZN6S303C23v39Ev();
extern void _ZN6S303C23v40Ev();
extern void _ZN6S303C23v41Ev();
extern void _ZN6S303C23v42Ev();
extern void _ZN6S303C23v43Ev();
extern void _ZN6S303C23v44Ev();
extern void _ZN6S303C23v45Ev();
extern void _ZN6S303C23v46Ev();
extern void _ZN6S303C23v47Ev();
static  VTBL_ENTRY vtc_S303C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S303C2[0]),
  (VTBL_ENTRY)&_ZN6S303C2D1Ev,
  (VTBL_ENTRY)&_ZN6S303C2D0Ev,
  (VTBL_ENTRY)&_ZN6S303C53v13Ev,
  (VTBL_ENTRY)&_ZN6S303C53v14Ev,
  (VTBL_ENTRY)&_ZN6S303C53v15Ev,
  (VTBL_ENTRY)&_ZN6S303C53v16Ev,
  (VTBL_ENTRY)&_ZN6S303C53v17Ev,
  (VTBL_ENTRY)&_ZN6S303C43v18Ev,
  (VTBL_ENTRY)&_ZN6S303C43v19Ev,
  (VTBL_ENTRY)&_ZN6S303C43v20Ev,
  (VTBL_ENTRY)&_ZN6S303C43v21Ev,
  (VTBL_ENTRY)&_ZN6S303C43v22Ev,
  (VTBL_ENTRY)&_ZN6S303C43v23Ev,
  (VTBL_ENTRY)&_ZN6S303C43v24Ev,
  (VTBL_ENTRY)&_ZN6S303C43v25Ev,
  (VTBL_ENTRY)&_ZN6S303C43v26Ev,
  (VTBL_ENTRY)&_ZN6S303C43v27Ev,
  (VTBL_ENTRY)&_ZN6S303C43v28Ev,
  (VTBL_ENTRY)&_ZN6S303C33v29Ev,
  (VTBL_ENTRY)&_ZN6S303C33v30Ev,
  (VTBL_ENTRY)&_ZN6S303C33v31Ev,
  (VTBL_ENTRY)&_ZN6S303C33v32Ev,
  (VTBL_ENTRY)&_ZN6S303C33v33Ev,
  (VTBL_ENTRY)&_ZN6S303C33v34Ev,
  (VTBL_ENTRY)&_ZN6S303C33v35Ev,
  (VTBL_ENTRY)&_ZN6S303C33v36Ev,
  (VTBL_ENTRY)&_ZN6S303C23v37Ev,
  (VTBL_ENTRY)&_ZN6S303C23v38Ev,
  (VTBL_ENTRY)&_ZN6S303C23v39Ev,
  (VTBL_ENTRY)&_ZN6S303C23v40Ev,
  (VTBL_ENTRY)&_ZN6S303C23v41Ev,
  (VTBL_ENTRY)&_ZN6S303C23v42Ev,
  (VTBL_ENTRY)&_ZN6S303C23v43Ev,
  (VTBL_ENTRY)&_ZN6S303C23v44Ev,
  (VTBL_ENTRY)&_ZN6S303C23v45Ev,
  (VTBL_ENTRY)&_ZN6S303C23v46Ev,
  (VTBL_ENTRY)&_ZN6S303C23v47Ev,
};
extern VTBL_ENTRY _ZTI6S303C2[];
extern  VTBL_ENTRY _ZTV6S303C2[];
Class_Descriptor cd_S303C2 = {  "S303C2", // class name
  bases_S303C2, 4,
  &(vtc_S303C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(608,448), // object size
  NSPAIRA(_ZTI6S303C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S303C2),39, //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  S303C1  : S303C2 {
  void *s303c1f0[2];
  __tsi64 s303c1f1[2];
  ::S2215C20_nt s303c1f2;
  ::S281C37_nt s303c1f3;
  virtual void  v1(); // _ZN6S303C12v1Ev
  virtual void  v2(); // _ZN6S303C12v2Ev
  virtual void  v3(); // _ZN6S303C12v3Ev
  virtual void  v4(); // _ZN6S303C12v4Ev
  virtual void  v5(); // _ZN6S303C12v5Ev
  virtual void  v6(); // _ZN6S303C12v6Ev
  virtual void  v7(); // _ZN6S303C12v7Ev
  virtual void  v8(); // _ZN6S303C12v8Ev
  virtual void  v9(); // _ZN6S303C12v9Ev
  virtual void  v10(); // _ZN6S303C13v10Ev
  virtual void  v11(); // _ZN6S303C13v11Ev
  virtual void  v12(); // _ZN6S303C13v12Ev
  ~S303C1(); // tgen
  S303C1(); // tgen
};
//SIG(1 S303C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fi} v13 v14 v15 v16 v17} v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 Fp[3] FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]}} v29 v30 v31 v32 v33 v34 v35 v36 FC7 FC10{ m Fp} Fp[3]} v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 Fi FC11{ m FC12{ m FL}} FC13{ m FL[2] Fc Fi FC14{ m Fp Fi FC15{ m}} FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC14 Fi[3] FC14 FC14 FC14 FL[2] Fi[4] FC14 FC14 Fi[2] FL Fi[5] FL Fc} Fi[2] Fc Fi Fc FC14} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[2] FL[2] FC14 FC16{ m Fp[2]}}


void  S303C1 ::v1(){vfunc_called(this, "_ZN6S303C12v1Ev");}
void  S303C1 ::v2(){vfunc_called(this, "_ZN6S303C12v2Ev");}
void  S303C1 ::v3(){vfunc_called(this, "_ZN6S303C12v3Ev");}
void  S303C1 ::v4(){vfunc_called(this, "_ZN6S303C12v4Ev");}
void  S303C1 ::v5(){vfunc_called(this, "_ZN6S303C12v5Ev");}
void  S303C1 ::v6(){vfunc_called(this, "_ZN6S303C12v6Ev");}
void  S303C1 ::v7(){vfunc_called(this, "_ZN6S303C12v7Ev");}
void  S303C1 ::v8(){vfunc_called(this, "_ZN6S303C12v8Ev");}
void  S303C1 ::v9(){vfunc_called(this, "_ZN6S303C12v9Ev");}
void  S303C1 ::v10(){vfunc_called(this, "_ZN6S303C13v10Ev");}
void  S303C1 ::v11(){vfunc_called(this, "_ZN6S303C13v11Ev");}
void  S303C1 ::v12(){vfunc_called(this, "_ZN6S303C13v12Ev");}
S303C1 ::~S303C1(){ note_dtor("S303C1", this);} // tgen
S303C1 ::S303C1(){ note_ctor("S303C1", this);} // tgen

static void Test_S303C1()
{
  extern Class_Descriptor cd_S303C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(85,124)];
    init_test(&cd_S303C1, buf);
    S303C1 *dp, &lv = *(dp=new (buf) S303C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,492), "sizeof(S303C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S303C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S303C5*)(S303C4*)(S303C3*)(S303C2*), 0, "S303C1");
    check_base_class_offset(lv, (S303C5*)(S303C4*)(S303C3*)(S303C2*), 0, "S303C1");
    check_base_class_offset(lv, (S303C4*)(S303C3*)(S303C2*), 0, "S303C1");
    check_base_class_offset(lv, (S303C3*)(S303C2*), 0, "S303C1");
    check_base_class_offset(lv, (S303C2*), 0, "S303C1");
    check_field_offset(lv, s303c1f0, ABISELECT(608,448), "S303C1.s303c1f0");
    check_field_offset(lv, s303c1f1, ABISELECT(624,456), "S303C1.s303c1f1");
    check_field_offset(lv, s303c1f2, ABISELECT(640,472), "S303C1.s303c1f2");
    check_field_offset(lv, s303c1f3, ABISELECT(656,484), "S303C1.s303c1f3");
    test_class_info(&lv, &cd_S303C1);
    dp->~S303C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS303C1(Test_S303C1, "S303C1", ABISELECT(672,492));

#else // __cplusplus

extern void _ZN6S303C1C1Ev();
extern void _ZN6S303C1D1Ev();
Name_Map name_map_S303C1[] = {
  NSPAIR(_ZN6S303C1C1Ev),
  NSPAIR(_ZN6S303C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S303C5;
extern VTBL_ENTRY _ZTI6S303C5[];
extern  VTBL_ENTRY _ZTV6S303C5[];
extern Class_Descriptor cd_S303C4;
extern VTBL_ENTRY _ZTI6S303C4[];
extern  VTBL_ENTRY _ZTV6S303C4[];
extern Class_Descriptor cd_S303C3;
extern VTBL_ENTRY _ZTI6S303C3[];
extern  VTBL_ENTRY _ZTV6S303C3[];
extern Class_Descriptor cd_S303C2;
extern VTBL_ENTRY _ZTI6S303C2[];
extern  VTBL_ENTRY _ZTV6S303C2[];
static Base_Class bases_S303C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S303C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S303C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S303C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S303C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S303C1[];
extern void _ZN6S303C1D1Ev();
extern void _ZN6S303C1D0Ev();
extern void _ZN6S303C53v13Ev();
extern void _ZN6S303C53v14Ev();
extern void _ZN6S303C53v15Ev();
extern void _ZN6S303C53v16Ev();
extern void _ZN6S303C53v17Ev();
extern void _ZN6S303C43v18Ev();
extern void _ZN6S303C43v19Ev();
extern void _ZN6S303C43v20Ev();
extern void _ZN6S303C43v21Ev();
extern void _ZN6S303C43v22Ev();
extern void _ZN6S303C43v23Ev();
extern void _ZN6S303C43v24Ev();
extern void _ZN6S303C43v25Ev();
extern void _ZN6S303C43v26Ev();
extern void _ZN6S303C43v27Ev();
extern void _ZN6S303C43v28Ev();
extern void _ZN6S303C33v29Ev();
extern void _ZN6S303C33v30Ev();
extern void _ZN6S303C33v31Ev();
extern void _ZN6S303C33v32Ev();
extern void _ZN6S303C33v33Ev();
extern void _ZN6S303C33v34Ev();
extern void _ZN6S303C33v35Ev();
extern void _ZN6S303C33v36Ev();
extern void _ZN6S303C23v37Ev();
extern void _ZN6S303C23v38Ev();
extern void _ZN6S303C23v39Ev();
extern void _ZN6S303C23v40Ev();
extern void _ZN6S303C23v41Ev();
extern void _ZN6S303C23v42Ev();
extern void _ZN6S303C23v43Ev();
extern void _ZN6S303C23v44Ev();
extern void _ZN6S303C23v45Ev();
extern void _ZN6S303C23v46Ev();
extern void _ZN6S303C23v47Ev();
extern void _ZN6S303C12v1Ev();
extern void _ZN6S303C12v2Ev();
extern void _ZN6S303C12v3Ev();
extern void _ZN6S303C12v4Ev();
extern void _ZN6S303C12v5Ev();
extern void _ZN6S303C12v6Ev();
extern void _ZN6S303C12v7Ev();
extern void _ZN6S303C12v8Ev();
extern void _ZN6S303C12v9Ev();
extern void _ZN6S303C13v10Ev();
extern void _ZN6S303C13v11Ev();
extern void _ZN6S303C13v12Ev();
static  VTBL_ENTRY vtc_S303C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S303C1[0]),
  (VTBL_ENTRY)&_ZN6S303C1D1Ev,
  (VTBL_ENTRY)&_ZN6S303C1D0Ev,
  (VTBL_ENTRY)&_ZN6S303C53v13Ev,
  (VTBL_ENTRY)&_ZN6S303C53v14Ev,
  (VTBL_ENTRY)&_ZN6S303C53v15Ev,
  (VTBL_ENTRY)&_ZN6S303C53v16Ev,
  (VTBL_ENTRY)&_ZN6S303C53v17Ev,
  (VTBL_ENTRY)&_ZN6S303C43v18Ev,
  (VTBL_ENTRY)&_ZN6S303C43v19Ev,
  (VTBL_ENTRY)&_ZN6S303C43v20Ev,
  (VTBL_ENTRY)&_ZN6S303C43v21Ev,
  (VTBL_ENTRY)&_ZN6S303C43v22Ev,
  (VTBL_ENTRY)&_ZN6S303C43v23Ev,
  (VTBL_ENTRY)&_ZN6S303C43v24Ev,
  (VTBL_ENTRY)&_ZN6S303C43v25Ev,
  (VTBL_ENTRY)&_ZN6S303C43v26Ev,
  (VTBL_ENTRY)&_ZN6S303C43v27Ev,
  (VTBL_ENTRY)&_ZN6S303C43v28Ev,
  (VTBL_ENTRY)&_ZN6S303C33v29Ev,
  (VTBL_ENTRY)&_ZN6S303C33v30Ev,
  (VTBL_ENTRY)&_ZN6S303C33v31Ev,
  (VTBL_ENTRY)&_ZN6S303C33v32Ev,
  (VTBL_ENTRY)&_ZN6S303C33v33Ev,
  (VTBL_ENTRY)&_ZN6S303C33v34Ev,
  (VTBL_ENTRY)&_ZN6S303C33v35Ev,
  (VTBL_ENTRY)&_ZN6S303C33v36Ev,
  (VTBL_ENTRY)&_ZN6S303C23v37Ev,
  (VTBL_ENTRY)&_ZN6S303C23v38Ev,
  (VTBL_ENTRY)&_ZN6S303C23v39Ev,
  (VTBL_ENTRY)&_ZN6S303C23v40Ev,
  (VTBL_ENTRY)&_ZN6S303C23v41Ev,
  (VTBL_ENTRY)&_ZN6S303C23v42Ev,
  (VTBL_ENTRY)&_ZN6S303C23v43Ev,
  (VTBL_ENTRY)&_ZN6S303C23v44Ev,
  (VTBL_ENTRY)&_ZN6S303C23v45Ev,
  (VTBL_ENTRY)&_ZN6S303C23v46Ev,
  (VTBL_ENTRY)&_ZN6S303C23v47Ev,
  (VTBL_ENTRY)&_ZN6S303C12v1Ev,
  (VTBL_ENTRY)&_ZN6S303C12v2Ev,
  (VTBL_ENTRY)&_ZN6S303C12v3Ev,
  (VTBL_ENTRY)&_ZN6S303C12v4Ev,
  (VTBL_ENTRY)&_ZN6S303C12v5Ev,
  (VTBL_ENTRY)&_ZN6S303C12v6Ev,
  (VTBL_ENTRY)&_ZN6S303C12v7Ev,
  (VTBL_ENTRY)&_ZN6S303C12v8Ev,
  (VTBL_ENTRY)&_ZN6S303C12v9Ev,
  (VTBL_ENTRY)&_ZN6S303C13v10Ev,
  (VTBL_ENTRY)&_ZN6S303C13v11Ev,
  (VTBL_ENTRY)&_ZN6S303C13v12Ev,
};
extern VTBL_ENTRY _ZTI6S303C1[];
extern  VTBL_ENTRY _ZTV6S303C1[];
Class_Descriptor cd_S303C1 = {  "S303C1", // class name
  bases_S303C1, 5,
  &(vtc_S303C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(672,492), // object size
  NSPAIRA(_ZTI6S303C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S303C1),51, //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  S744C4  : S770C5_nt {
  virtual void  v16(); // _ZN6S744C43v16Ev
  virtual void  v17(); // _ZN6S744C43v17Ev
  virtual void  v18(); // _ZN6S744C43v18Ev
  virtual void  v19(); // _ZN6S744C43v19Ev
  virtual void  v20(); // _ZN6S744C43v20Ev
  ~S744C4(); // tgen
  S744C4(); // tgen
};
//SIG(-1 S744C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S744C4 ::v16(){vfunc_called(this, "_ZN6S744C43v16Ev");}
void  S744C4 ::v17(){vfunc_called(this, "_ZN6S744C43v17Ev");}
void  S744C4 ::v18(){vfunc_called(this, "_ZN6S744C43v18Ev");}
void  S744C4 ::v19(){vfunc_called(this, "_ZN6S744C43v19Ev");}
void  S744C4 ::v20(){vfunc_called(this, "_ZN6S744C43v20Ev");}
S744C4 ::~S744C4(){ note_dtor("S744C4", this);} // tgen
S744C4 ::S744C4(){ note_ctor("S744C4", this);} // tgen

static void Test_S744C4()
{
  extern Class_Descriptor cd_S744C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S744C4, buf);
    S744C4 *dp, &lv = *(dp=new (buf) S744C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S744C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S744C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S744C4");
    test_class_info(&lv, &cd_S744C4);
    dp->~S744C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS744C4(Test_S744C4, "S744C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S744C4C1Ev();
extern void _ZN6S744C4D1Ev();
Name_Map name_map_S744C4[] = {
  NSPAIR(_ZN6S744C4C1Ev),
  NSPAIR(_ZN6S744C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S744C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S744C4[];
extern void _ZN6S744C4D1Ev();
extern void _ZN6S744C4D0Ev();
extern void _ZN6S744C43v16Ev();
extern void _ZN6S744C43v17Ev();
extern void _ZN6S744C43v18Ev();
extern void _ZN6S744C43v19Ev();
extern void _ZN6S744C43v20Ev();
static  VTBL_ENTRY vtc_S744C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S744C4[0]),
  (VTBL_ENTRY)&_ZN6S744C4D1Ev,
  (VTBL_ENTRY)&_ZN6S744C4D0Ev,
  (VTBL_ENTRY)&_ZN6S744C43v16Ev,
  (VTBL_ENTRY)&_ZN6S744C43v17Ev,
  (VTBL_ENTRY)&_ZN6S744C43v18Ev,
  (VTBL_ENTRY)&_ZN6S744C43v19Ev,
  (VTBL_ENTRY)&_ZN6S744C43v20Ev,
};
extern VTBL_ENTRY _ZTI6S744C4[];
extern  VTBL_ENTRY _ZTV6S744C4[];
Class_Descriptor cd_S744C4 = {  "S744C4", // class name
  bases_S744C4, 1,
  &(vtc_S744C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S744C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S744C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S744C3  : S744C4 {
  void *s744c3f0[3];
  ::S770C6_nt s744c3f1;
  virtual void  v21(); // _ZN6S744C33v21Ev
  virtual void  v22(); // _ZN6S744C33v22Ev
  virtual void  v23(); // _ZN6S744C33v23Ev
  virtual void  v24(); // _ZN6S744C33v24Ev
  virtual void  v25(); // _ZN6S744C33v25Ev
  virtual void  v26(); // _ZN6S744C33v26Ev
  virtual void  v27(); // _ZN6S744C33v27Ev
  virtual void  v28(); // _ZN6S744C33v28Ev
  virtual void  v29(); // _ZN6S744C33v29Ev
  virtual void  v30(); // _ZN6S744C33v30Ev
  virtual void  v31(); // _ZN6S744C33v31Ev
  ~S744C3(); // tgen
  S744C3(); // tgen
};
//SIG(-1 S744C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S744C3 ::v21(){vfunc_called(this, "_ZN6S744C33v21Ev");}
void  S744C3 ::v22(){vfunc_called(this, "_ZN6S744C33v22Ev");}
void  S744C3 ::v23(){vfunc_called(this, "_ZN6S744C33v23Ev");}
void  S744C3 ::v24(){vfunc_called(this, "_ZN6S744C33v24Ev");}
void  S744C3 ::v25(){vfunc_called(this, "_ZN6S744C33v25Ev");}
void  S744C3 ::v26(){vfunc_called(this, "_ZN6S744C33v26Ev");}
void  S744C3 ::v27(){vfunc_called(this, "_ZN6S744C33v27Ev");}
void  S744C3 ::v28(){vfunc_called(this, "_ZN6S744C33v28Ev");}
void  S744C3 ::v29(){vfunc_called(this, "_ZN6S744C33v29Ev");}
void  S744C3 ::v30(){vfunc_called(this, "_ZN6S744C33v30Ev");}
void  S744C3 ::v31(){vfunc_called(this, "_ZN6S744C33v31Ev");}
S744C3 ::~S744C3(){ note_dtor("S744C3", this);} // tgen
S744C3 ::S744C3(){ note_ctor("S744C3", this);} // tgen

static void Test_S744C3()
{
  extern Class_Descriptor cd_S744C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S744C3, buf);
    S744C3 *dp, &lv = *(dp=new (buf) S744C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S744C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S744C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S744C4*), 0, "S744C3");
    check_base_class_offset(lv, (S744C4*), 0, "S744C3");
    check_field_offset(lv, s744c3f0, ABISELECT(16,8), "S744C3.s744c3f0");
    check_field_offset(lv, s744c3f1, ABISELECT(40,20), "S744C3.s744c3f1");
    test_class_info(&lv, &cd_S744C3);
    dp->~S744C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS744C3(Test_S744C3, "S744C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S744C3C1Ev();
extern void _ZN6S744C3D1Ev();
Name_Map name_map_S744C3[] = {
  NSPAIR(_ZN6S744C3C1Ev),
  NSPAIR(_ZN6S744C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S744C4;
extern VTBL_ENTRY _ZTI6S744C4[];
extern  VTBL_ENTRY _ZTV6S744C4[];
static Base_Class bases_S744C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S744C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S744C3[];
extern void _ZN6S744C3D1Ev();
extern void _ZN6S744C3D0Ev();
extern void _ZN6S744C43v16Ev();
extern void _ZN6S744C43v17Ev();
extern void _ZN6S744C43v18Ev();
extern void _ZN6S744C43v19Ev();
extern void _ZN6S744C43v20Ev();
extern void _ZN6S744C33v21Ev();
extern void _ZN6S744C33v22Ev();
extern void _ZN6S744C33v23Ev();
extern void _ZN6S744C33v24Ev();
extern void _ZN6S744C33v25Ev();
extern void _ZN6S744C33v26Ev();
extern void _ZN6S744C33v27Ev();
extern void _ZN6S744C33v28Ev();
extern void _ZN6S744C33v29Ev();
extern void _ZN6S744C33v30Ev();
extern void _ZN6S744C33v31Ev();
static  VTBL_ENTRY vtc_S744C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S744C3[0]),
  (VTBL_ENTRY)&_ZN6S744C3D1Ev,
  (VTBL_ENTRY)&_ZN6S744C3D0Ev,
  (VTBL_ENTRY)&_ZN6S744C43v16Ev,
  (VTBL_ENTRY)&_ZN6S744C43v17Ev,
  (VTBL_ENTRY)&_ZN6S744C43v18Ev,
  (VTBL_ENTRY)&_ZN6S744C43v19Ev,
  (VTBL_ENTRY)&_ZN6S744C43v20Ev,
  (VTBL_ENTRY)&_ZN6S744C33v21Ev,
  (VTBL_ENTRY)&_ZN6S744C33v22Ev,
  (VTBL_ENTRY)&_ZN6S744C33v23Ev,
  (VTBL_ENTRY)&_ZN6S744C33v24Ev,
  (VTBL_ENTRY)&_ZN6S744C33v25Ev,
  (VTBL_ENTRY)&_ZN6S744C33v26Ev,
  (VTBL_ENTRY)&_ZN6S744C33v27Ev,
  (VTBL_ENTRY)&_ZN6S744C33v28Ev,
  (VTBL_ENTRY)&_ZN6S744C33v29Ev,
  (VTBL_ENTRY)&_ZN6S744C33v30Ev,
  (VTBL_ENTRY)&_ZN6S744C33v31Ev,
};
extern VTBL_ENTRY _ZTI6S744C3[];
extern  VTBL_ENTRY _ZTV6S744C3[];
Class_Descriptor cd_S744C3 = {  "S744C3", // class name
  bases_S744C3, 2,
  &(vtc_S744C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S744C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S744C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S744C2  : S744C3 {
  ::S770C6_nt s744c2f0;
  ::S770C9_nt s744c2f1;
  void *s744c2f2;
  virtual void  v32(); // _ZN6S744C23v32Ev
  virtual void  v33(); // _ZN6S744C23v33Ev
  virtual void  v34(); // _ZN6S744C23v34Ev
  virtual void  v35(); // _ZN6S744C23v35Ev
  ~S744C2(); // tgen
  S744C2(); // tgen
};
//SIG(-1 S744C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v5 v6 v7 v8 v9} v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 FC5 FC8{ m Fp} Fp}


void  S744C2 ::v32(){vfunc_called(this, "_ZN6S744C23v32Ev");}
void  S744C2 ::v33(){vfunc_called(this, "_ZN6S744C23v33Ev");}
void  S744C2 ::v34(){vfunc_called(this, "_ZN6S744C23v34Ev");}
void  S744C2 ::v35(){vfunc_called(this, "_ZN6S744C23v35Ev");}
S744C2 ::~S744C2(){ note_dtor("S744C2", this);} // tgen
S744C2 ::S744C2(){ note_ctor("S744C2", this);} // tgen

static void Test_S744C2()
{
  extern Class_Descriptor cd_S744C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,20)];
    init_test(&cd_S744C2, buf);
    S744C2 *dp, &lv = *(dp=new (buf) S744C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,76), "sizeof(S744C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S744C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S744C4*)(S744C3*), 0, "S744C2");
    check_base_class_offset(lv, (S744C4*)(S744C3*), 0, "S744C2");
    check_base_class_offset(lv, (S744C3*), 0, "S744C2");
    check_field_offset(lv, s744c2f0, ABISELECT(80,44), "S744C2.s744c2f0");
    check_field_offset(lv, s744c2f1, ABISELECT(120,68), "S744C2.s744c2f1");
    check_field_offset(lv, s744c2f2, ABISELECT(128,72), "S744C2.s744c2f2");
    test_class_info(&lv, &cd_S744C2);
    dp->~S744C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS744C2(Test_S744C2, "S744C2", ABISELECT(136,76));

#else // __cplusplus

extern void _ZN6S744C2C1Ev();
extern void _ZN6S744C2D1Ev();
Name_Map name_map_S744C2[] = {
  NSPAIR(_ZN6S744C2C1Ev),
  NSPAIR(_ZN6S744C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S744C4;
extern VTBL_ENTRY _ZTI6S744C4[];
extern  VTBL_ENTRY _ZTV6S744C4[];
extern Class_Descriptor cd_S744C3;
extern VTBL_ENTRY _ZTI6S744C3[];
extern  VTBL_ENTRY _ZTV6S744C3[];
static Base_Class bases_S744C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S744C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S744C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S744C2[];
extern void _ZN6S744C2D1Ev();
extern void _ZN6S744C2D0Ev();
extern void _ZN6S744C43v16Ev();
extern void _ZN6S744C43v17Ev();
extern void _ZN6S744C43v18Ev();
extern void _ZN6S744C43v19Ev();
extern void _ZN6S744C43v20Ev();
extern void _ZN6S744C33v21Ev();
extern void _ZN6S744C33v22Ev();
extern void _ZN6S744C33v23Ev();
extern void _ZN6S744C33v24Ev();
extern void _ZN6S744C33v25Ev();
extern void _ZN6S744C33v26Ev();
extern void _ZN6S744C33v27Ev();
extern void _ZN6S744C33v28Ev();
extern void _ZN6S744C33v29Ev();
extern void _ZN6S744C33v30Ev();
extern void _ZN6S744C33v31Ev();
extern void _ZN6S744C23v32Ev();
extern void _ZN6S744C23v33Ev();
extern void _ZN6S744C23v34Ev();
extern void _ZN6S744C23v35Ev();
static  VTBL_ENTRY vtc_S744C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S744C2[0]),
  (VTBL_ENTRY)&_ZN6S744C2D1Ev,
  (VTBL_ENTRY)&_ZN6S744C2D0Ev,
  (VTBL_ENTRY)&_ZN6S744C43v16Ev,
  (VTBL_ENTRY)&_ZN6S744C43v17Ev,
  (VTBL_ENTRY)&_ZN6S744C43v18Ev,
  (VTBL_ENTRY)&_ZN6S744C43v19Ev,
  (VTBL_ENTRY)&_ZN6S744C43v20Ev,
  (VTBL_ENTRY)&_ZN6S744C33v21Ev,
  (VTBL_ENTRY)&_ZN6S744C33v22Ev,
  (VTBL_ENTRY)&_ZN6S744C33v23Ev,
  (VTBL_ENTRY)&_ZN6S744C33v24Ev,
  (VTBL_ENTRY)&_ZN6S744C33v25Ev,
  (VTBL_ENTRY)&_ZN6S744C33v26Ev,
  (VTBL_ENTRY)&_ZN6S744C33v27Ev,
  (VTBL_ENTRY)&_ZN6S744C33v28Ev,
  (VTBL_ENTRY)&_ZN6S744C33v29Ev,
  (VTBL_ENTRY)&_ZN6S744C33v30Ev,
  (VTBL_ENTRY)&_ZN6S744C33v31Ev,
  (VTBL_ENTRY)&_ZN6S744C23v32Ev,
  (VTBL_ENTRY)&_ZN6S744C23v33Ev,
  (VTBL_ENTRY)&_ZN6S744C23v34Ev,
  (VTBL_ENTRY)&_ZN6S744C23v35Ev,
};
extern VTBL_ENTRY _ZTI6S744C2[];
extern  VTBL_ENTRY _ZTV6S744C2[];
Class_Descriptor cd_S744C2 = {  "S744C2", // class name
  bases_S744C2, 3,
  &(vtc_S744C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,76), // object size
  NSPAIRA(_ZTI6S744C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S744C2),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  S744C15_nt  {
  void *s744c15f0;
  void  mf744c15(); // _ZN10S744C15_nt8mf744c15Ev
};
//SIG(-1 S744C15_nt) C1{ m Fp}


void  S744C15_nt ::mf744c15(){}

//skip512 S744C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S744C14_nt  {
  void *s744c14f0;
  int s744c14f1[2];
  ::S744C15_nt s744c14f2;
  void  mf744c14(); // _ZN10S744C14_nt8mf744c14Ev
};
//SIG(-1 S744C14_nt) C1{ m Fp Fi[2] FC2{ m Fp}}


void  S744C14_nt ::mf744c14(){}

//skip512 S744C14_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

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



static void Test_S744C13()
{
  extern Class_Descriptor cd_S744C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S744C13, buf);
    S744C13 &lv = *(new (buf) S744C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S744C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S744C13)");
    check_base_class_offset(lv, (S744C14_nt*), 0, "S744C13");
    test_class_info(&lv, &cd_S744C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS744C13(Test_S744C13, "S744C13", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S744C14_nt;
static Base_Class bases_S744C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S744C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S744C13 = {  "S744C13", // class name
  bases_S744C13, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S744C10  {
  int s744c10f0;
  __tsi64 s744c10f1[2];
  char s744c10f2;
  int s744c10f3;
  ::S2215C20_nt s744c10f4;
  ::S2215C20_nt s744c10f5;
  ::S744C13 s744c10f6;
  void  mf744c10(); // _ZN7S744C108mf744c10Ev
};
//SIG(-1 S744C10) C1{ m Fi FL[2] Fc Fi FC2{ m Fp Fi FC3{ m}} FC2 FC4{ BC5{ m Fp Fi[2] FC6{ m Fp}}}}


void  S744C10 ::mf744c10(){}

static void Test_S744C10()
{
  {
    init_simple_test("S744C10");
    S744C10 lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S744C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S744C10)");
    check_field_offset(lv, s744c10f0, 0, "S744C10.s744c10f0");
    check_field_offset(lv, s744c10f1, ABISELECT(8,4), "S744C10.s744c10f1");
    check_field_offset(lv, s744c10f2, ABISELECT(24,20), "S744C10.s744c10f2");
    check_field_offset(lv, s744c10f3, ABISELECT(28,24), "S744C10.s744c10f3");
    check_field_offset(lv, s744c10f4, ABISELECT(32,28), "S744C10.s744c10f4");
    check_field_offset(lv, s744c10f5, ABISELECT(48,40), "S744C10.s744c10f5");
    check_field_offset(lv, s744c10f6, ABISELECT(64,52), "S744C10.s744c10f6");
  }
}
static Arrange_To_Call_Me vS744C10(Test_S744C10, "S744C10", ABISELECT(88,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S744C24_nt  {
  int s744c24f0[2];
  void  mf744c24(); // _ZN10S744C24_nt8mf744c24Ev
};
//SIG(-1 S744C24_nt) C1{ m Fi[2]}


void  S744C24_nt ::mf744c24(){}

//skip512 S744C24_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S744C22_nt  {
  ::S281C7_nt s744c22f0;
  ::S744C24_nt s744c22f1;
  void  mf744c22(); // _ZN10S744C22_nt8mf744c22Ev
};
//SIG(-1 S744C22_nt) C1{ m FC2{ m Fi[2]} FC3{ m Fi[2]}}


void  S744C22_nt ::mf744c22(){}

//skip512 S744C22_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S744C21_nt  {
  void *s744c21f0[2];
  int s744c21f1[2];
  void *s744c21f2;
  __tsi64 s744c21f3;
  void *s744c21f4[9];
  short s744c21f5;
  void *s744c21f6[2];
  ::S744C22_nt s744c21f7;
  ::S744C24_nt s744c21f8;
  char s744c21f9;
  int s744c21f10[3];
  char s744c21f11;
  int s744c21f12[6];
  char s744c21f13;
  void  mf744c21(); // _ZN10S744C21_nt8mf744c21Ev
};
//SIG(-1 S744C21_nt) C1{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC2{ m FC3{ m Fi[2]} FC4{ m Fi[2]}} FC4 Fc Fi[3] Fc Fi[6] Fc}


void  S744C21_nt ::mf744c21(){}

//skip512 S744C21_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S744C1  : S744C2 {
  void *s744c1f0[4];
  ::S744C10 s744c1f1;
  ::S281C30_nt s744c1f2;
  void *s744c1f3[2];
  int s744c1f4;
  ::S770C9_nt s744c1f5;
  __tsi64 s744c1f6;
  char s744c1f7;
  void *s744c1f8;
  ::S2215C13_nt s744c1f9;
  ::S2215C13_nt s744c1f10;
  void *s744c1f11;
  ::S2215C13_nt s744c1f12;
  ::S303C11_nt s744c1f13;
  char s744c1f14[3];
  ::S744C21_nt s744c1f15;
  virtual  ~S744C1(); // _ZN6S744C1D1Ev
  virtual void  v1(); // _ZN6S744C12v1Ev
  virtual void  v2(); // _ZN6S744C12v2Ev
  virtual void  v3(); // _ZN6S744C12v3Ev
  virtual void  v4(); // _ZN6S744C12v4Ev
  virtual void  v5(); // _ZN6S744C12v5Ev
  virtual void  v6(); // _ZN6S744C12v6Ev
  virtual void  v7(); // _ZN6S744C12v7Ev
  virtual void  v8(); // _ZN6S744C12v8Ev
  virtual void  v9(); // _ZN6S744C12v9Ev
  virtual void  v10(); // _ZN6S744C13v10Ev
  virtual void  v11(); // _ZN6S744C13v11Ev
  virtual void  v12(); // _ZN6S744C13v12Ev
  virtual void  v13(); // _ZN6S744C13v13Ev
  virtual void  v14(); // _ZN6S744C13v14Ev
  virtual void  v15(); // _ZN6S744C13v15Ev
  S744C1(); // tgen
};
//SIG(1 S744C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v16 v17 v18 v19 v20} v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v32 v33 v34 v35 FC6 FC9{ m Fp} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp[4] FC10{ m Fi FL[2] Fc Fi FC11{ m Fp Fi FC12{ m}} FC11 FC13{ BC14{ m Fp Fi[2] FC15{ m Fp}}}} FC16{ m Fi[3]} Fp[2] Fi FC9 FL Fc Fp FC17{ m FC18{ m FL[2]}} FC17 Fp FC17 FC19{ m FC20{ m FL}} Fc[3] FC21{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC22{ m FC23{ m Fi[2]} FC24{ m Fi[2]}} FC24 Fc Fi[3] Fc Fi[6] Fc}}


 S744C1 ::~S744C1(){ note_dtor("S744C1", this);}
void  S744C1 ::v1(){vfunc_called(this, "_ZN6S744C12v1Ev");}
void  S744C1 ::v2(){vfunc_called(this, "_ZN6S744C12v2Ev");}
void  S744C1 ::v3(){vfunc_called(this, "_ZN6S744C12v3Ev");}
void  S744C1 ::v4(){vfunc_called(this, "_ZN6S744C12v4Ev");}
void  S744C1 ::v5(){vfunc_called(this, "_ZN6S744C12v5Ev");}
void  S744C1 ::v6(){vfunc_called(this, "_ZN6S744C12v6Ev");}
void  S744C1 ::v7(){vfunc_called(this, "_ZN6S744C12v7Ev");}
void  S744C1 ::v8(){vfunc_called(this, "_ZN6S744C12v8Ev");}
void  S744C1 ::v9(){vfunc_called(this, "_ZN6S744C12v9Ev");}
void  S744C1 ::v10(){vfunc_called(this, "_ZN6S744C13v10Ev");}
void  S744C1 ::v11(){vfunc_called(this, "_ZN6S744C13v11Ev");}
void  S744C1 ::v12(){vfunc_called(this, "_ZN6S744C13v12Ev");}
void  S744C1 ::v13(){vfunc_called(this, "_ZN6S744C13v13Ev");}
void  S744C1 ::v14(){vfunc_called(this, "_ZN6S744C13v14Ev");}
void  S744C1 ::v15(){vfunc_called(this, "_ZN6S744C13v15Ev");}
S744C1 ::S744C1(){ note_ctor("S744C1", this);} // tgen

static void Test_S744C1()
{
  extern Class_Descriptor cd_S744C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(77,105)];
    init_test(&cd_S744C1, buf);
    S744C1 *dp, &lv = *(dp=new (buf) S744C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,416), "sizeof(S744C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S744C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S744C4*)(S744C3*)(S744C2*), 0, "S744C1");
    check_base_class_offset(lv, (S744C4*)(S744C3*)(S744C2*), 0, "S744C1");
    check_base_class_offset(lv, (S744C3*)(S744C2*), 0, "S744C1");
    check_base_class_offset(lv, (S744C2*), 0, "S744C1");
    check_field_offset(lv, s744c1f0, ABISELECT(136,76), "S744C1.s744c1f0");
    check_field_offset(lv, s744c1f1, ABISELECT(168,92), "S744C1.s744c1f1");
    check_field_offset(lv, s744c1f2, ABISELECT(256,160), "S744C1.s744c1f2");
    check_field_offset(lv, s744c1f3, ABISELECT(272,172), "S744C1.s744c1f3");
    check_field_offset(lv, s744c1f4, ABISELECT(288,180), "S744C1.s744c1f4");
    check_field_offset(lv, s744c1f5, ABISELECT(296,184), "S744C1.s744c1f5");
    check_field_offset(lv, s744c1f6, ABISELECT(304,188), "S744C1.s744c1f6");
    check_field_offset(lv, s744c1f7, ABISELECT(312,196), "S744C1.s744c1f7");
    check_field_offset(lv, s744c1f8, ABISELECT(320,200), "S744C1.s744c1f8");
    check_field_offset(lv, s744c1f9, ABISELECT(328,204), "S744C1.s744c1f9");
    check_field_offset(lv, s744c1f10, ABISELECT(344,220), "S744C1.s744c1f10");
    check_field_offset(lv, s744c1f11, ABISELECT(360,236), "S744C1.s744c1f11");
    check_field_offset(lv, s744c1f12, ABISELECT(368,240), "S744C1.s744c1f12");
    check_field_offset(lv, s744c1f13, ABISELECT(384,256), "S744C1.s744c1f13");
    check_field_offset(lv, s744c1f14, ABISELECT(392,264), "S744C1.s744c1f14");
    check_field_offset(lv, s744c1f15, ABISELECT(400,268), "S744C1.s744c1f15");
    test_class_info(&lv, &cd_S744C1);
    dp->~S744C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS744C1(Test_S744C1, "S744C1", ABISELECT(608,416));

#else // __cplusplus

extern void _ZN6S744C1C1Ev();
extern void _ZN6S744C1D1Ev();
Name_Map name_map_S744C1[] = {
  NSPAIR(_ZN6S744C1C1Ev),
  NSPAIR(_ZN6S744C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S744C4;
extern VTBL_ENTRY _ZTI6S744C4[];
extern  VTBL_ENTRY _ZTV6S744C4[];
extern Class_Descriptor cd_S744C3;
extern VTBL_ENTRY _ZTI6S744C3[];
extern  VTBL_ENTRY _ZTV6S744C3[];
extern Class_Descriptor cd_S744C2;
extern VTBL_ENTRY _ZTI6S744C2[];
extern  VTBL_ENTRY _ZTV6S744C2[];
static Base_Class bases_S744C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S744C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S744C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S744C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S744C1[];
extern void _ZN6S744C1D1Ev();
extern void _ZN6S744C1D0Ev();
extern void _ZN6S744C43v16Ev();
extern void _ZN6S744C43v17Ev();
extern void _ZN6S744C43v18Ev();
extern void _ZN6S744C43v19Ev();
extern void _ZN6S744C43v20Ev();
extern void _ZN6S744C33v21Ev();
extern void _ZN6S744C33v22Ev();
extern void _ZN6S744C33v23Ev();
extern void _ZN6S744C33v24Ev();
extern void _ZN6S744C33v25Ev();
extern void _ZN6S744C33v26Ev();
extern void _ZN6S744C33v27Ev();
extern void _ZN6S744C33v28Ev();
extern void _ZN6S744C33v29Ev();
extern void _ZN6S744C33v30Ev();
extern void _ZN6S744C33v31Ev();
extern void _ZN6S744C23v32Ev();
extern void _ZN6S744C23v33Ev();
extern void _ZN6S744C23v34Ev();
extern void _ZN6S744C23v35Ev();
extern void _ZN6S744C12v1Ev();
extern void _ZN6S744C12v2Ev();
extern void _ZN6S744C12v3Ev();
extern void _ZN6S744C12v4Ev();
extern void _ZN6S744C12v5Ev();
extern void _ZN6S744C12v6Ev();
extern void _ZN6S744C12v7Ev();
extern void _ZN6S744C12v8Ev();
extern void _ZN6S744C12v9Ev();
extern void _ZN6S744C13v10Ev();
extern void _ZN6S744C13v11Ev();
extern void _ZN6S744C13v12Ev();
extern void _ZN6S744C13v13Ev();
extern void _ZN6S744C13v14Ev();
extern void _ZN6S744C13v15Ev();
static  VTBL_ENTRY vtc_S744C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S744C1[0]),
  (VTBL_ENTRY)&_ZN6S744C1D1Ev,
  (VTBL_ENTRY)&_ZN6S744C1D0Ev,
  (VTBL_ENTRY)&_ZN6S744C43v16Ev,
  (VTBL_ENTRY)&_ZN6S744C43v17Ev,
  (VTBL_ENTRY)&_ZN6S744C43v18Ev,
  (VTBL_ENTRY)&_ZN6S744C43v19Ev,
  (VTBL_ENTRY)&_ZN6S744C43v20Ev,
  (VTBL_ENTRY)&_ZN6S744C33v21Ev,
  (VTBL_ENTRY)&_ZN6S744C33v22Ev,
  (VTBL_ENTRY)&_ZN6S744C33v23Ev,
  (VTBL_ENTRY)&_ZN6S744C33v24Ev,
  (VTBL_ENTRY)&_ZN6S744C33v25Ev,
  (VTBL_ENTRY)&_ZN6S744C33v26Ev,
  (VTBL_ENTRY)&_ZN6S744C33v27Ev,
  (VTBL_ENTRY)&_ZN6S744C33v28Ev,
  (VTBL_ENTRY)&_ZN6S744C33v29Ev,
  (VTBL_ENTRY)&_ZN6S744C33v30Ev,
  (VTBL_ENTRY)&_ZN6S744C33v31Ev,
  (VTBL_ENTRY)&_ZN6S744C23v32Ev,
  (VTBL_ENTRY)&_ZN6S744C23v33Ev,
  (VTBL_ENTRY)&_ZN6S744C23v34Ev,
  (VTBL_ENTRY)&_ZN6S744C23v35Ev,
  (VTBL_ENTRY)&_ZN6S744C12v1Ev,
  (VTBL_ENTRY)&_ZN6S744C12v2Ev,
  (VTBL_ENTRY)&_ZN6S744C12v3Ev,
  (VTBL_ENTRY)&_ZN6S744C12v4Ev,
  (VTBL_ENTRY)&_ZN6S744C12v5Ev,
  (VTBL_ENTRY)&_ZN6S744C12v6Ev,
  (VTBL_ENTRY)&_ZN6S744C12v7Ev,
  (VTBL_ENTRY)&_ZN6S744C12v8Ev,
  (VTBL_ENTRY)&_ZN6S744C12v9Ev,
  (VTBL_ENTRY)&_ZN6S744C13v10Ev,
  (VTBL_ENTRY)&_ZN6S744C13v11Ev,
  (VTBL_ENTRY)&_ZN6S744C13v12Ev,
  (VTBL_ENTRY)&_ZN6S744C13v13Ev,
  (VTBL_ENTRY)&_ZN6S744C13v14Ev,
  (VTBL_ENTRY)&_ZN6S744C13v15Ev,
};
extern VTBL_ENTRY _ZTI6S744C1[];
extern  VTBL_ENTRY _ZTV6S744C1[];
Class_Descriptor cd_S744C1 = {  "S744C1", // class name
  bases_S744C1, 4,
  &(vtc_S744C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(608,416), // object size
  NSPAIRA(_ZTI6S744C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S744C1),39, //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  S3511C4  {
  int s3511c4f0;
  void *s3511c4f1;
  ::S281C37_nt s3511c4f2;
  virtual void  v1(); // _ZN7S3511C42v1Ev
  ~S3511C4(); // tgen
  S3511C4(); // tgen
};
//SIG(-1 S3511C4) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S3511C4()
{
  extern Class_Descriptor cd_S3511C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3511C4, buf);
    S3511C4 *dp, &lv = *(dp=new (buf) S3511C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3511C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3511C4)");
    check_field_offset(lv, s3511c4f0, ABISELECT(8,4), "S3511C4.s3511c4f0");
    check_field_offset(lv, s3511c4f1, ABISELECT(16,8), "S3511C4.s3511c4f1");
    check_field_offset(lv, s3511c4f2, ABISELECT(24,12), "S3511C4.s3511c4f2");
    test_class_info(&lv, &cd_S3511C4);
    dp->~S3511C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3511C4(Test_S3511C4, "S3511C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3511C4C1Ev();
extern void _ZN7S3511C4D1Ev();
Name_Map name_map_S3511C4[] = {
  NSPAIR(_ZN7S3511C4C1Ev),
  NSPAIR(_ZN7S3511C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3511C4[];
extern void _ZN7S3511C42v1Ev();
static  VTBL_ENTRY vtc_S3511C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C4[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
};
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
Class_Descriptor cd_S3511C4 = {  "S3511C4", // class name
  0,0,//no base classes
  &(vtc_S3511C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3511C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3511C4),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3511C7  {
  int s3511c7f0[6];
  char s3511c7f1:2;
  long double s3511c7f2;
  void *s3511c7f3[2];
  int s3511c7f4;
  long double s3511c7f5;
  ::S20176C3_nt s3511c7f6;
  ::S281C37_nt s3511c7f7;
  ::S281C37_nt s3511c7f8[9];
  void *s3511c7f9;
  ::S3511C4 s3511c7f10;
  ::S3511C4 s3511c7f11;
  virtual void  v2(); // _ZN7S3511C72v2Ev
  ~S3511C7(); // tgen
  S3511C7(); // tgen
};
//SIG(-1 S3511C7) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S3511C7()
{
  extern Class_Descriptor cd_S3511C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S3511C7, buf);
    S3511C7 *dp, &lv = *(dp=new (buf) S3511C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S3511C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3511C7)");
    check_field_offset(lv, s3511c7f0, ABISELECT(8,4), "S3511C7.s3511c7f0");
    set_bf_and_test(lv, s3511c7f1, ABISELECT(32,28), 0, 2, 1, "S3511C7");
    set_bf_and_test(lv, s3511c7f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S3511C7");
    check_field_offset(lv, s3511c7f2, ABISELECT(48,32), "S3511C7.s3511c7f2");
    check_field_offset(lv, s3511c7f3, ABISELECT(64,44), "S3511C7.s3511c7f3");
    check_field_offset(lv, s3511c7f4, ABISELECT(80,52), "S3511C7.s3511c7f4");
    check_field_offset(lv, s3511c7f5, ABISELECT(96,56), "S3511C7.s3511c7f5");
    check_field_offset(lv, s3511c7f6, ABISELECT(112,68), "S3511C7.s3511c7f6");
    check_field_offset(lv, s3511c7f7, ABISELECT(120,72), "S3511C7.s3511c7f7");
    check_field_offset(lv, s3511c7f8, ABISELECT(136,80), "S3511C7.s3511c7f8");
    check_field_offset(lv, s3511c7f9, ABISELECT(280,152), "S3511C7.s3511c7f9");
    check_field_offset(lv, s3511c7f10, ABISELECT(288,156), "S3511C7.s3511c7f10");
    check_field_offset(lv, s3511c7f11, ABISELECT(328,176), "S3511C7.s3511c7f11");
    test_class_info(&lv, &cd_S3511C7);
    dp->~S3511C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3511C7(Test_S3511C7, "S3511C7", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN7S3511C7C1Ev();
extern void _ZN7S3511C7D1Ev();
Name_Map name_map_S3511C7[] = {
  NSPAIR(_ZN7S3511C7C1Ev),
  NSPAIR(_ZN7S3511C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3511C7[];
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY vtc_S3511C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C7[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
Class_Descriptor cd_S3511C7 = {  "S3511C7", // class name
  0,0,//no base classes
  &(vtc_S3511C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI7S3511C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3511C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3511C6  : S3511C4 , virtual S3511C7 , virtual S281C37_nt {
  void *s3511c6f0;
  __tsi64 s3511c6f1;
  char s3511c6f2[2];
  ::S3511C7 s3511c6f3;
  short s3511c6f4[7];
  int s3511c6f5;
  char s3511c6f6;
  int s3511c6f7:20;
  virtual void  v3(); // _ZN7S3511C62v3Ev
  ~S3511C6(); // tgen
  S3511C6(); // tgen
};
//SIG(-1 S3511C6) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


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

static void Test_S3511C6()
{
  extern Class_Descriptor cd_S3511C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S3511C6, buf);
    S3511C6 *dp, &lv = *(dp=new (buf) S3511C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S3511C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3511C6)");
    check_base_class_offset(lv, (S3511C4*), 0, "S3511C6");
    check_base_class_offset(lv, (S3511C7*), ABISELECT(464,256), "S3511C6");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S3511C6");
    check_field_offset(lv, s3511c6f0, ABISELECT(40,20), "S3511C6.s3511c6f0");
    check_field_offset(lv, s3511c6f1, ABISELECT(48,24), "S3511C6.s3511c6f1");
    check_field_offset(lv, s3511c6f2, ABISELECT(56,32), "S3511C6.s3511c6f2");
    check_field_offset(lv, s3511c6f3, ABISELECT(64,36), "S3511C6.s3511c6f3");
    check_field_offset(lv, s3511c6f4, ABISELECT(432,232), "S3511C6.s3511c6f4");
    check_field_offset(lv, s3511c6f5, ABISELECT(448,248), "S3511C6.s3511c6f5");
    check_field_offset(lv, s3511c6f6, ABISELECT(452,252), "S3511C6.s3511c6f6");
    set_bf_and_test(lv, s3511c6f7, ABISELECT(453,253), 0, 20, 1, "S3511C6");
    set_bf_and_test(lv, s3511c6f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S3511C6");
    test_class_info(&lv, &cd_S3511C6);
    dp->~S3511C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3511C6(Test_S3511C6, "S3511C6", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN7S3511C6C1Ev();
extern void _ZN7S3511C6D1Ev();
Name_Map name_map_S3511C6[] = {
  NSPAIR(_ZN7S3511C6C1Ev),
  NSPAIR(_ZN7S3511C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3511C4;
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S3511C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3511C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3511C7,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3511C6[];
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY vtc_S3511C6[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S3511C6[];
static  VTT_ENTRY vtt_S3511C6[] = {
  {&(_ZTV7S3511C6[4]),  4,10},
  {&(_ZTV7S3511C6[9]),  9,10},
};
extern VTBL_ENTRY _ZTI7S3511C6[];
extern  VTBL_ENTRY _ZTV7S3511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C6[];
Class_Descriptor cd_S3511C6 = {  "S3511C6", // class name
  bases_S3511C6, 3,
  &(vtc_S3511C6[0]), // expected_vtbl_contents
  &(vtt_S3511C6[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI7S3511C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3511C6),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3511C6),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  S3511C3  : virtual S3511C4 , virtual S281C37_nt , S3511C6 , S3511C7 {
  __tsi64 s3511c3f0:25;
  void *s3511c3f1;
  int s3511c3f2[3];
  ::S281C37_nt s3511c3f3;
  virtual  ~S3511C3(); // _ZN7S3511C3D2Ev
  virtual void  v4(); // _ZN7S3511C32v4Ev
  S3511C3(); // tgen
};
//SIG(-1 S3511C3) C1{ VBC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC3 BC4{ BC2 VBC5{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC3 FC3[9] Fp FC2 FC2} VBC3 v4 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} BC5 vd v1 FL:25 Fp Fi[3] FC3}


 S3511C3 ::~S3511C3(){ note_dtor("S3511C3", this);}
void  S3511C3 ::v4(){vfunc_called(this, "_ZN7S3511C32v4Ev");}
S3511C3 ::S3511C3(){ note_ctor("S3511C3", this);} // tgen

static void Test_S3511C3()
{
  extern Class_Descriptor cd_S3511C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(83,177)];
    init_test(&cd_S3511C3, buf);
    S3511C3 *dp, &lv = *(dp=new (buf) S3511C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1312,704), "sizeof(S3511C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3511C3)");
    /*is_ambiguous_... S3511C3::S3511C4 */ AMB_check_base_class_offset(lv, (S3511C4*), ABISELECT(880,480), "S3511C3");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(920,500), "S3511C3");
    check_base_class_offset(lv, (S281C37_nt*)(S3511C6*), ABISELECT(920,500), "S3511C3");
    check_base_class_offset(lv, (S3511C4*)(S3511C6*), 0, "S3511C3");
    check_base_class_offset(lv, (S3511C7*)(S3511C6*), ABISELECT(944,508), "S3511C3");
    check_base_class_offset(lv, (S3511C6*), 0, "S3511C3");
    /*is_ambiguous_... S3511C3::S3511C7 */ AMB_check_base_class_offset(lv, (S3511C7*), ABISELECT(464,256), "S3511C3");
    set_bf_and_test(lv, s3511c3f0, ABISELECT(832,452), 0, 25, 1, "S3511C3");
    set_bf_and_test(lv, s3511c3f0, ABISELECT(832,452), 0, 25, hide_sll(1LL<<24), "S3511C3");
    check_field_offset(lv, s3511c3f1, ABISELECT(840,456), "S3511C3.s3511c3f1");
    check_field_offset(lv, s3511c3f2, ABISELECT(848,460), "S3511C3.s3511c3f2");
    check_field_offset(lv, s3511c3f3, ABISELECT(864,472), "S3511C3.s3511c3f3");
    test_class_info(&lv, &cd_S3511C3);
    dp->~S3511C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3511C3(Test_S3511C3, "S3511C3", ABISELECT(1312,704));

#else // __cplusplus

extern void _ZN7S3511C3C1Ev();
extern void _ZN7S3511C3D2Ev();
Name_Map name_map_S3511C3[] = {
  NSPAIR(_ZN7S3511C3C1Ev),
  NSPAIR(_ZN7S3511C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3511C4;
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3511C4;
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S3511C6;
extern VTBL_ENTRY _ZTI7S3511C6[];
extern  VTBL_ENTRY _ZTV7S3511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C6[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
static Base_Class bases_S3511C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3511C4,    ABISELECT(880,480), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(920,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3511C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C7,    ABISELECT(944,508), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S3511C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3511C7,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3511C3[];
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
extern void _ZN7S3511C3D1Ev();
extern void _ZN7S3511C3D0Ev();
extern void _ZN7S3511C32v4Ev();
extern void _ZN7S3511C72v2Ev();
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY vtc_S3511C3[] = {
  ABISELECT(880,480),
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C3[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3511C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3511C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3511C32v4Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3511C3[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  0,
  ABISELECT(-880,-480),
  (VTBL_ENTRY)&(_ZTI7S3511C3[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI7S3511C3[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S3511C3[];
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__7S3511C3[] = {
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C6__7S3511C3[] = {
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
static  VTT_ENTRY vtt_S3511C3[] = {
  {&(_ZTV7S3511C3[5]),  5,21},
  {&(_tg__ZTV7S3511C6__7S3511C3[4]),  4,6},
  {&(_tg__ZTV7S3511C7__7S3511C6__7S3511C3[3]),  3,4},
  {&(_ZTV7S3511C3[16]),  16,21},
  {&(_ZTV7S3511C3[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S3511C3[];
extern  VTBL_ENTRY _ZTV7S3511C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C3[];
Class_Descriptor cd_S3511C3 = {  "S3511C3", // class name
  bases_S3511C3, 6,
  &(vtc_S3511C3[0]), // expected_vtbl_contents
  &(vtt_S3511C3[0]), // expected_vtt_contents
  ABISELECT(1312,704), // object size
  NSPAIRA(_ZTI7S3511C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3511C3),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3511C3),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3511C9  : virtual S3511C6 {
  int s3511c9f0;
  char s3511c9f1;
  void *s3511c9f2[6];
  int s3511c9f3[2];
  void *s3511c9f4;
  ::S281C37_nt s3511c9f5;
  ~S3511C9(); // tgen
  S3511C9(); // tgen
};
//SIG(-1 S3511C9) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S3511C9()
{
  extern Class_Descriptor cd_S3511C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S3511C9, buf);
    S3511C9 *dp, &lv = *(dp=new (buf) S3511C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S3511C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3511C9)");
    check_base_class_offset(lv, (S3511C4*)(S3511C6*), ABISELECT(96,56), "S3511C9");
    check_base_class_offset(lv, (S3511C7*)(S3511C6*), ABISELECT(560,312), "S3511C9");
    check_base_class_offset(lv, (S281C37_nt*)(S3511C6*), ABISELECT(928,508), "S3511C9");
    check_base_class_offset(lv, (S3511C6*), ABISELECT(96,56), "S3511C9");
    check_field_offset(lv, s3511c9f0, ABISELECT(8,4), "S3511C9.s3511c9f0");
    check_field_offset(lv, s3511c9f1, ABISELECT(12,8), "S3511C9.s3511c9f1");
    check_field_offset(lv, s3511c9f2, ABISELECT(16,12), "S3511C9.s3511c9f2");
    check_field_offset(lv, s3511c9f3, ABISELECT(64,36), "S3511C9.s3511c9f3");
    check_field_offset(lv, s3511c9f4, ABISELECT(72,44), "S3511C9.s3511c9f4");
    check_field_offset(lv, s3511c9f5, ABISELECT(80,48), "S3511C9.s3511c9f5");
    test_class_info(&lv, &cd_S3511C9);
    dp->~S3511C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3511C9(Test_S3511C9, "S3511C9", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN7S3511C9C1Ev();
extern void _ZN7S3511C9D1Ev();
Name_Map name_map_S3511C9[] = {
  NSPAIR(_ZN7S3511C9C1Ev),
  NSPAIR(_ZN7S3511C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3511C4;
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3511C6;
extern VTBL_ENTRY _ZTI7S3511C6[];
extern  VTBL_ENTRY _ZTV7S3511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C6[];
static Base_Class bases_S3511C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3511C4,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3511C7,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3511C6,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3511C9[];
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY vtc_S3511C9[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S3511C9[];
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__7S3511C9[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C6__7S3511C9[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
static  VTT_ENTRY vtt_S3511C9[] = {
  {&(_ZTV7S3511C9[5]),  5,17},
  {&(_ZTV7S3511C9[11]),  11,17},
  {&(_ZTV7S3511C9[16]),  16,17},
  {&(_tg__ZTV7S3511C6__7S3511C9[4]),  4,6},
  {&(_tg__ZTV7S3511C7__7S3511C6__7S3511C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3511C9[];
extern  VTBL_ENTRY _ZTV7S3511C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C9[];
Class_Descriptor cd_S3511C9 = {  "S3511C9", // class name
  bases_S3511C9, 4,
  &(vtc_S3511C9[0]), // expected_vtbl_contents
  &(vtt_S3511C9[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI7S3511C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3511C9),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3511C9),5, //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  S3511C2  : S3511C3 {
  void *s3511c2f0;
  int s3511c2f1;
  void *s3511c2f2;
  int s3511c2f3[7];
  ::S3511C9 s3511c2f4;
  virtual  ~S3511C2(); // _ZN7S3511C2D2Ev
  S3511C2(); // tgen
};
//SIG(-1 S3511C2) C1{ BC2{ VBC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC4 BC5{ BC3 VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} BC6 vd v4 FL:25 Fp Fi[3] FC4} vd Fp Fi Fp Fi[7] FC8{ VBC5 Fi Fc Fp[6] Fi[2] Fp FC4}}


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

static void Test_S3511C2()
{
  extern Class_Descriptor cd_S3511C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(146,316)];
    init_test(&cd_S3511C2, buf);
    S3511C2 *dp, &lv = *(dp=new (buf) S3511C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2320,1260), "sizeof(S3511C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3511C2)");
    /*is_ambiguous_... S3511C3::S3511C4 */ AMB_check_base_class_offset(lv, (S3511C4*)(S3511C3*), ABISELECT(1888,1036), "S3511C2");
    check_base_class_offset(lv, (S281C37_nt*)(S3511C3*), ABISELECT(1928,1056), "S3511C2");
    check_base_class_offset(lv, (S281C37_nt*)(S3511C6*)(S3511C3*), ABISELECT(1928,1056), "S3511C2");
    check_base_class_offset(lv, (S3511C4*)(S3511C6*)(S3511C3*), 0, "S3511C2");
    check_base_class_offset(lv, (S3511C7*)(S3511C6*)(S3511C3*), ABISELECT(1952,1064), "S3511C2");
    check_base_class_offset(lv, (S3511C6*)(S3511C3*), 0, "S3511C2");
    /*is_ambiguous_... S3511C3::S3511C7 */ AMB_check_base_class_offset(lv, (S3511C7*)(S3511C3*), ABISELECT(464,256), "S3511C2");
    check_base_class_offset(lv, (S3511C3*), 0, "S3511C2");
    check_field_offset(lv, s3511c2f0, ABISELECT(880,480), "S3511C2.s3511c2f0");
    check_field_offset(lv, s3511c2f1, ABISELECT(888,484), "S3511C2.s3511c2f1");
    check_field_offset(lv, s3511c2f2, ABISELECT(896,488), "S3511C2.s3511c2f2");
    check_field_offset(lv, s3511c2f3, ABISELECT(904,492), "S3511C2.s3511c2f3");
    check_field_offset(lv, s3511c2f4, ABISELECT(944,520), "S3511C2.s3511c2f4");
    test_class_info(&lv, &cd_S3511C2);
    dp->~S3511C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3511C2(Test_S3511C2, "S3511C2", ABISELECT(2320,1260));

#else // __cplusplus

extern void _ZN7S3511C2C1Ev();
extern void _ZN7S3511C2D2Ev();
Name_Map name_map_S3511C2[] = {
  NSPAIR(_ZN7S3511C2C1Ev),
  NSPAIR(_ZN7S3511C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3511C4;
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3511C4;
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S3511C6;
extern VTBL_ENTRY _ZTI7S3511C6[];
extern  VTBL_ENTRY _ZTV7S3511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C6[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S3511C3;
extern VTBL_ENTRY _ZTI7S3511C3[];
extern  VTBL_ENTRY _ZTV7S3511C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C3[];
static Base_Class bases_S3511C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3511C4,    ABISELECT(1888,1036), //bcp->offset
    13, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(1928,1056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C7,    ABISELECT(1952,1064), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S3511C6,    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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3511C7,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3511C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3511C2[];
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
extern void _ZN7S3511C2D1Ev();
extern void _ZN7S3511C2D0Ev();
extern void _ZN7S3511C32v4Ev();
extern void _ZN7S3511C72v2Ev();
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY vtc_S3511C2[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C2[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3511C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3511C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3511C32v4Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3511C2[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S3511C2[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S3511C2[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S3511C2[];
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
extern void _ZN7S3511C3D1Ev();
extern void _ZN7S3511C3D0Ev();
extern void _ZN7S3511C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C3__7S3511C2[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C3[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3511C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3511C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3511C32v4Ev,
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C67S3511C3__7S3511C2[] = {
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C67S3511C3__7S3511C2[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern void _ZN7S3511C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C4__7S3511C3__7S3511C2[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S3511C3[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C3__7S3511C2[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S3511C3[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
static  VTT_ENTRY vtt_S3511C2[] = {
  {&(_ZTV7S3511C2[5]),  5,21},
  {&(_tg__ZTV7S3511C3__7S3511C2[5]),  5,10},
  {&(_tg__ZTV7S3511C67S3511C3__7S3511C2[4]),  4,6},
  {&(_tg__ZTV7S3511C7__7S3511C67S3511C3__7S3511C2[3]),  3,4},
  {&(_tg__ZTV7S3511C4__7S3511C3__7S3511C2[3]),  3,4},
  {&(_tg__ZTV7S3511C7__7S3511C3__7S3511C2[3]),  3,4},
  {&(_ZTV7S3511C2[16]),  16,21},
  {&(_ZTV7S3511C2[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S3511C2[];
extern  VTBL_ENTRY _ZTV7S3511C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C2[];
Class_Descriptor cd_S3511C2 = {  "S3511C2", // class name
  bases_S3511C2, 7,
  &(vtc_S3511C2[0]), // expected_vtbl_contents
  &(vtt_S3511C2[0]), // expected_vtt_contents
  ABISELECT(2320,1260), // object size
  NSPAIRA(_ZTI7S3511C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3511C2),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3511C2),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3511C12  : virtual S3511C9 , S3511C7 , S281C37_nt {
  char s3511c12f0;
  int s3511c12f1[2];
  long double s3511c12f2[2];
  short s3511c12f3;
  void *s3511c12f4;
  int s3511c12f5;
  __tsi64 s3511c12f6;
  int s3511c12f7;
  void *s3511c12f8;
  virtual  ~S3511C12(); // _ZN8S3511C12D2Ev
  virtual void  v6(); // _ZN8S3511C122v6Ev
  S3511C12(); // tgen
};
//SIG(-1 S3511C12) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S3511C12 ::~S3511C12(){ note_dtor("S3511C12", this);}
void  S3511C12 ::v6(){vfunc_called(this, "_ZN8S3511C122v6Ev");}
S3511C12 ::S3511C12(){ note_ctor("S3511C12", this);} // tgen

static void Test_S3511C12()
{
  extern Class_Descriptor cd_S3511C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S3511C12, buf);
    S3511C12 *dp, &lv = *(dp=new (buf) S3511C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S3511C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3511C12)");
    check_base_class_offset(lv, (S3511C4*)(S3511C6*), ABISELECT(576,324), "S3511C12");
    check_base_class_offset(lv, (S3511C7*)(S3511C6*), ABISELECT(1040,580), "S3511C12");
    check_base_class_offset(lv, (S281C37_nt*)(S3511C6*), ABISELECT(1408,776), "S3511C12");
    check_base_class_offset(lv, (S3511C6*)(S3511C9*), ABISELECT(576,324), "S3511C12");
    check_base_class_offset(lv, (S3511C9*), ABISELECT(480,268), "S3511C12");
    /*is_ambiguous_... S3511C12::S3511C7 */ AMB_check_base_class_offset(lv, (S3511C7*), 0, "S3511C12");
    /*is_ambiguous_... S3511C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S3511C12");
    check_field_offset(lv, s3511c12f0, ABISELECT(384,204), "S3511C12.s3511c12f0");
    check_field_offset(lv, s3511c12f1, ABISELECT(388,208), "S3511C12.s3511c12f1");
    check_field_offset(lv, s3511c12f2, ABISELECT(400,216), "S3511C12.s3511c12f2");
    check_field_offset(lv, s3511c12f3, ABISELECT(432,240), "S3511C12.s3511c12f3");
    check_field_offset(lv, s3511c12f4, ABISELECT(440,244), "S3511C12.s3511c12f4");
    check_field_offset(lv, s3511c12f5, ABISELECT(448,248), "S3511C12.s3511c12f5");
    check_field_offset(lv, s3511c12f6, ABISELECT(456,252), "S3511C12.s3511c12f6");
    check_field_offset(lv, s3511c12f7, ABISELECT(464,260), "S3511C12.s3511c12f7");
    check_field_offset(lv, s3511c12f8, ABISELECT(472,264), "S3511C12.s3511c12f8");
    test_class_info(&lv, &cd_S3511C12);
    dp->~S3511C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3511C12(Test_S3511C12, "S3511C12", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN8S3511C12C1Ev();
extern void _ZN8S3511C12D2Ev();
Name_Map name_map_S3511C12[] = {
  NSPAIR(_ZN8S3511C12C1Ev),
  NSPAIR(_ZN8S3511C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3511C4;
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3511C6;
extern VTBL_ENTRY _ZTI7S3511C6[];
extern  VTBL_ENTRY _ZTV7S3511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C6[];
extern Class_Descriptor cd_S3511C9;
extern VTBL_ENTRY _ZTI7S3511C9[];
extern  VTBL_ENTRY _ZTV7S3511C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C9[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S3511C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3511C4,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3511C7,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C6,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3511C9,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3511C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3511C12[];
extern void _ZN7S3511C72v2Ev();
extern void _ZN8S3511C12D1Ev();
extern void _ZN8S3511C12D0Ev();
extern void _ZN8S3511C122v6Ev();
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY vtc_S3511C12[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  (VTBL_ENTRY)&_ZN8S3511C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3511C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3511C122v6Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern VTBL_ENTRY _ZTV8S3511C12[];
static  VTBL_ENTRY _tg__ZTV7S3511C9__8S3511C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__7S3511C9__8S3511C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C9__8S3511C12[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__8S3511C12[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C6__8S3511C12[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
static  VTT_ENTRY vtt_S3511C12[] = {
  {&(_ZTV8S3511C12[6]),  6,27},
  {&(_ZTV8S3511C12[15]),  15,27},
  {&(_ZTV8S3511C12[21]),  21,27},
  {&(_ZTV8S3511C12[26]),  26,27},
  {&(_tg__ZTV7S3511C9__8S3511C12[5]),  5,5},
  {&(_tg__ZTV7S3511C6__7S3511C9__8S3511C12[6]),  6,8},
  {&(_tg__ZTV7S3511C7__7S3511C9__8S3511C12[3]),  3,4},
  {&(_tg__ZTV7S3511C6__8S3511C12[4]),  4,6},
  {&(_tg__ZTV7S3511C7__7S3511C6__8S3511C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3511C12[];
extern  VTBL_ENTRY _ZTV8S3511C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3511C12[];
Class_Descriptor cd_S3511C12 = {  "S3511C12", // class name
  bases_S3511C12, 7,
  &(vtc_S3511C12[0]), // expected_vtbl_contents
  &(vtt_S3511C12[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI8S3511C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3511C12),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3511C12),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3511C14  : virtual S3511C7 , virtual S3511C12 {
  ::S3511C12 s3511c14f0[7];
  int s3511c14f1;
  short s3511c14f2;
  int s3511c14f3;
  ::S3511C6 s3511c14f4;
  long s3511c14f5[9];
  virtual void  v7(); // _ZN8S3511C142v7Ev
  virtual void  v8(); // _ZN8S3511C142v8Ev
  ~S3511C14(); // tgen
  S3511C14(); // tgen
};
//SIG(-1 S3511C14) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 Fl[9]}


void  S3511C14 ::v7(){vfunc_called(this, "_ZN8S3511C142v7Ev");}
void  S3511C14 ::v8(){vfunc_called(this, "_ZN8S3511C142v8Ev");}
S3511C14 ::~S3511C14(){ note_dtor("S3511C14", this);} // tgen
S3511C14 ::S3511C14(){ note_ctor("S3511C14", this);} // tgen

static void Test_S3511C14()
{
  extern Class_Descriptor cd_S3511C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1697)];
    init_test(&cd_S3511C14, buf);
    S3511C14 *dp, &lv = *(dp=new (buf) S3511C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6784), "sizeof(S3511C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3511C14)");
    /*is_ambiguous_... S3511C14::S3511C7 */ AMB_check_base_class_offset(lv, (S3511C7*), ABISELECT(10928,6000), "S3511C14");
    check_base_class_offset(lv, (S3511C7*)(S3511C6*), ABISELECT(10928,6000), "S3511C14");
    check_base_class_offset(lv, (S3511C4*)(S3511C6*), ABISELECT(11872,6520), "S3511C14");
    check_base_class_offset(lv, (S281C37_nt*)(S3511C6*), ABISELECT(12328,6776), "S3511C14");
    check_base_class_offset(lv, (S3511C6*)(S3511C9*), ABISELECT(11872,6520), "S3511C14");
    check_base_class_offset(lv, (S3511C9*)(S3511C12*), ABISELECT(11776,6464), "S3511C14");
    /*is_ambiguous_... S3511C12::S3511C7 */ AMB_check_base_class_offset(lv, (S3511C7*)(S3511C12*), ABISELECT(11296,6196), "S3511C14");
    /*is_ambiguous_... S3511C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S3511C12*), ABISELECT(11664,6392), "S3511C14");
    check_base_class_offset(lv, (S3511C12*), ABISELECT(11296,6196), "S3511C14");
    check_field_offset(lv, s3511c14f0, ABISELECT(16,4), "S3511C14.s3511c14f0");
    check_field_offset(lv, s3511c14f1, ABISELECT(9984,5492), "S3511C14.s3511c14f1");
    check_field_offset(lv, s3511c14f2, ABISELECT(9988,5496), "S3511C14.s3511c14f2");
    check_field_offset(lv, s3511c14f3, ABISELECT(9992,5500), "S3511C14.s3511c14f3");
    check_field_offset(lv, s3511c14f4, ABISELECT(10000,5504), "S3511C14.s3511c14f4");
    check_field_offset(lv, s3511c14f5, ABISELECT(10848,5964), "S3511C14.s3511c14f5");
    test_class_info(&lv, &cd_S3511C14);
    dp->~S3511C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3511C14(Test_S3511C14, "S3511C14", ABISELECT(12352,6784));

#else // __cplusplus

extern void _ZN8S3511C14C1Ev();
extern void _ZN8S3511C14D1Ev();
Name_Map name_map_S3511C14[] = {
  NSPAIR(_ZN8S3511C14C1Ev),
  NSPAIR(_ZN8S3511C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S3511C4;
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3511C6;
extern VTBL_ENTRY _ZTI7S3511C6[];
extern  VTBL_ENTRY _ZTV7S3511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C6[];
extern Class_Descriptor cd_S3511C9;
extern VTBL_ENTRY _ZTI7S3511C9[];
extern  VTBL_ENTRY _ZTV7S3511C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C9[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3511C12;
extern VTBL_ENTRY _ZTI8S3511C12[];
extern  VTBL_ENTRY _ZTV8S3511C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3511C12[];
static Base_Class bases_S3511C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3511C7,    ABISELECT(10928,6000), //bcp->offset
    11, //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_S3511C4,    ABISELECT(11872,6520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C6,    ABISELECT(11872,6520), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3511C9,    ABISELECT(11776,6464), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3511C7,    ABISELECT(11296,6196), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C12,    ABISELECT(11296,6196), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3511C14[];
extern void _ZN8S3511C142v7Ev();
extern void _ZN8S3511C142v8Ev();
extern void _ZN8S3511C14D1Ev();
extern void _ZN8S3511C14D0Ev();
extern void _ZN7S3511C72v2Ev();
extern void _ZN7S3511C72v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3511C14D1Ev,_ZTv0_n32_N8S3511C14D1Ev)();
extern void ABISELECT(_ZThn11296_N8S3511C14D1Ev,_ZThn6196_N8S3511C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3511C14D0Ev,_ZTv0_n32_N8S3511C14D0Ev)();
extern void ABISELECT(_ZThn11296_N8S3511C14D0Ev,_ZThn6196_N8S3511C14D0Ev)() __attribute__((weak));
extern void _ZN8S3511C122v6Ev();
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY vtc_S3511C14[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  (VTBL_ENTRY)&_ZN8S3511C142v7Ev,
  (VTBL_ENTRY)&_ZN8S3511C142v8Ev,
  (VTBL_ENTRY)&_ZN8S3511C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3511C14D0Ev,
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3511C14D1Ev,_ZTv0_n32_N8S3511C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3511C14D0Ev,_ZTv0_n32_N8S3511C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3511C122v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S3511C14[];
extern void _ZN7S3511C72v2Ev();
extern void _ZN8S3511C12D1Ev();
extern void _ZN8S3511C12D0Ev();
extern void _ZN8S3511C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3511C12__8S3511C14[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  (VTBL_ENTRY)&_ZN8S3511C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3511C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3511C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3511C9__8S3511C12__8S3511C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__8S3511C12__8S3511C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__8S3511C12__8S3511C14[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3511C9__8S3511C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__7S3511C9__8S3511C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C9__8S3511C14[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__8S3511C14[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C6__8S3511C14[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
static  VTT_ENTRY vtt_S3511C14[] = {
  {&(_ZTV8S3511C14[7]),  7,41},
  {&(_ZTV8S3511C14[14]),  14,41},
  {&(_ZTV8S3511C14[24]),  24,41},
  {&(_ZTV8S3511C14[33]),  33,41},
  {&(_ZTV8S3511C14[39]),  39,41},
  {&(_tg__ZTV8S3511C12__8S3511C14[6]),  6,10},
  {&(_tg__ZTV7S3511C9__8S3511C12__8S3511C14[5]),  5,5},
  {&(_tg__ZTV7S3511C6__8S3511C12__8S3511C14[6]),  6,8},
  {&(_tg__ZTV7S3511C7__8S3511C12__8S3511C14[3]),  3,4},
  {&(_tg__ZTV7S3511C9__8S3511C14[5]),  5,5},
  {&(_tg__ZTV7S3511C6__7S3511C9__8S3511C14[6]),  6,8},
  {&(_tg__ZTV7S3511C7__7S3511C9__8S3511C14[3]),  3,4},
  {&(_tg__ZTV7S3511C6__8S3511C14[4]),  4,6},
  {&(_tg__ZTV7S3511C7__7S3511C6__8S3511C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3511C14[];
extern  VTBL_ENTRY _ZTV8S3511C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3511C14[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3511C14D0Ev,_ZTv0_n32_N8S3511C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N8S3511C14D0Ev,_ZThn6196_N8S3511C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3511C14D1Ev,_ZTv0_n32_N8S3511C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N8S3511C14D1Ev,_ZThn6196_N8S3511C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3511C14 = {  "S3511C14", // class name
  bases_S3511C14, 8,
  &(vtc_S3511C14[0]), // expected_vtbl_contents
  &(vtt_S3511C14[0]), // expected_vtt_contents
  ABISELECT(12352,6784), // object size
  NSPAIRA(_ZTI8S3511C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3511C14),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3511C14),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3511C13  : virtual S3511C14 {
  char s3511c13f0;
  int s3511c13f1[3];
  virtual  ~S3511C13(); // _ZN8S3511C13D2Ev
  S3511C13(); // tgen
};
//SIG(-1 S3511C13) C1{ VBC2{ VBC3{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v2 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v3 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v5 v6 FC7[7] Fi Fs Fi FC9 Fl[9]} vd Fc Fi[3]}


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

static void Test_S3511C13()
{
  extern Class_Descriptor cd_S3511C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(775,1702)];
    init_test(&cd_S3511C13, buf);
    S3511C13 *dp, &lv = *(dp=new (buf) S3511C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12384,6804), "sizeof(S3511C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3511C13)");
    /*is_ambiguous_... S3511C14::S3511C7 */ AMB_check_base_class_offset(lv, (S3511C7*)(S3511C14*), ABISELECT(10960,6020), "S3511C13");
    check_base_class_offset(lv, (S3511C7*)(S3511C6*), ABISELECT(10960,6020), "S3511C13");
    check_base_class_offset(lv, (S3511C4*)(S3511C6*), ABISELECT(11904,6540), "S3511C13");
    check_base_class_offset(lv, (S281C37_nt*)(S3511C6*), ABISELECT(12360,6796), "S3511C13");
    check_base_class_offset(lv, (S3511C6*)(S3511C9*), ABISELECT(11904,6540), "S3511C13");
    check_base_class_offset(lv, (S3511C9*)(S3511C12*), ABISELECT(11808,6484), "S3511C13");
    /*is_ambiguous_... S3511C12::S3511C7 */ AMB_check_base_class_offset(lv, (S3511C7*)(S3511C12*), ABISELECT(11328,6216), "S3511C13");
    /*is_ambiguous_... S3511C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S3511C12*), ABISELECT(11696,6412), "S3511C13");
    check_base_class_offset(lv, (S3511C12*)(S3511C14*), ABISELECT(11328,6216), "S3511C13");
    check_base_class_offset(lv, (S3511C14*), ABISELECT(32,20), "S3511C13");
    check_field_offset(lv, s3511c13f0, ABISELECT(8,4), "S3511C13.s3511c13f0");
    check_field_offset(lv, s3511c13f1, ABISELECT(12,8), "S3511C13.s3511c13f1");
    test_class_info(&lv, &cd_S3511C13);
    dp->~S3511C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3511C13(Test_S3511C13, "S3511C13", ABISELECT(12384,6804));

#else // __cplusplus

extern void _ZN8S3511C13C1Ev();
extern void _ZN8S3511C13D2Ev();
Name_Map name_map_S3511C13[] = {
  NSPAIR(_ZN8S3511C13C1Ev),
  NSPAIR(_ZN8S3511C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S3511C4;
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3511C6;
extern VTBL_ENTRY _ZTI7S3511C6[];
extern  VTBL_ENTRY _ZTV7S3511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C6[];
extern Class_Descriptor cd_S3511C9;
extern VTBL_ENTRY _ZTI7S3511C9[];
extern  VTBL_ENTRY _ZTV7S3511C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C9[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3511C12;
extern VTBL_ENTRY _ZTI8S3511C12[];
extern  VTBL_ENTRY _ZTV8S3511C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3511C12[];
extern Class_Descriptor cd_S3511C14;
extern VTBL_ENTRY _ZTI8S3511C14[];
extern  VTBL_ENTRY _ZTV8S3511C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3511C14[];
static Base_Class bases_S3511C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3511C7,    ABISELECT(10960,6020), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3511C4,    ABISELECT(11904,6540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12360,6796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C6,    ABISELECT(11904,6540), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3511C9,    ABISELECT(11808,6484), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3511C7,    ABISELECT(11328,6216), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11696,6412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C12,    ABISELECT(11328,6216), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3511C14,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3511C13[];
extern void _ZN8S3511C13D1Ev();
extern void _ZN8S3511C13D0Ev();
extern void _ZN8S3511C142v7Ev();
extern void _ZN8S3511C142v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S3511C13D1Ev,_ZTv0_n40_N8S3511C13D1Ev)();
extern void ABISELECT(_ZThn32_N8S3511C13D1Ev,_ZThn20_N8S3511C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S3511C13D0Ev,_ZTv0_n40_N8S3511C13D0Ev)();
extern void ABISELECT(_ZThn32_N8S3511C13D0Ev,_ZThn20_N8S3511C13D0Ev)() __attribute__((weak));
extern void _ZN7S3511C72v2Ev();
extern void _ZN7S3511C72v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3511C13D1Ev,_ZTv0_n32_N8S3511C13D1Ev)();
extern void ABISELECT(_ZThn11328_N8S3511C13D1Ev,_ZThn6216_N8S3511C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3511C13D0Ev,_ZTv0_n32_N8S3511C13D0Ev)();
extern void ABISELECT(_ZThn11328_N8S3511C13D0Ev,_ZThn6216_N8S3511C13D0Ev)() __attribute__((weak));
extern void _ZN8S3511C122v6Ev();
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY vtc_S3511C13[] = {
  ABISELECT(12360,6796),
  ABISELECT(11904,6540),
  ABISELECT(11808,6484),
  ABISELECT(11328,6216),
  ABISELECT(10960,6020),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S3511C13[0]),
  (VTBL_ENTRY)&_ZN8S3511C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3511C13D0Ev,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S3511C13[0]),
  (VTBL_ENTRY)&_ZN8S3511C142v7Ev,
  (VTBL_ENTRY)&_ZN8S3511C142v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S3511C13D1Ev,_ZTv0_n40_N8S3511C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S3511C13D0Ev,_ZTv0_n40_N8S3511C13D0Ev),
  0,
  ABISELECT(-10960,-6020),
  (VTBL_ENTRY)&(_ZTI8S3511C13[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  0,
  ABISELECT(-11328,-6216),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11328,-6216),
  (VTBL_ENTRY)&(_ZTI8S3511C13[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3511C13D1Ev,_ZTv0_n32_N8S3511C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3511C13D0Ev,_ZTv0_n32_N8S3511C13D0Ev),
  (VTBL_ENTRY)&_ZN8S3511C122v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11808,-6484),
  (VTBL_ENTRY)&(_ZTI8S3511C13[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11904,-6540),
  (VTBL_ENTRY)&(_ZTI8S3511C13[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S3511C13[];
extern void _ZN8S3511C142v7Ev();
extern void _ZN8S3511C142v8Ev();
extern void _ZN8S3511C14D1Ev();
extern void _ZN8S3511C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3511C14__8S3511C13[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  (VTBL_ENTRY)&_ZN8S3511C142v7Ev,
  (VTBL_ENTRY)&_ZN8S3511C142v8Ev,
  (VTBL_ENTRY)&_ZN8S3511C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3511C14D0Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__8S3511C14__8S3511C13[] = {
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern void _ZN7S3511C72v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3511C14D1Ev,_ZTv0_n32_N8S3511C14D1Ev)();
extern void ABISELECT(_ZThn11296_N8S3511C14D1Ev,_ZThn6196_N8S3511C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3511C14D0Ev,_ZTv0_n32_N8S3511C14D0Ev)();
extern void ABISELECT(_ZThn11296_N8S3511C14D0Ev,_ZThn6196_N8S3511C14D0Ev)() __attribute__((weak));
extern void _ZN8S3511C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3511C12__8S3511C14__8S3511C13[] = {
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3511C14D1Ev,_ZTv0_n32_N8S3511C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3511C14D0Ev,_ZTv0_n32_N8S3511C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3511C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3511C9__8S3511C14__8S3511C13[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__8S3511C14__8S3511C13[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
extern void _ZN8S3511C12D1Ev();
extern void _ZN8S3511C12D0Ev();
extern void _ZN8S3511C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3511C12__8S3511C13[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  (VTBL_ENTRY)&_ZN8S3511C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3511C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3511C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3511C9__8S3511C12__8S3511C13[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__8S3511C12__8S3511C13[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__8S3511C12__8S3511C13[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3511C9__8S3511C13[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__7S3511C9__8S3511C13[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C9__8S3511C13[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__8S3511C13[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C6__8S3511C13[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
static  VTT_ENTRY vtt_S3511C13[] = {
  {&(_ZTV8S3511C13[8]),  8,54},
  {&(_ZTV8S3511C13[20]),  20,54},
  {&(_ZTV8S3511C13[27]),  27,54},
  {&(_ZTV8S3511C13[37]),  37,54},
  {&(_ZTV8S3511C13[46]),  46,54},
  {&(_ZTV8S3511C13[52]),  52,54},
  {&(_tg__ZTV8S3511C14__8S3511C13[7]),  7,11},
  {&(_tg__ZTV7S3511C7__8S3511C14__8S3511C13[3]),  3,4},
  {&(_tg__ZTV8S3511C12__8S3511C14__8S3511C13[9]),  9,13},
  {&(_tg__ZTV7S3511C9__8S3511C14__8S3511C13[5]),  5,5},
  {&(_tg__ZTV7S3511C6__8S3511C14__8S3511C13[6]),  6,8},
  {&(_tg__ZTV8S3511C12__8S3511C13[6]),  6,10},
  {&(_tg__ZTV7S3511C9__8S3511C12__8S3511C13[5]),  5,5},
  {&(_tg__ZTV7S3511C6__8S3511C12__8S3511C13[6]),  6,8},
  {&(_tg__ZTV7S3511C7__8S3511C12__8S3511C13[3]),  3,4},
  {&(_tg__ZTV7S3511C9__8S3511C13[5]),  5,5},
  {&(_tg__ZTV7S3511C6__7S3511C9__8S3511C13[6]),  6,8},
  {&(_tg__ZTV7S3511C7__7S3511C9__8S3511C13[3]),  3,4},
  {&(_tg__ZTV7S3511C6__8S3511C13[4]),  4,6},
  {&(_tg__ZTV7S3511C7__7S3511C6__8S3511C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3511C13[];
extern  VTBL_ENTRY _ZTV8S3511C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3511C13[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3511C14D0Ev,_ZTv0_n32_N8S3511C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N8S3511C14D0Ev,_ZThn6196_N8S3511C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3511C14D1Ev,_ZTv0_n32_N8S3511C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N8S3511C14D1Ev,_ZThn6196_N8S3511C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3511C13D0Ev,_ZTv0_n32_N8S3511C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N8S3511C13D0Ev,_ZThn6216_N8S3511C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3511C13D1Ev,_ZTv0_n32_N8S3511C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N8S3511C13D1Ev,_ZThn6216_N8S3511C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S3511C13D0Ev,_ZTv0_n40_N8S3511C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3511C13D0Ev,_ZThn20_N8S3511C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S3511C13D1Ev,_ZTv0_n40_N8S3511C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3511C13D1Ev,_ZThn20_N8S3511C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3511C13 = {  "S3511C13", // class name
  bases_S3511C13, 9,
  &(vtc_S3511C13[0]), // expected_vtbl_contents
  &(vtt_S3511C13[0]), // expected_vtt_contents
  ABISELECT(12384,6804), // object size
  NSPAIRA(_ZTI8S3511C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3511C13),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3511C13),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3511C11  : virtual S3511C9 , virtual S3511C12 , virtual S3511C13 {
  ::S20177C13 s3511c11f0;
  short s3511c11f1;
  __tsi64 s3511c11f2:14;
  short s3511c11f3;
  int s3511c11f4[2];
  __tsi64 s3511c11f5;
  void *s3511c11f6;
  virtual void  v5(); // _ZN8S3511C112v5Ev
  ~S3511C11(); // tgen
  S3511C11(); // tgen
};
//SIG(-1 S3511C11) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC8{ VBC2 BC6 BC5 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} VBC9{ VBC10{ VBC6 VBC8 v6 v7 FC8[7] Fi Fs Fi FC3 Fl[9]} vd Fc Fi[3]} v1 FC11{ VBC12{ VBC13{ BC14{ v8 Fi Fp FC5} VBC15{ v9 Fi[6] Fc:2 FD Fp[2] Fi FD FC7 FC5 FC5[9] Fp FC14 FC14} VBC5 v10 Fp FL Fc[2] FC15 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC16{ VBC12 BC15 BC5 vd v11 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC13 Fp Fs Fl Fi FL FC13[4] Fi} Fs FL:14 Fs Fi[2] FL Fp}


void  S3511C11 ::v5(){vfunc_called(this, "_ZN8S3511C112v5Ev");}
S3511C11 ::~S3511C11(){ note_dtor("S3511C11", this);} // tgen
S3511C11 ::S3511C11(){ note_ctor("S3511C11", this);} // tgen

static void Test_S3511C11()
{
  extern Class_Descriptor cd_S3511C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1138,2491)];
    init_test(&cd_S3511C11, buf);
    S3511C11 *dp, &lv = *(dp=new (buf) S3511C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(18192,9960), "sizeof(S3511C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3511C11)");
    check_base_class_offset(lv, (S3511C4*)(S3511C6*), ABISELECT(5904,3212), "S3511C11");
    check_base_class_offset(lv, (S3511C7*)(S3511C6*), ABISELECT(6368,3468), "S3511C11");
    /*is_ambiguous_... S3511C14::S3511C7 */ AMB_check_base_class_offset(lv, (S3511C7*)(S3511C14*), ABISELECT(6368,3468), "S3511C11");
    check_base_class_offset(lv, (S281C37_nt*)(S3511C6*), ABISELECT(6736,3664), "S3511C11");
    check_base_class_offset(lv, (S3511C6*)(S3511C9*), ABISELECT(5904,3212), "S3511C11");
    check_base_class_offset(lv, (S3511C9*), ABISELECT(5808,3156), "S3511C11");
    check_base_class_offset(lv, (S3511C9*)(S3511C12*), ABISELECT(5808,3156), "S3511C11");
    /*is_ambiguous_... S3511C12::S3511C7 */ AMB_check_base_class_offset(lv, (S3511C7*)(S3511C12*), ABISELECT(6752,3672), "S3511C11");
    /*is_ambiguous_... S3511C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S3511C12*), ABISELECT(7120,3868), "S3511C11");
    check_base_class_offset(lv, (S3511C12*), ABISELECT(6752,3672), "S3511C11");
    check_base_class_offset(lv, (S3511C12*)(S3511C14*), ABISELECT(6752,3672), "S3511C11");
    check_base_class_offset(lv, (S3511C14*)(S3511C13*), ABISELECT(7264,3960), "S3511C11");
    check_base_class_offset(lv, (S3511C13*), ABISELECT(7232,3940), "S3511C11");
    check_field_offset(lv, s3511c11f0, ABISELECT(16,4), "S3511C11.s3511c11f0");
    check_field_offset(lv, s3511c11f1, ABISELECT(5776,3128), "S3511C11.s3511c11f1");
    set_bf_and_test(lv, s3511c11f2, ABISELECT(5778,3130), 0, 14, 1, "S3511C11");
    set_bf_and_test(lv, s3511c11f2, ABISELECT(5778,3130), 0, 14, hide_sll(1LL<<13), "S3511C11");
    check_field_offset(lv, s3511c11f3, ABISELECT(5780,3132), "S3511C11.s3511c11f3");
    check_field_offset(lv, s3511c11f4, ABISELECT(5784,3136), "S3511C11.s3511c11f4");
    check_field_offset(lv, s3511c11f5, ABISELECT(5792,3144), "S3511C11.s3511c11f5");
    check_field_offset(lv, s3511c11f6, ABISELECT(5800,3152), "S3511C11.s3511c11f6");
    test_class_info(&lv, &cd_S3511C11);
    dp->~S3511C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3511C11(Test_S3511C11, "S3511C11", ABISELECT(18192,9960));

#else // __cplusplus

extern void _ZN8S3511C11C1Ev();
extern void _ZN8S3511C11D1Ev();
Name_Map name_map_S3511C11[] = {
  NSPAIR(_ZN8S3511C11C1Ev),
  NSPAIR(_ZN8S3511C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3511C4;
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3511C6;
extern VTBL_ENTRY _ZTI7S3511C6[];
extern  VTBL_ENTRY _ZTV7S3511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C6[];
extern Class_Descriptor cd_S3511C9;
extern VTBL_ENTRY _ZTI7S3511C9[];
extern  VTBL_ENTRY _ZTV7S3511C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C9[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3511C12;
extern VTBL_ENTRY _ZTI8S3511C12[];
extern  VTBL_ENTRY _ZTV8S3511C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3511C12[];
extern Class_Descriptor cd_S3511C14;
extern VTBL_ENTRY _ZTI8S3511C14[];
extern  VTBL_ENTRY _ZTV8S3511C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3511C14[];
extern Class_Descriptor cd_S3511C13;
extern VTBL_ENTRY _ZTI8S3511C13[];
extern  VTBL_ENTRY _ZTV8S3511C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3511C13[];
static Base_Class bases_S3511C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3511C4,    ABISELECT(5904,3212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C7,    ABISELECT(6368,3468), //bcp->offset
    25, //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_S281C37_nt,    ABISELECT(6736,3664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C6,    ABISELECT(5904,3212), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3511C9,    ABISELECT(5808,3156), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3511C7,    ABISELECT(6752,3672), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(7120,3868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C12,    ABISELECT(6752,3672), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3511C14,    ABISELECT(7264,3960), //bcp->offset
    53, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3511C13,    ABISELECT(7232,3940), //bcp->offset
    42, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S3511C11[];
extern void _ZN8S3511C112v5Ev();
extern void _ZN8S3511C11D1Ev();
extern void _ZN8S3511C11D0Ev();
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
extern void _ZN7S3511C72v2Ev();
extern void _ZN7S3511C72v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3511C11D1Ev,_ZTv0_n32_N8S3511C11D1Ev)();
extern void ABISELECT(_ZThn6752_N8S3511C11D1Ev,_ZThn3672_N8S3511C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3511C11D0Ev,_ZTv0_n32_N8S3511C11D0Ev)();
extern void ABISELECT(_ZThn6752_N8S3511C11D0Ev,_ZThn3672_N8S3511C11D0Ev)() __attribute__((weak));
extern void _ZN8S3511C122v6Ev();
extern void ABISELECT(_ZTv0_n72_N8S3511C11D1Ev,_ZTv0_n36_N8S3511C11D1Ev)();
extern void ABISELECT(_ZThn7232_N8S3511C11D1Ev,_ZThn3940_N8S3511C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3511C11D0Ev,_ZTv0_n36_N8S3511C11D0Ev)();
extern void ABISELECT(_ZThn7232_N8S3511C11D0Ev,_ZThn3940_N8S3511C11D0Ev)() __attribute__((weak));
extern void _ZN8S3511C142v7Ev();
extern void _ZN8S3511C142v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S3511C11D1Ev,_ZTv0_n40_N8S3511C11D1Ev)();
extern void ABISELECT(_ZThn7264_N8S3511C11D1Ev,_ZThn3960_N8S3511C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S3511C11D0Ev,_ZTv0_n40_N8S3511C11D0Ev)();
extern void ABISELECT(_ZThn7264_N8S3511C11D0Ev,_ZThn3960_N8S3511C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3511C11[] = {
  ABISELECT(7264,3960),
  ABISELECT(7232,3940),
  ABISELECT(6752,3672),
  ABISELECT(6736,3664),
  ABISELECT(6368,3468),
  ABISELECT(5904,3212),
  ABISELECT(5808,3156),
  0,
  (VTBL_ENTRY)&(_ZTI8S3511C11[0]),
  (VTBL_ENTRY)&_ZN8S3511C112v5Ev,
  (VTBL_ENTRY)&_ZN8S3511C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3511C11D0Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-5808,-3156),
  (VTBL_ENTRY)&(_ZTI8S3511C11[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5904,-3212),
  (VTBL_ENTRY)&(_ZTI8S3511C11[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
  0,
  ABISELECT(-6368,-3468),
  (VTBL_ENTRY)&(_ZTI8S3511C11[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  0,
  ABISELECT(-6752,-3672),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-6752,-3672),
  (VTBL_ENTRY)&(_ZTI8S3511C11[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3511C11D1Ev,_ZTv0_n32_N8S3511C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3511C11D0Ev,_ZTv0_n32_N8S3511C11D0Ev),
  (VTBL_ENTRY)&_ZN8S3511C122v6Ev,
  ABISELECT(-7232,-3940),
  ABISELECT(-496,-276),
  ABISELECT(-1328,-728),
  ABISELECT(-1424,-784),
  ABISELECT(-480,-268),
  ABISELECT(-864,-472),
  ABISELECT(32,20),
  ABISELECT(-7232,-3940),
  (VTBL_ENTRY)&(_ZTI8S3511C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3511C11D1Ev,_ZTv0_n36_N8S3511C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3511C11D0Ev,_ZTv0_n36_N8S3511C11D0Ev),
  ABISELECT(-7264,-3960),
  0,
  0,
  ABISELECT(-528,-296),
  ABISELECT(-1360,-748),
  ABISELECT(-1456,-804),
  ABISELECT(-512,-288),
  ABISELECT(-896,-492),
  ABISELECT(-7264,-3960),
  (VTBL_ENTRY)&(_ZTI8S3511C11[0]),
  (VTBL_ENTRY)&_ZN8S3511C142v7Ev,
  (VTBL_ENTRY)&_ZN8S3511C142v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S3511C11D1Ev,_ZTv0_n40_N8S3511C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S3511C11D0Ev,_ZTv0_n40_N8S3511C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S3511C11[];
static  VTBL_ENTRY _tg__ZTV7S3511C9__8S3511C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__7S3511C9__8S3511C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C9__8S3511C11[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S3511C9[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__8S3511C11[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C6__8S3511C11[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern void _ZN7S3511C72v2Ev();
extern void _ZN8S3511C12D1Ev();
extern void _ZN8S3511C12D0Ev();
extern void _ZN8S3511C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3511C12__8S3511C11[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  (VTBL_ENTRY)&_ZN8S3511C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3511C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3511C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3511C9__8S3511C12__8S3511C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__8S3511C12__8S3511C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__8S3511C12__8S3511C11[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S3511C12[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern void _ZN8S3511C13D1Ev();
extern void _ZN8S3511C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3511C13__8S3511C11[] = {
  ABISELECT(-496,-276),
  ABISELECT(-1328,-728),
  ABISELECT(-1424,-784),
  ABISELECT(-480,-268),
  ABISELECT(-864,-472),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S3511C13[0]),
  (VTBL_ENTRY)&_ZN8S3511C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3511C13D0Ev,
};
extern void _ZN8S3511C142v7Ev();
extern void _ZN8S3511C142v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S3511C13D1Ev,_ZTv0_n40_N8S3511C13D1Ev)();
extern void ABISELECT(_ZThn32_N8S3511C13D1Ev,_ZThn20_N8S3511C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S3511C13D0Ev,_ZTv0_n40_N8S3511C13D0Ev)();
extern void ABISELECT(_ZThn32_N8S3511C13D0Ev,_ZThn20_N8S3511C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3511C14__8S3511C13__8S3511C11[] = {
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(-528,-296),
  ABISELECT(-1360,-748),
  ABISELECT(-1456,-804),
  ABISELECT(-512,-288),
  ABISELECT(-896,-492),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S3511C13[0]),
  (VTBL_ENTRY)&_ZN8S3511C142v7Ev,
  (VTBL_ENTRY)&_ZN8S3511C142v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S3511C13D1Ev,_ZTv0_n40_N8S3511C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S3511C13D0Ev,_ZTv0_n40_N8S3511C13D0Ev),
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__8S3511C13__8S3511C11[] = {
  0,
  ABISELECT(864,472),
  (VTBL_ENTRY)&(_ZTI8S3511C13[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern void _ZN7S3511C72v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3511C13D1Ev,_ZTv0_n32_N8S3511C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3511C13D0Ev,_ZTv0_n32_N8S3511C13D0Ev)();
extern void _ZN8S3511C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3511C12__8S3511C13__8S3511C11[] = {
  0,
  ABISELECT(480,268),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(480,268),
  (VTBL_ENTRY)&(_ZTI8S3511C13[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3511C13D1Ev,_ZTv0_n32_N8S3511C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3511C13D0Ev,_ZTv0_n32_N8S3511C13D0Ev),
  (VTBL_ENTRY)&_ZN8S3511C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3511C9__8S3511C13__8S3511C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(1424,784),
  (VTBL_ENTRY)&(_ZTI8S3511C13[0]),
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__8S3511C13__8S3511C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(1328,728),
  (VTBL_ENTRY)&(_ZTI8S3511C13[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN8S3511C142v7Ev();
extern void _ZN8S3511C142v8Ev();
extern void _ZN8S3511C14D1Ev();
extern void _ZN8S3511C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3511C14__8S3511C11[] = {
  ABISELECT(-528,-296),
  ABISELECT(-1360,-748),
  ABISELECT(-1456,-804),
  ABISELECT(-512,-288),
  ABISELECT(-896,-492),
  0,
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  (VTBL_ENTRY)&_ZN8S3511C142v7Ev,
  (VTBL_ENTRY)&_ZN8S3511C142v8Ev,
  (VTBL_ENTRY)&_ZN8S3511C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3511C14D0Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__8S3511C14__8S3511C11[] = {
  0,
  ABISELECT(896,492),
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern void _ZN7S3511C72v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3511C14D1Ev,_ZTv0_n32_N8S3511C14D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3511C14D0Ev,_ZTv0_n32_N8S3511C14D0Ev)();
extern void _ZN8S3511C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3511C12__8S3511C14__8S3511C11[] = {
  0,
  ABISELECT(512,288),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(512,288),
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3511C14D1Ev,_ZTv0_n32_N8S3511C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3511C14D0Ev,_ZTv0_n32_N8S3511C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3511C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3511C9__8S3511C14__8S3511C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(1456,804),
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C6__8S3511C14__8S3511C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(1360,748),
  (VTBL_ENTRY)&(_ZTI8S3511C14[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
static  VTT_ENTRY vtt_S3511C11[] = {
  {&(_ZTV8S3511C11[9]),  9,67},
  {&(_ZTV8S3511C11[17]),  17,67},
  {&(_ZTV8S3511C11[23]),  23,67},
  {&(_ZTV8S3511C11[28]),  28,67},
  {&(_ZTV8S3511C11[38]),  38,67},
  {&(_ZTV8S3511C11[51]),  51,67},
  {&(_ZTV8S3511C11[63]),  63,67},
  {&(_tg__ZTV7S3511C9__8S3511C11[5]),  5,5},
  {&(_tg__ZTV7S3511C6__7S3511C9__8S3511C11[6]),  6,8},
  {&(_tg__ZTV7S3511C7__7S3511C9__8S3511C11[3]),  3,4},
  {&(_tg__ZTV7S3511C6__8S3511C11[4]),  4,6},
  {&(_tg__ZTV7S3511C7__7S3511C6__8S3511C11[3]),  3,4},
  {&(_tg__ZTV8S3511C12__8S3511C11[6]),  6,10},
  {&(_tg__ZTV7S3511C9__8S3511C12__8S3511C11[5]),  5,5},
  {&(_tg__ZTV7S3511C6__8S3511C12__8S3511C11[6]),  6,8},
  {&(_tg__ZTV7S3511C7__8S3511C12__8S3511C11[3]),  3,4},
  {&(_tg__ZTV8S3511C13__8S3511C11[8]),  8,10},
  {&(_tg__ZTV8S3511C14__8S3511C13__8S3511C11[10]),  10,14},
  {&(_tg__ZTV7S3511C7__8S3511C13__8S3511C11[3]),  3,4},
  {&(_tg__ZTV8S3511C12__8S3511C13__8S3511C11[9]),  9,13},
  {&(_tg__ZTV7S3511C9__8S3511C13__8S3511C11[5]),  5,5},
  {&(_tg__ZTV7S3511C6__8S3511C13__8S3511C11[6]),  6,8},
  {&(_tg__ZTV8S3511C14__8S3511C11[7]),  7,11},
  {&(_tg__ZTV7S3511C7__8S3511C14__8S3511C11[3]),  3,4},
  {&(_tg__ZTV8S3511C12__8S3511C14__8S3511C11[9]),  9,13},
  {&(_tg__ZTV7S3511C9__8S3511C14__8S3511C11[5]),  5,5},
  {&(_tg__ZTV7S3511C6__8S3511C14__8S3511C11[6]),  6,8},
};
extern VTBL_ENTRY _ZTI8S3511C11[];
extern  VTBL_ENTRY _ZTV8S3511C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3511C11[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S3511C13D0Ev,_ZTv0_n40_N8S3511C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3511C13D0Ev,_ZThn20_N8S3511C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S3511C13D1Ev,_ZTv0_n40_N8S3511C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3511C13D1Ev,_ZThn20_N8S3511C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S3511C11D0Ev,_ZTv0_n40_N8S3511C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7264_N8S3511C11D0Ev,_ZThn3960_N8S3511C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S3511C11D1Ev,_ZTv0_n40_N8S3511C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7264_N8S3511C11D1Ev,_ZThn3960_N8S3511C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3511C11D0Ev,_ZTv0_n36_N8S3511C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7232_N8S3511C11D0Ev,_ZThn3940_N8S3511C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3511C11D1Ev,_ZTv0_n36_N8S3511C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7232_N8S3511C11D1Ev,_ZThn3940_N8S3511C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3511C11D0Ev,_ZTv0_n32_N8S3511C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6752_N8S3511C11D0Ev,_ZThn3672_N8S3511C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3511C11D1Ev,_ZTv0_n32_N8S3511C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6752_N8S3511C11D1Ev,_ZThn3672_N8S3511C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3511C11 = {  "S3511C11", // class name
  bases_S3511C11, 10,
  &(vtc_S3511C11[0]), // expected_vtbl_contents
  &(vtt_S3511C11[0]), // expected_vtt_contents
  ABISELECT(18192,9960), // object size
  NSPAIRA(_ZTI8S3511C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3511C11),67, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3511C11),27, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3511C1  : S3511C2 , S20177C15 {
  int s3511c1f0;
  ::S3511C11 s3511c1f1;
  int s3511c1f2[2];
  virtual  ~S3511C1(); // _ZN7S3511C1D2Ev
  S3511C1(); // tgen
};
//SIG(1 S3511C1) C1{ BC2{ BC3{ VBC4{ v1 Fi Fp FC5{ m Fp[2]}} VBC5 BC6{ BC4 VBC7{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC5 FC5[9] Fp FC4 FC4} VBC5 v3 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} BC7 vd v4 FL:25 Fp Fi[3] FC5} vd Fp Fi Fp Fi[7] FC9{ VBC6 Fi Fc Fp[6] Fi[2] Fp FC5}} BC10{ m Fl FC5[8] Fi Fp[2]} vd Fi FC11{ VBC9 VBC12{ VBC9 BC7 BC5 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} VBC13{ VBC14{ VBC7 VBC12 v7 v8 FC12[7] Fi Fs Fi FC6 Fl[9]} vd Fc Fi[3]} v5 FC15{ VBC16{ VBC17{ BC18{ v9 Fi Fp FC5} VBC19{ v10 Fi[6] Fc:2 FD Fp[2] Fi FD FC8 FC5 FC5[9] Fp FC18 FC18} VBC5 v11 Fp FL Fc[2] FC19 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC20{ VBC16 BC19 BC5 vd v12 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC17 Fp Fs Fl Fi FL FC17[4] Fi} Fs FL:14 Fs Fi[2] FL Fp} Fi[2]}


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

static void Test_S3511C1()
{
  extern Class_Descriptor cd_S3511C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1294,2829)];
    init_test(&cd_S3511C1, buf);
    S3511C1 *dp, &lv = *(dp=new (buf) S3511C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20688,11312), "sizeof(S3511C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3511C1)");
    /*is_ambiguous_... S3511C3::S3511C4 */ AMB_check_base_class_offset(lv, (S3511C4*)(S3511C3*)(S3511C2*), ABISELECT(20264,11088), "S3511C1");
    check_base_class_offset(lv, (S281C37_nt*)(S3511C3*)(S3511C2*), ABISELECT(20304,11108), "S3511C1");
    check_base_class_offset(lv, (S281C37_nt*)(S3511C6*)(S3511C3*)(S3511C2*), ABISELECT(20304,11108), "S3511C1");
    check_base_class_offset(lv, (S3511C4*)(S3511C6*)(S3511C3*)(S3511C2*), 0, "S3511C1");
    check_base_class_offset(lv, (S3511C7*)(S3511C6*)(S3511C3*)(S3511C2*), ABISELECT(20320,11116), "S3511C1");
    check_base_class_offset(lv, (S3511C6*)(S3511C3*)(S3511C2*), 0, "S3511C1");
    /*is_ambiguous_... S3511C3::S3511C7 */ AMB_check_base_class_offset(lv, (S3511C7*)(S3511C3*)(S3511C2*), ABISELECT(464,256), "S3511C1");
    check_base_class_offset(lv, (S3511C3*)(S3511C2*), 0, "S3511C1");
    check_base_class_offset(lv, (S3511C2*), 0, "S3511C1");
    check_base_class_offset(lv, (S20177C15*), ABISELECT(1888,1036), "S3511C1");
    check_field_offset(lv, s3511c1f0, ABISELECT(2048,1116), "S3511C1.s3511c1f0");
    check_field_offset(lv, s3511c1f1, ABISELECT(2064,1120), "S3511C1.s3511c1f1");
    check_field_offset(lv, s3511c1f2, ABISELECT(20256,11080), "S3511C1.s3511c1f2");
    test_class_info(&lv, &cd_S3511C1);
    dp->~S3511C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3511C1(Test_S3511C1, "S3511C1", ABISELECT(20688,11312));

#else // __cplusplus

extern void _ZN7S3511C1C1Ev();
extern void _ZN7S3511C1D2Ev();
Name_Map name_map_S3511C1[] = {
  NSPAIR(_ZN7S3511C1C1Ev),
  NSPAIR(_ZN7S3511C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3511C4;
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3511C4;
extern VTBL_ENTRY _ZTI7S3511C4[];
extern  VTBL_ENTRY _ZTV7S3511C4[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S3511C6;
extern VTBL_ENTRY _ZTI7S3511C6[];
extern  VTBL_ENTRY _ZTV7S3511C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C6[];
extern Class_Descriptor cd_S3511C7;
extern VTBL_ENTRY _ZTI7S3511C7[];
extern  VTBL_ENTRY _ZTV7S3511C7[];
extern Class_Descriptor cd_S3511C3;
extern VTBL_ENTRY _ZTI7S3511C3[];
extern  VTBL_ENTRY _ZTV7S3511C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C3[];
extern Class_Descriptor cd_S3511C2;
extern VTBL_ENTRY _ZTI7S3511C2[];
extern  VTBL_ENTRY _ZTV7S3511C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C2[];
extern Class_Descriptor cd_S20177C15;
extern VTBL_ENTRY _ZTI9S20177C15[];
static Base_Class bases_S3511C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3511C4,    ABISELECT(20264,11088), //bcp->offset
    13, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(20304,11108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3511C7,    ABISELECT(20320,11116), //bcp->offset
    17, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3511C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3511C7,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3511C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3511C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20177C15,    ABISELECT(1888,1036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3511C1[];
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
extern void _ZN7S3511C1D1Ev();
extern void _ZN7S3511C1D0Ev();
extern void _ZN7S3511C32v4Ev();
extern void _ZN7S3511C72v2Ev();
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY vtc_S3511C1[] = {
  ABISELECT(20264,11088),
  ABISELECT(20304,11108),
  ABISELECT(20320,11116),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C1[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3511C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3511C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3511C32v4Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3511C1[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
  0,
  ABISELECT(-20264,-11088),
  (VTBL_ENTRY)&(_ZTI7S3511C1[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  0,
  ABISELECT(-20320,-11116),
  (VTBL_ENTRY)&(_ZTI7S3511C1[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S3511C1[];
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
extern void _ZN7S3511C2D1Ev();
extern void _ZN7S3511C2D0Ev();
extern void _ZN7S3511C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C2__7S3511C1[] = {
  ABISELECT(20264,11088),
  ABISELECT(20304,11108),
  ABISELECT(20320,11116),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C2[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3511C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3511C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3511C32v4Ev,
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
extern void _ZN7S3511C3D1Ev();
extern void _ZN7S3511C3D0Ev();
extern void _ZN7S3511C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C37S3511C2__7S3511C1[] = {
  ABISELECT(20264,11088),
  ABISELECT(20304,11108),
  ABISELECT(20320,11116),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C3[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3511C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3511C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3511C32v4Ev,
};
extern void _ZN7S3511C42v1Ev();
extern void _ZN7S3511C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C67S3511C37S3511C2__7S3511C1[] = {
  ABISELECT(20304,11108),
  ABISELECT(20320,11116),
  0,
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3511C62v3Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C67S3511C37S3511C2__7S3511C1[] = {
  0,
  ABISELECT(-20320,-11116),
  (VTBL_ENTRY)&(_ZTI7S3511C6[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern void _ZN7S3511C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C4__7S3511C37S3511C2__7S3511C1[] = {
  0,
  ABISELECT(-20264,-11088),
  (VTBL_ENTRY)&(_ZTI7S3511C3[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C37S3511C2__7S3511C1[] = {
  0,
  ABISELECT(-20320,-11116),
  (VTBL_ENTRY)&(_ZTI7S3511C3[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
extern void _ZN7S3511C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C4__7S3511C2__7S3511C1[] = {
  0,
  ABISELECT(-20264,-11088),
  (VTBL_ENTRY)&(_ZTI7S3511C2[0]),
  (VTBL_ENTRY)&_ZN7S3511C42v1Ev,
};
extern void _ZN7S3511C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3511C7__7S3511C2__7S3511C1[] = {
  0,
  ABISELECT(-20320,-11116),
  (VTBL_ENTRY)&(_ZTI7S3511C2[0]),
  (VTBL_ENTRY)&_ZN7S3511C72v2Ev,
};
static  VTT_ENTRY vtt_S3511C1[] = {
  {&(_ZTV7S3511C1[5]),  5,21},
  {&(_tg__ZTV7S3511C2__7S3511C1[5]),  5,10},
  {&(_tg__ZTV7S3511C37S3511C2__7S3511C1[5]),  5,10},
  {&(_tg__ZTV7S3511C67S3511C37S3511C2__7S3511C1[4]),  4,6},
  {&(_tg__ZTV7S3511C7__7S3511C67S3511C37S3511C2__7S3511C1[3]),  3,4},
  {&(_tg__ZTV7S3511C4__7S3511C37S3511C2__7S3511C1[3]),  3,4},
  {&(_tg__ZTV7S3511C7__7S3511C37S3511C2__7S3511C1[3]),  3,4},
  {&(_tg__ZTV7S3511C4__7S3511C2__7S3511C1[3]),  3,4},
  {&(_tg__ZTV7S3511C7__7S3511C2__7S3511C1[3]),  3,4},
  {&(_ZTV7S3511C1[16]),  16,21},
  {&(_ZTV7S3511C1[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S3511C1[];
extern  VTBL_ENTRY _ZTV7S3511C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3511C1[];
Class_Descriptor cd_S3511C1 = {  "S3511C1", // class name
  bases_S3511C1, 9,
  &(vtc_S3511C1[0]), // expected_vtbl_contents
  &(vtt_S3511C1[0]), // expected_vtt_contents
  ABISELECT(20688,11312), // object size
  NSPAIRA(_ZTI7S3511C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3511C1),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3511C1),11, //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  S3510C4  {
  int s3510c4f0;
  void *s3510c4f1;
  ::S281C37_nt s3510c4f2;
  virtual void  v1(); // _ZN7S3510C42v1Ev
  ~S3510C4(); // tgen
  S3510C4(); // tgen
};
//SIG(-1 S3510C4) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S3510C4()
{
  extern Class_Descriptor cd_S3510C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3510C4, buf);
    S3510C4 *dp, &lv = *(dp=new (buf) S3510C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3510C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3510C4)");
    check_field_offset(lv, s3510c4f0, ABISELECT(8,4), "S3510C4.s3510c4f0");
    check_field_offset(lv, s3510c4f1, ABISELECT(16,8), "S3510C4.s3510c4f1");
    check_field_offset(lv, s3510c4f2, ABISELECT(24,12), "S3510C4.s3510c4f2");
    test_class_info(&lv, &cd_S3510C4);
    dp->~S3510C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3510C4(Test_S3510C4, "S3510C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3510C4C1Ev();
extern void _ZN7S3510C4D1Ev();
Name_Map name_map_S3510C4[] = {
  NSPAIR(_ZN7S3510C4C1Ev),
  NSPAIR(_ZN7S3510C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3510C4[];
extern void _ZN7S3510C42v1Ev();
static  VTBL_ENTRY vtc_S3510C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C4[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
};
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
Class_Descriptor cd_S3510C4 = {  "S3510C4", // class name
  0,0,//no base classes
  &(vtc_S3510C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3510C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3510C4),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3510C7  {
  int s3510c7f0[6];
  char s3510c7f1:2;
  long double s3510c7f2;
  void *s3510c7f3[2];
  int s3510c7f4;
  long double s3510c7f5;
  ::S20176C3_nt s3510c7f6;
  ::S281C37_nt s3510c7f7;
  ::S281C37_nt s3510c7f8[9];
  void *s3510c7f9;
  ::S3510C4 s3510c7f10;
  ::S3510C4 s3510c7f11;
  virtual void  v2(); // _ZN7S3510C72v2Ev
  ~S3510C7(); // tgen
  S3510C7(); // tgen
};
//SIG(-1 S3510C7) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S3510C7()
{
  extern Class_Descriptor cd_S3510C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S3510C7, buf);
    S3510C7 *dp, &lv = *(dp=new (buf) S3510C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S3510C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3510C7)");
    check_field_offset(lv, s3510c7f0, ABISELECT(8,4), "S3510C7.s3510c7f0");
    set_bf_and_test(lv, s3510c7f1, ABISELECT(32,28), 0, 2, 1, "S3510C7");
    set_bf_and_test(lv, s3510c7f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S3510C7");
    check_field_offset(lv, s3510c7f2, ABISELECT(48,32), "S3510C7.s3510c7f2");
    check_field_offset(lv, s3510c7f3, ABISELECT(64,44), "S3510C7.s3510c7f3");
    check_field_offset(lv, s3510c7f4, ABISELECT(80,52), "S3510C7.s3510c7f4");
    check_field_offset(lv, s3510c7f5, ABISELECT(96,56), "S3510C7.s3510c7f5");
    check_field_offset(lv, s3510c7f6, ABISELECT(112,68), "S3510C7.s3510c7f6");
    check_field_offset(lv, s3510c7f7, ABISELECT(120,72), "S3510C7.s3510c7f7");
    check_field_offset(lv, s3510c7f8, ABISELECT(136,80), "S3510C7.s3510c7f8");
    check_field_offset(lv, s3510c7f9, ABISELECT(280,152), "S3510C7.s3510c7f9");
    check_field_offset(lv, s3510c7f10, ABISELECT(288,156), "S3510C7.s3510c7f10");
    check_field_offset(lv, s3510c7f11, ABISELECT(328,176), "S3510C7.s3510c7f11");
    test_class_info(&lv, &cd_S3510C7);
    dp->~S3510C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3510C7(Test_S3510C7, "S3510C7", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN7S3510C7C1Ev();
extern void _ZN7S3510C7D1Ev();
Name_Map name_map_S3510C7[] = {
  NSPAIR(_ZN7S3510C7C1Ev),
  NSPAIR(_ZN7S3510C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3510C7[];
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY vtc_S3510C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C7[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
Class_Descriptor cd_S3510C7 = {  "S3510C7", // class name
  0,0,//no base classes
  &(vtc_S3510C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI7S3510C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3510C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3510C6  : S3510C4 , virtual S3510C7 , virtual S281C37_nt {
  void *s3510c6f0;
  __tsi64 s3510c6f1;
  char s3510c6f2[2];
  ::S3510C7 s3510c6f3;
  short s3510c6f4[7];
  int s3510c6f5;
  char s3510c6f6;
  int s3510c6f7:20;
  virtual void  v3(); // _ZN7S3510C62v3Ev
  ~S3510C6(); // tgen
  S3510C6(); // tgen
};
//SIG(-1 S3510C6) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


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

static void Test_S3510C6()
{
  extern Class_Descriptor cd_S3510C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S3510C6, buf);
    S3510C6 *dp, &lv = *(dp=new (buf) S3510C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S3510C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3510C6)");
    check_base_class_offset(lv, (S3510C4*), 0, "S3510C6");
    check_base_class_offset(lv, (S3510C7*), ABISELECT(464,256), "S3510C6");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S3510C6");
    check_field_offset(lv, s3510c6f0, ABISELECT(40,20), "S3510C6.s3510c6f0");
    check_field_offset(lv, s3510c6f1, ABISELECT(48,24), "S3510C6.s3510c6f1");
    check_field_offset(lv, s3510c6f2, ABISELECT(56,32), "S3510C6.s3510c6f2");
    check_field_offset(lv, s3510c6f3, ABISELECT(64,36), "S3510C6.s3510c6f3");
    check_field_offset(lv, s3510c6f4, ABISELECT(432,232), "S3510C6.s3510c6f4");
    check_field_offset(lv, s3510c6f5, ABISELECT(448,248), "S3510C6.s3510c6f5");
    check_field_offset(lv, s3510c6f6, ABISELECT(452,252), "S3510C6.s3510c6f6");
    set_bf_and_test(lv, s3510c6f7, ABISELECT(453,253), 0, 20, 1, "S3510C6");
    set_bf_and_test(lv, s3510c6f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S3510C6");
    test_class_info(&lv, &cd_S3510C6);
    dp->~S3510C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3510C6(Test_S3510C6, "S3510C6", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN7S3510C6C1Ev();
extern void _ZN7S3510C6D1Ev();
Name_Map name_map_S3510C6[] = {
  NSPAIR(_ZN7S3510C6C1Ev),
  NSPAIR(_ZN7S3510C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3510C4;
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S3510C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3510C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3510C7,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3510C6[];
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY vtc_S3510C6[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S3510C6[];
static  VTT_ENTRY vtt_S3510C6[] = {
  {&(_ZTV7S3510C6[4]),  4,10},
  {&(_ZTV7S3510C6[9]),  9,10},
};
extern VTBL_ENTRY _ZTI7S3510C6[];
extern  VTBL_ENTRY _ZTV7S3510C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C6[];
Class_Descriptor cd_S3510C6 = {  "S3510C6", // class name
  bases_S3510C6, 3,
  &(vtc_S3510C6[0]), // expected_vtbl_contents
  &(vtt_S3510C6[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI7S3510C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3510C6),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3510C6),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  S3510C3  : virtual S3510C4 , virtual S281C37_nt , S3510C6 , S3510C7 {
  int s3510c3f0:25;
  void *s3510c3f1;
  int s3510c3f2[3];
  ::S281C37_nt s3510c3f3;
  virtual  ~S3510C3(); // _ZN7S3510C3D2Ev
  virtual void  v4(); // _ZN7S3510C32v4Ev
  S3510C3(); // tgen
};
//SIG(-1 S3510C3) C1{ VBC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC3 BC4{ BC2 VBC5{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC3 FC3[9] Fp FC2 FC2} VBC3 v4 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} BC5 vd v1 Fi:25 Fp Fi[3] FC3}


 S3510C3 ::~S3510C3(){ note_dtor("S3510C3", this);}
void  S3510C3 ::v4(){vfunc_called(this, "_ZN7S3510C32v4Ev");}
S3510C3 ::S3510C3(){ note_ctor("S3510C3", this);} // tgen

static void Test_S3510C3()
{
  extern Class_Descriptor cd_S3510C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(83,177)];
    init_test(&cd_S3510C3, buf);
    S3510C3 *dp, &lv = *(dp=new (buf) S3510C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1312,704), "sizeof(S3510C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3510C3)");
    /*is_ambiguous_... S3510C3::S3510C4 */ AMB_check_base_class_offset(lv, (S3510C4*), ABISELECT(880,480), "S3510C3");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(920,500), "S3510C3");
    check_base_class_offset(lv, (S281C37_nt*)(S3510C6*), ABISELECT(920,500), "S3510C3");
    check_base_class_offset(lv, (S3510C4*)(S3510C6*), 0, "S3510C3");
    check_base_class_offset(lv, (S3510C7*)(S3510C6*), ABISELECT(944,508), "S3510C3");
    check_base_class_offset(lv, (S3510C6*), 0, "S3510C3");
    /*is_ambiguous_... S3510C3::S3510C7 */ AMB_check_base_class_offset(lv, (S3510C7*), ABISELECT(464,256), "S3510C3");
    set_bf_and_test(lv, s3510c3f0, ABISELECT(832,452), 0, 25, 1, "S3510C3");
    set_bf_and_test(lv, s3510c3f0, ABISELECT(832,452), 0, 25, hide_sll(1LL<<24), "S3510C3");
    check_field_offset(lv, s3510c3f1, ABISELECT(840,456), "S3510C3.s3510c3f1");
    check_field_offset(lv, s3510c3f2, ABISELECT(848,460), "S3510C3.s3510c3f2");
    check_field_offset(lv, s3510c3f3, ABISELECT(864,472), "S3510C3.s3510c3f3");
    test_class_info(&lv, &cd_S3510C3);
    dp->~S3510C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3510C3(Test_S3510C3, "S3510C3", ABISELECT(1312,704));

#else // __cplusplus

extern void _ZN7S3510C3C1Ev();
extern void _ZN7S3510C3D2Ev();
Name_Map name_map_S3510C3[] = {
  NSPAIR(_ZN7S3510C3C1Ev),
  NSPAIR(_ZN7S3510C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3510C4;
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3510C4;
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S3510C6;
extern VTBL_ENTRY _ZTI7S3510C6[];
extern  VTBL_ENTRY _ZTV7S3510C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C6[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
static Base_Class bases_S3510C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3510C4,    ABISELECT(880,480), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(920,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3510C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C7,    ABISELECT(944,508), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S3510C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3510C7,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3510C3[];
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
extern void _ZN7S3510C3D1Ev();
extern void _ZN7S3510C3D0Ev();
extern void _ZN7S3510C32v4Ev();
extern void _ZN7S3510C72v2Ev();
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY vtc_S3510C3[] = {
  ABISELECT(880,480),
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C3[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3510C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3510C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3510C32v4Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3510C3[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  0,
  ABISELECT(-880,-480),
  (VTBL_ENTRY)&(_ZTI7S3510C3[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI7S3510C3[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S3510C3[];
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__7S3510C3[] = {
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C6__7S3510C3[] = {
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
static  VTT_ENTRY vtt_S3510C3[] = {
  {&(_ZTV7S3510C3[5]),  5,21},
  {&(_tg__ZTV7S3510C6__7S3510C3[4]),  4,6},
  {&(_tg__ZTV7S3510C7__7S3510C6__7S3510C3[3]),  3,4},
  {&(_ZTV7S3510C3[16]),  16,21},
  {&(_ZTV7S3510C3[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S3510C3[];
extern  VTBL_ENTRY _ZTV7S3510C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C3[];
Class_Descriptor cd_S3510C3 = {  "S3510C3", // class name
  bases_S3510C3, 6,
  &(vtc_S3510C3[0]), // expected_vtbl_contents
  &(vtt_S3510C3[0]), // expected_vtt_contents
  ABISELECT(1312,704), // object size
  NSPAIRA(_ZTI7S3510C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3510C3),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3510C3),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3510C9  : virtual S3510C6 {
  int s3510c9f0;
  char s3510c9f1;
  void *s3510c9f2[6];
  int s3510c9f3[2];
  void *s3510c9f4;
  ::S281C37_nt s3510c9f5;
  ~S3510C9(); // tgen
  S3510C9(); // tgen
};
//SIG(-1 S3510C9) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S3510C9()
{
  extern Class_Descriptor cd_S3510C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S3510C9, buf);
    S3510C9 *dp, &lv = *(dp=new (buf) S3510C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S3510C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3510C9)");
    check_base_class_offset(lv, (S3510C4*)(S3510C6*), ABISELECT(96,56), "S3510C9");
    check_base_class_offset(lv, (S3510C7*)(S3510C6*), ABISELECT(560,312), "S3510C9");
    check_base_class_offset(lv, (S281C37_nt*)(S3510C6*), ABISELECT(928,508), "S3510C9");
    check_base_class_offset(lv, (S3510C6*), ABISELECT(96,56), "S3510C9");
    check_field_offset(lv, s3510c9f0, ABISELECT(8,4), "S3510C9.s3510c9f0");
    check_field_offset(lv, s3510c9f1, ABISELECT(12,8), "S3510C9.s3510c9f1");
    check_field_offset(lv, s3510c9f2, ABISELECT(16,12), "S3510C9.s3510c9f2");
    check_field_offset(lv, s3510c9f3, ABISELECT(64,36), "S3510C9.s3510c9f3");
    check_field_offset(lv, s3510c9f4, ABISELECT(72,44), "S3510C9.s3510c9f4");
    check_field_offset(lv, s3510c9f5, ABISELECT(80,48), "S3510C9.s3510c9f5");
    test_class_info(&lv, &cd_S3510C9);
    dp->~S3510C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3510C9(Test_S3510C9, "S3510C9", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN7S3510C9C1Ev();
extern void _ZN7S3510C9D1Ev();
Name_Map name_map_S3510C9[] = {
  NSPAIR(_ZN7S3510C9C1Ev),
  NSPAIR(_ZN7S3510C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3510C4;
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3510C6;
extern VTBL_ENTRY _ZTI7S3510C6[];
extern  VTBL_ENTRY _ZTV7S3510C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C6[];
static Base_Class bases_S3510C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3510C4,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3510C7,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3510C6,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3510C9[];
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY vtc_S3510C9[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S3510C9[];
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__7S3510C9[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C6__7S3510C9[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
static  VTT_ENTRY vtt_S3510C9[] = {
  {&(_ZTV7S3510C9[5]),  5,17},
  {&(_ZTV7S3510C9[11]),  11,17},
  {&(_ZTV7S3510C9[16]),  16,17},
  {&(_tg__ZTV7S3510C6__7S3510C9[4]),  4,6},
  {&(_tg__ZTV7S3510C7__7S3510C6__7S3510C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3510C9[];
extern  VTBL_ENTRY _ZTV7S3510C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C9[];
Class_Descriptor cd_S3510C9 = {  "S3510C9", // class name
  bases_S3510C9, 4,
  &(vtc_S3510C9[0]), // expected_vtbl_contents
  &(vtt_S3510C9[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI7S3510C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3510C9),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3510C9),5, //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  S3510C2  : S3510C3 {
  void *s3510c2f0;
  int s3510c2f1;
  void *s3510c2f2;
  int s3510c2f3[7];
  ::S3510C9 s3510c2f4;
  virtual  ~S3510C2(); // _ZN7S3510C2D2Ev
  S3510C2(); // tgen
};
//SIG(-1 S3510C2) C1{ BC2{ VBC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC4 BC5{ BC3 VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} BC6 vd v4 Fi:25 Fp Fi[3] FC4} vd Fp Fi Fp Fi[7] FC8{ VBC5 Fi Fc Fp[6] Fi[2] Fp FC4}}


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

static void Test_S3510C2()
{
  extern Class_Descriptor cd_S3510C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(146,316)];
    init_test(&cd_S3510C2, buf);
    S3510C2 *dp, &lv = *(dp=new (buf) S3510C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2320,1260), "sizeof(S3510C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3510C2)");
    /*is_ambiguous_... S3510C3::S3510C4 */ AMB_check_base_class_offset(lv, (S3510C4*)(S3510C3*), ABISELECT(1888,1036), "S3510C2");
    check_base_class_offset(lv, (S281C37_nt*)(S3510C3*), ABISELECT(1928,1056), "S3510C2");
    check_base_class_offset(lv, (S281C37_nt*)(S3510C6*)(S3510C3*), ABISELECT(1928,1056), "S3510C2");
    check_base_class_offset(lv, (S3510C4*)(S3510C6*)(S3510C3*), 0, "S3510C2");
    check_base_class_offset(lv, (S3510C7*)(S3510C6*)(S3510C3*), ABISELECT(1952,1064), "S3510C2");
    check_base_class_offset(lv, (S3510C6*)(S3510C3*), 0, "S3510C2");
    /*is_ambiguous_... S3510C3::S3510C7 */ AMB_check_base_class_offset(lv, (S3510C7*)(S3510C3*), ABISELECT(464,256), "S3510C2");
    check_base_class_offset(lv, (S3510C3*), 0, "S3510C2");
    check_field_offset(lv, s3510c2f0, ABISELECT(880,480), "S3510C2.s3510c2f0");
    check_field_offset(lv, s3510c2f1, ABISELECT(888,484), "S3510C2.s3510c2f1");
    check_field_offset(lv, s3510c2f2, ABISELECT(896,488), "S3510C2.s3510c2f2");
    check_field_offset(lv, s3510c2f3, ABISELECT(904,492), "S3510C2.s3510c2f3");
    check_field_offset(lv, s3510c2f4, ABISELECT(944,520), "S3510C2.s3510c2f4");
    test_class_info(&lv, &cd_S3510C2);
    dp->~S3510C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3510C2(Test_S3510C2, "S3510C2", ABISELECT(2320,1260));

#else // __cplusplus

extern void _ZN7S3510C2C1Ev();
extern void _ZN7S3510C2D2Ev();
Name_Map name_map_S3510C2[] = {
  NSPAIR(_ZN7S3510C2C1Ev),
  NSPAIR(_ZN7S3510C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3510C4;
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3510C4;
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S3510C6;
extern VTBL_ENTRY _ZTI7S3510C6[];
extern  VTBL_ENTRY _ZTV7S3510C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C6[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S3510C3;
extern VTBL_ENTRY _ZTI7S3510C3[];
extern  VTBL_ENTRY _ZTV7S3510C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C3[];
static Base_Class bases_S3510C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3510C4,    ABISELECT(1888,1036), //bcp->offset
    13, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(1928,1056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C7,    ABISELECT(1952,1064), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S3510C6,    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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3510C7,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3510C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3510C2[];
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
extern void _ZN7S3510C2D1Ev();
extern void _ZN7S3510C2D0Ev();
extern void _ZN7S3510C32v4Ev();
extern void _ZN7S3510C72v2Ev();
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY vtc_S3510C2[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C2[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3510C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3510C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3510C32v4Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3510C2[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S3510C2[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S3510C2[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S3510C2[];
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
extern void _ZN7S3510C3D1Ev();
extern void _ZN7S3510C3D0Ev();
extern void _ZN7S3510C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C3__7S3510C2[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C3[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3510C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3510C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3510C32v4Ev,
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C67S3510C3__7S3510C2[] = {
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C67S3510C3__7S3510C2[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern void _ZN7S3510C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C4__7S3510C3__7S3510C2[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S3510C3[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C3__7S3510C2[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S3510C3[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
static  VTT_ENTRY vtt_S3510C2[] = {
  {&(_ZTV7S3510C2[5]),  5,21},
  {&(_tg__ZTV7S3510C3__7S3510C2[5]),  5,10},
  {&(_tg__ZTV7S3510C67S3510C3__7S3510C2[4]),  4,6},
  {&(_tg__ZTV7S3510C7__7S3510C67S3510C3__7S3510C2[3]),  3,4},
  {&(_tg__ZTV7S3510C4__7S3510C3__7S3510C2[3]),  3,4},
  {&(_tg__ZTV7S3510C7__7S3510C3__7S3510C2[3]),  3,4},
  {&(_ZTV7S3510C2[16]),  16,21},
  {&(_ZTV7S3510C2[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S3510C2[];
extern  VTBL_ENTRY _ZTV7S3510C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C2[];
Class_Descriptor cd_S3510C2 = {  "S3510C2", // class name
  bases_S3510C2, 7,
  &(vtc_S3510C2[0]), // expected_vtbl_contents
  &(vtt_S3510C2[0]), // expected_vtt_contents
  ABISELECT(2320,1260), // object size
  NSPAIRA(_ZTI7S3510C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3510C2),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3510C2),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3510C12  : virtual S3510C9 , S3510C7 , S281C37_nt {
  char s3510c12f0;
  int s3510c12f1[2];
  long double s3510c12f2[2];
  short s3510c12f3;
  void *s3510c12f4;
  int s3510c12f5;
  __tsi64 s3510c12f6;
  int s3510c12f7;
  void *s3510c12f8;
  virtual  ~S3510C12(); // _ZN8S3510C12D2Ev
  virtual void  v6(); // _ZN8S3510C122v6Ev
  S3510C12(); // tgen
};
//SIG(-1 S3510C12) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S3510C12 ::~S3510C12(){ note_dtor("S3510C12", this);}
void  S3510C12 ::v6(){vfunc_called(this, "_ZN8S3510C122v6Ev");}
S3510C12 ::S3510C12(){ note_ctor("S3510C12", this);} // tgen

static void Test_S3510C12()
{
  extern Class_Descriptor cd_S3510C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S3510C12, buf);
    S3510C12 *dp, &lv = *(dp=new (buf) S3510C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S3510C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3510C12)");
    check_base_class_offset(lv, (S3510C4*)(S3510C6*), ABISELECT(576,324), "S3510C12");
    check_base_class_offset(lv, (S3510C7*)(S3510C6*), ABISELECT(1040,580), "S3510C12");
    check_base_class_offset(lv, (S281C37_nt*)(S3510C6*), ABISELECT(1408,776), "S3510C12");
    check_base_class_offset(lv, (S3510C6*)(S3510C9*), ABISELECT(576,324), "S3510C12");
    check_base_class_offset(lv, (S3510C9*), ABISELECT(480,268), "S3510C12");
    /*is_ambiguous_... S3510C12::S3510C7 */ AMB_check_base_class_offset(lv, (S3510C7*), 0, "S3510C12");
    /*is_ambiguous_... S3510C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S3510C12");
    check_field_offset(lv, s3510c12f0, ABISELECT(384,204), "S3510C12.s3510c12f0");
    check_field_offset(lv, s3510c12f1, ABISELECT(388,208), "S3510C12.s3510c12f1");
    check_field_offset(lv, s3510c12f2, ABISELECT(400,216), "S3510C12.s3510c12f2");
    check_field_offset(lv, s3510c12f3, ABISELECT(432,240), "S3510C12.s3510c12f3");
    check_field_offset(lv, s3510c12f4, ABISELECT(440,244), "S3510C12.s3510c12f4");
    check_field_offset(lv, s3510c12f5, ABISELECT(448,248), "S3510C12.s3510c12f5");
    check_field_offset(lv, s3510c12f6, ABISELECT(456,252), "S3510C12.s3510c12f6");
    check_field_offset(lv, s3510c12f7, ABISELECT(464,260), "S3510C12.s3510c12f7");
    check_field_offset(lv, s3510c12f8, ABISELECT(472,264), "S3510C12.s3510c12f8");
    test_class_info(&lv, &cd_S3510C12);
    dp->~S3510C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3510C12(Test_S3510C12, "S3510C12", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN8S3510C12C1Ev();
extern void _ZN8S3510C12D2Ev();
Name_Map name_map_S3510C12[] = {
  NSPAIR(_ZN8S3510C12C1Ev),
  NSPAIR(_ZN8S3510C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3510C4;
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3510C6;
extern VTBL_ENTRY _ZTI7S3510C6[];
extern  VTBL_ENTRY _ZTV7S3510C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C6[];
extern Class_Descriptor cd_S3510C9;
extern VTBL_ENTRY _ZTI7S3510C9[];
extern  VTBL_ENTRY _ZTV7S3510C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C9[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S3510C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3510C4,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3510C7,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C6,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3510C9,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3510C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3510C12[];
extern void _ZN7S3510C72v2Ev();
extern void _ZN8S3510C12D1Ev();
extern void _ZN8S3510C12D0Ev();
extern void _ZN8S3510C122v6Ev();
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY vtc_S3510C12[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  (VTBL_ENTRY)&_ZN8S3510C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3510C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3510C122v6Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern VTBL_ENTRY _ZTV8S3510C12[];
static  VTBL_ENTRY _tg__ZTV7S3510C9__8S3510C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__7S3510C9__8S3510C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C9__8S3510C12[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__8S3510C12[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C6__8S3510C12[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
static  VTT_ENTRY vtt_S3510C12[] = {
  {&(_ZTV8S3510C12[6]),  6,27},
  {&(_ZTV8S3510C12[15]),  15,27},
  {&(_ZTV8S3510C12[21]),  21,27},
  {&(_ZTV8S3510C12[26]),  26,27},
  {&(_tg__ZTV7S3510C9__8S3510C12[5]),  5,5},
  {&(_tg__ZTV7S3510C6__7S3510C9__8S3510C12[6]),  6,8},
  {&(_tg__ZTV7S3510C7__7S3510C9__8S3510C12[3]),  3,4},
  {&(_tg__ZTV7S3510C6__8S3510C12[4]),  4,6},
  {&(_tg__ZTV7S3510C7__7S3510C6__8S3510C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3510C12[];
extern  VTBL_ENTRY _ZTV8S3510C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3510C12[];
Class_Descriptor cd_S3510C12 = {  "S3510C12", // class name
  bases_S3510C12, 7,
  &(vtc_S3510C12[0]), // expected_vtbl_contents
  &(vtt_S3510C12[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI8S3510C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3510C12),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3510C12),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3510C14  : virtual S3510C7 , virtual S3510C12 {
  ::S3510C12 s3510c14f0[7];
  int s3510c14f1;
  short s3510c14f2;
  int s3510c14f3;
  ::S3510C6 s3510c14f4;
  __tsi64 s3510c14f5[9];
  virtual void  v7(); // _ZN8S3510C142v7Ev
  virtual void  v8(); // _ZN8S3510C142v8Ev
  ~S3510C14(); // tgen
  S3510C14(); // tgen
};
//SIG(-1 S3510C14) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 FL[9]}


void  S3510C14 ::v7(){vfunc_called(this, "_ZN8S3510C142v7Ev");}
void  S3510C14 ::v8(){vfunc_called(this, "_ZN8S3510C142v8Ev");}
S3510C14 ::~S3510C14(){ note_dtor("S3510C14", this);} // tgen
S3510C14 ::S3510C14(){ note_ctor("S3510C14", this);} // tgen

static void Test_S3510C14()
{
  extern Class_Descriptor cd_S3510C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1706)];
    init_test(&cd_S3510C14, buf);
    S3510C14 *dp, &lv = *(dp=new (buf) S3510C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6820), "sizeof(S3510C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3510C14)");
    /*is_ambiguous_... S3510C14::S3510C7 */ AMB_check_base_class_offset(lv, (S3510C7*), ABISELECT(10928,6036), "S3510C14");
    check_base_class_offset(lv, (S3510C7*)(S3510C6*), ABISELECT(10928,6036), "S3510C14");
    check_base_class_offset(lv, (S3510C4*)(S3510C6*), ABISELECT(11872,6556), "S3510C14");
    check_base_class_offset(lv, (S281C37_nt*)(S3510C6*), ABISELECT(12328,6812), "S3510C14");
    check_base_class_offset(lv, (S3510C6*)(S3510C9*), ABISELECT(11872,6556), "S3510C14");
    check_base_class_offset(lv, (S3510C9*)(S3510C12*), ABISELECT(11776,6500), "S3510C14");
    /*is_ambiguous_... S3510C12::S3510C7 */ AMB_check_base_class_offset(lv, (S3510C7*)(S3510C12*), ABISELECT(11296,6232), "S3510C14");
    /*is_ambiguous_... S3510C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S3510C12*), ABISELECT(11664,6428), "S3510C14");
    check_base_class_offset(lv, (S3510C12*), ABISELECT(11296,6232), "S3510C14");
    check_field_offset(lv, s3510c14f0, ABISELECT(16,4), "S3510C14.s3510c14f0");
    check_field_offset(lv, s3510c14f1, ABISELECT(9984,5492), "S3510C14.s3510c14f1");
    check_field_offset(lv, s3510c14f2, ABISELECT(9988,5496), "S3510C14.s3510c14f2");
    check_field_offset(lv, s3510c14f3, ABISELECT(9992,5500), "S3510C14.s3510c14f3");
    check_field_offset(lv, s3510c14f4, ABISELECT(10000,5504), "S3510C14.s3510c14f4");
    check_field_offset(lv, s3510c14f5, ABISELECT(10848,5964), "S3510C14.s3510c14f5");
    test_class_info(&lv, &cd_S3510C14);
    dp->~S3510C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3510C14(Test_S3510C14, "S3510C14", ABISELECT(12352,6820));

#else // __cplusplus

extern void _ZN8S3510C14C1Ev();
extern void _ZN8S3510C14D1Ev();
Name_Map name_map_S3510C14[] = {
  NSPAIR(_ZN8S3510C14C1Ev),
  NSPAIR(_ZN8S3510C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S3510C4;
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3510C6;
extern VTBL_ENTRY _ZTI7S3510C6[];
extern  VTBL_ENTRY _ZTV7S3510C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C6[];
extern Class_Descriptor cd_S3510C9;
extern VTBL_ENTRY _ZTI7S3510C9[];
extern  VTBL_ENTRY _ZTV7S3510C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C9[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3510C12;
extern VTBL_ENTRY _ZTI8S3510C12[];
extern  VTBL_ENTRY _ZTV8S3510C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3510C12[];
static Base_Class bases_S3510C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3510C7,    ABISELECT(10928,6036), //bcp->offset
    11, //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_S3510C4,    ABISELECT(11872,6556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C6,    ABISELECT(11872,6556), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3510C9,    ABISELECT(11776,6500), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3510C7,    ABISELECT(11296,6232), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C12,    ABISELECT(11296,6232), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3510C14[];
extern void _ZN8S3510C142v7Ev();
extern void _ZN8S3510C142v8Ev();
extern void _ZN8S3510C14D1Ev();
extern void _ZN8S3510C14D0Ev();
extern void _ZN7S3510C72v2Ev();
extern void _ZN7S3510C72v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3510C14D1Ev,_ZTv0_n32_N8S3510C14D1Ev)();
extern void ABISELECT(_ZThn11296_N8S3510C14D1Ev,_ZThn6232_N8S3510C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3510C14D0Ev,_ZTv0_n32_N8S3510C14D0Ev)();
extern void ABISELECT(_ZThn11296_N8S3510C14D0Ev,_ZThn6232_N8S3510C14D0Ev)() __attribute__((weak));
extern void _ZN8S3510C122v6Ev();
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY vtc_S3510C14[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  (VTBL_ENTRY)&_ZN8S3510C142v7Ev,
  (VTBL_ENTRY)&_ZN8S3510C142v8Ev,
  (VTBL_ENTRY)&_ZN8S3510C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3510C14D0Ev,
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3510C14D1Ev,_ZTv0_n32_N8S3510C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3510C14D0Ev,_ZTv0_n32_N8S3510C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3510C122v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S3510C14[];
extern void _ZN7S3510C72v2Ev();
extern void _ZN8S3510C12D1Ev();
extern void _ZN8S3510C12D0Ev();
extern void _ZN8S3510C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3510C12__8S3510C14[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  (VTBL_ENTRY)&_ZN8S3510C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3510C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3510C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3510C9__8S3510C12__8S3510C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__8S3510C12__8S3510C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__8S3510C12__8S3510C14[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3510C9__8S3510C14[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__7S3510C9__8S3510C14[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C9__8S3510C14[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__8S3510C14[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C6__8S3510C14[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
static  VTT_ENTRY vtt_S3510C14[] = {
  {&(_ZTV8S3510C14[7]),  7,41},
  {&(_ZTV8S3510C14[14]),  14,41},
  {&(_ZTV8S3510C14[24]),  24,41},
  {&(_ZTV8S3510C14[33]),  33,41},
  {&(_ZTV8S3510C14[39]),  39,41},
  {&(_tg__ZTV8S3510C12__8S3510C14[6]),  6,10},
  {&(_tg__ZTV7S3510C9__8S3510C12__8S3510C14[5]),  5,5},
  {&(_tg__ZTV7S3510C6__8S3510C12__8S3510C14[6]),  6,8},
  {&(_tg__ZTV7S3510C7__8S3510C12__8S3510C14[3]),  3,4},
  {&(_tg__ZTV7S3510C9__8S3510C14[5]),  5,5},
  {&(_tg__ZTV7S3510C6__7S3510C9__8S3510C14[6]),  6,8},
  {&(_tg__ZTV7S3510C7__7S3510C9__8S3510C14[3]),  3,4},
  {&(_tg__ZTV7S3510C6__8S3510C14[4]),  4,6},
  {&(_tg__ZTV7S3510C7__7S3510C6__8S3510C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3510C14[];
extern  VTBL_ENTRY _ZTV8S3510C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3510C14[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3510C14D0Ev,_ZTv0_n32_N8S3510C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N8S3510C14D0Ev,_ZThn6232_N8S3510C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3510C14D1Ev,_ZTv0_n32_N8S3510C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N8S3510C14D1Ev,_ZThn6232_N8S3510C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3510C14 = {  "S3510C14", // class name
  bases_S3510C14, 8,
  &(vtc_S3510C14[0]), // expected_vtbl_contents
  &(vtt_S3510C14[0]), // expected_vtt_contents
  ABISELECT(12352,6820), // object size
  NSPAIRA(_ZTI8S3510C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3510C14),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3510C14),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3510C13  : virtual S3510C14 {
  char s3510c13f0;
  int s3510c13f1[3];
  virtual  ~S3510C13(); // _ZN8S3510C13D2Ev
  S3510C13(); // tgen
};
//SIG(-1 S3510C13) C1{ VBC2{ VBC3{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v2 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v3 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v5 v6 FC7[7] Fi Fs Fi FC9 FL[9]} vd Fc Fi[3]}


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

static void Test_S3510C13()
{
  extern Class_Descriptor cd_S3510C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(775,1711)];
    init_test(&cd_S3510C13, buf);
    S3510C13 *dp, &lv = *(dp=new (buf) S3510C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12384,6840), "sizeof(S3510C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3510C13)");
    /*is_ambiguous_... S3510C14::S3510C7 */ AMB_check_base_class_offset(lv, (S3510C7*)(S3510C14*), ABISELECT(10960,6056), "S3510C13");
    check_base_class_offset(lv, (S3510C7*)(S3510C6*), ABISELECT(10960,6056), "S3510C13");
    check_base_class_offset(lv, (S3510C4*)(S3510C6*), ABISELECT(11904,6576), "S3510C13");
    check_base_class_offset(lv, (S281C37_nt*)(S3510C6*), ABISELECT(12360,6832), "S3510C13");
    check_base_class_offset(lv, (S3510C6*)(S3510C9*), ABISELECT(11904,6576), "S3510C13");
    check_base_class_offset(lv, (S3510C9*)(S3510C12*), ABISELECT(11808,6520), "S3510C13");
    /*is_ambiguous_... S3510C12::S3510C7 */ AMB_check_base_class_offset(lv, (S3510C7*)(S3510C12*), ABISELECT(11328,6252), "S3510C13");
    /*is_ambiguous_... S3510C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S3510C12*), ABISELECT(11696,6448), "S3510C13");
    check_base_class_offset(lv, (S3510C12*)(S3510C14*), ABISELECT(11328,6252), "S3510C13");
    check_base_class_offset(lv, (S3510C14*), ABISELECT(32,20), "S3510C13");
    check_field_offset(lv, s3510c13f0, ABISELECT(8,4), "S3510C13.s3510c13f0");
    check_field_offset(lv, s3510c13f1, ABISELECT(12,8), "S3510C13.s3510c13f1");
    test_class_info(&lv, &cd_S3510C13);
    dp->~S3510C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3510C13(Test_S3510C13, "S3510C13", ABISELECT(12384,6840));

#else // __cplusplus

extern void _ZN8S3510C13C1Ev();
extern void _ZN8S3510C13D2Ev();
Name_Map name_map_S3510C13[] = {
  NSPAIR(_ZN8S3510C13C1Ev),
  NSPAIR(_ZN8S3510C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S3510C4;
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3510C6;
extern VTBL_ENTRY _ZTI7S3510C6[];
extern  VTBL_ENTRY _ZTV7S3510C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C6[];
extern Class_Descriptor cd_S3510C9;
extern VTBL_ENTRY _ZTI7S3510C9[];
extern  VTBL_ENTRY _ZTV7S3510C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C9[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3510C12;
extern VTBL_ENTRY _ZTI8S3510C12[];
extern  VTBL_ENTRY _ZTV8S3510C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3510C12[];
extern Class_Descriptor cd_S3510C14;
extern VTBL_ENTRY _ZTI8S3510C14[];
extern  VTBL_ENTRY _ZTV8S3510C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3510C14[];
static Base_Class bases_S3510C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3510C7,    ABISELECT(10960,6056), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3510C4,    ABISELECT(11904,6576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12360,6832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C6,    ABISELECT(11904,6576), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3510C9,    ABISELECT(11808,6520), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3510C7,    ABISELECT(11328,6252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11696,6448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C12,    ABISELECT(11328,6252), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3510C14,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3510C13[];
extern void _ZN8S3510C13D1Ev();
extern void _ZN8S3510C13D0Ev();
extern void _ZN8S3510C142v7Ev();
extern void _ZN8S3510C142v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S3510C13D1Ev,_ZTv0_n40_N8S3510C13D1Ev)();
extern void ABISELECT(_ZThn32_N8S3510C13D1Ev,_ZThn20_N8S3510C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S3510C13D0Ev,_ZTv0_n40_N8S3510C13D0Ev)();
extern void ABISELECT(_ZThn32_N8S3510C13D0Ev,_ZThn20_N8S3510C13D0Ev)() __attribute__((weak));
extern void _ZN7S3510C72v2Ev();
extern void _ZN7S3510C72v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3510C13D1Ev,_ZTv0_n32_N8S3510C13D1Ev)();
extern void ABISELECT(_ZThn11328_N8S3510C13D1Ev,_ZThn6252_N8S3510C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3510C13D0Ev,_ZTv0_n32_N8S3510C13D0Ev)();
extern void ABISELECT(_ZThn11328_N8S3510C13D0Ev,_ZThn6252_N8S3510C13D0Ev)() __attribute__((weak));
extern void _ZN8S3510C122v6Ev();
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY vtc_S3510C13[] = {
  ABISELECT(12360,6832),
  ABISELECT(11904,6576),
  ABISELECT(11808,6520),
  ABISELECT(11328,6252),
  ABISELECT(10960,6056),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S3510C13[0]),
  (VTBL_ENTRY)&_ZN8S3510C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3510C13D0Ev,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S3510C13[0]),
  (VTBL_ENTRY)&_ZN8S3510C142v7Ev,
  (VTBL_ENTRY)&_ZN8S3510C142v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S3510C13D1Ev,_ZTv0_n40_N8S3510C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S3510C13D0Ev,_ZTv0_n40_N8S3510C13D0Ev),
  0,
  ABISELECT(-10960,-6056),
  (VTBL_ENTRY)&(_ZTI8S3510C13[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  0,
  ABISELECT(-11328,-6252),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11328,-6252),
  (VTBL_ENTRY)&(_ZTI8S3510C13[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3510C13D1Ev,_ZTv0_n32_N8S3510C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3510C13D0Ev,_ZTv0_n32_N8S3510C13D0Ev),
  (VTBL_ENTRY)&_ZN8S3510C122v6Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11808,-6520),
  (VTBL_ENTRY)&(_ZTI8S3510C13[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11904,-6576),
  (VTBL_ENTRY)&(_ZTI8S3510C13[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S3510C13[];
extern void _ZN8S3510C142v7Ev();
extern void _ZN8S3510C142v8Ev();
extern void _ZN8S3510C14D1Ev();
extern void _ZN8S3510C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3510C14__8S3510C13[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  (VTBL_ENTRY)&_ZN8S3510C142v7Ev,
  (VTBL_ENTRY)&_ZN8S3510C142v8Ev,
  (VTBL_ENTRY)&_ZN8S3510C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3510C14D0Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__8S3510C14__8S3510C13[] = {
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern void _ZN7S3510C72v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3510C14D1Ev,_ZTv0_n32_N8S3510C14D1Ev)();
extern void ABISELECT(_ZThn11296_N8S3510C14D1Ev,_ZThn6232_N8S3510C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3510C14D0Ev,_ZTv0_n32_N8S3510C14D0Ev)();
extern void ABISELECT(_ZThn11296_N8S3510C14D0Ev,_ZThn6232_N8S3510C14D0Ev)() __attribute__((weak));
extern void _ZN8S3510C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3510C12__8S3510C14__8S3510C13[] = {
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3510C14D1Ev,_ZTv0_n32_N8S3510C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3510C14D0Ev,_ZTv0_n32_N8S3510C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3510C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3510C9__8S3510C14__8S3510C13[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__8S3510C14__8S3510C13[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
extern void _ZN8S3510C12D1Ev();
extern void _ZN8S3510C12D0Ev();
extern void _ZN8S3510C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3510C12__8S3510C13[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  (VTBL_ENTRY)&_ZN8S3510C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3510C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3510C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3510C9__8S3510C12__8S3510C13[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__8S3510C12__8S3510C13[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__8S3510C12__8S3510C13[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3510C9__8S3510C13[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__7S3510C9__8S3510C13[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C9__8S3510C13[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__8S3510C13[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C6__8S3510C13[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
static  VTT_ENTRY vtt_S3510C13[] = {
  {&(_ZTV8S3510C13[8]),  8,54},
  {&(_ZTV8S3510C13[20]),  20,54},
  {&(_ZTV8S3510C13[27]),  27,54},
  {&(_ZTV8S3510C13[37]),  37,54},
  {&(_ZTV8S3510C13[46]),  46,54},
  {&(_ZTV8S3510C13[52]),  52,54},
  {&(_tg__ZTV8S3510C14__8S3510C13[7]),  7,11},
  {&(_tg__ZTV7S3510C7__8S3510C14__8S3510C13[3]),  3,4},
  {&(_tg__ZTV8S3510C12__8S3510C14__8S3510C13[9]),  9,13},
  {&(_tg__ZTV7S3510C9__8S3510C14__8S3510C13[5]),  5,5},
  {&(_tg__ZTV7S3510C6__8S3510C14__8S3510C13[6]),  6,8},
  {&(_tg__ZTV8S3510C12__8S3510C13[6]),  6,10},
  {&(_tg__ZTV7S3510C9__8S3510C12__8S3510C13[5]),  5,5},
  {&(_tg__ZTV7S3510C6__8S3510C12__8S3510C13[6]),  6,8},
  {&(_tg__ZTV7S3510C7__8S3510C12__8S3510C13[3]),  3,4},
  {&(_tg__ZTV7S3510C9__8S3510C13[5]),  5,5},
  {&(_tg__ZTV7S3510C6__7S3510C9__8S3510C13[6]),  6,8},
  {&(_tg__ZTV7S3510C7__7S3510C9__8S3510C13[3]),  3,4},
  {&(_tg__ZTV7S3510C6__8S3510C13[4]),  4,6},
  {&(_tg__ZTV7S3510C7__7S3510C6__8S3510C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3510C13[];
extern  VTBL_ENTRY _ZTV8S3510C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3510C13[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3510C14D0Ev,_ZTv0_n32_N8S3510C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N8S3510C14D0Ev,_ZThn6232_N8S3510C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3510C14D1Ev,_ZTv0_n32_N8S3510C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N8S3510C14D1Ev,_ZThn6232_N8S3510C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3510C13D0Ev,_ZTv0_n32_N8S3510C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N8S3510C13D0Ev,_ZThn6252_N8S3510C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3510C13D1Ev,_ZTv0_n32_N8S3510C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N8S3510C13D1Ev,_ZThn6252_N8S3510C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S3510C13D0Ev,_ZTv0_n40_N8S3510C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3510C13D0Ev,_ZThn20_N8S3510C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S3510C13D1Ev,_ZTv0_n40_N8S3510C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3510C13D1Ev,_ZThn20_N8S3510C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3510C13 = {  "S3510C13", // class name
  bases_S3510C13, 9,
  &(vtc_S3510C13[0]), // expected_vtbl_contents
  &(vtt_S3510C13[0]), // expected_vtt_contents
  ABISELECT(12384,6840), // object size
  NSPAIRA(_ZTI8S3510C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3510C13),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3510C13),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3510C11  : virtual S3510C9 , virtual S3510C12 , virtual S3510C13 {
  ::S20176C13 s3510c11f0;
  short s3510c11f1;
  __tsi64 s3510c11f2:14;
  short s3510c11f3;
  int s3510c11f4[2];
  __tsi64 s3510c11f5;
  void *s3510c11f6;
  virtual void  v5(); // _ZN8S3510C112v5Ev
  ~S3510C11(); // tgen
  S3510C11(); // tgen
};
//SIG(-1 S3510C11) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC8{ VBC2 BC6 BC5 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} VBC9{ VBC10{ VBC6 VBC8 v6 v7 FC8[7] Fi Fs Fi FC3 FL[9]} vd Fc Fi[3]} v1 FC11{ VBC12{ VBC13{ BC14{ v8 Fi Fp FC5} VBC15{ v9 Fi[6] Fc:2 FD Fp[2] Fi FD FC7 FC5 FC5[9] Fp FC14 FC14} VBC5 v10 Fp FL Fc[2] FC15 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC16{ VBC12 BC15 BC5 vd v11 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC13 Fp Fs FL Fi FL FC13[4] Fi} Fs FL:14 Fs Fi[2] FL Fp}


void  S3510C11 ::v5(){vfunc_called(this, "_ZN8S3510C112v5Ev");}
S3510C11 ::~S3510C11(){ note_dtor("S3510C11", this);} // tgen
S3510C11 ::S3510C11(){ note_ctor("S3510C11", this);} // tgen

static void Test_S3510C11()
{
  extern Class_Descriptor cd_S3510C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1138,2501)];
    init_test(&cd_S3510C11, buf);
    S3510C11 *dp, &lv = *(dp=new (buf) S3510C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(18192,10000), "sizeof(S3510C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3510C11)");
    check_base_class_offset(lv, (S3510C4*)(S3510C6*), ABISELECT(5904,3216), "S3510C11");
    check_base_class_offset(lv, (S3510C7*)(S3510C6*), ABISELECT(6368,3472), "S3510C11");
    /*is_ambiguous_... S3510C14::S3510C7 */ AMB_check_base_class_offset(lv, (S3510C7*)(S3510C14*), ABISELECT(6368,3472), "S3510C11");
    check_base_class_offset(lv, (S281C37_nt*)(S3510C6*), ABISELECT(6736,3668), "S3510C11");
    check_base_class_offset(lv, (S3510C6*)(S3510C9*), ABISELECT(5904,3216), "S3510C11");
    check_base_class_offset(lv, (S3510C9*), ABISELECT(5808,3160), "S3510C11");
    check_base_class_offset(lv, (S3510C9*)(S3510C12*), ABISELECT(5808,3160), "S3510C11");
    /*is_ambiguous_... S3510C12::S3510C7 */ AMB_check_base_class_offset(lv, (S3510C7*)(S3510C12*), ABISELECT(6752,3676), "S3510C11");
    /*is_ambiguous_... S3510C12::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S3510C12*), ABISELECT(7120,3872), "S3510C11");
    check_base_class_offset(lv, (S3510C12*), ABISELECT(6752,3676), "S3510C11");
    check_base_class_offset(lv, (S3510C12*)(S3510C14*), ABISELECT(6752,3676), "S3510C11");
    check_base_class_offset(lv, (S3510C14*)(S3510C13*), ABISELECT(7264,3964), "S3510C11");
    check_base_class_offset(lv, (S3510C13*), ABISELECT(7232,3944), "S3510C11");
    check_field_offset(lv, s3510c11f0, ABISELECT(16,4), "S3510C11.s3510c11f0");
    check_field_offset(lv, s3510c11f1, ABISELECT(5776,3132), "S3510C11.s3510c11f1");
    set_bf_and_test(lv, s3510c11f2, ABISELECT(5778,3134), 0, 14, 1, "S3510C11");
    set_bf_and_test(lv, s3510c11f2, ABISELECT(5778,3134), 0, 14, hide_sll(1LL<<13), "S3510C11");
    check_field_offset(lv, s3510c11f3, ABISELECT(5780,3136), "S3510C11.s3510c11f3");
    check_field_offset(lv, s3510c11f4, ABISELECT(5784,3140), "S3510C11.s3510c11f4");
    check_field_offset(lv, s3510c11f5, ABISELECT(5792,3148), "S3510C11.s3510c11f5");
    check_field_offset(lv, s3510c11f6, ABISELECT(5800,3156), "S3510C11.s3510c11f6");
    test_class_info(&lv, &cd_S3510C11);
    dp->~S3510C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3510C11(Test_S3510C11, "S3510C11", ABISELECT(18192,10000));

#else // __cplusplus

extern void _ZN8S3510C11C1Ev();
extern void _ZN8S3510C11D1Ev();
Name_Map name_map_S3510C11[] = {
  NSPAIR(_ZN8S3510C11C1Ev),
  NSPAIR(_ZN8S3510C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3510C4;
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3510C6;
extern VTBL_ENTRY _ZTI7S3510C6[];
extern  VTBL_ENTRY _ZTV7S3510C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C6[];
extern Class_Descriptor cd_S3510C9;
extern VTBL_ENTRY _ZTI7S3510C9[];
extern  VTBL_ENTRY _ZTV7S3510C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C9[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3510C12;
extern VTBL_ENTRY _ZTI8S3510C12[];
extern  VTBL_ENTRY _ZTV8S3510C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3510C12[];
extern Class_Descriptor cd_S3510C14;
extern VTBL_ENTRY _ZTI8S3510C14[];
extern  VTBL_ENTRY _ZTV8S3510C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3510C14[];
extern Class_Descriptor cd_S3510C13;
extern VTBL_ENTRY _ZTI8S3510C13[];
extern  VTBL_ENTRY _ZTV8S3510C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3510C13[];
static Base_Class bases_S3510C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3510C4,    ABISELECT(5904,3216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C7,    ABISELECT(6368,3472), //bcp->offset
    25, //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_S281C37_nt,    ABISELECT(6736,3668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C6,    ABISELECT(5904,3216), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3510C9,    ABISELECT(5808,3160), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3510C7,    ABISELECT(6752,3676), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(7120,3872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C12,    ABISELECT(6752,3676), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3510C14,    ABISELECT(7264,3964), //bcp->offset
    53, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3510C13,    ABISELECT(7232,3944), //bcp->offset
    42, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //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 _ZTI8S3510C11[];
extern void _ZN8S3510C112v5Ev();
extern void _ZN8S3510C11D1Ev();
extern void _ZN8S3510C11D0Ev();
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
extern void _ZN7S3510C72v2Ev();
extern void _ZN7S3510C72v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3510C11D1Ev,_ZTv0_n32_N8S3510C11D1Ev)();
extern void ABISELECT(_ZThn6752_N8S3510C11D1Ev,_ZThn3676_N8S3510C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3510C11D0Ev,_ZTv0_n32_N8S3510C11D0Ev)();
extern void ABISELECT(_ZThn6752_N8S3510C11D0Ev,_ZThn3676_N8S3510C11D0Ev)() __attribute__((weak));
extern void _ZN8S3510C122v6Ev();
extern void ABISELECT(_ZTv0_n72_N8S3510C11D1Ev,_ZTv0_n36_N8S3510C11D1Ev)();
extern void ABISELECT(_ZThn7232_N8S3510C11D1Ev,_ZThn3944_N8S3510C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3510C11D0Ev,_ZTv0_n36_N8S3510C11D0Ev)();
extern void ABISELECT(_ZThn7232_N8S3510C11D0Ev,_ZThn3944_N8S3510C11D0Ev)() __attribute__((weak));
extern void _ZN8S3510C142v7Ev();
extern void _ZN8S3510C142v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S3510C11D1Ev,_ZTv0_n40_N8S3510C11D1Ev)();
extern void ABISELECT(_ZThn7264_N8S3510C11D1Ev,_ZThn3964_N8S3510C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S3510C11D0Ev,_ZTv0_n40_N8S3510C11D0Ev)();
extern void ABISELECT(_ZThn7264_N8S3510C11D0Ev,_ZThn3964_N8S3510C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3510C11[] = {
  ABISELECT(7264,3964),
  ABISELECT(7232,3944),
  ABISELECT(6752,3676),
  ABISELECT(6736,3668),
  ABISELECT(6368,3472),
  ABISELECT(5904,3216),
  ABISELECT(5808,3160),
  0,
  (VTBL_ENTRY)&(_ZTI8S3510C11[0]),
  (VTBL_ENTRY)&_ZN8S3510C112v5Ev,
  (VTBL_ENTRY)&_ZN8S3510C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3510C11D0Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-5808,-3160),
  (VTBL_ENTRY)&(_ZTI8S3510C11[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-5904,-3216),
  (VTBL_ENTRY)&(_ZTI8S3510C11[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
  0,
  ABISELECT(-6368,-3472),
  (VTBL_ENTRY)&(_ZTI8S3510C11[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  0,
  ABISELECT(-6752,-3676),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-6752,-3676),
  (VTBL_ENTRY)&(_ZTI8S3510C11[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3510C11D1Ev,_ZTv0_n32_N8S3510C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3510C11D0Ev,_ZTv0_n32_N8S3510C11D0Ev),
  (VTBL_ENTRY)&_ZN8S3510C122v6Ev,
  ABISELECT(-7232,-3944),
  ABISELECT(-496,-276),
  ABISELECT(-1328,-728),
  ABISELECT(-1424,-784),
  ABISELECT(-480,-268),
  ABISELECT(-864,-472),
  ABISELECT(32,20),
  ABISELECT(-7232,-3944),
  (VTBL_ENTRY)&(_ZTI8S3510C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3510C11D1Ev,_ZTv0_n36_N8S3510C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3510C11D0Ev,_ZTv0_n36_N8S3510C11D0Ev),
  ABISELECT(-7264,-3964),
  0,
  0,
  ABISELECT(-528,-296),
  ABISELECT(-1360,-748),
  ABISELECT(-1456,-804),
  ABISELECT(-512,-288),
  ABISELECT(-896,-492),
  ABISELECT(-7264,-3964),
  (VTBL_ENTRY)&(_ZTI8S3510C11[0]),
  (VTBL_ENTRY)&_ZN8S3510C142v7Ev,
  (VTBL_ENTRY)&_ZN8S3510C142v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S3510C11D1Ev,_ZTv0_n40_N8S3510C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S3510C11D0Ev,_ZTv0_n40_N8S3510C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S3510C11[];
static  VTBL_ENTRY _tg__ZTV7S3510C9__8S3510C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__7S3510C9__8S3510C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C9__8S3510C11[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S3510C9[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__8S3510C11[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C6__8S3510C11[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern void _ZN7S3510C72v2Ev();
extern void _ZN8S3510C12D1Ev();
extern void _ZN8S3510C12D0Ev();
extern void _ZN8S3510C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3510C12__8S3510C11[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  (VTBL_ENTRY)&_ZN8S3510C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3510C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3510C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3510C9__8S3510C12__8S3510C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__8S3510C12__8S3510C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__8S3510C12__8S3510C11[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S3510C12[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern void _ZN8S3510C13D1Ev();
extern void _ZN8S3510C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3510C13__8S3510C11[] = {
  ABISELECT(-496,-276),
  ABISELECT(-1328,-728),
  ABISELECT(-1424,-784),
  ABISELECT(-480,-268),
  ABISELECT(-864,-472),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S3510C13[0]),
  (VTBL_ENTRY)&_ZN8S3510C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3510C13D0Ev,
};
extern void _ZN8S3510C142v7Ev();
extern void _ZN8S3510C142v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S3510C13D1Ev,_ZTv0_n40_N8S3510C13D1Ev)();
extern void ABISELECT(_ZThn32_N8S3510C13D1Ev,_ZThn20_N8S3510C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S3510C13D0Ev,_ZTv0_n40_N8S3510C13D0Ev)();
extern void ABISELECT(_ZThn32_N8S3510C13D0Ev,_ZThn20_N8S3510C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3510C14__8S3510C13__8S3510C11[] = {
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(-528,-296),
  ABISELECT(-1360,-748),
  ABISELECT(-1456,-804),
  ABISELECT(-512,-288),
  ABISELECT(-896,-492),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S3510C13[0]),
  (VTBL_ENTRY)&_ZN8S3510C142v7Ev,
  (VTBL_ENTRY)&_ZN8S3510C142v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S3510C13D1Ev,_ZTv0_n40_N8S3510C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S3510C13D0Ev,_ZTv0_n40_N8S3510C13D0Ev),
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__8S3510C13__8S3510C11[] = {
  0,
  ABISELECT(864,472),
  (VTBL_ENTRY)&(_ZTI8S3510C13[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern void _ZN7S3510C72v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3510C13D1Ev,_ZTv0_n32_N8S3510C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3510C13D0Ev,_ZTv0_n32_N8S3510C13D0Ev)();
extern void _ZN8S3510C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3510C12__8S3510C13__8S3510C11[] = {
  0,
  ABISELECT(480,268),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(480,268),
  (VTBL_ENTRY)&(_ZTI8S3510C13[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3510C13D1Ev,_ZTv0_n32_N8S3510C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3510C13D0Ev,_ZTv0_n32_N8S3510C13D0Ev),
  (VTBL_ENTRY)&_ZN8S3510C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3510C9__8S3510C13__8S3510C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(1424,784),
  (VTBL_ENTRY)&(_ZTI8S3510C13[0]),
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__8S3510C13__8S3510C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(1328,728),
  (VTBL_ENTRY)&(_ZTI8S3510C13[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN8S3510C142v7Ev();
extern void _ZN8S3510C142v8Ev();
extern void _ZN8S3510C14D1Ev();
extern void _ZN8S3510C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3510C14__8S3510C11[] = {
  ABISELECT(-528,-296),
  ABISELECT(-1360,-748),
  ABISELECT(-1456,-804),
  ABISELECT(-512,-288),
  ABISELECT(-896,-492),
  0,
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  (VTBL_ENTRY)&_ZN8S3510C142v7Ev,
  (VTBL_ENTRY)&_ZN8S3510C142v8Ev,
  (VTBL_ENTRY)&_ZN8S3510C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3510C14D0Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__8S3510C14__8S3510C11[] = {
  0,
  ABISELECT(896,492),
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern void _ZN7S3510C72v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3510C14D1Ev,_ZTv0_n32_N8S3510C14D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3510C14D0Ev,_ZTv0_n32_N8S3510C14D0Ev)();
extern void _ZN8S3510C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3510C12__8S3510C14__8S3510C11[] = {
  0,
  ABISELECT(512,288),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(512,288),
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3510C14D1Ev,_ZTv0_n32_N8S3510C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3510C14D0Ev,_ZTv0_n32_N8S3510C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3510C122v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3510C9__8S3510C14__8S3510C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(1456,804),
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C6__8S3510C14__8S3510C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(1360,748),
  (VTBL_ENTRY)&(_ZTI8S3510C14[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
static  VTT_ENTRY vtt_S3510C11[] = {
  {&(_ZTV8S3510C11[9]),  9,67},
  {&(_ZTV8S3510C11[17]),  17,67},
  {&(_ZTV8S3510C11[23]),  23,67},
  {&(_ZTV8S3510C11[28]),  28,67},
  {&(_ZTV8S3510C11[38]),  38,67},
  {&(_ZTV8S3510C11[51]),  51,67},
  {&(_ZTV8S3510C11[63]),  63,67},
  {&(_tg__ZTV7S3510C9__8S3510C11[5]),  5,5},
  {&(_tg__ZTV7S3510C6__7S3510C9__8S3510C11[6]),  6,8},
  {&(_tg__ZTV7S3510C7__7S3510C9__8S3510C11[3]),  3,4},
  {&(_tg__ZTV7S3510C6__8S3510C11[4]),  4,6},
  {&(_tg__ZTV7S3510C7__7S3510C6__8S3510C11[3]),  3,4},
  {&(_tg__ZTV8S3510C12__8S3510C11[6]),  6,10},
  {&(_tg__ZTV7S3510C9__8S3510C12__8S3510C11[5]),  5,5},
  {&(_tg__ZTV7S3510C6__8S3510C12__8S3510C11[6]),  6,8},
  {&(_tg__ZTV7S3510C7__8S3510C12__8S3510C11[3]),  3,4},
  {&(_tg__ZTV8S3510C13__8S3510C11[8]),  8,10},
  {&(_tg__ZTV8S3510C14__8S3510C13__8S3510C11[10]),  10,14},
  {&(_tg__ZTV7S3510C7__8S3510C13__8S3510C11[3]),  3,4},
  {&(_tg__ZTV8S3510C12__8S3510C13__8S3510C11[9]),  9,13},
  {&(_tg__ZTV7S3510C9__8S3510C13__8S3510C11[5]),  5,5},
  {&(_tg__ZTV7S3510C6__8S3510C13__8S3510C11[6]),  6,8},
  {&(_tg__ZTV8S3510C14__8S3510C11[7]),  7,11},
  {&(_tg__ZTV7S3510C7__8S3510C14__8S3510C11[3]),  3,4},
  {&(_tg__ZTV8S3510C12__8S3510C14__8S3510C11[9]),  9,13},
  {&(_tg__ZTV7S3510C9__8S3510C14__8S3510C11[5]),  5,5},
  {&(_tg__ZTV7S3510C6__8S3510C14__8S3510C11[6]),  6,8},
};
extern VTBL_ENTRY _ZTI8S3510C11[];
extern  VTBL_ENTRY _ZTV8S3510C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3510C11[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S3510C13D0Ev,_ZTv0_n40_N8S3510C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3510C13D0Ev,_ZThn20_N8S3510C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S3510C13D1Ev,_ZTv0_n40_N8S3510C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3510C13D1Ev,_ZThn20_N8S3510C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S3510C11D0Ev,_ZTv0_n40_N8S3510C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7264_N8S3510C11D0Ev,_ZThn3964_N8S3510C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S3510C11D1Ev,_ZTv0_n40_N8S3510C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7264_N8S3510C11D1Ev,_ZThn3964_N8S3510C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3510C11D0Ev,_ZTv0_n36_N8S3510C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7232_N8S3510C11D0Ev,_ZThn3944_N8S3510C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3510C11D1Ev,_ZTv0_n36_N8S3510C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7232_N8S3510C11D1Ev,_ZThn3944_N8S3510C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3510C11D0Ev,_ZTv0_n32_N8S3510C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6752_N8S3510C11D0Ev,_ZThn3676_N8S3510C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3510C11D1Ev,_ZTv0_n32_N8S3510C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6752_N8S3510C11D1Ev,_ZThn3676_N8S3510C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3510C11 = {  "S3510C11", // class name
  bases_S3510C11, 10,
  &(vtc_S3510C11[0]), // expected_vtbl_contents
  &(vtt_S3510C11[0]), // expected_vtt_contents
  ABISELECT(18192,10000), // object size
  NSPAIRA(_ZTI8S3510C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3510C11),67, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3510C11),27, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3510C1  : S3510C2 , S20176C15 {
  int s3510c1f0;
  ::S3510C11 s3510c1f1;
  int s3510c1f2[2];
  virtual  ~S3510C1(); // _ZN7S3510C1D2Ev
  S3510C1(); // tgen
};
//SIG(1 S3510C1) C1{ BC2{ BC3{ VBC4{ v1 Fi Fp FC5{ m Fp[2]}} VBC5 BC6{ BC4 VBC7{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC5 FC5[9] Fp FC4 FC4} VBC5 v3 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} BC7 vd v4 Fi:25 Fp Fi[3] FC5} vd Fp Fi Fp Fi[7] FC9{ VBC6 Fi Fc Fp[6] Fi[2] Fp FC5}} BC10{ m FL FC5[8] Fi Fp[2]} vd Fi FC11{ VBC9 VBC12{ VBC9 BC7 BC5 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} VBC13{ VBC14{ VBC7 VBC12 v7 v8 FC12[7] Fi Fs Fi FC6 FL[9]} vd Fc Fi[3]} v5 FC15{ VBC16{ VBC17{ BC18{ v9 Fi Fp FC5} VBC19{ v10 Fi[6] Fc:2 FD Fp[2] Fi FD FC8 FC5 FC5[9] Fp FC18 FC18} VBC5 v11 Fp FL Fc[2] FC19 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC20{ VBC16 BC19 BC5 vd v12 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC17 Fp Fs FL Fi FL FC17[4] Fi} Fs FL:14 Fs Fi[2] FL Fp} Fi[2]}


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

static void Test_S3510C1()
{
  extern Class_Descriptor cd_S3510C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1294,2840)];
    init_test(&cd_S3510C1, buf);
    S3510C1 *dp, &lv = *(dp=new (buf) S3510C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20688,11356), "sizeof(S3510C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3510C1)");
    /*is_ambiguous_... S3510C3::S3510C4 */ AMB_check_base_class_offset(lv, (S3510C4*)(S3510C3*)(S3510C2*), ABISELECT(20264,11132), "S3510C1");
    check_base_class_offset(lv, (S281C37_nt*)(S3510C3*)(S3510C2*), ABISELECT(20304,11152), "S3510C1");
    check_base_class_offset(lv, (S281C37_nt*)(S3510C6*)(S3510C3*)(S3510C2*), ABISELECT(20304,11152), "S3510C1");
    check_base_class_offset(lv, (S3510C4*)(S3510C6*)(S3510C3*)(S3510C2*), 0, "S3510C1");
    check_base_class_offset(lv, (S3510C7*)(S3510C6*)(S3510C3*)(S3510C2*), ABISELECT(20320,11160), "S3510C1");
    check_base_class_offset(lv, (S3510C6*)(S3510C3*)(S3510C2*), 0, "S3510C1");
    /*is_ambiguous_... S3510C3::S3510C7 */ AMB_check_base_class_offset(lv, (S3510C7*)(S3510C3*)(S3510C2*), ABISELECT(464,256), "S3510C1");
    check_base_class_offset(lv, (S3510C3*)(S3510C2*), 0, "S3510C1");
    check_base_class_offset(lv, (S3510C2*), 0, "S3510C1");
    check_base_class_offset(lv, (S20176C15*), ABISELECT(1888,1036), "S3510C1");
    check_field_offset(lv, s3510c1f0, ABISELECT(2048,1120), "S3510C1.s3510c1f0");
    check_field_offset(lv, s3510c1f1, ABISELECT(2064,1124), "S3510C1.s3510c1f1");
    check_field_offset(lv, s3510c1f2, ABISELECT(20256,11124), "S3510C1.s3510c1f2");
    test_class_info(&lv, &cd_S3510C1);
    dp->~S3510C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3510C1(Test_S3510C1, "S3510C1", ABISELECT(20688,11356));

#else // __cplusplus

extern void _ZN7S3510C1C1Ev();
extern void _ZN7S3510C1D2Ev();
Name_Map name_map_S3510C1[] = {
  NSPAIR(_ZN7S3510C1C1Ev),
  NSPAIR(_ZN7S3510C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3510C4;
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S3510C4;
extern VTBL_ENTRY _ZTI7S3510C4[];
extern  VTBL_ENTRY _ZTV7S3510C4[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S3510C6;
extern VTBL_ENTRY _ZTI7S3510C6[];
extern  VTBL_ENTRY _ZTV7S3510C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C6[];
extern Class_Descriptor cd_S3510C7;
extern VTBL_ENTRY _ZTI7S3510C7[];
extern  VTBL_ENTRY _ZTV7S3510C7[];
extern Class_Descriptor cd_S3510C3;
extern VTBL_ENTRY _ZTI7S3510C3[];
extern  VTBL_ENTRY _ZTV7S3510C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C3[];
extern Class_Descriptor cd_S3510C2;
extern VTBL_ENTRY _ZTI7S3510C2[];
extern  VTBL_ENTRY _ZTV7S3510C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C2[];
extern Class_Descriptor cd_S20176C15;
extern VTBL_ENTRY _ZTI9S20176C15[];
static Base_Class bases_S3510C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3510C4,    ABISELECT(20264,11132), //bcp->offset
    13, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(20304,11152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3510C7,    ABISELECT(20320,11160), //bcp->offset
    17, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3510C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3510C7,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3510C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3510C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20176C15,    ABISELECT(1888,1036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3510C1[];
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
extern void _ZN7S3510C1D1Ev();
extern void _ZN7S3510C1D0Ev();
extern void _ZN7S3510C32v4Ev();
extern void _ZN7S3510C72v2Ev();
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY vtc_S3510C1[] = {
  ABISELECT(20264,11132),
  ABISELECT(20304,11152),
  ABISELECT(20320,11160),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C1[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3510C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3510C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3510C32v4Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S3510C1[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
  0,
  ABISELECT(-20264,-11132),
  (VTBL_ENTRY)&(_ZTI7S3510C1[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  0,
  ABISELECT(-20320,-11160),
  (VTBL_ENTRY)&(_ZTI7S3510C1[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S3510C1[];
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
extern void _ZN7S3510C2D1Ev();
extern void _ZN7S3510C2D0Ev();
extern void _ZN7S3510C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C2__7S3510C1[] = {
  ABISELECT(20264,11132),
  ABISELECT(20304,11152),
  ABISELECT(20320,11160),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C2[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3510C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3510C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3510C32v4Ev,
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
extern void _ZN7S3510C3D1Ev();
extern void _ZN7S3510C3D0Ev();
extern void _ZN7S3510C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C37S3510C2__7S3510C1[] = {
  ABISELECT(20264,11132),
  ABISELECT(20304,11152),
  ABISELECT(20320,11160),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C3[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3510C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3510C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3510C32v4Ev,
};
extern void _ZN7S3510C42v1Ev();
extern void _ZN7S3510C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C67S3510C37S3510C2__7S3510C1[] = {
  ABISELECT(20304,11152),
  ABISELECT(20320,11160),
  0,
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3510C62v3Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C67S3510C37S3510C2__7S3510C1[] = {
  0,
  ABISELECT(-20320,-11160),
  (VTBL_ENTRY)&(_ZTI7S3510C6[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern void _ZN7S3510C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C4__7S3510C37S3510C2__7S3510C1[] = {
  0,
  ABISELECT(-20264,-11132),
  (VTBL_ENTRY)&(_ZTI7S3510C3[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C37S3510C2__7S3510C1[] = {
  0,
  ABISELECT(-20320,-11160),
  (VTBL_ENTRY)&(_ZTI7S3510C3[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
extern void _ZN7S3510C42v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C4__7S3510C2__7S3510C1[] = {
  0,
  ABISELECT(-20264,-11132),
  (VTBL_ENTRY)&(_ZTI7S3510C2[0]),
  (VTBL_ENTRY)&_ZN7S3510C42v1Ev,
};
extern void _ZN7S3510C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3510C7__7S3510C2__7S3510C1[] = {
  0,
  ABISELECT(-20320,-11160),
  (VTBL_ENTRY)&(_ZTI7S3510C2[0]),
  (VTBL_ENTRY)&_ZN7S3510C72v2Ev,
};
static  VTT_ENTRY vtt_S3510C1[] = {
  {&(_ZTV7S3510C1[5]),  5,21},
  {&(_tg__ZTV7S3510C2__7S3510C1[5]),  5,10},
  {&(_tg__ZTV7S3510C37S3510C2__7S3510C1[5]),  5,10},
  {&(_tg__ZTV7S3510C67S3510C37S3510C2__7S3510C1[4]),  4,6},
  {&(_tg__ZTV7S3510C7__7S3510C67S3510C37S3510C2__7S3510C1[3]),  3,4},
  {&(_tg__ZTV7S3510C4__7S3510C37S3510C2__7S3510C1[3]),  3,4},
  {&(_tg__ZTV7S3510C7__7S3510C37S3510C2__7S3510C1[3]),  3,4},
  {&(_tg__ZTV7S3510C4__7S3510C2__7S3510C1[3]),  3,4},
  {&(_tg__ZTV7S3510C7__7S3510C2__7S3510C1[3]),  3,4},
  {&(_ZTV7S3510C1[16]),  16,21},
  {&(_ZTV7S3510C1[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S3510C1[];
extern  VTBL_ENTRY _ZTV7S3510C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3510C1[];
Class_Descriptor cd_S3510C1 = {  "S3510C1", // class name
  bases_S3510C1, 9,
  &(vtc_S3510C1[0]), // expected_vtbl_contents
  &(vtt_S3510C1[0]), // expected_vtt_contents
  ABISELECT(20688,11356), // object size
  NSPAIRA(_ZTI7S3510C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3510C1),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3510C1),11, //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  S20968C5  {
  int s20968c5f0;
  void *s20968c5f1;
  ::S281C37_nt s20968c5f2;
  virtual void  v2(); // _ZN8S20968C52v2Ev
  ~S20968C5(); // tgen
  S20968C5(); // tgen
};
//SIG(-1 S20968C5) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S20968C5()
{
  extern Class_Descriptor cd_S20968C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20968C5, buf);
    S20968C5 *dp, &lv = *(dp=new (buf) S20968C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20968C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20968C5)");
    check_field_offset(lv, s20968c5f0, ABISELECT(8,4), "S20968C5.s20968c5f0");
    check_field_offset(lv, s20968c5f1, ABISELECT(16,8), "S20968C5.s20968c5f1");
    check_field_offset(lv, s20968c5f2, ABISELECT(24,12), "S20968C5.s20968c5f2");
    test_class_info(&lv, &cd_S20968C5);
    dp->~S20968C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20968C5(Test_S20968C5, "S20968C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20968C5C1Ev();
extern void _ZN8S20968C5D1Ev();
Name_Map name_map_S20968C5[] = {
  NSPAIR(_ZN8S20968C5C1Ev),
  NSPAIR(_ZN8S20968C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20968C5[];
extern void _ZN8S20968C52v2Ev();
static  VTBL_ENTRY vtc_S20968C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C5[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S20968C5[];
extern  VTBL_ENTRY _ZTV8S20968C5[];
Class_Descriptor cd_S20968C5 = {  "S20968C5", // class name
  0,0,//no base classes
  &(vtc_S20968C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20968C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20968C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20968C7  {
  int s20968c7f0[6];
  char s20968c7f1:2;
  long double s20968c7f2;
  void *s20968c7f3[2];
  int s20968c7f4;
  long double s20968c7f5;
  ::S20176C3_nt s20968c7f6;
  ::S281C37_nt s20968c7f7;
  ::S281C37_nt s20968c7f8[9];
  void *s20968c7f9;
  ::S20968C5 s20968c7f10;
  ::S20968C5 s20968c7f11;
  virtual void  v3(); // _ZN8S20968C72v3Ev
  ~S20968C7(); // tgen
  S20968C7(); // tgen
};
//SIG(-1 S20968C7) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S20968C7()
{
  extern Class_Descriptor cd_S20968C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S20968C7, buf);
    S20968C7 *dp, &lv = *(dp=new (buf) S20968C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S20968C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20968C7)");
    check_field_offset(lv, s20968c7f0, ABISELECT(8,4), "S20968C7.s20968c7f0");
    set_bf_and_test(lv, s20968c7f1, ABISELECT(32,28), 0, 2, 1, "S20968C7");
    set_bf_and_test(lv, s20968c7f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S20968C7");
    check_field_offset(lv, s20968c7f2, ABISELECT(48,32), "S20968C7.s20968c7f2");
    check_field_offset(lv, s20968c7f3, ABISELECT(64,44), "S20968C7.s20968c7f3");
    check_field_offset(lv, s20968c7f4, ABISELECT(80,52), "S20968C7.s20968c7f4");
    check_field_offset(lv, s20968c7f5, ABISELECT(96,56), "S20968C7.s20968c7f5");
    check_field_offset(lv, s20968c7f6, ABISELECT(112,68), "S20968C7.s20968c7f6");
    check_field_offset(lv, s20968c7f7, ABISELECT(120,72), "S20968C7.s20968c7f7");
    check_field_offset(lv, s20968c7f8, ABISELECT(136,80), "S20968C7.s20968c7f8");
    check_field_offset(lv, s20968c7f9, ABISELECT(280,152), "S20968C7.s20968c7f9");
    check_field_offset(lv, s20968c7f10, ABISELECT(288,156), "S20968C7.s20968c7f10");
    check_field_offset(lv, s20968c7f11, ABISELECT(328,176), "S20968C7.s20968c7f11");
    test_class_info(&lv, &cd_S20968C7);
    dp->~S20968C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20968C7(Test_S20968C7, "S20968C7", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN8S20968C7C1Ev();
extern void _ZN8S20968C7D1Ev();
Name_Map name_map_S20968C7[] = {
  NSPAIR(_ZN8S20968C7C1Ev),
  NSPAIR(_ZN8S20968C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20968C7[];
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY vtc_S20968C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C7[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
Class_Descriptor cd_S20968C7 = {  "S20968C7", // class name
  0,0,//no base classes
  &(vtc_S20968C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI8S20968C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20968C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20968C4  : S20968C5 , virtual S20968C7 , virtual S281C37_nt {
  void *s20968c4f0;
  __tsi64 s20968c4f1;
  char s20968c4f2[2];
  ::S20968C7 s20968c4f3;
  short s20968c4f4[7];
  int s20968c4f5;
  char s20968c4f6;
  int s20968c4f7:20;
  virtual void  v4(); // _ZN8S20968C42v4Ev
  ~S20968C4(); // tgen
  S20968C4(); // tgen
};
//SIG(-1 S20968C4) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


void  S20968C4 ::v4(){vfunc_called(this, "_ZN8S20968C42v4Ev");}
S20968C4 ::~S20968C4(){ note_dtor("S20968C4", this);} // tgen
S20968C4 ::S20968C4(){ note_ctor("S20968C4", this);} // tgen

static void Test_S20968C4()
{
  extern Class_Descriptor cd_S20968C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S20968C4, buf);
    S20968C4 *dp, &lv = *(dp=new (buf) S20968C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S20968C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20968C4)");
    check_base_class_offset(lv, (S20968C5*), 0, "S20968C4");
    check_base_class_offset(lv, (S20968C7*), ABISELECT(464,256), "S20968C4");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S20968C4");
    check_field_offset(lv, s20968c4f0, ABISELECT(40,20), "S20968C4.s20968c4f0");
    check_field_offset(lv, s20968c4f1, ABISELECT(48,24), "S20968C4.s20968c4f1");
    check_field_offset(lv, s20968c4f2, ABISELECT(56,32), "S20968C4.s20968c4f2");
    check_field_offset(lv, s20968c4f3, ABISELECT(64,36), "S20968C4.s20968c4f3");
    check_field_offset(lv, s20968c4f4, ABISELECT(432,232), "S20968C4.s20968c4f4");
    check_field_offset(lv, s20968c4f5, ABISELECT(448,248), "S20968C4.s20968c4f5");
    check_field_offset(lv, s20968c4f6, ABISELECT(452,252), "S20968C4.s20968c4f6");
    set_bf_and_test(lv, s20968c4f7, ABISELECT(453,253), 0, 20, 1, "S20968C4");
    set_bf_and_test(lv, s20968c4f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S20968C4");
    test_class_info(&lv, &cd_S20968C4);
    dp->~S20968C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20968C4(Test_S20968C4, "S20968C4", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN8S20968C4C1Ev();
extern void _ZN8S20968C4D1Ev();
Name_Map name_map_S20968C4[] = {
  NSPAIR(_ZN8S20968C4C1Ev),
  NSPAIR(_ZN8S20968C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20968C5;
extern VTBL_ENTRY _ZTI8S20968C5[];
extern  VTBL_ENTRY _ZTV8S20968C5[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S20968C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20968C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20968C7,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20968C4[];
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY vtc_S20968C4[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S20968C4[];
static  VTT_ENTRY vtt_S20968C4[] = {
  {&(_ZTV8S20968C4[4]),  4,10},
  {&(_ZTV8S20968C4[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S20968C4[];
extern  VTBL_ENTRY _ZTV8S20968C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C4[];
Class_Descriptor cd_S20968C4 = {  "S20968C4", // class name
  bases_S20968C4, 3,
  &(vtc_S20968C4[0]), // expected_vtbl_contents
  &(vtt_S20968C4[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI8S20968C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20968C4),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20968C4),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  S20968C3  : virtual S20968C4 {
  int s20968c3f0;
  char s20968c3f1;
  void *s20968c3f2[6];
  int s20968c3f3[2];
  void *s20968c3f4;
  ::S281C37_nt s20968c3f5;
  ~S20968C3(); // tgen
  S20968C3(); // tgen
};
//SIG(-1 S20968C3) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S20968C3()
{
  extern Class_Descriptor cd_S20968C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S20968C3, buf);
    S20968C3 *dp, &lv = *(dp=new (buf) S20968C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S20968C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20968C3)");
    check_base_class_offset(lv, (S20968C5*)(S20968C4*), ABISELECT(96,56), "S20968C3");
    check_base_class_offset(lv, (S20968C7*)(S20968C4*), ABISELECT(560,312), "S20968C3");
    check_base_class_offset(lv, (S281C37_nt*)(S20968C4*), ABISELECT(928,508), "S20968C3");
    check_base_class_offset(lv, (S20968C4*), ABISELECT(96,56), "S20968C3");
    check_field_offset(lv, s20968c3f0, ABISELECT(8,4), "S20968C3.s20968c3f0");
    check_field_offset(lv, s20968c3f1, ABISELECT(12,8), "S20968C3.s20968c3f1");
    check_field_offset(lv, s20968c3f2, ABISELECT(16,12), "S20968C3.s20968c3f2");
    check_field_offset(lv, s20968c3f3, ABISELECT(64,36), "S20968C3.s20968c3f3");
    check_field_offset(lv, s20968c3f4, ABISELECT(72,44), "S20968C3.s20968c3f4");
    check_field_offset(lv, s20968c3f5, ABISELECT(80,48), "S20968C3.s20968c3f5");
    test_class_info(&lv, &cd_S20968C3);
    dp->~S20968C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20968C3(Test_S20968C3, "S20968C3", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN8S20968C3C1Ev();
extern void _ZN8S20968C3D1Ev();
Name_Map name_map_S20968C3[] = {
  NSPAIR(_ZN8S20968C3C1Ev),
  NSPAIR(_ZN8S20968C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20968C5;
extern VTBL_ENTRY _ZTI8S20968C5[];
extern  VTBL_ENTRY _ZTV8S20968C5[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C4;
extern VTBL_ENTRY _ZTI8S20968C4[];
extern  VTBL_ENTRY _ZTV8S20968C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C4[];
static Base_Class bases_S20968C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20968C5,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20968C7,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20968C4,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20968C3[];
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY vtc_S20968C3[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S20968C3[];
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C3[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C4__8S20968C3[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTT_ENTRY vtt_S20968C3[] = {
  {&(_ZTV8S20968C3[5]),  5,17},
  {&(_ZTV8S20968C3[11]),  11,17},
  {&(_ZTV8S20968C3[16]),  16,17},
  {&(_tg__ZTV8S20968C4__8S20968C3[4]),  4,6},
  {&(_tg__ZTV8S20968C7__8S20968C4__8S20968C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20968C3[];
extern  VTBL_ENTRY _ZTV8S20968C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C3[];
Class_Descriptor cd_S20968C3 = {  "S20968C3", // class name
  bases_S20968C3, 4,
  &(vtc_S20968C3[0]), // expected_vtbl_contents
  &(vtt_S20968C3[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI8S20968C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20968C3),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20968C3),5, //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  S20968C2  : virtual S20968C3 , S20968C7 , S281C37_nt {
  char s20968c2f0;
  int s20968c2f1[2];
  long double s20968c2f2[2];
  short s20968c2f3;
  void *s20968c2f4;
  int s20968c2f5;
  __tsi64 s20968c2f6;
  int s20968c2f7;
  void *s20968c2f8;
  virtual  ~S20968C2(); // _ZN8S20968C2D2Ev
  virtual void  v5(); // _ZN8S20968C22v5Ev
  S20968C2(); // tgen
};
//SIG(-1 S20968C2) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S20968C2 ::~S20968C2(){ note_dtor("S20968C2", this);}
void  S20968C2 ::v5(){vfunc_called(this, "_ZN8S20968C22v5Ev");}
S20968C2 ::S20968C2(){ note_ctor("S20968C2", this);} // tgen

static void Test_S20968C2()
{
  extern Class_Descriptor cd_S20968C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S20968C2, buf);
    S20968C2 *dp, &lv = *(dp=new (buf) S20968C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S20968C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20968C2)");
    check_base_class_offset(lv, (S20968C5*)(S20968C4*), ABISELECT(576,324), "S20968C2");
    check_base_class_offset(lv, (S20968C7*)(S20968C4*), ABISELECT(1040,580), "S20968C2");
    check_base_class_offset(lv, (S281C37_nt*)(S20968C4*), ABISELECT(1408,776), "S20968C2");
    check_base_class_offset(lv, (S20968C4*)(S20968C3*), ABISELECT(576,324), "S20968C2");
    check_base_class_offset(lv, (S20968C3*), ABISELECT(480,268), "S20968C2");
    /*is_ambiguous_... S20968C2::S20968C7 */ AMB_check_base_class_offset(lv, (S20968C7*), 0, "S20968C2");
    /*is_ambiguous_... S20968C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S20968C2");
    check_field_offset(lv, s20968c2f0, ABISELECT(384,204), "S20968C2.s20968c2f0");
    check_field_offset(lv, s20968c2f1, ABISELECT(388,208), "S20968C2.s20968c2f1");
    check_field_offset(lv, s20968c2f2, ABISELECT(400,216), "S20968C2.s20968c2f2");
    check_field_offset(lv, s20968c2f3, ABISELECT(432,240), "S20968C2.s20968c2f3");
    check_field_offset(lv, s20968c2f4, ABISELECT(440,244), "S20968C2.s20968c2f4");
    check_field_offset(lv, s20968c2f5, ABISELECT(448,248), "S20968C2.s20968c2f5");
    check_field_offset(lv, s20968c2f6, ABISELECT(456,252), "S20968C2.s20968c2f6");
    check_field_offset(lv, s20968c2f7, ABISELECT(464,260), "S20968C2.s20968c2f7");
    check_field_offset(lv, s20968c2f8, ABISELECT(472,264), "S20968C2.s20968c2f8");
    test_class_info(&lv, &cd_S20968C2);
    dp->~S20968C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20968C2(Test_S20968C2, "S20968C2", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN8S20968C2C1Ev();
extern void _ZN8S20968C2D2Ev();
Name_Map name_map_S20968C2[] = {
  NSPAIR(_ZN8S20968C2C1Ev),
  NSPAIR(_ZN8S20968C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20968C5;
extern VTBL_ENTRY _ZTI8S20968C5[];
extern  VTBL_ENTRY _ZTV8S20968C5[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C4;
extern VTBL_ENTRY _ZTI8S20968C4[];
extern  VTBL_ENTRY _ZTV8S20968C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C4[];
extern Class_Descriptor cd_S20968C3;
extern VTBL_ENTRY _ZTI8S20968C3[];
extern  VTBL_ENTRY _ZTV8S20968C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C3[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S20968C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20968C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20968C7,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C4,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20968C3,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20968C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20968C2[];
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C2D1Ev();
extern void _ZN8S20968C2D0Ev();
extern void _ZN8S20968C22v5Ev();
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY vtc_S20968C2[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S20968C2[];
static  VTBL_ENTRY _tg__ZTV8S20968C3__8S20968C2[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C3__8S20968C2[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C3__8S20968C2[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C2[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C4__8S20968C2[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTT_ENTRY vtt_S20968C2[] = {
  {&(_ZTV8S20968C2[6]),  6,27},
  {&(_ZTV8S20968C2[15]),  15,27},
  {&(_ZTV8S20968C2[21]),  21,27},
  {&(_ZTV8S20968C2[26]),  26,27},
  {&(_tg__ZTV8S20968C3__8S20968C2[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C3__8S20968C2[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C3__8S20968C2[3]),  3,4},
  {&(_tg__ZTV8S20968C4__8S20968C2[4]),  4,6},
  {&(_tg__ZTV8S20968C7__8S20968C4__8S20968C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20968C2[];
extern  VTBL_ENTRY _ZTV8S20968C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C2[];
Class_Descriptor cd_S20968C2 = {  "S20968C2", // class name
  bases_S20968C2, 7,
  &(vtc_S20968C2[0]), // expected_vtbl_contents
  &(vtt_S20968C2[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI8S20968C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20968C2),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20968C2),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20968C11  : virtual S20968C7 , virtual S20968C2 {
  ::S20968C2 s20968c11f0[7];
  int s20968c11f1;
  short s20968c11f2;
  int s20968c11f3;
  ::S20968C4 s20968c11f4;
  long s20968c11f5[9];
  virtual void  v6(); // _ZN9S20968C112v6Ev
  virtual void  v7(); // _ZN9S20968C112v7Ev
  ~S20968C11(); // tgen
  S20968C11(); // tgen
};
//SIG(-1 S20968C11) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 Fl[9]}


void  S20968C11 ::v6(){vfunc_called(this, "_ZN9S20968C112v6Ev");}
void  S20968C11 ::v7(){vfunc_called(this, "_ZN9S20968C112v7Ev");}
S20968C11 ::~S20968C11(){ note_dtor("S20968C11", this);} // tgen
S20968C11 ::S20968C11(){ note_ctor("S20968C11", this);} // tgen

static void Test_S20968C11()
{
  extern Class_Descriptor cd_S20968C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1697)];
    init_test(&cd_S20968C11, buf);
    S20968C11 *dp, &lv = *(dp=new (buf) S20968C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6784), "sizeof(S20968C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20968C11)");
    /*is_ambiguous_... S20968C11::S20968C7 */ AMB_check_base_class_offset(lv, (S20968C7*), ABISELECT(10928,6000), "S20968C11");
    check_base_class_offset(lv, (S20968C7*)(S20968C4*), ABISELECT(10928,6000), "S20968C11");
    check_base_class_offset(lv, (S20968C5*)(S20968C4*), ABISELECT(11872,6520), "S20968C11");
    check_base_class_offset(lv, (S281C37_nt*)(S20968C4*), ABISELECT(12328,6776), "S20968C11");
    check_base_class_offset(lv, (S20968C4*)(S20968C3*), ABISELECT(11872,6520), "S20968C11");
    check_base_class_offset(lv, (S20968C3*)(S20968C2*), ABISELECT(11776,6464), "S20968C11");
    /*is_ambiguous_... S20968C2::S20968C7 */ AMB_check_base_class_offset(lv, (S20968C7*)(S20968C2*), ABISELECT(11296,6196), "S20968C11");
    /*is_ambiguous_... S20968C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20968C2*), ABISELECT(11664,6392), "S20968C11");
    check_base_class_offset(lv, (S20968C2*), ABISELECT(11296,6196), "S20968C11");
    check_field_offset(lv, s20968c11f0, ABISELECT(16,4), "S20968C11.s20968c11f0");
    check_field_offset(lv, s20968c11f1, ABISELECT(9984,5492), "S20968C11.s20968c11f1");
    check_field_offset(lv, s20968c11f2, ABISELECT(9988,5496), "S20968C11.s20968c11f2");
    check_field_offset(lv, s20968c11f3, ABISELECT(9992,5500), "S20968C11.s20968c11f3");
    check_field_offset(lv, s20968c11f4, ABISELECT(10000,5504), "S20968C11.s20968c11f4");
    check_field_offset(lv, s20968c11f5, ABISELECT(10848,5964), "S20968C11.s20968c11f5");
    test_class_info(&lv, &cd_S20968C11);
    dp->~S20968C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20968C11(Test_S20968C11, "S20968C11", ABISELECT(12352,6784));

#else // __cplusplus

extern void _ZN9S20968C11C1Ev();
extern void _ZN9S20968C11D1Ev();
Name_Map name_map_S20968C11[] = {
  NSPAIR(_ZN9S20968C11C1Ev),
  NSPAIR(_ZN9S20968C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S20968C5;
extern VTBL_ENTRY _ZTI8S20968C5[];
extern  VTBL_ENTRY _ZTV8S20968C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C4;
extern VTBL_ENTRY _ZTI8S20968C4[];
extern  VTBL_ENTRY _ZTV8S20968C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C4[];
extern Class_Descriptor cd_S20968C3;
extern VTBL_ENTRY _ZTI8S20968C3[];
extern  VTBL_ENTRY _ZTV8S20968C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C3[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C2;
extern VTBL_ENTRY _ZTI8S20968C2[];
extern  VTBL_ENTRY _ZTV8S20968C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C2[];
static Base_Class bases_S20968C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20968C7,    ABISELECT(10928,6000), //bcp->offset
    11, //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_S20968C5,    ABISELECT(11872,6520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C4,    ABISELECT(11872,6520), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20968C3,    ABISELECT(11776,6464), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20968C7,    ABISELECT(11296,6196), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C2,    ABISELECT(11296,6196), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20968C11[];
extern void _ZN9S20968C112v6Ev();
extern void _ZN9S20968C112v7Ev();
extern void _ZN9S20968C11D1Ev();
extern void _ZN9S20968C11D0Ev();
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C11D1Ev,_ZTv0_n32_N9S20968C11D1Ev)();
extern void ABISELECT(_ZThn11296_N9S20968C11D1Ev,_ZThn6196_N9S20968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20968C11D0Ev,_ZTv0_n32_N9S20968C11D0Ev)();
extern void ABISELECT(_ZThn11296_N9S20968C11D0Ev,_ZThn6196_N9S20968C11D0Ev)() __attribute__((weak));
extern void _ZN8S20968C22v5Ev();
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY vtc_S20968C11[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN9S20968C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20968C112v7Ev,
  (VTBL_ENTRY)&_ZN9S20968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C11D0Ev,
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C11D1Ev,_ZTv0_n32_N9S20968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C11D0Ev,_ZTv0_n32_N9S20968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern VTBL_ENTRY _ZTV9S20968C11[];
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C2D1Ev();
extern void _ZN8S20968C2D0Ev();
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C11[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__8S20968C2__9S20968C11[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C2__9S20968C11[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C2__9S20968C11[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C11[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C3__9S20968C11[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C3__9S20968C11[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C11[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C4__9S20968C11[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTT_ENTRY vtt_S20968C11[] = {
  {&(_ZTV9S20968C11[7]),  7,41},
  {&(_ZTV9S20968C11[14]),  14,41},
  {&(_ZTV9S20968C11[24]),  24,41},
  {&(_ZTV9S20968C11[33]),  33,41},
  {&(_ZTV9S20968C11[39]),  39,41},
  {&(_tg__ZTV8S20968C2__9S20968C11[6]),  6,10},
  {&(_tg__ZTV8S20968C3__8S20968C2__9S20968C11[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C2__9S20968C11[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C2__9S20968C11[3]),  3,4},
  {&(_tg__ZTV8S20968C3__9S20968C11[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C3__9S20968C11[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C3__9S20968C11[3]),  3,4},
  {&(_tg__ZTV8S20968C4__9S20968C11[4]),  4,6},
  {&(_tg__ZTV8S20968C7__8S20968C4__9S20968C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20968C11[];
extern  VTBL_ENTRY _ZTV9S20968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C11[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C11D0Ev,_ZTv0_n32_N9S20968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20968C11D0Ev,_ZThn6196_N9S20968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C11D1Ev,_ZTv0_n32_N9S20968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20968C11D1Ev,_ZThn6196_N9S20968C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20968C11 = {  "S20968C11", // class name
  bases_S20968C11, 8,
  &(vtc_S20968C11[0]), // expected_vtbl_contents
  &(vtt_S20968C11[0]), // expected_vtt_contents
  ABISELECT(12352,6784), // object size
  NSPAIRA(_ZTI9S20968C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20968C11),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20968C11),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20968C10  : virtual S20968C11 {
  char s20968c10f0;
  int s20968c10f1[3];
  virtual  ~S20968C10(); // _ZN9S20968C10D2Ev
  S20968C10(); // tgen
};
//SIG(-1 S20968C10) C1{ VBC2{ VBC3{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v2 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v3 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v5 v6 FC7[7] Fi Fs Fi FC9 Fl[9]} vd Fc Fi[3]}


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

static void Test_S20968C10()
{
  extern Class_Descriptor cd_S20968C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(775,1702)];
    init_test(&cd_S20968C10, buf);
    S20968C10 *dp, &lv = *(dp=new (buf) S20968C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12384,6804), "sizeof(S20968C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20968C10)");
    /*is_ambiguous_... S20968C11::S20968C7 */ AMB_check_base_class_offset(lv, (S20968C7*)(S20968C11*), ABISELECT(10960,6020), "S20968C10");
    check_base_class_offset(lv, (S20968C7*)(S20968C4*), ABISELECT(10960,6020), "S20968C10");
    check_base_class_offset(lv, (S20968C5*)(S20968C4*), ABISELECT(11904,6540), "S20968C10");
    check_base_class_offset(lv, (S281C37_nt*)(S20968C4*), ABISELECT(12360,6796), "S20968C10");
    check_base_class_offset(lv, (S20968C4*)(S20968C3*), ABISELECT(11904,6540), "S20968C10");
    check_base_class_offset(lv, (S20968C3*)(S20968C2*), ABISELECT(11808,6484), "S20968C10");
    /*is_ambiguous_... S20968C2::S20968C7 */ AMB_check_base_class_offset(lv, (S20968C7*)(S20968C2*), ABISELECT(11328,6216), "S20968C10");
    /*is_ambiguous_... S20968C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20968C2*), ABISELECT(11696,6412), "S20968C10");
    check_base_class_offset(lv, (S20968C2*)(S20968C11*), ABISELECT(11328,6216), "S20968C10");
    check_base_class_offset(lv, (S20968C11*), ABISELECT(32,20), "S20968C10");
    check_field_offset(lv, s20968c10f0, ABISELECT(8,4), "S20968C10.s20968c10f0");
    check_field_offset(lv, s20968c10f1, ABISELECT(12,8), "S20968C10.s20968c10f1");
    test_class_info(&lv, &cd_S20968C10);
    dp->~S20968C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20968C10(Test_S20968C10, "S20968C10", ABISELECT(12384,6804));

#else // __cplusplus

extern void _ZN9S20968C10C1Ev();
extern void _ZN9S20968C10D2Ev();
Name_Map name_map_S20968C10[] = {
  NSPAIR(_ZN9S20968C10C1Ev),
  NSPAIR(_ZN9S20968C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S20968C5;
extern VTBL_ENTRY _ZTI8S20968C5[];
extern  VTBL_ENTRY _ZTV8S20968C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C4;
extern VTBL_ENTRY _ZTI8S20968C4[];
extern  VTBL_ENTRY _ZTV8S20968C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C4[];
extern Class_Descriptor cd_S20968C3;
extern VTBL_ENTRY _ZTI8S20968C3[];
extern  VTBL_ENTRY _ZTV8S20968C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C3[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C2;
extern VTBL_ENTRY _ZTI8S20968C2[];
extern  VTBL_ENTRY _ZTV8S20968C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C2[];
extern Class_Descriptor cd_S20968C11;
extern VTBL_ENTRY _ZTI9S20968C11[];
extern  VTBL_ENTRY _ZTV9S20968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C11[];
static Base_Class bases_S20968C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20968C7,    ABISELECT(10960,6020), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S20968C5,    ABISELECT(11904,6540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12360,6796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C4,    ABISELECT(11904,6540), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20968C3,    ABISELECT(11808,6484), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20968C7,    ABISELECT(11328,6216), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11696,6412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C2,    ABISELECT(11328,6216), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20968C11,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20968C10[];
extern void _ZN9S20968C10D1Ev();
extern void _ZN9S20968C10D0Ev();
extern void _ZN9S20968C112v6Ev();
extern void _ZN9S20968C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N9S20968C10D1Ev,_ZTv0_n40_N9S20968C10D1Ev)();
extern void ABISELECT(_ZThn32_N9S20968C10D1Ev,_ZThn20_N9S20968C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20968C10D0Ev,_ZTv0_n40_N9S20968C10D0Ev)();
extern void ABISELECT(_ZThn32_N9S20968C10D0Ev,_ZThn20_N9S20968C10D0Ev)() __attribute__((weak));
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C10D1Ev,_ZTv0_n32_N9S20968C10D1Ev)();
extern void ABISELECT(_ZThn11328_N9S20968C10D1Ev,_ZThn6216_N9S20968C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20968C10D0Ev,_ZTv0_n32_N9S20968C10D0Ev)();
extern void ABISELECT(_ZThn11328_N9S20968C10D0Ev,_ZThn6216_N9S20968C10D0Ev)() __attribute__((weak));
extern void _ZN8S20968C22v5Ev();
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY vtc_S20968C10[] = {
  ABISELECT(12360,6796),
  ABISELECT(11904,6540),
  ABISELECT(11808,6484),
  ABISELECT(11328,6216),
  ABISELECT(10960,6020),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN9S20968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C10D0Ev,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN9S20968C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20968C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20968C10D1Ev,_ZTv0_n40_N9S20968C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20968C10D0Ev,_ZTv0_n40_N9S20968C10D0Ev),
  0,
  ABISELECT(-10960,-6020),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  0,
  ABISELECT(-11328,-6216),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11328,-6216),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C10D1Ev,_ZTv0_n32_N9S20968C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C10D0Ev,_ZTv0_n32_N9S20968C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11808,-6484),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11904,-6540),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern VTBL_ENTRY _ZTV9S20968C10[];
extern void _ZN9S20968C112v6Ev();
extern void _ZN9S20968C112v7Ev();
extern void _ZN9S20968C11D1Ev();
extern void _ZN9S20968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20968C11__9S20968C10[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN9S20968C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20968C112v7Ev,
  (VTBL_ENTRY)&_ZN9S20968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C11D0Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C11__9S20968C10[] = {
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C11D1Ev,_ZTv0_n32_N9S20968C11D1Ev)();
extern void ABISELECT(_ZThn11296_N9S20968C11D1Ev,_ZThn6196_N9S20968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20968C11D0Ev,_ZTv0_n32_N9S20968C11D0Ev)();
extern void ABISELECT(_ZThn11296_N9S20968C11D0Ev,_ZThn6196_N9S20968C11D0Ev)() __attribute__((weak));
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C11__9S20968C10[] = {
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C11D1Ev,_ZTv0_n32_N9S20968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C11D0Ev,_ZTv0_n32_N9S20968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C11__9S20968C10[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C11__9S20968C10[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C2D1Ev();
extern void _ZN8S20968C2D0Ev();
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C10[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__8S20968C2__9S20968C10[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C2__9S20968C10[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C2__9S20968C10[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C10[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C3__9S20968C10[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C3__9S20968C10[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C10[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C4__9S20968C10[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTT_ENTRY vtt_S20968C10[] = {
  {&(_ZTV9S20968C10[8]),  8,54},
  {&(_ZTV9S20968C10[20]),  20,54},
  {&(_ZTV9S20968C10[27]),  27,54},
  {&(_ZTV9S20968C10[37]),  37,54},
  {&(_ZTV9S20968C10[46]),  46,54},
  {&(_ZTV9S20968C10[52]),  52,54},
  {&(_tg__ZTV9S20968C11__9S20968C10[7]),  7,11},
  {&(_tg__ZTV8S20968C7__9S20968C11__9S20968C10[3]),  3,4},
  {&(_tg__ZTV8S20968C2__9S20968C11__9S20968C10[9]),  9,13},
  {&(_tg__ZTV8S20968C3__9S20968C11__9S20968C10[5]),  5,5},
  {&(_tg__ZTV8S20968C4__9S20968C11__9S20968C10[6]),  6,8},
  {&(_tg__ZTV8S20968C2__9S20968C10[6]),  6,10},
  {&(_tg__ZTV8S20968C3__8S20968C2__9S20968C10[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C2__9S20968C10[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C2__9S20968C10[3]),  3,4},
  {&(_tg__ZTV8S20968C3__9S20968C10[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C3__9S20968C10[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C3__9S20968C10[3]),  3,4},
  {&(_tg__ZTV8S20968C4__9S20968C10[4]),  4,6},
  {&(_tg__ZTV8S20968C7__8S20968C4__9S20968C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20968C10[];
extern  VTBL_ENTRY _ZTV9S20968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C10[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C11D0Ev,_ZTv0_n32_N9S20968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20968C11D0Ev,_ZThn6196_N9S20968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C11D1Ev,_ZTv0_n32_N9S20968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20968C11D1Ev,_ZThn6196_N9S20968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C10D0Ev,_ZTv0_n32_N9S20968C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N9S20968C10D0Ev,_ZThn6216_N9S20968C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C10D1Ev,_ZTv0_n32_N9S20968C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N9S20968C10D1Ev,_ZThn6216_N9S20968C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20968C10D0Ev,_ZTv0_n40_N9S20968C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20968C10D0Ev,_ZThn20_N9S20968C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20968C10D1Ev,_ZTv0_n40_N9S20968C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20968C10D1Ev,_ZThn20_N9S20968C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20968C10 = {  "S20968C10", // class name
  bases_S20968C10, 9,
  &(vtc_S20968C10[0]), // expected_vtbl_contents
  &(vtt_S20968C10[0]), // expected_vtt_contents
  ABISELECT(12384,6804), // object size
  NSPAIRA(_ZTI9S20968C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20968C10),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20968C10),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20968C13  : virtual S20968C3 , virtual S20968C2 {
  long s20968c13f0;
  void *s20968c13f1;
  ::S20968C4 s20968c13f2;
  void *s20968c13f3;
  short s20968c13f4;
  long s20968c13f5;
  int s20968c13f6;
  __tsi64 s20968c13f7;
  ::S20968C4 s20968c13f8[4];
  int s20968c13f9;
  virtual  ~S20968C13(); // _ZN9S20968C13D2Ev
  S20968C13(); // tgen
};
//SIG(-1 S20968C13) C1{ VBC2{ VBC3{ BC4{ v1 Fi Fp FC5{ m Fp[2]}} VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC8{ VBC2 BC6 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC3 Fp Fs Fl Fi FL FC3[4] Fi}


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

static void Test_S20968C13()
{
  extern Class_Descriptor cd_S20968C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(361,782)];
    init_test(&cd_S20968C13, buf);
    S20968C13 *dp, &lv = *(dp=new (buf) S20968C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5760,3124), "sizeof(S20968C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20968C13)");
    check_base_class_offset(lv, (S20968C5*)(S20968C4*), ABISELECT(4432,2396), "S20968C13");
    check_base_class_offset(lv, (S20968C7*)(S20968C4*), ABISELECT(4896,2652), "S20968C13");
    check_base_class_offset(lv, (S281C37_nt*)(S20968C4*), ABISELECT(5264,2848), "S20968C13");
    check_base_class_offset(lv, (S20968C4*)(S20968C3*), ABISELECT(4432,2396), "S20968C13");
    check_base_class_offset(lv, (S20968C3*), ABISELECT(4328,2340), "S20968C13");
    check_base_class_offset(lv, (S20968C3*)(S20968C2*), ABISELECT(4328,2340), "S20968C13");
    /*is_ambiguous_... S20968C2::S20968C7 */ AMB_check_base_class_offset(lv, (S20968C7*)(S20968C2*), ABISELECT(5280,2856), "S20968C13");
    /*is_ambiguous_... S20968C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20968C2*), ABISELECT(5648,3052), "S20968C13");
    check_base_class_offset(lv, (S20968C2*), ABISELECT(5280,2856), "S20968C13");
    check_field_offset(lv, s20968c13f0, ABISELECT(8,4), "S20968C13.s20968c13f0");
    check_field_offset(lv, s20968c13f1, ABISELECT(16,8), "S20968C13.s20968c13f1");
    check_field_offset(lv, s20968c13f2, ABISELECT(32,12), "S20968C13.s20968c13f2");
    check_field_offset(lv, s20968c13f3, ABISELECT(880,472), "S20968C13.s20968c13f3");
    check_field_offset(lv, s20968c13f4, ABISELECT(888,476), "S20968C13.s20968c13f4");
    check_field_offset(lv, s20968c13f5, ABISELECT(896,480), "S20968C13.s20968c13f5");
    check_field_offset(lv, s20968c13f6, ABISELECT(904,484), "S20968C13.s20968c13f6");
    check_field_offset(lv, s20968c13f7, ABISELECT(912,488), "S20968C13.s20968c13f7");
    check_field_offset(lv, s20968c13f8, ABISELECT(928,496), "S20968C13.s20968c13f8");
    check_field_offset(lv, s20968c13f9, ABISELECT(4320,2336), "S20968C13.s20968c13f9");
    test_class_info(&lv, &cd_S20968C13);
    dp->~S20968C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20968C13(Test_S20968C13, "S20968C13", ABISELECT(5760,3124));

#else // __cplusplus

extern void _ZN9S20968C13C1Ev();
extern void _ZN9S20968C13D2Ev();
Name_Map name_map_S20968C13[] = {
  NSPAIR(_ZN9S20968C13C1Ev),
  NSPAIR(_ZN9S20968C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20968C5;
extern VTBL_ENTRY _ZTI8S20968C5[];
extern  VTBL_ENTRY _ZTV8S20968C5[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C4;
extern VTBL_ENTRY _ZTI8S20968C4[];
extern  VTBL_ENTRY _ZTV8S20968C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C4[];
extern Class_Descriptor cd_S20968C3;
extern VTBL_ENTRY _ZTI8S20968C3[];
extern  VTBL_ENTRY _ZTV8S20968C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C3[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C2;
extern VTBL_ENTRY _ZTI8S20968C2[];
extern  VTBL_ENTRY _ZTV8S20968C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C2[];
static Base_Class bases_S20968C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20968C5,    ABISELECT(4432,2396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C7,    ABISELECT(4896,2652), //bcp->offset
    22, //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_S281C37_nt,    ABISELECT(5264,2848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C4,    ABISELECT(4432,2396), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20968C3,    ABISELECT(4328,2340), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20968C7,    ABISELECT(5280,2856), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5648,3052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C2,    ABISELECT(5280,2856), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20968C13[];
extern void _ZN9S20968C13D1Ev();
extern void _ZN9S20968C13D0Ev();
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C13D1Ev,_ZTv0_n32_N9S20968C13D1Ev)();
extern void ABISELECT(_ZThn5280_N9S20968C13D1Ev,_ZThn2856_N9S20968C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20968C13D0Ev,_ZTv0_n32_N9S20968C13D0Ev)();
extern void ABISELECT(_ZThn5280_N9S20968C13D0Ev,_ZThn2856_N9S20968C13D0Ev)() __attribute__((weak));
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY vtc_S20968C13[] = {
  ABISELECT(5280,2856),
  ABISELECT(5264,2848),
  ABISELECT(4896,2652),
  ABISELECT(4432,2396),
  ABISELECT(4328,2340),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN9S20968C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C13D0Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4432,-2396),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
  0,
  ABISELECT(-4896,-2652),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  0,
  ABISELECT(-5280,-2856),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5280,-2856),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C13D1Ev,_ZTv0_n32_N9S20968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C13D0Ev,_ZTv0_n32_N9S20968C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
extern VTBL_ENTRY _ZTV9S20968C13[];
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C13[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C3__9S20968C13[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C3__9S20968C13[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C13[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C4__9S20968C13[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C2D1Ev();
extern void _ZN8S20968C2D0Ev();
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C13[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__8S20968C2__9S20968C13[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C2__9S20968C13[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C2__9S20968C13[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTT_ENTRY vtt_S20968C13[] = {
  {&(_ZTV9S20968C13[7]),  7,39},
  {&(_ZTV9S20968C13[14]),  14,39},
  {&(_ZTV9S20968C13[20]),  20,39},
  {&(_ZTV9S20968C13[25]),  25,39},
  {&(_ZTV9S20968C13[35]),  35,39},
  {&(_tg__ZTV8S20968C3__9S20968C13[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C3__9S20968C13[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C3__9S20968C13[3]),  3,4},
  {&(_tg__ZTV8S20968C4__9S20968C13[4]),  4,6},
  {&(_tg__ZTV8S20968C7__8S20968C4__9S20968C13[3]),  3,4},
  {&(_tg__ZTV8S20968C2__9S20968C13[6]),  6,10},
  {&(_tg__ZTV8S20968C3__8S20968C2__9S20968C13[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C2__9S20968C13[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C2__9S20968C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20968C13[];
extern  VTBL_ENTRY _ZTV9S20968C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C13[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C13D0Ev,_ZTv0_n32_N9S20968C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N9S20968C13D0Ev,_ZThn2856_N9S20968C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C13D1Ev,_ZTv0_n32_N9S20968C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N9S20968C13D1Ev,_ZThn2856_N9S20968C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20968C13 = {  "S20968C13", // class name
  bases_S20968C13, 8,
  &(vtc_S20968C13[0]), // expected_vtbl_contents
  &(vtt_S20968C13[0]), // expected_vtt_contents
  ABISELECT(5760,3124), // object size
  NSPAIRA(_ZTI9S20968C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20968C13),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20968C13),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20968C14  : virtual S20968C7 {
  void *s20968c14f0;
  short s20968c14f1;
  long s20968c14f2;
  int s20968c14f3:6;
  void *s20968c14f4[2];
  ~S20968C14(); // tgen
  S20968C14(); // tgen
};
//SIG(-1 S20968C14) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} Fp Fs Fl Fi:6 Fp[2]}


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

static void Test_S20968C14()
{
  extern Class_Descriptor cd_S20968C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,57)];
    init_test(&cd_S20968C14, buf);
    S20968C14 *dp, &lv = *(dp=new (buf) S20968C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,224), "sizeof(S20968C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20968C14)");
    check_base_class_offset(lv, (S20968C7*), ABISELECT(64,28), "S20968C14");
    check_field_offset(lv, s20968c14f0, ABISELECT(8,4), "S20968C14.s20968c14f0");
    check_field_offset(lv, s20968c14f1, ABISELECT(16,8), "S20968C14.s20968c14f1");
    check_field_offset(lv, s20968c14f2, ABISELECT(24,12), "S20968C14.s20968c14f2");
    set_bf_and_test(lv, s20968c14f3, ABISELECT(32,16), 0, 6, 1, "S20968C14");
    set_bf_and_test(lv, s20968c14f3, ABISELECT(32,16), 0, 6, hide_sll(1LL<<5), "S20968C14");
    check_field_offset(lv, s20968c14f4, ABISELECT(40,20), "S20968C14.s20968c14f4");
    test_class_info(&lv, &cd_S20968C14);
    dp->~S20968C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20968C14(Test_S20968C14, "S20968C14", ABISELECT(432,224));

#else // __cplusplus

extern void _ZN9S20968C14C1Ev();
extern void _ZN9S20968C14D1Ev();
Name_Map name_map_S20968C14[] = {
  NSPAIR(_ZN9S20968C14C1Ev),
  NSPAIR(_ZN9S20968C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
static Base_Class bases_S20968C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20968C7,    ABISELECT(64,28), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20968C14[];
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY vtc_S20968C14[] = {
  ABISELECT(64,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C14[0]),
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S20968C14[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern VTBL_ENTRY _ZTV9S20968C14[];
static  VTT_ENTRY vtt_S20968C14[] = {
  {&(_ZTV9S20968C14[3]),  3,7},
  {&(_ZTV9S20968C14[6]),  6,7},
};
extern VTBL_ENTRY _ZTI9S20968C14[];
extern  VTBL_ENTRY _ZTV9S20968C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C14[];
Class_Descriptor cd_S20968C14 = {  "S20968C14", // class name
  bases_S20968C14, 1,
  &(vtc_S20968C14[0]), // expected_vtbl_contents
  &(vtt_S20968C14[0]), // expected_vtt_contents
  ABISELECT(432,224), // object size
  NSPAIRA(_ZTI9S20968C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20968C14),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20968C14),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  S20968C12  : S20968C13 , S20968C14 {
  __tsi64 s20968c12f0;
  long double s20968c12f1;
  ::S20176C3_nt s20968c12f2;
  int s20968c12f3[9];
  short s20968c12f4;
  char s20968c12f5:5;
  virtual  ~S20968C12(); // _ZN9S20968C12D2Ev
  virtual void  v8(); // _ZN9S20968C122v8Ev
  S20968C12(); // tgen
};
//SIG(-1 S20968C12) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 Fi Fp FC6{ m Fp[2]}} VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} VBC9{ VBC3 BC7 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC4 Fp Fs Fl Fi FL FC4[4] Fi} BC10{ VBC7 Fp Fs Fl Fi:6 Fp[2]} vd v1 FL FD FC8 Fi[9] Fs Fc:5}


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

static void Test_S20968C12()
{
  extern Class_Descriptor cd_S20968C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(369,805)];
    init_test(&cd_S20968C12, buf);
    S20968C12 *dp, &lv = *(dp=new (buf) S20968C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5888,3216), "sizeof(S20968C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20968C12)");
    check_base_class_offset(lv, (S20968C5*)(S20968C4*), ABISELECT(4560,2488), "S20968C12");
    check_base_class_offset(lv, (S20968C7*)(S20968C4*), ABISELECT(5024,2744), "S20968C12");
    check_base_class_offset(lv, (S20968C7*)(S20968C14*), ABISELECT(5024,2744), "S20968C12");
    check_base_class_offset(lv, (S281C37_nt*)(S20968C4*), ABISELECT(5392,2940), "S20968C12");
    check_base_class_offset(lv, (S20968C4*)(S20968C3*), ABISELECT(4560,2488), "S20968C12");
    check_base_class_offset(lv, (S20968C3*)(S20968C13*), ABISELECT(4464,2432), "S20968C12");
    check_base_class_offset(lv, (S20968C3*)(S20968C2*), ABISELECT(4464,2432), "S20968C12");
    /*is_ambiguous_... S20968C2::S20968C7 */ AMB_check_base_class_offset(lv, (S20968C7*)(S20968C2*), ABISELECT(5408,2948), "S20968C12");
    /*is_ambiguous_... S20968C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20968C2*), ABISELECT(5776,3144), "S20968C12");
    check_base_class_offset(lv, (S20968C2*)(S20968C13*), ABISELECT(5408,2948), "S20968C12");
    check_base_class_offset(lv, (S20968C13*), 0, "S20968C12");
    check_base_class_offset(lv, (S20968C14*), ABISELECT(4328,2340), "S20968C12");
    check_field_offset(lv, s20968c12f0, ABISELECT(4384,2368), "S20968C12.s20968c12f0");
    check_field_offset(lv, s20968c12f1, ABISELECT(4400,2376), "S20968C12.s20968c12f1");
    check_field_offset(lv, s20968c12f2, ABISELECT(4416,2388), "S20968C12.s20968c12f2");
    check_field_offset(lv, s20968c12f3, ABISELECT(4420,2392), "S20968C12.s20968c12f3");
    check_field_offset(lv, s20968c12f4, ABISELECT(4456,2428), "S20968C12.s20968c12f4");
    set_bf_and_test(lv, s20968c12f5, ABISELECT(4458,2430), 0, 5, 1, "S20968C12");
    set_bf_and_test(lv, s20968c12f5, ABISELECT(4458,2430), 0, 5, hide_sll(1LL<<4), "S20968C12");
    test_class_info(&lv, &cd_S20968C12);
    dp->~S20968C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20968C12(Test_S20968C12, "S20968C12", ABISELECT(5888,3216));

#else // __cplusplus

extern void _ZN9S20968C12C1Ev();
extern void _ZN9S20968C12D2Ev();
Name_Map name_map_S20968C12[] = {
  NSPAIR(_ZN9S20968C12C1Ev),
  NSPAIR(_ZN9S20968C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20968C5;
extern VTBL_ENTRY _ZTI8S20968C5[];
extern  VTBL_ENTRY _ZTV8S20968C5[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C4;
extern VTBL_ENTRY _ZTI8S20968C4[];
extern  VTBL_ENTRY _ZTV8S20968C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C4[];
extern Class_Descriptor cd_S20968C3;
extern VTBL_ENTRY _ZTI8S20968C3[];
extern  VTBL_ENTRY _ZTV8S20968C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C3[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C2;
extern VTBL_ENTRY _ZTI8S20968C2[];
extern  VTBL_ENTRY _ZTV8S20968C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C2[];
extern Class_Descriptor cd_S20968C13;
extern VTBL_ENTRY _ZTI9S20968C13[];
extern  VTBL_ENTRY _ZTV9S20968C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C13[];
extern Class_Descriptor cd_S20968C14;
extern VTBL_ENTRY _ZTI9S20968C14[];
extern  VTBL_ENTRY _ZTV9S20968C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C14[];
static Base_Class bases_S20968C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20968C5,    ABISELECT(4560,2488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C7,    ABISELECT(5024,2744), //bcp->offset
    26, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5392,2940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C4,    ABISELECT(4560,2488), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20968C3,    ABISELECT(4464,2432), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20968C7,    ABISELECT(5408,2948), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5776,3144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C2,    ABISELECT(5408,2948), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20968C13,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20968C14,    ABISELECT(4328,2340), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20968C12[];
extern void _ZN9S20968C12D1Ev();
extern void _ZN9S20968C12D0Ev();
extern void _ZN9S20968C122v8Ev();
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C12D1Ev,_ZTv0_n32_N9S20968C12D1Ev)();
extern void ABISELECT(_ZThn5408_N9S20968C12D1Ev,_ZThn2948_N9S20968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20968C12D0Ev,_ZTv0_n32_N9S20968C12D0Ev)();
extern void ABISELECT(_ZThn5408_N9S20968C12D0Ev,_ZThn2948_N9S20968C12D0Ev)() __attribute__((weak));
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY vtc_S20968C12[] = {
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  (VTBL_ENTRY)&_ZN9S20968C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20968C122v8Ev,
  ABISELECT(696,404),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2488),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
  0,
  ABISELECT(-5024,-2744),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  0,
  ABISELECT(-5408,-2948),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2948),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C12D1Ev,_ZTv0_n32_N9S20968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C12D0Ev,_ZTv0_n32_N9S20968C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
extern VTBL_ENTRY _ZTV9S20968C12[];
extern void _ZN9S20968C13D1Ev();
extern void _ZN9S20968C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20968C13__9S20968C12[] = {
  ABISELECT(5408,2948),
  ABISELECT(5392,2940),
  ABISELECT(5024,2744),
  ABISELECT(4560,2488),
  ABISELECT(4464,2432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN9S20968C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C13__9S20968C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2432),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C13__9S20968C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2488),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C13__9S20968C12[] = {
  0,
  ABISELECT(-5024,-2744),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C13D1Ev,_ZTv0_n32_N9S20968C13D1Ev)();
extern void ABISELECT(_ZThn5408_N9S20968C13D1Ev,_ZThn2948_N9S20968C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20968C13D0Ev,_ZTv0_n32_N9S20968C13D0Ev)();
extern void ABISELECT(_ZThn5408_N9S20968C13D0Ev,_ZThn2948_N9S20968C13D0Ev)() __attribute__((weak));
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C13__9S20968C12[] = {
  0,
  ABISELECT(-5408,-2948),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2948),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C13D1Ev,_ZTv0_n32_N9S20968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C13D0Ev,_ZTv0_n32_N9S20968C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20968C14__9S20968C12[] = {
  ABISELECT(696,404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C14[0]),
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C14__9S20968C12[] = {
  0,
  ABISELECT(-696,-404),
  (VTBL_ENTRY)&(_ZTI9S20968C14[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C3__9S20968C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C3__9S20968C12[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C12[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C4__9S20968C12[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C2D1Ev();
extern void _ZN8S20968C2D0Ev();
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__8S20968C2__9S20968C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C2__9S20968C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C2__9S20968C12[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTT_ENTRY vtt_S20968C12[] = {
  {&(_ZTV9S20968C12[7]),  7,43},
  {&(_tg__ZTV9S20968C13__9S20968C12[7]),  7,9},
  {&(_tg__ZTV8S20968C3__9S20968C13__9S20968C12[5]),  5,5},
  {&(_tg__ZTV8S20968C4__9S20968C13__9S20968C12[6]),  6,8},
  {&(_tg__ZTV8S20968C7__9S20968C13__9S20968C12[3]),  3,4},
  {&(_tg__ZTV8S20968C2__9S20968C13__9S20968C12[9]),  9,13},
  {&(_tg__ZTV9S20968C14__9S20968C12[3]),  3,3},
  {&(_tg__ZTV8S20968C7__9S20968C14__9S20968C12[3]),  3,4},
  {&(_ZTV9S20968C12[18]),  18,43},
  {&(_ZTV9S20968C12[24]),  24,43},
  {&(_ZTV9S20968C12[29]),  29,43},
  {&(_ZTV9S20968C12[39]),  39,43},
  {&(_ZTV9S20968C12[13]),  13,43},
  {&(_tg__ZTV8S20968C3__9S20968C12[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C3__9S20968C12[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C3__9S20968C12[3]),  3,4},
  {&(_tg__ZTV8S20968C4__9S20968C12[4]),  4,6},
  {&(_tg__ZTV8S20968C7__8S20968C4__9S20968C12[3]),  3,4},
  {&(_tg__ZTV8S20968C2__9S20968C12[6]),  6,10},
  {&(_tg__ZTV8S20968C3__8S20968C2__9S20968C12[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C2__9S20968C12[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C2__9S20968C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20968C12[];
extern  VTBL_ENTRY _ZTV9S20968C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C12[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C13D0Ev,_ZTv0_n32_N9S20968C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20968C13D0Ev,_ZThn2948_N9S20968C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C13D1Ev,_ZTv0_n32_N9S20968C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20968C13D1Ev,_ZThn2948_N9S20968C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C12D0Ev,_ZTv0_n32_N9S20968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20968C12D0Ev,_ZThn2948_N9S20968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C12D1Ev,_ZTv0_n32_N9S20968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20968C12D1Ev,_ZThn2948_N9S20968C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20968C12 = {  "S20968C12", // class name
  bases_S20968C12, 10,
  &(vtc_S20968C12[0]), // expected_vtbl_contents
  &(vtt_S20968C12[0]), // expected_vtt_contents
  ABISELECT(5888,3216), // object size
  NSPAIRA(_ZTI9S20968C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20968C12),43, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20968C12),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20968C9  : S20968C10 , S20968C12 {
  long s20968c9f0;
  int s20968c9f1;
  void *s20968c9f2;
  char s20968c9f3;
  int s20968c9f4;
  ::S20176C3_nt s20968c9f5;
  virtual void  v9(); // _ZN8S20968C92v9Ev
  virtual void  v10(); // _ZN8S20968C93v10Ev
  ~S20968C9(); // tgen
  S20968C9(); // tgen
};
//SIG(-1 S20968C9) C1{ BC2{ VBC3{ VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC6{ m Fp[2]} FC6[9] Fp FC7{ v4 Fi Fp FC6} FC7} VBC8{ VBC9{ VBC10{ BC7 VBC4 VBC6 v5 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC4 BC6 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v7 v8 FC8[7] Fi Fs Fi FC10 Fl[9]} vd Fc Fi[3]} BC11{ BC12{ VBC9 VBC8 vd Fl Fp FC10 Fp Fs Fl Fi FL FC10[4] Fi} BC13{ VBC4 Fp Fs Fl Fi:6 Fp[2]} vd v9 FL FD FC5 Fi[9] Fs Fc:5} v1 v2 Fl Fi Fp Fc Fi FC5}


void  S20968C9 ::v9(){vfunc_called(this, "_ZN8S20968C92v9Ev");}
void  S20968C9 ::v10(){vfunc_called(this, "_ZN8S20968C93v10Ev");}
S20968C9 ::~S20968C9(){ note_dtor("S20968C9", this);} // tgen
S20968C9 ::S20968C9(){ note_ctor("S20968C9", this);} // tgen

static void Test_S20968C9()
{
  extern Class_Descriptor cd_S20968C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1057,2316)];
    init_test(&cd_S20968C9, buf);
    S20968C9 *dp, &lv = *(dp=new (buf) S20968C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16896,9260), "sizeof(S20968C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20968C9)");
    /*is_ambiguous_... S20968C11::S20968C7 */ AMB_check_base_class_offset(lv, (S20968C7*)(S20968C11*), ABISELECT(15472,8476), "S20968C9");
    check_base_class_offset(lv, (S20968C7*)(S20968C4*), ABISELECT(15472,8476), "S20968C9");
    check_base_class_offset(lv, (S20968C7*)(S20968C14*)(S20968C12*), ABISELECT(15472,8476), "S20968C9");
    check_base_class_offset(lv, (S20968C5*)(S20968C4*), ABISELECT(16416,8996), "S20968C9");
    check_base_class_offset(lv, (S281C37_nt*)(S20968C4*), ABISELECT(16872,9252), "S20968C9");
    check_base_class_offset(lv, (S20968C4*)(S20968C3*), ABISELECT(16416,8996), "S20968C9");
    check_base_class_offset(lv, (S20968C3*)(S20968C2*), ABISELECT(16320,8940), "S20968C9");
    check_base_class_offset(lv, (S20968C3*)(S20968C13*)(S20968C12*), ABISELECT(16320,8940), "S20968C9");
    /*is_ambiguous_... S20968C2::S20968C7 */ AMB_check_base_class_offset(lv, (S20968C7*)(S20968C2*), ABISELECT(15840,8672), "S20968C9");
    /*is_ambiguous_... S20968C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20968C2*), ABISELECT(16208,8868), "S20968C9");
    check_base_class_offset(lv, (S20968C2*)(S20968C11*), ABISELECT(15840,8672), "S20968C9");
    check_base_class_offset(lv, (S20968C2*)(S20968C13*)(S20968C12*), ABISELECT(15840,8672), "S20968C9");
    check_base_class_offset(lv, (S20968C11*)(S20968C10*), ABISELECT(4544,2476), "S20968C9");
    check_base_class_offset(lv, (S20968C10*), 0, "S20968C9");
    check_base_class_offset(lv, (S20968C13*)(S20968C12*), ABISELECT(32,20), "S20968C9");
    check_base_class_offset(lv, (S20968C14*)(S20968C12*), ABISELECT(4360,2360), "S20968C9");
    check_base_class_offset(lv, (S20968C12*), ABISELECT(32,20), "S20968C9");
    check_field_offset(lv, s20968c9f0, ABISELECT(4496,2452), "S20968C9.s20968c9f0");
    check_field_offset(lv, s20968c9f1, ABISELECT(4504,2456), "S20968C9.s20968c9f1");
    check_field_offset(lv, s20968c9f2, ABISELECT(4512,2460), "S20968C9.s20968c9f2");
    check_field_offset(lv, s20968c9f3, ABISELECT(4520,2464), "S20968C9.s20968c9f3");
    check_field_offset(lv, s20968c9f4, ABISELECT(4524,2468), "S20968C9.s20968c9f4");
    check_field_offset(lv, s20968c9f5, ABISELECT(4528,2472), "S20968C9.s20968c9f5");
    test_class_info(&lv, &cd_S20968C9);
    dp->~S20968C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20968C9(Test_S20968C9, "S20968C9", ABISELECT(16896,9260));

#else // __cplusplus

extern void _ZN8S20968C9C1Ev();
extern void _ZN8S20968C9D1Ev();
Name_Map name_map_S20968C9[] = {
  NSPAIR(_ZN8S20968C9C1Ev),
  NSPAIR(_ZN8S20968C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S20968C5;
extern VTBL_ENTRY _ZTI8S20968C5[];
extern  VTBL_ENTRY _ZTV8S20968C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C4;
extern VTBL_ENTRY _ZTI8S20968C4[];
extern  VTBL_ENTRY _ZTV8S20968C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C4[];
extern Class_Descriptor cd_S20968C3;
extern VTBL_ENTRY _ZTI8S20968C3[];
extern  VTBL_ENTRY _ZTV8S20968C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C3[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C2;
extern VTBL_ENTRY _ZTI8S20968C2[];
extern  VTBL_ENTRY _ZTV8S20968C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C2[];
extern Class_Descriptor cd_S20968C11;
extern VTBL_ENTRY _ZTI9S20968C11[];
extern  VTBL_ENTRY _ZTV9S20968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C11[];
extern Class_Descriptor cd_S20968C10;
extern VTBL_ENTRY _ZTI9S20968C10[];
extern  VTBL_ENTRY _ZTV9S20968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C10[];
extern Class_Descriptor cd_S20968C13;
extern VTBL_ENTRY _ZTI9S20968C13[];
extern  VTBL_ENTRY _ZTV9S20968C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C13[];
extern Class_Descriptor cd_S20968C14;
extern VTBL_ENTRY _ZTI9S20968C14[];
extern  VTBL_ENTRY _ZTV9S20968C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C14[];
extern Class_Descriptor cd_S20968C12;
extern VTBL_ENTRY _ZTI9S20968C12[];
extern  VTBL_ENTRY _ZTV9S20968C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C12[];
static Base_Class bases_S20968C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20968C7,    ABISELECT(15472,8476), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20968C5,    ABISELECT(16416,8996), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(16872,9252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C4,    ABISELECT(16416,8996), //bcp->offset
    61, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20968C3,    ABISELECT(16320,8940), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20968C7,    ABISELECT(15840,8672), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(16208,8868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C2,    ABISELECT(15840,8672), //bcp->offset
    43, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20968C11,    ABISELECT(4544,2476), //bcp->offset
    25, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20968C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20968C13,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20968C14,    ABISELECT(4360,2360), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20968C12,    ABISELECT(32,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20968C9[];
extern void _ZN8S20968C9D1Ev();
extern void _ZN8S20968C9D0Ev();
extern void _ZN8S20968C92v9Ev();
extern void _ZN8S20968C93v10Ev();
extern void ABISELECT(_ZThn32_N8S20968C9D1Ev,_ZThn20_N8S20968C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S20968C9D0Ev,_ZThn20_N8S20968C9D0Ev)();
extern void _ZN9S20968C122v8Ev();
extern void _ZN9S20968C112v6Ev();
extern void _ZN9S20968C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S20968C9D1Ev,_ZTv0_n40_N8S20968C9D1Ev)();
extern void ABISELECT(_ZThn4544_N8S20968C9D1Ev,_ZThn2476_N8S20968C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20968C9D0Ev,_ZTv0_n40_N8S20968C9D0Ev)();
extern void ABISELECT(_ZThn4544_N8S20968C9D0Ev,_ZThn2476_N8S20968C9D0Ev)() __attribute__((weak));
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S20968C9D1Ev,_ZTv0_n32_N8S20968C9D1Ev)();
extern void ABISELECT(_ZThn15840_N8S20968C9D1Ev,_ZThn8672_N8S20968C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20968C9D0Ev,_ZTv0_n32_N8S20968C9D0Ev)();
extern void ABISELECT(_ZThn15840_N8S20968C9D0Ev,_ZThn8672_N8S20968C9D0Ev)() __attribute__((weak));
extern void _ZN8S20968C22v5Ev();
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY vtc_S20968C9[] = {
  ABISELECT(16872,9252),
  ABISELECT(16416,8996),
  ABISELECT(16320,8940),
  ABISELECT(15840,8672),
  ABISELECT(15472,8476),
  ABISELECT(4544,2476),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  (VTBL_ENTRY)&_ZN8S20968C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20968C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20968C92v9Ev,
  (VTBL_ENTRY)&_ZN8S20968C93v10Ev,
  ABISELECT(15808,8652),
  ABISELECT(16840,9232),
  ABISELECT(15440,8456),
  ABISELECT(16384,8976),
  ABISELECT(16288,8920),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20968C9D1Ev,_ZThn20_N8S20968C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20968C9D0Ev,_ZThn20_N8S20968C9D0Ev),
  (VTBL_ENTRY)&_ZN9S20968C122v8Ev,
  ABISELECT(11112,6116),
  ABISELECT(-4360,-2360),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  ABISELECT(-4544,-2476),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-4544,-2476),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  (VTBL_ENTRY)&_ZN9S20968C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20968C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20968C9D1Ev,_ZTv0_n40_N8S20968C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20968C9D0Ev,_ZTv0_n40_N8S20968C9D0Ev),
  0,
  ABISELECT(-15472,-8476),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  0,
  ABISELECT(-15840,-8672),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15840,-8672),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20968C9D1Ev,_ZTv0_n32_N8S20968C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20968C9D0Ev,_ZTv0_n32_N8S20968C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16320,-8940),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16416,-8996),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20968C9[];
extern void _ZN9S20968C10D1Ev();
extern void _ZN9S20968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20968C10__8S20968C9[] = {
  ABISELECT(16872,9252),
  ABISELECT(16416,8996),
  ABISELECT(16320,8940),
  ABISELECT(15840,8672),
  ABISELECT(15472,8476),
  ABISELECT(4544,2476),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN9S20968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C10D0Ev,
};
extern void _ZN9S20968C112v6Ev();
extern void _ZN9S20968C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N9S20968C10D1Ev,_ZTv0_n40_N9S20968C10D1Ev)();
extern void ABISELECT(_ZThn4544_N9S20968C10D1Ev,_ZThn2476_N9S20968C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20968C10D0Ev,_ZTv0_n40_N9S20968C10D0Ev)();
extern void ABISELECT(_ZThn4544_N9S20968C10D0Ev,_ZThn2476_N9S20968C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20968C11__9S20968C10__8S20968C9[] = {
  ABISELECT(-4544,-2476),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-4544,-2476),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN9S20968C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20968C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20968C10D1Ev,_ZTv0_n40_N9S20968C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20968C10D0Ev,_ZTv0_n40_N9S20968C10D0Ev),
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C10__8S20968C9[] = {
  0,
  ABISELECT(-15472,-8476),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C10D1Ev,_ZTv0_n32_N9S20968C10D1Ev)();
extern void ABISELECT(_ZThn15840_N9S20968C10D1Ev,_ZThn8672_N9S20968C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20968C10D0Ev,_ZTv0_n32_N9S20968C10D0Ev)();
extern void ABISELECT(_ZThn15840_N9S20968C10D0Ev,_ZThn8672_N9S20968C10D0Ev)() __attribute__((weak));
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C10__8S20968C9[] = {
  0,
  ABISELECT(-15840,-8672),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15840,-8672),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C10D1Ev,_ZTv0_n32_N9S20968C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C10D0Ev,_ZTv0_n32_N9S20968C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C10__8S20968C9[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16320,-8940),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C10__8S20968C9[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16416,-8996),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN9S20968C12D1Ev();
extern void _ZN9S20968C12D0Ev();
extern void _ZN9S20968C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20968C12__8S20968C9[] = {
  ABISELECT(15808,8652),
  ABISELECT(16840,9232),
  ABISELECT(15440,8456),
  ABISELECT(16384,8976),
  ABISELECT(16288,8920),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  (VTBL_ENTRY)&_ZN9S20968C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20968C122v8Ev,
};
extern void _ZN9S20968C13D1Ev();
extern void _ZN9S20968C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20968C139S20968C12__8S20968C9[] = {
  ABISELECT(15808,8652),
  ABISELECT(16840,9232),
  ABISELECT(15440,8456),
  ABISELECT(16384,8976),
  ABISELECT(16288,8920),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN9S20968C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C139S20968C12__8S20968C9[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16288,-8920),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C139S20968C12__8S20968C9[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16384,-8976),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C139S20968C12__8S20968C9[] = {
  0,
  ABISELECT(-15440,-8456),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C13D1Ev,_ZTv0_n32_N9S20968C13D1Ev)();
extern void ABISELECT(_ZThn15808_N9S20968C13D1Ev,_ZThn8652_N9S20968C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20968C13D0Ev,_ZTv0_n32_N9S20968C13D0Ev)();
extern void ABISELECT(_ZThn15808_N9S20968C13D0Ev,_ZThn8652_N9S20968C13D0Ev)() __attribute__((weak));
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C139S20968C12__8S20968C9[] = {
  0,
  ABISELECT(-15808,-8652),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15808,-8652),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C13D1Ev,_ZTv0_n32_N9S20968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C13D0Ev,_ZTv0_n32_N9S20968C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20968C149S20968C12__8S20968C9[] = {
  ABISELECT(11112,6116),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C14[0]),
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C149S20968C12__8S20968C9[] = {
  0,
  ABISELECT(-11112,-6116),
  (VTBL_ENTRY)&(_ZTI9S20968C14[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C12__8S20968C9[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16288,-8920),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C12__8S20968C9[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16384,-8976),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C12__8S20968C9[] = {
  0,
  ABISELECT(-15440,-8456),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C12D1Ev,_ZTv0_n32_N9S20968C12D1Ev)();
extern void ABISELECT(_ZThn15808_N9S20968C12D1Ev,_ZThn8652_N9S20968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20968C12D0Ev,_ZTv0_n32_N9S20968C12D0Ev)();
extern void ABISELECT(_ZThn15808_N9S20968C12D0Ev,_ZThn8652_N9S20968C12D0Ev)() __attribute__((weak));
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C12__8S20968C9[] = {
  0,
  ABISELECT(-15808,-8652),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15808,-8652),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C12D1Ev,_ZTv0_n32_N9S20968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C12D0Ev,_ZTv0_n32_N9S20968C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20968C14__9S20968C12__8S20968C9[] = {
  ABISELECT(11112,6116),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
};
extern void _ZN9S20968C112v6Ev();
extern void _ZN9S20968C112v7Ev();
extern void _ZN9S20968C11D1Ev();
extern void _ZN9S20968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20968C11__8S20968C9[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN9S20968C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20968C112v7Ev,
  (VTBL_ENTRY)&_ZN9S20968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C11D0Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C11__8S20968C9[] = {
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C11D1Ev,_ZTv0_n32_N9S20968C11D1Ev)();
extern void ABISELECT(_ZThn11296_N9S20968C11D1Ev,_ZThn6196_N9S20968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20968C11D0Ev,_ZTv0_n32_N9S20968C11D0Ev)();
extern void ABISELECT(_ZThn11296_N9S20968C11D0Ev,_ZThn6196_N9S20968C11D0Ev)() __attribute__((weak));
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C11__8S20968C9[] = {
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C11D1Ev,_ZTv0_n32_N9S20968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C11D0Ev,_ZTv0_n32_N9S20968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C11__8S20968C9[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C11__8S20968C9[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C2D1Ev();
extern void _ZN8S20968C2D0Ev();
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__8S20968C9[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__8S20968C2__8S20968C9[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C2__8S20968C9[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C2__8S20968C9[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__8S20968C9[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C3__8S20968C9[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C3__8S20968C9[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C9[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C4__8S20968C9[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTT_ENTRY vtt_S20968C9[] = {
  {&(_ZTV8S20968C9[8]),  8,69},
  {&(_tg__ZTV9S20968C10__8S20968C9[8]),  8,10},
  {&(_tg__ZTV9S20968C11__9S20968C10__8S20968C9[10]),  10,14},
  {&(_tg__ZTV8S20968C7__9S20968C10__8S20968C9[3]),  3,4},
  {&(_tg__ZTV8S20968C2__9S20968C10__8S20968C9[9]),  9,13},
  {&(_tg__ZTV8S20968C3__9S20968C10__8S20968C9[5]),  5,5},
  {&(_tg__ZTV8S20968C4__9S20968C10__8S20968C9[6]),  6,8},
  {&(_tg__ZTV9S20968C12__8S20968C9[7]),  7,10},
  {&(_tg__ZTV9S20968C139S20968C12__8S20968C9[7]),  7,9},
  {&(_tg__ZTV8S20968C3__9S20968C139S20968C12__8S20968C9[5]),  5,5},
  {&(_tg__ZTV8S20968C4__9S20968C139S20968C12__8S20968C9[6]),  6,8},
  {&(_tg__ZTV8S20968C7__9S20968C139S20968C12__8S20968C9[3]),  3,4},
  {&(_tg__ZTV8S20968C2__9S20968C139S20968C12__8S20968C9[9]),  9,13},
  {&(_tg__ZTV9S20968C149S20968C12__8S20968C9[3]),  3,3},
  {&(_tg__ZTV8S20968C7__9S20968C149S20968C12__8S20968C9[3]),  3,4},
  {&(_tg__ZTV8S20968C3__9S20968C12__8S20968C9[5]),  5,5},
  {&(_tg__ZTV8S20968C4__9S20968C12__8S20968C9[6]),  6,8},
  {&(_tg__ZTV8S20968C7__9S20968C12__8S20968C9[3]),  3,4},
  {&(_tg__ZTV8S20968C2__9S20968C12__8S20968C9[9]),  9,13},
  {&(_tg__ZTV9S20968C14__9S20968C12__8S20968C9[3]),  3,3},
  {&(_ZTV8S20968C9[35]),  35,69},
  {&(_ZTV8S20968C9[42]),  42,69},
  {&(_ZTV8S20968C9[52]),  52,69},
  {&(_ZTV8S20968C9[61]),  61,69},
  {&(_ZTV8S20968C9[67]),  67,69},
  {&(_ZTV8S20968C9[19]),  19,69},
  {&(_ZTV8S20968C9[25]),  25,69},
  {&(_tg__ZTV9S20968C11__8S20968C9[7]),  7,11},
  {&(_tg__ZTV8S20968C7__9S20968C11__8S20968C9[3]),  3,4},
  {&(_tg__ZTV8S20968C2__9S20968C11__8S20968C9[9]),  9,13},
  {&(_tg__ZTV8S20968C3__9S20968C11__8S20968C9[5]),  5,5},
  {&(_tg__ZTV8S20968C4__9S20968C11__8S20968C9[6]),  6,8},
  {&(_tg__ZTV8S20968C2__8S20968C9[6]),  6,10},
  {&(_tg__ZTV8S20968C3__8S20968C2__8S20968C9[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C2__8S20968C9[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C2__8S20968C9[3]),  3,4},
  {&(_tg__ZTV8S20968C3__8S20968C9[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C3__8S20968C9[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C3__8S20968C9[3]),  3,4},
  {&(_tg__ZTV8S20968C4__8S20968C9[4]),  4,6},
  {&(_tg__ZTV8S20968C7__8S20968C4__8S20968C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20968C9[];
extern  VTBL_ENTRY _ZTV8S20968C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C9[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C11D0Ev,_ZTv0_n32_N9S20968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20968C11D0Ev,_ZThn6196_N9S20968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C11D1Ev,_ZTv0_n32_N9S20968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20968C11D1Ev,_ZThn6196_N9S20968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C12D0Ev,_ZTv0_n32_N9S20968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N9S20968C12D0Ev,_ZThn8652_N9S20968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C12D1Ev,_ZTv0_n32_N9S20968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N9S20968C12D1Ev,_ZThn8652_N9S20968C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C13D0Ev,_ZTv0_n32_N9S20968C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N9S20968C13D0Ev,_ZThn8652_N9S20968C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C13D1Ev,_ZTv0_n32_N9S20968C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N9S20968C13D1Ev,_ZThn8652_N9S20968C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C10D0Ev,_ZTv0_n32_N9S20968C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N9S20968C10D0Ev,_ZThn8672_N9S20968C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20968C10D1Ev,_ZTv0_n32_N9S20968C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N9S20968C10D1Ev,_ZThn8672_N9S20968C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20968C10D0Ev,_ZTv0_n40_N9S20968C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S20968C10D0Ev,_ZThn2476_N9S20968C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20968C10D1Ev,_ZTv0_n40_N9S20968C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S20968C10D1Ev,_ZThn2476_N9S20968C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20968C9D0Ev,_ZTv0_n32_N8S20968C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N8S20968C9D0Ev,_ZThn8672_N8S20968C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20968C9D1Ev,_ZTv0_n32_N8S20968C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N8S20968C9D1Ev,_ZThn8672_N8S20968C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20968C9D0Ev,_ZTv0_n40_N8S20968C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S20968C9D0Ev,_ZThn2476_N8S20968C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20968C9D1Ev,_ZTv0_n40_N8S20968C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S20968C9D1Ev,_ZThn2476_N8S20968C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20968C9 = {  "S20968C9", // class name
  bases_S20968C9, 13,
  &(vtc_S20968C9[0]), // expected_vtbl_contents
  &(vtt_S20968C9[0]), // expected_vtt_contents
  ABISELECT(16896,9260), // object size
  NSPAIRA(_ZTI8S20968C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20968C9),69, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20968C9),41, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20968C1  : virtual S20968C2 , S20968C7 , virtual S20968C9 , S20968C5 {
  int s20968c1f0[2];
  long s20968c1f1;
  int s20968c1f2[7];
  ::S20176C3_nt s20968c1f3[2];
  char s20968c1f4;
  long double s20968c1f5;
  int s20968c1f6;
  virtual void  v1(); // _ZN8S20968C12v1Ev
  ~S20968C1(); // tgen
  S20968C1(); // tgen
};
//SIG(1 S20968C1) C1{ VBC2{ VBC3{ VBC4{ BC5{ v2 Fi Fp FC6{ m Fp[2]}} VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC7 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC7 VBC9{ BC10{ VBC11{ VBC7 VBC2 v6 v7 FC2[7] Fi Fs Fi FC4 Fl[9]} vd Fc Fi[3]} BC12{ BC13{ VBC3 VBC2 vd Fl Fp FC4 Fp Fs Fl Fi FL FC4[4] Fi} BC14{ VBC7 Fp Fs Fl Fi:6 Fp[2]} vd v8 FL FD FC8 Fi[9] Fs Fc:5} v9 v10 Fl Fi Fp Fc Fi FC8} BC5 v1 Fi[2] Fl Fi[7] FC8[2] Fc FD Fi}


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

static void Test_S20968C1()
{
  extern Class_Descriptor cd_S20968C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1088,2385)];
    init_test(&cd_S20968C1, buf);
    S20968C1 *dp, &lv = *(dp=new (buf) S20968C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17392,9536), "sizeof(S20968C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20968C1)");
    check_base_class_offset(lv, (S20968C5*)(S20968C4*), ABISELECT(1072,600), "S20968C1");
    check_base_class_offset(lv, (S20968C7*)(S20968C4*), ABISELECT(1536,856), "S20968C1");
    /*is_ambiguous_... S20968C11::S20968C7 */ AMB_check_base_class_offset(lv, (S20968C7*)(S20968C11*), ABISELECT(1536,856), "S20968C1");
    check_base_class_offset(lv, (S20968C7*)(S20968C14*)(S20968C12*)(S20968C9*), ABISELECT(1536,856), "S20968C1");
    check_base_class_offset(lv, (S281C37_nt*)(S20968C4*), ABISELECT(1904,1052), "S20968C1");
    check_base_class_offset(lv, (S20968C4*)(S20968C3*), ABISELECT(1072,600), "S20968C1");
    check_base_class_offset(lv, (S20968C3*)(S20968C2*), ABISELECT(976,544), "S20968C1");
    check_base_class_offset(lv, (S20968C3*)(S20968C13*)(S20968C12*)(S20968C9*), ABISELECT(976,544), "S20968C1");
    /*is_ambiguous_... S20968C2::S20968C7 */ AMB_check_base_class_offset(lv, (S20968C7*)(S20968C2*), ABISELECT(496,276), "S20968C1");
    /*is_ambiguous_... S20968C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20968C2*), ABISELECT(864,472), "S20968C1");
    check_base_class_offset(lv, (S20968C2*), ABISELECT(496,276), "S20968C1");
    check_base_class_offset(lv, (S20968C2*)(S20968C11*), ABISELECT(496,276), "S20968C1");
    check_base_class_offset(lv, (S20968C2*)(S20968C13*)(S20968C12*)(S20968C9*), ABISELECT(496,276), "S20968C1");
    /*is_ambiguous_... S20968C1::S20968C7 */ AMB_check_base_class_offset(lv, (S20968C7*), 0, "S20968C1");
    check_base_class_offset(lv, (S20968C11*)(S20968C10*)(S20968C9*), ABISELECT(6464,3536), "S20968C1");
    check_base_class_offset(lv, (S20968C10*)(S20968C9*), ABISELECT(1920,1060), "S20968C1");
    check_base_class_offset(lv, (S20968C13*)(S20968C12*)(S20968C9*), ABISELECT(1952,1080), "S20968C1");
    check_base_class_offset(lv, (S20968C14*)(S20968C12*)(S20968C9*), ABISELECT(6280,3420), "S20968C1");
    check_base_class_offset(lv, (S20968C12*)(S20968C9*), ABISELECT(1952,1080), "S20968C1");
    check_base_class_offset(lv, (S20968C9*), ABISELECT(1920,1060), "S20968C1");
    /*is_ambiguous_... S20968C1::S20968C5 */ AMB_check_base_class_offset(lv, (S20968C5*), ABISELECT(368,196), "S20968C1");
    check_field_offset(lv, s20968c1f0, ABISELECT(408,216), "S20968C1.s20968c1f0");
    check_field_offset(lv, s20968c1f1, ABISELECT(416,224), "S20968C1.s20968c1f1");
    check_field_offset(lv, s20968c1f2, ABISELECT(424,228), "S20968C1.s20968c1f2");
    check_field_offset(lv, s20968c1f3, ABISELECT(452,256), "S20968C1.s20968c1f3");
    check_field_offset(lv, s20968c1f4, ABISELECT(454,258), "S20968C1.s20968c1f4");
    check_field_offset(lv, s20968c1f5, ABISELECT(464,260), "S20968C1.s20968c1f5");
    check_field_offset(lv, s20968c1f6, ABISELECT(480,272), "S20968C1.s20968c1f6");
    test_class_info(&lv, &cd_S20968C1);
    dp->~S20968C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20968C1(Test_S20968C1, "S20968C1", ABISELECT(17392,9536));

#else // __cplusplus

extern void _ZN8S20968C1C1Ev();
extern void _ZN8S20968C1D1Ev();
Name_Map name_map_S20968C1[] = {
  NSPAIR(_ZN8S20968C1C1Ev),
  NSPAIR(_ZN8S20968C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20968C5;
extern VTBL_ENTRY _ZTI8S20968C5[];
extern  VTBL_ENTRY _ZTV8S20968C5[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C4;
extern VTBL_ENTRY _ZTI8S20968C4[];
extern  VTBL_ENTRY _ZTV8S20968C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C4[];
extern Class_Descriptor cd_S20968C3;
extern VTBL_ENTRY _ZTI8S20968C3[];
extern  VTBL_ENTRY _ZTV8S20968C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C3[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20968C2;
extern VTBL_ENTRY _ZTI8S20968C2[];
extern  VTBL_ENTRY _ZTV8S20968C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C2[];
extern Class_Descriptor cd_S20968C7;
extern VTBL_ENTRY _ZTI8S20968C7[];
extern  VTBL_ENTRY _ZTV8S20968C7[];
extern Class_Descriptor cd_S20968C11;
extern VTBL_ENTRY _ZTI9S20968C11[];
extern  VTBL_ENTRY _ZTV9S20968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C11[];
extern Class_Descriptor cd_S20968C10;
extern VTBL_ENTRY _ZTI9S20968C10[];
extern  VTBL_ENTRY _ZTV9S20968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C10[];
extern Class_Descriptor cd_S20968C13;
extern VTBL_ENTRY _ZTI9S20968C13[];
extern  VTBL_ENTRY _ZTV9S20968C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C13[];
extern Class_Descriptor cd_S20968C14;
extern VTBL_ENTRY _ZTI9S20968C14[];
extern  VTBL_ENTRY _ZTV9S20968C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C14[];
extern Class_Descriptor cd_S20968C12;
extern VTBL_ENTRY _ZTI9S20968C12[];
extern  VTBL_ENTRY _ZTV9S20968C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20968C12[];
extern Class_Descriptor cd_S20968C9;
extern VTBL_ENTRY _ZTI8S20968C9[];
extern  VTBL_ENTRY _ZTV8S20968C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C9[];
extern Class_Descriptor cd_S20968C5;
extern VTBL_ENTRY _ZTI8S20968C5[];
extern  VTBL_ENTRY _ZTV8S20968C5[];
static Base_Class bases_S20968C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20968C5,    ABISELECT(1072,600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C7,    ABISELECT(1536,856), //bcp->offset
    42, //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
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(1904,1052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20968C4,    ABISELECT(1072,600), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20968C3,    ABISELECT(976,544), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20968C7,    ABISELECT(496,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
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(864,472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20968C2,    ABISELECT(496,276), //bcp->offset
    16, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20968C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20968C11,    ABISELECT(6464,3536), //bcp->offset
    75, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20968C10,    ABISELECT(1920,1060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20968C13,    ABISELECT(1952,1080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20968C14,    ABISELECT(6280,3420), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20968C12,    ABISELECT(1952,1080), //bcp->offset
    62, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20968C9,    ABISELECT(1920,1060), //bcp->offset
    46, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20968C5,    ABISELECT(368,196), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20968C1[];
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C12v1Ev();
extern void _ZN8S20968C1D1Ev();
extern void _ZN8S20968C1D0Ev();
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S20968C1D1Ev,_ZTv0_n32_N8S20968C1D1Ev)();
extern void ABISELECT(_ZThn496_N8S20968C1D1Ev,_ZThn276_N8S20968C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20968C1D0Ev,_ZTv0_n32_N8S20968C1D0Ev)();
extern void ABISELECT(_ZThn496_N8S20968C1D0Ev,_ZThn276_N8S20968C1D0Ev)() __attribute__((weak));
extern void _ZN8S20968C22v5Ev();
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S20968C1D1Ev,_ZTv0_n36_N8S20968C1D1Ev)();
extern void ABISELECT(_ZThn1920_N8S20968C1D1Ev,_ZThn1060_N8S20968C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20968C1D0Ev,_ZTv0_n36_N8S20968C1D0Ev)();
extern void ABISELECT(_ZThn1920_N8S20968C1D0Ev,_ZThn1060_N8S20968C1D0Ev)() __attribute__((weak));
extern void _ZN8S20968C92v9Ev();
extern void _ZN8S20968C93v10Ev();
extern void ABISELECT(_ZTvn32_n72_N8S20968C1D1Ev,_ZTvn20_n36_N8S20968C1D1Ev)();
extern void ABISELECT(_ZTvn32_n72_N8S20968C1D0Ev,_ZTvn20_n36_N8S20968C1D0Ev)();
extern void _ZN9S20968C122v8Ev();
extern void _ZN9S20968C112v6Ev();
extern void _ZN9S20968C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S20968C1D1Ev,_ZTv0_n40_N8S20968C1D1Ev)();
extern void ABISELECT(_ZThn6464_N8S20968C1D1Ev,_ZThn3536_N8S20968C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20968C1D0Ev,_ZTv0_n40_N8S20968C1D0Ev)();
extern void ABISELECT(_ZThn6464_N8S20968C1D0Ev,_ZThn3536_N8S20968C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20968C1[] = {
  ABISELECT(6464,3536),
  ABISELECT(1920,1060),
  ABISELECT(1904,1052),
  ABISELECT(1536,856),
  ABISELECT(1072,600),
  ABISELECT(976,544),
  ABISELECT(496,276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C1[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20968C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20968C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20968C1D0Ev,
  ABISELECT(-368,-196),
  (VTBL_ENTRY)&(_ZTI8S20968C1[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  0,
  ABISELECT(-496,-276),
  0,
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-496,-276),
  (VTBL_ENTRY)&(_ZTI8S20968C1[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20968C1D1Ev,_ZTv0_n32_N8S20968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20968C1D0Ev,_ZTv0_n32_N8S20968C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-976,-544),
  (VTBL_ENTRY)&(_ZTI8S20968C1[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-1072,-600),
  (VTBL_ENTRY)&(_ZTI8S20968C1[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
  0,
  ABISELECT(-1536,-856),
  (VTBL_ENTRY)&(_ZTI8S20968C1[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  ABISELECT(32,20),
  0,
  0,
  ABISELECT(-1920,-1060),
  ABISELECT(-16,-8),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-1424,-784),
  ABISELECT(-384,-204),
  ABISELECT(4544,2476),
  ABISELECT(-1920,-1060),
  (VTBL_ENTRY)&(_ZTI8S20968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20968C1D1Ev,_ZTv0_n36_N8S20968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20968C1D0Ev,_ZTv0_n36_N8S20968C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C92v9Ev,
  (VTBL_ENTRY)&_ZN8S20968C93v10Ev,
  ABISELECT(-1456,-804),
  ABISELECT(-48,-28),
  ABISELECT(-416,-224),
  ABISELECT(-880,-480),
  ABISELECT(-976,-536),
  ABISELECT(-1952,-1080),
  (VTBL_ENTRY)&(_ZTI8S20968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n72_N8S20968C1D1Ev,_ZTvn20_n36_N8S20968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n72_N8S20968C1D0Ev,_ZTvn20_n36_N8S20968C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20968C122v8Ev,
  ABISELECT(-4744,-2564),
  ABISELECT(-6280,-3420),
  (VTBL_ENTRY)&(_ZTI8S20968C1[0]),
  ABISELECT(-6464,-3536),
  0,
  0,
  ABISELECT(-4560,-2484),
  ABISELECT(-5392,-2936),
  ABISELECT(-5488,-2992),
  ABISELECT(-5968,-3260),
  ABISELECT(-4928,-2680),
  ABISELECT(-6464,-3536),
  (VTBL_ENTRY)&(_ZTI8S20968C1[0]),
  (VTBL_ENTRY)&_ZN9S20968C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20968C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20968C1D1Ev,_ZTv0_n40_N8S20968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20968C1D0Ev,_ZTv0_n40_N8S20968C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20968C1[];
extern void _ZN8S20968C72v3Ev();
extern void _ZN8S20968C2D1Ev();
extern void _ZN8S20968C2D0Ev();
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__8S20968C1[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20968C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__8S20968C2__8S20968C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C2__8S20968C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C2__8S20968C1[] = {
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI8S20968C2[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__8S20968C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C3__8S20968C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C3__8S20968C1[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20968C3[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C1[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C4__8S20968C1[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20968C4[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C9D1Ev();
extern void _ZN8S20968C9D0Ev();
extern void _ZN8S20968C92v9Ev();
extern void _ZN8S20968C93v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C9__8S20968C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-1424,-784),
  ABISELECT(-384,-204),
  ABISELECT(4544,2476),
  0,
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  (VTBL_ENTRY)&_ZN8S20968C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20968C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20968C92v9Ev,
  (VTBL_ENTRY)&_ZN8S20968C93v10Ev,
};
extern void _ZN9S20968C10D1Ev();
extern void _ZN9S20968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20968C108S20968C9__8S20968C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-1424,-784),
  ABISELECT(-384,-204),
  ABISELECT(4544,2476),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN9S20968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C10D0Ev,
};
extern void _ZN9S20968C112v6Ev();
extern void _ZN9S20968C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N9S20968C10D1Ev,_ZTv0_n40_N9S20968C10D1Ev)();
extern void ABISELECT(_ZThn4544_N9S20968C10D1Ev,_ZThn2476_N9S20968C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20968C10D0Ev,_ZTv0_n40_N9S20968C10D0Ev)();
extern void ABISELECT(_ZThn4544_N9S20968C10D0Ev,_ZThn2476_N9S20968C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20968C11__9S20968C108S20968C9__8S20968C1[] = {
  ABISELECT(-4544,-2476),
  0,
  0,
  ABISELECT(-4560,-2484),
  ABISELECT(-5392,-2936),
  ABISELECT(-5488,-2992),
  ABISELECT(-5968,-3260),
  ABISELECT(-4928,-2680),
  ABISELECT(-4544,-2476),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN9S20968C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20968C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20968C10D1Ev,_ZTv0_n40_N9S20968C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20968C10D0Ev,_ZTv0_n40_N9S20968C10D0Ev),
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C108S20968C9__8S20968C1[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C10D1Ev,_ZTv0_n32_N9S20968C10D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20968C10D0Ev,_ZTv0_n32_N9S20968C10D0Ev)();
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C108S20968C9__8S20968C1[] = {
  0,
  ABISELECT(1424,784),
  0,
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(1424,784),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C10D1Ev,_ZTv0_n32_N9S20968C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C10D0Ev,_ZTv0_n32_N9S20968C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C108S20968C9__8S20968C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C108S20968C9__8S20968C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI9S20968C10[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN9S20968C12D1Ev();
extern void _ZN9S20968C12D0Ev();
extern void _ZN9S20968C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20968C128S20968C9__8S20968C1[] = {
  ABISELECT(-1456,-804),
  ABISELECT(-48,-28),
  ABISELECT(-416,-224),
  ABISELECT(-880,-480),
  ABISELECT(-976,-536),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  (VTBL_ENTRY)&_ZN9S20968C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20968C122v8Ev,
};
extern void _ZN9S20968C13D1Ev();
extern void _ZN9S20968C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20968C139S20968C128S20968C9__8S20968C1[] = {
  ABISELECT(-1456,-804),
  ABISELECT(-48,-28),
  ABISELECT(-416,-224),
  ABISELECT(-880,-480),
  ABISELECT(-976,-536),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN9S20968C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C139S20968C128S20968C9__8S20968C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(976,536),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C139S20968C128S20968C9__8S20968C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(880,480),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C139S20968C128S20968C9__8S20968C1[] = {
  0,
  ABISELECT(416,224),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C13D1Ev,_ZTv0_n32_N9S20968C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20968C13D0Ev,_ZTv0_n32_N9S20968C13D0Ev)();
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C139S20968C128S20968C9__8S20968C1[] = {
  0,
  ABISELECT(1456,804),
  0,
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(1456,804),
  (VTBL_ENTRY)&(_ZTI9S20968C13[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C13D1Ev,_ZTv0_n32_N9S20968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C13D0Ev,_ZTv0_n32_N9S20968C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20968C149S20968C128S20968C9__8S20968C1[] = {
  ABISELECT(-4744,-2564),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C14[0]),
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C149S20968C128S20968C9__8S20968C1[] = {
  0,
  ABISELECT(4744,2564),
  (VTBL_ENTRY)&(_ZTI9S20968C14[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C128S20968C9__8S20968C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(976,536),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C128S20968C9__8S20968C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(880,480),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C128S20968C9__8S20968C1[] = {
  0,
  ABISELECT(416,224),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C12D1Ev,_ZTv0_n32_N9S20968C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20968C12D0Ev,_ZTv0_n32_N9S20968C12D0Ev)();
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C128S20968C9__8S20968C1[] = {
  0,
  ABISELECT(1456,804),
  0,
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(1456,804),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C12D1Ev,_ZTv0_n32_N9S20968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C12D0Ev,_ZTv0_n32_N9S20968C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20968C14__9S20968C128S20968C9__8S20968C1[] = {
  ABISELECT(-4744,-2564),
  ABISELECT(-4328,-2340),
  (VTBL_ENTRY)&(_ZTI9S20968C12[0]),
};
extern void _ZN9S20968C112v6Ev();
extern void _ZN9S20968C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S20968C9D1Ev,_ZTv0_n40_N8S20968C9D1Ev)();
extern void ABISELECT(_ZThn4544_N8S20968C9D1Ev,_ZThn2476_N8S20968C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20968C9D0Ev,_ZTv0_n40_N8S20968C9D0Ev)();
extern void ABISELECT(_ZThn4544_N8S20968C9D0Ev,_ZThn2476_N8S20968C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20968C11__8S20968C9__8S20968C1[] = {
  ABISELECT(-4544,-2476),
  0,
  0,
  ABISELECT(-4560,-2484),
  ABISELECT(-5392,-2936),
  ABISELECT(-5488,-2992),
  ABISELECT(-5968,-3260),
  ABISELECT(-4928,-2680),
  ABISELECT(-4544,-2476),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  (VTBL_ENTRY)&_ZN9S20968C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20968C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20968C9D1Ev,_ZTv0_n40_N8S20968C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20968C9D0Ev,_ZTv0_n40_N8S20968C9D0Ev),
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__8S20968C9__8S20968C1[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S20968C9D1Ev,_ZTv0_n32_N8S20968C9D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S20968C9D0Ev,_ZTv0_n32_N8S20968C9D0Ev)();
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__8S20968C9__8S20968C1[] = {
  0,
  ABISELECT(1424,784),
  0,
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(1424,784),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20968C9D1Ev,_ZTv0_n32_N8S20968C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20968C9D0Ev,_ZTv0_n32_N8S20968C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__8S20968C9__8S20968C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__8S20968C9__8S20968C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
extern void ABISELECT(_ZThn32_N8S20968C9D1Ev,_ZThn20_N8S20968C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S20968C9D0Ev,_ZThn20_N8S20968C9D0Ev)();
extern void _ZN9S20968C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20968C12__8S20968C9__8S20968C1[] = {
  ABISELECT(-1456,-804),
  ABISELECT(-48,-28),
  ABISELECT(-416,-224),
  ABISELECT(-880,-480),
  ABISELECT(-976,-536),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20968C9D1Ev,_ZThn20_N8S20968C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20968C9D0Ev,_ZThn20_N8S20968C9D0Ev),
  (VTBL_ENTRY)&_ZN9S20968C122v8Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20968C149S20968C12__8S20968C9__8S20968C1[] = {
  ABISELECT(-4744,-2564),
  ABISELECT(-4360,-2360),
  (VTBL_ENTRY)&(_ZTI8S20968C9[0]),
};
extern void _ZN9S20968C112v6Ev();
extern void _ZN9S20968C112v7Ev();
extern void _ZN9S20968C11D1Ev();
extern void _ZN9S20968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20968C11__8S20968C1[] = {
  ABISELECT(-4560,-2484),
  ABISELECT(-5392,-2936),
  ABISELECT(-5488,-2992),
  ABISELECT(-5968,-3260),
  ABISELECT(-4928,-2680),
  0,
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN9S20968C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20968C112v7Ev,
  (VTBL_ENTRY)&_ZN9S20968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20968C11D0Ev,
};
extern void _ZN8S20968C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C7__9S20968C11__8S20968C1[] = {
  0,
  ABISELECT(4928,2680),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
};
extern void _ZN8S20968C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20968C11D1Ev,_ZTv0_n32_N9S20968C11D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20968C11D0Ev,_ZTv0_n32_N9S20968C11D0Ev)();
extern void _ZN8S20968C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C2__9S20968C11__8S20968C1[] = {
  0,
  ABISELECT(5968,3260),
  0,
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(5968,3260),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN8S20968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C11D1Ev,_ZTv0_n32_N9S20968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20968C11D0Ev,_ZTv0_n32_N9S20968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20968C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20968C3__9S20968C11__8S20968C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(5488,2992),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
};
extern void _ZN8S20968C52v2Ev();
extern void _ZN8S20968C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20968C4__9S20968C11__8S20968C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(5392,2936),
  (VTBL_ENTRY)&(_ZTI9S20968C11[0]),
  (VTBL_ENTRY)&_ZN8S20968C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20968C42v4Ev,
};
static  VTT_ENTRY vtt_S20968C1[] = {
  {&(_ZTV8S20968C1[9]),  9,89},
  {&(_ZTV8S20968C1[25]),  25,89},
  {&(_ZTV8S20968C1[34]),  34,89},
  {&(_ZTV8S20968C1[40]),  40,89},
  {&(_ZTV8S20968C1[45]),  45,89},
  {&(_ZTV8S20968C1[58]),  58,89},
  {&(_ZTV8S20968C1[85]),  85,89},
  {&(_ZTV8S20968C1[69]),  69,89},
  {&(_ZTV8S20968C1[75]),  75,89},
  {&(_tg__ZTV8S20968C2__8S20968C1[6]),  6,10},
  {&(_tg__ZTV8S20968C3__8S20968C2__8S20968C1[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C2__8S20968C1[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C2__8S20968C1[3]),  3,4},
  {&(_tg__ZTV8S20968C3__8S20968C1[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C3__8S20968C1[6]),  6,8},
  {&(_tg__ZTV8S20968C7__8S20968C3__8S20968C1[3]),  3,4},
  {&(_tg__ZTV8S20968C4__8S20968C1[4]),  4,6},
  {&(_tg__ZTV8S20968C7__8S20968C4__8S20968C1[3]),  3,4},
  {&(_tg__ZTV8S20968C9__8S20968C1[8]),  8,12},
  {&(_tg__ZTV9S20968C108S20968C9__8S20968C1[8]),  8,10},
  {&(_tg__ZTV9S20968C11__9S20968C108S20968C9__8S20968C1[10]),  10,14},
  {&(_tg__ZTV8S20968C7__9S20968C108S20968C9__8S20968C1[3]),  3,4},
  {&(_tg__ZTV8S20968C2__9S20968C108S20968C9__8S20968C1[9]),  9,13},
  {&(_tg__ZTV8S20968C3__9S20968C108S20968C9__8S20968C1[5]),  5,5},
  {&(_tg__ZTV8S20968C4__9S20968C108S20968C9__8S20968C1[6]),  6,8},
  {&(_tg__ZTV9S20968C128S20968C9__8S20968C1[7]),  7,10},
  {&(_tg__ZTV9S20968C139S20968C128S20968C9__8S20968C1[7]),  7,9},
  {&(_tg__ZTV8S20968C3__9S20968C139S20968C128S20968C9__8S20968C1[5]),  5,5},
  {&(_tg__ZTV8S20968C4__9S20968C139S20968C128S20968C9__8S20968C1[6]),  6,8},
  {&(_tg__ZTV8S20968C7__9S20968C139S20968C128S20968C9__8S20968C1[3]),  3,4},
  {&(_tg__ZTV8S20968C2__9S20968C139S20968C128S20968C9__8S20968C1[9]),  9,13},
  {&(_tg__ZTV9S20968C149S20968C128S20968C9__8S20968C1[3]),  3,3},
  {&(_tg__ZTV8S20968C7__9S20968C149S20968C128S20968C9__8S20968C1[3]),  3,4},
  {&(_tg__ZTV8S20968C3__9S20968C128S20968C9__8S20968C1[5]),  5,5},
  {&(_tg__ZTV8S20968C4__9S20968C128S20968C9__8S20968C1[6]),  6,8},
  {&(_tg__ZTV8S20968C7__9S20968C128S20968C9__8S20968C1[3]),  3,4},
  {&(_tg__ZTV8S20968C2__9S20968C128S20968C9__8S20968C1[9]),  9,13},
  {&(_tg__ZTV9S20968C14__9S20968C128S20968C9__8S20968C1[3]),  3,3},
  {&(_tg__ZTV9S20968C11__8S20968C9__8S20968C1[10]),  10,14},
  {&(_tg__ZTV8S20968C7__8S20968C9__8S20968C1[3]),  3,4},
  {&(_tg__ZTV8S20968C2__8S20968C9__8S20968C1[9]),  9,13},
  {&(_tg__ZTV8S20968C3__8S20968C9__8S20968C1[5]),  5,5},
  {&(_tg__ZTV8S20968C4__8S20968C9__8S20968C1[6]),  6,8},
  {&(_tg__ZTV9S20968C12__8S20968C9__8S20968C1[7]),  7,10},
  {&(_tg__ZTV9S20968C149S20968C12__8S20968C9__8S20968C1[3]),  3,3},
  {&(_tg__ZTV9S20968C11__8S20968C1[7]),  7,11},
  {&(_tg__ZTV8S20968C7__9S20968C11__8S20968C1[3]),  3,4},
  {&(_tg__ZTV8S20968C2__9S20968C11__8S20968C1[9]),  9,13},
  {&(_tg__ZTV8S20968C3__9S20968C11__8S20968C1[5]),  5,5},
  {&(_tg__ZTV8S20968C4__9S20968C11__8S20968C1[6]),  6,8},
};
extern VTBL_ENTRY _ZTI8S20968C1[];
extern  VTBL_ENTRY _ZTV8S20968C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20968C1[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20968C9D0Ev,_ZTv0_n40_N8S20968C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S20968C9D0Ev,_ZThn2476_N8S20968C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20968C9D1Ev,_ZTv0_n40_N8S20968C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S20968C9D1Ev,_ZThn2476_N8S20968C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20968C10D0Ev,_ZTv0_n40_N9S20968C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S20968C10D0Ev,_ZThn2476_N9S20968C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20968C10D1Ev,_ZTv0_n40_N9S20968C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S20968C10D1Ev,_ZThn2476_N9S20968C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20968C1D0Ev,_ZTv0_n40_N8S20968C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6464_N8S20968C1D0Ev,_ZThn3536_N8S20968C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20968C1D1Ev,_ZTv0_n40_N8S20968C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6464_N8S20968C1D1Ev,_ZThn3536_N8S20968C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20968C1D0Ev,_ZTv0_n36_N8S20968C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1920_N8S20968C1D0Ev,_ZThn1060_N8S20968C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20968C1D1Ev,_ZTv0_n36_N8S20968C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1920_N8S20968C1D1Ev,_ZThn1060_N8S20968C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20968C1D0Ev,_ZTv0_n32_N8S20968C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S20968C1D0Ev,_ZThn276_N8S20968C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20968C1D1Ev,_ZTv0_n32_N8S20968C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S20968C1D1Ev,_ZThn276_N8S20968C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20968C1 = {  "S20968C1", // class name
  bases_S20968C1, 16,
  &(vtc_S20968C1[0]), // expected_vtbl_contents
  &(vtt_S20968C1[0]), // expected_vtt_contents
  ABISELECT(17392,9536), // object size
  NSPAIRA(_ZTI8S20968C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20968C1),89, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20968C1),50, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20969C5  {
  int s20969c5f0;
  void *s20969c5f1;
  ::S281C37_nt s20969c5f2;
  virtual void  v2(); // _ZN8S20969C52v2Ev
  ~S20969C5(); // tgen
  S20969C5(); // tgen
};
//SIG(-1 S20969C5) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S20969C5()
{
  extern Class_Descriptor cd_S20969C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20969C5, buf);
    S20969C5 *dp, &lv = *(dp=new (buf) S20969C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20969C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20969C5)");
    check_field_offset(lv, s20969c5f0, ABISELECT(8,4), "S20969C5.s20969c5f0");
    check_field_offset(lv, s20969c5f1, ABISELECT(16,8), "S20969C5.s20969c5f1");
    check_field_offset(lv, s20969c5f2, ABISELECT(24,12), "S20969C5.s20969c5f2");
    test_class_info(&lv, &cd_S20969C5);
    dp->~S20969C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20969C5(Test_S20969C5, "S20969C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20969C5C1Ev();
extern void _ZN8S20969C5D1Ev();
Name_Map name_map_S20969C5[] = {
  NSPAIR(_ZN8S20969C5C1Ev),
  NSPAIR(_ZN8S20969C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20969C5[];
extern void _ZN8S20969C52v2Ev();
static  VTBL_ENTRY vtc_S20969C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C5[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
};
extern VTBL_ENTRY _ZTI8S20969C5[];
extern  VTBL_ENTRY _ZTV8S20969C5[];
Class_Descriptor cd_S20969C5 = {  "S20969C5", // class name
  0,0,//no base classes
  &(vtc_S20969C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20969C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20969C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20969C7  {
  int s20969c7f0[6];
  char s20969c7f1:2;
  long double s20969c7f2;
  void *s20969c7f3[2];
  int s20969c7f4;
  long double s20969c7f5;
  ::S20176C3_nt s20969c7f6;
  ::S281C37_nt s20969c7f7;
  ::S281C37_nt s20969c7f8[9];
  void *s20969c7f9;
  ::S20969C5 s20969c7f10;
  ::S20969C5 s20969c7f11;
  virtual void  v3(); // _ZN8S20969C72v3Ev
  ~S20969C7(); // tgen
  S20969C7(); // tgen
};
//SIG(-1 S20969C7) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S20969C7()
{
  extern Class_Descriptor cd_S20969C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S20969C7, buf);
    S20969C7 *dp, &lv = *(dp=new (buf) S20969C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S20969C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20969C7)");
    check_field_offset(lv, s20969c7f0, ABISELECT(8,4), "S20969C7.s20969c7f0");
    set_bf_and_test(lv, s20969c7f1, ABISELECT(32,28), 0, 2, 1, "S20969C7");
    set_bf_and_test(lv, s20969c7f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S20969C7");
    check_field_offset(lv, s20969c7f2, ABISELECT(48,32), "S20969C7.s20969c7f2");
    check_field_offset(lv, s20969c7f3, ABISELECT(64,44), "S20969C7.s20969c7f3");
    check_field_offset(lv, s20969c7f4, ABISELECT(80,52), "S20969C7.s20969c7f4");
    check_field_offset(lv, s20969c7f5, ABISELECT(96,56), "S20969C7.s20969c7f5");
    check_field_offset(lv, s20969c7f6, ABISELECT(112,68), "S20969C7.s20969c7f6");
    check_field_offset(lv, s20969c7f7, ABISELECT(120,72), "S20969C7.s20969c7f7");
    check_field_offset(lv, s20969c7f8, ABISELECT(136,80), "S20969C7.s20969c7f8");
    check_field_offset(lv, s20969c7f9, ABISELECT(280,152), "S20969C7.s20969c7f9");
    check_field_offset(lv, s20969c7f10, ABISELECT(288,156), "S20969C7.s20969c7f10");
    check_field_offset(lv, s20969c7f11, ABISELECT(328,176), "S20969C7.s20969c7f11");
    test_class_info(&lv, &cd_S20969C7);
    dp->~S20969C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20969C7(Test_S20969C7, "S20969C7", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN8S20969C7C1Ev();
extern void _ZN8S20969C7D1Ev();
Name_Map name_map_S20969C7[] = {
  NSPAIR(_ZN8S20969C7C1Ev),
  NSPAIR(_ZN8S20969C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20969C7[];
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY vtc_S20969C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C7[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
Class_Descriptor cd_S20969C7 = {  "S20969C7", // class name
  0,0,//no base classes
  &(vtc_S20969C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI8S20969C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20969C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20969C4  : S20969C5 , virtual S20969C7 , virtual S281C37_nt {
  void *s20969c4f0;
  __tsi64 s20969c4f1;
  char s20969c4f2[2];
  ::S20969C7 s20969c4f3;
  short s20969c4f4[7];
  int s20969c4f5;
  char s20969c4f6;
  int s20969c4f7:20;
  virtual void  v4(); // _ZN8S20969C42v4Ev
  ~S20969C4(); // tgen
  S20969C4(); // tgen
};
//SIG(-1 S20969C4) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


void  S20969C4 ::v4(){vfunc_called(this, "_ZN8S20969C42v4Ev");}
S20969C4 ::~S20969C4(){ note_dtor("S20969C4", this);} // tgen
S20969C4 ::S20969C4(){ note_ctor("S20969C4", this);} // tgen

static void Test_S20969C4()
{
  extern Class_Descriptor cd_S20969C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S20969C4, buf);
    S20969C4 *dp, &lv = *(dp=new (buf) S20969C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S20969C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20969C4)");
    check_base_class_offset(lv, (S20969C5*), 0, "S20969C4");
    check_base_class_offset(lv, (S20969C7*), ABISELECT(464,256), "S20969C4");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S20969C4");
    check_field_offset(lv, s20969c4f0, ABISELECT(40,20), "S20969C4.s20969c4f0");
    check_field_offset(lv, s20969c4f1, ABISELECT(48,24), "S20969C4.s20969c4f1");
    check_field_offset(lv, s20969c4f2, ABISELECT(56,32), "S20969C4.s20969c4f2");
    check_field_offset(lv, s20969c4f3, ABISELECT(64,36), "S20969C4.s20969c4f3");
    check_field_offset(lv, s20969c4f4, ABISELECT(432,232), "S20969C4.s20969c4f4");
    check_field_offset(lv, s20969c4f5, ABISELECT(448,248), "S20969C4.s20969c4f5");
    check_field_offset(lv, s20969c4f6, ABISELECT(452,252), "S20969C4.s20969c4f6");
    set_bf_and_test(lv, s20969c4f7, ABISELECT(453,253), 0, 20, 1, "S20969C4");
    set_bf_and_test(lv, s20969c4f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S20969C4");
    test_class_info(&lv, &cd_S20969C4);
    dp->~S20969C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20969C4(Test_S20969C4, "S20969C4", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN8S20969C4C1Ev();
extern void _ZN8S20969C4D1Ev();
Name_Map name_map_S20969C4[] = {
  NSPAIR(_ZN8S20969C4C1Ev),
  NSPAIR(_ZN8S20969C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20969C5;
extern VTBL_ENTRY _ZTI8S20969C5[];
extern  VTBL_ENTRY _ZTV8S20969C5[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S20969C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20969C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20969C7,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20969C4[];
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY vtc_S20969C4[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S20969C4[];
static  VTT_ENTRY vtt_S20969C4[] = {
  {&(_ZTV8S20969C4[4]),  4,10},
  {&(_ZTV8S20969C4[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S20969C4[];
extern  VTBL_ENTRY _ZTV8S20969C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C4[];
Class_Descriptor cd_S20969C4 = {  "S20969C4", // class name
  bases_S20969C4, 3,
  &(vtc_S20969C4[0]), // expected_vtbl_contents
  &(vtt_S20969C4[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI8S20969C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20969C4),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20969C4),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  S20969C3  : virtual S20969C4 {
  int s20969c3f0;
  char s20969c3f1;
  void *s20969c3f2[6];
  int s20969c3f3[2];
  void *s20969c3f4;
  ::S281C37_nt s20969c3f5;
  ~S20969C3(); // tgen
  S20969C3(); // tgen
};
//SIG(-1 S20969C3) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S20969C3()
{
  extern Class_Descriptor cd_S20969C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S20969C3, buf);
    S20969C3 *dp, &lv = *(dp=new (buf) S20969C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S20969C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20969C3)");
    check_base_class_offset(lv, (S20969C5*)(S20969C4*), ABISELECT(96,56), "S20969C3");
    check_base_class_offset(lv, (S20969C7*)(S20969C4*), ABISELECT(560,312), "S20969C3");
    check_base_class_offset(lv, (S281C37_nt*)(S20969C4*), ABISELECT(928,508), "S20969C3");
    check_base_class_offset(lv, (S20969C4*), ABISELECT(96,56), "S20969C3");
    check_field_offset(lv, s20969c3f0, ABISELECT(8,4), "S20969C3.s20969c3f0");
    check_field_offset(lv, s20969c3f1, ABISELECT(12,8), "S20969C3.s20969c3f1");
    check_field_offset(lv, s20969c3f2, ABISELECT(16,12), "S20969C3.s20969c3f2");
    check_field_offset(lv, s20969c3f3, ABISELECT(64,36), "S20969C3.s20969c3f3");
    check_field_offset(lv, s20969c3f4, ABISELECT(72,44), "S20969C3.s20969c3f4");
    check_field_offset(lv, s20969c3f5, ABISELECT(80,48), "S20969C3.s20969c3f5");
    test_class_info(&lv, &cd_S20969C3);
    dp->~S20969C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20969C3(Test_S20969C3, "S20969C3", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN8S20969C3C1Ev();
extern void _ZN8S20969C3D1Ev();
Name_Map name_map_S20969C3[] = {
  NSPAIR(_ZN8S20969C3C1Ev),
  NSPAIR(_ZN8S20969C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20969C5;
extern VTBL_ENTRY _ZTI8S20969C5[];
extern  VTBL_ENTRY _ZTV8S20969C5[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C4;
extern VTBL_ENTRY _ZTI8S20969C4[];
extern  VTBL_ENTRY _ZTV8S20969C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C4[];
static Base_Class bases_S20969C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20969C5,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20969C7,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20969C4,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20969C3[];
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY vtc_S20969C3[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S20969C3[];
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C3[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C4__8S20969C3[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTT_ENTRY vtt_S20969C3[] = {
  {&(_ZTV8S20969C3[5]),  5,17},
  {&(_ZTV8S20969C3[11]),  11,17},
  {&(_ZTV8S20969C3[16]),  16,17},
  {&(_tg__ZTV8S20969C4__8S20969C3[4]),  4,6},
  {&(_tg__ZTV8S20969C7__8S20969C4__8S20969C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20969C3[];
extern  VTBL_ENTRY _ZTV8S20969C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C3[];
Class_Descriptor cd_S20969C3 = {  "S20969C3", // class name
  bases_S20969C3, 4,
  &(vtc_S20969C3[0]), // expected_vtbl_contents
  &(vtt_S20969C3[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI8S20969C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20969C3),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20969C3),5, //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  S20969C2  : virtual S20969C3 , S20969C7 , S281C37_nt {
  char s20969c2f0;
  int s20969c2f1[2];
  long double s20969c2f2[2];
  short s20969c2f3;
  void *s20969c2f4;
  int s20969c2f5;
  __tsi64 s20969c2f6;
  int s20969c2f7;
  void *s20969c2f8;
  virtual  ~S20969C2(); // _ZN8S20969C2D2Ev
  virtual void  v5(); // _ZN8S20969C22v5Ev
  S20969C2(); // tgen
};
//SIG(-1 S20969C2) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S20969C2 ::~S20969C2(){ note_dtor("S20969C2", this);}
void  S20969C2 ::v5(){vfunc_called(this, "_ZN8S20969C22v5Ev");}
S20969C2 ::S20969C2(){ note_ctor("S20969C2", this);} // tgen

static void Test_S20969C2()
{
  extern Class_Descriptor cd_S20969C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S20969C2, buf);
    S20969C2 *dp, &lv = *(dp=new (buf) S20969C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S20969C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20969C2)");
    check_base_class_offset(lv, (S20969C5*)(S20969C4*), ABISELECT(576,324), "S20969C2");
    check_base_class_offset(lv, (S20969C7*)(S20969C4*), ABISELECT(1040,580), "S20969C2");
    check_base_class_offset(lv, (S281C37_nt*)(S20969C4*), ABISELECT(1408,776), "S20969C2");
    check_base_class_offset(lv, (S20969C4*)(S20969C3*), ABISELECT(576,324), "S20969C2");
    check_base_class_offset(lv, (S20969C3*), ABISELECT(480,268), "S20969C2");
    /*is_ambiguous_... S20969C2::S20969C7 */ AMB_check_base_class_offset(lv, (S20969C7*), 0, "S20969C2");
    /*is_ambiguous_... S20969C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S20969C2");
    check_field_offset(lv, s20969c2f0, ABISELECT(384,204), "S20969C2.s20969c2f0");
    check_field_offset(lv, s20969c2f1, ABISELECT(388,208), "S20969C2.s20969c2f1");
    check_field_offset(lv, s20969c2f2, ABISELECT(400,216), "S20969C2.s20969c2f2");
    check_field_offset(lv, s20969c2f3, ABISELECT(432,240), "S20969C2.s20969c2f3");
    check_field_offset(lv, s20969c2f4, ABISELECT(440,244), "S20969C2.s20969c2f4");
    check_field_offset(lv, s20969c2f5, ABISELECT(448,248), "S20969C2.s20969c2f5");
    check_field_offset(lv, s20969c2f6, ABISELECT(456,252), "S20969C2.s20969c2f6");
    check_field_offset(lv, s20969c2f7, ABISELECT(464,260), "S20969C2.s20969c2f7");
    check_field_offset(lv, s20969c2f8, ABISELECT(472,264), "S20969C2.s20969c2f8");
    test_class_info(&lv, &cd_S20969C2);
    dp->~S20969C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20969C2(Test_S20969C2, "S20969C2", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN8S20969C2C1Ev();
extern void _ZN8S20969C2D2Ev();
Name_Map name_map_S20969C2[] = {
  NSPAIR(_ZN8S20969C2C1Ev),
  NSPAIR(_ZN8S20969C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20969C5;
extern VTBL_ENTRY _ZTI8S20969C5[];
extern  VTBL_ENTRY _ZTV8S20969C5[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C4;
extern VTBL_ENTRY _ZTI8S20969C4[];
extern  VTBL_ENTRY _ZTV8S20969C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C4[];
extern Class_Descriptor cd_S20969C3;
extern VTBL_ENTRY _ZTI8S20969C3[];
extern  VTBL_ENTRY _ZTV8S20969C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C3[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S20969C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20969C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20969C7,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C4,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20969C3,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20969C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20969C2[];
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C2D1Ev();
extern void _ZN8S20969C2D0Ev();
extern void _ZN8S20969C22v5Ev();
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY vtc_S20969C2[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S20969C2[];
static  VTBL_ENTRY _tg__ZTV8S20969C3__8S20969C2[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C3__8S20969C2[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C3__8S20969C2[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C2[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C4__8S20969C2[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTT_ENTRY vtt_S20969C2[] = {
  {&(_ZTV8S20969C2[6]),  6,27},
  {&(_ZTV8S20969C2[15]),  15,27},
  {&(_ZTV8S20969C2[21]),  21,27},
  {&(_ZTV8S20969C2[26]),  26,27},
  {&(_tg__ZTV8S20969C3__8S20969C2[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C3__8S20969C2[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C3__8S20969C2[3]),  3,4},
  {&(_tg__ZTV8S20969C4__8S20969C2[4]),  4,6},
  {&(_tg__ZTV8S20969C7__8S20969C4__8S20969C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20969C2[];
extern  VTBL_ENTRY _ZTV8S20969C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C2[];
Class_Descriptor cd_S20969C2 = {  "S20969C2", // class name
  bases_S20969C2, 7,
  &(vtc_S20969C2[0]), // expected_vtbl_contents
  &(vtt_S20969C2[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI8S20969C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20969C2),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20969C2),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20969C11  : virtual S20969C7 , virtual S20969C2 {
  ::S20969C2 s20969c11f0[7];
  int s20969c11f1;
  short s20969c11f2;
  int s20969c11f3;
  ::S20969C4 s20969c11f4;
  __tsi64 s20969c11f5[9];
  virtual void  v6(); // _ZN9S20969C112v6Ev
  virtual void  v7(); // _ZN9S20969C112v7Ev
  ~S20969C11(); // tgen
  S20969C11(); // tgen
};
//SIG(-1 S20969C11) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 FL[9]}


void  S20969C11 ::v6(){vfunc_called(this, "_ZN9S20969C112v6Ev");}
void  S20969C11 ::v7(){vfunc_called(this, "_ZN9S20969C112v7Ev");}
S20969C11 ::~S20969C11(){ note_dtor("S20969C11", this);} // tgen
S20969C11 ::S20969C11(){ note_ctor("S20969C11", this);} // tgen

static void Test_S20969C11()
{
  extern Class_Descriptor cd_S20969C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1706)];
    init_test(&cd_S20969C11, buf);
    S20969C11 *dp, &lv = *(dp=new (buf) S20969C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6820), "sizeof(S20969C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20969C11)");
    /*is_ambiguous_... S20969C11::S20969C7 */ AMB_check_base_class_offset(lv, (S20969C7*), ABISELECT(10928,6036), "S20969C11");
    check_base_class_offset(lv, (S20969C7*)(S20969C4*), ABISELECT(10928,6036), "S20969C11");
    check_base_class_offset(lv, (S20969C5*)(S20969C4*), ABISELECT(11872,6556), "S20969C11");
    check_base_class_offset(lv, (S281C37_nt*)(S20969C4*), ABISELECT(12328,6812), "S20969C11");
    check_base_class_offset(lv, (S20969C4*)(S20969C3*), ABISELECT(11872,6556), "S20969C11");
    check_base_class_offset(lv, (S20969C3*)(S20969C2*), ABISELECT(11776,6500), "S20969C11");
    /*is_ambiguous_... S20969C2::S20969C7 */ AMB_check_base_class_offset(lv, (S20969C7*)(S20969C2*), ABISELECT(11296,6232), "S20969C11");
    /*is_ambiguous_... S20969C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20969C2*), ABISELECT(11664,6428), "S20969C11");
    check_base_class_offset(lv, (S20969C2*), ABISELECT(11296,6232), "S20969C11");
    check_field_offset(lv, s20969c11f0, ABISELECT(16,4), "S20969C11.s20969c11f0");
    check_field_offset(lv, s20969c11f1, ABISELECT(9984,5492), "S20969C11.s20969c11f1");
    check_field_offset(lv, s20969c11f2, ABISELECT(9988,5496), "S20969C11.s20969c11f2");
    check_field_offset(lv, s20969c11f3, ABISELECT(9992,5500), "S20969C11.s20969c11f3");
    check_field_offset(lv, s20969c11f4, ABISELECT(10000,5504), "S20969C11.s20969c11f4");
    check_field_offset(lv, s20969c11f5, ABISELECT(10848,5964), "S20969C11.s20969c11f5");
    test_class_info(&lv, &cd_S20969C11);
    dp->~S20969C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20969C11(Test_S20969C11, "S20969C11", ABISELECT(12352,6820));

#else // __cplusplus

extern void _ZN9S20969C11C1Ev();
extern void _ZN9S20969C11D1Ev();
Name_Map name_map_S20969C11[] = {
  NSPAIR(_ZN9S20969C11C1Ev),
  NSPAIR(_ZN9S20969C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S20969C5;
extern VTBL_ENTRY _ZTI8S20969C5[];
extern  VTBL_ENTRY _ZTV8S20969C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C4;
extern VTBL_ENTRY _ZTI8S20969C4[];
extern  VTBL_ENTRY _ZTV8S20969C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C4[];
extern Class_Descriptor cd_S20969C3;
extern VTBL_ENTRY _ZTI8S20969C3[];
extern  VTBL_ENTRY _ZTV8S20969C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C3[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C2;
extern VTBL_ENTRY _ZTI8S20969C2[];
extern  VTBL_ENTRY _ZTV8S20969C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C2[];
static Base_Class bases_S20969C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20969C7,    ABISELECT(10928,6036), //bcp->offset
    11, //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_S20969C5,    ABISELECT(11872,6556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C4,    ABISELECT(11872,6556), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20969C3,    ABISELECT(11776,6500), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20969C7,    ABISELECT(11296,6232), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C2,    ABISELECT(11296,6232), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20969C11[];
extern void _ZN9S20969C112v6Ev();
extern void _ZN9S20969C112v7Ev();
extern void _ZN9S20969C11D1Ev();
extern void _ZN9S20969C11D0Ev();
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C11D1Ev,_ZTv0_n32_N9S20969C11D1Ev)();
extern void ABISELECT(_ZThn11296_N9S20969C11D1Ev,_ZThn6232_N9S20969C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20969C11D0Ev,_ZTv0_n32_N9S20969C11D0Ev)();
extern void ABISELECT(_ZThn11296_N9S20969C11D0Ev,_ZThn6232_N9S20969C11D0Ev)() __attribute__((weak));
extern void _ZN8S20969C22v5Ev();
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY vtc_S20969C11[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN9S20969C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20969C112v7Ev,
  (VTBL_ENTRY)&_ZN9S20969C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C11D0Ev,
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C11D1Ev,_ZTv0_n32_N9S20969C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C11D0Ev,_ZTv0_n32_N9S20969C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern VTBL_ENTRY _ZTV9S20969C11[];
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C2D1Ev();
extern void _ZN8S20969C2D0Ev();
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C11[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__8S20969C2__9S20969C11[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C2__9S20969C11[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C2__9S20969C11[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C11[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C3__9S20969C11[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C3__9S20969C11[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C11[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C4__9S20969C11[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTT_ENTRY vtt_S20969C11[] = {
  {&(_ZTV9S20969C11[7]),  7,41},
  {&(_ZTV9S20969C11[14]),  14,41},
  {&(_ZTV9S20969C11[24]),  24,41},
  {&(_ZTV9S20969C11[33]),  33,41},
  {&(_ZTV9S20969C11[39]),  39,41},
  {&(_tg__ZTV8S20969C2__9S20969C11[6]),  6,10},
  {&(_tg__ZTV8S20969C3__8S20969C2__9S20969C11[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C2__9S20969C11[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C2__9S20969C11[3]),  3,4},
  {&(_tg__ZTV8S20969C3__9S20969C11[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C3__9S20969C11[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C3__9S20969C11[3]),  3,4},
  {&(_tg__ZTV8S20969C4__9S20969C11[4]),  4,6},
  {&(_tg__ZTV8S20969C7__8S20969C4__9S20969C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20969C11[];
extern  VTBL_ENTRY _ZTV9S20969C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C11[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C11D0Ev,_ZTv0_n32_N9S20969C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20969C11D0Ev,_ZThn6232_N9S20969C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C11D1Ev,_ZTv0_n32_N9S20969C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20969C11D1Ev,_ZThn6232_N9S20969C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20969C11 = {  "S20969C11", // class name
  bases_S20969C11, 8,
  &(vtc_S20969C11[0]), // expected_vtbl_contents
  &(vtt_S20969C11[0]), // expected_vtt_contents
  ABISELECT(12352,6820), // object size
  NSPAIRA(_ZTI9S20969C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20969C11),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20969C11),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20969C10  : virtual S20969C11 {
  char s20969c10f0;
  int s20969c10f1[3];
  virtual  ~S20969C10(); // _ZN9S20969C10D2Ev
  S20969C10(); // tgen
};
//SIG(-1 S20969C10) C1{ VBC2{ VBC3{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v2 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v3 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v5 v6 FC7[7] Fi Fs Fi FC9 FL[9]} vd Fc Fi[3]}


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

static void Test_S20969C10()
{
  extern Class_Descriptor cd_S20969C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(775,1711)];
    init_test(&cd_S20969C10, buf);
    S20969C10 *dp, &lv = *(dp=new (buf) S20969C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12384,6840), "sizeof(S20969C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20969C10)");
    /*is_ambiguous_... S20969C11::S20969C7 */ AMB_check_base_class_offset(lv, (S20969C7*)(S20969C11*), ABISELECT(10960,6056), "S20969C10");
    check_base_class_offset(lv, (S20969C7*)(S20969C4*), ABISELECT(10960,6056), "S20969C10");
    check_base_class_offset(lv, (S20969C5*)(S20969C4*), ABISELECT(11904,6576), "S20969C10");
    check_base_class_offset(lv, (S281C37_nt*)(S20969C4*), ABISELECT(12360,6832), "S20969C10");
    check_base_class_offset(lv, (S20969C4*)(S20969C3*), ABISELECT(11904,6576), "S20969C10");
    check_base_class_offset(lv, (S20969C3*)(S20969C2*), ABISELECT(11808,6520), "S20969C10");
    /*is_ambiguous_... S20969C2::S20969C7 */ AMB_check_base_class_offset(lv, (S20969C7*)(S20969C2*), ABISELECT(11328,6252), "S20969C10");
    /*is_ambiguous_... S20969C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20969C2*), ABISELECT(11696,6448), "S20969C10");
    check_base_class_offset(lv, (S20969C2*)(S20969C11*), ABISELECT(11328,6252), "S20969C10");
    check_base_class_offset(lv, (S20969C11*), ABISELECT(32,20), "S20969C10");
    check_field_offset(lv, s20969c10f0, ABISELECT(8,4), "S20969C10.s20969c10f0");
    check_field_offset(lv, s20969c10f1, ABISELECT(12,8), "S20969C10.s20969c10f1");
    test_class_info(&lv, &cd_S20969C10);
    dp->~S20969C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20969C10(Test_S20969C10, "S20969C10", ABISELECT(12384,6840));

#else // __cplusplus

extern void _ZN9S20969C10C1Ev();
extern void _ZN9S20969C10D2Ev();
Name_Map name_map_S20969C10[] = {
  NSPAIR(_ZN9S20969C10C1Ev),
  NSPAIR(_ZN9S20969C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S20969C5;
extern VTBL_ENTRY _ZTI8S20969C5[];
extern  VTBL_ENTRY _ZTV8S20969C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C4;
extern VTBL_ENTRY _ZTI8S20969C4[];
extern  VTBL_ENTRY _ZTV8S20969C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C4[];
extern Class_Descriptor cd_S20969C3;
extern VTBL_ENTRY _ZTI8S20969C3[];
extern  VTBL_ENTRY _ZTV8S20969C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C3[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C2;
extern VTBL_ENTRY _ZTI8S20969C2[];
extern  VTBL_ENTRY _ZTV8S20969C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C2[];
extern Class_Descriptor cd_S20969C11;
extern VTBL_ENTRY _ZTI9S20969C11[];
extern  VTBL_ENTRY _ZTV9S20969C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C11[];
static Base_Class bases_S20969C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20969C7,    ABISELECT(10960,6056), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S20969C5,    ABISELECT(11904,6576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12360,6832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C4,    ABISELECT(11904,6576), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20969C3,    ABISELECT(11808,6520), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20969C7,    ABISELECT(11328,6252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11696,6448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C2,    ABISELECT(11328,6252), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20969C11,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20969C10[];
extern void _ZN9S20969C10D1Ev();
extern void _ZN9S20969C10D0Ev();
extern void _ZN9S20969C112v6Ev();
extern void _ZN9S20969C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N9S20969C10D1Ev,_ZTv0_n40_N9S20969C10D1Ev)();
extern void ABISELECT(_ZThn32_N9S20969C10D1Ev,_ZThn20_N9S20969C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20969C10D0Ev,_ZTv0_n40_N9S20969C10D0Ev)();
extern void ABISELECT(_ZThn32_N9S20969C10D0Ev,_ZThn20_N9S20969C10D0Ev)() __attribute__((weak));
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C10D1Ev,_ZTv0_n32_N9S20969C10D1Ev)();
extern void ABISELECT(_ZThn11328_N9S20969C10D1Ev,_ZThn6252_N9S20969C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20969C10D0Ev,_ZTv0_n32_N9S20969C10D0Ev)();
extern void ABISELECT(_ZThn11328_N9S20969C10D0Ev,_ZThn6252_N9S20969C10D0Ev)() __attribute__((weak));
extern void _ZN8S20969C22v5Ev();
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY vtc_S20969C10[] = {
  ABISELECT(12360,6832),
  ABISELECT(11904,6576),
  ABISELECT(11808,6520),
  ABISELECT(11328,6252),
  ABISELECT(10960,6056),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN9S20969C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C10D0Ev,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN9S20969C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20969C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20969C10D1Ev,_ZTv0_n40_N9S20969C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20969C10D0Ev,_ZTv0_n40_N9S20969C10D0Ev),
  0,
  ABISELECT(-10960,-6056),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  0,
  ABISELECT(-11328,-6252),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11328,-6252),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C10D1Ev,_ZTv0_n32_N9S20969C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C10D0Ev,_ZTv0_n32_N9S20969C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11808,-6520),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11904,-6576),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern VTBL_ENTRY _ZTV9S20969C10[];
extern void _ZN9S20969C112v6Ev();
extern void _ZN9S20969C112v7Ev();
extern void _ZN9S20969C11D1Ev();
extern void _ZN9S20969C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20969C11__9S20969C10[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN9S20969C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20969C112v7Ev,
  (VTBL_ENTRY)&_ZN9S20969C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C11D0Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C11__9S20969C10[] = {
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C11D1Ev,_ZTv0_n32_N9S20969C11D1Ev)();
extern void ABISELECT(_ZThn11296_N9S20969C11D1Ev,_ZThn6232_N9S20969C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20969C11D0Ev,_ZTv0_n32_N9S20969C11D0Ev)();
extern void ABISELECT(_ZThn11296_N9S20969C11D0Ev,_ZThn6232_N9S20969C11D0Ev)() __attribute__((weak));
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C11__9S20969C10[] = {
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C11D1Ev,_ZTv0_n32_N9S20969C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C11D0Ev,_ZTv0_n32_N9S20969C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C11__9S20969C10[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C11__9S20969C10[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C2D1Ev();
extern void _ZN8S20969C2D0Ev();
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C10[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__8S20969C2__9S20969C10[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C2__9S20969C10[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C2__9S20969C10[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C10[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C3__9S20969C10[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C3__9S20969C10[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C10[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C4__9S20969C10[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTT_ENTRY vtt_S20969C10[] = {
  {&(_ZTV9S20969C10[8]),  8,54},
  {&(_ZTV9S20969C10[20]),  20,54},
  {&(_ZTV9S20969C10[27]),  27,54},
  {&(_ZTV9S20969C10[37]),  37,54},
  {&(_ZTV9S20969C10[46]),  46,54},
  {&(_ZTV9S20969C10[52]),  52,54},
  {&(_tg__ZTV9S20969C11__9S20969C10[7]),  7,11},
  {&(_tg__ZTV8S20969C7__9S20969C11__9S20969C10[3]),  3,4},
  {&(_tg__ZTV8S20969C2__9S20969C11__9S20969C10[9]),  9,13},
  {&(_tg__ZTV8S20969C3__9S20969C11__9S20969C10[5]),  5,5},
  {&(_tg__ZTV8S20969C4__9S20969C11__9S20969C10[6]),  6,8},
  {&(_tg__ZTV8S20969C2__9S20969C10[6]),  6,10},
  {&(_tg__ZTV8S20969C3__8S20969C2__9S20969C10[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C2__9S20969C10[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C2__9S20969C10[3]),  3,4},
  {&(_tg__ZTV8S20969C3__9S20969C10[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C3__9S20969C10[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C3__9S20969C10[3]),  3,4},
  {&(_tg__ZTV8S20969C4__9S20969C10[4]),  4,6},
  {&(_tg__ZTV8S20969C7__8S20969C4__9S20969C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20969C10[];
extern  VTBL_ENTRY _ZTV9S20969C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C10[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C11D0Ev,_ZTv0_n32_N9S20969C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20969C11D0Ev,_ZThn6232_N9S20969C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C11D1Ev,_ZTv0_n32_N9S20969C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20969C11D1Ev,_ZThn6232_N9S20969C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C10D0Ev,_ZTv0_n32_N9S20969C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N9S20969C10D0Ev,_ZThn6252_N9S20969C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C10D1Ev,_ZTv0_n32_N9S20969C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N9S20969C10D1Ev,_ZThn6252_N9S20969C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20969C10D0Ev,_ZTv0_n40_N9S20969C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20969C10D0Ev,_ZThn20_N9S20969C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20969C10D1Ev,_ZTv0_n40_N9S20969C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20969C10D1Ev,_ZThn20_N9S20969C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20969C10 = {  "S20969C10", // class name
  bases_S20969C10, 9,
  &(vtc_S20969C10[0]), // expected_vtbl_contents
  &(vtt_S20969C10[0]), // expected_vtt_contents
  ABISELECT(12384,6840), // object size
  NSPAIRA(_ZTI9S20969C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20969C10),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20969C10),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20969C13  : virtual S20969C3 , virtual S20969C2 {
  long s20969c13f0;
  void *s20969c13f1;
  ::S20969C4 s20969c13f2;
  void *s20969c13f3;
  short s20969c13f4;
  __tsi64 s20969c13f5;
  int s20969c13f6;
  __tsi64 s20969c13f7;
  ::S20969C4 s20969c13f8[4];
  int s20969c13f9;
  virtual  ~S20969C13(); // _ZN9S20969C13D2Ev
  S20969C13(); // tgen
};
//SIG(-1 S20969C13) C1{ VBC2{ VBC3{ BC4{ v1 Fi Fp FC5{ m Fp[2]}} VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} VBC8{ VBC2 BC6 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC3 Fp Fs FL Fi FL FC3[4] Fi}


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

static void Test_S20969C13()
{
  extern Class_Descriptor cd_S20969C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(361,783)];
    init_test(&cd_S20969C13, buf);
    S20969C13 *dp, &lv = *(dp=new (buf) S20969C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5760,3128), "sizeof(S20969C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20969C13)");
    check_base_class_offset(lv, (S20969C5*)(S20969C4*), ABISELECT(4432,2400), "S20969C13");
    check_base_class_offset(lv, (S20969C7*)(S20969C4*), ABISELECT(4896,2656), "S20969C13");
    check_base_class_offset(lv, (S281C37_nt*)(S20969C4*), ABISELECT(5264,2852), "S20969C13");
    check_base_class_offset(lv, (S20969C4*)(S20969C3*), ABISELECT(4432,2400), "S20969C13");
    check_base_class_offset(lv, (S20969C3*), ABISELECT(4328,2344), "S20969C13");
    check_base_class_offset(lv, (S20969C3*)(S20969C2*), ABISELECT(4328,2344), "S20969C13");
    /*is_ambiguous_... S20969C2::S20969C7 */ AMB_check_base_class_offset(lv, (S20969C7*)(S20969C2*), ABISELECT(5280,2860), "S20969C13");
    /*is_ambiguous_... S20969C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20969C2*), ABISELECT(5648,3056), "S20969C13");
    check_base_class_offset(lv, (S20969C2*), ABISELECT(5280,2860), "S20969C13");
    check_field_offset(lv, s20969c13f0, ABISELECT(8,4), "S20969C13.s20969c13f0");
    check_field_offset(lv, s20969c13f1, ABISELECT(16,8), "S20969C13.s20969c13f1");
    check_field_offset(lv, s20969c13f2, ABISELECT(32,12), "S20969C13.s20969c13f2");
    check_field_offset(lv, s20969c13f3, ABISELECT(880,472), "S20969C13.s20969c13f3");
    check_field_offset(lv, s20969c13f4, ABISELECT(888,476), "S20969C13.s20969c13f4");
    check_field_offset(lv, s20969c13f5, ABISELECT(896,480), "S20969C13.s20969c13f5");
    check_field_offset(lv, s20969c13f6, ABISELECT(904,488), "S20969C13.s20969c13f6");
    check_field_offset(lv, s20969c13f7, ABISELECT(912,492), "S20969C13.s20969c13f7");
    check_field_offset(lv, s20969c13f8, ABISELECT(928,500), "S20969C13.s20969c13f8");
    check_field_offset(lv, s20969c13f9, ABISELECT(4320,2340), "S20969C13.s20969c13f9");
    test_class_info(&lv, &cd_S20969C13);
    dp->~S20969C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20969C13(Test_S20969C13, "S20969C13", ABISELECT(5760,3128));

#else // __cplusplus

extern void _ZN9S20969C13C1Ev();
extern void _ZN9S20969C13D2Ev();
Name_Map name_map_S20969C13[] = {
  NSPAIR(_ZN9S20969C13C1Ev),
  NSPAIR(_ZN9S20969C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20969C5;
extern VTBL_ENTRY _ZTI8S20969C5[];
extern  VTBL_ENTRY _ZTV8S20969C5[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C4;
extern VTBL_ENTRY _ZTI8S20969C4[];
extern  VTBL_ENTRY _ZTV8S20969C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C4[];
extern Class_Descriptor cd_S20969C3;
extern VTBL_ENTRY _ZTI8S20969C3[];
extern  VTBL_ENTRY _ZTV8S20969C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C3[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C2;
extern VTBL_ENTRY _ZTI8S20969C2[];
extern  VTBL_ENTRY _ZTV8S20969C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C2[];
static Base_Class bases_S20969C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20969C5,    ABISELECT(4432,2400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C7,    ABISELECT(4896,2656), //bcp->offset
    22, //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_S281C37_nt,    ABISELECT(5264,2852), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C4,    ABISELECT(4432,2400), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20969C3,    ABISELECT(4328,2344), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20969C7,    ABISELECT(5280,2860), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5648,3056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C2,    ABISELECT(5280,2860), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20969C13[];
extern void _ZN9S20969C13D1Ev();
extern void _ZN9S20969C13D0Ev();
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C13D1Ev,_ZTv0_n32_N9S20969C13D1Ev)();
extern void ABISELECT(_ZThn5280_N9S20969C13D1Ev,_ZThn2860_N9S20969C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20969C13D0Ev,_ZTv0_n32_N9S20969C13D0Ev)();
extern void ABISELECT(_ZThn5280_N9S20969C13D0Ev,_ZThn2860_N9S20969C13D0Ev)() __attribute__((weak));
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY vtc_S20969C13[] = {
  ABISELECT(5280,2860),
  ABISELECT(5264,2852),
  ABISELECT(4896,2656),
  ABISELECT(4432,2400),
  ABISELECT(4328,2344),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN9S20969C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C13D0Ev,
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4432,-2400),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
  0,
  ABISELECT(-4896,-2656),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  0,
  ABISELECT(-5280,-2860),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  ABISELECT(-5280,-2860),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C13D1Ev,_ZTv0_n32_N9S20969C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C13D0Ev,_ZTv0_n32_N9S20969C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
extern VTBL_ENTRY _ZTV9S20969C13[];
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C13[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C3__9S20969C13[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C3__9S20969C13[] = {
  0,
  ABISELECT(-568,-312),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C13[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C4__9S20969C13[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C2D1Ev();
extern void _ZN8S20969C2D0Ev();
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C13[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-952,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__8S20969C2__9S20969C13[] = {
  ABISELECT(936,508),
  ABISELECT(568,312),
  ABISELECT(104,56),
  ABISELECT(952,516),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C2__9S20969C13[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C2__9S20969C13[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTT_ENTRY vtt_S20969C13[] = {
  {&(_ZTV9S20969C13[7]),  7,39},
  {&(_ZTV9S20969C13[14]),  14,39},
  {&(_ZTV9S20969C13[20]),  20,39},
  {&(_ZTV9S20969C13[25]),  25,39},
  {&(_ZTV9S20969C13[35]),  35,39},
  {&(_tg__ZTV8S20969C3__9S20969C13[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C3__9S20969C13[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C3__9S20969C13[3]),  3,4},
  {&(_tg__ZTV8S20969C4__9S20969C13[4]),  4,6},
  {&(_tg__ZTV8S20969C7__8S20969C4__9S20969C13[3]),  3,4},
  {&(_tg__ZTV8S20969C2__9S20969C13[6]),  6,10},
  {&(_tg__ZTV8S20969C3__8S20969C2__9S20969C13[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C2__9S20969C13[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C2__9S20969C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20969C13[];
extern  VTBL_ENTRY _ZTV9S20969C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C13[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C13D0Ev,_ZTv0_n32_N9S20969C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N9S20969C13D0Ev,_ZThn2860_N9S20969C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C13D1Ev,_ZTv0_n32_N9S20969C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5280_N9S20969C13D1Ev,_ZThn2860_N9S20969C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20969C13 = {  "S20969C13", // class name
  bases_S20969C13, 8,
  &(vtc_S20969C13[0]), // expected_vtbl_contents
  &(vtt_S20969C13[0]), // expected_vtt_contents
  ABISELECT(5760,3128), // object size
  NSPAIRA(_ZTI9S20969C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20969C13),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20969C13),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20969C14  : virtual S20969C7 {
  void *s20969c14f0;
  short s20969c14f1;
  __tsi64 s20969c14f2;
  int s20969c14f3:6;
  void *s20969c14f4[2];
  ~S20969C14(); // tgen
  S20969C14(); // tgen
};
//SIG(-1 S20969C14) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} Fp Fs FL Fi:6 Fp[2]}


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

static void Test_S20969C14()
{
  extern Class_Descriptor cd_S20969C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,58)];
    init_test(&cd_S20969C14, buf);
    S20969C14 *dp, &lv = *(dp=new (buf) S20969C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,228), "sizeof(S20969C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20969C14)");
    check_base_class_offset(lv, (S20969C7*), ABISELECT(64,32), "S20969C14");
    check_field_offset(lv, s20969c14f0, ABISELECT(8,4), "S20969C14.s20969c14f0");
    check_field_offset(lv, s20969c14f1, ABISELECT(16,8), "S20969C14.s20969c14f1");
    check_field_offset(lv, s20969c14f2, ABISELECT(24,12), "S20969C14.s20969c14f2");
    set_bf_and_test(lv, s20969c14f3, ABISELECT(32,20), 0, 6, 1, "S20969C14");
    set_bf_and_test(lv, s20969c14f3, ABISELECT(32,20), 0, 6, hide_sll(1LL<<5), "S20969C14");
    check_field_offset(lv, s20969c14f4, ABISELECT(40,24), "S20969C14.s20969c14f4");
    test_class_info(&lv, &cd_S20969C14);
    dp->~S20969C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20969C14(Test_S20969C14, "S20969C14", ABISELECT(432,228));

#else // __cplusplus

extern void _ZN9S20969C14C1Ev();
extern void _ZN9S20969C14D1Ev();
Name_Map name_map_S20969C14[] = {
  NSPAIR(_ZN9S20969C14C1Ev),
  NSPAIR(_ZN9S20969C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
static Base_Class bases_S20969C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20969C7,    ABISELECT(64,32), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20969C14[];
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY vtc_S20969C14[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C14[0]),
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20969C14[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern VTBL_ENTRY _ZTV9S20969C14[];
static  VTT_ENTRY vtt_S20969C14[] = {
  {&(_ZTV9S20969C14[3]),  3,7},
  {&(_ZTV9S20969C14[6]),  6,7},
};
extern VTBL_ENTRY _ZTI9S20969C14[];
extern  VTBL_ENTRY _ZTV9S20969C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C14[];
Class_Descriptor cd_S20969C14 = {  "S20969C14", // class name
  bases_S20969C14, 1,
  &(vtc_S20969C14[0]), // expected_vtbl_contents
  &(vtt_S20969C14[0]), // expected_vtt_contents
  ABISELECT(432,228), // object size
  NSPAIRA(_ZTI9S20969C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20969C14),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20969C14),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  S20969C12  : S20969C13 , S20969C14 {
  __tsi64 s20969c12f0;
  long double s20969c12f1;
  ::S20176C3_nt s20969c12f2;
  int s20969c12f3[9];
  short s20969c12f4;
  char s20969c12f5:5;
  virtual  ~S20969C12(); // _ZN9S20969C12D2Ev
  virtual void  v8(); // _ZN9S20969C122v8Ev
  S20969C12(); // tgen
};
//SIG(-1 S20969C12) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 Fi Fp FC6{ m Fp[2]}} VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} VBC9{ VBC3 BC7 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC4 Fp Fs FL Fi FL FC4[4] Fi} BC10{ VBC7 Fp Fs FL Fi:6 Fp[2]} vd v1 FL FD FC8 Fi[9] Fs Fc:5}


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

static void Test_S20969C12()
{
  extern Class_Descriptor cd_S20969C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(369,807)];
    init_test(&cd_S20969C12, buf);
    S20969C12 *dp, &lv = *(dp=new (buf) S20969C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5888,3224), "sizeof(S20969C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20969C12)");
    check_base_class_offset(lv, (S20969C5*)(S20969C4*), ABISELECT(4560,2496), "S20969C12");
    check_base_class_offset(lv, (S20969C7*)(S20969C4*), ABISELECT(5024,2752), "S20969C12");
    check_base_class_offset(lv, (S20969C7*)(S20969C14*), ABISELECT(5024,2752), "S20969C12");
    check_base_class_offset(lv, (S281C37_nt*)(S20969C4*), ABISELECT(5392,2948), "S20969C12");
    check_base_class_offset(lv, (S20969C4*)(S20969C3*), ABISELECT(4560,2496), "S20969C12");
    check_base_class_offset(lv, (S20969C3*)(S20969C13*), ABISELECT(4464,2440), "S20969C12");
    check_base_class_offset(lv, (S20969C3*)(S20969C2*), ABISELECT(4464,2440), "S20969C12");
    /*is_ambiguous_... S20969C2::S20969C7 */ AMB_check_base_class_offset(lv, (S20969C7*)(S20969C2*), ABISELECT(5408,2956), "S20969C12");
    /*is_ambiguous_... S20969C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20969C2*), ABISELECT(5776,3152), "S20969C12");
    check_base_class_offset(lv, (S20969C2*)(S20969C13*), ABISELECT(5408,2956), "S20969C12");
    check_base_class_offset(lv, (S20969C13*), 0, "S20969C12");
    check_base_class_offset(lv, (S20969C14*), ABISELECT(4328,2344), "S20969C12");
    check_field_offset(lv, s20969c12f0, ABISELECT(4384,2376), "S20969C12.s20969c12f0");
    check_field_offset(lv, s20969c12f1, ABISELECT(4400,2384), "S20969C12.s20969c12f1");
    check_field_offset(lv, s20969c12f2, ABISELECT(4416,2396), "S20969C12.s20969c12f2");
    check_field_offset(lv, s20969c12f3, ABISELECT(4420,2400), "S20969C12.s20969c12f3");
    check_field_offset(lv, s20969c12f4, ABISELECT(4456,2436), "S20969C12.s20969c12f4");
    set_bf_and_test(lv, s20969c12f5, ABISELECT(4458,2438), 0, 5, 1, "S20969C12");
    set_bf_and_test(lv, s20969c12f5, ABISELECT(4458,2438), 0, 5, hide_sll(1LL<<4), "S20969C12");
    test_class_info(&lv, &cd_S20969C12);
    dp->~S20969C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20969C12(Test_S20969C12, "S20969C12", ABISELECT(5888,3224));

#else // __cplusplus

extern void _ZN9S20969C12C1Ev();
extern void _ZN9S20969C12D2Ev();
Name_Map name_map_S20969C12[] = {
  NSPAIR(_ZN9S20969C12C1Ev),
  NSPAIR(_ZN9S20969C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20969C5;
extern VTBL_ENTRY _ZTI8S20969C5[];
extern  VTBL_ENTRY _ZTV8S20969C5[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C4;
extern VTBL_ENTRY _ZTI8S20969C4[];
extern  VTBL_ENTRY _ZTV8S20969C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C4[];
extern Class_Descriptor cd_S20969C3;
extern VTBL_ENTRY _ZTI8S20969C3[];
extern  VTBL_ENTRY _ZTV8S20969C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C3[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C2;
extern VTBL_ENTRY _ZTI8S20969C2[];
extern  VTBL_ENTRY _ZTV8S20969C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C2[];
extern Class_Descriptor cd_S20969C13;
extern VTBL_ENTRY _ZTI9S20969C13[];
extern  VTBL_ENTRY _ZTV9S20969C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C13[];
extern Class_Descriptor cd_S20969C14;
extern VTBL_ENTRY _ZTI9S20969C14[];
extern  VTBL_ENTRY _ZTV9S20969C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C14[];
static Base_Class bases_S20969C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20969C5,    ABISELECT(4560,2496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C7,    ABISELECT(5024,2752), //bcp->offset
    26, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(5392,2948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C4,    ABISELECT(4560,2496), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20969C3,    ABISELECT(4464,2440), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20969C7,    ABISELECT(5408,2956), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5776,3152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C2,    ABISELECT(5408,2956), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20969C13,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20969C14,    ABISELECT(4328,2344), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20969C12[];
extern void _ZN9S20969C12D1Ev();
extern void _ZN9S20969C12D0Ev();
extern void _ZN9S20969C122v8Ev();
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C12D1Ev,_ZTv0_n32_N9S20969C12D1Ev)();
extern void ABISELECT(_ZThn5408_N9S20969C12D1Ev,_ZThn2956_N9S20969C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20969C12D0Ev,_ZTv0_n32_N9S20969C12D0Ev)();
extern void ABISELECT(_ZThn5408_N9S20969C12D0Ev,_ZThn2956_N9S20969C12D0Ev)() __attribute__((weak));
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY vtc_S20969C12[] = {
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  (VTBL_ENTRY)&_ZN9S20969C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20969C122v8Ev,
  ABISELECT(696,408),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2496),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
  0,
  ABISELECT(-5024,-2752),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  0,
  ABISELECT(-5408,-2956),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2956),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C12D1Ev,_ZTv0_n32_N9S20969C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C12D0Ev,_ZTv0_n32_N9S20969C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
extern VTBL_ENTRY _ZTV9S20969C12[];
extern void _ZN9S20969C13D1Ev();
extern void _ZN9S20969C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20969C13__9S20969C12[] = {
  ABISELECT(5408,2956),
  ABISELECT(5392,2948),
  ABISELECT(5024,2752),
  ABISELECT(4560,2496),
  ABISELECT(4464,2440),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN9S20969C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C13__9S20969C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-4464,-2440),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C13__9S20969C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-4560,-2496),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C13__9S20969C12[] = {
  0,
  ABISELECT(-5024,-2752),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C13D1Ev,_ZTv0_n32_N9S20969C13D1Ev)();
extern void ABISELECT(_ZThn5408_N9S20969C13D1Ev,_ZThn2956_N9S20969C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20969C13D0Ev,_ZTv0_n32_N9S20969C13D0Ev)();
extern void ABISELECT(_ZThn5408_N9S20969C13D0Ev,_ZThn2956_N9S20969C13D0Ev)() __attribute__((weak));
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C13__9S20969C12[] = {
  0,
  ABISELECT(-5408,-2956),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-5408,-2956),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C13D1Ev,_ZTv0_n32_N9S20969C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C13D0Ev,_ZTv0_n32_N9S20969C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20969C14__9S20969C12[] = {
  ABISELECT(696,408),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C14[0]),
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C14__9S20969C12[] = {
  0,
  ABISELECT(-696,-408),
  (VTBL_ENTRY)&(_ZTI9S20969C14[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C3__9S20969C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C3__9S20969C12[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C12[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C4__9S20969C12[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C2D1Ev();
extern void _ZN8S20969C2D0Ev();
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__8S20969C2__9S20969C12[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C2__9S20969C12[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C2__9S20969C12[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTT_ENTRY vtt_S20969C12[] = {
  {&(_ZTV9S20969C12[7]),  7,43},
  {&(_tg__ZTV9S20969C13__9S20969C12[7]),  7,9},
  {&(_tg__ZTV8S20969C3__9S20969C13__9S20969C12[5]),  5,5},
  {&(_tg__ZTV8S20969C4__9S20969C13__9S20969C12[6]),  6,8},
  {&(_tg__ZTV8S20969C7__9S20969C13__9S20969C12[3]),  3,4},
  {&(_tg__ZTV8S20969C2__9S20969C13__9S20969C12[9]),  9,13},
  {&(_tg__ZTV9S20969C14__9S20969C12[3]),  3,3},
  {&(_tg__ZTV8S20969C7__9S20969C14__9S20969C12[3]),  3,4},
  {&(_ZTV9S20969C12[18]),  18,43},
  {&(_ZTV9S20969C12[24]),  24,43},
  {&(_ZTV9S20969C12[29]),  29,43},
  {&(_ZTV9S20969C12[39]),  39,43},
  {&(_ZTV9S20969C12[13]),  13,43},
  {&(_tg__ZTV8S20969C3__9S20969C12[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C3__9S20969C12[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C3__9S20969C12[3]),  3,4},
  {&(_tg__ZTV8S20969C4__9S20969C12[4]),  4,6},
  {&(_tg__ZTV8S20969C7__8S20969C4__9S20969C12[3]),  3,4},
  {&(_tg__ZTV8S20969C2__9S20969C12[6]),  6,10},
  {&(_tg__ZTV8S20969C3__8S20969C2__9S20969C12[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C2__9S20969C12[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C2__9S20969C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20969C12[];
extern  VTBL_ENTRY _ZTV9S20969C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C12[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C13D0Ev,_ZTv0_n32_N9S20969C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20969C13D0Ev,_ZThn2956_N9S20969C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C13D1Ev,_ZTv0_n32_N9S20969C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20969C13D1Ev,_ZThn2956_N9S20969C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C12D0Ev,_ZTv0_n32_N9S20969C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20969C12D0Ev,_ZThn2956_N9S20969C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C12D1Ev,_ZTv0_n32_N9S20969C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5408_N9S20969C12D1Ev,_ZThn2956_N9S20969C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20969C12 = {  "S20969C12", // class name
  bases_S20969C12, 10,
  &(vtc_S20969C12[0]), // expected_vtbl_contents
  &(vtt_S20969C12[0]), // expected_vtt_contents
  ABISELECT(5888,3224), // object size
  NSPAIRA(_ZTI9S20969C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20969C12),43, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20969C12),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20969C9  : S20969C10 , S20969C12 {
  __tsi64 s20969c9f0;
  int s20969c9f1;
  void *s20969c9f2;
  char s20969c9f3;
  int s20969c9f4;
  ::S20176C3_nt s20969c9f5;
  virtual void  v9(); // _ZN8S20969C92v9Ev
  virtual void  v10(); // _ZN8S20969C93v10Ev
  ~S20969C9(); // tgen
  S20969C9(); // tgen
};
//SIG(-1 S20969C9) C1{ BC2{ VBC3{ VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC6{ m Fp[2]} FC6[9] Fp FC7{ v4 Fi Fp FC6} FC7} VBC8{ VBC9{ VBC10{ BC7 VBC4 VBC6 v5 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC4 BC6 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v7 v8 FC8[7] Fi Fs Fi FC10 FL[9]} vd Fc Fi[3]} BC11{ BC12{ VBC9 VBC8 vd Fl Fp FC10 Fp Fs FL Fi FL FC10[4] Fi} BC13{ VBC4 Fp Fs FL Fi:6 Fp[2]} vd v9 FL FD FC5 Fi[9] Fs Fc:5} v1 v2 FL Fi Fp Fc Fi FC5}


void  S20969C9 ::v9(){vfunc_called(this, "_ZN8S20969C92v9Ev");}
void  S20969C9 ::v10(){vfunc_called(this, "_ZN8S20969C93v10Ev");}
S20969C9 ::~S20969C9(){ note_dtor("S20969C9", this);} // tgen
S20969C9 ::S20969C9(){ note_ctor("S20969C9", this);} // tgen

static void Test_S20969C9()
{
  extern Class_Descriptor cd_S20969C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1057,2328)];
    init_test(&cd_S20969C9, buf);
    S20969C9 *dp, &lv = *(dp=new (buf) S20969C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16896,9308), "sizeof(S20969C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20969C9)");
    /*is_ambiguous_... S20969C11::S20969C7 */ AMB_check_base_class_offset(lv, (S20969C7*)(S20969C11*), ABISELECT(15472,8524), "S20969C9");
    check_base_class_offset(lv, (S20969C7*)(S20969C4*), ABISELECT(15472,8524), "S20969C9");
    check_base_class_offset(lv, (S20969C7*)(S20969C14*)(S20969C12*), ABISELECT(15472,8524), "S20969C9");
    check_base_class_offset(lv, (S20969C5*)(S20969C4*), ABISELECT(16416,9044), "S20969C9");
    check_base_class_offset(lv, (S281C37_nt*)(S20969C4*), ABISELECT(16872,9300), "S20969C9");
    check_base_class_offset(lv, (S20969C4*)(S20969C3*), ABISELECT(16416,9044), "S20969C9");
    check_base_class_offset(lv, (S20969C3*)(S20969C2*), ABISELECT(16320,8988), "S20969C9");
    check_base_class_offset(lv, (S20969C3*)(S20969C13*)(S20969C12*), ABISELECT(16320,8988), "S20969C9");
    /*is_ambiguous_... S20969C2::S20969C7 */ AMB_check_base_class_offset(lv, (S20969C7*)(S20969C2*), ABISELECT(15840,8720), "S20969C9");
    /*is_ambiguous_... S20969C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20969C2*), ABISELECT(16208,8916), "S20969C9");
    check_base_class_offset(lv, (S20969C2*)(S20969C11*), ABISELECT(15840,8720), "S20969C9");
    check_base_class_offset(lv, (S20969C2*)(S20969C13*)(S20969C12*), ABISELECT(15840,8720), "S20969C9");
    check_base_class_offset(lv, (S20969C11*)(S20969C10*), ABISELECT(4544,2488), "S20969C9");
    check_base_class_offset(lv, (S20969C10*), 0, "S20969C9");
    check_base_class_offset(lv, (S20969C13*)(S20969C12*), ABISELECT(32,20), "S20969C9");
    check_base_class_offset(lv, (S20969C14*)(S20969C12*), ABISELECT(4360,2364), "S20969C9");
    check_base_class_offset(lv, (S20969C12*), ABISELECT(32,20), "S20969C9");
    check_field_offset(lv, s20969c9f0, ABISELECT(4496,2460), "S20969C9.s20969c9f0");
    check_field_offset(lv, s20969c9f1, ABISELECT(4504,2468), "S20969C9.s20969c9f1");
    check_field_offset(lv, s20969c9f2, ABISELECT(4512,2472), "S20969C9.s20969c9f2");
    check_field_offset(lv, s20969c9f3, ABISELECT(4520,2476), "S20969C9.s20969c9f3");
    check_field_offset(lv, s20969c9f4, ABISELECT(4524,2480), "S20969C9.s20969c9f4");
    check_field_offset(lv, s20969c9f5, ABISELECT(4528,2484), "S20969C9.s20969c9f5");
    test_class_info(&lv, &cd_S20969C9);
    dp->~S20969C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20969C9(Test_S20969C9, "S20969C9", ABISELECT(16896,9308));

#else // __cplusplus

extern void _ZN8S20969C9C1Ev();
extern void _ZN8S20969C9D1Ev();
Name_Map name_map_S20969C9[] = {
  NSPAIR(_ZN8S20969C9C1Ev),
  NSPAIR(_ZN8S20969C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S20969C5;
extern VTBL_ENTRY _ZTI8S20969C5[];
extern  VTBL_ENTRY _ZTV8S20969C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C4;
extern VTBL_ENTRY _ZTI8S20969C4[];
extern  VTBL_ENTRY _ZTV8S20969C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C4[];
extern Class_Descriptor cd_S20969C3;
extern VTBL_ENTRY _ZTI8S20969C3[];
extern  VTBL_ENTRY _ZTV8S20969C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C3[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C2;
extern VTBL_ENTRY _ZTI8S20969C2[];
extern  VTBL_ENTRY _ZTV8S20969C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C2[];
extern Class_Descriptor cd_S20969C11;
extern VTBL_ENTRY _ZTI9S20969C11[];
extern  VTBL_ENTRY _ZTV9S20969C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C11[];
extern Class_Descriptor cd_S20969C10;
extern VTBL_ENTRY _ZTI9S20969C10[];
extern  VTBL_ENTRY _ZTV9S20969C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C10[];
extern Class_Descriptor cd_S20969C13;
extern VTBL_ENTRY _ZTI9S20969C13[];
extern  VTBL_ENTRY _ZTV9S20969C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C13[];
extern Class_Descriptor cd_S20969C14;
extern VTBL_ENTRY _ZTI9S20969C14[];
extern  VTBL_ENTRY _ZTV9S20969C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C14[];
extern Class_Descriptor cd_S20969C12;
extern VTBL_ENTRY _ZTI9S20969C12[];
extern  VTBL_ENTRY _ZTV9S20969C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C12[];
static Base_Class bases_S20969C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20969C7,    ABISELECT(15472,8524), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20969C5,    ABISELECT(16416,9044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(16872,9300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C4,    ABISELECT(16416,9044), //bcp->offset
    61, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20969C3,    ABISELECT(16320,8988), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20969C7,    ABISELECT(15840,8720), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(16208,8916), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C2,    ABISELECT(15840,8720), //bcp->offset
    43, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20969C11,    ABISELECT(4544,2488), //bcp->offset
    25, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20969C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20969C13,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20969C14,    ABISELECT(4360,2364), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20969C12,    ABISELECT(32,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20969C9[];
extern void _ZN8S20969C9D1Ev();
extern void _ZN8S20969C9D0Ev();
extern void _ZN8S20969C92v9Ev();
extern void _ZN8S20969C93v10Ev();
extern void ABISELECT(_ZThn32_N8S20969C9D1Ev,_ZThn20_N8S20969C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S20969C9D0Ev,_ZThn20_N8S20969C9D0Ev)();
extern void _ZN9S20969C122v8Ev();
extern void _ZN9S20969C112v6Ev();
extern void _ZN9S20969C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S20969C9D1Ev,_ZTv0_n40_N8S20969C9D1Ev)();
extern void ABISELECT(_ZThn4544_N8S20969C9D1Ev,_ZThn2488_N8S20969C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20969C9D0Ev,_ZTv0_n40_N8S20969C9D0Ev)();
extern void ABISELECT(_ZThn4544_N8S20969C9D0Ev,_ZThn2488_N8S20969C9D0Ev)() __attribute__((weak));
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S20969C9D1Ev,_ZTv0_n32_N8S20969C9D1Ev)();
extern void ABISELECT(_ZThn15840_N8S20969C9D1Ev,_ZThn8720_N8S20969C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20969C9D0Ev,_ZTv0_n32_N8S20969C9D0Ev)();
extern void ABISELECT(_ZThn15840_N8S20969C9D0Ev,_ZThn8720_N8S20969C9D0Ev)() __attribute__((weak));
extern void _ZN8S20969C22v5Ev();
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY vtc_S20969C9[] = {
  ABISELECT(16872,9300),
  ABISELECT(16416,9044),
  ABISELECT(16320,8988),
  ABISELECT(15840,8720),
  ABISELECT(15472,8524),
  ABISELECT(4544,2488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  (VTBL_ENTRY)&_ZN8S20969C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20969C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20969C92v9Ev,
  (VTBL_ENTRY)&_ZN8S20969C93v10Ev,
  ABISELECT(15808,8700),
  ABISELECT(16840,9280),
  ABISELECT(15440,8504),
  ABISELECT(16384,9024),
  ABISELECT(16288,8968),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20969C9D1Ev,_ZThn20_N8S20969C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20969C9D0Ev,_ZThn20_N8S20969C9D0Ev),
  (VTBL_ENTRY)&_ZN9S20969C122v8Ev,
  ABISELECT(11112,6160),
  ABISELECT(-4360,-2364),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  ABISELECT(-4544,-2488),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-4544,-2488),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  (VTBL_ENTRY)&_ZN9S20969C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20969C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20969C9D1Ev,_ZTv0_n40_N8S20969C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20969C9D0Ev,_ZTv0_n40_N8S20969C9D0Ev),
  0,
  ABISELECT(-15472,-8524),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  0,
  ABISELECT(-15840,-8720),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15840,-8720),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20969C9D1Ev,_ZTv0_n32_N8S20969C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20969C9D0Ev,_ZTv0_n32_N8S20969C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16320,-8988),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16416,-9044),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20969C9[];
extern void _ZN9S20969C10D1Ev();
extern void _ZN9S20969C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20969C10__8S20969C9[] = {
  ABISELECT(16872,9300),
  ABISELECT(16416,9044),
  ABISELECT(16320,8988),
  ABISELECT(15840,8720),
  ABISELECT(15472,8524),
  ABISELECT(4544,2488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN9S20969C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C10D0Ev,
};
extern void _ZN9S20969C112v6Ev();
extern void _ZN9S20969C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N9S20969C10D1Ev,_ZTv0_n40_N9S20969C10D1Ev)();
extern void ABISELECT(_ZThn4544_N9S20969C10D1Ev,_ZThn2488_N9S20969C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20969C10D0Ev,_ZTv0_n40_N9S20969C10D0Ev)();
extern void ABISELECT(_ZThn4544_N9S20969C10D0Ev,_ZThn2488_N9S20969C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20969C11__9S20969C10__8S20969C9[] = {
  ABISELECT(-4544,-2488),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-4544,-2488),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN9S20969C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20969C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20969C10D1Ev,_ZTv0_n40_N9S20969C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20969C10D0Ev,_ZTv0_n40_N9S20969C10D0Ev),
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C10__8S20969C9[] = {
  0,
  ABISELECT(-15472,-8524),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C10D1Ev,_ZTv0_n32_N9S20969C10D1Ev)();
extern void ABISELECT(_ZThn15840_N9S20969C10D1Ev,_ZThn8720_N9S20969C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20969C10D0Ev,_ZTv0_n32_N9S20969C10D0Ev)();
extern void ABISELECT(_ZThn15840_N9S20969C10D0Ev,_ZThn8720_N9S20969C10D0Ev)() __attribute__((weak));
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C10__8S20969C9[] = {
  0,
  ABISELECT(-15840,-8720),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15840,-8720),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C10D1Ev,_ZTv0_n32_N9S20969C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C10D0Ev,_ZTv0_n32_N9S20969C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C10__8S20969C9[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16320,-8988),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C10__8S20969C9[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16416,-9044),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN9S20969C12D1Ev();
extern void _ZN9S20969C12D0Ev();
extern void _ZN9S20969C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20969C12__8S20969C9[] = {
  ABISELECT(15808,8700),
  ABISELECT(16840,9280),
  ABISELECT(15440,8504),
  ABISELECT(16384,9024),
  ABISELECT(16288,8968),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  (VTBL_ENTRY)&_ZN9S20969C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20969C122v8Ev,
};
extern void _ZN9S20969C13D1Ev();
extern void _ZN9S20969C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20969C139S20969C12__8S20969C9[] = {
  ABISELECT(15808,8700),
  ABISELECT(16840,9280),
  ABISELECT(15440,8504),
  ABISELECT(16384,9024),
  ABISELECT(16288,8968),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN9S20969C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C139S20969C12__8S20969C9[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16288,-8968),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C139S20969C12__8S20969C9[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16384,-9024),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C139S20969C12__8S20969C9[] = {
  0,
  ABISELECT(-15440,-8504),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C13D1Ev,_ZTv0_n32_N9S20969C13D1Ev)();
extern void ABISELECT(_ZThn15808_N9S20969C13D1Ev,_ZThn8700_N9S20969C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20969C13D0Ev,_ZTv0_n32_N9S20969C13D0Ev)();
extern void ABISELECT(_ZThn15808_N9S20969C13D0Ev,_ZThn8700_N9S20969C13D0Ev)() __attribute__((weak));
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C139S20969C12__8S20969C9[] = {
  0,
  ABISELECT(-15808,-8700),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15808,-8700),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C13D1Ev,_ZTv0_n32_N9S20969C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C13D0Ev,_ZTv0_n32_N9S20969C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20969C149S20969C12__8S20969C9[] = {
  ABISELECT(11112,6160),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C14[0]),
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C149S20969C12__8S20969C9[] = {
  0,
  ABISELECT(-11112,-6160),
  (VTBL_ENTRY)&(_ZTI9S20969C14[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C12__8S20969C9[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-16288,-8968),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C12__8S20969C9[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-16384,-9024),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C12__8S20969C9[] = {
  0,
  ABISELECT(-15440,-8504),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C12D1Ev,_ZTv0_n32_N9S20969C12D1Ev)();
extern void ABISELECT(_ZThn15808_N9S20969C12D1Ev,_ZThn8700_N9S20969C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20969C12D0Ev,_ZTv0_n32_N9S20969C12D0Ev)();
extern void ABISELECT(_ZThn15808_N9S20969C12D0Ev,_ZThn8700_N9S20969C12D0Ev)() __attribute__((weak));
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C12__8S20969C9[] = {
  0,
  ABISELECT(-15808,-8700),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-15808,-8700),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C12D1Ev,_ZTv0_n32_N9S20969C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C12D0Ev,_ZTv0_n32_N9S20969C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20969C14__9S20969C12__8S20969C9[] = {
  ABISELECT(11112,6160),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
};
extern void _ZN9S20969C112v6Ev();
extern void _ZN9S20969C112v7Ev();
extern void _ZN9S20969C11D1Ev();
extern void _ZN9S20969C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20969C11__8S20969C9[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN9S20969C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20969C112v7Ev,
  (VTBL_ENTRY)&_ZN9S20969C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C11D0Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C11__8S20969C9[] = {
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C11D1Ev,_ZTv0_n32_N9S20969C11D1Ev)();
extern void ABISELECT(_ZThn11296_N9S20969C11D1Ev,_ZThn6232_N9S20969C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20969C11D0Ev,_ZTv0_n32_N9S20969C11D0Ev)();
extern void ABISELECT(_ZThn11296_N9S20969C11D0Ev,_ZThn6232_N9S20969C11D0Ev)() __attribute__((weak));
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C11__8S20969C9[] = {
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C11D1Ev,_ZTv0_n32_N9S20969C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C11D0Ev,_ZTv0_n32_N9S20969C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C11__8S20969C9[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C11__8S20969C9[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C2D1Ev();
extern void _ZN8S20969C2D0Ev();
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__8S20969C9[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__8S20969C2__8S20969C9[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C2__8S20969C9[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C2__8S20969C9[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__8S20969C9[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C3__8S20969C9[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C3__8S20969C9[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C9[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C4__8S20969C9[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTT_ENTRY vtt_S20969C9[] = {
  {&(_ZTV8S20969C9[8]),  8,69},
  {&(_tg__ZTV9S20969C10__8S20969C9[8]),  8,10},
  {&(_tg__ZTV9S20969C11__9S20969C10__8S20969C9[10]),  10,14},
  {&(_tg__ZTV8S20969C7__9S20969C10__8S20969C9[3]),  3,4},
  {&(_tg__ZTV8S20969C2__9S20969C10__8S20969C9[9]),  9,13},
  {&(_tg__ZTV8S20969C3__9S20969C10__8S20969C9[5]),  5,5},
  {&(_tg__ZTV8S20969C4__9S20969C10__8S20969C9[6]),  6,8},
  {&(_tg__ZTV9S20969C12__8S20969C9[7]),  7,10},
  {&(_tg__ZTV9S20969C139S20969C12__8S20969C9[7]),  7,9},
  {&(_tg__ZTV8S20969C3__9S20969C139S20969C12__8S20969C9[5]),  5,5},
  {&(_tg__ZTV8S20969C4__9S20969C139S20969C12__8S20969C9[6]),  6,8},
  {&(_tg__ZTV8S20969C7__9S20969C139S20969C12__8S20969C9[3]),  3,4},
  {&(_tg__ZTV8S20969C2__9S20969C139S20969C12__8S20969C9[9]),  9,13},
  {&(_tg__ZTV9S20969C149S20969C12__8S20969C9[3]),  3,3},
  {&(_tg__ZTV8S20969C7__9S20969C149S20969C12__8S20969C9[3]),  3,4},
  {&(_tg__ZTV8S20969C3__9S20969C12__8S20969C9[5]),  5,5},
  {&(_tg__ZTV8S20969C4__9S20969C12__8S20969C9[6]),  6,8},
  {&(_tg__ZTV8S20969C7__9S20969C12__8S20969C9[3]),  3,4},
  {&(_tg__ZTV8S20969C2__9S20969C12__8S20969C9[9]),  9,13},
  {&(_tg__ZTV9S20969C14__9S20969C12__8S20969C9[3]),  3,3},
  {&(_ZTV8S20969C9[35]),  35,69},
  {&(_ZTV8S20969C9[42]),  42,69},
  {&(_ZTV8S20969C9[52]),  52,69},
  {&(_ZTV8S20969C9[61]),  61,69},
  {&(_ZTV8S20969C9[67]),  67,69},
  {&(_ZTV8S20969C9[19]),  19,69},
  {&(_ZTV8S20969C9[25]),  25,69},
  {&(_tg__ZTV9S20969C11__8S20969C9[7]),  7,11},
  {&(_tg__ZTV8S20969C7__9S20969C11__8S20969C9[3]),  3,4},
  {&(_tg__ZTV8S20969C2__9S20969C11__8S20969C9[9]),  9,13},
  {&(_tg__ZTV8S20969C3__9S20969C11__8S20969C9[5]),  5,5},
  {&(_tg__ZTV8S20969C4__9S20969C11__8S20969C9[6]),  6,8},
  {&(_tg__ZTV8S20969C2__8S20969C9[6]),  6,10},
  {&(_tg__ZTV8S20969C3__8S20969C2__8S20969C9[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C2__8S20969C9[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C2__8S20969C9[3]),  3,4},
  {&(_tg__ZTV8S20969C3__8S20969C9[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C3__8S20969C9[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C3__8S20969C9[3]),  3,4},
  {&(_tg__ZTV8S20969C4__8S20969C9[4]),  4,6},
  {&(_tg__ZTV8S20969C7__8S20969C4__8S20969C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20969C9[];
extern  VTBL_ENTRY _ZTV8S20969C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C9[];
static VTBL_ENTRY alt_thunk_names81[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C11D0Ev,_ZTv0_n32_N9S20969C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20969C11D0Ev,_ZThn6232_N9S20969C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C11D1Ev,_ZTv0_n32_N9S20969C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N9S20969C11D1Ev,_ZThn6232_N9S20969C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C12D0Ev,_ZTv0_n32_N9S20969C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N9S20969C12D0Ev,_ZThn8700_N9S20969C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C12D1Ev,_ZTv0_n32_N9S20969C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N9S20969C12D1Ev,_ZThn8700_N9S20969C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C13D0Ev,_ZTv0_n32_N9S20969C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N9S20969C13D0Ev,_ZThn8700_N9S20969C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C13D1Ev,_ZTv0_n32_N9S20969C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15808_N9S20969C13D1Ev,_ZThn8700_N9S20969C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C10D0Ev,_ZTv0_n32_N9S20969C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N9S20969C10D0Ev,_ZThn8720_N9S20969C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20969C10D1Ev,_ZTv0_n32_N9S20969C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N9S20969C10D1Ev,_ZThn8720_N9S20969C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20969C10D0Ev,_ZTv0_n40_N9S20969C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S20969C10D0Ev,_ZThn2488_N9S20969C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20969C10D1Ev,_ZTv0_n40_N9S20969C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S20969C10D1Ev,_ZThn2488_N9S20969C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20969C9D0Ev,_ZTv0_n32_N8S20969C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N8S20969C9D0Ev,_ZThn8720_N8S20969C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20969C9D1Ev,_ZTv0_n32_N8S20969C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15840_N8S20969C9D1Ev,_ZThn8720_N8S20969C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20969C9D0Ev,_ZTv0_n40_N8S20969C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S20969C9D0Ev,_ZThn2488_N8S20969C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20969C9D1Ev,_ZTv0_n40_N8S20969C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S20969C9D1Ev,_ZThn2488_N8S20969C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20969C9 = {  "S20969C9", // class name
  bases_S20969C9, 13,
  &(vtc_S20969C9[0]), // expected_vtbl_contents
  &(vtt_S20969C9[0]), // expected_vtt_contents
  ABISELECT(16896,9308), // object size
  NSPAIRA(_ZTI8S20969C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20969C9),69, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20969C9),41, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names81,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20969C1  : virtual S20969C2 , S20969C7 , virtual S20969C9 , S20969C5 {
  int s20969c1f0[2];
  long s20969c1f1;
  int s20969c1f2[7];
  ::S20176C3_nt s20969c1f3[2];
  char s20969c1f4;
  long double s20969c1f5;
  int s20969c1f6;
  virtual void  v1(); // _ZN8S20969C12v1Ev
  ~S20969C1(); // tgen
  S20969C1(); // tgen
};
//SIG(1 S20969C1) C1{ VBC2{ VBC3{ VBC4{ BC5{ v2 Fi Fp FC6{ m Fp[2]}} VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC6 FC6[9] Fp FC5 FC5} VBC6 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC7 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} BC7 VBC9{ BC10{ VBC11{ VBC7 VBC2 v6 v7 FC2[7] Fi Fs Fi FC4 FL[9]} vd Fc Fi[3]} BC12{ BC13{ VBC3 VBC2 vd Fl Fp FC4 Fp Fs FL Fi FL FC4[4] Fi} BC14{ VBC7 Fp Fs FL Fi:6 Fp[2]} vd v8 FL FD FC8 Fi[9] Fs Fc:5} v9 v10 FL Fi Fp Fc Fi FC8} BC5 v1 Fi[2] Fl Fi[7] FC8[2] Fc FD Fi}


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

static void Test_S20969C1()
{
  extern Class_Descriptor cd_S20969C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1088,2397)];
    init_test(&cd_S20969C1, buf);
    S20969C1 *dp, &lv = *(dp=new (buf) S20969C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17392,9584), "sizeof(S20969C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20969C1)");
    check_base_class_offset(lv, (S20969C5*)(S20969C4*), ABISELECT(1072,600), "S20969C1");
    check_base_class_offset(lv, (S20969C7*)(S20969C4*), ABISELECT(1536,856), "S20969C1");
    /*is_ambiguous_... S20969C11::S20969C7 */ AMB_check_base_class_offset(lv, (S20969C7*)(S20969C11*), ABISELECT(1536,856), "S20969C1");
    check_base_class_offset(lv, (S20969C7*)(S20969C14*)(S20969C12*)(S20969C9*), ABISELECT(1536,856), "S20969C1");
    check_base_class_offset(lv, (S281C37_nt*)(S20969C4*), ABISELECT(1904,1052), "S20969C1");
    check_base_class_offset(lv, (S20969C4*)(S20969C3*), ABISELECT(1072,600), "S20969C1");
    check_base_class_offset(lv, (S20969C3*)(S20969C2*), ABISELECT(976,544), "S20969C1");
    check_base_class_offset(lv, (S20969C3*)(S20969C13*)(S20969C12*)(S20969C9*), ABISELECT(976,544), "S20969C1");
    /*is_ambiguous_... S20969C2::S20969C7 */ AMB_check_base_class_offset(lv, (S20969C7*)(S20969C2*), ABISELECT(496,276), "S20969C1");
    /*is_ambiguous_... S20969C2::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S20969C2*), ABISELECT(864,472), "S20969C1");
    check_base_class_offset(lv, (S20969C2*), ABISELECT(496,276), "S20969C1");
    check_base_class_offset(lv, (S20969C2*)(S20969C11*), ABISELECT(496,276), "S20969C1");
    check_base_class_offset(lv, (S20969C2*)(S20969C13*)(S20969C12*)(S20969C9*), ABISELECT(496,276), "S20969C1");
    /*is_ambiguous_... S20969C1::S20969C7 */ AMB_check_base_class_offset(lv, (S20969C7*), 0, "S20969C1");
    check_base_class_offset(lv, (S20969C11*)(S20969C10*)(S20969C9*), ABISELECT(6464,3548), "S20969C1");
    check_base_class_offset(lv, (S20969C10*)(S20969C9*), ABISELECT(1920,1060), "S20969C1");
    check_base_class_offset(lv, (S20969C13*)(S20969C12*)(S20969C9*), ABISELECT(1952,1080), "S20969C1");
    check_base_class_offset(lv, (S20969C14*)(S20969C12*)(S20969C9*), ABISELECT(6280,3424), "S20969C1");
    check_base_class_offset(lv, (S20969C12*)(S20969C9*), ABISELECT(1952,1080), "S20969C1");
    check_base_class_offset(lv, (S20969C9*), ABISELECT(1920,1060), "S20969C1");
    /*is_ambiguous_... S20969C1::S20969C5 */ AMB_check_base_class_offset(lv, (S20969C5*), ABISELECT(368,196), "S20969C1");
    check_field_offset(lv, s20969c1f0, ABISELECT(408,216), "S20969C1.s20969c1f0");
    check_field_offset(lv, s20969c1f1, ABISELECT(416,224), "S20969C1.s20969c1f1");
    check_field_offset(lv, s20969c1f2, ABISELECT(424,228), "S20969C1.s20969c1f2");
    check_field_offset(lv, s20969c1f3, ABISELECT(452,256), "S20969C1.s20969c1f3");
    check_field_offset(lv, s20969c1f4, ABISELECT(454,258), "S20969C1.s20969c1f4");
    check_field_offset(lv, s20969c1f5, ABISELECT(464,260), "S20969C1.s20969c1f5");
    check_field_offset(lv, s20969c1f6, ABISELECT(480,272), "S20969C1.s20969c1f6");
    test_class_info(&lv, &cd_S20969C1);
    dp->~S20969C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20969C1(Test_S20969C1, "S20969C1", ABISELECT(17392,9584));

#else // __cplusplus

extern void _ZN8S20969C1C1Ev();
extern void _ZN8S20969C1D1Ev();
Name_Map name_map_S20969C1[] = {
  NSPAIR(_ZN8S20969C1C1Ev),
  NSPAIR(_ZN8S20969C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20969C5;
extern VTBL_ENTRY _ZTI8S20969C5[];
extern  VTBL_ENTRY _ZTV8S20969C5[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C4;
extern VTBL_ENTRY _ZTI8S20969C4[];
extern  VTBL_ENTRY _ZTV8S20969C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C4[];
extern Class_Descriptor cd_S20969C3;
extern VTBL_ENTRY _ZTI8S20969C3[];
extern  VTBL_ENTRY _ZTV8S20969C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C3[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S20969C2;
extern VTBL_ENTRY _ZTI8S20969C2[];
extern  VTBL_ENTRY _ZTV8S20969C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C2[];
extern Class_Descriptor cd_S20969C7;
extern VTBL_ENTRY _ZTI8S20969C7[];
extern  VTBL_ENTRY _ZTV8S20969C7[];
extern Class_Descriptor cd_S20969C11;
extern VTBL_ENTRY _ZTI9S20969C11[];
extern  VTBL_ENTRY _ZTV9S20969C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C11[];
extern Class_Descriptor cd_S20969C10;
extern VTBL_ENTRY _ZTI9S20969C10[];
extern  VTBL_ENTRY _ZTV9S20969C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C10[];
extern Class_Descriptor cd_S20969C13;
extern VTBL_ENTRY _ZTI9S20969C13[];
extern  VTBL_ENTRY _ZTV9S20969C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C13[];
extern Class_Descriptor cd_S20969C14;
extern VTBL_ENTRY _ZTI9S20969C14[];
extern  VTBL_ENTRY _ZTV9S20969C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C14[];
extern Class_Descriptor cd_S20969C12;
extern VTBL_ENTRY _ZTI9S20969C12[];
extern  VTBL_ENTRY _ZTV9S20969C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20969C12[];
extern Class_Descriptor cd_S20969C9;
extern VTBL_ENTRY _ZTI8S20969C9[];
extern  VTBL_ENTRY _ZTV8S20969C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C9[];
extern Class_Descriptor cd_S20969C5;
extern VTBL_ENTRY _ZTI8S20969C5[];
extern  VTBL_ENTRY _ZTV8S20969C5[];
static Base_Class bases_S20969C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20969C5,    ABISELECT(1072,600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C7,    ABISELECT(1536,856), //bcp->offset
    42, //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
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(1904,1052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20969C4,    ABISELECT(1072,600), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20969C3,    ABISELECT(976,544), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20969C7,    ABISELECT(496,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
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(864,472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20969C2,    ABISELECT(496,276), //bcp->offset
    16, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20969C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20969C11,    ABISELECT(6464,3548), //bcp->offset
    75, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20969C10,    ABISELECT(1920,1060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20969C13,    ABISELECT(1952,1080), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20969C14,    ABISELECT(6280,3424), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20969C12,    ABISELECT(1952,1080), //bcp->offset
    62, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20969C9,    ABISELECT(1920,1060), //bcp->offset
    46, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20969C5,    ABISELECT(368,196), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20969C1[];
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C12v1Ev();
extern void _ZN8S20969C1D1Ev();
extern void _ZN8S20969C1D0Ev();
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S20969C1D1Ev,_ZTv0_n32_N8S20969C1D1Ev)();
extern void ABISELECT(_ZThn496_N8S20969C1D1Ev,_ZThn276_N8S20969C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20969C1D0Ev,_ZTv0_n32_N8S20969C1D0Ev)();
extern void ABISELECT(_ZThn496_N8S20969C1D0Ev,_ZThn276_N8S20969C1D0Ev)() __attribute__((weak));
extern void _ZN8S20969C22v5Ev();
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S20969C1D1Ev,_ZTv0_n36_N8S20969C1D1Ev)();
extern void ABISELECT(_ZThn1920_N8S20969C1D1Ev,_ZThn1060_N8S20969C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20969C1D0Ev,_ZTv0_n36_N8S20969C1D0Ev)();
extern void ABISELECT(_ZThn1920_N8S20969C1D0Ev,_ZThn1060_N8S20969C1D0Ev)() __attribute__((weak));
extern void _ZN8S20969C92v9Ev();
extern void _ZN8S20969C93v10Ev();
extern void ABISELECT(_ZTvn32_n72_N8S20969C1D1Ev,_ZTvn20_n36_N8S20969C1D1Ev)();
extern void ABISELECT(_ZTvn32_n72_N8S20969C1D0Ev,_ZTvn20_n36_N8S20969C1D0Ev)();
extern void _ZN9S20969C122v8Ev();
extern void _ZN9S20969C112v6Ev();
extern void _ZN9S20969C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S20969C1D1Ev,_ZTv0_n40_N8S20969C1D1Ev)();
extern void ABISELECT(_ZThn6464_N8S20969C1D1Ev,_ZThn3548_N8S20969C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20969C1D0Ev,_ZTv0_n40_N8S20969C1D0Ev)();
extern void ABISELECT(_ZThn6464_N8S20969C1D0Ev,_ZThn3548_N8S20969C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20969C1[] = {
  ABISELECT(6464,3548),
  ABISELECT(1920,1060),
  ABISELECT(1904,1052),
  ABISELECT(1536,856),
  ABISELECT(1072,600),
  ABISELECT(976,544),
  ABISELECT(496,276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C1[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20969C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20969C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20969C1D0Ev,
  ABISELECT(-368,-196),
  (VTBL_ENTRY)&(_ZTI8S20969C1[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  0,
  ABISELECT(-496,-276),
  0,
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-496,-276),
  (VTBL_ENTRY)&(_ZTI8S20969C1[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20969C1D1Ev,_ZTv0_n32_N8S20969C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20969C1D0Ev,_ZTv0_n32_N8S20969C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-976,-544),
  (VTBL_ENTRY)&(_ZTI8S20969C1[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-1072,-600),
  (VTBL_ENTRY)&(_ZTI8S20969C1[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
  0,
  ABISELECT(-1536,-856),
  (VTBL_ENTRY)&(_ZTI8S20969C1[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  ABISELECT(32,20),
  0,
  0,
  ABISELECT(-1920,-1060),
  ABISELECT(-16,-8),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-1424,-784),
  ABISELECT(-384,-204),
  ABISELECT(4544,2488),
  ABISELECT(-1920,-1060),
  (VTBL_ENTRY)&(_ZTI8S20969C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20969C1D1Ev,_ZTv0_n36_N8S20969C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20969C1D0Ev,_ZTv0_n36_N8S20969C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C92v9Ev,
  (VTBL_ENTRY)&_ZN8S20969C93v10Ev,
  ABISELECT(-1456,-804),
  ABISELECT(-48,-28),
  ABISELECT(-416,-224),
  ABISELECT(-880,-480),
  ABISELECT(-976,-536),
  ABISELECT(-1952,-1080),
  (VTBL_ENTRY)&(_ZTI8S20969C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n72_N8S20969C1D1Ev,_ZTvn20_n36_N8S20969C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n72_N8S20969C1D0Ev,_ZTvn20_n36_N8S20969C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20969C122v8Ev,
  ABISELECT(-4744,-2568),
  ABISELECT(-6280,-3424),
  (VTBL_ENTRY)&(_ZTI8S20969C1[0]),
  ABISELECT(-6464,-3548),
  0,
  0,
  ABISELECT(-4560,-2496),
  ABISELECT(-5392,-2948),
  ABISELECT(-5488,-3004),
  ABISELECT(-5968,-3272),
  ABISELECT(-4928,-2692),
  ABISELECT(-6464,-3548),
  (VTBL_ENTRY)&(_ZTI8S20969C1[0]),
  (VTBL_ENTRY)&_ZN9S20969C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20969C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20969C1D1Ev,_ZTv0_n40_N8S20969C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20969C1D0Ev,_ZTv0_n40_N8S20969C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20969C1[];
extern void _ZN8S20969C72v3Ev();
extern void _ZN8S20969C2D1Ev();
extern void _ZN8S20969C2D0Ev();
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__8S20969C1[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20969C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__8S20969C2__8S20969C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C2__8S20969C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C2__8S20969C1[] = {
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI8S20969C2[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__8S20969C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C3__8S20969C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C3__8S20969C1[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S20969C3[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C1[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C4__8S20969C1[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S20969C4[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C9D1Ev();
extern void _ZN8S20969C9D0Ev();
extern void _ZN8S20969C92v9Ev();
extern void _ZN8S20969C93v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C9__8S20969C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-1424,-784),
  ABISELECT(-384,-204),
  ABISELECT(4544,2488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  (VTBL_ENTRY)&_ZN8S20969C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20969C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20969C92v9Ev,
  (VTBL_ENTRY)&_ZN8S20969C93v10Ev,
};
extern void _ZN9S20969C10D1Ev();
extern void _ZN9S20969C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20969C108S20969C9__8S20969C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-848,-460),
  ABISELECT(-944,-516),
  ABISELECT(-1424,-784),
  ABISELECT(-384,-204),
  ABISELECT(4544,2488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN9S20969C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C10D0Ev,
};
extern void _ZN9S20969C112v6Ev();
extern void _ZN9S20969C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N9S20969C10D1Ev,_ZTv0_n40_N9S20969C10D1Ev)();
extern void ABISELECT(_ZThn4544_N9S20969C10D1Ev,_ZThn2488_N9S20969C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20969C10D0Ev,_ZTv0_n40_N9S20969C10D0Ev)();
extern void ABISELECT(_ZThn4544_N9S20969C10D0Ev,_ZThn2488_N9S20969C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20969C11__9S20969C108S20969C9__8S20969C1[] = {
  ABISELECT(-4544,-2488),
  0,
  0,
  ABISELECT(-4560,-2496),
  ABISELECT(-5392,-2948),
  ABISELECT(-5488,-3004),
  ABISELECT(-5968,-3272),
  ABISELECT(-4928,-2692),
  ABISELECT(-4544,-2488),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN9S20969C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20969C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20969C10D1Ev,_ZTv0_n40_N9S20969C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20969C10D0Ev,_ZTv0_n40_N9S20969C10D0Ev),
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C108S20969C9__8S20969C1[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C10D1Ev,_ZTv0_n32_N9S20969C10D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20969C10D0Ev,_ZTv0_n32_N9S20969C10D0Ev)();
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C108S20969C9__8S20969C1[] = {
  0,
  ABISELECT(1424,784),
  0,
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(1424,784),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C10D1Ev,_ZTv0_n32_N9S20969C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C10D0Ev,_ZTv0_n32_N9S20969C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C108S20969C9__8S20969C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C108S20969C9__8S20969C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI9S20969C10[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN9S20969C12D1Ev();
extern void _ZN9S20969C12D0Ev();
extern void _ZN9S20969C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20969C128S20969C9__8S20969C1[] = {
  ABISELECT(-1456,-804),
  ABISELECT(-48,-28),
  ABISELECT(-416,-224),
  ABISELECT(-880,-480),
  ABISELECT(-976,-536),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  (VTBL_ENTRY)&_ZN9S20969C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C12D0Ev,
  (VTBL_ENTRY)&_ZN9S20969C122v8Ev,
};
extern void _ZN9S20969C13D1Ev();
extern void _ZN9S20969C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20969C139S20969C128S20969C9__8S20969C1[] = {
  ABISELECT(-1456,-804),
  ABISELECT(-48,-28),
  ABISELECT(-416,-224),
  ABISELECT(-880,-480),
  ABISELECT(-976,-536),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN9S20969C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C139S20969C128S20969C9__8S20969C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(976,536),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C139S20969C128S20969C9__8S20969C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(880,480),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C139S20969C128S20969C9__8S20969C1[] = {
  0,
  ABISELECT(416,224),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C13D1Ev,_ZTv0_n32_N9S20969C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20969C13D0Ev,_ZTv0_n32_N9S20969C13D0Ev)();
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C139S20969C128S20969C9__8S20969C1[] = {
  0,
  ABISELECT(1456,804),
  0,
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(1456,804),
  (VTBL_ENTRY)&(_ZTI9S20969C13[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C13D1Ev,_ZTv0_n32_N9S20969C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C13D0Ev,_ZTv0_n32_N9S20969C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20969C149S20969C128S20969C9__8S20969C1[] = {
  ABISELECT(-4744,-2568),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C14[0]),
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C149S20969C128S20969C9__8S20969C1[] = {
  0,
  ABISELECT(4744,2568),
  (VTBL_ENTRY)&(_ZTI9S20969C14[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C128S20969C9__8S20969C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(976,536),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C128S20969C9__8S20969C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(880,480),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C128S20969C9__8S20969C1[] = {
  0,
  ABISELECT(416,224),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C12D1Ev,_ZTv0_n32_N9S20969C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20969C12D0Ev,_ZTv0_n32_N9S20969C12D0Ev)();
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C128S20969C9__8S20969C1[] = {
  0,
  ABISELECT(1456,804),
  0,
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(1456,804),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C12D1Ev,_ZTv0_n32_N9S20969C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C12D0Ev,_ZTv0_n32_N9S20969C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20969C14__9S20969C128S20969C9__8S20969C1[] = {
  ABISELECT(-4744,-2568),
  ABISELECT(-4328,-2344),
  (VTBL_ENTRY)&(_ZTI9S20969C12[0]),
};
extern void _ZN9S20969C112v6Ev();
extern void _ZN9S20969C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S20969C9D1Ev,_ZTv0_n40_N8S20969C9D1Ev)();
extern void ABISELECT(_ZThn4544_N8S20969C9D1Ev,_ZThn2488_N8S20969C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20969C9D0Ev,_ZTv0_n40_N8S20969C9D0Ev)();
extern void ABISELECT(_ZThn4544_N8S20969C9D0Ev,_ZThn2488_N8S20969C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20969C11__8S20969C9__8S20969C1[] = {
  ABISELECT(-4544,-2488),
  0,
  0,
  ABISELECT(-4560,-2496),
  ABISELECT(-5392,-2948),
  ABISELECT(-5488,-3004),
  ABISELECT(-5968,-3272),
  ABISELECT(-4928,-2692),
  ABISELECT(-4544,-2488),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  (VTBL_ENTRY)&_ZN9S20969C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20969C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20969C9D1Ev,_ZTv0_n40_N8S20969C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20969C9D0Ev,_ZTv0_n40_N8S20969C9D0Ev),
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__8S20969C9__8S20969C1[] = {
  0,
  ABISELECT(384,204),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S20969C9D1Ev,_ZTv0_n32_N8S20969C9D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S20969C9D0Ev,_ZTv0_n32_N8S20969C9D0Ev)();
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__8S20969C9__8S20969C1[] = {
  0,
  ABISELECT(1424,784),
  0,
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(1424,784),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20969C9D1Ev,_ZTv0_n32_N8S20969C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20969C9D0Ev,_ZTv0_n32_N8S20969C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__8S20969C9__8S20969C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(944,516),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__8S20969C9__8S20969C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(848,460),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
extern void ABISELECT(_ZThn32_N8S20969C9D1Ev,_ZThn20_N8S20969C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S20969C9D0Ev,_ZThn20_N8S20969C9D0Ev)();
extern void _ZN9S20969C122v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20969C12__8S20969C9__8S20969C1[] = {
  ABISELECT(-1456,-804),
  ABISELECT(-48,-28),
  ABISELECT(-416,-224),
  ABISELECT(-880,-480),
  ABISELECT(-976,-536),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20969C9D1Ev,_ZThn20_N8S20969C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20969C9D0Ev,_ZThn20_N8S20969C9D0Ev),
  (VTBL_ENTRY)&_ZN9S20969C122v8Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20969C149S20969C12__8S20969C9__8S20969C1[] = {
  ABISELECT(-4744,-2568),
  ABISELECT(-4360,-2364),
  (VTBL_ENTRY)&(_ZTI8S20969C9[0]),
};
extern void _ZN9S20969C112v6Ev();
extern void _ZN9S20969C112v7Ev();
extern void _ZN9S20969C11D1Ev();
extern void _ZN9S20969C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20969C11__8S20969C1[] = {
  ABISELECT(-4560,-2496),
  ABISELECT(-5392,-2948),
  ABISELECT(-5488,-3004),
  ABISELECT(-5968,-3272),
  ABISELECT(-4928,-2692),
  0,
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN9S20969C112v6Ev,
  (VTBL_ENTRY)&_ZN9S20969C112v7Ev,
  (VTBL_ENTRY)&_ZN9S20969C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20969C11D0Ev,
};
extern void _ZN8S20969C72v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C7__9S20969C11__8S20969C1[] = {
  0,
  ABISELECT(4928,2692),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
};
extern void _ZN8S20969C72v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S20969C11D1Ev,_ZTv0_n32_N9S20969C11D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S20969C11D0Ev,_ZTv0_n32_N9S20969C11D0Ev)();
extern void _ZN8S20969C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C2__9S20969C11__8S20969C1[] = {
  0,
  ABISELECT(5968,3272),
  0,
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(5968,3272),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN8S20969C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C11D1Ev,_ZTv0_n32_N9S20969C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20969C11D0Ev,_ZTv0_n32_N9S20969C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20969C22v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20969C3__9S20969C11__8S20969C1[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(5488,3004),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
};
extern void _ZN8S20969C52v2Ev();
extern void _ZN8S20969C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20969C4__9S20969C11__8S20969C1[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(5392,2948),
  (VTBL_ENTRY)&(_ZTI9S20969C11[0]),
  (VTBL_ENTRY)&_ZN8S20969C52v2Ev,
  (VTBL_ENTRY)&_ZN8S20969C42v4Ev,
};
static  VTT_ENTRY vtt_S20969C1[] = {
  {&(_ZTV8S20969C1[9]),  9,89},
  {&(_ZTV8S20969C1[25]),  25,89},
  {&(_ZTV8S20969C1[34]),  34,89},
  {&(_ZTV8S20969C1[40]),  40,89},
  {&(_ZTV8S20969C1[45]),  45,89},
  {&(_ZTV8S20969C1[58]),  58,89},
  {&(_ZTV8S20969C1[85]),  85,89},
  {&(_ZTV8S20969C1[69]),  69,89},
  {&(_ZTV8S20969C1[75]),  75,89},
  {&(_tg__ZTV8S20969C2__8S20969C1[6]),  6,10},
  {&(_tg__ZTV8S20969C3__8S20969C2__8S20969C1[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C2__8S20969C1[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C2__8S20969C1[3]),  3,4},
  {&(_tg__ZTV8S20969C3__8S20969C1[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C3__8S20969C1[6]),  6,8},
  {&(_tg__ZTV8S20969C7__8S20969C3__8S20969C1[3]),  3,4},
  {&(_tg__ZTV8S20969C4__8S20969C1[4]),  4,6},
  {&(_tg__ZTV8S20969C7__8S20969C4__8S20969C1[3]),  3,4},
  {&(_tg__ZTV8S20969C9__8S20969C1[8]),  8,12},
  {&(_tg__ZTV9S20969C108S20969C9__8S20969C1[8]),  8,10},
  {&(_tg__ZTV9S20969C11__9S20969C108S20969C9__8S20969C1[10]),  10,14},
  {&(_tg__ZTV8S20969C7__9S20969C108S20969C9__8S20969C1[3]),  3,4},
  {&(_tg__ZTV8S20969C2__9S20969C108S20969C9__8S20969C1[9]),  9,13},
  {&(_tg__ZTV8S20969C3__9S20969C108S20969C9__8S20969C1[5]),  5,5},
  {&(_tg__ZTV8S20969C4__9S20969C108S20969C9__8S20969C1[6]),  6,8},
  {&(_tg__ZTV9S20969C128S20969C9__8S20969C1[7]),  7,10},
  {&(_tg__ZTV9S20969C139S20969C128S20969C9__8S20969C1[7]),  7,9},
  {&(_tg__ZTV8S20969C3__9S20969C139S20969C128S20969C9__8S20969C1[5]),  5,5},
  {&(_tg__ZTV8S20969C4__9S20969C139S20969C128S20969C9__8S20969C1[6]),  6,8},
  {&(_tg__ZTV8S20969C7__9S20969C139S20969C128S20969C9__8S20969C1[3]),  3,4},
  {&(_tg__ZTV8S20969C2__9S20969C139S20969C128S20969C9__8S20969C1[9]),  9,13},
  {&(_tg__ZTV9S20969C149S20969C128S20969C9__8S20969C1[3]),  3,3},
  {&(_tg__ZTV8S20969C7__9S20969C149S20969C128S20969C9__8S20969C1[3]),  3,4},
  {&(_tg__ZTV8S20969C3__9S20969C128S20969C9__8S20969C1[5]),  5,5},
  {&(_tg__ZTV8S20969C4__9S20969C128S20969C9__8S20969C1[6]),  6,8},
  {&(_tg__ZTV8S20969C7__9S20969C128S20969C9__8S20969C1[3]),  3,4},
  {&(_tg__ZTV8S20969C2__9S20969C128S20969C9__8S20969C1[9]),  9,13},
  {&(_tg__ZTV9S20969C14__9S20969C128S20969C9__8S20969C1[3]),  3,3},
  {&(_tg__ZTV9S20969C11__8S20969C9__8S20969C1[10]),  10,14},
  {&(_tg__ZTV8S20969C7__8S20969C9__8S20969C1[3]),  3,4},
  {&(_tg__ZTV8S20969C2__8S20969C9__8S20969C1[9]),  9,13},
  {&(_tg__ZTV8S20969C3__8S20969C9__8S20969C1[5]),  5,5},
  {&(_tg__ZTV8S20969C4__8S20969C9__8S20969C1[6]),  6,8},
  {&(_tg__ZTV9S20969C12__8S20969C9__8S20969C1[7]),  7,10},
  {&(_tg__ZTV9S20969C149S20969C12__8S20969C9__8S20969C1[3]),  3,3},
  {&(_tg__ZTV9S20969C11__8S20969C1[7]),  7,11},
  {&(_tg__ZTV8S20969C7__9S20969C11__8S20969C1[3]),  3,4},
  {&(_tg__ZTV8S20969C2__9S20969C11__8S20969C1[9]),  9,13},
  {&(_tg__ZTV8S20969C3__9S20969C11__8S20969C1[5]),  5,5},
  {&(_tg__ZTV8S20969C4__9S20969C11__8S20969C1[6]),  6,8},
};
extern VTBL_ENTRY _ZTI8S20969C1[];
extern  VTBL_ENTRY _ZTV8S20969C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20969C1[];
static VTBL_ENTRY alt_thunk_names82[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20969C9D0Ev,_ZTv0_n40_N8S20969C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S20969C9D0Ev,_ZThn2488_N8S20969C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20969C9D1Ev,_ZTv0_n40_N8S20969C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S20969C9D1Ev,_ZThn2488_N8S20969C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20969C10D0Ev,_ZTv0_n40_N9S20969C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S20969C10D0Ev,_ZThn2488_N9S20969C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20969C10D1Ev,_ZTv0_n40_N9S20969C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N9S20969C10D1Ev,_ZThn2488_N9S20969C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20969C1D0Ev,_ZTv0_n40_N8S20969C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6464_N8S20969C1D0Ev,_ZThn3548_N8S20969C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20969C1D1Ev,_ZTv0_n40_N8S20969C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6464_N8S20969C1D1Ev,_ZThn3548_N8S20969C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20969C1D0Ev,_ZTv0_n36_N8S20969C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1920_N8S20969C1D0Ev,_ZThn1060_N8S20969C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20969C1D1Ev,_ZTv0_n36_N8S20969C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1920_N8S20969C1D1Ev,_ZThn1060_N8S20969C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20969C1D0Ev,_ZTv0_n32_N8S20969C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S20969C1D0Ev,_ZThn276_N8S20969C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20969C1D1Ev,_ZTv0_n32_N8S20969C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S20969C1D1Ev,_ZThn276_N8S20969C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20969C1 = {  "S20969C1", // class name
  bases_S20969C1, 16,
  &(vtc_S20969C1[0]), // expected_vtbl_contents
  &(vtt_S20969C1[0]), // expected_vtt_contents
  ABISELECT(17392,9584), // object size
  NSPAIRA(_ZTI8S20969C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20969C1),89, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20969C1),50, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names82,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3034C3  {
  void *s3034c3f0;
  ::S2215C25 s3034c3f1;
  virtual  ~S3034C3(); // _ZN7S3034C3D1Ev
  virtual void  v15(); // _ZN7S3034C33v15Ev
  virtual void  v16(); // _ZN7S3034C33v16Ev
  virtual void  v17(); // _ZN7S3034C33v17Ev
  virtual void  v18(); // _ZN7S3034C33v18Ev
  virtual void  v19(); // _ZN7S3034C33v19Ev
  virtual void  v20(); // _ZN7S3034C33v20Ev
  virtual void  v21(); // _ZN7S3034C33v21Ev
  virtual void  v22(); // _ZN7S3034C33v22Ev
  virtual void  v23(); // _ZN7S3034C33v23Ev
  virtual void  v24(); // _ZN7S3034C33v24Ev
  virtual void  v25(); // _ZN7S3034C33v25Ev
  virtual void  v26(); // _ZN7S3034C33v26Ev
  virtual void  v27(); // _ZN7S3034C33v27Ev
  virtual void  v28(); // _ZN7S3034C33v28Ev
  virtual void  v29(); // _ZN7S3034C33v29Ev
  S3034C3(); // tgen
};
//SIG(-1 S3034C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}}}


 S3034C3 ::~S3034C3(){ note_dtor("S3034C3", this);}
void  S3034C3 ::v15(){vfunc_called(this, "_ZN7S3034C33v15Ev");}
void  S3034C3 ::v16(){vfunc_called(this, "_ZN7S3034C33v16Ev");}
void  S3034C3 ::v17(){vfunc_called(this, "_ZN7S3034C33v17Ev");}
void  S3034C3 ::v18(){vfunc_called(this, "_ZN7S3034C33v18Ev");}
void  S3034C3 ::v19(){vfunc_called(this, "_ZN7S3034C33v19Ev");}
void  S3034C3 ::v20(){vfunc_called(this, "_ZN7S3034C33v20Ev");}
void  S3034C3 ::v21(){vfunc_called(this, "_ZN7S3034C33v21Ev");}
void  S3034C3 ::v22(){vfunc_called(this, "_ZN7S3034C33v22Ev");}
void  S3034C3 ::v23(){vfunc_called(this, "_ZN7S3034C33v23Ev");}
void  S3034C3 ::v24(){vfunc_called(this, "_ZN7S3034C33v24Ev");}
void  S3034C3 ::v25(){vfunc_called(this, "_ZN7S3034C33v25Ev");}
void  S3034C3 ::v26(){vfunc_called(this, "_ZN7S3034C33v26Ev");}
void  S3034C3 ::v27(){vfunc_called(this, "_ZN7S3034C33v27Ev");}
void  S3034C3 ::v28(){vfunc_called(this, "_ZN7S3034C33v28Ev");}
void  S3034C3 ::v29(){vfunc_called(this, "_ZN7S3034C33v29Ev");}
S3034C3 ::S3034C3(){ note_ctor("S3034C3", this);} // tgen

static void Test_S3034C3()
{
  extern Class_Descriptor cd_S3034C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3034C3, buf);
    S3034C3 *dp, &lv = *(dp=new (buf) S3034C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3034C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3034C3)");
    check_field_offset(lv, s3034c3f0, ABISELECT(8,4), "S3034C3.s3034c3f0");
    check_field_offset(lv, s3034c3f1, ABISELECT(16,8), "S3034C3.s3034c3f1");
    test_class_info(&lv, &cd_S3034C3);
    dp->~S3034C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3034C3(Test_S3034C3, "S3034C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3034C3C1Ev();
extern void _ZN7S3034C3D1Ev();
Name_Map name_map_S3034C3[] = {
  NSPAIR(_ZN7S3034C3C1Ev),
  NSPAIR(_ZN7S3034C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3034C3[];
extern void _ZN7S3034C3D1Ev();
extern void _ZN7S3034C3D0Ev();
extern void _ZN7S3034C33v15Ev();
extern void _ZN7S3034C33v16Ev();
extern void _ZN7S3034C33v17Ev();
extern void _ZN7S3034C33v18Ev();
extern void _ZN7S3034C33v19Ev();
extern void _ZN7S3034C33v20Ev();
extern void _ZN7S3034C33v21Ev();
extern void _ZN7S3034C33v22Ev();
extern void _ZN7S3034C33v23Ev();
extern void _ZN7S3034C33v24Ev();
extern void _ZN7S3034C33v25Ev();
extern void _ZN7S3034C33v26Ev();
extern void _ZN7S3034C33v27Ev();
extern void _ZN7S3034C33v28Ev();
extern void _ZN7S3034C33v29Ev();
static  VTBL_ENTRY vtc_S3034C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3034C3[0]),
  (VTBL_ENTRY)&_ZN7S3034C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3034C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v29Ev,
};
extern VTBL_ENTRY _ZTI7S3034C3[];
extern  VTBL_ENTRY _ZTV7S3034C3[];
Class_Descriptor cd_S3034C3 = {  "S3034C3", // class name
  0,0,//no base classes
  &(vtc_S3034C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3034C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3034C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3034C2  : S3034C3 {
  ::S3047C24_nt s3034c2f0;
  virtual  ~S3034C2(); // _ZN7S3034C2D1Ev
  virtual void  v30(); // _ZN7S3034C23v30Ev
  virtual void  v31(); // _ZN7S3034C23v31Ev
  virtual void  v32(); // _ZN7S3034C23v32Ev
  virtual void  v33(); // _ZN7S3034C23v33Ev
  virtual void  v34(); // _ZN7S3034C23v34Ev
  S3034C2(); // tgen
};
//SIG(-1 S3034C2) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}}} vd v1 v2 v3 v4 v5 FC6{ m Fp Fi[2] FC7{ m}}}


 S3034C2 ::~S3034C2(){ note_dtor("S3034C2", this);}
void  S3034C2 ::v30(){vfunc_called(this, "_ZN7S3034C23v30Ev");}
void  S3034C2 ::v31(){vfunc_called(this, "_ZN7S3034C23v31Ev");}
void  S3034C2 ::v32(){vfunc_called(this, "_ZN7S3034C23v32Ev");}
void  S3034C2 ::v33(){vfunc_called(this, "_ZN7S3034C23v33Ev");}
void  S3034C2 ::v34(){vfunc_called(this, "_ZN7S3034C23v34Ev");}
S3034C2 ::S3034C2(){ note_ctor("S3034C2", this);} // tgen

static void Test_S3034C2()
{
  extern Class_Descriptor cd_S3034C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3034C2, buf);
    S3034C2 *dp, &lv = *(dp=new (buf) S3034C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3034C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3034C2)");
    check_base_class_offset(lv, (S3034C3*), 0, "S3034C2");
    check_field_offset(lv, s3034c2f0, ABISELECT(32,20), "S3034C2.s3034c2f0");
    test_class_info(&lv, &cd_S3034C2);
    dp->~S3034C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3034C2(Test_S3034C2, "S3034C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3034C2C1Ev();
extern void _ZN7S3034C2D1Ev();
Name_Map name_map_S3034C2[] = {
  NSPAIR(_ZN7S3034C2C1Ev),
  NSPAIR(_ZN7S3034C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3034C3;
extern VTBL_ENTRY _ZTI7S3034C3[];
extern  VTBL_ENTRY _ZTV7S3034C3[];
static Base_Class bases_S3034C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3034C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3034C2[];
extern void _ZN7S3034C2D1Ev();
extern void _ZN7S3034C2D0Ev();
extern void _ZN7S3034C33v15Ev();
extern void _ZN7S3034C33v16Ev();
extern void _ZN7S3034C33v17Ev();
extern void _ZN7S3034C33v18Ev();
extern void _ZN7S3034C33v19Ev();
extern void _ZN7S3034C33v20Ev();
extern void _ZN7S3034C33v21Ev();
extern void _ZN7S3034C33v22Ev();
extern void _ZN7S3034C33v23Ev();
extern void _ZN7S3034C33v24Ev();
extern void _ZN7S3034C33v25Ev();
extern void _ZN7S3034C33v26Ev();
extern void _ZN7S3034C33v27Ev();
extern void _ZN7S3034C33v28Ev();
extern void _ZN7S3034C33v29Ev();
extern void _ZN7S3034C23v30Ev();
extern void _ZN7S3034C23v31Ev();
extern void _ZN7S3034C23v32Ev();
extern void _ZN7S3034C23v33Ev();
extern void _ZN7S3034C23v34Ev();
static  VTBL_ENTRY vtc_S3034C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3034C2[0]),
  (VTBL_ENTRY)&_ZN7S3034C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3034C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3034C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3034C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3034C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3034C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3034C23v34Ev,
};
extern VTBL_ENTRY _ZTI7S3034C2[];
extern  VTBL_ENTRY _ZTV7S3034C2[];
Class_Descriptor cd_S3034C2 = {  "S3034C2", // class name
  bases_S3034C2, 1,
  &(vtc_S3034C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3034C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3034C2),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3034C12  {
  virtual  ~S3034C12(); // _ZN8S3034C12D1Ev
  virtual void  v35(); // _ZN8S3034C123v35Ev
  virtual void  v36(); // _ZN8S3034C123v36Ev
  virtual void  v37(); // _ZN8S3034C123v37Ev
  S3034C12(); // tgen
};
//SIG(-1 S3034C12) C1{ vd v1 v2 v3}


 S3034C12 ::~S3034C12(){ note_dtor("S3034C12", this);}
void  S3034C12 ::v35(){vfunc_called(this, "_ZN8S3034C123v35Ev");}
void  S3034C12 ::v36(){vfunc_called(this, "_ZN8S3034C123v36Ev");}
void  S3034C12 ::v37(){vfunc_called(this, "_ZN8S3034C123v37Ev");}
S3034C12 ::S3034C12(){ note_ctor("S3034C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S3034C12C1Ev();
extern void _ZN8S3034C12D1Ev();
Name_Map name_map_S3034C12[] = {
  NSPAIR(_ZN8S3034C12C1Ev),
  NSPAIR(_ZN8S3034C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3034C12[];
extern void _ZN8S3034C12D1Ev();
extern void _ZN8S3034C12D0Ev();
extern void _ZN8S3034C123v35Ev();
extern void _ZN8S3034C123v36Ev();
extern void _ZN8S3034C123v37Ev();
static  VTBL_ENTRY vtc_S3034C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3034C12[0]),
  (VTBL_ENTRY)&_ZN8S3034C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3034C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3034C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3034C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3034C123v37Ev,
};
extern VTBL_ENTRY _ZTI8S3034C12[];
extern  VTBL_ENTRY _ZTV8S3034C12[];
Class_Descriptor cd_S3034C12 = {  "S3034C12", // class name
  0,0,//no base classes
  &(vtc_S3034C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3034C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3034C12),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  S3034C11  : S3034C12 {
  virtual  ~S3034C11(); // _ZN8S3034C11D1Ev
  virtual void  v38(); // _ZN8S3034C113v38Ev
  virtual void  v39(); // _ZN8S3034C113v39Ev
  virtual void  v40(); // _ZN8S3034C113v40Ev
  virtual void  v41(); // _ZN8S3034C113v41Ev
  virtual void  v42(); // _ZN8S3034C113v42Ev
  virtual void  v43(); // _ZN8S3034C113v43Ev
  S3034C11(); // tgen
};
//SIG(-1 S3034C11) C1{ BC2{ vd v7 v8 v9} vd v1 v2 v3 v4 v5 v6}


 S3034C11 ::~S3034C11(){ note_dtor("S3034C11", this);}
void  S3034C11 ::v38(){vfunc_called(this, "_ZN8S3034C113v38Ev");}
void  S3034C11 ::v39(){vfunc_called(this, "_ZN8S3034C113v39Ev");}
void  S3034C11 ::v40(){vfunc_called(this, "_ZN8S3034C113v40Ev");}
void  S3034C11 ::v41(){vfunc_called(this, "_ZN8S3034C113v41Ev");}
void  S3034C11 ::v42(){vfunc_called(this, "_ZN8S3034C113v42Ev");}
void  S3034C11 ::v43(){vfunc_called(this, "_ZN8S3034C113v43Ev");}
S3034C11 ::S3034C11(){ note_ctor("S3034C11", this);} // tgen

static void Test_S3034C11()
{
  extern Class_Descriptor cd_S3034C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3034C11, buf);
    S3034C11 *dp, &lv = *(dp=new (buf) S3034C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3034C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3034C11)");
    check_base_class_offset(lv, (S3034C12*), 0, "S3034C11");
    test_class_info(&lv, &cd_S3034C11);
    dp->~S3034C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3034C11(Test_S3034C11, "S3034C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3034C11C1Ev();
extern void _ZN8S3034C11D1Ev();
Name_Map name_map_S3034C11[] = {
  NSPAIR(_ZN8S3034C11C1Ev),
  NSPAIR(_ZN8S3034C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3034C12;
extern VTBL_ENTRY _ZTI8S3034C12[];
extern  VTBL_ENTRY _ZTV8S3034C12[];
static Base_Class bases_S3034C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3034C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3034C11[];
extern void _ZN8S3034C11D1Ev();
extern void _ZN8S3034C11D0Ev();
extern void _ZN8S3034C123v35Ev();
extern void _ZN8S3034C123v36Ev();
extern void _ZN8S3034C123v37Ev();
extern void _ZN8S3034C113v38Ev();
extern void _ZN8S3034C113v39Ev();
extern void _ZN8S3034C113v40Ev();
extern void _ZN8S3034C113v41Ev();
extern void _ZN8S3034C113v42Ev();
extern void _ZN8S3034C113v43Ev();
static  VTBL_ENTRY vtc_S3034C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3034C11[0]),
  (VTBL_ENTRY)&_ZN8S3034C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3034C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3034C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3034C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3034C123v37Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v38Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v39Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v40Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v43Ev,
};
extern VTBL_ENTRY _ZTI8S3034C11[];
extern  VTBL_ENTRY _ZTV8S3034C11[];
Class_Descriptor cd_S3034C11 = {  "S3034C11", // class name
  bases_S3034C11, 1,
  &(vtc_S3034C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3034C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3034C11),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3034C10  : S3034C11 {
  ::S2215C37 s3034c10f0;
  ::S3048C15_nt s3034c10f1;
  char s3034c10f2;
  virtual  ~S3034C10(); // _ZN8S3034C10D1Ev
  virtual void  v44(); // _ZN8S3034C103v44Ev
  virtual void  v45(); // _ZN8S3034C103v45Ev
  virtual void  v46(); // _ZN8S3034C103v46Ev
  S3034C10(); // tgen
};
//SIG(-1 S3034C10) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10 v11 v12} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ FL[4]}} Fc}


 S3034C10 ::~S3034C10(){ note_dtor("S3034C10", this);}
void  S3034C10 ::v44(){vfunc_called(this, "_ZN8S3034C103v44Ev");}
void  S3034C10 ::v45(){vfunc_called(this, "_ZN8S3034C103v45Ev");}
void  S3034C10 ::v46(){vfunc_called(this, "_ZN8S3034C103v46Ev");}
S3034C10 ::S3034C10(){ note_ctor("S3034C10", this);} // tgen

static void Test_S3034C10()
{
  extern Class_Descriptor cd_S3034C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S3034C10, buf);
    S3034C10 *dp, &lv = *(dp=new (buf) S3034C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S3034C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3034C10)");
    check_base_class_offset(lv, (S3034C12*)(S3034C11*), 0, "S3034C10");
    check_base_class_offset(lv, (S3034C11*), 0, "S3034C10");
    check_field_offset(lv, s3034c10f0, ABISELECT(8,4), "S3034C10.s3034c10f0");
    check_field_offset(lv, s3034c10f1, ABISELECT(32,20), "S3034C10.s3034c10f1");
    check_field_offset(lv, s3034c10f2, ABISELECT(64,52), "S3034C10.s3034c10f2");
    test_class_info(&lv, &cd_S3034C10);
    dp->~S3034C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3034C10(Test_S3034C10, "S3034C10", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S3034C10C1Ev();
extern void _ZN8S3034C10D1Ev();
Name_Map name_map_S3034C10[] = {
  NSPAIR(_ZN8S3034C10C1Ev),
  NSPAIR(_ZN8S3034C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3034C12;
extern VTBL_ENTRY _ZTI8S3034C12[];
extern  VTBL_ENTRY _ZTV8S3034C12[];
extern Class_Descriptor cd_S3034C11;
extern VTBL_ENTRY _ZTI8S3034C11[];
extern  VTBL_ENTRY _ZTV8S3034C11[];
static Base_Class bases_S3034C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3034C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3034C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S3034C10[];
extern void _ZN8S3034C10D1Ev();
extern void _ZN8S3034C10D0Ev();
extern void _ZN8S3034C123v35Ev();
extern void _ZN8S3034C123v36Ev();
extern void _ZN8S3034C123v37Ev();
extern void _ZN8S3034C113v38Ev();
extern void _ZN8S3034C113v39Ev();
extern void _ZN8S3034C113v40Ev();
extern void _ZN8S3034C113v41Ev();
extern void _ZN8S3034C113v42Ev();
extern void _ZN8S3034C113v43Ev();
extern void _ZN8S3034C103v44Ev();
extern void _ZN8S3034C103v45Ev();
extern void _ZN8S3034C103v46Ev();
static  VTBL_ENTRY vtc_S3034C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3034C10[0]),
  (VTBL_ENTRY)&_ZN8S3034C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3034C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3034C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3034C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3034C123v37Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v38Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v39Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v40Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3034C103v44Ev,
  (VTBL_ENTRY)&_ZN8S3034C103v45Ev,
  (VTBL_ENTRY)&_ZN8S3034C103v46Ev,
};
extern VTBL_ENTRY _ZTI8S3034C10[];
extern  VTBL_ENTRY _ZTV8S3034C10[];
Class_Descriptor cd_S3034C10 = {  "S3034C10", // class name
  bases_S3034C10, 2,
  &(vtc_S3034C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S3034C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3034C10),16, //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  S3034C22  {
  virtual  ~S3034C22(); // _ZN8S3034C22D1Ev
  virtual void  v49(); // _ZN8S3034C223v49Ev
  virtual void  v50(); // _ZN8S3034C223v50Ev
  S3034C22(); // tgen
};
//SIG(-1 S3034C22) C1{ vd v1 v2}


 S3034C22 ::~S3034C22(){ note_dtor("S3034C22", this);}
void  S3034C22 ::v49(){vfunc_called(this, "_ZN8S3034C223v49Ev");}
void  S3034C22 ::v50(){vfunc_called(this, "_ZN8S3034C223v50Ev");}
S3034C22 ::S3034C22(){ note_ctor("S3034C22", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S3034C22C1Ev();
extern void _ZN8S3034C22D1Ev();
Name_Map name_map_S3034C22[] = {
  NSPAIR(_ZN8S3034C22C1Ev),
  NSPAIR(_ZN8S3034C22D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3034C22[];
extern void _ZN8S3034C22D1Ev();
extern void _ZN8S3034C22D0Ev();
extern void _ZN8S3034C223v49Ev();
extern void _ZN8S3034C223v50Ev();
static  VTBL_ENTRY vtc_S3034C22[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3034C22[0]),
  (VTBL_ENTRY)&_ZN8S3034C22D1Ev,
  (VTBL_ENTRY)&_ZN8S3034C22D0Ev,
  (VTBL_ENTRY)&_ZN8S3034C223v49Ev,
  (VTBL_ENTRY)&_ZN8S3034C223v50Ev,
};
extern VTBL_ENTRY _ZTI8S3034C22[];
extern  VTBL_ENTRY _ZTV8S3034C22[];
Class_Descriptor cd_S3034C22 = {  "S3034C22", // class name
  0,0,//no base classes
  &(vtc_S3034C22[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3034C22),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3034C22),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  S3034C23_nt  : S3034C22 {
  ::S2215C20_nt s3034c23f0;
  ::S2215C20_nt s3034c23f1;
  ::S2215C20_nt s3034c23f2;
  virtual  ~S3034C23_nt(); // _ZN11S3034C23_ntD1Ev
  virtual void  v51(); // _ZN11S3034C23_nt3v51Ev
  S3034C23_nt(); // tgen
};
//SIG(-1 S3034C23_nt) C1{ BC2{ vd v2 v3} vd v1 FC3{ m Fp Fi FC4{ m}} FC3 FC3}


 S3034C23_nt ::~S3034C23_nt(){ note_dtor("S3034C23_nt", this);}
void  S3034C23_nt ::v51(){vfunc_called(this, "_ZN11S3034C23_nt3v51Ev");}
S3034C23_nt ::S3034C23_nt(){ note_ctor("S3034C23_nt", this);} // tgen

//skip512 S3034C23_nt

#else // __cplusplus

extern void _ZN11S3034C23_ntC1Ev();
extern void _ZN11S3034C23_ntD1Ev();
Name_Map name_map_S3034C23_nt[] = {
  NSPAIR(_ZN11S3034C23_ntC1Ev),
  NSPAIR(_ZN11S3034C23_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3034C22;
extern VTBL_ENTRY _ZTI8S3034C22[];
extern  VTBL_ENTRY _ZTV8S3034C22[];
static Base_Class bases_S3034C23_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3034C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S3034C23_nt[];
extern void _ZN11S3034C23_ntD1Ev();
extern void _ZN11S3034C23_ntD0Ev();
extern void _ZN8S3034C223v49Ev();
extern void _ZN8S3034C223v50Ev();
extern void _ZN11S3034C23_nt3v51Ev();
static  VTBL_ENTRY vtc_S3034C23_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3034C23_nt[0]),
  (VTBL_ENTRY)&_ZN11S3034C23_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3034C23_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S3034C223v49Ev,
  (VTBL_ENTRY)&_ZN8S3034C223v50Ev,
  (VTBL_ENTRY)&_ZN11S3034C23_nt3v51Ev,
};
extern VTBL_ENTRY _ZTI11S3034C23_nt[];
VTBL_ENTRY *P__ZTI11S3034C23_nt = _ZTI11S3034C23_nt; 
extern  VTBL_ENTRY _ZTV11S3034C23_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3034C17  : S20176C3_nt {
  ::S3047C23_nt s3034c17f0;
  ::S3034C23_nt s3034c17f1;
  char s3034c17f2;
};
//SIG(-1 S3034C17) C1{ BC2{} FC3{ BC4{ m Fp Fi[2] FC5{ m}} BC6{ vd v3 v4} vd v1 v2} FC7{ BC8{ vd v6 v7} vd v5 FC9{ m Fp Fi FC10{ m}} FC9 FC9} Fc}



static void Test_S3034C17()
{
  extern Class_Descriptor cd_S3034C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S3034C17, buf);
    S3034C17 &lv = *(new (buf) S3034C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S3034C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3034C17)");
    check_base_class_offset(lv, (S20176C3_nt*), 0, "S3034C17");
    check_field_offset(lv, s3034c17f0, 0, "S3034C17.s3034c17f0");
    check_field_offset(lv, s3034c17f1, ABISELECT(32,20), "S3034C17.s3034c17f1");
    check_field_offset(lv, s3034c17f2, ABISELECT(88,60), "S3034C17.s3034c17f2");
    test_class_info(&lv, &cd_S3034C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3034C17(Test_S3034C17, "S3034C17", ABISELECT(96,64));

#else // __cplusplus

extern Class_Descriptor cd_S20176C3_nt;
extern VTBL_ENTRY _ZTI11S20176C3_nt[];
static Base_Class bases_S3034C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3034C17 = {  "S3034C17", // class name
  bases_S3034C17, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(96,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

struct  S3034C1  : S3034C2 , S3034C10 {
  void *s3034c1f0;
  ::S3034C17 s3034c1f1;
  virtual  ~S3034C1(); // _ZN7S3034C1D1Ev
  virtual void  v1(); // _ZN7S3034C12v1Ev
  virtual void  v2(); // _ZN7S3034C12v2Ev
  virtual void  v3(); // _ZN7S3034C12v3Ev
  virtual void  v4(); // _ZN7S3034C12v4Ev
  virtual void  v5(); // _ZN7S3034C12v5Ev
  virtual void  v6(); // _ZN7S3034C12v6Ev
  virtual void  v7(); // _ZN7S3034C12v7Ev
  virtual void  v8(); // _ZN7S3034C12v8Ev
  virtual void  v9(); // _ZN7S3034C12v9Ev
  virtual void  v10(); // _ZN7S3034C13v10Ev
  virtual void  v11(); // _ZN7S3034C13v11Ev
  virtual void  v12(); // _ZN7S3034C13v12Ev
  virtual void  v13(); // _ZN7S3034C13v13Ev
  virtual void  v14(); // _ZN7S3034C13v14Ev
  S3034C1(); // tgen
};
//SIG(1 S3034C1) C1{ BC2{ BC3{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}}} vd v30 v31 v32 v33 v34 FC7{ m Fp Fi[2] FC8{ m}}} BC9{ BC10{ BC11{ vd v35 v36 v37} vd v38 v39 v40 v41 v42 v43} vd v44 v45 v46 FC12{ m Fp Fi[2] FC8} FC13{ m FC14{ FL[4]}} Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC15{ BC16{} FC17{ BC7 BC18{ vd v49 v50} vd v47 v48} FC19{ BC20{ vd v52 v53} vd v51 FC21{ m Fp Fi FC22{ m}} FC21 FC21} Fc}}


 S3034C1 ::~S3034C1(){ note_dtor("S3034C1", this);}
void  S3034C1 ::v1(){vfunc_called(this, "_ZN7S3034C12v1Ev");}
void  S3034C1 ::v2(){vfunc_called(this, "_ZN7S3034C12v2Ev");}
void  S3034C1 ::v3(){vfunc_called(this, "_ZN7S3034C12v3Ev");}
void  S3034C1 ::v4(){vfunc_called(this, "_ZN7S3034C12v4Ev");}
void  S3034C1 ::v5(){vfunc_called(this, "_ZN7S3034C12v5Ev");}
void  S3034C1 ::v6(){vfunc_called(this, "_ZN7S3034C12v6Ev");}
void  S3034C1 ::v7(){vfunc_called(this, "_ZN7S3034C12v7Ev");}
void  S3034C1 ::v8(){vfunc_called(this, "_ZN7S3034C12v8Ev");}
void  S3034C1 ::v9(){vfunc_called(this, "_ZN7S3034C12v9Ev");}
void  S3034C1 ::v10(){vfunc_called(this, "_ZN7S3034C13v10Ev");}
void  S3034C1 ::v11(){vfunc_called(this, "_ZN7S3034C13v11Ev");}
void  S3034C1 ::v12(){vfunc_called(this, "_ZN7S3034C13v12Ev");}
void  S3034C1 ::v13(){vfunc_called(this, "_ZN7S3034C13v13Ev");}
void  S3034C1 ::v14(){vfunc_called(this, "_ZN7S3034C13v14Ev");}
S3034C1 ::S3034C1(){ note_ctor("S3034C1", this);} // tgen

static void Test_S3034C1()
{
  extern Class_Descriptor cd_S3034C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,41)];
    init_test(&cd_S3034C1, buf);
    S3034C1 *dp, &lv = *(dp=new (buf) S3034C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,160), "sizeof(S3034C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3034C1)");
    check_base_class_offset(lv, (S3034C3*)(S3034C2*), 0, "S3034C1");
    check_base_class_offset(lv, (S3034C2*), 0, "S3034C1");
    check_base_class_offset(lv, (S3034C12*)(S3034C11*)(S3034C10*), ABISELECT(56,36), "S3034C1");
    check_base_class_offset(lv, (S3034C11*)(S3034C10*), ABISELECT(56,36), "S3034C1");
    check_base_class_offset(lv, (S3034C10*), ABISELECT(56,36), "S3034C1");
    check_field_offset(lv, s3034c1f0, ABISELECT(128,92), "S3034C1.s3034c1f0");
    check_field_offset(lv, s3034c1f1, ABISELECT(136,96), "S3034C1.s3034c1f1");
    test_class_info(&lv, &cd_S3034C1);
    dp->~S3034C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3034C1(Test_S3034C1, "S3034C1", ABISELECT(232,160));

#else // __cplusplus

extern void _ZN7S3034C1C1Ev();
extern void _ZN7S3034C1D1Ev();
Name_Map name_map_S3034C1[] = {
  NSPAIR(_ZN7S3034C1C1Ev),
  NSPAIR(_ZN7S3034C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3034C3;
extern VTBL_ENTRY _ZTI7S3034C3[];
extern  VTBL_ENTRY _ZTV7S3034C3[];
extern Class_Descriptor cd_S3034C2;
extern VTBL_ENTRY _ZTI7S3034C2[];
extern  VTBL_ENTRY _ZTV7S3034C2[];
extern Class_Descriptor cd_S3034C12;
extern VTBL_ENTRY _ZTI8S3034C12[];
extern  VTBL_ENTRY _ZTV8S3034C12[];
extern Class_Descriptor cd_S3034C11;
extern VTBL_ENTRY _ZTI8S3034C11[];
extern  VTBL_ENTRY _ZTV8S3034C11[];
extern Class_Descriptor cd_S3034C10;
extern VTBL_ENTRY _ZTI8S3034C10[];
extern  VTBL_ENTRY _ZTV8S3034C10[];
static Base_Class bases_S3034C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3034C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3034C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3034C12,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3034C11,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3034C10,    ABISELECT(56,36), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3034C1[];
extern void _ZN7S3034C1D1Ev();
extern void _ZN7S3034C1D0Ev();
extern void _ZN7S3034C33v15Ev();
extern void _ZN7S3034C33v16Ev();
extern void _ZN7S3034C33v17Ev();
extern void _ZN7S3034C33v18Ev();
extern void _ZN7S3034C33v19Ev();
extern void _ZN7S3034C33v20Ev();
extern void _ZN7S3034C33v21Ev();
extern void _ZN7S3034C33v22Ev();
extern void _ZN7S3034C33v23Ev();
extern void _ZN7S3034C33v24Ev();
extern void _ZN7S3034C33v25Ev();
extern void _ZN7S3034C33v26Ev();
extern void _ZN7S3034C33v27Ev();
extern void _ZN7S3034C33v28Ev();
extern void _ZN7S3034C33v29Ev();
extern void _ZN7S3034C23v30Ev();
extern void _ZN7S3034C23v31Ev();
extern void _ZN7S3034C23v32Ev();
extern void _ZN7S3034C23v33Ev();
extern void _ZN7S3034C23v34Ev();
extern void _ZN7S3034C12v1Ev();
extern void _ZN7S3034C12v2Ev();
extern void _ZN7S3034C12v3Ev();
extern void _ZN7S3034C12v4Ev();
extern void _ZN7S3034C12v5Ev();
extern void _ZN7S3034C12v6Ev();
extern void _ZN7S3034C12v7Ev();
extern void _ZN7S3034C12v8Ev();
extern void _ZN7S3034C12v9Ev();
extern void _ZN7S3034C13v10Ev();
extern void _ZN7S3034C13v11Ev();
extern void _ZN7S3034C13v12Ev();
extern void _ZN7S3034C13v13Ev();
extern void _ZN7S3034C13v14Ev();
extern void ABISELECT(_ZThn56_N7S3034C1D1Ev,_ZThn36_N7S3034C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3034C1D0Ev,_ZThn36_N7S3034C1D0Ev)();
extern void _ZN8S3034C123v35Ev();
extern void _ZN8S3034C123v36Ev();
extern void _ZN8S3034C123v37Ev();
extern void _ZN8S3034C113v38Ev();
extern void _ZN8S3034C113v39Ev();
extern void _ZN8S3034C113v40Ev();
extern void _ZN8S3034C113v41Ev();
extern void _ZN8S3034C113v42Ev();
extern void _ZN8S3034C113v43Ev();
extern void _ZN8S3034C103v44Ev();
extern void _ZN8S3034C103v45Ev();
extern void _ZN8S3034C103v46Ev();
static  VTBL_ENTRY vtc_S3034C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3034C1[0]),
  (VTBL_ENTRY)&_ZN7S3034C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3034C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3034C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3034C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3034C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3034C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3034C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3034C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3034C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3034C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3034C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3034C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3034C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3034C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3034C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3034C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3034C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3034C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3034C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3034C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3034C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3034C13v14Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S3034C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3034C1D1Ev,_ZThn36_N7S3034C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3034C1D0Ev,_ZThn36_N7S3034C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3034C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3034C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3034C123v37Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v38Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v39Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v40Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3034C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3034C103v44Ev,
  (VTBL_ENTRY)&_ZN8S3034C103v45Ev,
  (VTBL_ENTRY)&_ZN8S3034C103v46Ev,
};
extern VTBL_ENTRY _ZTI7S3034C1[];
extern  VTBL_ENTRY _ZTV7S3034C1[];
Class_Descriptor cd_S3034C1 = {  "S3034C1", // class name
  bases_S3034C1, 5,
  &(vtc_S3034C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,160), // object size
  NSPAIRA(_ZTI7S3034C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3034C1),54, //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  S3033C3  {
  void *s3033c3f0;
  ::S2215C25 s3033c3f1;
  virtual  ~S3033C3(); // _ZN7S3033C3D1Ev
  virtual void  v15(); // _ZN7S3033C33v15Ev
  virtual void  v16(); // _ZN7S3033C33v16Ev
  virtual void  v17(); // _ZN7S3033C33v17Ev
  virtual void  v18(); // _ZN7S3033C33v18Ev
  virtual void  v19(); // _ZN7S3033C33v19Ev
  virtual void  v20(); // _ZN7S3033C33v20Ev
  virtual void  v21(); // _ZN7S3033C33v21Ev
  virtual void  v22(); // _ZN7S3033C33v22Ev
  virtual void  v23(); // _ZN7S3033C33v23Ev
  virtual void  v24(); // _ZN7S3033C33v24Ev
  virtual void  v25(); // _ZN7S3033C33v25Ev
  virtual void  v26(); // _ZN7S3033C33v26Ev
  virtual void  v27(); // _ZN7S3033C33v27Ev
  virtual void  v28(); // _ZN7S3033C33v28Ev
  virtual void  v29(); // _ZN7S3033C33v29Ev
  S3033C3(); // tgen
};
//SIG(-1 S3033C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}}}


 S3033C3 ::~S3033C3(){ note_dtor("S3033C3", this);}
void  S3033C3 ::v15(){vfunc_called(this, "_ZN7S3033C33v15Ev");}
void  S3033C3 ::v16(){vfunc_called(this, "_ZN7S3033C33v16Ev");}
void  S3033C3 ::v17(){vfunc_called(this, "_ZN7S3033C33v17Ev");}
void  S3033C3 ::v18(){vfunc_called(this, "_ZN7S3033C33v18Ev");}
void  S3033C3 ::v19(){vfunc_called(this, "_ZN7S3033C33v19Ev");}
void  S3033C3 ::v20(){vfunc_called(this, "_ZN7S3033C33v20Ev");}
void  S3033C3 ::v21(){vfunc_called(this, "_ZN7S3033C33v21Ev");}
void  S3033C3 ::v22(){vfunc_called(this, "_ZN7S3033C33v22Ev");}
void  S3033C3 ::v23(){vfunc_called(this, "_ZN7S3033C33v23Ev");}
void  S3033C3 ::v24(){vfunc_called(this, "_ZN7S3033C33v24Ev");}
void  S3033C3 ::v25(){vfunc_called(this, "_ZN7S3033C33v25Ev");}
void  S3033C3 ::v26(){vfunc_called(this, "_ZN7S3033C33v26Ev");}
void  S3033C3 ::v27(){vfunc_called(this, "_ZN7S3033C33v27Ev");}
void  S3033C3 ::v28(){vfunc_called(this, "_ZN7S3033C33v28Ev");}
void  S3033C3 ::v29(){vfunc_called(this, "_ZN7S3033C33v29Ev");}
S3033C3 ::S3033C3(){ note_ctor("S3033C3", this);} // tgen

static void Test_S3033C3()
{
  extern Class_Descriptor cd_S3033C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3033C3, buf);
    S3033C3 *dp, &lv = *(dp=new (buf) S3033C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3033C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3033C3)");
    check_field_offset(lv, s3033c3f0, ABISELECT(8,4), "S3033C3.s3033c3f0");
    check_field_offset(lv, s3033c3f1, ABISELECT(16,8), "S3033C3.s3033c3f1");
    test_class_info(&lv, &cd_S3033C3);
    dp->~S3033C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3033C3(Test_S3033C3, "S3033C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3033C3C1Ev();
extern void _ZN7S3033C3D1Ev();
Name_Map name_map_S3033C3[] = {
  NSPAIR(_ZN7S3033C3C1Ev),
  NSPAIR(_ZN7S3033C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3033C3[];
extern void _ZN7S3033C3D1Ev();
extern void _ZN7S3033C3D0Ev();
extern void _ZN7S3033C33v15Ev();
extern void _ZN7S3033C33v16Ev();
extern void _ZN7S3033C33v17Ev();
extern void _ZN7S3033C33v18Ev();
extern void _ZN7S3033C33v19Ev();
extern void _ZN7S3033C33v20Ev();
extern void _ZN7S3033C33v21Ev();
extern void _ZN7S3033C33v22Ev();
extern void _ZN7S3033C33v23Ev();
extern void _ZN7S3033C33v24Ev();
extern void _ZN7S3033C33v25Ev();
extern void _ZN7S3033C33v26Ev();
extern void _ZN7S3033C33v27Ev();
extern void _ZN7S3033C33v28Ev();
extern void _ZN7S3033C33v29Ev();
static  VTBL_ENTRY vtc_S3033C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3033C3[0]),
  (VTBL_ENTRY)&_ZN7S3033C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3033C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v29Ev,
};
extern VTBL_ENTRY _ZTI7S3033C3[];
extern  VTBL_ENTRY _ZTV7S3033C3[];
Class_Descriptor cd_S3033C3 = {  "S3033C3", // class name
  0,0,//no base classes
  &(vtc_S3033C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3033C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3033C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3033C2  : S3033C3 {
  ::S3047C24_nt s3033c2f0;
  virtual  ~S3033C2(); // _ZN7S3033C2D1Ev
  virtual void  v30(); // _ZN7S3033C23v30Ev
  virtual void  v31(); // _ZN7S3033C23v31Ev
  virtual void  v32(); // _ZN7S3033C23v32Ev
  virtual void  v33(); // _ZN7S3033C23v33Ev
  virtual void  v34(); // _ZN7S3033C23v34Ev
  S3033C2(); // tgen
};
//SIG(-1 S3033C2) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}}} vd v1 v2 v3 v4 v5 FC6{ m Fp Fi[2] FC7{ m}}}


 S3033C2 ::~S3033C2(){ note_dtor("S3033C2", this);}
void  S3033C2 ::v30(){vfunc_called(this, "_ZN7S3033C23v30Ev");}
void  S3033C2 ::v31(){vfunc_called(this, "_ZN7S3033C23v31Ev");}
void  S3033C2 ::v32(){vfunc_called(this, "_ZN7S3033C23v32Ev");}
void  S3033C2 ::v33(){vfunc_called(this, "_ZN7S3033C23v33Ev");}
void  S3033C2 ::v34(){vfunc_called(this, "_ZN7S3033C23v34Ev");}
S3033C2 ::S3033C2(){ note_ctor("S3033C2", this);} // tgen

static void Test_S3033C2()
{
  extern Class_Descriptor cd_S3033C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3033C2, buf);
    S3033C2 *dp, &lv = *(dp=new (buf) S3033C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3033C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3033C2)");
    check_base_class_offset(lv, (S3033C3*), 0, "S3033C2");
    check_field_offset(lv, s3033c2f0, ABISELECT(32,20), "S3033C2.s3033c2f0");
    test_class_info(&lv, &cd_S3033C2);
    dp->~S3033C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3033C2(Test_S3033C2, "S3033C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3033C2C1Ev();
extern void _ZN7S3033C2D1Ev();
Name_Map name_map_S3033C2[] = {
  NSPAIR(_ZN7S3033C2C1Ev),
  NSPAIR(_ZN7S3033C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3033C3;
extern VTBL_ENTRY _ZTI7S3033C3[];
extern  VTBL_ENTRY _ZTV7S3033C3[];
static Base_Class bases_S3033C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3033C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3033C2[];
extern void _ZN7S3033C2D1Ev();
extern void _ZN7S3033C2D0Ev();
extern void _ZN7S3033C33v15Ev();
extern void _ZN7S3033C33v16Ev();
extern void _ZN7S3033C33v17Ev();
extern void _ZN7S3033C33v18Ev();
extern void _ZN7S3033C33v19Ev();
extern void _ZN7S3033C33v20Ev();
extern void _ZN7S3033C33v21Ev();
extern void _ZN7S3033C33v22Ev();
extern void _ZN7S3033C33v23Ev();
extern void _ZN7S3033C33v24Ev();
extern void _ZN7S3033C33v25Ev();
extern void _ZN7S3033C33v26Ev();
extern void _ZN7S3033C33v27Ev();
extern void _ZN7S3033C33v28Ev();
extern void _ZN7S3033C33v29Ev();
extern void _ZN7S3033C23v30Ev();
extern void _ZN7S3033C23v31Ev();
extern void _ZN7S3033C23v32Ev();
extern void _ZN7S3033C23v33Ev();
extern void _ZN7S3033C23v34Ev();
static  VTBL_ENTRY vtc_S3033C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3033C2[0]),
  (VTBL_ENTRY)&_ZN7S3033C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3033C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3033C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3033C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3033C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3033C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3033C23v34Ev,
};
extern VTBL_ENTRY _ZTI7S3033C2[];
extern  VTBL_ENTRY _ZTV7S3033C2[];
Class_Descriptor cd_S3033C2 = {  "S3033C2", // class name
  bases_S3033C2, 1,
  &(vtc_S3033C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3033C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3033C2),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3033C12  {
  virtual  ~S3033C12(); // _ZN8S3033C12D1Ev
  virtual void  v35(); // _ZN8S3033C123v35Ev
  virtual void  v36(); // _ZN8S3033C123v36Ev
  virtual void  v37(); // _ZN8S3033C123v37Ev
  S3033C12(); // tgen
};
//SIG(-1 S3033C12) C1{ vd v1 v2 v3}


 S3033C12 ::~S3033C12(){ note_dtor("S3033C12", this);}
void  S3033C12 ::v35(){vfunc_called(this, "_ZN8S3033C123v35Ev");}
void  S3033C12 ::v36(){vfunc_called(this, "_ZN8S3033C123v36Ev");}
void  S3033C12 ::v37(){vfunc_called(this, "_ZN8S3033C123v37Ev");}
S3033C12 ::S3033C12(){ note_ctor("S3033C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S3033C12C1Ev();
extern void _ZN8S3033C12D1Ev();
Name_Map name_map_S3033C12[] = {
  NSPAIR(_ZN8S3033C12C1Ev),
  NSPAIR(_ZN8S3033C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3033C12[];
extern void _ZN8S3033C12D1Ev();
extern void _ZN8S3033C12D0Ev();
extern void _ZN8S3033C123v35Ev();
extern void _ZN8S3033C123v36Ev();
extern void _ZN8S3033C123v37Ev();
static  VTBL_ENTRY vtc_S3033C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3033C12[0]),
  (VTBL_ENTRY)&_ZN8S3033C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3033C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3033C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3033C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3033C123v37Ev,
};
extern VTBL_ENTRY _ZTI8S3033C12[];
extern  VTBL_ENTRY _ZTV8S3033C12[];
Class_Descriptor cd_S3033C12 = {  "S3033C12", // class name
  0,0,//no base classes
  &(vtc_S3033C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3033C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3033C12),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  S3033C11  : S3033C12 {
  virtual  ~S3033C11(); // _ZN8S3033C11D1Ev
  virtual void  v38(); // _ZN8S3033C113v38Ev
  virtual void  v39(); // _ZN8S3033C113v39Ev
  virtual void  v40(); // _ZN8S3033C113v40Ev
  virtual void  v41(); // _ZN8S3033C113v41Ev
  virtual void  v42(); // _ZN8S3033C113v42Ev
  virtual void  v43(); // _ZN8S3033C113v43Ev
  S3033C11(); // tgen
};
//SIG(-1 S3033C11) C1{ BC2{ vd v7 v8 v9} vd v1 v2 v3 v4 v5 v6}


 S3033C11 ::~S3033C11(){ note_dtor("S3033C11", this);}
void  S3033C11 ::v38(){vfunc_called(this, "_ZN8S3033C113v38Ev");}
void  S3033C11 ::v39(){vfunc_called(this, "_ZN8S3033C113v39Ev");}
void  S3033C11 ::v40(){vfunc_called(this, "_ZN8S3033C113v40Ev");}
void  S3033C11 ::v41(){vfunc_called(this, "_ZN8S3033C113v41Ev");}
void  S3033C11 ::v42(){vfunc_called(this, "_ZN8S3033C113v42Ev");}
void  S3033C11 ::v43(){vfunc_called(this, "_ZN8S3033C113v43Ev");}
S3033C11 ::S3033C11(){ note_ctor("S3033C11", this);} // tgen

static void Test_S3033C11()
{
  extern Class_Descriptor cd_S3033C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3033C11, buf);
    S3033C11 *dp, &lv = *(dp=new (buf) S3033C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3033C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3033C11)");
    check_base_class_offset(lv, (S3033C12*), 0, "S3033C11");
    test_class_info(&lv, &cd_S3033C11);
    dp->~S3033C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3033C11(Test_S3033C11, "S3033C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3033C11C1Ev();
extern void _ZN8S3033C11D1Ev();
Name_Map name_map_S3033C11[] = {
  NSPAIR(_ZN8S3033C11C1Ev),
  NSPAIR(_ZN8S3033C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3033C12;
extern VTBL_ENTRY _ZTI8S3033C12[];
extern  VTBL_ENTRY _ZTV8S3033C12[];
static Base_Class bases_S3033C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3033C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3033C11[];
extern void _ZN8S3033C11D1Ev();
extern void _ZN8S3033C11D0Ev();
extern void _ZN8S3033C123v35Ev();
extern void _ZN8S3033C123v36Ev();
extern void _ZN8S3033C123v37Ev();
extern void _ZN8S3033C113v38Ev();
extern void _ZN8S3033C113v39Ev();
extern void _ZN8S3033C113v40Ev();
extern void _ZN8S3033C113v41Ev();
extern void _ZN8S3033C113v42Ev();
extern void _ZN8S3033C113v43Ev();
static  VTBL_ENTRY vtc_S3033C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3033C11[0]),
  (VTBL_ENTRY)&_ZN8S3033C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3033C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3033C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3033C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3033C123v37Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v38Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v39Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v40Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v43Ev,
};
extern VTBL_ENTRY _ZTI8S3033C11[];
extern  VTBL_ENTRY _ZTV8S3033C11[];
Class_Descriptor cd_S3033C11 = {  "S3033C11", // class name
  bases_S3033C11, 1,
  &(vtc_S3033C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3033C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3033C11),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3033C10  : S3033C11 {
  ::S2215C37 s3033c10f0;
  ::S3047C15_nt s3033c10f1;
  char s3033c10f2;
  virtual  ~S3033C10(); // _ZN8S3033C10D1Ev
  virtual void  v44(); // _ZN8S3033C103v44Ev
  virtual void  v45(); // _ZN8S3033C103v45Ev
  virtual void  v46(); // _ZN8S3033C103v46Ev
  S3033C10(); // tgen
};
//SIG(-1 S3033C10) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10 v11 v12} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ Fl[4]}} Fc}


 S3033C10 ::~S3033C10(){ note_dtor("S3033C10", this);}
void  S3033C10 ::v44(){vfunc_called(this, "_ZN8S3033C103v44Ev");}
void  S3033C10 ::v45(){vfunc_called(this, "_ZN8S3033C103v45Ev");}
void  S3033C10 ::v46(){vfunc_called(this, "_ZN8S3033C103v46Ev");}
S3033C10 ::S3033C10(){ note_ctor("S3033C10", this);} // tgen

static void Test_S3033C10()
{
  extern Class_Descriptor cd_S3033C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S3033C10, buf);
    S3033C10 *dp, &lv = *(dp=new (buf) S3033C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S3033C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3033C10)");
    check_base_class_offset(lv, (S3033C12*)(S3033C11*), 0, "S3033C10");
    check_base_class_offset(lv, (S3033C11*), 0, "S3033C10");
    check_field_offset(lv, s3033c10f0, ABISELECT(8,4), "S3033C10.s3033c10f0");
    check_field_offset(lv, s3033c10f1, ABISELECT(32,20), "S3033C10.s3033c10f1");
    check_field_offset(lv, s3033c10f2, ABISELECT(64,36), "S3033C10.s3033c10f2");
    test_class_info(&lv, &cd_S3033C10);
    dp->~S3033C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3033C10(Test_S3033C10, "S3033C10", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S3033C10C1Ev();
extern void _ZN8S3033C10D1Ev();
Name_Map name_map_S3033C10[] = {
  NSPAIR(_ZN8S3033C10C1Ev),
  NSPAIR(_ZN8S3033C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3033C12;
extern VTBL_ENTRY _ZTI8S3033C12[];
extern  VTBL_ENTRY _ZTV8S3033C12[];
extern Class_Descriptor cd_S3033C11;
extern VTBL_ENTRY _ZTI8S3033C11[];
extern  VTBL_ENTRY _ZTV8S3033C11[];
static Base_Class bases_S3033C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3033C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3033C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S3033C10[];
extern void _ZN8S3033C10D1Ev();
extern void _ZN8S3033C10D0Ev();
extern void _ZN8S3033C123v35Ev();
extern void _ZN8S3033C123v36Ev();
extern void _ZN8S3033C123v37Ev();
extern void _ZN8S3033C113v38Ev();
extern void _ZN8S3033C113v39Ev();
extern void _ZN8S3033C113v40Ev();
extern void _ZN8S3033C113v41Ev();
extern void _ZN8S3033C113v42Ev();
extern void _ZN8S3033C113v43Ev();
extern void _ZN8S3033C103v44Ev();
extern void _ZN8S3033C103v45Ev();
extern void _ZN8S3033C103v46Ev();
static  VTBL_ENTRY vtc_S3033C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3033C10[0]),
  (VTBL_ENTRY)&_ZN8S3033C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3033C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3033C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3033C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3033C123v37Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v38Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v39Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v40Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3033C103v44Ev,
  (VTBL_ENTRY)&_ZN8S3033C103v45Ev,
  (VTBL_ENTRY)&_ZN8S3033C103v46Ev,
};
extern VTBL_ENTRY _ZTI8S3033C10[];
extern  VTBL_ENTRY _ZTV8S3033C10[];
Class_Descriptor cd_S3033C10 = {  "S3033C10", // class name
  bases_S3033C10, 2,
  &(vtc_S3033C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S3033C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3033C10),16, //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  S3033C1  : S3033C2 , S3033C10 {
  void *s3033c1f0;
  ::S3034C17 s3033c1f1;
  virtual  ~S3033C1(); // _ZN7S3033C1D1Ev
  virtual void  v1(); // _ZN7S3033C12v1Ev
  virtual void  v2(); // _ZN7S3033C12v2Ev
  virtual void  v3(); // _ZN7S3033C12v3Ev
  virtual void  v4(); // _ZN7S3033C12v4Ev
  virtual void  v5(); // _ZN7S3033C12v5Ev
  virtual void  v6(); // _ZN7S3033C12v6Ev
  virtual void  v7(); // _ZN7S3033C12v7Ev
  virtual void  v8(); // _ZN7S3033C12v8Ev
  virtual void  v9(); // _ZN7S3033C12v9Ev
  virtual void  v10(); // _ZN7S3033C13v10Ev
  virtual void  v11(); // _ZN7S3033C13v11Ev
  virtual void  v12(); // _ZN7S3033C13v12Ev
  virtual void  v13(); // _ZN7S3033C13v13Ev
  virtual void  v14(); // _ZN7S3033C13v14Ev
  S3033C1(); // tgen
};
//SIG(1 S3033C1) C1{ BC2{ BC3{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}}} vd v30 v31 v32 v33 v34 FC7{ m Fp Fi[2] FC8{ m}}} BC9{ BC10{ BC11{ vd v35 v36 v37} vd v38 v39 v40 v41 v42 v43} vd v44 v45 v46 FC12{ m Fp Fi[2] FC8} FC13{ m FC14{ Fl[4]}} Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC15{ BC16{} FC17{ BC7 BC18{ vd v49 v50} vd v47 v48} FC19{ BC20{ vd v52 v53} vd v51 FC21{ m Fp Fi FC22{ m}} FC21 FC21} Fc}}


 S3033C1 ::~S3033C1(){ note_dtor("S3033C1", this);}
void  S3033C1 ::v1(){vfunc_called(this, "_ZN7S3033C12v1Ev");}
void  S3033C1 ::v2(){vfunc_called(this, "_ZN7S3033C12v2Ev");}
void  S3033C1 ::v3(){vfunc_called(this, "_ZN7S3033C12v3Ev");}
void  S3033C1 ::v4(){vfunc_called(this, "_ZN7S3033C12v4Ev");}
void  S3033C1 ::v5(){vfunc_called(this, "_ZN7S3033C12v5Ev");}
void  S3033C1 ::v6(){vfunc_called(this, "_ZN7S3033C12v6Ev");}
void  S3033C1 ::v7(){vfunc_called(this, "_ZN7S3033C12v7Ev");}
void  S3033C1 ::v8(){vfunc_called(this, "_ZN7S3033C12v8Ev");}
void  S3033C1 ::v9(){vfunc_called(this, "_ZN7S3033C12v9Ev");}
void  S3033C1 ::v10(){vfunc_called(this, "_ZN7S3033C13v10Ev");}
void  S3033C1 ::v11(){vfunc_called(this, "_ZN7S3033C13v11Ev");}
void  S3033C1 ::v12(){vfunc_called(this, "_ZN7S3033C13v12Ev");}
void  S3033C1 ::v13(){vfunc_called(this, "_ZN7S3033C13v13Ev");}
void  S3033C1 ::v14(){vfunc_called(this, "_ZN7S3033C13v14Ev");}
S3033C1 ::S3033C1(){ note_ctor("S3033C1", this);} // tgen

static void Test_S3033C1()
{
  extern Class_Descriptor cd_S3033C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,37)];
    init_test(&cd_S3033C1, buf);
    S3033C1 *dp, &lv = *(dp=new (buf) S3033C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,144), "sizeof(S3033C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3033C1)");
    check_base_class_offset(lv, (S3033C3*)(S3033C2*), 0, "S3033C1");
    check_base_class_offset(lv, (S3033C2*), 0, "S3033C1");
    check_base_class_offset(lv, (S3033C12*)(S3033C11*)(S3033C10*), ABISELECT(56,36), "S3033C1");
    check_base_class_offset(lv, (S3033C11*)(S3033C10*), ABISELECT(56,36), "S3033C1");
    check_base_class_offset(lv, (S3033C10*), ABISELECT(56,36), "S3033C1");
    check_field_offset(lv, s3033c1f0, ABISELECT(128,76), "S3033C1.s3033c1f0");
    check_field_offset(lv, s3033c1f1, ABISELECT(136,80), "S3033C1.s3033c1f1");
    test_class_info(&lv, &cd_S3033C1);
    dp->~S3033C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3033C1(Test_S3033C1, "S3033C1", ABISELECT(232,144));

#else // __cplusplus

extern void _ZN7S3033C1C1Ev();
extern void _ZN7S3033C1D1Ev();
Name_Map name_map_S3033C1[] = {
  NSPAIR(_ZN7S3033C1C1Ev),
  NSPAIR(_ZN7S3033C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3033C3;
extern VTBL_ENTRY _ZTI7S3033C3[];
extern  VTBL_ENTRY _ZTV7S3033C3[];
extern Class_Descriptor cd_S3033C2;
extern VTBL_ENTRY _ZTI7S3033C2[];
extern  VTBL_ENTRY _ZTV7S3033C2[];
extern Class_Descriptor cd_S3033C12;
extern VTBL_ENTRY _ZTI8S3033C12[];
extern  VTBL_ENTRY _ZTV8S3033C12[];
extern Class_Descriptor cd_S3033C11;
extern VTBL_ENTRY _ZTI8S3033C11[];
extern  VTBL_ENTRY _ZTV8S3033C11[];
extern Class_Descriptor cd_S3033C10;
extern VTBL_ENTRY _ZTI8S3033C10[];
extern  VTBL_ENTRY _ZTV8S3033C10[];
static Base_Class bases_S3033C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3033C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3033C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3033C12,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3033C11,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3033C10,    ABISELECT(56,36), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3033C1[];
extern void _ZN7S3033C1D1Ev();
extern void _ZN7S3033C1D0Ev();
extern void _ZN7S3033C33v15Ev();
extern void _ZN7S3033C33v16Ev();
extern void _ZN7S3033C33v17Ev();
extern void _ZN7S3033C33v18Ev();
extern void _ZN7S3033C33v19Ev();
extern void _ZN7S3033C33v20Ev();
extern void _ZN7S3033C33v21Ev();
extern void _ZN7S3033C33v22Ev();
extern void _ZN7S3033C33v23Ev();
extern void _ZN7S3033C33v24Ev();
extern void _ZN7S3033C33v25Ev();
extern void _ZN7S3033C33v26Ev();
extern void _ZN7S3033C33v27Ev();
extern void _ZN7S3033C33v28Ev();
extern void _ZN7S3033C33v29Ev();
extern void _ZN7S3033C23v30Ev();
extern void _ZN7S3033C23v31Ev();
extern void _ZN7S3033C23v32Ev();
extern void _ZN7S3033C23v33Ev();
extern void _ZN7S3033C23v34Ev();
extern void _ZN7S3033C12v1Ev();
extern void _ZN7S3033C12v2Ev();
extern void _ZN7S3033C12v3Ev();
extern void _ZN7S3033C12v4Ev();
extern void _ZN7S3033C12v5Ev();
extern void _ZN7S3033C12v6Ev();
extern void _ZN7S3033C12v7Ev();
extern void _ZN7S3033C12v8Ev();
extern void _ZN7S3033C12v9Ev();
extern void _ZN7S3033C13v10Ev();
extern void _ZN7S3033C13v11Ev();
extern void _ZN7S3033C13v12Ev();
extern void _ZN7S3033C13v13Ev();
extern void _ZN7S3033C13v14Ev();
extern void ABISELECT(_ZThn56_N7S3033C1D1Ev,_ZThn36_N7S3033C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3033C1D0Ev,_ZThn36_N7S3033C1D0Ev)();
extern void _ZN8S3033C123v35Ev();
extern void _ZN8S3033C123v36Ev();
extern void _ZN8S3033C123v37Ev();
extern void _ZN8S3033C113v38Ev();
extern void _ZN8S3033C113v39Ev();
extern void _ZN8S3033C113v40Ev();
extern void _ZN8S3033C113v41Ev();
extern void _ZN8S3033C113v42Ev();
extern void _ZN8S3033C113v43Ev();
extern void _ZN8S3033C103v44Ev();
extern void _ZN8S3033C103v45Ev();
extern void _ZN8S3033C103v46Ev();
static  VTBL_ENTRY vtc_S3033C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3033C1[0]),
  (VTBL_ENTRY)&_ZN7S3033C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3033C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3033C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3033C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3033C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3033C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3033C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3033C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3033C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3033C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3033C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3033C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3033C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3033C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3033C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3033C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3033C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3033C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3033C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3033C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3033C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3033C13v14Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S3033C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3033C1D1Ev,_ZThn36_N7S3033C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3033C1D0Ev,_ZThn36_N7S3033C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3033C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3033C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3033C123v37Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v38Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v39Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v40Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3033C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3033C103v44Ev,
  (VTBL_ENTRY)&_ZN8S3033C103v45Ev,
  (VTBL_ENTRY)&_ZN8S3033C103v46Ev,
};
extern VTBL_ENTRY _ZTI7S3033C1[];
extern  VTBL_ENTRY _ZTV7S3033C1[];
Class_Descriptor cd_S3033C1 = {  "S3033C1", // class name
  bases_S3033C1, 5,
  &(vtc_S3033C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,144), // object size
  NSPAIRA(_ZTI7S3033C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3033C1),54, //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  S3035C3  {
  void *s3035c3f0;
  ::S2215C25 s3035c3f1;
  virtual  ~S3035C3(); // _ZN7S3035C3D1Ev
  virtual void  v15(); // _ZN7S3035C33v15Ev
  virtual void  v16(); // _ZN7S3035C33v16Ev
  virtual void  v17(); // _ZN7S3035C33v17Ev
  virtual void  v18(); // _ZN7S3035C33v18Ev
  virtual void  v19(); // _ZN7S3035C33v19Ev
  virtual void  v20(); // _ZN7S3035C33v20Ev
  virtual void  v21(); // _ZN7S3035C33v21Ev
  virtual void  v22(); // _ZN7S3035C33v22Ev
  virtual void  v23(); // _ZN7S3035C33v23Ev
  virtual void  v24(); // _ZN7S3035C33v24Ev
  virtual void  v25(); // _ZN7S3035C33v25Ev
  virtual void  v26(); // _ZN7S3035C33v26Ev
  virtual void  v27(); // _ZN7S3035C33v27Ev
  virtual void  v28(); // _ZN7S3035C33v28Ev
  virtual void  v29(); // _ZN7S3035C33v29Ev
  S3035C3(); // tgen
};
//SIG(-1 S3035C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}}}


 S3035C3 ::~S3035C3(){ note_dtor("S3035C3", this);}
void  S3035C3 ::v15(){vfunc_called(this, "_ZN7S3035C33v15Ev");}
void  S3035C3 ::v16(){vfunc_called(this, "_ZN7S3035C33v16Ev");}
void  S3035C3 ::v17(){vfunc_called(this, "_ZN7S3035C33v17Ev");}
void  S3035C3 ::v18(){vfunc_called(this, "_ZN7S3035C33v18Ev");}
void  S3035C3 ::v19(){vfunc_called(this, "_ZN7S3035C33v19Ev");}
void  S3035C3 ::v20(){vfunc_called(this, "_ZN7S3035C33v20Ev");}
void  S3035C3 ::v21(){vfunc_called(this, "_ZN7S3035C33v21Ev");}
void  S3035C3 ::v22(){vfunc_called(this, "_ZN7S3035C33v22Ev");}
void  S3035C3 ::v23(){vfunc_called(this, "_ZN7S3035C33v23Ev");}
void  S3035C3 ::v24(){vfunc_called(this, "_ZN7S3035C33v24Ev");}
void  S3035C3 ::v25(){vfunc_called(this, "_ZN7S3035C33v25Ev");}
void  S3035C3 ::v26(){vfunc_called(this, "_ZN7S3035C33v26Ev");}
void  S3035C3 ::v27(){vfunc_called(this, "_ZN7S3035C33v27Ev");}
void  S3035C3 ::v28(){vfunc_called(this, "_ZN7S3035C33v28Ev");}
void  S3035C3 ::v29(){vfunc_called(this, "_ZN7S3035C33v29Ev");}
S3035C3 ::S3035C3(){ note_ctor("S3035C3", this);} // tgen

static void Test_S3035C3()
{
  extern Class_Descriptor cd_S3035C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3035C3, buf);
    S3035C3 *dp, &lv = *(dp=new (buf) S3035C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3035C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3035C3)");
    check_field_offset(lv, s3035c3f0, ABISELECT(8,4), "S3035C3.s3035c3f0");
    check_field_offset(lv, s3035c3f1, ABISELECT(16,8), "S3035C3.s3035c3f1");
    test_class_info(&lv, &cd_S3035C3);
    dp->~S3035C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3035C3(Test_S3035C3, "S3035C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3035C3C1Ev();
extern void _ZN7S3035C3D1Ev();
Name_Map name_map_S3035C3[] = {
  NSPAIR(_ZN7S3035C3C1Ev),
  NSPAIR(_ZN7S3035C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3035C3[];
extern void _ZN7S3035C3D1Ev();
extern void _ZN7S3035C3D0Ev();
extern void _ZN7S3035C33v15Ev();
extern void _ZN7S3035C33v16Ev();
extern void _ZN7S3035C33v17Ev();
extern void _ZN7S3035C33v18Ev();
extern void _ZN7S3035C33v19Ev();
extern void _ZN7S3035C33v20Ev();
extern void _ZN7S3035C33v21Ev();
extern void _ZN7S3035C33v22Ev();
extern void _ZN7S3035C33v23Ev();
extern void _ZN7S3035C33v24Ev();
extern void _ZN7S3035C33v25Ev();
extern void _ZN7S3035C33v26Ev();
extern void _ZN7S3035C33v27Ev();
extern void _ZN7S3035C33v28Ev();
extern void _ZN7S3035C33v29Ev();
static  VTBL_ENTRY vtc_S3035C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3035C3[0]),
  (VTBL_ENTRY)&_ZN7S3035C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3035C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v29Ev,
};
extern VTBL_ENTRY _ZTI7S3035C3[];
extern  VTBL_ENTRY _ZTV7S3035C3[];
Class_Descriptor cd_S3035C3 = {  "S3035C3", // class name
  0,0,//no base classes
  &(vtc_S3035C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3035C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3035C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3035C2  : S3035C3 {
  ::S3047C24_nt s3035c2f0;
  virtual  ~S3035C2(); // _ZN7S3035C2D1Ev
  virtual void  v30(); // _ZN7S3035C23v30Ev
  virtual void  v31(); // _ZN7S3035C23v31Ev
  virtual void  v32(); // _ZN7S3035C23v32Ev
  virtual void  v33(); // _ZN7S3035C23v33Ev
  virtual void  v34(); // _ZN7S3035C23v34Ev
  S3035C2(); // tgen
};
//SIG(-1 S3035C2) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}}} vd v1 v2 v3 v4 v5 FC6{ m Fp Fi[2] FC7{ m}}}


 S3035C2 ::~S3035C2(){ note_dtor("S3035C2", this);}
void  S3035C2 ::v30(){vfunc_called(this, "_ZN7S3035C23v30Ev");}
void  S3035C2 ::v31(){vfunc_called(this, "_ZN7S3035C23v31Ev");}
void  S3035C2 ::v32(){vfunc_called(this, "_ZN7S3035C23v32Ev");}
void  S3035C2 ::v33(){vfunc_called(this, "_ZN7S3035C23v33Ev");}
void  S3035C2 ::v34(){vfunc_called(this, "_ZN7S3035C23v34Ev");}
S3035C2 ::S3035C2(){ note_ctor("S3035C2", this);} // tgen

static void Test_S3035C2()
{
  extern Class_Descriptor cd_S3035C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3035C2, buf);
    S3035C2 *dp, &lv = *(dp=new (buf) S3035C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3035C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3035C2)");
    check_base_class_offset(lv, (S3035C3*), 0, "S3035C2");
    check_field_offset(lv, s3035c2f0, ABISELECT(32,20), "S3035C2.s3035c2f0");
    test_class_info(&lv, &cd_S3035C2);
    dp->~S3035C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3035C2(Test_S3035C2, "S3035C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3035C2C1Ev();
extern void _ZN7S3035C2D1Ev();
Name_Map name_map_S3035C2[] = {
  NSPAIR(_ZN7S3035C2C1Ev),
  NSPAIR(_ZN7S3035C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3035C3;
extern VTBL_ENTRY _ZTI7S3035C3[];
extern  VTBL_ENTRY _ZTV7S3035C3[];
static Base_Class bases_S3035C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3035C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3035C2[];
extern void _ZN7S3035C2D1Ev();
extern void _ZN7S3035C2D0Ev();
extern void _ZN7S3035C33v15Ev();
extern void _ZN7S3035C33v16Ev();
extern void _ZN7S3035C33v17Ev();
extern void _ZN7S3035C33v18Ev();
extern void _ZN7S3035C33v19Ev();
extern void _ZN7S3035C33v20Ev();
extern void _ZN7S3035C33v21Ev();
extern void _ZN7S3035C33v22Ev();
extern void _ZN7S3035C33v23Ev();
extern void _ZN7S3035C33v24Ev();
extern void _ZN7S3035C33v25Ev();
extern void _ZN7S3035C33v26Ev();
extern void _ZN7S3035C33v27Ev();
extern void _ZN7S3035C33v28Ev();
extern void _ZN7S3035C33v29Ev();
extern void _ZN7S3035C23v30Ev();
extern void _ZN7S3035C23v31Ev();
extern void _ZN7S3035C23v32Ev();
extern void _ZN7S3035C23v33Ev();
extern void _ZN7S3035C23v34Ev();
static  VTBL_ENTRY vtc_S3035C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3035C2[0]),
  (VTBL_ENTRY)&_ZN7S3035C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3035C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3035C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3035C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3035C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3035C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3035C23v34Ev,
};
extern VTBL_ENTRY _ZTI7S3035C2[];
extern  VTBL_ENTRY _ZTV7S3035C2[];
Class_Descriptor cd_S3035C2 = {  "S3035C2", // class name
  bases_S3035C2, 1,
  &(vtc_S3035C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3035C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3035C2),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3035C12  {
  virtual  ~S3035C12(); // _ZN8S3035C12D1Ev
  virtual void  v35(); // _ZN8S3035C123v35Ev
  virtual void  v36(); // _ZN8S3035C123v36Ev
  virtual void  v37(); // _ZN8S3035C123v37Ev
  S3035C12(); // tgen
};
//SIG(-1 S3035C12) C1{ vd v1 v2 v3}


 S3035C12 ::~S3035C12(){ note_dtor("S3035C12", this);}
void  S3035C12 ::v35(){vfunc_called(this, "_ZN8S3035C123v35Ev");}
void  S3035C12 ::v36(){vfunc_called(this, "_ZN8S3035C123v36Ev");}
void  S3035C12 ::v37(){vfunc_called(this, "_ZN8S3035C123v37Ev");}
S3035C12 ::S3035C12(){ note_ctor("S3035C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S3035C12C1Ev();
extern void _ZN8S3035C12D1Ev();
Name_Map name_map_S3035C12[] = {
  NSPAIR(_ZN8S3035C12C1Ev),
  NSPAIR(_ZN8S3035C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3035C12[];
extern void _ZN8S3035C12D1Ev();
extern void _ZN8S3035C12D0Ev();
extern void _ZN8S3035C123v35Ev();
extern void _ZN8S3035C123v36Ev();
extern void _ZN8S3035C123v37Ev();
static  VTBL_ENTRY vtc_S3035C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3035C12[0]),
  (VTBL_ENTRY)&_ZN8S3035C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3035C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3035C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3035C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3035C123v37Ev,
};
extern VTBL_ENTRY _ZTI8S3035C12[];
extern  VTBL_ENTRY _ZTV8S3035C12[];
Class_Descriptor cd_S3035C12 = {  "S3035C12", // class name
  0,0,//no base classes
  &(vtc_S3035C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3035C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3035C12),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  S3035C11  : S3035C12 {
  virtual  ~S3035C11(); // _ZN8S3035C11D1Ev
  virtual void  v38(); // _ZN8S3035C113v38Ev
  virtual void  v39(); // _ZN8S3035C113v39Ev
  virtual void  v40(); // _ZN8S3035C113v40Ev
  virtual void  v41(); // _ZN8S3035C113v41Ev
  virtual void  v42(); // _ZN8S3035C113v42Ev
  virtual void  v43(); // _ZN8S3035C113v43Ev
  S3035C11(); // tgen
};
//SIG(-1 S3035C11) C1{ BC2{ vd v7 v8 v9} vd v1 v2 v3 v4 v5 v6}


 S3035C11 ::~S3035C11(){ note_dtor("S3035C11", this);}
void  S3035C11 ::v38(){vfunc_called(this, "_ZN8S3035C113v38Ev");}
void  S3035C11 ::v39(){vfunc_called(this, "_ZN8S3035C113v39Ev");}
void  S3035C11 ::v40(){vfunc_called(this, "_ZN8S3035C113v40Ev");}
void  S3035C11 ::v41(){vfunc_called(this, "_ZN8S3035C113v41Ev");}
void  S3035C11 ::v42(){vfunc_called(this, "_ZN8S3035C113v42Ev");}
void  S3035C11 ::v43(){vfunc_called(this, "_ZN8S3035C113v43Ev");}
S3035C11 ::S3035C11(){ note_ctor("S3035C11", this);} // tgen

static void Test_S3035C11()
{
  extern Class_Descriptor cd_S3035C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3035C11, buf);
    S3035C11 *dp, &lv = *(dp=new (buf) S3035C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3035C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3035C11)");
    check_base_class_offset(lv, (S3035C12*), 0, "S3035C11");
    test_class_info(&lv, &cd_S3035C11);
    dp->~S3035C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3035C11(Test_S3035C11, "S3035C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3035C11C1Ev();
extern void _ZN8S3035C11D1Ev();
Name_Map name_map_S3035C11[] = {
  NSPAIR(_ZN8S3035C11C1Ev),
  NSPAIR(_ZN8S3035C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3035C12;
extern VTBL_ENTRY _ZTI8S3035C12[];
extern  VTBL_ENTRY _ZTV8S3035C12[];
static Base_Class bases_S3035C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3035C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3035C11[];
extern void _ZN8S3035C11D1Ev();
extern void _ZN8S3035C11D0Ev();
extern void _ZN8S3035C123v35Ev();
extern void _ZN8S3035C123v36Ev();
extern void _ZN8S3035C123v37Ev();
extern void _ZN8S3035C113v38Ev();
extern void _ZN8S3035C113v39Ev();
extern void _ZN8S3035C113v40Ev();
extern void _ZN8S3035C113v41Ev();
extern void _ZN8S3035C113v42Ev();
extern void _ZN8S3035C113v43Ev();
static  VTBL_ENTRY vtc_S3035C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3035C11[0]),
  (VTBL_ENTRY)&_ZN8S3035C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3035C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3035C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3035C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3035C123v37Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v38Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v39Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v40Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v43Ev,
};
extern VTBL_ENTRY _ZTI8S3035C11[];
extern  VTBL_ENTRY _ZTV8S3035C11[];
Class_Descriptor cd_S3035C11 = {  "S3035C11", // class name
  bases_S3035C11, 1,
  &(vtc_S3035C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3035C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3035C11),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3035C10  : S3035C11 {
  ::S2215C37 s3035c10f0;
  ::S3049C15_nt s3035c10f1;
  char s3035c10f2;
  virtual  ~S3035C10(); // _ZN8S3035C10D1Ev
  virtual void  v44(); // _ZN8S3035C103v44Ev
  virtual void  v45(); // _ZN8S3035C103v45Ev
  virtual void  v46(); // _ZN8S3035C103v46Ev
  S3035C10(); // tgen
};
//SIG(-1 S3035C10) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10 v11 v12} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S3035C10 ::~S3035C10(){ note_dtor("S3035C10", this);}
void  S3035C10 ::v44(){vfunc_called(this, "_ZN8S3035C103v44Ev");}
void  S3035C10 ::v45(){vfunc_called(this, "_ZN8S3035C103v45Ev");}
void  S3035C10 ::v46(){vfunc_called(this, "_ZN8S3035C103v46Ev");}
S3035C10 ::S3035C10(){ note_ctor("S3035C10", this);} // tgen

static void Test_S3035C10()
{
  extern Class_Descriptor cd_S3035C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S3035C10, buf);
    S3035C10 *dp, &lv = *(dp=new (buf) S3035C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S3035C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3035C10)");
    check_base_class_offset(lv, (S3035C12*)(S3035C11*), 0, "S3035C10");
    check_base_class_offset(lv, (S3035C11*), 0, "S3035C10");
    check_field_offset(lv, s3035c10f0, ABISELECT(8,4), "S3035C10.s3035c10f0");
    check_field_offset(lv, s3035c10f1, ABISELECT(32,20), "S3035C10.s3035c10f1");
    check_field_offset(lv, s3035c10f2, ABISELECT(64,52), "S3035C10.s3035c10f2");
    test_class_info(&lv, &cd_S3035C10);
    dp->~S3035C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3035C10(Test_S3035C10, "S3035C10", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S3035C10C1Ev();
extern void _ZN8S3035C10D1Ev();
Name_Map name_map_S3035C10[] = {
  NSPAIR(_ZN8S3035C10C1Ev),
  NSPAIR(_ZN8S3035C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3035C12;
extern VTBL_ENTRY _ZTI8S3035C12[];
extern  VTBL_ENTRY _ZTV8S3035C12[];
extern Class_Descriptor cd_S3035C11;
extern VTBL_ENTRY _ZTI8S3035C11[];
extern  VTBL_ENTRY _ZTV8S3035C11[];
static Base_Class bases_S3035C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3035C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3035C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S3035C10[];
extern void _ZN8S3035C10D1Ev();
extern void _ZN8S3035C10D0Ev();
extern void _ZN8S3035C123v35Ev();
extern void _ZN8S3035C123v36Ev();
extern void _ZN8S3035C123v37Ev();
extern void _ZN8S3035C113v38Ev();
extern void _ZN8S3035C113v39Ev();
extern void _ZN8S3035C113v40Ev();
extern void _ZN8S3035C113v41Ev();
extern void _ZN8S3035C113v42Ev();
extern void _ZN8S3035C113v43Ev();
extern void _ZN8S3035C103v44Ev();
extern void _ZN8S3035C103v45Ev();
extern void _ZN8S3035C103v46Ev();
static  VTBL_ENTRY vtc_S3035C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3035C10[0]),
  (VTBL_ENTRY)&_ZN8S3035C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3035C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3035C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3035C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3035C123v37Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v38Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v39Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v40Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3035C103v44Ev,
  (VTBL_ENTRY)&_ZN8S3035C103v45Ev,
  (VTBL_ENTRY)&_ZN8S3035C103v46Ev,
};
extern VTBL_ENTRY _ZTI8S3035C10[];
extern  VTBL_ENTRY _ZTV8S3035C10[];
Class_Descriptor cd_S3035C10 = {  "S3035C10", // class name
  bases_S3035C10, 2,
  &(vtc_S3035C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S3035C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3035C10),16, //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  S3035C1  : S3035C2 , S3035C10 {
  void *s3035c1f0;
  ::S3034C17 s3035c1f1;
  virtual  ~S3035C1(); // _ZN7S3035C1D1Ev
  virtual void  v1(); // _ZN7S3035C12v1Ev
  virtual void  v2(); // _ZN7S3035C12v2Ev
  virtual void  v3(); // _ZN7S3035C12v3Ev
  virtual void  v4(); // _ZN7S3035C12v4Ev
  virtual void  v5(); // _ZN7S3035C12v5Ev
  virtual void  v6(); // _ZN7S3035C12v6Ev
  virtual void  v7(); // _ZN7S3035C12v7Ev
  virtual void  v8(); // _ZN7S3035C12v8Ev
  virtual void  v9(); // _ZN7S3035C12v9Ev
  virtual void  v10(); // _ZN7S3035C13v10Ev
  virtual void  v11(); // _ZN7S3035C13v11Ev
  virtual void  v12(); // _ZN7S3035C13v12Ev
  virtual void  v13(); // _ZN7S3035C13v13Ev
  virtual void  v14(); // _ZN7S3035C13v14Ev
  S3035C1(); // tgen
};
//SIG(1 S3035C1) C1{ BC2{ BC3{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}}} vd v30 v31 v32 v33 v34 FC7{ m Fp Fi[2] FC8{ m}}} BC9{ BC10{ BC11{ vd v35 v36 v37} vd v38 v39 v40 v41 v42 v43} vd v44 v45 v46 FC12{ m Fp Fi[2] FC8} FC13{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC14{ BC15{} FC16{ BC7 BC17{ vd v49 v50} vd v47 v48} FC18{ BC19{ vd v52 v53} vd v51 FC20{ m Fp Fi FC21{ m}} FC20 FC20} Fc}}


 S3035C1 ::~S3035C1(){ note_dtor("S3035C1", this);}
void  S3035C1 ::v1(){vfunc_called(this, "_ZN7S3035C12v1Ev");}
void  S3035C1 ::v2(){vfunc_called(this, "_ZN7S3035C12v2Ev");}
void  S3035C1 ::v3(){vfunc_called(this, "_ZN7S3035C12v3Ev");}
void  S3035C1 ::v4(){vfunc_called(this, "_ZN7S3035C12v4Ev");}
void  S3035C1 ::v5(){vfunc_called(this, "_ZN7S3035C12v5Ev");}
void  S3035C1 ::v6(){vfunc_called(this, "_ZN7S3035C12v6Ev");}
void  S3035C1 ::v7(){vfunc_called(this, "_ZN7S3035C12v7Ev");}
void  S3035C1 ::v8(){vfunc_called(this, "_ZN7S3035C12v8Ev");}
void  S3035C1 ::v9(){vfunc_called(this, "_ZN7S3035C12v9Ev");}
void  S3035C1 ::v10(){vfunc_called(this, "_ZN7S3035C13v10Ev");}
void  S3035C1 ::v11(){vfunc_called(this, "_ZN7S3035C13v11Ev");}
void  S3035C1 ::v12(){vfunc_called(this, "_ZN7S3035C13v12Ev");}
void  S3035C1 ::v13(){vfunc_called(this, "_ZN7S3035C13v13Ev");}
void  S3035C1 ::v14(){vfunc_called(this, "_ZN7S3035C13v14Ev");}
S3035C1 ::S3035C1(){ note_ctor("S3035C1", this);} // tgen

static void Test_S3035C1()
{
  extern Class_Descriptor cd_S3035C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,41)];
    init_test(&cd_S3035C1, buf);
    S3035C1 *dp, &lv = *(dp=new (buf) S3035C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,160), "sizeof(S3035C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3035C1)");
    check_base_class_offset(lv, (S3035C3*)(S3035C2*), 0, "S3035C1");
    check_base_class_offset(lv, (S3035C2*), 0, "S3035C1");
    check_base_class_offset(lv, (S3035C12*)(S3035C11*)(S3035C10*), ABISELECT(56,36), "S3035C1");
    check_base_class_offset(lv, (S3035C11*)(S3035C10*), ABISELECT(56,36), "S3035C1");
    check_base_class_offset(lv, (S3035C10*), ABISELECT(56,36), "S3035C1");
    check_field_offset(lv, s3035c1f0, ABISELECT(128,92), "S3035C1.s3035c1f0");
    check_field_offset(lv, s3035c1f1, ABISELECT(136,96), "S3035C1.s3035c1f1");
    test_class_info(&lv, &cd_S3035C1);
    dp->~S3035C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3035C1(Test_S3035C1, "S3035C1", ABISELECT(232,160));

#else // __cplusplus

extern void _ZN7S3035C1C1Ev();
extern void _ZN7S3035C1D1Ev();
Name_Map name_map_S3035C1[] = {
  NSPAIR(_ZN7S3035C1C1Ev),
  NSPAIR(_ZN7S3035C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3035C3;
extern VTBL_ENTRY _ZTI7S3035C3[];
extern  VTBL_ENTRY _ZTV7S3035C3[];
extern Class_Descriptor cd_S3035C2;
extern VTBL_ENTRY _ZTI7S3035C2[];
extern  VTBL_ENTRY _ZTV7S3035C2[];
extern Class_Descriptor cd_S3035C12;
extern VTBL_ENTRY _ZTI8S3035C12[];
extern  VTBL_ENTRY _ZTV8S3035C12[];
extern Class_Descriptor cd_S3035C11;
extern VTBL_ENTRY _ZTI8S3035C11[];
extern  VTBL_ENTRY _ZTV8S3035C11[];
extern Class_Descriptor cd_S3035C10;
extern VTBL_ENTRY _ZTI8S3035C10[];
extern  VTBL_ENTRY _ZTV8S3035C10[];
static Base_Class bases_S3035C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3035C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3035C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3035C12,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3035C11,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3035C10,    ABISELECT(56,36), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3035C1[];
extern void _ZN7S3035C1D1Ev();
extern void _ZN7S3035C1D0Ev();
extern void _ZN7S3035C33v15Ev();
extern void _ZN7S3035C33v16Ev();
extern void _ZN7S3035C33v17Ev();
extern void _ZN7S3035C33v18Ev();
extern void _ZN7S3035C33v19Ev();
extern void _ZN7S3035C33v20Ev();
extern void _ZN7S3035C33v21Ev();
extern void _ZN7S3035C33v22Ev();
extern void _ZN7S3035C33v23Ev();
extern void _ZN7S3035C33v24Ev();
extern void _ZN7S3035C33v25Ev();
extern void _ZN7S3035C33v26Ev();
extern void _ZN7S3035C33v27Ev();
extern void _ZN7S3035C33v28Ev();
extern void _ZN7S3035C33v29Ev();
extern void _ZN7S3035C23v30Ev();
extern void _ZN7S3035C23v31Ev();
extern void _ZN7S3035C23v32Ev();
extern void _ZN7S3035C23v33Ev();
extern void _ZN7S3035C23v34Ev();
extern void _ZN7S3035C12v1Ev();
extern void _ZN7S3035C12v2Ev();
extern void _ZN7S3035C12v3Ev();
extern void _ZN7S3035C12v4Ev();
extern void _ZN7S3035C12v5Ev();
extern void _ZN7S3035C12v6Ev();
extern void _ZN7S3035C12v7Ev();
extern void _ZN7S3035C12v8Ev();
extern void _ZN7S3035C12v9Ev();
extern void _ZN7S3035C13v10Ev();
extern void _ZN7S3035C13v11Ev();
extern void _ZN7S3035C13v12Ev();
extern void _ZN7S3035C13v13Ev();
extern void _ZN7S3035C13v14Ev();
extern void ABISELECT(_ZThn56_N7S3035C1D1Ev,_ZThn36_N7S3035C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3035C1D0Ev,_ZThn36_N7S3035C1D0Ev)();
extern void _ZN8S3035C123v35Ev();
extern void _ZN8S3035C123v36Ev();
extern void _ZN8S3035C123v37Ev();
extern void _ZN8S3035C113v38Ev();
extern void _ZN8S3035C113v39Ev();
extern void _ZN8S3035C113v40Ev();
extern void _ZN8S3035C113v41Ev();
extern void _ZN8S3035C113v42Ev();
extern void _ZN8S3035C113v43Ev();
extern void _ZN8S3035C103v44Ev();
extern void _ZN8S3035C103v45Ev();
extern void _ZN8S3035C103v46Ev();
static  VTBL_ENTRY vtc_S3035C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3035C1[0]),
  (VTBL_ENTRY)&_ZN7S3035C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3035C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3035C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3035C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3035C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3035C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3035C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3035C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3035C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3035C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3035C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3035C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3035C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3035C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3035C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3035C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3035C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3035C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3035C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3035C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3035C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3035C13v14Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S3035C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3035C1D1Ev,_ZThn36_N7S3035C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3035C1D0Ev,_ZThn36_N7S3035C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3035C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3035C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3035C123v37Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v38Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v39Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v40Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3035C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3035C103v44Ev,
  (VTBL_ENTRY)&_ZN8S3035C103v45Ev,
  (VTBL_ENTRY)&_ZN8S3035C103v46Ev,
};
extern VTBL_ENTRY _ZTI7S3035C1[];
extern  VTBL_ENTRY _ZTV7S3035C1[];
Class_Descriptor cd_S3035C1 = {  "S3035C1", // class name
  bases_S3035C1, 5,
  &(vtc_S3035C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,160), // object size
  NSPAIRA(_ZTI7S3035C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3035C1),54, //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  S292C5  : S770C5_nt {
  virtual void  v10(); // _ZN6S292C53v10Ev
  virtual void  v11(); // _ZN6S292C53v11Ev
  virtual void  v12(); // _ZN6S292C53v12Ev
  virtual void  v13(); // _ZN6S292C53v13Ev
  virtual void  v14(); // _ZN6S292C53v14Ev
  ~S292C5(); // tgen
  S292C5(); // tgen
};
//SIG(-1 S292C5) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S292C5 ::v10(){vfunc_called(this, "_ZN6S292C53v10Ev");}
void  S292C5 ::v11(){vfunc_called(this, "_ZN6S292C53v11Ev");}
void  S292C5 ::v12(){vfunc_called(this, "_ZN6S292C53v12Ev");}
void  S292C5 ::v13(){vfunc_called(this, "_ZN6S292C53v13Ev");}
void  S292C5 ::v14(){vfunc_called(this, "_ZN6S292C53v14Ev");}
S292C5 ::~S292C5(){ note_dtor("S292C5", this);} // tgen
S292C5 ::S292C5(){ note_ctor("S292C5", this);} // tgen

static void Test_S292C5()
{
  extern Class_Descriptor cd_S292C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S292C5, buf);
    S292C5 *dp, &lv = *(dp=new (buf) S292C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S292C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S292C5)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S292C5");
    test_class_info(&lv, &cd_S292C5);
    dp->~S292C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS292C5(Test_S292C5, "S292C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S292C5C1Ev();
extern void _ZN6S292C5D1Ev();
Name_Map name_map_S292C5[] = {
  NSPAIR(_ZN6S292C5C1Ev),
  NSPAIR(_ZN6S292C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S292C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S292C5[];
extern void _ZN6S292C5D1Ev();
extern void _ZN6S292C5D0Ev();
extern void _ZN6S292C53v10Ev();
extern void _ZN6S292C53v11Ev();
extern void _ZN6S292C53v12Ev();
extern void _ZN6S292C53v13Ev();
extern void _ZN6S292C53v14Ev();
static  VTBL_ENTRY vtc_S292C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S292C5[0]),
  (VTBL_ENTRY)&_ZN6S292C5D1Ev,
  (VTBL_ENTRY)&_ZN6S292C5D0Ev,
  (VTBL_ENTRY)&_ZN6S292C53v10Ev,
  (VTBL_ENTRY)&_ZN6S292C53v11Ev,
  (VTBL_ENTRY)&_ZN6S292C53v12Ev,
  (VTBL_ENTRY)&_ZN6S292C53v13Ev,
  (VTBL_ENTRY)&_ZN6S292C53v14Ev,
};
extern VTBL_ENTRY _ZTI6S292C5[];
extern  VTBL_ENTRY _ZTV6S292C5[];
Class_Descriptor cd_S292C5 = {  "S292C5", // class name
  bases_S292C5, 1,
  &(vtc_S292C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S292C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S292C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S292C4  : S292C5 {
  void *s292c4f0[3];
  ::S770C6_nt s292c4f1;
  virtual void  v15(); // _ZN6S292C43v15Ev
  virtual void  v16(); // _ZN6S292C43v16Ev
  virtual void  v17(); // _ZN6S292C43v17Ev
  virtual void  v18(); // _ZN6S292C43v18Ev
  virtual void  v19(); // _ZN6S292C43v19Ev
  virtual void  v20(); // _ZN6S292C43v20Ev
  virtual void  v21(); // _ZN6S292C43v21Ev
  virtual void  v22(); // _ZN6S292C43v22Ev
  virtual void  v23(); // _ZN6S292C43v23Ev
  virtual void  v24(); // _ZN6S292C43v24Ev
  virtual void  v25(); // _ZN6S292C43v25Ev
  ~S292C4(); // tgen
  S292C4(); // tgen
};
//SIG(-1 S292C4) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S292C4 ::v15(){vfunc_called(this, "_ZN6S292C43v15Ev");}
void  S292C4 ::v16(){vfunc_called(this, "_ZN6S292C43v16Ev");}
void  S292C4 ::v17(){vfunc_called(this, "_ZN6S292C43v17Ev");}
void  S292C4 ::v18(){vfunc_called(this, "_ZN6S292C43v18Ev");}
void  S292C4 ::v19(){vfunc_called(this, "_ZN6S292C43v19Ev");}
void  S292C4 ::v20(){vfunc_called(this, "_ZN6S292C43v20Ev");}
void  S292C4 ::v21(){vfunc_called(this, "_ZN6S292C43v21Ev");}
void  S292C4 ::v22(){vfunc_called(this, "_ZN6S292C43v22Ev");}
void  S292C4 ::v23(){vfunc_called(this, "_ZN6S292C43v23Ev");}
void  S292C4 ::v24(){vfunc_called(this, "_ZN6S292C43v24Ev");}
void  S292C4 ::v25(){vfunc_called(this, "_ZN6S292C43v25Ev");}
S292C4 ::~S292C4(){ note_dtor("S292C4", this);} // tgen
S292C4 ::S292C4(){ note_ctor("S292C4", this);} // tgen

static void Test_S292C4()
{
  extern Class_Descriptor cd_S292C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S292C4, buf);
    S292C4 *dp, &lv = *(dp=new (buf) S292C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S292C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S292C4)");
    check_base_class_offset(lv, (S770C5_nt*)(S292C5*), 0, "S292C4");
    check_base_class_offset(lv, (S292C5*), 0, "S292C4");
    check_field_offset(lv, s292c4f0, ABISELECT(16,8), "S292C4.s292c4f0");
    check_field_offset(lv, s292c4f1, ABISELECT(40,20), "S292C4.s292c4f1");
    test_class_info(&lv, &cd_S292C4);
    dp->~S292C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS292C4(Test_S292C4, "S292C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S292C4C1Ev();
extern void _ZN6S292C4D1Ev();
Name_Map name_map_S292C4[] = {
  NSPAIR(_ZN6S292C4C1Ev),
  NSPAIR(_ZN6S292C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S292C5;
extern VTBL_ENTRY _ZTI6S292C5[];
extern  VTBL_ENTRY _ZTV6S292C5[];
static Base_Class bases_S292C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S292C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S292C4[];
extern void _ZN6S292C4D1Ev();
extern void _ZN6S292C4D0Ev();
extern void _ZN6S292C53v10Ev();
extern void _ZN6S292C53v11Ev();
extern void _ZN6S292C53v12Ev();
extern void _ZN6S292C53v13Ev();
extern void _ZN6S292C53v14Ev();
extern void _ZN6S292C43v15Ev();
extern void _ZN6S292C43v16Ev();
extern void _ZN6S292C43v17Ev();
extern void _ZN6S292C43v18Ev();
extern void _ZN6S292C43v19Ev();
extern void _ZN6S292C43v20Ev();
extern void _ZN6S292C43v21Ev();
extern void _ZN6S292C43v22Ev();
extern void _ZN6S292C43v23Ev();
extern void _ZN6S292C43v24Ev();
extern void _ZN6S292C43v25Ev();
static  VTBL_ENTRY vtc_S292C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S292C4[0]),
  (VTBL_ENTRY)&_ZN6S292C4D1Ev,
  (VTBL_ENTRY)&_ZN6S292C4D0Ev,
  (VTBL_ENTRY)&_ZN6S292C53v10Ev,
  (VTBL_ENTRY)&_ZN6S292C53v11Ev,
  (VTBL_ENTRY)&_ZN6S292C53v12Ev,
  (VTBL_ENTRY)&_ZN6S292C53v13Ev,
  (VTBL_ENTRY)&_ZN6S292C53v14Ev,
  (VTBL_ENTRY)&_ZN6S292C43v15Ev,
  (VTBL_ENTRY)&_ZN6S292C43v16Ev,
  (VTBL_ENTRY)&_ZN6S292C43v17Ev,
  (VTBL_ENTRY)&_ZN6S292C43v18Ev,
  (VTBL_ENTRY)&_ZN6S292C43v19Ev,
  (VTBL_ENTRY)&_ZN6S292C43v20Ev,
  (VTBL_ENTRY)&_ZN6S292C43v21Ev,
  (VTBL_ENTRY)&_ZN6S292C43v22Ev,
  (VTBL_ENTRY)&_ZN6S292C43v23Ev,
  (VTBL_ENTRY)&_ZN6S292C43v24Ev,
  (VTBL_ENTRY)&_ZN6S292C43v25Ev,
};
extern VTBL_ENTRY _ZTI6S292C4[];
extern  VTBL_ENTRY _ZTV6S292C4[];
Class_Descriptor cd_S292C4 = {  "S292C4", // class name
  bases_S292C4, 2,
  &(vtc_S292C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S292C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S292C4),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S292C3  : S292C4 {
  ::S770C6_nt s292c3f0;
  ::S770C9_nt s292c3f1;
  void *s292c3f2[3];
  virtual void  v26(); // _ZN6S292C33v26Ev
  virtual void  v27(); // _ZN6S292C33v27Ev
  virtual void  v28(); // _ZN6S292C33v28Ev
  virtual void  v29(); // _ZN6S292C33v29Ev
  virtual void  v30(); // _ZN6S292C33v30Ev
  virtual void  v31(); // _ZN6S292C33v31Ev
  virtual void  v32(); // _ZN6S292C33v32Ev
  virtual void  v33(); // _ZN6S292C33v33Ev
  ~S292C3(); // tgen
  S292C3(); // tgen
};
//SIG(-1 S292C3) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S292C3 ::v26(){vfunc_called(this, "_ZN6S292C33v26Ev");}
void  S292C3 ::v27(){vfunc_called(this, "_ZN6S292C33v27Ev");}
void  S292C3 ::v28(){vfunc_called(this, "_ZN6S292C33v28Ev");}
void  S292C3 ::v29(){vfunc_called(this, "_ZN6S292C33v29Ev");}
void  S292C3 ::v30(){vfunc_called(this, "_ZN6S292C33v30Ev");}
void  S292C3 ::v31(){vfunc_called(this, "_ZN6S292C33v31Ev");}
void  S292C3 ::v32(){vfunc_called(this, "_ZN6S292C33v32Ev");}
void  S292C3 ::v33(){vfunc_called(this, "_ZN6S292C33v33Ev");}
S292C3 ::~S292C3(){ note_dtor("S292C3", this);} // tgen
S292C3 ::S292C3(){ note_ctor("S292C3", this);} // tgen

static void Test_S292C3()
{
  extern Class_Descriptor cd_S292C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S292C3, buf);
    S292C3 *dp, &lv = *(dp=new (buf) S292C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S292C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S292C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S292C5*)(S292C4*), 0, "S292C3");
    check_base_class_offset(lv, (S292C5*)(S292C4*), 0, "S292C3");
    check_base_class_offset(lv, (S292C4*), 0, "S292C3");
    check_field_offset(lv, s292c3f0, ABISELECT(80,44), "S292C3.s292c3f0");
    check_field_offset(lv, s292c3f1, ABISELECT(120,68), "S292C3.s292c3f1");
    check_field_offset(lv, s292c3f2, ABISELECT(128,72), "S292C3.s292c3f2");
    test_class_info(&lv, &cd_S292C3);
    dp->~S292C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS292C3(Test_S292C3, "S292C3", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S292C3C1Ev();
extern void _ZN6S292C3D1Ev();
Name_Map name_map_S292C3[] = {
  NSPAIR(_ZN6S292C3C1Ev),
  NSPAIR(_ZN6S292C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S292C5;
extern VTBL_ENTRY _ZTI6S292C5[];
extern  VTBL_ENTRY _ZTV6S292C5[];
extern Class_Descriptor cd_S292C4;
extern VTBL_ENTRY _ZTI6S292C4[];
extern  VTBL_ENTRY _ZTV6S292C4[];
static Base_Class bases_S292C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S292C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S292C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S292C3[];
extern void _ZN6S292C3D1Ev();
extern void _ZN6S292C3D0Ev();
extern void _ZN6S292C53v10Ev();
extern void _ZN6S292C53v11Ev();
extern void _ZN6S292C53v12Ev();
extern void _ZN6S292C53v13Ev();
extern void _ZN6S292C53v14Ev();
extern void _ZN6S292C43v15Ev();
extern void _ZN6S292C43v16Ev();
extern void _ZN6S292C43v17Ev();
extern void _ZN6S292C43v18Ev();
extern void _ZN6S292C43v19Ev();
extern void _ZN6S292C43v20Ev();
extern void _ZN6S292C43v21Ev();
extern void _ZN6S292C43v22Ev();
extern void _ZN6S292C43v23Ev();
extern void _ZN6S292C43v24Ev();
extern void _ZN6S292C43v25Ev();
extern void _ZN6S292C33v26Ev();
extern void _ZN6S292C33v27Ev();
extern void _ZN6S292C33v28Ev();
extern void _ZN6S292C33v29Ev();
extern void _ZN6S292C33v30Ev();
extern void _ZN6S292C33v31Ev();
extern void _ZN6S292C33v32Ev();
extern void _ZN6S292C33v33Ev();
static  VTBL_ENTRY vtc_S292C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S292C3[0]),
  (VTBL_ENTRY)&_ZN6S292C3D1Ev,
  (VTBL_ENTRY)&_ZN6S292C3D0Ev,
  (VTBL_ENTRY)&_ZN6S292C53v10Ev,
  (VTBL_ENTRY)&_ZN6S292C53v11Ev,
  (VTBL_ENTRY)&_ZN6S292C53v12Ev,
  (VTBL_ENTRY)&_ZN6S292C53v13Ev,
  (VTBL_ENTRY)&_ZN6S292C53v14Ev,
  (VTBL_ENTRY)&_ZN6S292C43v15Ev,
  (VTBL_ENTRY)&_ZN6S292C43v16Ev,
  (VTBL_ENTRY)&_ZN6S292C43v17Ev,
  (VTBL_ENTRY)&_ZN6S292C43v18Ev,
  (VTBL_ENTRY)&_ZN6S292C43v19Ev,
  (VTBL_ENTRY)&_ZN6S292C43v20Ev,
  (VTBL_ENTRY)&_ZN6S292C43v21Ev,
  (VTBL_ENTRY)&_ZN6S292C43v22Ev,
  (VTBL_ENTRY)&_ZN6S292C43v23Ev,
  (VTBL_ENTRY)&_ZN6S292C43v24Ev,
  (VTBL_ENTRY)&_ZN6S292C43v25Ev,
  (VTBL_ENTRY)&_ZN6S292C33v26Ev,
  (VTBL_ENTRY)&_ZN6S292C33v27Ev,
  (VTBL_ENTRY)&_ZN6S292C33v28Ev,
  (VTBL_ENTRY)&_ZN6S292C33v29Ev,
  (VTBL_ENTRY)&_ZN6S292C33v30Ev,
  (VTBL_ENTRY)&_ZN6S292C33v31Ev,
  (VTBL_ENTRY)&_ZN6S292C33v32Ev,
  (VTBL_ENTRY)&_ZN6S292C33v33Ev,
};
extern VTBL_ENTRY _ZTI6S292C3[];
extern  VTBL_ENTRY _ZTV6S292C3[];
Class_Descriptor cd_S292C3 = {  "S292C3", // class name
  bases_S292C3, 3,
  &(vtc_S292C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S292C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S292C3),28, //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  S292C11  {
  virtual  ~S292C11(); // _ZN7S292C11D1Ev
  virtual void  v34(); // _ZN7S292C113v34Ev
  virtual void  v35(); // _ZN7S292C113v35Ev
  virtual void  v36(); // _ZN7S292C113v36Ev
  S292C11(); // tgen
};
//SIG(-1 S292C11) C1{ vd v1 v2 v3}


 S292C11 ::~S292C11(){ note_dtor("S292C11", this);}
void  S292C11 ::v34(){vfunc_called(this, "_ZN7S292C113v34Ev");}
void  S292C11 ::v35(){vfunc_called(this, "_ZN7S292C113v35Ev");}
void  S292C11 ::v36(){vfunc_called(this, "_ZN7S292C113v36Ev");}
S292C11 ::S292C11(){ note_ctor("S292C11", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S292C11C1Ev();
extern void _ZN7S292C11D1Ev();
Name_Map name_map_S292C11[] = {
  NSPAIR(_ZN7S292C11C1Ev),
  NSPAIR(_ZN7S292C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S292C11[];
extern void _ZN7S292C11D1Ev();
extern void _ZN7S292C11D0Ev();
extern void _ZN7S292C113v34Ev();
extern void _ZN7S292C113v35Ev();
extern void _ZN7S292C113v36Ev();
static  VTBL_ENTRY vtc_S292C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S292C11[0]),
  (VTBL_ENTRY)&_ZN7S292C11D1Ev,
  (VTBL_ENTRY)&_ZN7S292C11D0Ev,
  (VTBL_ENTRY)&_ZN7S292C113v34Ev,
  (VTBL_ENTRY)&_ZN7S292C113v35Ev,
  (VTBL_ENTRY)&_ZN7S292C113v36Ev,
};
extern VTBL_ENTRY _ZTI7S292C11[];
extern  VTBL_ENTRY _ZTV7S292C11[];
Class_Descriptor cd_S292C11 = {  "S292C11", // class name
  0,0,//no base classes
  &(vtc_S292C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S292C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S292C11),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  S292C12  {
  ::S744C15_nt s292c12f0;
  int s292c12f1;
  void *s292c12f2;
  void  mf292c12(); // _ZN7S292C128mf292c12Ev
};
//SIG(-1 S292C12) C1{ m FC2{ m Fp} Fi Fp}


void  S292C12 ::mf292c12(){}

static void Test_S292C12()
{
  {
    init_simple_test("S292C12");
    S292C12 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S292C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S292C12)");
    check_field_offset(lv, s292c12f0, 0, "S292C12.s292c12f0");
    check_field_offset(lv, s292c12f1, ABISELECT(8,4), "S292C12.s292c12f1");
    check_field_offset(lv, s292c12f2, ABISELECT(16,8), "S292C12.s292c12f2");
  }
}
static Arrange_To_Call_Me vS292C12(Test_S292C12, "S292C12", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S292C2  : S292C3 , S292C11 {
  ::S292C12 s292c2f0;
  int s292c2f1;
  char s292c2f2;
  virtual void  v37(); // _ZN6S292C23v37Ev
  virtual void  v38(); // _ZN6S292C23v38Ev
  virtual void  v39(); // _ZN6S292C23v39Ev
  virtual void  v40(); // _ZN6S292C23v40Ev
  virtual void  v41(); // _ZN6S292C23v41Ev
  virtual void  v42(); // _ZN6S292C23v42Ev
  virtual void  v43(); // _ZN6S292C23v43Ev
  virtual void  v44(); // _ZN6S292C23v44Ev
  virtual void  v45(); // _ZN6S292C23v45Ev
  virtual void  v46(); // _ZN6S292C23v46Ev
  ~S292C2(); // tgen
  S292C2(); // tgen
};
//SIG(-1 S292C2) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v11 v12 v13 v14 v15} v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v27 v28 v29 v30 v31 v32 v33 v34 FC6 FC9{ m Fp} Fp[3]} BC10{ vd v35 v36 v37} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC11{ m FC12{ m Fp} Fi Fp} Fi Fc}


void  S292C2 ::v37(){vfunc_called(this, "_ZN6S292C23v37Ev");}
void  S292C2 ::v38(){vfunc_called(this, "_ZN6S292C23v38Ev");}
void  S292C2 ::v39(){vfunc_called(this, "_ZN6S292C23v39Ev");}
void  S292C2 ::v40(){vfunc_called(this, "_ZN6S292C23v40Ev");}
void  S292C2 ::v41(){vfunc_called(this, "_ZN6S292C23v41Ev");}
void  S292C2 ::v42(){vfunc_called(this, "_ZN6S292C23v42Ev");}
void  S292C2 ::v43(){vfunc_called(this, "_ZN6S292C23v43Ev");}
void  S292C2 ::v44(){vfunc_called(this, "_ZN6S292C23v44Ev");}
void  S292C2 ::v45(){vfunc_called(this, "_ZN6S292C23v45Ev");}
void  S292C2 ::v46(){vfunc_called(this, "_ZN6S292C23v46Ev");}
S292C2 ::~S292C2(){ note_dtor("S292C2", this);} // tgen
S292C2 ::S292C2(){ note_ctor("S292C2", this);} // tgen

static void Test_S292C2()
{
  extern Class_Descriptor cd_S292C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,28)];
    init_test(&cd_S292C2, buf);
    S292C2 *dp, &lv = *(dp=new (buf) S292C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,108), "sizeof(S292C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S292C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S292C5*)(S292C4*)(S292C3*), 0, "S292C2");
    check_base_class_offset(lv, (S292C5*)(S292C4*)(S292C3*), 0, "S292C2");
    check_base_class_offset(lv, (S292C4*)(S292C3*), 0, "S292C2");
    check_base_class_offset(lv, (S292C3*), 0, "S292C2");
    check_base_class_offset(lv, (S292C11*), ABISELECT(152,84), "S292C2");
    check_field_offset(lv, s292c2f0, ABISELECT(160,88), "S292C2.s292c2f0");
    check_field_offset(lv, s292c2f1, ABISELECT(184,100), "S292C2.s292c2f1");
    check_field_offset(lv, s292c2f2, ABISELECT(188,104), "S292C2.s292c2f2");
    test_class_info(&lv, &cd_S292C2);
    dp->~S292C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS292C2(Test_S292C2, "S292C2", ABISELECT(192,108));

#else // __cplusplus

extern void _ZN6S292C2C1Ev();
extern void _ZN6S292C2D1Ev();
Name_Map name_map_S292C2[] = {
  NSPAIR(_ZN6S292C2C1Ev),
  NSPAIR(_ZN6S292C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S292C5;
extern VTBL_ENTRY _ZTI6S292C5[];
extern  VTBL_ENTRY _ZTV6S292C5[];
extern Class_Descriptor cd_S292C4;
extern VTBL_ENTRY _ZTI6S292C4[];
extern  VTBL_ENTRY _ZTV6S292C4[];
extern Class_Descriptor cd_S292C3;
extern VTBL_ENTRY _ZTI6S292C3[];
extern  VTBL_ENTRY _ZTV6S292C3[];
extern Class_Descriptor cd_S292C11;
extern VTBL_ENTRY _ZTI7S292C11[];
extern  VTBL_ENTRY _ZTV7S292C11[];
static Base_Class bases_S292C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S292C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S292C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S292C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S292C11,    ABISELECT(152,84), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S292C2[];
extern void _ZN6S292C2D1Ev();
extern void _ZN6S292C2D0Ev();
extern void _ZN6S292C53v10Ev();
extern void _ZN6S292C53v11Ev();
extern void _ZN6S292C53v12Ev();
extern void _ZN6S292C53v13Ev();
extern void _ZN6S292C53v14Ev();
extern void _ZN6S292C43v15Ev();
extern void _ZN6S292C43v16Ev();
extern void _ZN6S292C43v17Ev();
extern void _ZN6S292C43v18Ev();
extern void _ZN6S292C43v19Ev();
extern void _ZN6S292C43v20Ev();
extern void _ZN6S292C43v21Ev();
extern void _ZN6S292C43v22Ev();
extern void _ZN6S292C43v23Ev();
extern void _ZN6S292C43v24Ev();
extern void _ZN6S292C43v25Ev();
extern void _ZN6S292C33v26Ev();
extern void _ZN6S292C33v27Ev();
extern void _ZN6S292C33v28Ev();
extern void _ZN6S292C33v29Ev();
extern void _ZN6S292C33v30Ev();
extern void _ZN6S292C33v31Ev();
extern void _ZN6S292C33v32Ev();
extern void _ZN6S292C33v33Ev();
extern void _ZN6S292C23v37Ev();
extern void _ZN6S292C23v38Ev();
extern void _ZN6S292C23v39Ev();
extern void _ZN6S292C23v40Ev();
extern void _ZN6S292C23v41Ev();
extern void _ZN6S292C23v42Ev();
extern void _ZN6S292C23v43Ev();
extern void _ZN6S292C23v44Ev();
extern void _ZN6S292C23v45Ev();
extern void _ZN6S292C23v46Ev();
extern void ABISELECT(_ZThn152_N6S292C2D1Ev,_ZThn84_N6S292C2D1Ev)();
extern void ABISELECT(_ZThn152_N6S292C2D0Ev,_ZThn84_N6S292C2D0Ev)();
extern void _ZN7S292C113v34Ev();
extern void _ZN7S292C113v35Ev();
extern void _ZN7S292C113v36Ev();
static  VTBL_ENTRY vtc_S292C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S292C2[0]),
  (VTBL_ENTRY)&_ZN6S292C2D1Ev,
  (VTBL_ENTRY)&_ZN6S292C2D0Ev,
  (VTBL_ENTRY)&_ZN6S292C53v10Ev,
  (VTBL_ENTRY)&_ZN6S292C53v11Ev,
  (VTBL_ENTRY)&_ZN6S292C53v12Ev,
  (VTBL_ENTRY)&_ZN6S292C53v13Ev,
  (VTBL_ENTRY)&_ZN6S292C53v14Ev,
  (VTBL_ENTRY)&_ZN6S292C43v15Ev,
  (VTBL_ENTRY)&_ZN6S292C43v16Ev,
  (VTBL_ENTRY)&_ZN6S292C43v17Ev,
  (VTBL_ENTRY)&_ZN6S292C43v18Ev,
  (VTBL_ENTRY)&_ZN6S292C43v19Ev,
  (VTBL_ENTRY)&_ZN6S292C43v20Ev,
  (VTBL_ENTRY)&_ZN6S292C43v21Ev,
  (VTBL_ENTRY)&_ZN6S292C43v22Ev,
  (VTBL_ENTRY)&_ZN6S292C43v23Ev,
  (VTBL_ENTRY)&_ZN6S292C43v24Ev,
  (VTBL_ENTRY)&_ZN6S292C43v25Ev,
  (VTBL_ENTRY)&_ZN6S292C33v26Ev,
  (VTBL_ENTRY)&_ZN6S292C33v27Ev,
  (VTBL_ENTRY)&_ZN6S292C33v28Ev,
  (VTBL_ENTRY)&_ZN6S292C33v29Ev,
  (VTBL_ENTRY)&_ZN6S292C33v30Ev,
  (VTBL_ENTRY)&_ZN6S292C33v31Ev,
  (VTBL_ENTRY)&_ZN6S292C33v32Ev,
  (VTBL_ENTRY)&_ZN6S292C33v33Ev,
  (VTBL_ENTRY)&_ZN6S292C23v37Ev,
  (VTBL_ENTRY)&_ZN6S292C23v38Ev,
  (VTBL_ENTRY)&_ZN6S292C23v39Ev,
  (VTBL_ENTRY)&_ZN6S292C23v40Ev,
  (VTBL_ENTRY)&_ZN6S292C23v41Ev,
  (VTBL_ENTRY)&_ZN6S292C23v42Ev,
  (VTBL_ENTRY)&_ZN6S292C23v43Ev,
  (VTBL_ENTRY)&_ZN6S292C23v44Ev,
  (VTBL_ENTRY)&_ZN6S292C23v45Ev,
  (VTBL_ENTRY)&_ZN6S292C23v46Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI6S292C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S292C2D1Ev,_ZThn84_N6S292C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S292C2D0Ev,_ZThn84_N6S292C2D0Ev),
  (VTBL_ENTRY)&_ZN7S292C113v34Ev,
  (VTBL_ENTRY)&_ZN7S292C113v35Ev,
  (VTBL_ENTRY)&_ZN7S292C113v36Ev,
};
extern VTBL_ENTRY _ZTI6S292C2[];
extern  VTBL_ENTRY _ZTV6S292C2[];
Class_Descriptor cd_S292C2 = {  "S292C2", // class name
  bases_S292C2, 5,
  &(vtc_S292C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,108), // object size
  NSPAIRA(_ZTI6S292C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S292C2),45, //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  S292C17_nt  {
  int s292c17f0[5];
  void  mf292c17(); // _ZN10S292C17_nt8mf292c17Ev
};
//SIG(-1 S292C17_nt) C1{ m Fi[5]}


void  S292C17_nt ::mf292c17(){}

//skip512 S292C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S292C18  {
  ::S292C17_nt s292c18f0;
  int s292c18f1;
  ::S3047C29_nt s292c18f2;
  char s292c18f3;
  void  mf292c18(); // _ZN7S292C188mf292c18Ev
};
//SIG(-1 S292C18) C1{ m FC2{ m Fi[5]} Fi FC3{ m Fs[6] Fi[2] Fc Fs} Fc}


void  S292C18 ::mf292c18(){}

static void Test_S292C18()
{
  {
    init_simple_test("S292C18");
    S292C18 lv;
    check2(sizeof(lv), 52, "sizeof(S292C18)");
    check2(__alignof__(lv), 4, "__alignof__(S292C18)");
    check_field_offset(lv, s292c18f0, 0, "S292C18.s292c18f0");
    check_field_offset(lv, s292c18f1, 20, "S292C18.s292c18f1");
    check_field_offset(lv, s292c18f2, 24, "S292C18.s292c18f2");
    check_field_offset(lv, s292c18f3, 48, "S292C18.s292c18f3");
  }
}
static Arrange_To_Call_Me vS292C18(Test_S292C18, "S292C18", 52);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S292C20_nt  {
  void *s292c20f0;
  void  mf292c20(); // _ZN10S292C20_nt8mf292c20Ev
};
//SIG(-1 S292C20_nt) C1{ m Fp}


void  S292C20_nt ::mf292c20(){}

//skip512 S292C20_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S292C14  {
  ::S2215C20_nt s292c14f0;
  ::S2215C20_nt s292c14f1;
  ::S2215C20_nt s292c14f2;
  ::S292C17_nt s292c14f3;
  ::S292C18 s292c14f4;
  ::S292C18 s292c14f5;
  int s292c14f6[2];
  ::S292C20_nt s292c14f7;
  int s292c14f8;
};
//SIG(-1 S292C14) C1{ FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC4{ m Fi[5]} FC5{ m FC4 Fi FC6{ m Fs[6] Fi[2] Fc Fs} Fc} FC5 Fi[2] FC7{ m Fp} Fi}



static void Test_S292C14()
{
  {
    init_simple_test("S292C14");
    S292C14 lv;
    check2(sizeof(lv), ABISELECT(200,176), "sizeof(S292C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S292C14)");
    check_field_offset(lv, s292c14f0, 0, "S292C14.s292c14f0");
    check_field_offset(lv, s292c14f1, ABISELECT(16,12), "S292C14.s292c14f1");
    check_field_offset(lv, s292c14f2, ABISELECT(32,24), "S292C14.s292c14f2");
    check_field_offset(lv, s292c14f3, ABISELECT(48,36), "S292C14.s292c14f3");
    check_field_offset(lv, s292c14f4, ABISELECT(68,56), "S292C14.s292c14f4");
    check_field_offset(lv, s292c14f5, ABISELECT(120,108), "S292C14.s292c14f5");
    check_field_offset(lv, s292c14f6, ABISELECT(172,160), "S292C14.s292c14f6");
    check_field_offset(lv, s292c14f7, ABISELECT(184,168), "S292C14.s292c14f7");
    check_field_offset(lv, s292c14f8, ABISELECT(192,172), "S292C14.s292c14f8");
  }
}
static Arrange_To_Call_Me vS292C14(Test_S292C14, "S292C14", ABISELECT(200,176));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S292C1  : S292C2 {
  ::S292C14 s292c1f0;
  virtual void  v1(); // _ZN6S292C12v1Ev
  virtual void  v2(); // _ZN6S292C12v2Ev
  virtual void  v3(); // _ZN6S292C12v3Ev
  virtual void  v4(); // _ZN6S292C12v4Ev
  virtual void  v5(); // _ZN6S292C12v5Ev
  virtual void  v6(); // _ZN6S292C12v6Ev
  virtual void  v7(); // _ZN6S292C12v7Ev
  virtual void  v8(); // _ZN6S292C12v8Ev
  virtual void  v9(); // _ZN6S292C12v9Ev
  ~S292C1(); // tgen
  S292C1(); // tgen
};
//SIG(1 S292C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fi} v10 v11 v12 v13 v14} v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fp[3] FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]}} v26 v27 v28 v29 v30 v31 v32 v33 FC7 FC10{ m Fp} Fp[3]} BC11{ vd v34 v35 v36} v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 FC12{ m FC13{ m Fp} Fi Fp} Fi Fc} v1 v2 v3 v4 v5 v6 v7 v8 v9 FC14{ FC15{ m Fp Fi FC16{ m}} FC15 FC15 FC17{ m Fi[5]} FC18{ m FC17 Fi FC19{ m Fs[6] Fi[2] Fc Fs} Fc} FC18 Fi[2] FC20{ m Fp} Fi}}


void  S292C1 ::v1(){vfunc_called(this, "_ZN6S292C12v1Ev");}
void  S292C1 ::v2(){vfunc_called(this, "_ZN6S292C12v2Ev");}
void  S292C1 ::v3(){vfunc_called(this, "_ZN6S292C12v3Ev");}
void  S292C1 ::v4(){vfunc_called(this, "_ZN6S292C12v4Ev");}
void  S292C1 ::v5(){vfunc_called(this, "_ZN6S292C12v5Ev");}
void  S292C1 ::v6(){vfunc_called(this, "_ZN6S292C12v6Ev");}
void  S292C1 ::v7(){vfunc_called(this, "_ZN6S292C12v7Ev");}
void  S292C1 ::v8(){vfunc_called(this, "_ZN6S292C12v8Ev");}
void  S292C1 ::v9(){vfunc_called(this, "_ZN6S292C12v9Ev");}
S292C1 ::~S292C1(){ note_dtor("S292C1", this);} // tgen
S292C1 ::S292C1(){ note_ctor("S292C1", this);} // tgen

static void Test_S292C1()
{
  extern Class_Descriptor cd_S292C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,72)];
    init_test(&cd_S292C1, buf);
    S292C1 *dp, &lv = *(dp=new (buf) S292C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,284), "sizeof(S292C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S292C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S292C5*)(S292C4*)(S292C3*)(S292C2*), 0, "S292C1");
    check_base_class_offset(lv, (S292C5*)(S292C4*)(S292C3*)(S292C2*), 0, "S292C1");
    check_base_class_offset(lv, (S292C4*)(S292C3*)(S292C2*), 0, "S292C1");
    check_base_class_offset(lv, (S292C3*)(S292C2*), 0, "S292C1");
    check_base_class_offset(lv, (S292C11*)(S292C2*), ABISELECT(152,84), "S292C1");
    check_base_class_offset(lv, (S292C2*), 0, "S292C1");
    check_field_offset(lv, s292c1f0, ABISELECT(192,108), "S292C1.s292c1f0");
    test_class_info(&lv, &cd_S292C1);
    dp->~S292C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS292C1(Test_S292C1, "S292C1", ABISELECT(392,284));

#else // __cplusplus

extern void _ZN6S292C1C1Ev();
extern void _ZN6S292C1D1Ev();
Name_Map name_map_S292C1[] = {
  NSPAIR(_ZN6S292C1C1Ev),
  NSPAIR(_ZN6S292C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S292C5;
extern VTBL_ENTRY _ZTI6S292C5[];
extern  VTBL_ENTRY _ZTV6S292C5[];
extern Class_Descriptor cd_S292C4;
extern VTBL_ENTRY _ZTI6S292C4[];
extern  VTBL_ENTRY _ZTV6S292C4[];
extern Class_Descriptor cd_S292C3;
extern VTBL_ENTRY _ZTI6S292C3[];
extern  VTBL_ENTRY _ZTV6S292C3[];
extern Class_Descriptor cd_S292C11;
extern VTBL_ENTRY _ZTI7S292C11[];
extern  VTBL_ENTRY _ZTV7S292C11[];
extern Class_Descriptor cd_S292C2;
extern VTBL_ENTRY _ZTI6S292C2[];
extern  VTBL_ENTRY _ZTV6S292C2[];
static Base_Class bases_S292C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S292C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S292C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S292C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S292C11,    ABISELECT(152,84), //bcp->offset
    47, //bcp->virtual_function_table_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_S292C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S292C1[];
extern void _ZN6S292C1D1Ev();
extern void _ZN6S292C1D0Ev();
extern void _ZN6S292C53v10Ev();
extern void _ZN6S292C53v11Ev();
extern void _ZN6S292C53v12Ev();
extern void _ZN6S292C53v13Ev();
extern void _ZN6S292C53v14Ev();
extern void _ZN6S292C43v15Ev();
extern void _ZN6S292C43v16Ev();
extern void _ZN6S292C43v17Ev();
extern void _ZN6S292C43v18Ev();
extern void _ZN6S292C43v19Ev();
extern void _ZN6S292C43v20Ev();
extern void _ZN6S292C43v21Ev();
extern void _ZN6S292C43v22Ev();
extern void _ZN6S292C43v23Ev();
extern void _ZN6S292C43v24Ev();
extern void _ZN6S292C43v25Ev();
extern void _ZN6S292C33v26Ev();
extern void _ZN6S292C33v27Ev();
extern void _ZN6S292C33v28Ev();
extern void _ZN6S292C33v29Ev();
extern void _ZN6S292C33v30Ev();
extern void _ZN6S292C33v31Ev();
extern void _ZN6S292C33v32Ev();
extern void _ZN6S292C33v33Ev();
extern void _ZN6S292C23v37Ev();
extern void _ZN6S292C23v38Ev();
extern void _ZN6S292C23v39Ev();
extern void _ZN6S292C23v40Ev();
extern void _ZN6S292C23v41Ev();
extern void _ZN6S292C23v42Ev();
extern void _ZN6S292C23v43Ev();
extern void _ZN6S292C23v44Ev();
extern void _ZN6S292C23v45Ev();
extern void _ZN6S292C23v46Ev();
extern void _ZN6S292C12v1Ev();
extern void _ZN6S292C12v2Ev();
extern void _ZN6S292C12v3Ev();
extern void _ZN6S292C12v4Ev();
extern void _ZN6S292C12v5Ev();
extern void _ZN6S292C12v6Ev();
extern void _ZN6S292C12v7Ev();
extern void _ZN6S292C12v8Ev();
extern void _ZN6S292C12v9Ev();
extern void ABISELECT(_ZThn152_N6S292C1D1Ev,_ZThn84_N6S292C1D1Ev)();
extern void ABISELECT(_ZThn152_N6S292C1D0Ev,_ZThn84_N6S292C1D0Ev)();
extern void _ZN7S292C113v34Ev();
extern void _ZN7S292C113v35Ev();
extern void _ZN7S292C113v36Ev();
static  VTBL_ENTRY vtc_S292C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S292C1[0]),
  (VTBL_ENTRY)&_ZN6S292C1D1Ev,
  (VTBL_ENTRY)&_ZN6S292C1D0Ev,
  (VTBL_ENTRY)&_ZN6S292C53v10Ev,
  (VTBL_ENTRY)&_ZN6S292C53v11Ev,
  (VTBL_ENTRY)&_ZN6S292C53v12Ev,
  (VTBL_ENTRY)&_ZN6S292C53v13Ev,
  (VTBL_ENTRY)&_ZN6S292C53v14Ev,
  (VTBL_ENTRY)&_ZN6S292C43v15Ev,
  (VTBL_ENTRY)&_ZN6S292C43v16Ev,
  (VTBL_ENTRY)&_ZN6S292C43v17Ev,
  (VTBL_ENTRY)&_ZN6S292C43v18Ev,
  (VTBL_ENTRY)&_ZN6S292C43v19Ev,
  (VTBL_ENTRY)&_ZN6S292C43v20Ev,
  (VTBL_ENTRY)&_ZN6S292C43v21Ev,
  (VTBL_ENTRY)&_ZN6S292C43v22Ev,
  (VTBL_ENTRY)&_ZN6S292C43v23Ev,
  (VTBL_ENTRY)&_ZN6S292C43v24Ev,
  (VTBL_ENTRY)&_ZN6S292C43v25Ev,
  (VTBL_ENTRY)&_ZN6S292C33v26Ev,
  (VTBL_ENTRY)&_ZN6S292C33v27Ev,
  (VTBL_ENTRY)&_ZN6S292C33v28Ev,
  (VTBL_ENTRY)&_ZN6S292C33v29Ev,
  (VTBL_ENTRY)&_ZN6S292C33v30Ev,
  (VTBL_ENTRY)&_ZN6S292C33v31Ev,
  (VTBL_ENTRY)&_ZN6S292C33v32Ev,
  (VTBL_ENTRY)&_ZN6S292C33v33Ev,
  (VTBL_ENTRY)&_ZN6S292C23v37Ev,
  (VTBL_ENTRY)&_ZN6S292C23v38Ev,
  (VTBL_ENTRY)&_ZN6S292C23v39Ev,
  (VTBL_ENTRY)&_ZN6S292C23v40Ev,
  (VTBL_ENTRY)&_ZN6S292C23v41Ev,
  (VTBL_ENTRY)&_ZN6S292C23v42Ev,
  (VTBL_ENTRY)&_ZN6S292C23v43Ev,
  (VTBL_ENTRY)&_ZN6S292C23v44Ev,
  (VTBL_ENTRY)&_ZN6S292C23v45Ev,
  (VTBL_ENTRY)&_ZN6S292C23v46Ev,
  (VTBL_ENTRY)&_ZN6S292C12v1Ev,
  (VTBL_ENTRY)&_ZN6S292C12v2Ev,
  (VTBL_ENTRY)&_ZN6S292C12v3Ev,
  (VTBL_ENTRY)&_ZN6S292C12v4Ev,
  (VTBL_ENTRY)&_ZN6S292C12v5Ev,
  (VTBL_ENTRY)&_ZN6S292C12v6Ev,
  (VTBL_ENTRY)&_ZN6S292C12v7Ev,
  (VTBL_ENTRY)&_ZN6S292C12v8Ev,
  (VTBL_ENTRY)&_ZN6S292C12v9Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI6S292C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S292C1D1Ev,_ZThn84_N6S292C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S292C1D0Ev,_ZThn84_N6S292C1D0Ev),
  (VTBL_ENTRY)&_ZN7S292C113v34Ev,
  (VTBL_ENTRY)&_ZN7S292C113v35Ev,
  (VTBL_ENTRY)&_ZN7S292C113v36Ev,
};
extern VTBL_ENTRY _ZTI6S292C1[];
extern  VTBL_ENTRY _ZTV6S292C1[];
Class_Descriptor cd_S292C1 = {  "S292C1", // class name
  bases_S292C1, 6,
  &(vtc_S292C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,284), // object size
  NSPAIRA(_ZTI6S292C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S292C1),54, //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  S743C4  : S770C5_nt {
  virtual void  v15(); // _ZN6S743C43v15Ev
  virtual void  v16(); // _ZN6S743C43v16Ev
  virtual void  v17(); // _ZN6S743C43v17Ev
  virtual void  v18(); // _ZN6S743C43v18Ev
  virtual void  v19(); // _ZN6S743C43v19Ev
  ~S743C4(); // tgen
  S743C4(); // tgen
};
//SIG(-1 S743C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S743C4 ::v15(){vfunc_called(this, "_ZN6S743C43v15Ev");}
void  S743C4 ::v16(){vfunc_called(this, "_ZN6S743C43v16Ev");}
void  S743C4 ::v17(){vfunc_called(this, "_ZN6S743C43v17Ev");}
void  S743C4 ::v18(){vfunc_called(this, "_ZN6S743C43v18Ev");}
void  S743C4 ::v19(){vfunc_called(this, "_ZN6S743C43v19Ev");}
S743C4 ::~S743C4(){ note_dtor("S743C4", this);} // tgen
S743C4 ::S743C4(){ note_ctor("S743C4", this);} // tgen

static void Test_S743C4()
{
  extern Class_Descriptor cd_S743C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S743C4, buf);
    S743C4 *dp, &lv = *(dp=new (buf) S743C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S743C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S743C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S743C4");
    test_class_info(&lv, &cd_S743C4);
    dp->~S743C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS743C4(Test_S743C4, "S743C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S743C4C1Ev();
extern void _ZN6S743C4D1Ev();
Name_Map name_map_S743C4[] = {
  NSPAIR(_ZN6S743C4C1Ev),
  NSPAIR(_ZN6S743C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S743C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S743C4[];
extern void _ZN6S743C4D1Ev();
extern void _ZN6S743C4D0Ev();
extern void _ZN6S743C43v15Ev();
extern void _ZN6S743C43v16Ev();
extern void _ZN6S743C43v17Ev();
extern void _ZN6S743C43v18Ev();
extern void _ZN6S743C43v19Ev();
static  VTBL_ENTRY vtc_S743C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S743C4[0]),
  (VTBL_ENTRY)&_ZN6S743C4D1Ev,
  (VTBL_ENTRY)&_ZN6S743C4D0Ev,
  (VTBL_ENTRY)&_ZN6S743C43v15Ev,
  (VTBL_ENTRY)&_ZN6S743C43v16Ev,
  (VTBL_ENTRY)&_ZN6S743C43v17Ev,
  (VTBL_ENTRY)&_ZN6S743C43v18Ev,
  (VTBL_ENTRY)&_ZN6S743C43v19Ev,
};
extern VTBL_ENTRY _ZTI6S743C4[];
extern  VTBL_ENTRY _ZTV6S743C4[];
Class_Descriptor cd_S743C4 = {  "S743C4", // class name
  bases_S743C4, 1,
  &(vtc_S743C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S743C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S743C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S743C3  : S743C4 {
  void *s743c3f0[3];
  ::S770C6_nt s743c3f1;
  virtual void  v20(); // _ZN6S743C33v20Ev
  virtual void  v21(); // _ZN6S743C33v21Ev
  virtual void  v22(); // _ZN6S743C33v22Ev
  virtual void  v23(); // _ZN6S743C33v23Ev
  virtual void  v24(); // _ZN6S743C33v24Ev
  virtual void  v25(); // _ZN6S743C33v25Ev
  virtual void  v26(); // _ZN6S743C33v26Ev
  virtual void  v27(); // _ZN6S743C33v27Ev
  virtual void  v28(); // _ZN6S743C33v28Ev
  virtual void  v29(); // _ZN6S743C33v29Ev
  virtual void  v30(); // _ZN6S743C33v30Ev
  ~S743C3(); // tgen
  S743C3(); // tgen
};
//SIG(-1 S743C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S743C3 ::v20(){vfunc_called(this, "_ZN6S743C33v20Ev");}
void  S743C3 ::v21(){vfunc_called(this, "_ZN6S743C33v21Ev");}
void  S743C3 ::v22(){vfunc_called(this, "_ZN6S743C33v22Ev");}
void  S743C3 ::v23(){vfunc_called(this, "_ZN6S743C33v23Ev");}
void  S743C3 ::v24(){vfunc_called(this, "_ZN6S743C33v24Ev");}
void  S743C3 ::v25(){vfunc_called(this, "_ZN6S743C33v25Ev");}
void  S743C3 ::v26(){vfunc_called(this, "_ZN6S743C33v26Ev");}
void  S743C3 ::v27(){vfunc_called(this, "_ZN6S743C33v27Ev");}
void  S743C3 ::v28(){vfunc_called(this, "_ZN6S743C33v28Ev");}
void  S743C3 ::v29(){vfunc_called(this, "_ZN6S743C33v29Ev");}
void  S743C3 ::v30(){vfunc_called(this, "_ZN6S743C33v30Ev");}
S743C3 ::~S743C3(){ note_dtor("S743C3", this);} // tgen
S743C3 ::S743C3(){ note_ctor("S743C3", this);} // tgen

static void Test_S743C3()
{
  extern Class_Descriptor cd_S743C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S743C3, buf);
    S743C3 *dp, &lv = *(dp=new (buf) S743C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S743C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S743C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S743C4*), 0, "S743C3");
    check_base_class_offset(lv, (S743C4*), 0, "S743C3");
    check_field_offset(lv, s743c3f0, ABISELECT(16,8), "S743C3.s743c3f0");
    check_field_offset(lv, s743c3f1, ABISELECT(40,20), "S743C3.s743c3f1");
    test_class_info(&lv, &cd_S743C3);
    dp->~S743C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS743C3(Test_S743C3, "S743C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S743C3C1Ev();
extern void _ZN6S743C3D1Ev();
Name_Map name_map_S743C3[] = {
  NSPAIR(_ZN6S743C3C1Ev),
  NSPAIR(_ZN6S743C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S743C4;
extern VTBL_ENTRY _ZTI6S743C4[];
extern  VTBL_ENTRY _ZTV6S743C4[];
static Base_Class bases_S743C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S743C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S743C3[];
extern void _ZN6S743C3D1Ev();
extern void _ZN6S743C3D0Ev();
extern void _ZN6S743C43v15Ev();
extern void _ZN6S743C43v16Ev();
extern void _ZN6S743C43v17Ev();
extern void _ZN6S743C43v18Ev();
extern void _ZN6S743C43v19Ev();
extern void _ZN6S743C33v20Ev();
extern void _ZN6S743C33v21Ev();
extern void _ZN6S743C33v22Ev();
extern void _ZN6S743C33v23Ev();
extern void _ZN6S743C33v24Ev();
extern void _ZN6S743C33v25Ev();
extern void _ZN6S743C33v26Ev();
extern void _ZN6S743C33v27Ev();
extern void _ZN6S743C33v28Ev();
extern void _ZN6S743C33v29Ev();
extern void _ZN6S743C33v30Ev();
static  VTBL_ENTRY vtc_S743C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S743C3[0]),
  (VTBL_ENTRY)&_ZN6S743C3D1Ev,
  (VTBL_ENTRY)&_ZN6S743C3D0Ev,
  (VTBL_ENTRY)&_ZN6S743C43v15Ev,
  (VTBL_ENTRY)&_ZN6S743C43v16Ev,
  (VTBL_ENTRY)&_ZN6S743C43v17Ev,
  (VTBL_ENTRY)&_ZN6S743C43v18Ev,
  (VTBL_ENTRY)&_ZN6S743C43v19Ev,
  (VTBL_ENTRY)&_ZN6S743C33v20Ev,
  (VTBL_ENTRY)&_ZN6S743C33v21Ev,
  (VTBL_ENTRY)&_ZN6S743C33v22Ev,
  (VTBL_ENTRY)&_ZN6S743C33v23Ev,
  (VTBL_ENTRY)&_ZN6S743C33v24Ev,
  (VTBL_ENTRY)&_ZN6S743C33v25Ev,
  (VTBL_ENTRY)&_ZN6S743C33v26Ev,
  (VTBL_ENTRY)&_ZN6S743C33v27Ev,
  (VTBL_ENTRY)&_ZN6S743C33v28Ev,
  (VTBL_ENTRY)&_ZN6S743C33v29Ev,
  (VTBL_ENTRY)&_ZN6S743C33v30Ev,
};
extern VTBL_ENTRY _ZTI6S743C3[];
extern  VTBL_ENTRY _ZTV6S743C3[];
Class_Descriptor cd_S743C3 = {  "S743C3", // class name
  bases_S743C3, 2,
  &(vtc_S743C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S743C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S743C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S743C2  : S743C3 {
  ::S770C6_nt s743c2f0;
  ::S770C9_nt s743c2f1;
  void *s743c2f2[3];
  virtual void  v31(); // _ZN6S743C23v31Ev
  virtual void  v32(); // _ZN6S743C23v32Ev
  virtual void  v33(); // _ZN6S743C23v33Ev
  virtual void  v34(); // _ZN6S743C23v34Ev
  virtual void  v35(); // _ZN6S743C23v35Ev
  virtual void  v36(); // _ZN6S743C23v36Ev
  virtual void  v37(); // _ZN6S743C23v37Ev
  virtual void  v38(); // _ZN6S743C23v38Ev
  ~S743C2(); // tgen
  S743C2(); // tgen
};
//SIG(-1 S743C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S743C2 ::v31(){vfunc_called(this, "_ZN6S743C23v31Ev");}
void  S743C2 ::v32(){vfunc_called(this, "_ZN6S743C23v32Ev");}
void  S743C2 ::v33(){vfunc_called(this, "_ZN6S743C23v33Ev");}
void  S743C2 ::v34(){vfunc_called(this, "_ZN6S743C23v34Ev");}
void  S743C2 ::v35(){vfunc_called(this, "_ZN6S743C23v35Ev");}
void  S743C2 ::v36(){vfunc_called(this, "_ZN6S743C23v36Ev");}
void  S743C2 ::v37(){vfunc_called(this, "_ZN6S743C23v37Ev");}
void  S743C2 ::v38(){vfunc_called(this, "_ZN6S743C23v38Ev");}
S743C2 ::~S743C2(){ note_dtor("S743C2", this);} // tgen
S743C2 ::S743C2(){ note_ctor("S743C2", this);} // tgen

static void Test_S743C2()
{
  extern Class_Descriptor cd_S743C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S743C2, buf);
    S743C2 *dp, &lv = *(dp=new (buf) S743C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S743C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S743C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S743C4*)(S743C3*), 0, "S743C2");
    check_base_class_offset(lv, (S743C4*)(S743C3*), 0, "S743C2");
    check_base_class_offset(lv, (S743C3*), 0, "S743C2");
    check_field_offset(lv, s743c2f0, ABISELECT(80,44), "S743C2.s743c2f0");
    check_field_offset(lv, s743c2f1, ABISELECT(120,68), "S743C2.s743c2f1");
    check_field_offset(lv, s743c2f2, ABISELECT(128,72), "S743C2.s743c2f2");
    test_class_info(&lv, &cd_S743C2);
    dp->~S743C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS743C2(Test_S743C2, "S743C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S743C2C1Ev();
extern void _ZN6S743C2D1Ev();
Name_Map name_map_S743C2[] = {
  NSPAIR(_ZN6S743C2C1Ev),
  NSPAIR(_ZN6S743C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S743C4;
extern VTBL_ENTRY _ZTI6S743C4[];
extern  VTBL_ENTRY _ZTV6S743C4[];
extern Class_Descriptor cd_S743C3;
extern VTBL_ENTRY _ZTI6S743C3[];
extern  VTBL_ENTRY _ZTV6S743C3[];
static Base_Class bases_S743C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S743C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S743C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S743C2[];
extern void _ZN6S743C2D1Ev();
extern void _ZN6S743C2D0Ev();
extern void _ZN6S743C43v15Ev();
extern void _ZN6S743C43v16Ev();
extern void _ZN6S743C43v17Ev();
extern void _ZN6S743C43v18Ev();
extern void _ZN6S743C43v19Ev();
extern void _ZN6S743C33v20Ev();
extern void _ZN6S743C33v21Ev();
extern void _ZN6S743C33v22Ev();
extern void _ZN6S743C33v23Ev();
extern void _ZN6S743C33v24Ev();
extern void _ZN6S743C33v25Ev();
extern void _ZN6S743C33v26Ev();
extern void _ZN6S743C33v27Ev();
extern void _ZN6S743C33v28Ev();
extern void _ZN6S743C33v29Ev();
extern void _ZN6S743C33v30Ev();
extern void _ZN6S743C23v31Ev();
extern void _ZN6S743C23v32Ev();
extern void _ZN6S743C23v33Ev();
extern void _ZN6S743C23v34Ev();
extern void _ZN6S743C23v35Ev();
extern void _ZN6S743C23v36Ev();
extern void _ZN6S743C23v37Ev();
extern void _ZN6S743C23v38Ev();
static  VTBL_ENTRY vtc_S743C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S743C2[0]),
  (VTBL_ENTRY)&_ZN6S743C2D1Ev,
  (VTBL_ENTRY)&_ZN6S743C2D0Ev,
  (VTBL_ENTRY)&_ZN6S743C43v15Ev,
  (VTBL_ENTRY)&_ZN6S743C43v16Ev,
  (VTBL_ENTRY)&_ZN6S743C43v17Ev,
  (VTBL_ENTRY)&_ZN6S743C43v18Ev,
  (VTBL_ENTRY)&_ZN6S743C43v19Ev,
  (VTBL_ENTRY)&_ZN6S743C33v20Ev,
  (VTBL_ENTRY)&_ZN6S743C33v21Ev,
  (VTBL_ENTRY)&_ZN6S743C33v22Ev,
  (VTBL_ENTRY)&_ZN6S743C33v23Ev,
  (VTBL_ENTRY)&_ZN6S743C33v24Ev,
  (VTBL_ENTRY)&_ZN6S743C33v25Ev,
  (VTBL_ENTRY)&_ZN6S743C33v26Ev,
  (VTBL_ENTRY)&_ZN6S743C33v27Ev,
  (VTBL_ENTRY)&_ZN6S743C33v28Ev,
  (VTBL_ENTRY)&_ZN6S743C33v29Ev,
  (VTBL_ENTRY)&_ZN6S743C33v30Ev,
  (VTBL_ENTRY)&_ZN6S743C23v31Ev,
  (VTBL_ENTRY)&_ZN6S743C23v32Ev,
  (VTBL_ENTRY)&_ZN6S743C23v33Ev,
  (VTBL_ENTRY)&_ZN6S743C23v34Ev,
  (VTBL_ENTRY)&_ZN6S743C23v35Ev,
  (VTBL_ENTRY)&_ZN6S743C23v36Ev,
  (VTBL_ENTRY)&_ZN6S743C23v37Ev,
  (VTBL_ENTRY)&_ZN6S743C23v38Ev,
};
extern VTBL_ENTRY _ZTI6S743C2[];
extern  VTBL_ENTRY _ZTV6S743C2[];
Class_Descriptor cd_S743C2 = {  "S743C2", // class name
  bases_S743C2, 3,
  &(vtc_S743C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S743C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S743C2),28, //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  S743C1  : S743C2 {
  void *s743c1f0[2];
  ::S281C30_nt s743c1f1;
  void *s743c1f2[6];
  int s743c1f3[3];
  ::S2215C13_nt s743c1f4;
  ::S2215C13_nt s743c1f5;
  void *s743c1f6;
  ::S2215C13_nt s743c1f7;
  ::S303C11_nt s743c1f8;
  char s743c1f9[4];
  ::S744C21_nt s743c1f10;
  virtual void  v1(); // _ZN6S743C12v1Ev
  virtual void  v2(); // _ZN6S743C12v2Ev
  virtual void  v3(); // _ZN6S743C12v3Ev
  virtual void  v4(); // _ZN6S743C12v4Ev
  virtual void  v5(); // _ZN6S743C12v5Ev
  virtual void  v6(); // _ZN6S743C12v6Ev
  virtual void  v7(); // _ZN6S743C12v7Ev
  virtual void  v8(); // _ZN6S743C12v8Ev
  virtual void  v9(); // _ZN6S743C12v9Ev
  virtual void  v10(); // _ZN6S743C13v10Ev
  virtual void  v11(); // _ZN6S743C13v11Ev
  virtual void  v12(); // _ZN6S743C13v12Ev
  virtual void  v13(); // _ZN6S743C13v13Ev
  virtual void  v14(); // _ZN6S743C13v14Ev
  ~S743C1(); // tgen
  S743C1(); // tgen
};
//SIG(1 S743C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v15 v16 v17 v18 v19} v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v31 v32 v33 v34 v35 v36 v37 v38 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] FC10{ m Fi[3]} Fp[6] Fi[3] FC11{ m FC12{ m FL[2]}} FC11 Fp FC11 FC13{ m FC14{ m FL}} Fc[4] FC15{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC16{ m FC17{ m Fi[2]} FC18{ m Fi[2]}} FC18 Fc Fi[3] Fc Fi[6] Fc}}


void  S743C1 ::v1(){vfunc_called(this, "_ZN6S743C12v1Ev");}
void  S743C1 ::v2(){vfunc_called(this, "_ZN6S743C12v2Ev");}
void  S743C1 ::v3(){vfunc_called(this, "_ZN6S743C12v3Ev");}
void  S743C1 ::v4(){vfunc_called(this, "_ZN6S743C12v4Ev");}
void  S743C1 ::v5(){vfunc_called(this, "_ZN6S743C12v5Ev");}
void  S743C1 ::v6(){vfunc_called(this, "_ZN6S743C12v6Ev");}
void  S743C1 ::v7(){vfunc_called(this, "_ZN6S743C12v7Ev");}
void  S743C1 ::v8(){vfunc_called(this, "_ZN6S743C12v8Ev");}
void  S743C1 ::v9(){vfunc_called(this, "_ZN6S743C12v9Ev");}
void  S743C1 ::v10(){vfunc_called(this, "_ZN6S743C13v10Ev");}
void  S743C1 ::v11(){vfunc_called(this, "_ZN6S743C13v11Ev");}
void  S743C1 ::v12(){vfunc_called(this, "_ZN6S743C13v12Ev");}
void  S743C1 ::v13(){vfunc_called(this, "_ZN6S743C13v13Ev");}
void  S743C1 ::v14(){vfunc_called(this, "_ZN6S743C13v14Ev");}
S743C1 ::~S743C1(){ note_dtor("S743C1", this);} // tgen
S743C1 ::S743C1(){ note_ctor("S743C1", this);} // tgen

static void Test_S743C1()
{
  extern Class_Descriptor cd_S743C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(67,89)];
    init_test(&cd_S743C1, buf);
    S743C1 *dp, &lv = *(dp=new (buf) S743C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,352), "sizeof(S743C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S743C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S743C4*)(S743C3*)(S743C2*), 0, "S743C1");
    check_base_class_offset(lv, (S743C4*)(S743C3*)(S743C2*), 0, "S743C1");
    check_base_class_offset(lv, (S743C3*)(S743C2*), 0, "S743C1");
    check_base_class_offset(lv, (S743C2*), 0, "S743C1");
    check_field_offset(lv, s743c1f0, ABISELECT(152,84), "S743C1.s743c1f0");
    check_field_offset(lv, s743c1f1, ABISELECT(168,92), "S743C1.s743c1f1");
    check_field_offset(lv, s743c1f2, ABISELECT(184,104), "S743C1.s743c1f2");
    check_field_offset(lv, s743c1f3, ABISELECT(232,128), "S743C1.s743c1f3");
    check_field_offset(lv, s743c1f4, ABISELECT(248,140), "S743C1.s743c1f4");
    check_field_offset(lv, s743c1f5, ABISELECT(264,156), "S743C1.s743c1f5");
    check_field_offset(lv, s743c1f6, ABISELECT(280,172), "S743C1.s743c1f6");
    check_field_offset(lv, s743c1f7, ABISELECT(288,176), "S743C1.s743c1f7");
    check_field_offset(lv, s743c1f8, ABISELECT(304,192), "S743C1.s743c1f8");
    check_field_offset(lv, s743c1f9, ABISELECT(312,200), "S743C1.s743c1f9");
    check_field_offset(lv, s743c1f10, ABISELECT(320,204), "S743C1.s743c1f10");
    test_class_info(&lv, &cd_S743C1);
    dp->~S743C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS743C1(Test_S743C1, "S743C1", ABISELECT(528,352));

#else // __cplusplus

extern void _ZN6S743C1C1Ev();
extern void _ZN6S743C1D1Ev();
Name_Map name_map_S743C1[] = {
  NSPAIR(_ZN6S743C1C1Ev),
  NSPAIR(_ZN6S743C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S743C4;
extern VTBL_ENTRY _ZTI6S743C4[];
extern  VTBL_ENTRY _ZTV6S743C4[];
extern Class_Descriptor cd_S743C3;
extern VTBL_ENTRY _ZTI6S743C3[];
extern  VTBL_ENTRY _ZTV6S743C3[];
extern Class_Descriptor cd_S743C2;
extern VTBL_ENTRY _ZTI6S743C2[];
extern  VTBL_ENTRY _ZTV6S743C2[];
static Base_Class bases_S743C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S743C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S743C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S743C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S743C1[];
extern void _ZN6S743C1D1Ev();
extern void _ZN6S743C1D0Ev();
extern void _ZN6S743C43v15Ev();
extern void _ZN6S743C43v16Ev();
extern void _ZN6S743C43v17Ev();
extern void _ZN6S743C43v18Ev();
extern void _ZN6S743C43v19Ev();
extern void _ZN6S743C33v20Ev();
extern void _ZN6S743C33v21Ev();
extern void _ZN6S743C33v22Ev();
extern void _ZN6S743C33v23Ev();
extern void _ZN6S743C33v24Ev();
extern void _ZN6S743C33v25Ev();
extern void _ZN6S743C33v26Ev();
extern void _ZN6S743C33v27Ev();
extern void _ZN6S743C33v28Ev();
extern void _ZN6S743C33v29Ev();
extern void _ZN6S743C33v30Ev();
extern void _ZN6S743C23v31Ev();
extern void _ZN6S743C23v32Ev();
extern void _ZN6S743C23v33Ev();
extern void _ZN6S743C23v34Ev();
extern void _ZN6S743C23v35Ev();
extern void _ZN6S743C23v36Ev();
extern void _ZN6S743C23v37Ev();
extern void _ZN6S743C23v38Ev();
extern void _ZN6S743C12v1Ev();
extern void _ZN6S743C12v2Ev();
extern void _ZN6S743C12v3Ev();
extern void _ZN6S743C12v4Ev();
extern void _ZN6S743C12v5Ev();
extern void _ZN6S743C12v6Ev();
extern void _ZN6S743C12v7Ev();
extern void _ZN6S743C12v8Ev();
extern void _ZN6S743C12v9Ev();
extern void _ZN6S743C13v10Ev();
extern void _ZN6S743C13v11Ev();
extern void _ZN6S743C13v12Ev();
extern void _ZN6S743C13v13Ev();
extern void _ZN6S743C13v14Ev();
static  VTBL_ENTRY vtc_S743C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S743C1[0]),
  (VTBL_ENTRY)&_ZN6S743C1D1Ev,
  (VTBL_ENTRY)&_ZN6S743C1D0Ev,
  (VTBL_ENTRY)&_ZN6S743C43v15Ev,
  (VTBL_ENTRY)&_ZN6S743C43v16Ev,
  (VTBL_ENTRY)&_ZN6S743C43v17Ev,
  (VTBL_ENTRY)&_ZN6S743C43v18Ev,
  (VTBL_ENTRY)&_ZN6S743C43v19Ev,
  (VTBL_ENTRY)&_ZN6S743C33v20Ev,
  (VTBL_ENTRY)&_ZN6S743C33v21Ev,
  (VTBL_ENTRY)&_ZN6S743C33v22Ev,
  (VTBL_ENTRY)&_ZN6S743C33v23Ev,
  (VTBL_ENTRY)&_ZN6S743C33v24Ev,
  (VTBL_ENTRY)&_ZN6S743C33v25Ev,
  (VTBL_ENTRY)&_ZN6S743C33v26Ev,
  (VTBL_ENTRY)&_ZN6S743C33v27Ev,
  (VTBL_ENTRY)&_ZN6S743C33v28Ev,
  (VTBL_ENTRY)&_ZN6S743C33v29Ev,
  (VTBL_ENTRY)&_ZN6S743C33v30Ev,
  (VTBL_ENTRY)&_ZN6S743C23v31Ev,
  (VTBL_ENTRY)&_ZN6S743C23v32Ev,
  (VTBL_ENTRY)&_ZN6S743C23v33Ev,
  (VTBL_ENTRY)&_ZN6S743C23v34Ev,
  (VTBL_ENTRY)&_ZN6S743C23v35Ev,
  (VTBL_ENTRY)&_ZN6S743C23v36Ev,
  (VTBL_ENTRY)&_ZN6S743C23v37Ev,
  (VTBL_ENTRY)&_ZN6S743C23v38Ev,
  (VTBL_ENTRY)&_ZN6S743C12v1Ev,
  (VTBL_ENTRY)&_ZN6S743C12v2Ev,
  (VTBL_ENTRY)&_ZN6S743C12v3Ev,
  (VTBL_ENTRY)&_ZN6S743C12v4Ev,
  (VTBL_ENTRY)&_ZN6S743C12v5Ev,
  (VTBL_ENTRY)&_ZN6S743C12v6Ev,
  (VTBL_ENTRY)&_ZN6S743C12v7Ev,
  (VTBL_ENTRY)&_ZN6S743C12v8Ev,
  (VTBL_ENTRY)&_ZN6S743C12v9Ev,
  (VTBL_ENTRY)&_ZN6S743C13v10Ev,
  (VTBL_ENTRY)&_ZN6S743C13v11Ev,
  (VTBL_ENTRY)&_ZN6S743C13v12Ev,
  (VTBL_ENTRY)&_ZN6S743C13v13Ev,
  (VTBL_ENTRY)&_ZN6S743C13v14Ev,
};
extern VTBL_ENTRY _ZTI6S743C1[];
extern  VTBL_ENTRY _ZTV6S743C1[];
Class_Descriptor cd_S743C1 = {  "S743C1", // class name
  bases_S743C1, 4,
  &(vtc_S743C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(528,352), // object size
  NSPAIRA(_ZTI6S743C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S743C1),42, //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  S293C5  : S770C5_nt {
  virtual void  v10(); // _ZN6S293C53v10Ev
  virtual void  v11(); // _ZN6S293C53v11Ev
  virtual void  v12(); // _ZN6S293C53v12Ev
  virtual void  v13(); // _ZN6S293C53v13Ev
  virtual void  v14(); // _ZN6S293C53v14Ev
  ~S293C5(); // tgen
  S293C5(); // tgen
};
//SIG(-1 S293C5) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S293C5 ::v10(){vfunc_called(this, "_ZN6S293C53v10Ev");}
void  S293C5 ::v11(){vfunc_called(this, "_ZN6S293C53v11Ev");}
void  S293C5 ::v12(){vfunc_called(this, "_ZN6S293C53v12Ev");}
void  S293C5 ::v13(){vfunc_called(this, "_ZN6S293C53v13Ev");}
void  S293C5 ::v14(){vfunc_called(this, "_ZN6S293C53v14Ev");}
S293C5 ::~S293C5(){ note_dtor("S293C5", this);} // tgen
S293C5 ::S293C5(){ note_ctor("S293C5", this);} // tgen

static void Test_S293C5()
{
  extern Class_Descriptor cd_S293C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S293C5, buf);
    S293C5 *dp, &lv = *(dp=new (buf) S293C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S293C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S293C5)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S293C5");
    test_class_info(&lv, &cd_S293C5);
    dp->~S293C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS293C5(Test_S293C5, "S293C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S293C5C1Ev();
extern void _ZN6S293C5D1Ev();
Name_Map name_map_S293C5[] = {
  NSPAIR(_ZN6S293C5C1Ev),
  NSPAIR(_ZN6S293C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S293C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S293C5[];
extern void _ZN6S293C5D1Ev();
extern void _ZN6S293C5D0Ev();
extern void _ZN6S293C53v10Ev();
extern void _ZN6S293C53v11Ev();
extern void _ZN6S293C53v12Ev();
extern void _ZN6S293C53v13Ev();
extern void _ZN6S293C53v14Ev();
static  VTBL_ENTRY vtc_S293C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S293C5[0]),
  (VTBL_ENTRY)&_ZN6S293C5D1Ev,
  (VTBL_ENTRY)&_ZN6S293C5D0Ev,
  (VTBL_ENTRY)&_ZN6S293C53v10Ev,
  (VTBL_ENTRY)&_ZN6S293C53v11Ev,
  (VTBL_ENTRY)&_ZN6S293C53v12Ev,
  (VTBL_ENTRY)&_ZN6S293C53v13Ev,
  (VTBL_ENTRY)&_ZN6S293C53v14Ev,
};
extern VTBL_ENTRY _ZTI6S293C5[];
extern  VTBL_ENTRY _ZTV6S293C5[];
Class_Descriptor cd_S293C5 = {  "S293C5", // class name
  bases_S293C5, 1,
  &(vtc_S293C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S293C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S293C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S293C4  : S293C5 {
  void *s293c4f0[3];
  ::S770C6_nt s293c4f1;
  virtual void  v15(); // _ZN6S293C43v15Ev
  virtual void  v16(); // _ZN6S293C43v16Ev
  virtual void  v17(); // _ZN6S293C43v17Ev
  virtual void  v18(); // _ZN6S293C43v18Ev
  virtual void  v19(); // _ZN6S293C43v19Ev
  virtual void  v20(); // _ZN6S293C43v20Ev
  virtual void  v21(); // _ZN6S293C43v21Ev
  virtual void  v22(); // _ZN6S293C43v22Ev
  virtual void  v23(); // _ZN6S293C43v23Ev
  virtual void  v24(); // _ZN6S293C43v24Ev
  virtual void  v25(); // _ZN6S293C43v25Ev
  ~S293C4(); // tgen
  S293C4(); // tgen
};
//SIG(-1 S293C4) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S293C4 ::v15(){vfunc_called(this, "_ZN6S293C43v15Ev");}
void  S293C4 ::v16(){vfunc_called(this, "_ZN6S293C43v16Ev");}
void  S293C4 ::v17(){vfunc_called(this, "_ZN6S293C43v17Ev");}
void  S293C4 ::v18(){vfunc_called(this, "_ZN6S293C43v18Ev");}
void  S293C4 ::v19(){vfunc_called(this, "_ZN6S293C43v19Ev");}
void  S293C4 ::v20(){vfunc_called(this, "_ZN6S293C43v20Ev");}
void  S293C4 ::v21(){vfunc_called(this, "_ZN6S293C43v21Ev");}
void  S293C4 ::v22(){vfunc_called(this, "_ZN6S293C43v22Ev");}
void  S293C4 ::v23(){vfunc_called(this, "_ZN6S293C43v23Ev");}
void  S293C4 ::v24(){vfunc_called(this, "_ZN6S293C43v24Ev");}
void  S293C4 ::v25(){vfunc_called(this, "_ZN6S293C43v25Ev");}
S293C4 ::~S293C4(){ note_dtor("S293C4", this);} // tgen
S293C4 ::S293C4(){ note_ctor("S293C4", this);} // tgen

static void Test_S293C4()
{
  extern Class_Descriptor cd_S293C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S293C4, buf);
    S293C4 *dp, &lv = *(dp=new (buf) S293C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S293C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S293C4)");
    check_base_class_offset(lv, (S770C5_nt*)(S293C5*), 0, "S293C4");
    check_base_class_offset(lv, (S293C5*), 0, "S293C4");
    check_field_offset(lv, s293c4f0, ABISELECT(16,8), "S293C4.s293c4f0");
    check_field_offset(lv, s293c4f1, ABISELECT(40,20), "S293C4.s293c4f1");
    test_class_info(&lv, &cd_S293C4);
    dp->~S293C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS293C4(Test_S293C4, "S293C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S293C4C1Ev();
extern void _ZN6S293C4D1Ev();
Name_Map name_map_S293C4[] = {
  NSPAIR(_ZN6S293C4C1Ev),
  NSPAIR(_ZN6S293C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S293C5;
extern VTBL_ENTRY _ZTI6S293C5[];
extern  VTBL_ENTRY _ZTV6S293C5[];
static Base_Class bases_S293C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S293C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S293C4[];
extern void _ZN6S293C4D1Ev();
extern void _ZN6S293C4D0Ev();
extern void _ZN6S293C53v10Ev();
extern void _ZN6S293C53v11Ev();
extern void _ZN6S293C53v12Ev();
extern void _ZN6S293C53v13Ev();
extern void _ZN6S293C53v14Ev();
extern void _ZN6S293C43v15Ev();
extern void _ZN6S293C43v16Ev();
extern void _ZN6S293C43v17Ev();
extern void _ZN6S293C43v18Ev();
extern void _ZN6S293C43v19Ev();
extern void _ZN6S293C43v20Ev();
extern void _ZN6S293C43v21Ev();
extern void _ZN6S293C43v22Ev();
extern void _ZN6S293C43v23Ev();
extern void _ZN6S293C43v24Ev();
extern void _ZN6S293C43v25Ev();
static  VTBL_ENTRY vtc_S293C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S293C4[0]),
  (VTBL_ENTRY)&_ZN6S293C4D1Ev,
  (VTBL_ENTRY)&_ZN6S293C4D0Ev,
  (VTBL_ENTRY)&_ZN6S293C53v10Ev,
  (VTBL_ENTRY)&_ZN6S293C53v11Ev,
  (VTBL_ENTRY)&_ZN6S293C53v12Ev,
  (VTBL_ENTRY)&_ZN6S293C53v13Ev,
  (VTBL_ENTRY)&_ZN6S293C53v14Ev,
  (VTBL_ENTRY)&_ZN6S293C43v15Ev,
  (VTBL_ENTRY)&_ZN6S293C43v16Ev,
  (VTBL_ENTRY)&_ZN6S293C43v17Ev,
  (VTBL_ENTRY)&_ZN6S293C43v18Ev,
  (VTBL_ENTRY)&_ZN6S293C43v19Ev,
  (VTBL_ENTRY)&_ZN6S293C43v20Ev,
  (VTBL_ENTRY)&_ZN6S293C43v21Ev,
  (VTBL_ENTRY)&_ZN6S293C43v22Ev,
  (VTBL_ENTRY)&_ZN6S293C43v23Ev,
  (VTBL_ENTRY)&_ZN6S293C43v24Ev,
  (VTBL_ENTRY)&_ZN6S293C43v25Ev,
};
extern VTBL_ENTRY _ZTI6S293C4[];
extern  VTBL_ENTRY _ZTV6S293C4[];
Class_Descriptor cd_S293C4 = {  "S293C4", // class name
  bases_S293C4, 2,
  &(vtc_S293C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S293C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S293C4),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S293C3  : S293C4 {
  ::S770C6_nt s293c3f0;
  ::S770C9_nt s293c3f1;
  void *s293c3f2[3];
  virtual void  v26(); // _ZN6S293C33v26Ev
  virtual void  v27(); // _ZN6S293C33v27Ev
  virtual void  v28(); // _ZN6S293C33v28Ev
  virtual void  v29(); // _ZN6S293C33v29Ev
  virtual void  v30(); // _ZN6S293C33v30Ev
  virtual void  v31(); // _ZN6S293C33v31Ev
  virtual void  v32(); // _ZN6S293C33v32Ev
  virtual void  v33(); // _ZN6S293C33v33Ev
  ~S293C3(); // tgen
  S293C3(); // tgen
};
//SIG(-1 S293C3) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S293C3 ::v26(){vfunc_called(this, "_ZN6S293C33v26Ev");}
void  S293C3 ::v27(){vfunc_called(this, "_ZN6S293C33v27Ev");}
void  S293C3 ::v28(){vfunc_called(this, "_ZN6S293C33v28Ev");}
void  S293C3 ::v29(){vfunc_called(this, "_ZN6S293C33v29Ev");}
void  S293C3 ::v30(){vfunc_called(this, "_ZN6S293C33v30Ev");}
void  S293C3 ::v31(){vfunc_called(this, "_ZN6S293C33v31Ev");}
void  S293C3 ::v32(){vfunc_called(this, "_ZN6S293C33v32Ev");}
void  S293C3 ::v33(){vfunc_called(this, "_ZN6S293C33v33Ev");}
S293C3 ::~S293C3(){ note_dtor("S293C3", this);} // tgen
S293C3 ::S293C3(){ note_ctor("S293C3", this);} // tgen

static void Test_S293C3()
{
  extern Class_Descriptor cd_S293C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S293C3, buf);
    S293C3 *dp, &lv = *(dp=new (buf) S293C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S293C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S293C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S293C5*)(S293C4*), 0, "S293C3");
    check_base_class_offset(lv, (S293C5*)(S293C4*), 0, "S293C3");
    check_base_class_offset(lv, (S293C4*), 0, "S293C3");
    check_field_offset(lv, s293c3f0, ABISELECT(80,44), "S293C3.s293c3f0");
    check_field_offset(lv, s293c3f1, ABISELECT(120,68), "S293C3.s293c3f1");
    check_field_offset(lv, s293c3f2, ABISELECT(128,72), "S293C3.s293c3f2");
    test_class_info(&lv, &cd_S293C3);
    dp->~S293C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS293C3(Test_S293C3, "S293C3", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S293C3C1Ev();
extern void _ZN6S293C3D1Ev();
Name_Map name_map_S293C3[] = {
  NSPAIR(_ZN6S293C3C1Ev),
  NSPAIR(_ZN6S293C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S293C5;
extern VTBL_ENTRY _ZTI6S293C5[];
extern  VTBL_ENTRY _ZTV6S293C5[];
extern Class_Descriptor cd_S293C4;
extern VTBL_ENTRY _ZTI6S293C4[];
extern  VTBL_ENTRY _ZTV6S293C4[];
static Base_Class bases_S293C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S293C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S293C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S293C3[];
extern void _ZN6S293C3D1Ev();
extern void _ZN6S293C3D0Ev();
extern void _ZN6S293C53v10Ev();
extern void _ZN6S293C53v11Ev();
extern void _ZN6S293C53v12Ev();
extern void _ZN6S293C53v13Ev();
extern void _ZN6S293C53v14Ev();
extern void _ZN6S293C43v15Ev();
extern void _ZN6S293C43v16Ev();
extern void _ZN6S293C43v17Ev();
extern void _ZN6S293C43v18Ev();
extern void _ZN6S293C43v19Ev();
extern void _ZN6S293C43v20Ev();
extern void _ZN6S293C43v21Ev();
extern void _ZN6S293C43v22Ev();
extern void _ZN6S293C43v23Ev();
extern void _ZN6S293C43v24Ev();
extern void _ZN6S293C43v25Ev();
extern void _ZN6S293C33v26Ev();
extern void _ZN6S293C33v27Ev();
extern void _ZN6S293C33v28Ev();
extern void _ZN6S293C33v29Ev();
extern void _ZN6S293C33v30Ev();
extern void _ZN6S293C33v31Ev();
extern void _ZN6S293C33v32Ev();
extern void _ZN6S293C33v33Ev();
static  VTBL_ENTRY vtc_S293C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S293C3[0]),
  (VTBL_ENTRY)&_ZN6S293C3D1Ev,
  (VTBL_ENTRY)&_ZN6S293C3D0Ev,
  (VTBL_ENTRY)&_ZN6S293C53v10Ev,
  (VTBL_ENTRY)&_ZN6S293C53v11Ev,
  (VTBL_ENTRY)&_ZN6S293C53v12Ev,
  (VTBL_ENTRY)&_ZN6S293C53v13Ev,
  (VTBL_ENTRY)&_ZN6S293C53v14Ev,
  (VTBL_ENTRY)&_ZN6S293C43v15Ev,
  (VTBL_ENTRY)&_ZN6S293C43v16Ev,
  (VTBL_ENTRY)&_ZN6S293C43v17Ev,
  (VTBL_ENTRY)&_ZN6S293C43v18Ev,
  (VTBL_ENTRY)&_ZN6S293C43v19Ev,
  (VTBL_ENTRY)&_ZN6S293C43v20Ev,
  (VTBL_ENTRY)&_ZN6S293C43v21Ev,
  (VTBL_ENTRY)&_ZN6S293C43v22Ev,
  (VTBL_ENTRY)&_ZN6S293C43v23Ev,
  (VTBL_ENTRY)&_ZN6S293C43v24Ev,
  (VTBL_ENTRY)&_ZN6S293C43v25Ev,
  (VTBL_ENTRY)&_ZN6S293C33v26Ev,
  (VTBL_ENTRY)&_ZN6S293C33v27Ev,
  (VTBL_ENTRY)&_ZN6S293C33v28Ev,
  (VTBL_ENTRY)&_ZN6S293C33v29Ev,
  (VTBL_ENTRY)&_ZN6S293C33v30Ev,
  (VTBL_ENTRY)&_ZN6S293C33v31Ev,
  (VTBL_ENTRY)&_ZN6S293C33v32Ev,
  (VTBL_ENTRY)&_ZN6S293C33v33Ev,
};
extern VTBL_ENTRY _ZTI6S293C3[];
extern  VTBL_ENTRY _ZTV6S293C3[];
Class_Descriptor cd_S293C3 = {  "S293C3", // class name
  bases_S293C3, 3,
  &(vtc_S293C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S293C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S293C3),28, //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  S293C11  {
  virtual  ~S293C11(); // _ZN7S293C11D1Ev
  virtual void  v34(); // _ZN7S293C113v34Ev
  virtual void  v35(); // _ZN7S293C113v35Ev
  virtual void  v36(); // _ZN7S293C113v36Ev
  S293C11(); // tgen
};
//SIG(-1 S293C11) C1{ vd v1 v2 v3}


 S293C11 ::~S293C11(){ note_dtor("S293C11", this);}
void  S293C11 ::v34(){vfunc_called(this, "_ZN7S293C113v34Ev");}
void  S293C11 ::v35(){vfunc_called(this, "_ZN7S293C113v35Ev");}
void  S293C11 ::v36(){vfunc_called(this, "_ZN7S293C113v36Ev");}
S293C11 ::S293C11(){ note_ctor("S293C11", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S293C11C1Ev();
extern void _ZN7S293C11D1Ev();
Name_Map name_map_S293C11[] = {
  NSPAIR(_ZN7S293C11C1Ev),
  NSPAIR(_ZN7S293C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S293C11[];
extern void _ZN7S293C11D1Ev();
extern void _ZN7S293C11D0Ev();
extern void _ZN7S293C113v34Ev();
extern void _ZN7S293C113v35Ev();
extern void _ZN7S293C113v36Ev();
static  VTBL_ENTRY vtc_S293C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S293C11[0]),
  (VTBL_ENTRY)&_ZN7S293C11D1Ev,
  (VTBL_ENTRY)&_ZN7S293C11D0Ev,
  (VTBL_ENTRY)&_ZN7S293C113v34Ev,
  (VTBL_ENTRY)&_ZN7S293C113v35Ev,
  (VTBL_ENTRY)&_ZN7S293C113v36Ev,
};
extern VTBL_ENTRY _ZTI7S293C11[];
extern  VTBL_ENTRY _ZTV7S293C11[];
Class_Descriptor cd_S293C11 = {  "S293C11", // class name
  0,0,//no base classes
  &(vtc_S293C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S293C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S293C11),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  S293C2  : S293C3 , S293C11 {
  ::S292C12 s293c2f0;
  int s293c2f1;
  char s293c2f2;
  virtual void  v37(); // _ZN6S293C23v37Ev
  virtual void  v38(); // _ZN6S293C23v38Ev
  virtual void  v39(); // _ZN6S293C23v39Ev
  virtual void  v40(); // _ZN6S293C23v40Ev
  virtual void  v41(); // _ZN6S293C23v41Ev
  virtual void  v42(); // _ZN6S293C23v42Ev
  virtual void  v43(); // _ZN6S293C23v43Ev
  virtual void  v44(); // _ZN6S293C23v44Ev
  virtual void  v45(); // _ZN6S293C23v45Ev
  virtual void  v46(); // _ZN6S293C23v46Ev
  ~S293C2(); // tgen
  S293C2(); // tgen
};
//SIG(-1 S293C2) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v11 v12 v13 v14 v15} v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v27 v28 v29 v30 v31 v32 v33 v34 FC6 FC9{ m Fp} Fp[3]} BC10{ vd v35 v36 v37} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC11{ m FC12{ m Fp} Fi Fp} Fi Fc}


void  S293C2 ::v37(){vfunc_called(this, "_ZN6S293C23v37Ev");}
void  S293C2 ::v38(){vfunc_called(this, "_ZN6S293C23v38Ev");}
void  S293C2 ::v39(){vfunc_called(this, "_ZN6S293C23v39Ev");}
void  S293C2 ::v40(){vfunc_called(this, "_ZN6S293C23v40Ev");}
void  S293C2 ::v41(){vfunc_called(this, "_ZN6S293C23v41Ev");}
void  S293C2 ::v42(){vfunc_called(this, "_ZN6S293C23v42Ev");}
void  S293C2 ::v43(){vfunc_called(this, "_ZN6S293C23v43Ev");}
void  S293C2 ::v44(){vfunc_called(this, "_ZN6S293C23v44Ev");}
void  S293C2 ::v45(){vfunc_called(this, "_ZN6S293C23v45Ev");}
void  S293C2 ::v46(){vfunc_called(this, "_ZN6S293C23v46Ev");}
S293C2 ::~S293C2(){ note_dtor("S293C2", this);} // tgen
S293C2 ::S293C2(){ note_ctor("S293C2", this);} // tgen

static void Test_S293C2()
{
  extern Class_Descriptor cd_S293C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,28)];
    init_test(&cd_S293C2, buf);
    S293C2 *dp, &lv = *(dp=new (buf) S293C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,108), "sizeof(S293C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S293C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S293C5*)(S293C4*)(S293C3*), 0, "S293C2");
    check_base_class_offset(lv, (S293C5*)(S293C4*)(S293C3*), 0, "S293C2");
    check_base_class_offset(lv, (S293C4*)(S293C3*), 0, "S293C2");
    check_base_class_offset(lv, (S293C3*), 0, "S293C2");
    check_base_class_offset(lv, (S293C11*), ABISELECT(152,84), "S293C2");
    check_field_offset(lv, s293c2f0, ABISELECT(160,88), "S293C2.s293c2f0");
    check_field_offset(lv, s293c2f1, ABISELECT(184,100), "S293C2.s293c2f1");
    check_field_offset(lv, s293c2f2, ABISELECT(188,104), "S293C2.s293c2f2");
    test_class_info(&lv, &cd_S293C2);
    dp->~S293C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS293C2(Test_S293C2, "S293C2", ABISELECT(192,108));

#else // __cplusplus

extern void _ZN6S293C2C1Ev();
extern void _ZN6S293C2D1Ev();
Name_Map name_map_S293C2[] = {
  NSPAIR(_ZN6S293C2C1Ev),
  NSPAIR(_ZN6S293C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S293C5;
extern VTBL_ENTRY _ZTI6S293C5[];
extern  VTBL_ENTRY _ZTV6S293C5[];
extern Class_Descriptor cd_S293C4;
extern VTBL_ENTRY _ZTI6S293C4[];
extern  VTBL_ENTRY _ZTV6S293C4[];
extern Class_Descriptor cd_S293C3;
extern VTBL_ENTRY _ZTI6S293C3[];
extern  VTBL_ENTRY _ZTV6S293C3[];
extern Class_Descriptor cd_S293C11;
extern VTBL_ENTRY _ZTI7S293C11[];
extern  VTBL_ENTRY _ZTV7S293C11[];
static Base_Class bases_S293C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S293C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S293C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S293C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S293C11,    ABISELECT(152,84), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S293C2[];
extern void _ZN6S293C2D1Ev();
extern void _ZN6S293C2D0Ev();
extern void _ZN6S293C53v10Ev();
extern void _ZN6S293C53v11Ev();
extern void _ZN6S293C53v12Ev();
extern void _ZN6S293C53v13Ev();
extern void _ZN6S293C53v14Ev();
extern void _ZN6S293C43v15Ev();
extern void _ZN6S293C43v16Ev();
extern void _ZN6S293C43v17Ev();
extern void _ZN6S293C43v18Ev();
extern void _ZN6S293C43v19Ev();
extern void _ZN6S293C43v20Ev();
extern void _ZN6S293C43v21Ev();
extern void _ZN6S293C43v22Ev();
extern void _ZN6S293C43v23Ev();
extern void _ZN6S293C43v24Ev();
extern void _ZN6S293C43v25Ev();
extern void _ZN6S293C33v26Ev();
extern void _ZN6S293C33v27Ev();
extern void _ZN6S293C33v28Ev();
extern void _ZN6S293C33v29Ev();
extern void _ZN6S293C33v30Ev();
extern void _ZN6S293C33v31Ev();
extern void _ZN6S293C33v32Ev();
extern void _ZN6S293C33v33Ev();
extern void _ZN6S293C23v37Ev();
extern void _ZN6S293C23v38Ev();
extern void _ZN6S293C23v39Ev();
extern void _ZN6S293C23v40Ev();
extern void _ZN6S293C23v41Ev();
extern void _ZN6S293C23v42Ev();
extern void _ZN6S293C23v43Ev();
extern void _ZN6S293C23v44Ev();
extern void _ZN6S293C23v45Ev();
extern void _ZN6S293C23v46Ev();
extern void ABISELECT(_ZThn152_N6S293C2D1Ev,_ZThn84_N6S293C2D1Ev)();
extern void ABISELECT(_ZThn152_N6S293C2D0Ev,_ZThn84_N6S293C2D0Ev)();
extern void _ZN7S293C113v34Ev();
extern void _ZN7S293C113v35Ev();
extern void _ZN7S293C113v36Ev();
static  VTBL_ENTRY vtc_S293C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S293C2[0]),
  (VTBL_ENTRY)&_ZN6S293C2D1Ev,
  (VTBL_ENTRY)&_ZN6S293C2D0Ev,
  (VTBL_ENTRY)&_ZN6S293C53v10Ev,
  (VTBL_ENTRY)&_ZN6S293C53v11Ev,
  (VTBL_ENTRY)&_ZN6S293C53v12Ev,
  (VTBL_ENTRY)&_ZN6S293C53v13Ev,
  (VTBL_ENTRY)&_ZN6S293C53v14Ev,
  (VTBL_ENTRY)&_ZN6S293C43v15Ev,
  (VTBL_ENTRY)&_ZN6S293C43v16Ev,
  (VTBL_ENTRY)&_ZN6S293C43v17Ev,
  (VTBL_ENTRY)&_ZN6S293C43v18Ev,
  (VTBL_ENTRY)&_ZN6S293C43v19Ev,
  (VTBL_ENTRY)&_ZN6S293C43v20Ev,
  (VTBL_ENTRY)&_ZN6S293C43v21Ev,
  (VTBL_ENTRY)&_ZN6S293C43v22Ev,
  (VTBL_ENTRY)&_ZN6S293C43v23Ev,
  (VTBL_ENTRY)&_ZN6S293C43v24Ev,
  (VTBL_ENTRY)&_ZN6S293C43v25Ev,
  (VTBL_ENTRY)&_ZN6S293C33v26Ev,
  (VTBL_ENTRY)&_ZN6S293C33v27Ev,
  (VTBL_ENTRY)&_ZN6S293C33v28Ev,
  (VTBL_ENTRY)&_ZN6S293C33v29Ev,
  (VTBL_ENTRY)&_ZN6S293C33v30Ev,
  (VTBL_ENTRY)&_ZN6S293C33v31Ev,
  (VTBL_ENTRY)&_ZN6S293C33v32Ev,
  (VTBL_ENTRY)&_ZN6S293C33v33Ev,
  (VTBL_ENTRY)&_ZN6S293C23v37Ev,
  (VTBL_ENTRY)&_ZN6S293C23v38Ev,
  (VTBL_ENTRY)&_ZN6S293C23v39Ev,
  (VTBL_ENTRY)&_ZN6S293C23v40Ev,
  (VTBL_ENTRY)&_ZN6S293C23v41Ev,
  (VTBL_ENTRY)&_ZN6S293C23v42Ev,
  (VTBL_ENTRY)&_ZN6S293C23v43Ev,
  (VTBL_ENTRY)&_ZN6S293C23v44Ev,
  (VTBL_ENTRY)&_ZN6S293C23v45Ev,
  (VTBL_ENTRY)&_ZN6S293C23v46Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI6S293C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S293C2D1Ev,_ZThn84_N6S293C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S293C2D0Ev,_ZThn84_N6S293C2D0Ev),
  (VTBL_ENTRY)&_ZN7S293C113v34Ev,
  (VTBL_ENTRY)&_ZN7S293C113v35Ev,
  (VTBL_ENTRY)&_ZN7S293C113v36Ev,
};
extern VTBL_ENTRY _ZTI6S293C2[];
extern  VTBL_ENTRY _ZTV6S293C2[];
Class_Descriptor cd_S293C2 = {  "S293C2", // class name
  bases_S293C2, 5,
  &(vtc_S293C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,108), // object size
  NSPAIRA(_ZTI6S293C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S293C2),45, //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  S293C14  {
  ::S2215C20_nt s293c14f0;
  ::S2215C20_nt s293c14f1;
  ::S2215C20_nt s293c14f2;
  ::S292C17_nt s293c14f3;
  ::S292C18 s293c14f4;
  ::S292C18 s293c14f5;
  int s293c14f6[2];
  ::S744C15_nt s293c14f7;
};
//SIG(-1 S293C14) C1{ FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC4{ m Fi[5]} FC5{ m FC4 Fi FC6{ m Fs[6] Fi[2] Fc Fs} Fc} FC5 Fi[2] FC7{ m Fp}}



static void Test_S293C14()
{
  {
    init_simple_test("S293C14");
    S293C14 lv;
    check2(sizeof(lv), ABISELECT(192,172), "sizeof(S293C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S293C14)");
    check_field_offset(lv, s293c14f0, 0, "S293C14.s293c14f0");
    check_field_offset(lv, s293c14f1, ABISELECT(16,12), "S293C14.s293c14f1");
    check_field_offset(lv, s293c14f2, ABISELECT(32,24), "S293C14.s293c14f2");
    check_field_offset(lv, s293c14f3, ABISELECT(48,36), "S293C14.s293c14f3");
    check_field_offset(lv, s293c14f4, ABISELECT(68,56), "S293C14.s293c14f4");
    check_field_offset(lv, s293c14f5, ABISELECT(120,108), "S293C14.s293c14f5");
    check_field_offset(lv, s293c14f6, ABISELECT(172,160), "S293C14.s293c14f6");
    check_field_offset(lv, s293c14f7, ABISELECT(184,168), "S293C14.s293c14f7");
  }
}
static Arrange_To_Call_Me vS293C14(Test_S293C14, "S293C14", ABISELECT(192,172));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S293C1  : S293C2 {
  ::S293C14 s293c1f0;
  virtual void  v1(); // _ZN6S293C12v1Ev
  virtual void  v2(); // _ZN6S293C12v2Ev
  virtual void  v3(); // _ZN6S293C12v3Ev
  virtual void  v4(); // _ZN6S293C12v4Ev
  virtual void  v5(); // _ZN6S293C12v5Ev
  virtual void  v6(); // _ZN6S293C12v6Ev
  virtual void  v7(); // _ZN6S293C12v7Ev
  virtual void  v8(); // _ZN6S293C12v8Ev
  virtual void  v9(); // _ZN6S293C12v9Ev
  ~S293C1(); // tgen
  S293C1(); // tgen
};
//SIG(1 S293C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fi} v10 v11 v12 v13 v14} v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fp[3] FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]}} v26 v27 v28 v29 v30 v31 v32 v33 FC7 FC10{ m Fp} Fp[3]} BC11{ vd v34 v35 v36} v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 FC12{ m FC13{ m Fp} Fi Fp} Fi Fc} v1 v2 v3 v4 v5 v6 v7 v8 v9 FC14{ FC15{ m Fp Fi FC16{ m}} FC15 FC15 FC17{ m Fi[5]} FC18{ m FC17 Fi FC19{ m Fs[6] Fi[2] Fc Fs} Fc} FC18 Fi[2] FC13}}


void  S293C1 ::v1(){vfunc_called(this, "_ZN6S293C12v1Ev");}
void  S293C1 ::v2(){vfunc_called(this, "_ZN6S293C12v2Ev");}
void  S293C1 ::v3(){vfunc_called(this, "_ZN6S293C12v3Ev");}
void  S293C1 ::v4(){vfunc_called(this, "_ZN6S293C12v4Ev");}
void  S293C1 ::v5(){vfunc_called(this, "_ZN6S293C12v5Ev");}
void  S293C1 ::v6(){vfunc_called(this, "_ZN6S293C12v6Ev");}
void  S293C1 ::v7(){vfunc_called(this, "_ZN6S293C12v7Ev");}
void  S293C1 ::v8(){vfunc_called(this, "_ZN6S293C12v8Ev");}
void  S293C1 ::v9(){vfunc_called(this, "_ZN6S293C12v9Ev");}
S293C1 ::~S293C1(){ note_dtor("S293C1", this);} // tgen
S293C1 ::S293C1(){ note_ctor("S293C1", this);} // tgen

static void Test_S293C1()
{
  extern Class_Descriptor cd_S293C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,71)];
    init_test(&cd_S293C1, buf);
    S293C1 *dp, &lv = *(dp=new (buf) S293C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,280), "sizeof(S293C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S293C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S293C5*)(S293C4*)(S293C3*)(S293C2*), 0, "S293C1");
    check_base_class_offset(lv, (S293C5*)(S293C4*)(S293C3*)(S293C2*), 0, "S293C1");
    check_base_class_offset(lv, (S293C4*)(S293C3*)(S293C2*), 0, "S293C1");
    check_base_class_offset(lv, (S293C3*)(S293C2*), 0, "S293C1");
    check_base_class_offset(lv, (S293C11*)(S293C2*), ABISELECT(152,84), "S293C1");
    check_base_class_offset(lv, (S293C2*), 0, "S293C1");
    check_field_offset(lv, s293c1f0, ABISELECT(192,108), "S293C1.s293c1f0");
    test_class_info(&lv, &cd_S293C1);
    dp->~S293C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS293C1(Test_S293C1, "S293C1", ABISELECT(384,280));

#else // __cplusplus

extern void _ZN6S293C1C1Ev();
extern void _ZN6S293C1D1Ev();
Name_Map name_map_S293C1[] = {
  NSPAIR(_ZN6S293C1C1Ev),
  NSPAIR(_ZN6S293C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S293C5;
extern VTBL_ENTRY _ZTI6S293C5[];
extern  VTBL_ENTRY _ZTV6S293C5[];
extern Class_Descriptor cd_S293C4;
extern VTBL_ENTRY _ZTI6S293C4[];
extern  VTBL_ENTRY _ZTV6S293C4[];
extern Class_Descriptor cd_S293C3;
extern VTBL_ENTRY _ZTI6S293C3[];
extern  VTBL_ENTRY _ZTV6S293C3[];
extern Class_Descriptor cd_S293C11;
extern VTBL_ENTRY _ZTI7S293C11[];
extern  VTBL_ENTRY _ZTV7S293C11[];
extern Class_Descriptor cd_S293C2;
extern VTBL_ENTRY _ZTI6S293C2[];
extern  VTBL_ENTRY _ZTV6S293C2[];
static Base_Class bases_S293C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S293C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S293C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S293C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S293C11,    ABISELECT(152,84), //bcp->offset
    47, //bcp->virtual_function_table_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_S293C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S293C1[];
extern void _ZN6S293C1D1Ev();
extern void _ZN6S293C1D0Ev();
extern void _ZN6S293C53v10Ev();
extern void _ZN6S293C53v11Ev();
extern void _ZN6S293C53v12Ev();
extern void _ZN6S293C53v13Ev();
extern void _ZN6S293C53v14Ev();
extern void _ZN6S293C43v15Ev();
extern void _ZN6S293C43v16Ev();
extern void _ZN6S293C43v17Ev();
extern void _ZN6S293C43v18Ev();
extern void _ZN6S293C43v19Ev();
extern void _ZN6S293C43v20Ev();
extern void _ZN6S293C43v21Ev();
extern void _ZN6S293C43v22Ev();
extern void _ZN6S293C43v23Ev();
extern void _ZN6S293C43v24Ev();
extern void _ZN6S293C43v25Ev();
extern void _ZN6S293C33v26Ev();
extern void _ZN6S293C33v27Ev();
extern void _ZN6S293C33v28Ev();
extern void _ZN6S293C33v29Ev();
extern void _ZN6S293C33v30Ev();
extern void _ZN6S293C33v31Ev();
extern void _ZN6S293C33v32Ev();
extern void _ZN6S293C33v33Ev();
extern void _ZN6S293C23v37Ev();
extern void _ZN6S293C23v38Ev();
extern void _ZN6S293C23v39Ev();
extern void _ZN6S293C23v40Ev();
extern void _ZN6S293C23v41Ev();
extern void _ZN6S293C23v42Ev();
extern void _ZN6S293C23v43Ev();
extern void _ZN6S293C23v44Ev();
extern void _ZN6S293C23v45Ev();
extern void _ZN6S293C23v46Ev();
extern void _ZN6S293C12v1Ev();
extern void _ZN6S293C12v2Ev();
extern void _ZN6S293C12v3Ev();
extern void _ZN6S293C12v4Ev();
extern void _ZN6S293C12v5Ev();
extern void _ZN6S293C12v6Ev();
extern void _ZN6S293C12v7Ev();
extern void _ZN6S293C12v8Ev();
extern void _ZN6S293C12v9Ev();
extern void ABISELECT(_ZThn152_N6S293C1D1Ev,_ZThn84_N6S293C1D1Ev)();
extern void ABISELECT(_ZThn152_N6S293C1D0Ev,_ZThn84_N6S293C1D0Ev)();
extern void _ZN7S293C113v34Ev();
extern void _ZN7S293C113v35Ev();
extern void _ZN7S293C113v36Ev();
static  VTBL_ENTRY vtc_S293C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S293C1[0]),
  (VTBL_ENTRY)&_ZN6S293C1D1Ev,
  (VTBL_ENTRY)&_ZN6S293C1D0Ev,
  (VTBL_ENTRY)&_ZN6S293C53v10Ev,
  (VTBL_ENTRY)&_ZN6S293C53v11Ev,
  (VTBL_ENTRY)&_ZN6S293C53v12Ev,
  (VTBL_ENTRY)&_ZN6S293C53v13Ev,
  (VTBL_ENTRY)&_ZN6S293C53v14Ev,
  (VTBL_ENTRY)&_ZN6S293C43v15Ev,
  (VTBL_ENTRY)&_ZN6S293C43v16Ev,
  (VTBL_ENTRY)&_ZN6S293C43v17Ev,
  (VTBL_ENTRY)&_ZN6S293C43v18Ev,
  (VTBL_ENTRY)&_ZN6S293C43v19Ev,
  (VTBL_ENTRY)&_ZN6S293C43v20Ev,
  (VTBL_ENTRY)&_ZN6S293C43v21Ev,
  (VTBL_ENTRY)&_ZN6S293C43v22Ev,
  (VTBL_ENTRY)&_ZN6S293C43v23Ev,
  (VTBL_ENTRY)&_ZN6S293C43v24Ev,
  (VTBL_ENTRY)&_ZN6S293C43v25Ev,
  (VTBL_ENTRY)&_ZN6S293C33v26Ev,
  (VTBL_ENTRY)&_ZN6S293C33v27Ev,
  (VTBL_ENTRY)&_ZN6S293C33v28Ev,
  (VTBL_ENTRY)&_ZN6S293C33v29Ev,
  (VTBL_ENTRY)&_ZN6S293C33v30Ev,
  (VTBL_ENTRY)&_ZN6S293C33v31Ev,
  (VTBL_ENTRY)&_ZN6S293C33v32Ev,
  (VTBL_ENTRY)&_ZN6S293C33v33Ev,
  (VTBL_ENTRY)&_ZN6S293C23v37Ev,
  (VTBL_ENTRY)&_ZN6S293C23v38Ev,
  (VTBL_ENTRY)&_ZN6S293C23v39Ev,
  (VTBL_ENTRY)&_ZN6S293C23v40Ev,
  (VTBL_ENTRY)&_ZN6S293C23v41Ev,
  (VTBL_ENTRY)&_ZN6S293C23v42Ev,
  (VTBL_ENTRY)&_ZN6S293C23v43Ev,
  (VTBL_ENTRY)&_ZN6S293C23v44Ev,
  (VTBL_ENTRY)&_ZN6S293C23v45Ev,
  (VTBL_ENTRY)&_ZN6S293C23v46Ev,
  (VTBL_ENTRY)&_ZN6S293C12v1Ev,
  (VTBL_ENTRY)&_ZN6S293C12v2Ev,
  (VTBL_ENTRY)&_ZN6S293C12v3Ev,
  (VTBL_ENTRY)&_ZN6S293C12v4Ev,
  (VTBL_ENTRY)&_ZN6S293C12v5Ev,
  (VTBL_ENTRY)&_ZN6S293C12v6Ev,
  (VTBL_ENTRY)&_ZN6S293C12v7Ev,
  (VTBL_ENTRY)&_ZN6S293C12v8Ev,
  (VTBL_ENTRY)&_ZN6S293C12v9Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI6S293C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S293C1D1Ev,_ZThn84_N6S293C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S293C1D0Ev,_ZThn84_N6S293C1D0Ev),
  (VTBL_ENTRY)&_ZN7S293C113v34Ev,
  (VTBL_ENTRY)&_ZN7S293C113v35Ev,
  (VTBL_ENTRY)&_ZN7S293C113v36Ev,
};
extern VTBL_ENTRY _ZTI6S293C1[];
extern  VTBL_ENTRY _ZTV6S293C1[];
Class_Descriptor cd_S293C1 = {  "S293C1", // class name
  bases_S293C1, 6,
  &(vtc_S293C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,280), // object size
  NSPAIRA(_ZTI6S293C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S293C1),54, //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  S294C5  : S770C5_nt {
  virtual void  v10(); // _ZN6S294C53v10Ev
  virtual void  v11(); // _ZN6S294C53v11Ev
  virtual void  v12(); // _ZN6S294C53v12Ev
  virtual void  v13(); // _ZN6S294C53v13Ev
  virtual void  v14(); // _ZN6S294C53v14Ev
  ~S294C5(); // tgen
  S294C5(); // tgen
};
//SIG(-1 S294C5) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S294C5 ::v10(){vfunc_called(this, "_ZN6S294C53v10Ev");}
void  S294C5 ::v11(){vfunc_called(this, "_ZN6S294C53v11Ev");}
void  S294C5 ::v12(){vfunc_called(this, "_ZN6S294C53v12Ev");}
void  S294C5 ::v13(){vfunc_called(this, "_ZN6S294C53v13Ev");}
void  S294C5 ::v14(){vfunc_called(this, "_ZN6S294C53v14Ev");}
S294C5 ::~S294C5(){ note_dtor("S294C5", this);} // tgen
S294C5 ::S294C5(){ note_ctor("S294C5", this);} // tgen

static void Test_S294C5()
{
  extern Class_Descriptor cd_S294C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S294C5, buf);
    S294C5 *dp, &lv = *(dp=new (buf) S294C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S294C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S294C5)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S294C5");
    test_class_info(&lv, &cd_S294C5);
    dp->~S294C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS294C5(Test_S294C5, "S294C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S294C5C1Ev();
extern void _ZN6S294C5D1Ev();
Name_Map name_map_S294C5[] = {
  NSPAIR(_ZN6S294C5C1Ev),
  NSPAIR(_ZN6S294C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S294C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S294C5[];
extern void _ZN6S294C5D1Ev();
extern void _ZN6S294C5D0Ev();
extern void _ZN6S294C53v10Ev();
extern void _ZN6S294C53v11Ev();
extern void _ZN6S294C53v12Ev();
extern void _ZN6S294C53v13Ev();
extern void _ZN6S294C53v14Ev();
static  VTBL_ENTRY vtc_S294C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S294C5[0]),
  (VTBL_ENTRY)&_ZN6S294C5D1Ev,
  (VTBL_ENTRY)&_ZN6S294C5D0Ev,
  (VTBL_ENTRY)&_ZN6S294C53v10Ev,
  (VTBL_ENTRY)&_ZN6S294C53v11Ev,
  (VTBL_ENTRY)&_ZN6S294C53v12Ev,
  (VTBL_ENTRY)&_ZN6S294C53v13Ev,
  (VTBL_ENTRY)&_ZN6S294C53v14Ev,
};
extern VTBL_ENTRY _ZTI6S294C5[];
extern  VTBL_ENTRY _ZTV6S294C5[];
Class_Descriptor cd_S294C5 = {  "S294C5", // class name
  bases_S294C5, 1,
  &(vtc_S294C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S294C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S294C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S294C4  : S294C5 {
  void *s294c4f0[3];
  ::S770C6_nt s294c4f1;
  virtual void  v15(); // _ZN6S294C43v15Ev
  virtual void  v16(); // _ZN6S294C43v16Ev
  virtual void  v17(); // _ZN6S294C43v17Ev
  virtual void  v18(); // _ZN6S294C43v18Ev
  virtual void  v19(); // _ZN6S294C43v19Ev
  virtual void  v20(); // _ZN6S294C43v20Ev
  virtual void  v21(); // _ZN6S294C43v21Ev
  virtual void  v22(); // _ZN6S294C43v22Ev
  virtual void  v23(); // _ZN6S294C43v23Ev
  virtual void  v24(); // _ZN6S294C43v24Ev
  virtual void  v25(); // _ZN6S294C43v25Ev
  ~S294C4(); // tgen
  S294C4(); // tgen
};
//SIG(-1 S294C4) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S294C4 ::v15(){vfunc_called(this, "_ZN6S294C43v15Ev");}
void  S294C4 ::v16(){vfunc_called(this, "_ZN6S294C43v16Ev");}
void  S294C4 ::v17(){vfunc_called(this, "_ZN6S294C43v17Ev");}
void  S294C4 ::v18(){vfunc_called(this, "_ZN6S294C43v18Ev");}
void  S294C4 ::v19(){vfunc_called(this, "_ZN6S294C43v19Ev");}
void  S294C4 ::v20(){vfunc_called(this, "_ZN6S294C43v20Ev");}
void  S294C4 ::v21(){vfunc_called(this, "_ZN6S294C43v21Ev");}
void  S294C4 ::v22(){vfunc_called(this, "_ZN6S294C43v22Ev");}
void  S294C4 ::v23(){vfunc_called(this, "_ZN6S294C43v23Ev");}
void  S294C4 ::v24(){vfunc_called(this, "_ZN6S294C43v24Ev");}
void  S294C4 ::v25(){vfunc_called(this, "_ZN6S294C43v25Ev");}
S294C4 ::~S294C4(){ note_dtor("S294C4", this);} // tgen
S294C4 ::S294C4(){ note_ctor("S294C4", this);} // tgen

static void Test_S294C4()
{
  extern Class_Descriptor cd_S294C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S294C4, buf);
    S294C4 *dp, &lv = *(dp=new (buf) S294C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S294C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S294C4)");
    check_base_class_offset(lv, (S770C5_nt*)(S294C5*), 0, "S294C4");
    check_base_class_offset(lv, (S294C5*), 0, "S294C4");
    check_field_offset(lv, s294c4f0, ABISELECT(16,8), "S294C4.s294c4f0");
    check_field_offset(lv, s294c4f1, ABISELECT(40,20), "S294C4.s294c4f1");
    test_class_info(&lv, &cd_S294C4);
    dp->~S294C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS294C4(Test_S294C4, "S294C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S294C4C1Ev();
extern void _ZN6S294C4D1Ev();
Name_Map name_map_S294C4[] = {
  NSPAIR(_ZN6S294C4C1Ev),
  NSPAIR(_ZN6S294C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S294C5;
extern VTBL_ENTRY _ZTI6S294C5[];
extern  VTBL_ENTRY _ZTV6S294C5[];
static Base_Class bases_S294C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S294C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S294C4[];
extern void _ZN6S294C4D1Ev();
extern void _ZN6S294C4D0Ev();
extern void _ZN6S294C53v10Ev();
extern void _ZN6S294C53v11Ev();
extern void _ZN6S294C53v12Ev();
extern void _ZN6S294C53v13Ev();
extern void _ZN6S294C53v14Ev();
extern void _ZN6S294C43v15Ev();
extern void _ZN6S294C43v16Ev();
extern void _ZN6S294C43v17Ev();
extern void _ZN6S294C43v18Ev();
extern void _ZN6S294C43v19Ev();
extern void _ZN6S294C43v20Ev();
extern void _ZN6S294C43v21Ev();
extern void _ZN6S294C43v22Ev();
extern void _ZN6S294C43v23Ev();
extern void _ZN6S294C43v24Ev();
extern void _ZN6S294C43v25Ev();
static  VTBL_ENTRY vtc_S294C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S294C4[0]),
  (VTBL_ENTRY)&_ZN6S294C4D1Ev,
  (VTBL_ENTRY)&_ZN6S294C4D0Ev,
  (VTBL_ENTRY)&_ZN6S294C53v10Ev,
  (VTBL_ENTRY)&_ZN6S294C53v11Ev,
  (VTBL_ENTRY)&_ZN6S294C53v12Ev,
  (VTBL_ENTRY)&_ZN6S294C53v13Ev,
  (VTBL_ENTRY)&_ZN6S294C53v14Ev,
  (VTBL_ENTRY)&_ZN6S294C43v15Ev,
  (VTBL_ENTRY)&_ZN6S294C43v16Ev,
  (VTBL_ENTRY)&_ZN6S294C43v17Ev,
  (VTBL_ENTRY)&_ZN6S294C43v18Ev,
  (VTBL_ENTRY)&_ZN6S294C43v19Ev,
  (VTBL_ENTRY)&_ZN6S294C43v20Ev,
  (VTBL_ENTRY)&_ZN6S294C43v21Ev,
  (VTBL_ENTRY)&_ZN6S294C43v22Ev,
  (VTBL_ENTRY)&_ZN6S294C43v23Ev,
  (VTBL_ENTRY)&_ZN6S294C43v24Ev,
  (VTBL_ENTRY)&_ZN6S294C43v25Ev,
};
extern VTBL_ENTRY _ZTI6S294C4[];
extern  VTBL_ENTRY _ZTV6S294C4[];
Class_Descriptor cd_S294C4 = {  "S294C4", // class name
  bases_S294C4, 2,
  &(vtc_S294C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S294C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S294C4),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S294C3  : S294C4 {
  ::S770C6_nt s294c3f0;
  ::S770C9_nt s294c3f1;
  void *s294c3f2[3];
  virtual void  v26(); // _ZN6S294C33v26Ev
  virtual void  v27(); // _ZN6S294C33v27Ev
  virtual void  v28(); // _ZN6S294C33v28Ev
  virtual void  v29(); // _ZN6S294C33v29Ev
  virtual void  v30(); // _ZN6S294C33v30Ev
  virtual void  v31(); // _ZN6S294C33v31Ev
  virtual void  v32(); // _ZN6S294C33v32Ev
  virtual void  v33(); // _ZN6S294C33v33Ev
  ~S294C3(); // tgen
  S294C3(); // tgen
};
//SIG(-1 S294C3) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S294C3 ::v26(){vfunc_called(this, "_ZN6S294C33v26Ev");}
void  S294C3 ::v27(){vfunc_called(this, "_ZN6S294C33v27Ev");}
void  S294C3 ::v28(){vfunc_called(this, "_ZN6S294C33v28Ev");}
void  S294C3 ::v29(){vfunc_called(this, "_ZN6S294C33v29Ev");}
void  S294C3 ::v30(){vfunc_called(this, "_ZN6S294C33v30Ev");}
void  S294C3 ::v31(){vfunc_called(this, "_ZN6S294C33v31Ev");}
void  S294C3 ::v32(){vfunc_called(this, "_ZN6S294C33v32Ev");}
void  S294C3 ::v33(){vfunc_called(this, "_ZN6S294C33v33Ev");}
S294C3 ::~S294C3(){ note_dtor("S294C3", this);} // tgen
S294C3 ::S294C3(){ note_ctor("S294C3", this);} // tgen

static void Test_S294C3()
{
  extern Class_Descriptor cd_S294C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S294C3, buf);
    S294C3 *dp, &lv = *(dp=new (buf) S294C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S294C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S294C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S294C5*)(S294C4*), 0, "S294C3");
    check_base_class_offset(lv, (S294C5*)(S294C4*), 0, "S294C3");
    check_base_class_offset(lv, (S294C4*), 0, "S294C3");
    check_field_offset(lv, s294c3f0, ABISELECT(80,44), "S294C3.s294c3f0");
    check_field_offset(lv, s294c3f1, ABISELECT(120,68), "S294C3.s294c3f1");
    check_field_offset(lv, s294c3f2, ABISELECT(128,72), "S294C3.s294c3f2");
    test_class_info(&lv, &cd_S294C3);
    dp->~S294C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS294C3(Test_S294C3, "S294C3", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S294C3C1Ev();
extern void _ZN6S294C3D1Ev();
Name_Map name_map_S294C3[] = {
  NSPAIR(_ZN6S294C3C1Ev),
  NSPAIR(_ZN6S294C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S294C5;
extern VTBL_ENTRY _ZTI6S294C5[];
extern  VTBL_ENTRY _ZTV6S294C5[];
extern Class_Descriptor cd_S294C4;
extern VTBL_ENTRY _ZTI6S294C4[];
extern  VTBL_ENTRY _ZTV6S294C4[];
static Base_Class bases_S294C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S294C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S294C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S294C3[];
extern void _ZN6S294C3D1Ev();
extern void _ZN6S294C3D0Ev();
extern void _ZN6S294C53v10Ev();
extern void _ZN6S294C53v11Ev();
extern void _ZN6S294C53v12Ev();
extern void _ZN6S294C53v13Ev();
extern void _ZN6S294C53v14Ev();
extern void _ZN6S294C43v15Ev();
extern void _ZN6S294C43v16Ev();
extern void _ZN6S294C43v17Ev();
extern void _ZN6S294C43v18Ev();
extern void _ZN6S294C43v19Ev();
extern void _ZN6S294C43v20Ev();
extern void _ZN6S294C43v21Ev();
extern void _ZN6S294C43v22Ev();
extern void _ZN6S294C43v23Ev();
extern void _ZN6S294C43v24Ev();
extern void _ZN6S294C43v25Ev();
extern void _ZN6S294C33v26Ev();
extern void _ZN6S294C33v27Ev();
extern void _ZN6S294C33v28Ev();
extern void _ZN6S294C33v29Ev();
extern void _ZN6S294C33v30Ev();
extern void _ZN6S294C33v31Ev();
extern void _ZN6S294C33v32Ev();
extern void _ZN6S294C33v33Ev();
static  VTBL_ENTRY vtc_S294C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S294C3[0]),
  (VTBL_ENTRY)&_ZN6S294C3D1Ev,
  (VTBL_ENTRY)&_ZN6S294C3D0Ev,
  (VTBL_ENTRY)&_ZN6S294C53v10Ev,
  (VTBL_ENTRY)&_ZN6S294C53v11Ev,
  (VTBL_ENTRY)&_ZN6S294C53v12Ev,
  (VTBL_ENTRY)&_ZN6S294C53v13Ev,
  (VTBL_ENTRY)&_ZN6S294C53v14Ev,
  (VTBL_ENTRY)&_ZN6S294C43v15Ev,
  (VTBL_ENTRY)&_ZN6S294C43v16Ev,
  (VTBL_ENTRY)&_ZN6S294C43v17Ev,
  (VTBL_ENTRY)&_ZN6S294C43v18Ev,
  (VTBL_ENTRY)&_ZN6S294C43v19Ev,
  (VTBL_ENTRY)&_ZN6S294C43v20Ev,
  (VTBL_ENTRY)&_ZN6S294C43v21Ev,
  (VTBL_ENTRY)&_ZN6S294C43v22Ev,
  (VTBL_ENTRY)&_ZN6S294C43v23Ev,
  (VTBL_ENTRY)&_ZN6S294C43v24Ev,
  (VTBL_ENTRY)&_ZN6S294C43v25Ev,
  (VTBL_ENTRY)&_ZN6S294C33v26Ev,
  (VTBL_ENTRY)&_ZN6S294C33v27Ev,
  (VTBL_ENTRY)&_ZN6S294C33v28Ev,
  (VTBL_ENTRY)&_ZN6S294C33v29Ev,
  (VTBL_ENTRY)&_ZN6S294C33v30Ev,
  (VTBL_ENTRY)&_ZN6S294C33v31Ev,
  (VTBL_ENTRY)&_ZN6S294C33v32Ev,
  (VTBL_ENTRY)&_ZN6S294C33v33Ev,
};
extern VTBL_ENTRY _ZTI6S294C3[];
extern  VTBL_ENTRY _ZTV6S294C3[];
Class_Descriptor cd_S294C3 = {  "S294C3", // class name
  bases_S294C3, 3,
  &(vtc_S294C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S294C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S294C3),28, //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  S294C11  {
  virtual  ~S294C11(); // _ZN7S294C11D1Ev
  virtual void  v34(); // _ZN7S294C113v34Ev
  virtual void  v35(); // _ZN7S294C113v35Ev
  virtual void  v36(); // _ZN7S294C113v36Ev
  S294C11(); // tgen
};
//SIG(-1 S294C11) C1{ vd v1 v2 v3}


 S294C11 ::~S294C11(){ note_dtor("S294C11", this);}
void  S294C11 ::v34(){vfunc_called(this, "_ZN7S294C113v34Ev");}
void  S294C11 ::v35(){vfunc_called(this, "_ZN7S294C113v35Ev");}
void  S294C11 ::v36(){vfunc_called(this, "_ZN7S294C113v36Ev");}
S294C11 ::S294C11(){ note_ctor("S294C11", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S294C11C1Ev();
extern void _ZN7S294C11D1Ev();
Name_Map name_map_S294C11[] = {
  NSPAIR(_ZN7S294C11C1Ev),
  NSPAIR(_ZN7S294C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S294C11[];
extern void _ZN7S294C11D1Ev();
extern void _ZN7S294C11D0Ev();
extern void _ZN7S294C113v34Ev();
extern void _ZN7S294C113v35Ev();
extern void _ZN7S294C113v36Ev();
static  VTBL_ENTRY vtc_S294C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S294C11[0]),
  (VTBL_ENTRY)&_ZN7S294C11D1Ev,
  (VTBL_ENTRY)&_ZN7S294C11D0Ev,
  (VTBL_ENTRY)&_ZN7S294C113v34Ev,
  (VTBL_ENTRY)&_ZN7S294C113v35Ev,
  (VTBL_ENTRY)&_ZN7S294C113v36Ev,
};
extern VTBL_ENTRY _ZTI7S294C11[];
extern  VTBL_ENTRY _ZTV7S294C11[];
Class_Descriptor cd_S294C11 = {  "S294C11", // class name
  0,0,//no base classes
  &(vtc_S294C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S294C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S294C11),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  S294C2  : S294C3 , S294C11 {
  ::S292C12 s294c2f0;
  int s294c2f1;
  char s294c2f2;
  virtual void  v37(); // _ZN6S294C23v37Ev
  virtual void  v38(); // _ZN6S294C23v38Ev
  virtual void  v39(); // _ZN6S294C23v39Ev
  virtual void  v40(); // _ZN6S294C23v40Ev
  virtual void  v41(); // _ZN6S294C23v41Ev
  virtual void  v42(); // _ZN6S294C23v42Ev
  virtual void  v43(); // _ZN6S294C23v43Ev
  virtual void  v44(); // _ZN6S294C23v44Ev
  virtual void  v45(); // _ZN6S294C23v45Ev
  virtual void  v46(); // _ZN6S294C23v46Ev
  ~S294C2(); // tgen
  S294C2(); // tgen
};
//SIG(-1 S294C2) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v11 v12 v13 v14 v15} v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v27 v28 v29 v30 v31 v32 v33 v34 FC6 FC9{ m Fp} Fp[3]} BC10{ vd v35 v36 v37} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC11{ m FC12{ m Fp} Fi Fp} Fi Fc}


void  S294C2 ::v37(){vfunc_called(this, "_ZN6S294C23v37Ev");}
void  S294C2 ::v38(){vfunc_called(this, "_ZN6S294C23v38Ev");}
void  S294C2 ::v39(){vfunc_called(this, "_ZN6S294C23v39Ev");}
void  S294C2 ::v40(){vfunc_called(this, "_ZN6S294C23v40Ev");}
void  S294C2 ::v41(){vfunc_called(this, "_ZN6S294C23v41Ev");}
void  S294C2 ::v42(){vfunc_called(this, "_ZN6S294C23v42Ev");}
void  S294C2 ::v43(){vfunc_called(this, "_ZN6S294C23v43Ev");}
void  S294C2 ::v44(){vfunc_called(this, "_ZN6S294C23v44Ev");}
void  S294C2 ::v45(){vfunc_called(this, "_ZN6S294C23v45Ev");}
void  S294C2 ::v46(){vfunc_called(this, "_ZN6S294C23v46Ev");}
S294C2 ::~S294C2(){ note_dtor("S294C2", this);} // tgen
S294C2 ::S294C2(){ note_ctor("S294C2", this);} // tgen

static void Test_S294C2()
{
  extern Class_Descriptor cd_S294C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,28)];
    init_test(&cd_S294C2, buf);
    S294C2 *dp, &lv = *(dp=new (buf) S294C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,108), "sizeof(S294C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S294C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S294C5*)(S294C4*)(S294C3*), 0, "S294C2");
    check_base_class_offset(lv, (S294C5*)(S294C4*)(S294C3*), 0, "S294C2");
    check_base_class_offset(lv, (S294C4*)(S294C3*), 0, "S294C2");
    check_base_class_offset(lv, (S294C3*), 0, "S294C2");
    check_base_class_offset(lv, (S294C11*), ABISELECT(152,84), "S294C2");
    check_field_offset(lv, s294c2f0, ABISELECT(160,88), "S294C2.s294c2f0");
    check_field_offset(lv, s294c2f1, ABISELECT(184,100), "S294C2.s294c2f1");
    check_field_offset(lv, s294c2f2, ABISELECT(188,104), "S294C2.s294c2f2");
    test_class_info(&lv, &cd_S294C2);
    dp->~S294C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS294C2(Test_S294C2, "S294C2", ABISELECT(192,108));

#else // __cplusplus

extern void _ZN6S294C2C1Ev();
extern void _ZN6S294C2D1Ev();
Name_Map name_map_S294C2[] = {
  NSPAIR(_ZN6S294C2C1Ev),
  NSPAIR(_ZN6S294C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S294C5;
extern VTBL_ENTRY _ZTI6S294C5[];
extern  VTBL_ENTRY _ZTV6S294C5[];
extern Class_Descriptor cd_S294C4;
extern VTBL_ENTRY _ZTI6S294C4[];
extern  VTBL_ENTRY _ZTV6S294C4[];
extern Class_Descriptor cd_S294C3;
extern VTBL_ENTRY _ZTI6S294C3[];
extern  VTBL_ENTRY _ZTV6S294C3[];
extern Class_Descriptor cd_S294C11;
extern VTBL_ENTRY _ZTI7S294C11[];
extern  VTBL_ENTRY _ZTV7S294C11[];
static Base_Class bases_S294C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S294C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S294C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S294C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S294C11,    ABISELECT(152,84), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S294C2[];
extern void _ZN6S294C2D1Ev();
extern void _ZN6S294C2D0Ev();
extern void _ZN6S294C53v10Ev();
extern void _ZN6S294C53v11Ev();
extern void _ZN6S294C53v12Ev();
extern void _ZN6S294C53v13Ev();
extern void _ZN6S294C53v14Ev();
extern void _ZN6S294C43v15Ev();
extern void _ZN6S294C43v16Ev();
extern void _ZN6S294C43v17Ev();
extern void _ZN6S294C43v18Ev();
extern void _ZN6S294C43v19Ev();
extern void _ZN6S294C43v20Ev();
extern void _ZN6S294C43v21Ev();
extern void _ZN6S294C43v22Ev();
extern void _ZN6S294C43v23Ev();
extern void _ZN6S294C43v24Ev();
extern void _ZN6S294C43v25Ev();
extern void _ZN6S294C33v26Ev();
extern void _ZN6S294C33v27Ev();
extern void _ZN6S294C33v28Ev();
extern void _ZN6S294C33v29Ev();
extern void _ZN6S294C33v30Ev();
extern void _ZN6S294C33v31Ev();
extern void _ZN6S294C33v32Ev();
extern void _ZN6S294C33v33Ev();
extern void _ZN6S294C23v37Ev();
extern void _ZN6S294C23v38Ev();
extern void _ZN6S294C23v39Ev();
extern void _ZN6S294C23v40Ev();
extern void _ZN6S294C23v41Ev();
extern void _ZN6S294C23v42Ev();
extern void _ZN6S294C23v43Ev();
extern void _ZN6S294C23v44Ev();
extern void _ZN6S294C23v45Ev();
extern void _ZN6S294C23v46Ev();
extern void ABISELECT(_ZThn152_N6S294C2D1Ev,_ZThn84_N6S294C2D1Ev)();
extern void ABISELECT(_ZThn152_N6S294C2D0Ev,_ZThn84_N6S294C2D0Ev)();
extern void _ZN7S294C113v34Ev();
extern void _ZN7S294C113v35Ev();
extern void _ZN7S294C113v36Ev();
static  VTBL_ENTRY vtc_S294C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S294C2[0]),
  (VTBL_ENTRY)&_ZN6S294C2D1Ev,
  (VTBL_ENTRY)&_ZN6S294C2D0Ev,
  (VTBL_ENTRY)&_ZN6S294C53v10Ev,
  (VTBL_ENTRY)&_ZN6S294C53v11Ev,
  (VTBL_ENTRY)&_ZN6S294C53v12Ev,
  (VTBL_ENTRY)&_ZN6S294C53v13Ev,
  (VTBL_ENTRY)&_ZN6S294C53v14Ev,
  (VTBL_ENTRY)&_ZN6S294C43v15Ev,
  (VTBL_ENTRY)&_ZN6S294C43v16Ev,
  (VTBL_ENTRY)&_ZN6S294C43v17Ev,
  (VTBL_ENTRY)&_ZN6S294C43v18Ev,
  (VTBL_ENTRY)&_ZN6S294C43v19Ev,
  (VTBL_ENTRY)&_ZN6S294C43v20Ev,
  (VTBL_ENTRY)&_ZN6S294C43v21Ev,
  (VTBL_ENTRY)&_ZN6S294C43v22Ev,
  (VTBL_ENTRY)&_ZN6S294C43v23Ev,
  (VTBL_ENTRY)&_ZN6S294C43v24Ev,
  (VTBL_ENTRY)&_ZN6S294C43v25Ev,
  (VTBL_ENTRY)&_ZN6S294C33v26Ev,
  (VTBL_ENTRY)&_ZN6S294C33v27Ev,
  (VTBL_ENTRY)&_ZN6S294C33v28Ev,
  (VTBL_ENTRY)&_ZN6S294C33v29Ev,
  (VTBL_ENTRY)&_ZN6S294C33v30Ev,
  (VTBL_ENTRY)&_ZN6S294C33v31Ev,
  (VTBL_ENTRY)&_ZN6S294C33v32Ev,
  (VTBL_ENTRY)&_ZN6S294C33v33Ev,
  (VTBL_ENTRY)&_ZN6S294C23v37Ev,
  (VTBL_ENTRY)&_ZN6S294C23v38Ev,
  (VTBL_ENTRY)&_ZN6S294C23v39Ev,
  (VTBL_ENTRY)&_ZN6S294C23v40Ev,
  (VTBL_ENTRY)&_ZN6S294C23v41Ev,
  (VTBL_ENTRY)&_ZN6S294C23v42Ev,
  (VTBL_ENTRY)&_ZN6S294C23v43Ev,
  (VTBL_ENTRY)&_ZN6S294C23v44Ev,
  (VTBL_ENTRY)&_ZN6S294C23v45Ev,
  (VTBL_ENTRY)&_ZN6S294C23v46Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI6S294C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S294C2D1Ev,_ZThn84_N6S294C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S294C2D0Ev,_ZThn84_N6S294C2D0Ev),
  (VTBL_ENTRY)&_ZN7S294C113v34Ev,
  (VTBL_ENTRY)&_ZN7S294C113v35Ev,
  (VTBL_ENTRY)&_ZN7S294C113v36Ev,
};
extern VTBL_ENTRY _ZTI6S294C2[];
extern  VTBL_ENTRY _ZTV6S294C2[];
Class_Descriptor cd_S294C2 = {  "S294C2", // class name
  bases_S294C2, 5,
  &(vtc_S294C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,108), // object size
  NSPAIRA(_ZTI6S294C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S294C2),45, //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  S294C18  {
  int s294c18f0;
  ::S3047C29_nt s294c18f1;
  char s294c18f2;
  void  mf294c18(); // _ZN7S294C188mf294c18Ev
};
//SIG(-1 S294C18) C1{ m Fi FC2{ m Fs[6] Fi[2] Fc Fs} Fc}


void  S294C18 ::mf294c18(){}

static void Test_S294C18()
{
  {
    init_simple_test("S294C18");
    S294C18 lv;
    check2(sizeof(lv), 32, "sizeof(S294C18)");
    check2(__alignof__(lv), 4, "__alignof__(S294C18)");
    check_field_offset(lv, s294c18f0, 0, "S294C18.s294c18f0");
    check_field_offset(lv, s294c18f1, 4, "S294C18.s294c18f1");
    check_field_offset(lv, s294c18f2, 28, "S294C18.s294c18f2");
  }
}
static Arrange_To_Call_Me vS294C18(Test_S294C18, "S294C18", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S294C14  {
  ::S2215C20_nt s294c14f0;
  ::S2215C20_nt s294c14f1;
  ::S2215C20_nt s294c14f2;
  ::S292C17_nt s294c14f3;
  ::S294C18 s294c14f4;
  ::S294C18 s294c14f5;
  int s294c14f6[4];
  ::S744C15_nt s294c14f7;
  ::S744C15_nt s294c14f8;
};
//SIG(-1 S294C14) C1{ FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC4{ m Fi[5]} FC5{ m Fi FC6{ m Fs[6] Fi[2] Fc Fs} Fc} FC5 Fi[4] FC7{ m Fp} FC7}



static void Test_S294C14()
{
  {
    init_simple_test("S294C14");
    S294C14 lv;
    check2(sizeof(lv), ABISELECT(168,144), "sizeof(S294C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S294C14)");
    check_field_offset(lv, s294c14f0, 0, "S294C14.s294c14f0");
    check_field_offset(lv, s294c14f1, ABISELECT(16,12), "S294C14.s294c14f1");
    check_field_offset(lv, s294c14f2, ABISELECT(32,24), "S294C14.s294c14f2");
    check_field_offset(lv, s294c14f3, ABISELECT(48,36), "S294C14.s294c14f3");
    check_field_offset(lv, s294c14f4, ABISELECT(68,56), "S294C14.s294c14f4");
    check_field_offset(lv, s294c14f5, ABISELECT(100,88), "S294C14.s294c14f5");
    check_field_offset(lv, s294c14f6, ABISELECT(132,120), "S294C14.s294c14f6");
    check_field_offset(lv, s294c14f7, ABISELECT(152,136), "S294C14.s294c14f7");
    check_field_offset(lv, s294c14f8, ABISELECT(160,140), "S294C14.s294c14f8");
  }
}
static Arrange_To_Call_Me vS294C14(Test_S294C14, "S294C14", ABISELECT(168,144));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S294C1  : S294C2 {
  ::S294C14 s294c1f0;
  virtual void  v1(); // _ZN6S294C12v1Ev
  virtual void  v2(); // _ZN6S294C12v2Ev
  virtual void  v3(); // _ZN6S294C12v3Ev
  virtual void  v4(); // _ZN6S294C12v4Ev
  virtual void  v5(); // _ZN6S294C12v5Ev
  virtual void  v6(); // _ZN6S294C12v6Ev
  virtual void  v7(); // _ZN6S294C12v7Ev
  virtual void  v8(); // _ZN6S294C12v8Ev
  virtual void  v9(); // _ZN6S294C12v9Ev
  ~S294C1(); // tgen
  S294C1(); // tgen
};
//SIG(1 S294C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fi} v10 v11 v12 v13 v14} v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fp[3] FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]}} v26 v27 v28 v29 v30 v31 v32 v33 FC7 FC10{ m Fp} Fp[3]} BC11{ vd v34 v35 v36} v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 FC12{ m FC13{ m Fp} Fi Fp} Fi Fc} v1 v2 v3 v4 v5 v6 v7 v8 v9 FC14{ FC15{ m Fp Fi FC16{ m}} FC15 FC15 FC17{ m Fi[5]} FC18{ m Fi FC19{ m Fs[6] Fi[2] Fc Fs} Fc} FC18 Fi[4] FC13 FC13}}


void  S294C1 ::v1(){vfunc_called(this, "_ZN6S294C12v1Ev");}
void  S294C1 ::v2(){vfunc_called(this, "_ZN6S294C12v2Ev");}
void  S294C1 ::v3(){vfunc_called(this, "_ZN6S294C12v3Ev");}
void  S294C1 ::v4(){vfunc_called(this, "_ZN6S294C12v4Ev");}
void  S294C1 ::v5(){vfunc_called(this, "_ZN6S294C12v5Ev");}
void  S294C1 ::v6(){vfunc_called(this, "_ZN6S294C12v6Ev");}
void  S294C1 ::v7(){vfunc_called(this, "_ZN6S294C12v7Ev");}
void  S294C1 ::v8(){vfunc_called(this, "_ZN6S294C12v8Ev");}
void  S294C1 ::v9(){vfunc_called(this, "_ZN6S294C12v9Ev");}
S294C1 ::~S294C1(){ note_dtor("S294C1", this);} // tgen
S294C1 ::S294C1(){ note_ctor("S294C1", this);} // tgen

static void Test_S294C1()
{
  extern Class_Descriptor cd_S294C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,64)];
    init_test(&cd_S294C1, buf);
    S294C1 *dp, &lv = *(dp=new (buf) S294C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,252), "sizeof(S294C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S294C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S294C5*)(S294C4*)(S294C3*)(S294C2*), 0, "S294C1");
    check_base_class_offset(lv, (S294C5*)(S294C4*)(S294C3*)(S294C2*), 0, "S294C1");
    check_base_class_offset(lv, (S294C4*)(S294C3*)(S294C2*), 0, "S294C1");
    check_base_class_offset(lv, (S294C3*)(S294C2*), 0, "S294C1");
    check_base_class_offset(lv, (S294C11*)(S294C2*), ABISELECT(152,84), "S294C1");
    check_base_class_offset(lv, (S294C2*), 0, "S294C1");
    check_field_offset(lv, s294c1f0, ABISELECT(192,108), "S294C1.s294c1f0");
    test_class_info(&lv, &cd_S294C1);
    dp->~S294C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS294C1(Test_S294C1, "S294C1", ABISELECT(360,252));

#else // __cplusplus

extern void _ZN6S294C1C1Ev();
extern void _ZN6S294C1D1Ev();
Name_Map name_map_S294C1[] = {
  NSPAIR(_ZN6S294C1C1Ev),
  NSPAIR(_ZN6S294C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S294C5;
extern VTBL_ENTRY _ZTI6S294C5[];
extern  VTBL_ENTRY _ZTV6S294C5[];
extern Class_Descriptor cd_S294C4;
extern VTBL_ENTRY _ZTI6S294C4[];
extern  VTBL_ENTRY _ZTV6S294C4[];
extern Class_Descriptor cd_S294C3;
extern VTBL_ENTRY _ZTI6S294C3[];
extern  VTBL_ENTRY _ZTV6S294C3[];
extern Class_Descriptor cd_S294C11;
extern VTBL_ENTRY _ZTI7S294C11[];
extern  VTBL_ENTRY _ZTV7S294C11[];
extern Class_Descriptor cd_S294C2;
extern VTBL_ENTRY _ZTI6S294C2[];
extern  VTBL_ENTRY _ZTV6S294C2[];
static Base_Class bases_S294C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S294C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S294C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S294C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S294C11,    ABISELECT(152,84), //bcp->offset
    47, //bcp->virtual_function_table_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_S294C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S294C1[];
extern void _ZN6S294C1D1Ev();
extern void _ZN6S294C1D0Ev();
extern void _ZN6S294C53v10Ev();
extern void _ZN6S294C53v11Ev();
extern void _ZN6S294C53v12Ev();
extern void _ZN6S294C53v13Ev();
extern void _ZN6S294C53v14Ev();
extern void _ZN6S294C43v15Ev();
extern void _ZN6S294C43v16Ev();
extern void _ZN6S294C43v17Ev();
extern void _ZN6S294C43v18Ev();
extern void _ZN6S294C43v19Ev();
extern void _ZN6S294C43v20Ev();
extern void _ZN6S294C43v21Ev();
extern void _ZN6S294C43v22Ev();
extern void _ZN6S294C43v23Ev();
extern void _ZN6S294C43v24Ev();
extern void _ZN6S294C43v25Ev();
extern void _ZN6S294C33v26Ev();
extern void _ZN6S294C33v27Ev();
extern void _ZN6S294C33v28Ev();
extern void _ZN6S294C33v29Ev();
extern void _ZN6S294C33v30Ev();
extern void _ZN6S294C33v31Ev();
extern void _ZN6S294C33v32Ev();
extern void _ZN6S294C33v33Ev();
extern void _ZN6S294C23v37Ev();
extern void _ZN6S294C23v38Ev();
extern void _ZN6S294C23v39Ev();
extern void _ZN6S294C23v40Ev();
extern void _ZN6S294C23v41Ev();
extern void _ZN6S294C23v42Ev();
extern void _ZN6S294C23v43Ev();
extern void _ZN6S294C23v44Ev();
extern void _ZN6S294C23v45Ev();
extern void _ZN6S294C23v46Ev();
extern void _ZN6S294C12v1Ev();
extern void _ZN6S294C12v2Ev();
extern void _ZN6S294C12v3Ev();
extern void _ZN6S294C12v4Ev();
extern void _ZN6S294C12v5Ev();
extern void _ZN6S294C12v6Ev();
extern void _ZN6S294C12v7Ev();
extern void _ZN6S294C12v8Ev();
extern void _ZN6S294C12v9Ev();
extern void ABISELECT(_ZThn152_N6S294C1D1Ev,_ZThn84_N6S294C1D1Ev)();
extern void ABISELECT(_ZThn152_N6S294C1D0Ev,_ZThn84_N6S294C1D0Ev)();
extern void _ZN7S294C113v34Ev();
extern void _ZN7S294C113v35Ev();
extern void _ZN7S294C113v36Ev();
static  VTBL_ENTRY vtc_S294C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S294C1[0]),
  (VTBL_ENTRY)&_ZN6S294C1D1Ev,
  (VTBL_ENTRY)&_ZN6S294C1D0Ev,
  (VTBL_ENTRY)&_ZN6S294C53v10Ev,
  (VTBL_ENTRY)&_ZN6S294C53v11Ev,
  (VTBL_ENTRY)&_ZN6S294C53v12Ev,
  (VTBL_ENTRY)&_ZN6S294C53v13Ev,
  (VTBL_ENTRY)&_ZN6S294C53v14Ev,
  (VTBL_ENTRY)&_ZN6S294C43v15Ev,
  (VTBL_ENTRY)&_ZN6S294C43v16Ev,
  (VTBL_ENTRY)&_ZN6S294C43v17Ev,
  (VTBL_ENTRY)&_ZN6S294C43v18Ev,
  (VTBL_ENTRY)&_ZN6S294C43v19Ev,
  (VTBL_ENTRY)&_ZN6S294C43v20Ev,
  (VTBL_ENTRY)&_ZN6S294C43v21Ev,
  (VTBL_ENTRY)&_ZN6S294C43v22Ev,
  (VTBL_ENTRY)&_ZN6S294C43v23Ev,
  (VTBL_ENTRY)&_ZN6S294C43v24Ev,
  (VTBL_ENTRY)&_ZN6S294C43v25Ev,
  (VTBL_ENTRY)&_ZN6S294C33v26Ev,
  (VTBL_ENTRY)&_ZN6S294C33v27Ev,
  (VTBL_ENTRY)&_ZN6S294C33v28Ev,
  (VTBL_ENTRY)&_ZN6S294C33v29Ev,
  (VTBL_ENTRY)&_ZN6S294C33v30Ev,
  (VTBL_ENTRY)&_ZN6S294C33v31Ev,
  (VTBL_ENTRY)&_ZN6S294C33v32Ev,
  (VTBL_ENTRY)&_ZN6S294C33v33Ev,
  (VTBL_ENTRY)&_ZN6S294C23v37Ev,
  (VTBL_ENTRY)&_ZN6S294C23v38Ev,
  (VTBL_ENTRY)&_ZN6S294C23v39Ev,
  (VTBL_ENTRY)&_ZN6S294C23v40Ev,
  (VTBL_ENTRY)&_ZN6S294C23v41Ev,
  (VTBL_ENTRY)&_ZN6S294C23v42Ev,
  (VTBL_ENTRY)&_ZN6S294C23v43Ev,
  (VTBL_ENTRY)&_ZN6S294C23v44Ev,
  (VTBL_ENTRY)&_ZN6S294C23v45Ev,
  (VTBL_ENTRY)&_ZN6S294C23v46Ev,
  (VTBL_ENTRY)&_ZN6S294C12v1Ev,
  (VTBL_ENTRY)&_ZN6S294C12v2Ev,
  (VTBL_ENTRY)&_ZN6S294C12v3Ev,
  (VTBL_ENTRY)&_ZN6S294C12v4Ev,
  (VTBL_ENTRY)&_ZN6S294C12v5Ev,
  (VTBL_ENTRY)&_ZN6S294C12v6Ev,
  (VTBL_ENTRY)&_ZN6S294C12v7Ev,
  (VTBL_ENTRY)&_ZN6S294C12v8Ev,
  (VTBL_ENTRY)&_ZN6S294C12v9Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI6S294C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S294C1D1Ev,_ZThn84_N6S294C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S294C1D0Ev,_ZThn84_N6S294C1D0Ev),
  (VTBL_ENTRY)&_ZN7S294C113v34Ev,
  (VTBL_ENTRY)&_ZN7S294C113v35Ev,
  (VTBL_ENTRY)&_ZN7S294C113v36Ev,
};
extern VTBL_ENTRY _ZTI6S294C1[];
extern  VTBL_ENTRY _ZTV6S294C1[];
Class_Descriptor cd_S294C1 = {  "S294C1", // class name
  bases_S294C1, 6,
  &(vtc_S294C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,252), // object size
  NSPAIRA(_ZTI6S294C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S294C1),54, //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  S754C4  : S770C5_nt {
  virtual void  v4(); // _ZN6S754C42v4Ev
  virtual void  v5(); // _ZN6S754C42v5Ev
  virtual void  v6(); // _ZN6S754C42v6Ev
  virtual void  v7(); // _ZN6S754C42v7Ev
  virtual void  v8(); // _ZN6S754C42v8Ev
  ~S754C4(); // tgen
  S754C4(); // tgen
};
//SIG(-1 S754C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S754C4 ::v4(){vfunc_called(this, "_ZN6S754C42v4Ev");}
void  S754C4 ::v5(){vfunc_called(this, "_ZN6S754C42v5Ev");}
void  S754C4 ::v6(){vfunc_called(this, "_ZN6S754C42v6Ev");}
void  S754C4 ::v7(){vfunc_called(this, "_ZN6S754C42v7Ev");}
void  S754C4 ::v8(){vfunc_called(this, "_ZN6S754C42v8Ev");}
S754C4 ::~S754C4(){ note_dtor("S754C4", this);} // tgen
S754C4 ::S754C4(){ note_ctor("S754C4", this);} // tgen

static void Test_S754C4()
{
  extern Class_Descriptor cd_S754C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S754C4, buf);
    S754C4 *dp, &lv = *(dp=new (buf) S754C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S754C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S754C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S754C4");
    test_class_info(&lv, &cd_S754C4);
    dp->~S754C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS754C4(Test_S754C4, "S754C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S754C4C1Ev();
extern void _ZN6S754C4D1Ev();
Name_Map name_map_S754C4[] = {
  NSPAIR(_ZN6S754C4C1Ev),
  NSPAIR(_ZN6S754C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S754C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S754C4[];
extern void _ZN6S754C4D1Ev();
extern void _ZN6S754C4D0Ev();
extern void _ZN6S754C42v4Ev();
extern void _ZN6S754C42v5Ev();
extern void _ZN6S754C42v6Ev();
extern void _ZN6S754C42v7Ev();
extern void _ZN6S754C42v8Ev();
static  VTBL_ENTRY vtc_S754C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S754C4[0]),
  (VTBL_ENTRY)&_ZN6S754C4D1Ev,
  (VTBL_ENTRY)&_ZN6S754C4D0Ev,
  (VTBL_ENTRY)&_ZN6S754C42v4Ev,
  (VTBL_ENTRY)&_ZN6S754C42v5Ev,
  (VTBL_ENTRY)&_ZN6S754C42v6Ev,
  (VTBL_ENTRY)&_ZN6S754C42v7Ev,
  (VTBL_ENTRY)&_ZN6S754C42v8Ev,
};
extern VTBL_ENTRY _ZTI6S754C4[];
extern  VTBL_ENTRY _ZTV6S754C4[];
Class_Descriptor cd_S754C4 = {  "S754C4", // class name
  bases_S754C4, 1,
  &(vtc_S754C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S754C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S754C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S754C3  : S754C4 {
  void *s754c3f0[3];
  ::S770C6_nt s754c3f1;
  virtual void  v9(); // _ZN6S754C32v9Ev
  virtual void  v10(); // _ZN6S754C33v10Ev
  virtual void  v11(); // _ZN6S754C33v11Ev
  virtual void  v12(); // _ZN6S754C33v12Ev
  virtual void  v13(); // _ZN6S754C33v13Ev
  virtual void  v14(); // _ZN6S754C33v14Ev
  virtual void  v15(); // _ZN6S754C33v15Ev
  virtual void  v16(); // _ZN6S754C33v16Ev
  virtual void  v17(); // _ZN6S754C33v17Ev
  virtual void  v18(); // _ZN6S754C33v18Ev
  virtual void  v19(); // _ZN6S754C33v19Ev
  ~S754C3(); // tgen
  S754C3(); // tgen
};
//SIG(-1 S754C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S754C3 ::v9(){vfunc_called(this, "_ZN6S754C32v9Ev");}
void  S754C3 ::v10(){vfunc_called(this, "_ZN6S754C33v10Ev");}
void  S754C3 ::v11(){vfunc_called(this, "_ZN6S754C33v11Ev");}
void  S754C3 ::v12(){vfunc_called(this, "_ZN6S754C33v12Ev");}
void  S754C3 ::v13(){vfunc_called(this, "_ZN6S754C33v13Ev");}
void  S754C3 ::v14(){vfunc_called(this, "_ZN6S754C33v14Ev");}
void  S754C3 ::v15(){vfunc_called(this, "_ZN6S754C33v15Ev");}
void  S754C3 ::v16(){vfunc_called(this, "_ZN6S754C33v16Ev");}
void  S754C3 ::v17(){vfunc_called(this, "_ZN6S754C33v17Ev");}
void  S754C3 ::v18(){vfunc_called(this, "_ZN6S754C33v18Ev");}
void  S754C3 ::v19(){vfunc_called(this, "_ZN6S754C33v19Ev");}
S754C3 ::~S754C3(){ note_dtor("S754C3", this);} // tgen
S754C3 ::S754C3(){ note_ctor("S754C3", this);} // tgen

static void Test_S754C3()
{
  extern Class_Descriptor cd_S754C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S754C3, buf);
    S754C3 *dp, &lv = *(dp=new (buf) S754C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S754C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S754C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S754C4*), 0, "S754C3");
    check_base_class_offset(lv, (S754C4*), 0, "S754C3");
    check_field_offset(lv, s754c3f0, ABISELECT(16,8), "S754C3.s754c3f0");
    check_field_offset(lv, s754c3f1, ABISELECT(40,20), "S754C3.s754c3f1");
    test_class_info(&lv, &cd_S754C3);
    dp->~S754C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS754C3(Test_S754C3, "S754C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S754C3C1Ev();
extern void _ZN6S754C3D1Ev();
Name_Map name_map_S754C3[] = {
  NSPAIR(_ZN6S754C3C1Ev),
  NSPAIR(_ZN6S754C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S754C4;
extern VTBL_ENTRY _ZTI6S754C4[];
extern  VTBL_ENTRY _ZTV6S754C4[];
static Base_Class bases_S754C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S754C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S754C3[];
extern void _ZN6S754C3D1Ev();
extern void _ZN6S754C3D0Ev();
extern void _ZN6S754C42v4Ev();
extern void _ZN6S754C42v5Ev();
extern void _ZN6S754C42v6Ev();
extern void _ZN6S754C42v7Ev();
extern void _ZN6S754C42v8Ev();
extern void _ZN6S754C32v9Ev();
extern void _ZN6S754C33v10Ev();
extern void _ZN6S754C33v11Ev();
extern void _ZN6S754C33v12Ev();
extern void _ZN6S754C33v13Ev();
extern void _ZN6S754C33v14Ev();
extern void _ZN6S754C33v15Ev();
extern void _ZN6S754C33v16Ev();
extern void _ZN6S754C33v17Ev();
extern void _ZN6S754C33v18Ev();
extern void _ZN6S754C33v19Ev();
static  VTBL_ENTRY vtc_S754C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S754C3[0]),
  (VTBL_ENTRY)&_ZN6S754C3D1Ev,
  (VTBL_ENTRY)&_ZN6S754C3D0Ev,
  (VTBL_ENTRY)&_ZN6S754C42v4Ev,
  (VTBL_ENTRY)&_ZN6S754C42v5Ev,
  (VTBL_ENTRY)&_ZN6S754C42v6Ev,
  (VTBL_ENTRY)&_ZN6S754C42v7Ev,
  (VTBL_ENTRY)&_ZN6S754C42v8Ev,
  (VTBL_ENTRY)&_ZN6S754C32v9Ev,
  (VTBL_ENTRY)&_ZN6S754C33v10Ev,
  (VTBL_ENTRY)&_ZN6S754C33v11Ev,
  (VTBL_ENTRY)&_ZN6S754C33v12Ev,
  (VTBL_ENTRY)&_ZN6S754C33v13Ev,
  (VTBL_ENTRY)&_ZN6S754C33v14Ev,
  (VTBL_ENTRY)&_ZN6S754C33v15Ev,
  (VTBL_ENTRY)&_ZN6S754C33v16Ev,
  (VTBL_ENTRY)&_ZN6S754C33v17Ev,
  (VTBL_ENTRY)&_ZN6S754C33v18Ev,
  (VTBL_ENTRY)&_ZN6S754C33v19Ev,
};
extern VTBL_ENTRY _ZTI6S754C3[];
extern  VTBL_ENTRY _ZTV6S754C3[];
Class_Descriptor cd_S754C3 = {  "S754C3", // class name
  bases_S754C3, 2,
  &(vtc_S754C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S754C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S754C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S754C2  : S754C3 {
  ::S770C6_nt s754c2f0;
  ::S770C9_nt s754c2f1;
  void *s754c2f2[3];
  virtual void  v20(); // _ZN6S754C23v20Ev
  virtual void  v21(); // _ZN6S754C23v21Ev
  virtual void  v22(); // _ZN6S754C23v22Ev
  virtual void  v23(); // _ZN6S754C23v23Ev
  virtual void  v24(); // _ZN6S754C23v24Ev
  virtual void  v25(); // _ZN6S754C23v25Ev
  virtual void  v26(); // _ZN6S754C23v26Ev
  virtual void  v27(); // _ZN6S754C23v27Ev
  ~S754C2(); // tgen
  S754C2(); // tgen
};
//SIG(-1 S754C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S754C2 ::v20(){vfunc_called(this, "_ZN6S754C23v20Ev");}
void  S754C2 ::v21(){vfunc_called(this, "_ZN6S754C23v21Ev");}
void  S754C2 ::v22(){vfunc_called(this, "_ZN6S754C23v22Ev");}
void  S754C2 ::v23(){vfunc_called(this, "_ZN6S754C23v23Ev");}
void  S754C2 ::v24(){vfunc_called(this, "_ZN6S754C23v24Ev");}
void  S754C2 ::v25(){vfunc_called(this, "_ZN6S754C23v25Ev");}
void  S754C2 ::v26(){vfunc_called(this, "_ZN6S754C23v26Ev");}
void  S754C2 ::v27(){vfunc_called(this, "_ZN6S754C23v27Ev");}
S754C2 ::~S754C2(){ note_dtor("S754C2", this);} // tgen
S754C2 ::S754C2(){ note_ctor("S754C2", this);} // tgen

static void Test_S754C2()
{
  extern Class_Descriptor cd_S754C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S754C2, buf);
    S754C2 *dp, &lv = *(dp=new (buf) S754C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S754C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S754C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S754C4*)(S754C3*), 0, "S754C2");
    check_base_class_offset(lv, (S754C4*)(S754C3*), 0, "S754C2");
    check_base_class_offset(lv, (S754C3*), 0, "S754C2");
    check_field_offset(lv, s754c2f0, ABISELECT(80,44), "S754C2.s754c2f0");
    check_field_offset(lv, s754c2f1, ABISELECT(120,68), "S754C2.s754c2f1");
    check_field_offset(lv, s754c2f2, ABISELECT(128,72), "S754C2.s754c2f2");
    test_class_info(&lv, &cd_S754C2);
    dp->~S754C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS754C2(Test_S754C2, "S754C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S754C2C1Ev();
extern void _ZN6S754C2D1Ev();
Name_Map name_map_S754C2[] = {
  NSPAIR(_ZN6S754C2C1Ev),
  NSPAIR(_ZN6S754C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S754C4;
extern VTBL_ENTRY _ZTI6S754C4[];
extern  VTBL_ENTRY _ZTV6S754C4[];
extern Class_Descriptor cd_S754C3;
extern VTBL_ENTRY _ZTI6S754C3[];
extern  VTBL_ENTRY _ZTV6S754C3[];
static Base_Class bases_S754C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S754C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S754C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S754C2[];
extern void _ZN6S754C2D1Ev();
extern void _ZN6S754C2D0Ev();
extern void _ZN6S754C42v4Ev();
extern void _ZN6S754C42v5Ev();
extern void _ZN6S754C42v6Ev();
extern void _ZN6S754C42v7Ev();
extern void _ZN6S754C42v8Ev();
extern void _ZN6S754C32v9Ev();
extern void _ZN6S754C33v10Ev();
extern void _ZN6S754C33v11Ev();
extern void _ZN6S754C33v12Ev();
extern void _ZN6S754C33v13Ev();
extern void _ZN6S754C33v14Ev();
extern void _ZN6S754C33v15Ev();
extern void _ZN6S754C33v16Ev();
extern void _ZN6S754C33v17Ev();
extern void _ZN6S754C33v18Ev();
extern void _ZN6S754C33v19Ev();
extern void _ZN6S754C23v20Ev();
extern void _ZN6S754C23v21Ev();
extern void _ZN6S754C23v22Ev();
extern void _ZN6S754C23v23Ev();
extern void _ZN6S754C23v24Ev();
extern void _ZN6S754C23v25Ev();
extern void _ZN6S754C23v26Ev();
extern void _ZN6S754C23v27Ev();
static  VTBL_ENTRY vtc_S754C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S754C2[0]),
  (VTBL_ENTRY)&_ZN6S754C2D1Ev,
  (VTBL_ENTRY)&_ZN6S754C2D0Ev,
  (VTBL_ENTRY)&_ZN6S754C42v4Ev,
  (VTBL_ENTRY)&_ZN6S754C42v5Ev,
  (VTBL_ENTRY)&_ZN6S754C42v6Ev,
  (VTBL_ENTRY)&_ZN6S754C42v7Ev,
  (VTBL_ENTRY)&_ZN6S754C42v8Ev,
  (VTBL_ENTRY)&_ZN6S754C32v9Ev,
  (VTBL_ENTRY)&_ZN6S754C33v10Ev,
  (VTBL_ENTRY)&_ZN6S754C33v11Ev,
  (VTBL_ENTRY)&_ZN6S754C33v12Ev,
  (VTBL_ENTRY)&_ZN6S754C33v13Ev,
  (VTBL_ENTRY)&_ZN6S754C33v14Ev,
  (VTBL_ENTRY)&_ZN6S754C33v15Ev,
  (VTBL_ENTRY)&_ZN6S754C33v16Ev,
  (VTBL_ENTRY)&_ZN6S754C33v17Ev,
  (VTBL_ENTRY)&_ZN6S754C33v18Ev,
  (VTBL_ENTRY)&_ZN6S754C33v19Ev,
  (VTBL_ENTRY)&_ZN6S754C23v20Ev,
  (VTBL_ENTRY)&_ZN6S754C23v21Ev,
  (VTBL_ENTRY)&_ZN6S754C23v22Ev,
  (VTBL_ENTRY)&_ZN6S754C23v23Ev,
  (VTBL_ENTRY)&_ZN6S754C23v24Ev,
  (VTBL_ENTRY)&_ZN6S754C23v25Ev,
  (VTBL_ENTRY)&_ZN6S754C23v26Ev,
  (VTBL_ENTRY)&_ZN6S754C23v27Ev,
};
extern VTBL_ENTRY _ZTI6S754C2[];
extern  VTBL_ENTRY _ZTV6S754C2[];
Class_Descriptor cd_S754C2 = {  "S754C2", // class name
  bases_S754C2, 3,
  &(vtc_S754C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S754C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S754C2),28, //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  S754C10  {
  virtual  ~S754C10(); // _ZN7S754C10D1Ev
  virtual void  v28(); // _ZN7S754C103v28Ev
  S754C10(); // tgen
};
//SIG(-1 S754C10) C1{ vd v1}


 S754C10 ::~S754C10(){ note_dtor("S754C10", this);}
void  S754C10 ::v28(){vfunc_called(this, "_ZN7S754C103v28Ev");}
S754C10 ::S754C10(){ note_ctor("S754C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S754C10C1Ev();
extern void _ZN7S754C10D1Ev();
Name_Map name_map_S754C10[] = {
  NSPAIR(_ZN7S754C10C1Ev),
  NSPAIR(_ZN7S754C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S754C10[];
extern void _ZN7S754C10D1Ev();
extern void _ZN7S754C10D0Ev();
extern void _ZN7S754C103v28Ev();
static  VTBL_ENTRY vtc_S754C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S754C10[0]),
  (VTBL_ENTRY)&_ZN7S754C10D1Ev,
  (VTBL_ENTRY)&_ZN7S754C10D0Ev,
  (VTBL_ENTRY)&_ZN7S754C103v28Ev,
};
extern VTBL_ENTRY _ZTI7S754C10[];
extern  VTBL_ENTRY _ZTV7S754C10[];
Class_Descriptor cd_S754C10 = {  "S754C10", // class name
  0,0,//no base classes
  &(vtc_S754C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S754C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S754C10),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  S754C1  : S754C2 , S754C10 {
  void *s754c1f0;
  ::S3047C20_nt s754c1f1;
  void *s754c1f2;
  ::S281C37_nt s754c1f3;
  int s754c1f4;
  char s754c1f5;
  virtual  ~S754C1(); // _ZN6S754C1D1Ev
  virtual void  v1(); // _ZN6S754C12v1Ev
  virtual void  v2(); // _ZN6S754C12v2Ev
  virtual void  v3(); // _ZN6S754C12v3Ev
  S754C1(); // tgen
};
//SIG(1 S754C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v4 v5 v6 v7 v8} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v20 v21 v22 v23 v24 v25 v26 v27 FC6 FC9{ m Fp} Fp[3]} BC10{ vd v28} vd v1 v2 v3 Fp FC11{ BC12{ vd v31 v32} vd v29 v30 Fi[5] FC13{ BC12 vd v33 v34 FL} FC14{ BC15{ m Fp Fi[2] FC8} BC12 vd v35 v36} FC16{ m Fp Fi FC17{ m}} FC18{ vd m FC19{ m Fs[6] Fi[2] Fc Fs}} FC18} Fp FC20{ m Fp[2]} Fi Fc}


 S754C1 ::~S754C1(){ note_dtor("S754C1", this);}
void  S754C1 ::v1(){vfunc_called(this, "_ZN6S754C12v1Ev");}
void  S754C1 ::v2(){vfunc_called(this, "_ZN6S754C12v2Ev");}
void  S754C1 ::v3(){vfunc_called(this, "_ZN6S754C12v3Ev");}
S754C1 ::S754C1(){ note_ctor("S754C1", this);} // tgen

static void Test_S754C1()
{
  extern Class_Descriptor cd_S754C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,60)];
    init_test(&cd_S754C1, buf);
    S754C1 *dp, &lv = *(dp=new (buf) S754C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,236), "sizeof(S754C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S754C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S754C4*)(S754C3*)(S754C2*), 0, "S754C1");
    check_base_class_offset(lv, (S754C4*)(S754C3*)(S754C2*), 0, "S754C1");
    check_base_class_offset(lv, (S754C3*)(S754C2*), 0, "S754C1");
    check_base_class_offset(lv, (S754C2*), 0, "S754C1");
    check_base_class_offset(lv, (S754C10*), ABISELECT(152,84), "S754C1");
    check_field_offset(lv, s754c1f0, ABISELECT(160,88), "S754C1.s754c1f0");
    check_field_offset(lv, s754c1f1, ABISELECT(168,92), "S754C1.s754c1f1");
    check_field_offset(lv, s754c1f2, ABISELECT(328,216), "S754C1.s754c1f2");
    check_field_offset(lv, s754c1f3, ABISELECT(336,220), "S754C1.s754c1f3");
    check_field_offset(lv, s754c1f4, ABISELECT(352,228), "S754C1.s754c1f4");
    check_field_offset(lv, s754c1f5, ABISELECT(356,232), "S754C1.s754c1f5");
    test_class_info(&lv, &cd_S754C1);
    dp->~S754C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS754C1(Test_S754C1, "S754C1", ABISELECT(360,236));

#else // __cplusplus

extern void _ZN6S754C1C1Ev();
extern void _ZN6S754C1D1Ev();
Name_Map name_map_S754C1[] = {
  NSPAIR(_ZN6S754C1C1Ev),
  NSPAIR(_ZN6S754C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S754C4;
extern VTBL_ENTRY _ZTI6S754C4[];
extern  VTBL_ENTRY _ZTV6S754C4[];
extern Class_Descriptor cd_S754C3;
extern VTBL_ENTRY _ZTI6S754C3[];
extern  VTBL_ENTRY _ZTV6S754C3[];
extern Class_Descriptor cd_S754C2;
extern VTBL_ENTRY _ZTI6S754C2[];
extern  VTBL_ENTRY _ZTV6S754C2[];
extern Class_Descriptor cd_S754C10;
extern VTBL_ENTRY _ZTI7S754C10[];
extern  VTBL_ENTRY _ZTV7S754C10[];
static Base_Class bases_S754C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S754C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S754C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S754C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S754C10,    ABISELECT(152,84), //bcp->offset
    31, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S754C1[];
extern void _ZN6S754C1D1Ev();
extern void _ZN6S754C1D0Ev();
extern void _ZN6S754C42v4Ev();
extern void _ZN6S754C42v5Ev();
extern void _ZN6S754C42v6Ev();
extern void _ZN6S754C42v7Ev();
extern void _ZN6S754C42v8Ev();
extern void _ZN6S754C32v9Ev();
extern void _ZN6S754C33v10Ev();
extern void _ZN6S754C33v11Ev();
extern void _ZN6S754C33v12Ev();
extern void _ZN6S754C33v13Ev();
extern void _ZN6S754C33v14Ev();
extern void _ZN6S754C33v15Ev();
extern void _ZN6S754C33v16Ev();
extern void _ZN6S754C33v17Ev();
extern void _ZN6S754C33v18Ev();
extern void _ZN6S754C33v19Ev();
extern void _ZN6S754C23v20Ev();
extern void _ZN6S754C23v21Ev();
extern void _ZN6S754C23v22Ev();
extern void _ZN6S754C23v23Ev();
extern void _ZN6S754C23v24Ev();
extern void _ZN6S754C23v25Ev();
extern void _ZN6S754C23v26Ev();
extern void _ZN6S754C23v27Ev();
extern void _ZN6S754C12v1Ev();
extern void _ZN6S754C12v2Ev();
extern void _ZN6S754C12v3Ev();
extern void ABISELECT(_ZThn152_N6S754C1D1Ev,_ZThn84_N6S754C1D1Ev)();
extern void ABISELECT(_ZThn152_N6S754C1D0Ev,_ZThn84_N6S754C1D0Ev)();
extern void _ZN7S754C103v28Ev();
static  VTBL_ENTRY vtc_S754C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S754C1[0]),
  (VTBL_ENTRY)&_ZN6S754C1D1Ev,
  (VTBL_ENTRY)&_ZN6S754C1D0Ev,
  (VTBL_ENTRY)&_ZN6S754C42v4Ev,
  (VTBL_ENTRY)&_ZN6S754C42v5Ev,
  (VTBL_ENTRY)&_ZN6S754C42v6Ev,
  (VTBL_ENTRY)&_ZN6S754C42v7Ev,
  (VTBL_ENTRY)&_ZN6S754C42v8Ev,
  (VTBL_ENTRY)&_ZN6S754C32v9Ev,
  (VTBL_ENTRY)&_ZN6S754C33v10Ev,
  (VTBL_ENTRY)&_ZN6S754C33v11Ev,
  (VTBL_ENTRY)&_ZN6S754C33v12Ev,
  (VTBL_ENTRY)&_ZN6S754C33v13Ev,
  (VTBL_ENTRY)&_ZN6S754C33v14Ev,
  (VTBL_ENTRY)&_ZN6S754C33v15Ev,
  (VTBL_ENTRY)&_ZN6S754C33v16Ev,
  (VTBL_ENTRY)&_ZN6S754C33v17Ev,
  (VTBL_ENTRY)&_ZN6S754C33v18Ev,
  (VTBL_ENTRY)&_ZN6S754C33v19Ev,
  (VTBL_ENTRY)&_ZN6S754C23v20Ev,
  (VTBL_ENTRY)&_ZN6S754C23v21Ev,
  (VTBL_ENTRY)&_ZN6S754C23v22Ev,
  (VTBL_ENTRY)&_ZN6S754C23v23Ev,
  (VTBL_ENTRY)&_ZN6S754C23v24Ev,
  (VTBL_ENTRY)&_ZN6S754C23v25Ev,
  (VTBL_ENTRY)&_ZN6S754C23v26Ev,
  (VTBL_ENTRY)&_ZN6S754C23v27Ev,
  (VTBL_ENTRY)&_ZN6S754C12v1Ev,
  (VTBL_ENTRY)&_ZN6S754C12v2Ev,
  (VTBL_ENTRY)&_ZN6S754C12v3Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI6S754C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S754C1D1Ev,_ZThn84_N6S754C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S754C1D0Ev,_ZThn84_N6S754C1D0Ev),
  (VTBL_ENTRY)&_ZN7S754C103v28Ev,
};
extern VTBL_ENTRY _ZTI6S754C1[];
extern  VTBL_ENTRY _ZTV6S754C1[];
Class_Descriptor cd_S754C1 = {  "S754C1", // class name
  bases_S754C1, 5,
  &(vtc_S754C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,236), // object size
  NSPAIRA(_ZTI6S754C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S754C1),36, //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  S6363C5  {
  int s6363c5f0;
  void *s6363c5f1;
  ::S281C37_nt s6363c5f2;
  virtual void  v2(); // _ZN7S6363C52v2Ev
  ~S6363C5(); // tgen
  S6363C5(); // tgen
};
//SIG(-1 S6363C5) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S6363C5()
{
  extern Class_Descriptor cd_S6363C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6363C5, buf);
    S6363C5 *dp, &lv = *(dp=new (buf) S6363C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6363C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6363C5)");
    check_field_offset(lv, s6363c5f0, ABISELECT(8,4), "S6363C5.s6363c5f0");
    check_field_offset(lv, s6363c5f1, ABISELECT(16,8), "S6363C5.s6363c5f1");
    check_field_offset(lv, s6363c5f2, ABISELECT(24,12), "S6363C5.s6363c5f2");
    test_class_info(&lv, &cd_S6363C5);
    dp->~S6363C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6363C5(Test_S6363C5, "S6363C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6363C5C1Ev();
extern void _ZN7S6363C5D1Ev();
Name_Map name_map_S6363C5[] = {
  NSPAIR(_ZN7S6363C5C1Ev),
  NSPAIR(_ZN7S6363C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6363C5[];
extern void _ZN7S6363C52v2Ev();
static  VTBL_ENTRY vtc_S6363C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C5[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
Class_Descriptor cd_S6363C5 = {  "S6363C5", // class name
  0,0,//no base classes
  &(vtc_S6363C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6363C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6363C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6363C2  {
  int s6363c2f0[6];
  char s6363c2f1:2;
  long double s6363c2f2;
  void *s6363c2f3[2];
  int s6363c2f4;
  long double s6363c2f5;
  ::S20176C3_nt s6363c2f6;
  ::S281C37_nt s6363c2f7;
  ::S281C37_nt s6363c2f8[9];
  void *s6363c2f9;
  ::S6363C5 s6363c2f10;
  ::S6363C5 s6363c2f11;
  virtual void  v1(); // _ZN7S6363C22v1Ev
  ~S6363C2(); // tgen
  S6363C2(); // tgen
};
//SIG(-1 S6363C2) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S6363C2()
{
  extern Class_Descriptor cd_S6363C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S6363C2, buf);
    S6363C2 *dp, &lv = *(dp=new (buf) S6363C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S6363C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6363C2)");
    check_field_offset(lv, s6363c2f0, ABISELECT(8,4), "S6363C2.s6363c2f0");
    set_bf_and_test(lv, s6363c2f1, ABISELECT(32,28), 0, 2, 1, "S6363C2");
    set_bf_and_test(lv, s6363c2f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S6363C2");
    check_field_offset(lv, s6363c2f2, ABISELECT(48,32), "S6363C2.s6363c2f2");
    check_field_offset(lv, s6363c2f3, ABISELECT(64,44), "S6363C2.s6363c2f3");
    check_field_offset(lv, s6363c2f4, ABISELECT(80,52), "S6363C2.s6363c2f4");
    check_field_offset(lv, s6363c2f5, ABISELECT(96,56), "S6363C2.s6363c2f5");
    check_field_offset(lv, s6363c2f6, ABISELECT(112,68), "S6363C2.s6363c2f6");
    check_field_offset(lv, s6363c2f7, ABISELECT(120,72), "S6363C2.s6363c2f7");
    check_field_offset(lv, s6363c2f8, ABISELECT(136,80), "S6363C2.s6363c2f8");
    check_field_offset(lv, s6363c2f9, ABISELECT(280,152), "S6363C2.s6363c2f9");
    check_field_offset(lv, s6363c2f10, ABISELECT(288,156), "S6363C2.s6363c2f10");
    check_field_offset(lv, s6363c2f11, ABISELECT(328,176), "S6363C2.s6363c2f11");
    test_class_info(&lv, &cd_S6363C2);
    dp->~S6363C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6363C2(Test_S6363C2, "S6363C2", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN7S6363C2C1Ev();
extern void _ZN7S6363C2D1Ev();
Name_Map name_map_S6363C2[] = {
  NSPAIR(_ZN7S6363C2C1Ev),
  NSPAIR(_ZN7S6363C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6363C2[];
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY vtc_S6363C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C2[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
Class_Descriptor cd_S6363C2 = {  "S6363C2", // class name
  0,0,//no base classes
  &(vtc_S6363C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI7S6363C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6363C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6363C9  : S6363C5 , virtual S6363C2 , virtual S281C37_nt {
  void *s6363c9f0;
  __tsi64 s6363c9f1;
  char s6363c9f2[2];
  ::S6363C2 s6363c9f3;
  short s6363c9f4[7];
  int s6363c9f5;
  char s6363c9f6;
  int s6363c9f7:20;
  virtual void  v3(); // _ZN7S6363C92v3Ev
  ~S6363C9(); // tgen
  S6363C9(); // tgen
};
//SIG(-1 S6363C9) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


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

static void Test_S6363C9()
{
  extern Class_Descriptor cd_S6363C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S6363C9, buf);
    S6363C9 *dp, &lv = *(dp=new (buf) S6363C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S6363C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6363C9)");
    check_base_class_offset(lv, (S6363C5*), 0, "S6363C9");
    check_base_class_offset(lv, (S6363C2*), ABISELECT(464,256), "S6363C9");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S6363C9");
    check_field_offset(lv, s6363c9f0, ABISELECT(40,20), "S6363C9.s6363c9f0");
    check_field_offset(lv, s6363c9f1, ABISELECT(48,24), "S6363C9.s6363c9f1");
    check_field_offset(lv, s6363c9f2, ABISELECT(56,32), "S6363C9.s6363c9f2");
    check_field_offset(lv, s6363c9f3, ABISELECT(64,36), "S6363C9.s6363c9f3");
    check_field_offset(lv, s6363c9f4, ABISELECT(432,232), "S6363C9.s6363c9f4");
    check_field_offset(lv, s6363c9f5, ABISELECT(448,248), "S6363C9.s6363c9f5");
    check_field_offset(lv, s6363c9f6, ABISELECT(452,252), "S6363C9.s6363c9f6");
    set_bf_and_test(lv, s6363c9f7, ABISELECT(453,253), 0, 20, 1, "S6363C9");
    set_bf_and_test(lv, s6363c9f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S6363C9");
    test_class_info(&lv, &cd_S6363C9);
    dp->~S6363C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6363C9(Test_S6363C9, "S6363C9", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN7S6363C9C1Ev();
extern void _ZN7S6363C9D1Ev();
Name_Map name_map_S6363C9[] = {
  NSPAIR(_ZN7S6363C9C1Ev),
  NSPAIR(_ZN7S6363C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S6363C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6363C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6363C2,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6363C9[];
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY vtc_S6363C9[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S6363C9[];
static  VTT_ENTRY vtt_S6363C9[] = {
  {&(_ZTV7S6363C9[4]),  4,10},
  {&(_ZTV7S6363C9[9]),  9,10},
};
extern VTBL_ENTRY _ZTI7S6363C9[];
extern  VTBL_ENTRY _ZTV7S6363C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C9[];
Class_Descriptor cd_S6363C9 = {  "S6363C9", // class name
  bases_S6363C9, 3,
  &(vtc_S6363C9[0]), // expected_vtbl_contents
  &(vtt_S6363C9[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI7S6363C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6363C9),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6363C9),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  S6363C8  : virtual S6363C5 , virtual S281C37_nt , S6363C9 , S6363C2 {
  int s6363c8f0:25;
  void *s6363c8f1;
  int s6363c8f2[3];
  ::S281C37_nt s6363c8f3;
  virtual  ~S6363C8(); // _ZN7S6363C8D2Ev
  virtual void  v4(); // _ZN7S6363C82v4Ev
  S6363C8(); // tgen
};
//SIG(-1 S6363C8) C1{ VBC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC3 BC4{ BC2 VBC5{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC3 FC3[9] Fp FC2 FC2} VBC3 v4 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} BC5 vd v1 Fi:25 Fp Fi[3] FC3}


 S6363C8 ::~S6363C8(){ note_dtor("S6363C8", this);}
void  S6363C8 ::v4(){vfunc_called(this, "_ZN7S6363C82v4Ev");}
S6363C8 ::S6363C8(){ note_ctor("S6363C8", this);} // tgen

static void Test_S6363C8()
{
  extern Class_Descriptor cd_S6363C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(83,177)];
    init_test(&cd_S6363C8, buf);
    S6363C8 *dp, &lv = *(dp=new (buf) S6363C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1312,704), "sizeof(S6363C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6363C8)");
    /*is_ambiguous_... S6363C8::S6363C5 */ AMB_check_base_class_offset(lv, (S6363C5*), ABISELECT(880,480), "S6363C8");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(920,500), "S6363C8");
    check_base_class_offset(lv, (S281C37_nt*)(S6363C9*), ABISELECT(920,500), "S6363C8");
    check_base_class_offset(lv, (S6363C5*)(S6363C9*), 0, "S6363C8");
    check_base_class_offset(lv, (S6363C2*)(S6363C9*), ABISELECT(944,508), "S6363C8");
    check_base_class_offset(lv, (S6363C9*), 0, "S6363C8");
    /*is_ambiguous_... S6363C8::S6363C2 */ AMB_check_base_class_offset(lv, (S6363C2*), ABISELECT(464,256), "S6363C8");
    set_bf_and_test(lv, s6363c8f0, ABISELECT(832,452), 0, 25, 1, "S6363C8");
    set_bf_and_test(lv, s6363c8f0, ABISELECT(832,452), 0, 25, hide_sll(1LL<<24), "S6363C8");
    check_field_offset(lv, s6363c8f1, ABISELECT(840,456), "S6363C8.s6363c8f1");
    check_field_offset(lv, s6363c8f2, ABISELECT(848,460), "S6363C8.s6363c8f2");
    check_field_offset(lv, s6363c8f3, ABISELECT(864,472), "S6363C8.s6363c8f3");
    test_class_info(&lv, &cd_S6363C8);
    dp->~S6363C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6363C8(Test_S6363C8, "S6363C8", ABISELECT(1312,704));

#else // __cplusplus

extern void _ZN7S6363C8C1Ev();
extern void _ZN7S6363C8D2Ev();
Name_Map name_map_S6363C8[] = {
  NSPAIR(_ZN7S6363C8C1Ev),
  NSPAIR(_ZN7S6363C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S6363C9;
extern VTBL_ENTRY _ZTI7S6363C9[];
extern  VTBL_ENTRY _ZTV7S6363C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C9[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
static Base_Class bases_S6363C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6363C5,    ABISELECT(880,480), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(920,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6363C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6363C2,    ABISELECT(944,508), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S6363C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6363C2,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6363C8[];
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C8D1Ev();
extern void _ZN7S6363C8D0Ev();
extern void _ZN7S6363C82v4Ev();
extern void _ZN7S6363C22v1Ev();
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY vtc_S6363C8[] = {
  ABISELECT(880,480),
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
  0,
  ABISELECT(-880,-480),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S6363C8[];
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C9__7S6363C8[] = {
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C9__7S6363C8[] = {
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
static  VTT_ENTRY vtt_S6363C8[] = {
  {&(_ZTV7S6363C8[5]),  5,21},
  {&(_tg__ZTV7S6363C9__7S6363C8[4]),  4,6},
  {&(_tg__ZTV7S6363C2__7S6363C9__7S6363C8[3]),  3,4},
  {&(_ZTV7S6363C8[16]),  16,21},
  {&(_ZTV7S6363C8[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S6363C8[];
extern  VTBL_ENTRY _ZTV7S6363C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C8[];
Class_Descriptor cd_S6363C8 = {  "S6363C8", // class name
  bases_S6363C8, 6,
  &(vtc_S6363C8[0]), // expected_vtbl_contents
  &(vtt_S6363C8[0]), // expected_vtt_contents
  ABISELECT(1312,704), // object size
  NSPAIRA(_ZTI7S6363C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6363C8),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6363C8),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6363C10  : virtual S6363C9 {
  int s6363c10f0;
  char s6363c10f1;
  void *s6363c10f2[6];
  int s6363c10f3[2];
  void *s6363c10f4;
  ::S281C37_nt s6363c10f5;
  ~S6363C10(); // tgen
  S6363C10(); // tgen
};
//SIG(-1 S6363C10) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S6363C10()
{
  extern Class_Descriptor cd_S6363C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S6363C10, buf);
    S6363C10 *dp, &lv = *(dp=new (buf) S6363C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S6363C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6363C10)");
    check_base_class_offset(lv, (S6363C5*)(S6363C9*), ABISELECT(96,56), "S6363C10");
    check_base_class_offset(lv, (S6363C2*)(S6363C9*), ABISELECT(560,312), "S6363C10");
    check_base_class_offset(lv, (S281C37_nt*)(S6363C9*), ABISELECT(928,508), "S6363C10");
    check_base_class_offset(lv, (S6363C9*), ABISELECT(96,56), "S6363C10");
    check_field_offset(lv, s6363c10f0, ABISELECT(8,4), "S6363C10.s6363c10f0");
    check_field_offset(lv, s6363c10f1, ABISELECT(12,8), "S6363C10.s6363c10f1");
    check_field_offset(lv, s6363c10f2, ABISELECT(16,12), "S6363C10.s6363c10f2");
    check_field_offset(lv, s6363c10f3, ABISELECT(64,36), "S6363C10.s6363c10f3");
    check_field_offset(lv, s6363c10f4, ABISELECT(72,44), "S6363C10.s6363c10f4");
    check_field_offset(lv, s6363c10f5, ABISELECT(80,48), "S6363C10.s6363c10f5");
    test_class_info(&lv, &cd_S6363C10);
    dp->~S6363C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6363C10(Test_S6363C10, "S6363C10", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN8S6363C10C1Ev();
extern void _ZN8S6363C10D1Ev();
Name_Map name_map_S6363C10[] = {
  NSPAIR(_ZN8S6363C10C1Ev),
  NSPAIR(_ZN8S6363C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6363C9;
extern VTBL_ENTRY _ZTI7S6363C9[];
extern  VTBL_ENTRY _ZTV7S6363C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C9[];
static Base_Class bases_S6363C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6363C5,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6363C2,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6363C9,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6363C10[];
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY vtc_S6363C10[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6363C10[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S6363C10[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S6363C10[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S6363C10[];
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C9__8S6363C10[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C9__8S6363C10[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
static  VTT_ENTRY vtt_S6363C10[] = {
  {&(_ZTV8S6363C10[5]),  5,17},
  {&(_ZTV8S6363C10[11]),  11,17},
  {&(_ZTV8S6363C10[16]),  16,17},
  {&(_tg__ZTV7S6363C9__8S6363C10[4]),  4,6},
  {&(_tg__ZTV7S6363C2__7S6363C9__8S6363C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6363C10[];
extern  VTBL_ENTRY _ZTV8S6363C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6363C10[];
Class_Descriptor cd_S6363C10 = {  "S6363C10", // class name
  bases_S6363C10, 4,
  &(vtc_S6363C10[0]), // expected_vtbl_contents
  &(vtt_S6363C10[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI8S6363C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6363C10),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6363C10),5, //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  S6363C7  : S6363C8 {
  void *s6363c7f0;
  int s6363c7f1;
  void *s6363c7f2;
  int s6363c7f3[7];
  ::S6363C10 s6363c7f4;
  virtual  ~S6363C7(); // _ZN7S6363C7D2Ev
  S6363C7(); // tgen
};
//SIG(-1 S6363C7) C1{ BC2{ VBC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC4 BC5{ BC3 VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} BC6 vd v4 Fi:25 Fp Fi[3] FC4} vd Fp Fi Fp Fi[7] FC8{ VBC5 Fi Fc Fp[6] Fi[2] Fp FC4}}


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

static void Test_S6363C7()
{
  extern Class_Descriptor cd_S6363C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(146,316)];
    init_test(&cd_S6363C7, buf);
    S6363C7 *dp, &lv = *(dp=new (buf) S6363C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2320,1260), "sizeof(S6363C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6363C7)");
    /*is_ambiguous_... S6363C8::S6363C5 */ AMB_check_base_class_offset(lv, (S6363C5*)(S6363C8*), ABISELECT(1888,1036), "S6363C7");
    check_base_class_offset(lv, (S281C37_nt*)(S6363C8*), ABISELECT(1928,1056), "S6363C7");
    check_base_class_offset(lv, (S281C37_nt*)(S6363C9*)(S6363C8*), ABISELECT(1928,1056), "S6363C7");
    check_base_class_offset(lv, (S6363C5*)(S6363C9*)(S6363C8*), 0, "S6363C7");
    check_base_class_offset(lv, (S6363C2*)(S6363C9*)(S6363C8*), ABISELECT(1952,1064), "S6363C7");
    check_base_class_offset(lv, (S6363C9*)(S6363C8*), 0, "S6363C7");
    /*is_ambiguous_... S6363C8::S6363C2 */ AMB_check_base_class_offset(lv, (S6363C2*)(S6363C8*), ABISELECT(464,256), "S6363C7");
    check_base_class_offset(lv, (S6363C8*), 0, "S6363C7");
    check_field_offset(lv, s6363c7f0, ABISELECT(880,480), "S6363C7.s6363c7f0");
    check_field_offset(lv, s6363c7f1, ABISELECT(888,484), "S6363C7.s6363c7f1");
    check_field_offset(lv, s6363c7f2, ABISELECT(896,488), "S6363C7.s6363c7f2");
    check_field_offset(lv, s6363c7f3, ABISELECT(904,492), "S6363C7.s6363c7f3");
    check_field_offset(lv, s6363c7f4, ABISELECT(944,520), "S6363C7.s6363c7f4");
    test_class_info(&lv, &cd_S6363C7);
    dp->~S6363C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6363C7(Test_S6363C7, "S6363C7", ABISELECT(2320,1260));

#else // __cplusplus

extern void _ZN7S6363C7C1Ev();
extern void _ZN7S6363C7D2Ev();
Name_Map name_map_S6363C7[] = {
  NSPAIR(_ZN7S6363C7C1Ev),
  NSPAIR(_ZN7S6363C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S6363C9;
extern VTBL_ENTRY _ZTI7S6363C9[];
extern  VTBL_ENTRY _ZTV7S6363C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C9[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S6363C8;
extern VTBL_ENTRY _ZTI7S6363C8[];
extern  VTBL_ENTRY _ZTV7S6363C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C8[];
static Base_Class bases_S6363C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6363C5,    ABISELECT(1888,1036), //bcp->offset
    13, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(1928,1056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6363C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6363C2,    ABISELECT(1952,1064), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S6363C9,    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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6363C2,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6363C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6363C7[];
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C7D1Ev();
extern void _ZN7S6363C7D0Ev();
extern void _ZN7S6363C82v4Ev();
extern void _ZN7S6363C22v1Ev();
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY vtc_S6363C7[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6363C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S6363C7[];
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C8D1Ev();
extern void _ZN7S6363C8D0Ev();
extern void _ZN7S6363C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C8__7S6363C7[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C97S6363C8__7S6363C7[] = {
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C97S6363C8__7S6363C7[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C5__7S6363C8__7S6363C7[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C8__7S6363C7[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
static  VTT_ENTRY vtt_S6363C7[] = {
  {&(_ZTV7S6363C7[5]),  5,21},
  {&(_tg__ZTV7S6363C8__7S6363C7[5]),  5,10},
  {&(_tg__ZTV7S6363C97S6363C8__7S6363C7[4]),  4,6},
  {&(_tg__ZTV7S6363C2__7S6363C97S6363C8__7S6363C7[3]),  3,4},
  {&(_tg__ZTV7S6363C5__7S6363C8__7S6363C7[3]),  3,4},
  {&(_tg__ZTV7S6363C2__7S6363C8__7S6363C7[3]),  3,4},
  {&(_ZTV7S6363C7[16]),  16,21},
  {&(_ZTV7S6363C7[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S6363C7[];
extern  VTBL_ENTRY _ZTV7S6363C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C7[];
Class_Descriptor cd_S6363C7 = {  "S6363C7", // class name
  bases_S6363C7, 7,
  &(vtc_S6363C7[0]), // expected_vtbl_contents
  &(vtt_S6363C7[0]), // expected_vtt_contents
  ABISELECT(2320,1260), // object size
  NSPAIRA(_ZTI7S6363C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6363C7),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6363C7),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6363C6  : virtual S6363C7 , virtual S6363C8 {
  int s6363c6f0[2];
  short s6363c6f1[10];
  int s6363c6f2;
  ::S20176C3_nt s6363c6f3;
  int s6363c6f4:32;
  int s6363c6f5;
  ::S20176C3_nt s6363c6f6;
  void *s6363c6f7;
  int s6363c6f8:2;
  int s6363c6f9;
  long double s6363c6f10;
  virtual  ~S6363C6(); // _ZN7S6363C6D2Ev
  virtual void  v5(); // _ZN7S6363C62v5Ev
  S6363C6(); // tgen
};
//SIG(-1 S6363C6) C1{ VBC2{ BC3{ VBC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC5 BC6{ BC4 VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} BC7 vd v5 Fi:25 Fp Fi[3] FC5} vd Fp Fi Fp Fi[7] FC9{ VBC6 Fi Fc Fp[6] Fi[2] Fp FC5}} VBC3 vd v1 Fi[2] Fs[10] Fi FC8 Fi:32 Fi FC8 Fp Fi:2 Fi FD}


 S6363C6 ::~S6363C6(){ note_dtor("S6363C6", this);}
void  S6363C6 ::v5(){vfunc_called(this, "_ZN7S6363C62v5Ev");}
S6363C6 ::S6363C6(){ note_ctor("S6363C6", this);} // tgen

static void Test_S6363C6()
{
  extern Class_Descriptor cd_S6363C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(207,455)];
    init_test(&cd_S6363C6, buf);
    S6363C6 *dp, &lv = *(dp=new (buf) S6363C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3296,1816), "sizeof(S6363C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6363C6)");
    /*is_ambiguous_... S6363C8::S6363C5 */ AMB_check_base_class_offset(lv, (S6363C5*)(S6363C8*)(S6363C7*), ABISELECT(1984,1112), "S6363C6");
    /*is_ambiguous_... S6363C6::S6363C8 */ AMB_check_base_class_offset(lv, (S6363C5*)(S6363C8*), ABISELECT(1984,1112), "S6363C6");
    check_base_class_offset(lv, (S281C37_nt*)(S6363C8*)(S6363C7*), ABISELECT(2024,1132), "S6363C6");
    check_base_class_offset(lv, (S281C37_nt*)(S6363C9*)(S6363C8*)(S6363C7*), ABISELECT(2024,1132), "S6363C6");
    /*is_ambiguous_... S6363C6::S6363C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6363C8*), ABISELECT(2024,1132), "S6363C6");
    /*is_ambiguous_... S6363C6::S6363C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6363C9*)(S6363C8*), ABISELECT(2024,1132), "S6363C6");
    check_base_class_offset(lv, (S6363C5*)(S6363C9*)(S6363C8*)(S6363C7*), ABISELECT(96,76), "S6363C6");
    check_base_class_offset(lv, (S6363C2*)(S6363C9*)(S6363C8*)(S6363C7*), ABISELECT(2048,1140), "S6363C6");
    /*is_ambiguous_... S6363C6::S6363C8 */ AMB_check_base_class_offset(lv, (S6363C2*)(S6363C9*)(S6363C8*), ABISELECT(2048,1140), "S6363C6");
    check_base_class_offset(lv, (S6363C9*)(S6363C8*)(S6363C7*), ABISELECT(96,76), "S6363C6");
    /*is_ambiguous_... S6363C8::S6363C2 */ AMB_check_base_class_offset(lv, (S6363C2*)(S6363C8*)(S6363C7*), ABISELECT(560,332), "S6363C6");
    check_base_class_offset(lv, (S6363C8*)(S6363C7*), ABISELECT(96,76), "S6363C6");
    check_base_class_offset(lv, (S6363C7*), ABISELECT(96,76), "S6363C6");
    /*is_ambiguous_... S6363C6::S6363C8 */ AMB_check_base_class_offset(lv, (S6363C5*)(S6363C9*)(S6363C8*), ABISELECT(2416,1336), "S6363C6");
    /*is_ambiguous_... S6363C6::S6363C8 */ AMB_check_base_class_offset(lv, (S6363C9*)(S6363C8*), ABISELECT(2416,1336), "S6363C6");
    /*is_ambiguous_... S6363C6::S6363C8 */ AMB_check_base_class_offset(lv, (S6363C2*)(S6363C8*), ABISELECT(2880,1592), "S6363C6");
    /*is_ambiguous_... S6363C6::S6363C8 */ AMB_check_base_class_offset(lv, (S6363C8*), ABISELECT(2416,1336), "S6363C6");
    check_field_offset(lv, s6363c6f0, ABISELECT(8,4), "S6363C6.s6363c6f0");
    check_field_offset(lv, s6363c6f1, ABISELECT(16,12), "S6363C6.s6363c6f1");
    check_field_offset(lv, s6363c6f2, ABISELECT(36,32), "S6363C6.s6363c6f2");
    check_field_offset(lv, s6363c6f3, ABISELECT(40,36), "S6363C6.s6363c6f3");
    set_bf_and_test(lv, s6363c6f4, ABISELECT(44,40), 0, 32, 1, "S6363C6");
    set_bf_and_test(lv, s6363c6f4, ABISELECT(44,40), 0, 32, hide_sll(1LL<<31), "S6363C6");
    check_field_offset(lv, s6363c6f5, ABISELECT(48,44), "S6363C6.s6363c6f5");
    check_field_offset(lv, s6363c6f6, ABISELECT(52,48), "S6363C6.s6363c6f6");
    check_field_offset(lv, s6363c6f7, ABISELECT(56,52), "S6363C6.s6363c6f7");
    set_bf_and_test(lv, s6363c6f8, ABISELECT(64,56), 0, 2, 1, "S6363C6");
    set_bf_and_test(lv, s6363c6f8, ABISELECT(64,56), 0, 2, hide_sll(1LL<<1), "S6363C6");
    check_field_offset(lv, s6363c6f9, ABISELECT(68,60), "S6363C6.s6363c6f9");
    check_field_offset(lv, s6363c6f10, ABISELECT(80,64), "S6363C6.s6363c6f10");
    test_class_info(&lv, &cd_S6363C6);
    dp->~S6363C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6363C6(Test_S6363C6, "S6363C6", ABISELECT(3296,1816));

#else // __cplusplus

extern void _ZN7S6363C6C1Ev();
extern void _ZN7S6363C6D2Ev();
Name_Map name_map_S6363C6[] = {
  NSPAIR(_ZN7S6363C6C1Ev),
  NSPAIR(_ZN7S6363C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S6363C9;
extern VTBL_ENTRY _ZTI7S6363C9[];
extern  VTBL_ENTRY _ZTV7S6363C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C9[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S6363C8;
extern VTBL_ENTRY _ZTI7S6363C8[];
extern  VTBL_ENTRY _ZTV7S6363C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C8[];
extern Class_Descriptor cd_S6363C7;
extern VTBL_ENTRY _ZTI7S6363C7[];
extern  VTBL_ENTRY _ZTV7S6363C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C7[];
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S6363C9;
extern VTBL_ENTRY _ZTI7S6363C9[];
extern  VTBL_ENTRY _ZTV7S6363C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C9[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S6363C8;
extern VTBL_ENTRY _ZTI7S6363C8[];
extern  VTBL_ENTRY _ZTV7S6363C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C8[];
static Base_Class bases_S6363C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6363C5,    ABISELECT(1984,1112), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(2024,1132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6363C5,    ABISELECT(96,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6363C2,    ABISELECT(2048,1140), //bcp->offset
    32, //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
    4, //immediately_derived
  0, 1},
  {&cd_S6363C9,    ABISELECT(96,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6363C2,    ABISELECT(560,332), //bcp->offset
    25, //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6363C8,    ABISELECT(96,76), //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
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6363C7,    ABISELECT(96,76), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6363C5,    ABISELECT(2416,1336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6363C9,    ABISELECT(2416,1336), //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
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6363C2,    ABISELECT(2880,1592), //bcp->offset
    51, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6363C8,    ABISELECT(2416,1336), //bcp->offset
    36, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6363C6[];
extern void _ZN7S6363C6D1Ev();
extern void _ZN7S6363C6D0Ev();
extern void _ZN7S6363C62v5Ev();
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S6363C6D1Ev,_ZTv0_n32_N7S6363C6D1Ev)();
extern void ABISELECT(_ZThn96_N7S6363C6D1Ev,_ZThn76_N7S6363C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6363C6D0Ev,_ZTv0_n32_N7S6363C6D0Ev)();
extern void ABISELECT(_ZThn96_N7S6363C6D0Ev,_ZThn76_N7S6363C6D0Ev)() __attribute__((weak));
extern void _ZN7S6363C82v4Ev();
extern void _ZN7S6363C22v1Ev();
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C22v1Ev();
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S6363C6D1Ev,_ZTv0_n32_N7S6363C6D1Ev)();
extern void ABISELECT(_ZThn2416_N7S6363C6D1Ev,_ZThn1336_N7S6363C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6363C6D0Ev,_ZTv0_n32_N7S6363C6D0Ev)();
extern void ABISELECT(_ZThn2416_N7S6363C6D0Ev,_ZThn1336_N7S6363C6D0Ev)() __attribute__((weak));
extern void _ZN7S6363C82v4Ev();
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY vtc_S6363C6[] = {
  ABISELECT(2416,1336),
  ABISELECT(2048,1140),
  ABISELECT(2024,1132),
  ABISELECT(1984,1112),
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C62v5Ev,
  ABISELECT(464,256),
  0,
  ABISELECT(-96,-76),
  0,
  0,
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C6D1Ev,_ZTv0_n32_N7S6363C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C6D0Ev,_ZTv0_n32_N7S6363C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
  ABISELECT(-560,-332),
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
  0,
  ABISELECT(-1984,-1112),
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  0,
  ABISELECT(-2048,-1140),
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
  ABISELECT(464,256),
  0,
  ABISELECT(-2416,-1336),
  0,
  0,
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  ABISELECT(-2416,-1336),
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C6D1Ev,_ZTv0_n32_N7S6363C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C6D0Ev,_ZTv0_n32_N7S6363C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
  ABISELECT(-2880,-1592),
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S6363C6[];
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C7D1Ev();
extern void _ZN7S6363C7D0Ev();
extern void _ZN7S6363C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C7__7S6363C6[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6363C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C8D1Ev();
extern void _ZN7S6363C8D0Ev();
extern void _ZN7S6363C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C87S6363C7__7S6363C6[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C97S6363C87S6363C7__7S6363C6[] = {
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C97S6363C87S6363C7__7S6363C6[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C5__7S6363C87S6363C7__7S6363C6[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C87S6363C7__7S6363C6[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C5__7S6363C7__7S6363C6[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C7__7S6363C6[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C8D1Ev();
extern void _ZN7S6363C8D0Ev();
extern void _ZN7S6363C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C8__A1__7S6363C6[] = {
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C97S6363C8__A1__7S6363C6[] = {
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C97S6363C8__A1__7S6363C6[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C5__7S6363C8__A1__7S6363C6[] = {
  0,
  ABISELECT(432,224),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C8__A1__7S6363C6[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
static  VTT_ENTRY vtt_S6363C6[] = {
  {&(_ZTV7S6363C6[7]),  7,54},
  {&(_ZTV7S6363C6[20]),  20,54},
  {&(_ZTV7S6363C6[31]),  31,54},
  {&(_ZTV7S6363C6[35]),  35,54},
  {&(_ZTV7S6363C6[27]),  27,54},
  {&(_ZTV7S6363C6[46]),  46,54},
  {&(_ZTV7S6363C6[53]),  53,54},
  {&(_tg__ZTV7S6363C7__7S6363C6[5]),  5,10},
  {&(_tg__ZTV7S6363C87S6363C7__7S6363C6[5]),  5,10},
  {&(_tg__ZTV7S6363C97S6363C87S6363C7__7S6363C6[4]),  4,6},
  {&(_tg__ZTV7S6363C2__7S6363C97S6363C87S6363C7__7S6363C6[3]),  3,4},
  {&(_tg__ZTV7S6363C5__7S6363C87S6363C7__7S6363C6[3]),  3,4},
  {&(_tg__ZTV7S6363C2__7S6363C87S6363C7__7S6363C6[3]),  3,4},
  {&(_tg__ZTV7S6363C5__7S6363C7__7S6363C6[3]),  3,4},
  {&(_tg__ZTV7S6363C2__7S6363C7__7S6363C6[3]),  3,4},
  {&(_tg__ZTV7S6363C8__A1__7S6363C6[5]),  5,10},
  {&(_tg__ZTV7S6363C97S6363C8__A1__7S6363C6[4]),  4,6},
  {&(_tg__ZTV7S6363C2__7S6363C97S6363C8__A1__7S6363C6[3]),  3,4},
  {&(_tg__ZTV7S6363C5__7S6363C8__A1__7S6363C6[3]),  3,4},
  {&(_tg__ZTV7S6363C2__7S6363C8__A1__7S6363C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6363C6[];
extern  VTBL_ENTRY _ZTV7S6363C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C6[];
static VTBL_ENTRY alt_thunk_names83[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6363C6D0Ev,_ZTv0_n32_N7S6363C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N7S6363C6D0Ev,_ZThn1336_N7S6363C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6363C6D0Ev,_ZThn76_N7S6363C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6363C6D1Ev,_ZTv0_n32_N7S6363C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N7S6363C6D1Ev,_ZThn1336_N7S6363C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6363C6D1Ev,_ZThn76_N7S6363C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6363C6 = {  "S6363C6", // class name
  bases_S6363C6, 12,
  &(vtc_S6363C6[0]), // expected_vtbl_contents
  &(vtt_S6363C6[0]), // expected_vtt_contents
  ABISELECT(3296,1816), // object size
  NSPAIRA(_ZTI7S6363C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6363C6),54, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6363C6),20, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names83,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6363C11  : virtual S6363C10 , S6363C2 , S281C37_nt {
  char s6363c11f0;
  int s6363c11f1[2];
  long double s6363c11f2[2];
  short s6363c11f3;
  void *s6363c11f4;
  int s6363c11f5;
  __tsi64 s6363c11f6;
  int s6363c11f7;
  void *s6363c11f8;
  virtual  ~S6363C11(); // _ZN8S6363C11D2Ev
  virtual void  v6(); // _ZN8S6363C112v6Ev
  S6363C11(); // tgen
};
//SIG(-1 S6363C11) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S6363C11 ::~S6363C11(){ note_dtor("S6363C11", this);}
void  S6363C11 ::v6(){vfunc_called(this, "_ZN8S6363C112v6Ev");}
S6363C11 ::S6363C11(){ note_ctor("S6363C11", this);} // tgen

static void Test_S6363C11()
{
  extern Class_Descriptor cd_S6363C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S6363C11, buf);
    S6363C11 *dp, &lv = *(dp=new (buf) S6363C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S6363C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6363C11)");
    check_base_class_offset(lv, (S6363C5*)(S6363C9*), ABISELECT(576,324), "S6363C11");
    check_base_class_offset(lv, (S6363C2*)(S6363C9*), ABISELECT(1040,580), "S6363C11");
    check_base_class_offset(lv, (S281C37_nt*)(S6363C9*), ABISELECT(1408,776), "S6363C11");
    check_base_class_offset(lv, (S6363C9*)(S6363C10*), ABISELECT(576,324), "S6363C11");
    check_base_class_offset(lv, (S6363C10*), ABISELECT(480,268), "S6363C11");
    /*is_ambiguous_... S6363C11::S6363C2 */ AMB_check_base_class_offset(lv, (S6363C2*), 0, "S6363C11");
    /*is_ambiguous_... S6363C11::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S6363C11");
    check_field_offset(lv, s6363c11f0, ABISELECT(384,204), "S6363C11.s6363c11f0");
    check_field_offset(lv, s6363c11f1, ABISELECT(388,208), "S6363C11.s6363c11f1");
    check_field_offset(lv, s6363c11f2, ABISELECT(400,216), "S6363C11.s6363c11f2");
    check_field_offset(lv, s6363c11f3, ABISELECT(432,240), "S6363C11.s6363c11f3");
    check_field_offset(lv, s6363c11f4, ABISELECT(440,244), "S6363C11.s6363c11f4");
    check_field_offset(lv, s6363c11f5, ABISELECT(448,248), "S6363C11.s6363c11f5");
    check_field_offset(lv, s6363c11f6, ABISELECT(456,252), "S6363C11.s6363c11f6");
    check_field_offset(lv, s6363c11f7, ABISELECT(464,260), "S6363C11.s6363c11f7");
    check_field_offset(lv, s6363c11f8, ABISELECT(472,264), "S6363C11.s6363c11f8");
    test_class_info(&lv, &cd_S6363C11);
    dp->~S6363C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6363C11(Test_S6363C11, "S6363C11", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN8S6363C11C1Ev();
extern void _ZN8S6363C11D2Ev();
Name_Map name_map_S6363C11[] = {
  NSPAIR(_ZN8S6363C11C1Ev),
  NSPAIR(_ZN8S6363C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6363C9;
extern VTBL_ENTRY _ZTI7S6363C9[];
extern  VTBL_ENTRY _ZTV7S6363C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C9[];
extern Class_Descriptor cd_S6363C10;
extern VTBL_ENTRY _ZTI8S6363C10[];
extern  VTBL_ENTRY _ZTV8S6363C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6363C10[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S6363C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6363C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6363C2,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6363C9,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6363C10,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6363C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6363C11[];
extern void _ZN7S6363C22v1Ev();
extern void _ZN8S6363C11D1Ev();
extern void _ZN8S6363C11D0Ev();
extern void _ZN8S6363C112v6Ev();
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY vtc_S6363C11[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S6363C11[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
  (VTBL_ENTRY)&_ZN8S6363C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6363C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6363C112v6Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S6363C11[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S6363C11[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI8S6363C11[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S6363C11[];
static  VTBL_ENTRY _tg__ZTV8S6363C10__8S6363C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6363C10[0]),
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C9__8S6363C10__8S6363C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S6363C10[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__8S6363C10__8S6363C11[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S6363C10[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C9__8S6363C11[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C9__8S6363C11[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
static  VTT_ENTRY vtt_S6363C11[] = {
  {&(_ZTV8S6363C11[6]),  6,27},
  {&(_ZTV8S6363C11[15]),  15,27},
  {&(_ZTV8S6363C11[21]),  21,27},
  {&(_ZTV8S6363C11[26]),  26,27},
  {&(_tg__ZTV8S6363C10__8S6363C11[5]),  5,5},
  {&(_tg__ZTV7S6363C9__8S6363C10__8S6363C11[6]),  6,8},
  {&(_tg__ZTV7S6363C2__8S6363C10__8S6363C11[3]),  3,4},
  {&(_tg__ZTV7S6363C9__8S6363C11[4]),  4,6},
  {&(_tg__ZTV7S6363C2__7S6363C9__8S6363C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6363C11[];
extern  VTBL_ENTRY _ZTV8S6363C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6363C11[];
Class_Descriptor cd_S6363C11 = {  "S6363C11", // class name
  bases_S6363C11, 7,
  &(vtc_S6363C11[0]), // expected_vtbl_contents
  &(vtt_S6363C11[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI8S6363C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6363C11),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6363C11),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6363C1  : S6363C2 , S6363C6 , S6363C7 , virtual S6363C11 {
  __tsi64 s6363c1f0;
  int s6363c1f1;
  ~S6363C1(); // tgen
  S6363C1(); // tgen
};
//SIG(1 S6363C1) C1{ BC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} BC6{ VBC7{ BC8{ VBC5 VBC4 BC9{ BC5 VBC2 VBC4 v3 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} BC2 vd v4 Fi:25 Fp Fi[3] FC4} vd Fp Fi Fp Fi[7] FC10{ VBC9 Fi Fc Fp[6] Fi[2] Fp FC4}} VBC8 vd v5 Fi[2] Fs[10] Fi FC3 Fi:32 Fi FC3 Fp Fi:2 Fi FD} BC7 VBC11{ VBC10 BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} FL Fi}


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

static void Test_S6363C1()
{
  extern Class_Descriptor cd_S6363C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(414,911)];
    init_test(&cd_S6363C1, buf);
    S6363C1 *dp, &lv = *(dp=new (buf) S6363C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6608,3640), "sizeof(S6363C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6363C1)");
    /*is_ambiguous_... S6363C1::S6363C2 */ AMB_check_base_class_offset(lv, (S6363C2*), 0, "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C5*)(S6363C8*)(S6363C7*), ABISELECT(4256,2356), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C8 */ AMB_check_base_class_offset(lv, (S6363C5*)(S6363C8*), ABISELECT(4256,2356), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C5*)(S6363C8*)(S6363C7*), ABISELECT(4256,2356), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6363C8*)(S6363C7*), ABISELECT(4296,2376), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6363C9*)(S6363C8*)(S6363C7*), ABISELECT(4296,2376), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6363C8*), ABISELECT(4296,2376), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6363C9*)(S6363C8*), ABISELECT(4296,2376), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6363C8*)(S6363C7*), ABISELECT(4296,2376), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6363C9*)(S6363C8*)(S6363C7*), ABISELECT(4296,2376), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C9 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6363C9*), ABISELECT(4296,2376), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C5*)(S6363C9*)(S6363C8*)(S6363C7*), ABISELECT(2368,1320), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C2*)(S6363C9*)(S6363C8*)(S6363C7*), ABISELECT(4320,2384), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C8 */ AMB_check_base_class_offset(lv, (S6363C2*)(S6363C9*)(S6363C8*), ABISELECT(4320,2384), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C2*)(S6363C9*)(S6363C8*)(S6363C7*), ABISELECT(4320,2384), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C9 */ AMB_check_base_class_offset(lv, (S6363C2*)(S6363C9*), ABISELECT(4320,2384), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C9*)(S6363C8*)(S6363C7*), ABISELECT(2368,1320), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C2*)(S6363C8*)(S6363C7*), ABISELECT(2832,1576), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C8*)(S6363C7*), ABISELECT(2368,1320), "S6363C1");
    check_base_class_offset(lv, (S6363C7*)(S6363C6*), ABISELECT(2368,1320), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C8 */ AMB_check_base_class_offset(lv, (S6363C5*)(S6363C9*)(S6363C8*), ABISELECT(4688,2580), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C8 */ AMB_check_base_class_offset(lv, (S6363C9*)(S6363C8*), ABISELECT(4688,2580), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C8 */ AMB_check_base_class_offset(lv, (S6363C2*)(S6363C8*), ABISELECT(5152,2836), "S6363C1");
    /*is_ambiguous_... S6363C6::S6363C8 */ AMB_check_base_class_offset(lv, (S6363C8*)(S6363C6*), ABISELECT(4688,2580), "S6363C1");
    check_base_class_offset(lv, (S6363C6*), ABISELECT(368,196), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C5*)(S6363C9*)(S6363C8*)(S6363C7*), ABISELECT(464,272), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C9*)(S6363C8*)(S6363C7*), ABISELECT(464,272), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C2*)(S6363C8*)(S6363C7*), ABISELECT(928,528), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C8*)(S6363C7*), ABISELECT(464,272), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C7 */ AMB_check_base_class_offset(lv, (S6363C7*), ABISELECT(464,272), "S6363C1");
    /*is_ambiguous_... S6363C1::S6363C9 */ AMB_check_base_class_offset(lv, (S6363C5*)(S6363C9*), ABISELECT(6144,3384), "S6363C1");
    check_base_class_offset(lv, (S6363C9*)(S6363C10*), ABISELECT(6144,3384), "S6363C1");
    check_base_class_offset(lv, (S6363C10*)(S6363C11*), ABISELECT(6048,3328), "S6363C1");
    /*is_ambiguous_... S6363C11::S6363C2 */ AMB_check_base_class_offset(lv, (S6363C2*)(S6363C11*), ABISELECT(5568,3060), "S6363C1");
    /*is_ambiguous_... S6363C11::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6363C11*), ABISELECT(5936,3256), "S6363C1");
    check_base_class_offset(lv, (S6363C11*), ABISELECT(5568,3060), "S6363C1");
    check_field_offset(lv, s6363c1f0, ABISELECT(2352,1308), "S6363C1.s6363c1f0");
    check_field_offset(lv, s6363c1f1, ABISELECT(2360,1316), "S6363C1.s6363c1f1");
    test_class_info(&lv, &cd_S6363C1);
    dp->~S6363C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6363C1(Test_S6363C1, "S6363C1", ABISELECT(6608,3640));

#else // __cplusplus

extern void _ZN7S6363C1C1Ev();
extern void _ZN7S6363C1D1Ev();
Name_Map name_map_S6363C1[] = {
  NSPAIR(_ZN7S6363C1C1Ev),
  NSPAIR(_ZN7S6363C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S6363C9;
extern VTBL_ENTRY _ZTI7S6363C9[];
extern  VTBL_ENTRY _ZTV7S6363C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C9[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S6363C8;
extern VTBL_ENTRY _ZTI7S6363C8[];
extern  VTBL_ENTRY _ZTV7S6363C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C8[];
extern Class_Descriptor cd_S6363C7;
extern VTBL_ENTRY _ZTI7S6363C7[];
extern  VTBL_ENTRY _ZTV7S6363C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C7[];
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S6363C9;
extern VTBL_ENTRY _ZTI7S6363C9[];
extern  VTBL_ENTRY _ZTV7S6363C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C9[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S6363C8;
extern VTBL_ENTRY _ZTI7S6363C8[];
extern  VTBL_ENTRY _ZTV7S6363C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C8[];
extern Class_Descriptor cd_S6363C6;
extern VTBL_ENTRY _ZTI7S6363C6[];
extern  VTBL_ENTRY _ZTV7S6363C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C6[];
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S6363C9;
extern VTBL_ENTRY _ZTI7S6363C9[];
extern  VTBL_ENTRY _ZTV7S6363C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C9[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S6363C8;
extern VTBL_ENTRY _ZTI7S6363C8[];
extern  VTBL_ENTRY _ZTV7S6363C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C8[];
extern Class_Descriptor cd_S6363C7;
extern VTBL_ENTRY _ZTI7S6363C7[];
extern  VTBL_ENTRY _ZTV7S6363C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C7[];
extern Class_Descriptor cd_S6363C5;
extern VTBL_ENTRY _ZTI7S6363C5[];
extern  VTBL_ENTRY _ZTV7S6363C5[];
extern Class_Descriptor cd_S6363C9;
extern VTBL_ENTRY _ZTI7S6363C9[];
extern  VTBL_ENTRY _ZTV7S6363C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C9[];
extern Class_Descriptor cd_S6363C10;
extern VTBL_ENTRY _ZTI8S6363C10[];
extern  VTBL_ENTRY _ZTV8S6363C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6363C10[];
extern Class_Descriptor cd_S6363C2;
extern VTBL_ENTRY _ZTI7S6363C2[];
extern  VTBL_ENTRY _ZTV7S6363C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6363C11;
extern VTBL_ENTRY _ZTI8S6363C11[];
extern  VTBL_ENTRY _ZTV8S6363C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6363C11[];
static Base_Class bases_S6363C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6363C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6363C5,    ABISELECT(4256,2356), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(4296,2376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6363C5,    ABISELECT(2368,1320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6363C2,    ABISELECT(4320,2384), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6363C9,    ABISELECT(2368,1320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6363C2,    ABISELECT(2832,1576), //bcp->offset
    51, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6363C8,    ABISELECT(2368,1320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6363C7,    ABISELECT(2368,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6363C5,    ABISELECT(4688,2580), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S6363C9,    ABISELECT(4688,2580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6363C2,    ABISELECT(5152,2836), //bcp->offset
    77, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6363C8,    ABISELECT(4688,2580), //bcp->offset
    62, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6363C6,    ABISELECT(368,196), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6363C5,    ABISELECT(464,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
    19, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6363C9,    ABISELECT(464,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6363C2,    ABISELECT(928,528), //bcp->offset
    33, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6363C8,    ABISELECT(464,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6363C7,    ABISELECT(464,272), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6363C5,    ABISELECT(6144,3384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6363C9,    ABISELECT(6144,3384), //bcp->offset
    98, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S6363C10,    ABISELECT(6048,3328), //bcp->offset
    93, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S6363C2,    ABISELECT(5568,3060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5936,3256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6363C11,    ABISELECT(5568,3060), //bcp->offset
    80, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6363C1[];
extern void _ZN7S6363C22v1Ev();
extern void _ZN7S6363C1D1Ev();
extern void _ZN7S6363C1D0Ev();
extern void ABISELECT(_ZThn368_N7S6363C1D1Ev,_ZThn196_N7S6363C1D1Ev)();
extern void ABISELECT(_ZThn368_N7S6363C1D0Ev,_ZThn196_N7S6363C1D0Ev)();
extern void _ZN7S6363C62v5Ev();
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void ABISELECT(_ZThn464_N7S6363C1D1Ev,_ZThn272_N7S6363C1D1Ev)();
extern void ABISELECT(_ZThn464_N7S6363C1D0Ev,_ZThn272_N7S6363C1D0Ev)();
extern void _ZN7S6363C82v4Ev();
extern void _ZN7S6363C22v1Ev();
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S6363C1D1Ev,_ZTv0_n32_N7S6363C1D1Ev)();
extern void ABISELECT(_ZThn2368_N7S6363C1D1Ev,_ZThn1320_N7S6363C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6363C1D0Ev,_ZTv0_n32_N7S6363C1D0Ev)();
extern void ABISELECT(_ZThn2368_N7S6363C1D0Ev,_ZThn1320_N7S6363C1D0Ev)() __attribute__((weak));
extern void _ZN7S6363C82v4Ev();
extern void _ZN7S6363C22v1Ev();
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C22v1Ev();
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S6363C1D1Ev,_ZTv0_n32_N7S6363C1D1Ev)();
extern void ABISELECT(_ZThn4688_N7S6363C1D1Ev,_ZThn2580_N7S6363C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6363C1D0Ev,_ZTv0_n32_N7S6363C1D0Ev)();
extern void ABISELECT(_ZThn4688_N7S6363C1D0Ev,_ZThn2580_N7S6363C1D0Ev)() __attribute__((weak));
extern void _ZN7S6363C82v4Ev();
extern void _ZN7S6363C22v1Ev();
extern void _ZN7S6363C22v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S6363C1D1Ev,_ZTv0_n32_N7S6363C1D1Ev)();
extern void ABISELECT(_ZThn5568_N7S6363C1D1Ev,_ZThn3060_N7S6363C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6363C1D0Ev,_ZTv0_n32_N7S6363C1D0Ev)();
extern void ABISELECT(_ZThn5568_N7S6363C1D0Ev,_ZThn3060_N7S6363C1D0Ev)() __attribute__((weak));
extern void _ZN8S6363C112v6Ev();
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY vtc_S6363C1[] = {
  ABISELECT(6144,3384),
  ABISELECT(6048,3328),
  ABISELECT(5568,3060),
  ABISELECT(4688,2580),
  ABISELECT(4320,2384),
  ABISELECT(4296,2376),
  ABISELECT(4256,2356),
  ABISELECT(2368,1320),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6363C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C1D0Ev,
  ABISELECT(4320,2384),
  ABISELECT(3952,2188),
  ABISELECT(3928,2180),
  ABISELECT(3888,2160),
  ABISELECT(2000,1124),
  ABISELECT(-368,-196),
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn368_N7S6363C1D1Ev,_ZThn196_N7S6363C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn368_N7S6363C1D0Ev,_ZThn196_N7S6363C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6363C62v5Ev,
  ABISELECT(3792,2084),
  ABISELECT(3832,2104),
  ABISELECT(3856,2112),
  ABISELECT(-464,-272),
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N7S6363C1D1Ev,_ZThn272_N7S6363C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N7S6363C1D0Ev,_ZThn272_N7S6363C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
  ABISELECT(-928,-528),
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
  ABISELECT(464,256),
  0,
  ABISELECT(-2368,-1320),
  0,
  0,
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  ABISELECT(-2368,-1320),
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C1D1Ev,_ZTv0_n32_N7S6363C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C1D0Ev,_ZTv0_n32_N7S6363C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
  ABISELECT(-2832,-1576),
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
  0,
  ABISELECT(-4256,-2356),
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  0,
  ABISELECT(-4320,-2384),
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
  ABISELECT(464,256),
  0,
  ABISELECT(-4688,-2580),
  0,
  0,
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  ABISELECT(-4688,-2580),
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C1D1Ev,_ZTv0_n32_N7S6363C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C1D0Ev,_ZTv0_n32_N7S6363C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
  ABISELECT(-5152,-2836),
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
  0,
  ABISELECT(-5568,-3060),
  0,
  ABISELECT(-1272,-684),
  ABISELECT(-1248,-676),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-5568,-3060),
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C1D1Ev,_ZTv0_n32_N7S6363C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C1D0Ev,_ZTv0_n32_N7S6363C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6363C112v6Ev,
  ABISELECT(-1752,-952),
  ABISELECT(-1728,-944),
  ABISELECT(96,56),
  ABISELECT(-6048,-3328),
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  0,
  0,
  ABISELECT(-1848,-1008),
  ABISELECT(-1824,-1000),
  ABISELECT(-6144,-3384),
  (VTBL_ENTRY)&(_ZTI7S6363C1[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern VTBL_ENTRY _ZTV7S6363C1[];
extern void _ZN7S6363C6D1Ev();
extern void _ZN7S6363C6D0Ev();
extern void _ZN7S6363C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C6__7S6363C1[] = {
  ABISELECT(4320,2384),
  ABISELECT(3952,2188),
  ABISELECT(3928,2180),
  ABISELECT(3888,2160),
  ABISELECT(2000,1124),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C62v5Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S6363C6D1Ev,_ZTv0_n32_N7S6363C6D1Ev)();
extern void ABISELECT(_ZThn2000_N7S6363C6D1Ev,_ZThn1124_N7S6363C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6363C6D0Ev,_ZTv0_n32_N7S6363C6D0Ev)();
extern void ABISELECT(_ZThn2000_N7S6363C6D0Ev,_ZThn1124_N7S6363C6D0Ev)() __attribute__((weak));
extern void _ZN7S6363C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C7__7S6363C6__7S6363C1[] = {
  ABISELECT(464,256),
  0,
  ABISELECT(-2000,-1124),
  0,
  0,
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  ABISELECT(-2000,-1124),
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C6D1Ev,_ZTv0_n32_N7S6363C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C6D0Ev,_ZTv0_n32_N7S6363C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
};
extern void _ZN7S6363C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C5__7S6363C6__7S6363C1[] = {
  0,
  ABISELECT(-3888,-2160),
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C6__7S6363C1[] = {
  0,
  ABISELECT(-3952,-2188),
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C27S6363C87S6363C7__A1__7S6363C6__7S6363C1[] = {
  ABISELECT(-2464,-1380),
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S6363C6D1Ev,_ZTv0_n32_N7S6363C6D1Ev)();
extern void ABISELECT(_ZThn4320_N7S6363C6D1Ev,_ZThn2384_N7S6363C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6363C6D0Ev,_ZTv0_n32_N7S6363C6D0Ev)();
extern void ABISELECT(_ZThn4320_N7S6363C6D0Ev,_ZThn2384_N7S6363C6D0Ev)() __attribute__((weak));
extern void _ZN7S6363C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C8__A1__7S6363C6__7S6363C1[] = {
  ABISELECT(464,256),
  0,
  ABISELECT(-4320,-2384),
  0,
  0,
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  ABISELECT(-4320,-2384),
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C6D1Ev,_ZTv0_n32_N7S6363C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6363C6D0Ev,_ZTv0_n32_N7S6363C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C27S6363C8__A2__7S6363C6__7S6363C1[] = {
  ABISELECT(-4784,-2640),
  (VTBL_ENTRY)&(_ZTI7S6363C6[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C7D1Ev();
extern void _ZN7S6363C7D0Ev();
extern void _ZN7S6363C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C7__A__7S6363C1[] = {
  ABISELECT(3792,2084),
  ABISELECT(3832,2104),
  ABISELECT(3856,2112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6363C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C8D1Ev();
extern void _ZN7S6363C8D0Ev();
extern void _ZN7S6363C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C87S6363C7__A2__7S6363C1[] = {
  ABISELECT(3792,2084),
  ABISELECT(3832,2104),
  ABISELECT(3856,2112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C97S6363C87S6363C7__A2__7S6363C1[] = {
  ABISELECT(3832,2104),
  ABISELECT(3856,2112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C97S6363C87S6363C7__A2__7S6363C1[] = {
  0,
  ABISELECT(-3856,-2112),
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C5__7S6363C87S6363C7__A2__7S6363C1[] = {
  0,
  ABISELECT(-3792,-2084),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C87S6363C7__A2__7S6363C1[] = {
  0,
  ABISELECT(-3856,-2112),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C5__7S6363C7__A__7S6363C1[] = {
  0,
  ABISELECT(-3792,-2084),
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C7__A__7S6363C1[] = {
  0,
  ABISELECT(-3856,-2112),
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C7D1Ev();
extern void _ZN7S6363C7D0Ev();
extern void _ZN7S6363C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C7__7S6363C1[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6363C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C8D1Ev();
extern void _ZN7S6363C8D0Ev();
extern void _ZN7S6363C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C87S6363C7__7S6363C1[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C97S6363C87S6363C7__7S6363C1[] = {
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C97S6363C87S6363C7__7S6363C1[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C5__7S6363C87S6363C7__7S6363C1[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C87S6363C7__7S6363C1[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C5__7S6363C7__7S6363C1[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C7__7S6363C1[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6363C7[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
extern void _ZN7S6363C8D1Ev();
extern void _ZN7S6363C8D0Ev();
extern void _ZN7S6363C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C8__A1__7S6363C1[] = {
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6363C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6363C82v4Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C97S6363C8__A1__7S6363C1[] = {
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C97S6363C8__A1__7S6363C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C5__7S6363C8__A1__7S6363C1[] = {
  0,
  ABISELECT(432,224),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C8__A1__7S6363C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6363C8[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C22v1Ev();
extern void _ZN8S6363C11D1Ev();
extern void _ZN8S6363C11D0Ev();
extern void _ZN8S6363C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6363C11__7S6363C1[] = {
  ABISELECT(-1272,-684),
  ABISELECT(-1248,-676),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S6363C11[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
  (VTBL_ENTRY)&_ZN8S6363C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6363C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6363C112v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6363C10__8S6363C11__7S6363C1[] = {
  ABISELECT(-1752,-952),
  ABISELECT(-1728,-944),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S6363C11[0]),
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C9__8S6363C11__7S6363C1[] = {
  0,
  0,
  ABISELECT(-1848,-1008),
  ABISELECT(-1824,-1000),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S6363C11[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__8S6363C11__7S6363C1[] = {
  0,
  ABISELECT(1248,676),
  (VTBL_ENTRY)&(_ZTI8S6363C11[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6363C10__7S6363C1[] = {
  ABISELECT(-1752,-952),
  ABISELECT(-1728,-944),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6363C10[0]),
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C9__8S6363C10__7S6363C1[] = {
  0,
  0,
  ABISELECT(-1848,-1008),
  ABISELECT(-1824,-1000),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S6363C10[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__8S6363C10__7S6363C1[] = {
  0,
  ABISELECT(1728,944),
  (VTBL_ENTRY)&(_ZTI8S6363C10[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
extern void _ZN7S6363C52v2Ev();
extern void _ZN7S6363C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C9__A3__7S6363C1[] = {
  ABISELECT(-1848,-1008),
  ABISELECT(-1824,-1000),
  0,
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6363C92v3Ev,
};
extern void _ZN7S6363C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6363C2__7S6363C9__A3__7S6363C1[] = {
  0,
  ABISELECT(1824,1000),
  (VTBL_ENTRY)&(_ZTI7S6363C9[0]),
  (VTBL_ENTRY)&_ZN7S6363C22v1Ev,
};
static  VTT_ENTRY vtt_S6363C1[] = {
  {&(_ZTV7S6363C1[10]),  10,106},
  {&(_tg__ZTV7S6363C6__7S6363C1[7]),  7,10},
  {&(_tg__ZTV7S6363C7__7S6363C6__7S6363C1[10]),  10,15},
  {&(_tg__ZTV7S6363C5__7S6363C6__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C2__7S6363C6__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C27S6363C87S6363C7__A1__7S6363C6__7S6363C1[2]),  2,3},
  {&(_tg__ZTV7S6363C8__A1__7S6363C6__7S6363C1[10]),  10,15},
  {&(_tg__ZTV7S6363C27S6363C8__A2__7S6363C6__7S6363C1[2]),  2,3},
  {&(_tg__ZTV7S6363C7__A__7S6363C1[5]),  5,10},
  {&(_tg__ZTV7S6363C87S6363C7__A2__7S6363C1[5]),  5,10},
  {&(_tg__ZTV7S6363C97S6363C87S6363C7__A2__7S6363C1[4]),  4,6},
  {&(_tg__ZTV7S6363C2__7S6363C97S6363C87S6363C7__A2__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C5__7S6363C87S6363C7__A2__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C2__7S6363C87S6363C7__A2__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C5__7S6363C7__A__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C2__7S6363C7__A__7S6363C1[3]),  3,4},
  {&(_ZTV7S6363C1[20]),  20,106},
  {&(_ZTV7S6363C1[46]),  46,106},
  {&(_ZTV7S6363C1[57]),  57,106},
  {&(_ZTV7S6363C1[61]),  61,106},
  {&(_ZTV7S6363C1[53]),  53,106},
  {&(_ZTV7S6363C1[72]),  72,106},
  {&(_ZTV7S6363C1[79]),  79,106},
  {&(_ZTV7S6363C1[28]),  28,106},
  {&(_ZTV7S6363C1[89]),  89,106},
  {&(_ZTV7S6363C1[98]),  98,106},
  {&(_ZTV7S6363C1[104]),  104,106},
  {&(_tg__ZTV7S6363C7__7S6363C1[5]),  5,10},
  {&(_tg__ZTV7S6363C87S6363C7__7S6363C1[5]),  5,10},
  {&(_tg__ZTV7S6363C97S6363C87S6363C7__7S6363C1[4]),  4,6},
  {&(_tg__ZTV7S6363C2__7S6363C97S6363C87S6363C7__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C5__7S6363C87S6363C7__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C2__7S6363C87S6363C7__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C5__7S6363C7__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C2__7S6363C7__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C8__A1__7S6363C1[5]),  5,10},
  {&(_tg__ZTV7S6363C97S6363C8__A1__7S6363C1[4]),  4,6},
  {&(_tg__ZTV7S6363C2__7S6363C97S6363C8__A1__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C5__7S6363C8__A1__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C2__7S6363C8__A1__7S6363C1[3]),  3,4},
  {&(_tg__ZTV8S6363C11__7S6363C1[6]),  6,10},
  {&(_tg__ZTV8S6363C10__8S6363C11__7S6363C1[5]),  5,5},
  {&(_tg__ZTV7S6363C9__8S6363C11__7S6363C1[6]),  6,8},
  {&(_tg__ZTV7S6363C2__8S6363C11__7S6363C1[3]),  3,4},
  {&(_tg__ZTV8S6363C10__7S6363C1[5]),  5,5},
  {&(_tg__ZTV7S6363C9__8S6363C10__7S6363C1[6]),  6,8},
  {&(_tg__ZTV7S6363C2__8S6363C10__7S6363C1[3]),  3,4},
  {&(_tg__ZTV7S6363C9__A3__7S6363C1[4]),  4,6},
  {&(_tg__ZTV7S6363C2__7S6363C9__A3__7S6363C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6363C1[];
extern  VTBL_ENTRY _ZTV7S6363C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6363C1[];
static VTBL_ENTRY alt_thunk_names84[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6363C6D0Ev,_ZTv0_n32_N7S6363C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4320_N7S6363C6D0Ev,_ZThn2384_N7S6363C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2000_N7S6363C6D0Ev,_ZThn1124_N7S6363C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6363C6D1Ev,_ZTv0_n32_N7S6363C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4320_N7S6363C6D1Ev,_ZThn2384_N7S6363C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2000_N7S6363C6D1Ev,_ZThn1124_N7S6363C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6363C1D0Ev,_ZTv0_n32_N7S6363C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5568_N7S6363C1D0Ev,_ZThn3060_N7S6363C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4688_N7S6363C1D0Ev,_ZThn2580_N7S6363C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N7S6363C1D0Ev,_ZThn1320_N7S6363C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6363C1D1Ev,_ZTv0_n32_N7S6363C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5568_N7S6363C1D1Ev,_ZThn3060_N7S6363C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4688_N7S6363C1D1Ev,_ZThn2580_N7S6363C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N7S6363C1D1Ev,_ZThn1320_N7S6363C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6363C1 = {  "S6363C1", // class name
  bases_S6363C1, 25,
  &(vtc_S6363C1[0]), // expected_vtbl_contents
  &(vtt_S6363C1[0]), // expected_vtt_contents
  ABISELECT(6608,3640), // object size
  NSPAIRA(_ZTI7S6363C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6363C1),106, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6363C1),49, //virtual table table var
  23, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names84,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6364C5  {
  int s6364c5f0;
  void *s6364c5f1;
  ::S281C37_nt s6364c5f2;
  virtual void  v2(); // _ZN7S6364C52v2Ev
  ~S6364C5(); // tgen
  S6364C5(); // tgen
};
//SIG(-1 S6364C5) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S6364C5()
{
  extern Class_Descriptor cd_S6364C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6364C5, buf);
    S6364C5 *dp, &lv = *(dp=new (buf) S6364C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6364C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6364C5)");
    check_field_offset(lv, s6364c5f0, ABISELECT(8,4), "S6364C5.s6364c5f0");
    check_field_offset(lv, s6364c5f1, ABISELECT(16,8), "S6364C5.s6364c5f1");
    check_field_offset(lv, s6364c5f2, ABISELECT(24,12), "S6364C5.s6364c5f2");
    test_class_info(&lv, &cd_S6364C5);
    dp->~S6364C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6364C5(Test_S6364C5, "S6364C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6364C5C1Ev();
extern void _ZN7S6364C5D1Ev();
Name_Map name_map_S6364C5[] = {
  NSPAIR(_ZN7S6364C5C1Ev),
  NSPAIR(_ZN7S6364C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6364C5[];
extern void _ZN7S6364C52v2Ev();
static  VTBL_ENTRY vtc_S6364C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C5[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
Class_Descriptor cd_S6364C5 = {  "S6364C5", // class name
  0,0,//no base classes
  &(vtc_S6364C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6364C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6364C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6364C2  {
  int s6364c2f0[6];
  char s6364c2f1:2;
  long double s6364c2f2;
  void *s6364c2f3[2];
  int s6364c2f4;
  long double s6364c2f5;
  ::S20176C3_nt s6364c2f6;
  ::S281C37_nt s6364c2f7;
  ::S281C37_nt s6364c2f8[9];
  void *s6364c2f9;
  ::S6364C5 s6364c2f10;
  ::S6364C5 s6364c2f11;
  virtual void  v1(); // _ZN7S6364C22v1Ev
  ~S6364C2(); // tgen
  S6364C2(); // tgen
};
//SIG(-1 S6364C2) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S6364C2()
{
  extern Class_Descriptor cd_S6364C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S6364C2, buf);
    S6364C2 *dp, &lv = *(dp=new (buf) S6364C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S6364C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6364C2)");
    check_field_offset(lv, s6364c2f0, ABISELECT(8,4), "S6364C2.s6364c2f0");
    set_bf_and_test(lv, s6364c2f1, ABISELECT(32,28), 0, 2, 1, "S6364C2");
    set_bf_and_test(lv, s6364c2f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S6364C2");
    check_field_offset(lv, s6364c2f2, ABISELECT(48,32), "S6364C2.s6364c2f2");
    check_field_offset(lv, s6364c2f3, ABISELECT(64,44), "S6364C2.s6364c2f3");
    check_field_offset(lv, s6364c2f4, ABISELECT(80,52), "S6364C2.s6364c2f4");
    check_field_offset(lv, s6364c2f5, ABISELECT(96,56), "S6364C2.s6364c2f5");
    check_field_offset(lv, s6364c2f6, ABISELECT(112,68), "S6364C2.s6364c2f6");
    check_field_offset(lv, s6364c2f7, ABISELECT(120,72), "S6364C2.s6364c2f7");
    check_field_offset(lv, s6364c2f8, ABISELECT(136,80), "S6364C2.s6364c2f8");
    check_field_offset(lv, s6364c2f9, ABISELECT(280,152), "S6364C2.s6364c2f9");
    check_field_offset(lv, s6364c2f10, ABISELECT(288,156), "S6364C2.s6364c2f10");
    check_field_offset(lv, s6364c2f11, ABISELECT(328,176), "S6364C2.s6364c2f11");
    test_class_info(&lv, &cd_S6364C2);
    dp->~S6364C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6364C2(Test_S6364C2, "S6364C2", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN7S6364C2C1Ev();
extern void _ZN7S6364C2D1Ev();
Name_Map name_map_S6364C2[] = {
  NSPAIR(_ZN7S6364C2C1Ev),
  NSPAIR(_ZN7S6364C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6364C2[];
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY vtc_S6364C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C2[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
Class_Descriptor cd_S6364C2 = {  "S6364C2", // class name
  0,0,//no base classes
  &(vtc_S6364C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI7S6364C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6364C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6364C9  : S6364C5 , virtual S6364C2 , virtual S281C37_nt {
  void *s6364c9f0;
  __tsi64 s6364c9f1;
  char s6364c9f2[2];
  ::S6364C2 s6364c9f3;
  short s6364c9f4[7];
  int s6364c9f5;
  char s6364c9f6;
  int s6364c9f7:20;
  virtual void  v3(); // _ZN7S6364C92v3Ev
  ~S6364C9(); // tgen
  S6364C9(); // tgen
};
//SIG(-1 S6364C9) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


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

static void Test_S6364C9()
{
  extern Class_Descriptor cd_S6364C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S6364C9, buf);
    S6364C9 *dp, &lv = *(dp=new (buf) S6364C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S6364C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6364C9)");
    check_base_class_offset(lv, (S6364C5*), 0, "S6364C9");
    check_base_class_offset(lv, (S6364C2*), ABISELECT(464,256), "S6364C9");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S6364C9");
    check_field_offset(lv, s6364c9f0, ABISELECT(40,20), "S6364C9.s6364c9f0");
    check_field_offset(lv, s6364c9f1, ABISELECT(48,24), "S6364C9.s6364c9f1");
    check_field_offset(lv, s6364c9f2, ABISELECT(56,32), "S6364C9.s6364c9f2");
    check_field_offset(lv, s6364c9f3, ABISELECT(64,36), "S6364C9.s6364c9f3");
    check_field_offset(lv, s6364c9f4, ABISELECT(432,232), "S6364C9.s6364c9f4");
    check_field_offset(lv, s6364c9f5, ABISELECT(448,248), "S6364C9.s6364c9f5");
    check_field_offset(lv, s6364c9f6, ABISELECT(452,252), "S6364C9.s6364c9f6");
    set_bf_and_test(lv, s6364c9f7, ABISELECT(453,253), 0, 20, 1, "S6364C9");
    set_bf_and_test(lv, s6364c9f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S6364C9");
    test_class_info(&lv, &cd_S6364C9);
    dp->~S6364C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6364C9(Test_S6364C9, "S6364C9", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN7S6364C9C1Ev();
extern void _ZN7S6364C9D1Ev();
Name_Map name_map_S6364C9[] = {
  NSPAIR(_ZN7S6364C9C1Ev),
  NSPAIR(_ZN7S6364C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S6364C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6364C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6364C2,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6364C9[];
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY vtc_S6364C9[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S6364C9[];
static  VTT_ENTRY vtt_S6364C9[] = {
  {&(_ZTV7S6364C9[4]),  4,10},
  {&(_ZTV7S6364C9[9]),  9,10},
};
extern VTBL_ENTRY _ZTI7S6364C9[];
extern  VTBL_ENTRY _ZTV7S6364C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C9[];
Class_Descriptor cd_S6364C9 = {  "S6364C9", // class name
  bases_S6364C9, 3,
  &(vtc_S6364C9[0]), // expected_vtbl_contents
  &(vtt_S6364C9[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI7S6364C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6364C9),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6364C9),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  S6364C8  : virtual S6364C5 , virtual S281C37_nt , S6364C9 , S6364C2 {
  __tsi64 s6364c8f0:25;
  void *s6364c8f1;
  int s6364c8f2[3];
  ::S281C37_nt s6364c8f3;
  virtual  ~S6364C8(); // _ZN7S6364C8D2Ev
  virtual void  v4(); // _ZN7S6364C82v4Ev
  S6364C8(); // tgen
};
//SIG(-1 S6364C8) C1{ VBC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC3 BC4{ BC2 VBC5{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC3 FC3[9] Fp FC2 FC2} VBC3 v4 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} BC5 vd v1 FL:25 Fp Fi[3] FC3}


 S6364C8 ::~S6364C8(){ note_dtor("S6364C8", this);}
void  S6364C8 ::v4(){vfunc_called(this, "_ZN7S6364C82v4Ev");}
S6364C8 ::S6364C8(){ note_ctor("S6364C8", this);} // tgen

static void Test_S6364C8()
{
  extern Class_Descriptor cd_S6364C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(83,177)];
    init_test(&cd_S6364C8, buf);
    S6364C8 *dp, &lv = *(dp=new (buf) S6364C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1312,704), "sizeof(S6364C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6364C8)");
    /*is_ambiguous_... S6364C8::S6364C5 */ AMB_check_base_class_offset(lv, (S6364C5*), ABISELECT(880,480), "S6364C8");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(920,500), "S6364C8");
    check_base_class_offset(lv, (S281C37_nt*)(S6364C9*), ABISELECT(920,500), "S6364C8");
    check_base_class_offset(lv, (S6364C5*)(S6364C9*), 0, "S6364C8");
    check_base_class_offset(lv, (S6364C2*)(S6364C9*), ABISELECT(944,508), "S6364C8");
    check_base_class_offset(lv, (S6364C9*), 0, "S6364C8");
    /*is_ambiguous_... S6364C8::S6364C2 */ AMB_check_base_class_offset(lv, (S6364C2*), ABISELECT(464,256), "S6364C8");
    set_bf_and_test(lv, s6364c8f0, ABISELECT(832,452), 0, 25, 1, "S6364C8");
    set_bf_and_test(lv, s6364c8f0, ABISELECT(832,452), 0, 25, hide_sll(1LL<<24), "S6364C8");
    check_field_offset(lv, s6364c8f1, ABISELECT(840,456), "S6364C8.s6364c8f1");
    check_field_offset(lv, s6364c8f2, ABISELECT(848,460), "S6364C8.s6364c8f2");
    check_field_offset(lv, s6364c8f3, ABISELECT(864,472), "S6364C8.s6364c8f3");
    test_class_info(&lv, &cd_S6364C8);
    dp->~S6364C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6364C8(Test_S6364C8, "S6364C8", ABISELECT(1312,704));

#else // __cplusplus

extern void _ZN7S6364C8C1Ev();
extern void _ZN7S6364C8D2Ev();
Name_Map name_map_S6364C8[] = {
  NSPAIR(_ZN7S6364C8C1Ev),
  NSPAIR(_ZN7S6364C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S6364C9;
extern VTBL_ENTRY _ZTI7S6364C9[];
extern  VTBL_ENTRY _ZTV7S6364C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C9[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
static Base_Class bases_S6364C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6364C5,    ABISELECT(880,480), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S281C37_nt,    ABISELECT(920,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6364C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6364C2,    ABISELECT(944,508), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S6364C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6364C2,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6364C8[];
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C8D1Ev();
extern void _ZN7S6364C8D0Ev();
extern void _ZN7S6364C82v4Ev();
extern void _ZN7S6364C22v1Ev();
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY vtc_S6364C8[] = {
  ABISELECT(880,480),
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
  0,
  ABISELECT(-880,-480),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S6364C8[];
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C9__7S6364C8[] = {
  ABISELECT(920,500),
  ABISELECT(944,508),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C9__7S6364C8[] = {
  0,
  ABISELECT(-944,-508),
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
static  VTT_ENTRY vtt_S6364C8[] = {
  {&(_ZTV7S6364C8[5]),  5,21},
  {&(_tg__ZTV7S6364C9__7S6364C8[4]),  4,6},
  {&(_tg__ZTV7S6364C2__7S6364C9__7S6364C8[3]),  3,4},
  {&(_ZTV7S6364C8[16]),  16,21},
  {&(_ZTV7S6364C8[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S6364C8[];
extern  VTBL_ENTRY _ZTV7S6364C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C8[];
Class_Descriptor cd_S6364C8 = {  "S6364C8", // class name
  bases_S6364C8, 6,
  &(vtc_S6364C8[0]), // expected_vtbl_contents
  &(vtt_S6364C8[0]), // expected_vtt_contents
  ABISELECT(1312,704), // object size
  NSPAIRA(_ZTI7S6364C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6364C8),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6364C8),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6364C10  : virtual S6364C9 {
  int s6364c10f0;
  char s6364c10f1;
  void *s6364c10f2[6];
  int s6364c10f3[2];
  void *s6364c10f4;
  ::S281C37_nt s6364c10f5;
  ~S6364C10(); // tgen
  S6364C10(); // tgen
};
//SIG(-1 S6364C10) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S6364C10()
{
  extern Class_Descriptor cd_S6364C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S6364C10, buf);
    S6364C10 *dp, &lv = *(dp=new (buf) S6364C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S6364C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6364C10)");
    check_base_class_offset(lv, (S6364C5*)(S6364C9*), ABISELECT(96,56), "S6364C10");
    check_base_class_offset(lv, (S6364C2*)(S6364C9*), ABISELECT(560,312), "S6364C10");
    check_base_class_offset(lv, (S281C37_nt*)(S6364C9*), ABISELECT(928,508), "S6364C10");
    check_base_class_offset(lv, (S6364C9*), ABISELECT(96,56), "S6364C10");
    check_field_offset(lv, s6364c10f0, ABISELECT(8,4), "S6364C10.s6364c10f0");
    check_field_offset(lv, s6364c10f1, ABISELECT(12,8), "S6364C10.s6364c10f1");
    check_field_offset(lv, s6364c10f2, ABISELECT(16,12), "S6364C10.s6364c10f2");
    check_field_offset(lv, s6364c10f3, ABISELECT(64,36), "S6364C10.s6364c10f3");
    check_field_offset(lv, s6364c10f4, ABISELECT(72,44), "S6364C10.s6364c10f4");
    check_field_offset(lv, s6364c10f5, ABISELECT(80,48), "S6364C10.s6364c10f5");
    test_class_info(&lv, &cd_S6364C10);
    dp->~S6364C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6364C10(Test_S6364C10, "S6364C10", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN8S6364C10C1Ev();
extern void _ZN8S6364C10D1Ev();
Name_Map name_map_S6364C10[] = {
  NSPAIR(_ZN8S6364C10C1Ev),
  NSPAIR(_ZN8S6364C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6364C9;
extern VTBL_ENTRY _ZTI7S6364C9[];
extern  VTBL_ENTRY _ZTV7S6364C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C9[];
static Base_Class bases_S6364C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6364C5,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6364C2,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6364C9,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6364C10[];
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY vtc_S6364C10[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6364C10[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S6364C10[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S6364C10[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S6364C10[];
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C9__8S6364C10[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C9__8S6364C10[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
static  VTT_ENTRY vtt_S6364C10[] = {
  {&(_ZTV8S6364C10[5]),  5,17},
  {&(_ZTV8S6364C10[11]),  11,17},
  {&(_ZTV8S6364C10[16]),  16,17},
  {&(_tg__ZTV7S6364C9__8S6364C10[4]),  4,6},
  {&(_tg__ZTV7S6364C2__7S6364C9__8S6364C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6364C10[];
extern  VTBL_ENTRY _ZTV8S6364C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6364C10[];
Class_Descriptor cd_S6364C10 = {  "S6364C10", // class name
  bases_S6364C10, 4,
  &(vtc_S6364C10[0]), // expected_vtbl_contents
  &(vtt_S6364C10[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI8S6364C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6364C10),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6364C10),5, //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  S6364C7  : S6364C8 {
  void *s6364c7f0;
  int s6364c7f1;
  void *s6364c7f2;
  int s6364c7f3[7];
  ::S6364C10 s6364c7f4;
  virtual  ~S6364C7(); // _ZN7S6364C7D2Ev
  S6364C7(); // tgen
};
//SIG(-1 S6364C7) C1{ BC2{ VBC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC4 BC5{ BC3 VBC6{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} BC6 vd v4 FL:25 Fp Fi[3] FC4} vd Fp Fi Fp Fi[7] FC8{ VBC5 Fi Fc Fp[6] Fi[2] Fp FC4}}


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

static void Test_S6364C7()
{
  extern Class_Descriptor cd_S6364C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(146,316)];
    init_test(&cd_S6364C7, buf);
    S6364C7 *dp, &lv = *(dp=new (buf) S6364C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2320,1260), "sizeof(S6364C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6364C7)");
    /*is_ambiguous_... S6364C8::S6364C5 */ AMB_check_base_class_offset(lv, (S6364C5*)(S6364C8*), ABISELECT(1888,1036), "S6364C7");
    check_base_class_offset(lv, (S281C37_nt*)(S6364C8*), ABISELECT(1928,1056), "S6364C7");
    check_base_class_offset(lv, (S281C37_nt*)(S6364C9*)(S6364C8*), ABISELECT(1928,1056), "S6364C7");
    check_base_class_offset(lv, (S6364C5*)(S6364C9*)(S6364C8*), 0, "S6364C7");
    check_base_class_offset(lv, (S6364C2*)(S6364C9*)(S6364C8*), ABISELECT(1952,1064), "S6364C7");
    check_base_class_offset(lv, (S6364C9*)(S6364C8*), 0, "S6364C7");
    /*is_ambiguous_... S6364C8::S6364C2 */ AMB_check_base_class_offset(lv, (S6364C2*)(S6364C8*), ABISELECT(464,256), "S6364C7");
    check_base_class_offset(lv, (S6364C8*), 0, "S6364C7");
    check_field_offset(lv, s6364c7f0, ABISELECT(880,480), "S6364C7.s6364c7f0");
    check_field_offset(lv, s6364c7f1, ABISELECT(888,484), "S6364C7.s6364c7f1");
    check_field_offset(lv, s6364c7f2, ABISELECT(896,488), "S6364C7.s6364c7f2");
    check_field_offset(lv, s6364c7f3, ABISELECT(904,492), "S6364C7.s6364c7f3");
    check_field_offset(lv, s6364c7f4, ABISELECT(944,520), "S6364C7.s6364c7f4");
    test_class_info(&lv, &cd_S6364C7);
    dp->~S6364C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6364C7(Test_S6364C7, "S6364C7", ABISELECT(2320,1260));

#else // __cplusplus

extern void _ZN7S6364C7C1Ev();
extern void _ZN7S6364C7D2Ev();
Name_Map name_map_S6364C7[] = {
  NSPAIR(_ZN7S6364C7C1Ev),
  NSPAIR(_ZN7S6364C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S6364C9;
extern VTBL_ENTRY _ZTI7S6364C9[];
extern  VTBL_ENTRY _ZTV7S6364C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C9[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S6364C8;
extern VTBL_ENTRY _ZTI7S6364C8[];
extern  VTBL_ENTRY _ZTV7S6364C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C8[];
static Base_Class bases_S6364C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6364C5,    ABISELECT(1888,1036), //bcp->offset
    13, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(1928,1056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6364C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6364C2,    ABISELECT(1952,1064), //bcp->offset
    17, //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
    4, //immediately_derived
  0, 1},
  {&cd_S6364C9,    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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6364C2,    ABISELECT(464,256), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6364C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6364C7[];
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C7D1Ev();
extern void _ZN7S6364C7D0Ev();
extern void _ZN7S6364C82v4Ev();
extern void _ZN7S6364C22v1Ev();
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY vtc_S6364C7[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6364C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S6364C7[];
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C8D1Ev();
extern void _ZN7S6364C8D0Ev();
extern void _ZN7S6364C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C8__7S6364C7[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C97S6364C8__7S6364C7[] = {
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C97S6364C8__7S6364C7[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C5__7S6364C8__7S6364C7[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C8__7S6364C7[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
static  VTT_ENTRY vtt_S6364C7[] = {
  {&(_ZTV7S6364C7[5]),  5,21},
  {&(_tg__ZTV7S6364C8__7S6364C7[5]),  5,10},
  {&(_tg__ZTV7S6364C97S6364C8__7S6364C7[4]),  4,6},
  {&(_tg__ZTV7S6364C2__7S6364C97S6364C8__7S6364C7[3]),  3,4},
  {&(_tg__ZTV7S6364C5__7S6364C8__7S6364C7[3]),  3,4},
  {&(_tg__ZTV7S6364C2__7S6364C8__7S6364C7[3]),  3,4},
  {&(_ZTV7S6364C7[16]),  16,21},
  {&(_ZTV7S6364C7[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S6364C7[];
extern  VTBL_ENTRY _ZTV7S6364C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C7[];
Class_Descriptor cd_S6364C7 = {  "S6364C7", // class name
  bases_S6364C7, 7,
  &(vtc_S6364C7[0]), // expected_vtbl_contents
  &(vtt_S6364C7[0]), // expected_vtt_contents
  ABISELECT(2320,1260), // object size
  NSPAIRA(_ZTI7S6364C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6364C7),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6364C7),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6364C6  : virtual S6364C7 , virtual S6364C8 {
  int s6364c6f0[2];
  short s6364c6f1[10];
  int s6364c6f2;
  ::S20176C3_nt s6364c6f3;
  int s6364c6f4:32;
  int s6364c6f5;
  ::S20176C3_nt s6364c6f6;
  void *s6364c6f7;
  int s6364c6f8:2;
  int s6364c6f9;
  long double s6364c6f10;
  virtual  ~S6364C6(); // _ZN7S6364C6D2Ev
  virtual void  v5(); // _ZN7S6364C62v5Ev
  S6364C6(); // tgen
};
//SIG(-1 S6364C6) C1{ VBC2{ BC3{ VBC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC5 BC6{ BC4 VBC7{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC8{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC7 Fs[7] Fi Fc Fi:20} BC7 vd v5 FL:25 Fp Fi[3] FC5} vd Fp Fi Fp Fi[7] FC9{ VBC6 Fi Fc Fp[6] Fi[2] Fp FC5}} VBC3 vd v1 Fi[2] Fs[10] Fi FC8 Fi:32 Fi FC8 Fp Fi:2 Fi FD}


 S6364C6 ::~S6364C6(){ note_dtor("S6364C6", this);}
void  S6364C6 ::v5(){vfunc_called(this, "_ZN7S6364C62v5Ev");}
S6364C6 ::S6364C6(){ note_ctor("S6364C6", this);} // tgen

static void Test_S6364C6()
{
  extern Class_Descriptor cd_S6364C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(207,455)];
    init_test(&cd_S6364C6, buf);
    S6364C6 *dp, &lv = *(dp=new (buf) S6364C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3296,1816), "sizeof(S6364C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6364C6)");
    /*is_ambiguous_... S6364C8::S6364C5 */ AMB_check_base_class_offset(lv, (S6364C5*)(S6364C8*)(S6364C7*), ABISELECT(1984,1112), "S6364C6");
    /*is_ambiguous_... S6364C6::S6364C8 */ AMB_check_base_class_offset(lv, (S6364C5*)(S6364C8*), ABISELECT(1984,1112), "S6364C6");
    check_base_class_offset(lv, (S281C37_nt*)(S6364C8*)(S6364C7*), ABISELECT(2024,1132), "S6364C6");
    check_base_class_offset(lv, (S281C37_nt*)(S6364C9*)(S6364C8*)(S6364C7*), ABISELECT(2024,1132), "S6364C6");
    /*is_ambiguous_... S6364C6::S6364C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6364C8*), ABISELECT(2024,1132), "S6364C6");
    /*is_ambiguous_... S6364C6::S6364C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6364C9*)(S6364C8*), ABISELECT(2024,1132), "S6364C6");
    check_base_class_offset(lv, (S6364C5*)(S6364C9*)(S6364C8*)(S6364C7*), ABISELECT(96,76), "S6364C6");
    check_base_class_offset(lv, (S6364C2*)(S6364C9*)(S6364C8*)(S6364C7*), ABISELECT(2048,1140), "S6364C6");
    /*is_ambiguous_... S6364C6::S6364C8 */ AMB_check_base_class_offset(lv, (S6364C2*)(S6364C9*)(S6364C8*), ABISELECT(2048,1140), "S6364C6");
    check_base_class_offset(lv, (S6364C9*)(S6364C8*)(S6364C7*), ABISELECT(96,76), "S6364C6");
    /*is_ambiguous_... S6364C8::S6364C2 */ AMB_check_base_class_offset(lv, (S6364C2*)(S6364C8*)(S6364C7*), ABISELECT(560,332), "S6364C6");
    check_base_class_offset(lv, (S6364C8*)(S6364C7*), ABISELECT(96,76), "S6364C6");
    check_base_class_offset(lv, (S6364C7*), ABISELECT(96,76), "S6364C6");
    /*is_ambiguous_... S6364C6::S6364C8 */ AMB_check_base_class_offset(lv, (S6364C5*)(S6364C9*)(S6364C8*), ABISELECT(2416,1336), "S6364C6");
    /*is_ambiguous_... S6364C6::S6364C8 */ AMB_check_base_class_offset(lv, (S6364C9*)(S6364C8*), ABISELECT(2416,1336), "S6364C6");
    /*is_ambiguous_... S6364C6::S6364C8 */ AMB_check_base_class_offset(lv, (S6364C2*)(S6364C8*), ABISELECT(2880,1592), "S6364C6");
    /*is_ambiguous_... S6364C6::S6364C8 */ AMB_check_base_class_offset(lv, (S6364C8*), ABISELECT(2416,1336), "S6364C6");
    check_field_offset(lv, s6364c6f0, ABISELECT(8,4), "S6364C6.s6364c6f0");
    check_field_offset(lv, s6364c6f1, ABISELECT(16,12), "S6364C6.s6364c6f1");
    check_field_offset(lv, s6364c6f2, ABISELECT(36,32), "S6364C6.s6364c6f2");
    check_field_offset(lv, s6364c6f3, ABISELECT(40,36), "S6364C6.s6364c6f3");
    set_bf_and_test(lv, s6364c6f4, ABISELECT(44,40), 0, 32, 1, "S6364C6");
    set_bf_and_test(lv, s6364c6f4, ABISELECT(44,40), 0, 32, hide_sll(1LL<<31), "S6364C6");
    check_field_offset(lv, s6364c6f5, ABISELECT(48,44), "S6364C6.s6364c6f5");
    check_field_offset(lv, s6364c6f6, ABISELECT(52,48), "S6364C6.s6364c6f6");
    check_field_offset(lv, s6364c6f7, ABISELECT(56,52), "S6364C6.s6364c6f7");
    set_bf_and_test(lv, s6364c6f8, ABISELECT(64,56), 0, 2, 1, "S6364C6");
    set_bf_and_test(lv, s6364c6f8, ABISELECT(64,56), 0, 2, hide_sll(1LL<<1), "S6364C6");
    check_field_offset(lv, s6364c6f9, ABISELECT(68,60), "S6364C6.s6364c6f9");
    check_field_offset(lv, s6364c6f10, ABISELECT(80,64), "S6364C6.s6364c6f10");
    test_class_info(&lv, &cd_S6364C6);
    dp->~S6364C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6364C6(Test_S6364C6, "S6364C6", ABISELECT(3296,1816));

#else // __cplusplus

extern void _ZN7S6364C6C1Ev();
extern void _ZN7S6364C6D2Ev();
Name_Map name_map_S6364C6[] = {
  NSPAIR(_ZN7S6364C6C1Ev),
  NSPAIR(_ZN7S6364C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S6364C9;
extern VTBL_ENTRY _ZTI7S6364C9[];
extern  VTBL_ENTRY _ZTV7S6364C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C9[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S6364C8;
extern VTBL_ENTRY _ZTI7S6364C8[];
extern  VTBL_ENTRY _ZTV7S6364C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C8[];
extern Class_Descriptor cd_S6364C7;
extern VTBL_ENTRY _ZTI7S6364C7[];
extern  VTBL_ENTRY _ZTV7S6364C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C7[];
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S6364C9;
extern VTBL_ENTRY _ZTI7S6364C9[];
extern  VTBL_ENTRY _ZTV7S6364C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C9[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S6364C8;
extern VTBL_ENTRY _ZTI7S6364C8[];
extern  VTBL_ENTRY _ZTV7S6364C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C8[];
static Base_Class bases_S6364C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6364C5,    ABISELECT(1984,1112), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(2024,1132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6364C5,    ABISELECT(96,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6364C2,    ABISELECT(2048,1140), //bcp->offset
    32, //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
    4, //immediately_derived
  0, 1},
  {&cd_S6364C9,    ABISELECT(96,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6364C2,    ABISELECT(560,332), //bcp->offset
    25, //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6364C8,    ABISELECT(96,76), //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
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6364C7,    ABISELECT(96,76), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6364C5,    ABISELECT(2416,1336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6364C9,    ABISELECT(2416,1336), //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
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6364C2,    ABISELECT(2880,1592), //bcp->offset
    51, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6364C8,    ABISELECT(2416,1336), //bcp->offset
    36, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6364C6[];
extern void _ZN7S6364C6D1Ev();
extern void _ZN7S6364C6D0Ev();
extern void _ZN7S6364C62v5Ev();
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S6364C6D1Ev,_ZTv0_n32_N7S6364C6D1Ev)();
extern void ABISELECT(_ZThn96_N7S6364C6D1Ev,_ZThn76_N7S6364C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6364C6D0Ev,_ZTv0_n32_N7S6364C6D0Ev)();
extern void ABISELECT(_ZThn96_N7S6364C6D0Ev,_ZThn76_N7S6364C6D0Ev)() __attribute__((weak));
extern void _ZN7S6364C82v4Ev();
extern void _ZN7S6364C22v1Ev();
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C22v1Ev();
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S6364C6D1Ev,_ZTv0_n32_N7S6364C6D1Ev)();
extern void ABISELECT(_ZThn2416_N7S6364C6D1Ev,_ZThn1336_N7S6364C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6364C6D0Ev,_ZTv0_n32_N7S6364C6D0Ev)();
extern void ABISELECT(_ZThn2416_N7S6364C6D0Ev,_ZThn1336_N7S6364C6D0Ev)() __attribute__((weak));
extern void _ZN7S6364C82v4Ev();
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY vtc_S6364C6[] = {
  ABISELECT(2416,1336),
  ABISELECT(2048,1140),
  ABISELECT(2024,1132),
  ABISELECT(1984,1112),
  ABISELECT(96,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C62v5Ev,
  ABISELECT(464,256),
  0,
  ABISELECT(-96,-76),
  0,
  0,
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  ABISELECT(-96,-76),
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C6D1Ev,_ZTv0_n32_N7S6364C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C6D0Ev,_ZTv0_n32_N7S6364C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
  ABISELECT(-560,-332),
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
  0,
  ABISELECT(-1984,-1112),
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  0,
  ABISELECT(-2048,-1140),
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
  ABISELECT(464,256),
  0,
  ABISELECT(-2416,-1336),
  0,
  0,
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  ABISELECT(-2416,-1336),
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C6D1Ev,_ZTv0_n32_N7S6364C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C6D0Ev,_ZTv0_n32_N7S6364C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
  ABISELECT(-2880,-1592),
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S6364C6[];
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C7D1Ev();
extern void _ZN7S6364C7D0Ev();
extern void _ZN7S6364C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C7__7S6364C6[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6364C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C8D1Ev();
extern void _ZN7S6364C8D0Ev();
extern void _ZN7S6364C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C87S6364C7__7S6364C6[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C97S6364C87S6364C7__7S6364C6[] = {
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C97S6364C87S6364C7__7S6364C6[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C5__7S6364C87S6364C7__7S6364C6[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C87S6364C7__7S6364C6[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C5__7S6364C7__7S6364C6[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C7__7S6364C6[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C8D1Ev();
extern void _ZN7S6364C8D0Ev();
extern void _ZN7S6364C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C8__A1__7S6364C6[] = {
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C97S6364C8__A1__7S6364C6[] = {
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C97S6364C8__A1__7S6364C6[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C5__7S6364C8__A1__7S6364C6[] = {
  0,
  ABISELECT(432,224),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C8__A1__7S6364C6[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
static  VTT_ENTRY vtt_S6364C6[] = {
  {&(_ZTV7S6364C6[7]),  7,54},
  {&(_ZTV7S6364C6[20]),  20,54},
  {&(_ZTV7S6364C6[31]),  31,54},
  {&(_ZTV7S6364C6[35]),  35,54},
  {&(_ZTV7S6364C6[27]),  27,54},
  {&(_ZTV7S6364C6[46]),  46,54},
  {&(_ZTV7S6364C6[53]),  53,54},
  {&(_tg__ZTV7S6364C7__7S6364C6[5]),  5,10},
  {&(_tg__ZTV7S6364C87S6364C7__7S6364C6[5]),  5,10},
  {&(_tg__ZTV7S6364C97S6364C87S6364C7__7S6364C6[4]),  4,6},
  {&(_tg__ZTV7S6364C2__7S6364C97S6364C87S6364C7__7S6364C6[3]),  3,4},
  {&(_tg__ZTV7S6364C5__7S6364C87S6364C7__7S6364C6[3]),  3,4},
  {&(_tg__ZTV7S6364C2__7S6364C87S6364C7__7S6364C6[3]),  3,4},
  {&(_tg__ZTV7S6364C5__7S6364C7__7S6364C6[3]),  3,4},
  {&(_tg__ZTV7S6364C2__7S6364C7__7S6364C6[3]),  3,4},
  {&(_tg__ZTV7S6364C8__A1__7S6364C6[5]),  5,10},
  {&(_tg__ZTV7S6364C97S6364C8__A1__7S6364C6[4]),  4,6},
  {&(_tg__ZTV7S6364C2__7S6364C97S6364C8__A1__7S6364C6[3]),  3,4},
  {&(_tg__ZTV7S6364C5__7S6364C8__A1__7S6364C6[3]),  3,4},
  {&(_tg__ZTV7S6364C2__7S6364C8__A1__7S6364C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6364C6[];
extern  VTBL_ENTRY _ZTV7S6364C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C6[];
static VTBL_ENTRY alt_thunk_names85[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6364C6D0Ev,_ZTv0_n32_N7S6364C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N7S6364C6D0Ev,_ZThn1336_N7S6364C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6364C6D0Ev,_ZThn76_N7S6364C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6364C6D1Ev,_ZTv0_n32_N7S6364C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N7S6364C6D1Ev,_ZThn1336_N7S6364C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6364C6D1Ev,_ZThn76_N7S6364C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6364C6 = {  "S6364C6", // class name
  bases_S6364C6, 12,
  &(vtc_S6364C6[0]), // expected_vtbl_contents
  &(vtt_S6364C6[0]), // expected_vtt_contents
  ABISELECT(3296,1816), // object size
  NSPAIRA(_ZTI7S6364C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6364C6),54, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6364C6),20, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names85,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6364C11  : virtual S6364C10 , S6364C2 , S281C37_nt {
  char s6364c11f0;
  int s6364c11f1[2];
  long double s6364c11f2[2];
  short s6364c11f3;
  void *s6364c11f4;
  int s6364c11f5;
  __tsi64 s6364c11f6;
  int s6364c11f7;
  void *s6364c11f8;
  virtual  ~S6364C11(); // _ZN8S6364C11D2Ev
  virtual void  v6(); // _ZN8S6364C112v6Ev
  S6364C11(); // tgen
};
//SIG(-1 S6364C11) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S6364C11 ::~S6364C11(){ note_dtor("S6364C11", this);}
void  S6364C11 ::v6(){vfunc_called(this, "_ZN8S6364C112v6Ev");}
S6364C11 ::S6364C11(){ note_ctor("S6364C11", this);} // tgen

static void Test_S6364C11()
{
  extern Class_Descriptor cd_S6364C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S6364C11, buf);
    S6364C11 *dp, &lv = *(dp=new (buf) S6364C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S6364C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6364C11)");
    check_base_class_offset(lv, (S6364C5*)(S6364C9*), ABISELECT(576,324), "S6364C11");
    check_base_class_offset(lv, (S6364C2*)(S6364C9*), ABISELECT(1040,580), "S6364C11");
    check_base_class_offset(lv, (S281C37_nt*)(S6364C9*), ABISELECT(1408,776), "S6364C11");
    check_base_class_offset(lv, (S6364C9*)(S6364C10*), ABISELECT(576,324), "S6364C11");
    check_base_class_offset(lv, (S6364C10*), ABISELECT(480,268), "S6364C11");
    /*is_ambiguous_... S6364C11::S6364C2 */ AMB_check_base_class_offset(lv, (S6364C2*), 0, "S6364C11");
    /*is_ambiguous_... S6364C11::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S6364C11");
    check_field_offset(lv, s6364c11f0, ABISELECT(384,204), "S6364C11.s6364c11f0");
    check_field_offset(lv, s6364c11f1, ABISELECT(388,208), "S6364C11.s6364c11f1");
    check_field_offset(lv, s6364c11f2, ABISELECT(400,216), "S6364C11.s6364c11f2");
    check_field_offset(lv, s6364c11f3, ABISELECT(432,240), "S6364C11.s6364c11f3");
    check_field_offset(lv, s6364c11f4, ABISELECT(440,244), "S6364C11.s6364c11f4");
    check_field_offset(lv, s6364c11f5, ABISELECT(448,248), "S6364C11.s6364c11f5");
    check_field_offset(lv, s6364c11f6, ABISELECT(456,252), "S6364C11.s6364c11f6");
    check_field_offset(lv, s6364c11f7, ABISELECT(464,260), "S6364C11.s6364c11f7");
    check_field_offset(lv, s6364c11f8, ABISELECT(472,264), "S6364C11.s6364c11f8");
    test_class_info(&lv, &cd_S6364C11);
    dp->~S6364C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6364C11(Test_S6364C11, "S6364C11", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN8S6364C11C1Ev();
extern void _ZN8S6364C11D2Ev();
Name_Map name_map_S6364C11[] = {
  NSPAIR(_ZN8S6364C11C1Ev),
  NSPAIR(_ZN8S6364C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6364C9;
extern VTBL_ENTRY _ZTI7S6364C9[];
extern  VTBL_ENTRY _ZTV7S6364C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C9[];
extern Class_Descriptor cd_S6364C10;
extern VTBL_ENTRY _ZTI8S6364C10[];
extern  VTBL_ENTRY _ZTV8S6364C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6364C10[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S6364C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6364C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6364C2,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6364C9,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6364C10,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6364C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6364C11[];
extern void _ZN7S6364C22v1Ev();
extern void _ZN8S6364C11D1Ev();
extern void _ZN8S6364C11D0Ev();
extern void _ZN8S6364C112v6Ev();
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY vtc_S6364C11[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S6364C11[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
  (VTBL_ENTRY)&_ZN8S6364C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6364C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6364C112v6Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S6364C11[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S6364C11[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI8S6364C11[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S6364C11[];
static  VTBL_ENTRY _tg__ZTV8S6364C10__8S6364C11[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6364C10[0]),
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C9__8S6364C10__8S6364C11[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S6364C10[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__8S6364C10__8S6364C11[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI8S6364C10[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C9__8S6364C11[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C9__8S6364C11[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
static  VTT_ENTRY vtt_S6364C11[] = {
  {&(_ZTV8S6364C11[6]),  6,27},
  {&(_ZTV8S6364C11[15]),  15,27},
  {&(_ZTV8S6364C11[21]),  21,27},
  {&(_ZTV8S6364C11[26]),  26,27},
  {&(_tg__ZTV8S6364C10__8S6364C11[5]),  5,5},
  {&(_tg__ZTV7S6364C9__8S6364C10__8S6364C11[6]),  6,8},
  {&(_tg__ZTV7S6364C2__8S6364C10__8S6364C11[3]),  3,4},
  {&(_tg__ZTV7S6364C9__8S6364C11[4]),  4,6},
  {&(_tg__ZTV7S6364C2__7S6364C9__8S6364C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6364C11[];
extern  VTBL_ENTRY _ZTV8S6364C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6364C11[];
Class_Descriptor cd_S6364C11 = {  "S6364C11", // class name
  bases_S6364C11, 7,
  &(vtc_S6364C11[0]), // expected_vtbl_contents
  &(vtt_S6364C11[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI8S6364C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6364C11),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6364C11),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6364C1  : S6364C2 , S6364C6 , S6364C7 , virtual S6364C11 {
  long s6364c1f0;
  int s6364c1f1;
  ~S6364C1(); // tgen
  S6364C1(); // tgen
};
//SIG(1 S6364C1) C1{ BC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} BC6{ VBC7{ BC8{ VBC5 VBC4 BC9{ BC5 VBC2 VBC4 v3 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} BC2 vd v4 FL:25 Fp Fi[3] FC4} vd Fp Fi Fp Fi[7] FC10{ VBC9 Fi Fc Fp[6] Fi[2] Fp FC4}} VBC8 vd v5 Fi[2] Fs[10] Fi FC3 Fi:32 Fi FC3 Fp Fi:2 Fi FD} BC7 VBC11{ VBC10 BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} Fl Fi}


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

static void Test_S6364C1()
{
  extern Class_Descriptor cd_S6364C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(414,910)];
    init_test(&cd_S6364C1, buf);
    S6364C1 *dp, &lv = *(dp=new (buf) S6364C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6608,3636), "sizeof(S6364C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6364C1)");
    /*is_ambiguous_... S6364C1::S6364C2 */ AMB_check_base_class_offset(lv, (S6364C2*), 0, "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C5*)(S6364C8*)(S6364C7*), ABISELECT(4256,2352), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C8 */ AMB_check_base_class_offset(lv, (S6364C5*)(S6364C8*), ABISELECT(4256,2352), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C5*)(S6364C8*)(S6364C7*), ABISELECT(4256,2352), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6364C8*)(S6364C7*), ABISELECT(4296,2372), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6364C9*)(S6364C8*)(S6364C7*), ABISELECT(4296,2372), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6364C8*), ABISELECT(4296,2372), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C8 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6364C9*)(S6364C8*), ABISELECT(4296,2372), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6364C8*)(S6364C7*), ABISELECT(4296,2372), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6364C9*)(S6364C8*)(S6364C7*), ABISELECT(4296,2372), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C9 */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6364C9*), ABISELECT(4296,2372), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C5*)(S6364C9*)(S6364C8*)(S6364C7*), ABISELECT(2368,1316), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C2*)(S6364C9*)(S6364C8*)(S6364C7*), ABISELECT(4320,2380), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C8 */ AMB_check_base_class_offset(lv, (S6364C2*)(S6364C9*)(S6364C8*), ABISELECT(4320,2380), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C2*)(S6364C9*)(S6364C8*)(S6364C7*), ABISELECT(4320,2380), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C9 */ AMB_check_base_class_offset(lv, (S6364C2*)(S6364C9*), ABISELECT(4320,2380), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C9*)(S6364C8*)(S6364C7*), ABISELECT(2368,1316), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C2*)(S6364C8*)(S6364C7*), ABISELECT(2832,1572), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C8*)(S6364C7*), ABISELECT(2368,1316), "S6364C1");
    check_base_class_offset(lv, (S6364C7*)(S6364C6*), ABISELECT(2368,1316), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C8 */ AMB_check_base_class_offset(lv, (S6364C5*)(S6364C9*)(S6364C8*), ABISELECT(4688,2576), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C8 */ AMB_check_base_class_offset(lv, (S6364C9*)(S6364C8*), ABISELECT(4688,2576), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C8 */ AMB_check_base_class_offset(lv, (S6364C2*)(S6364C8*), ABISELECT(5152,2832), "S6364C1");
    /*is_ambiguous_... S6364C6::S6364C8 */ AMB_check_base_class_offset(lv, (S6364C8*)(S6364C6*), ABISELECT(4688,2576), "S6364C1");
    check_base_class_offset(lv, (S6364C6*), ABISELECT(368,196), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C5*)(S6364C9*)(S6364C8*)(S6364C7*), ABISELECT(464,272), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C9*)(S6364C8*)(S6364C7*), ABISELECT(464,272), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C2*)(S6364C8*)(S6364C7*), ABISELECT(928,528), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C8*)(S6364C7*), ABISELECT(464,272), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C7 */ AMB_check_base_class_offset(lv, (S6364C7*), ABISELECT(464,272), "S6364C1");
    /*is_ambiguous_... S6364C1::S6364C9 */ AMB_check_base_class_offset(lv, (S6364C5*)(S6364C9*), ABISELECT(6144,3380), "S6364C1");
    check_base_class_offset(lv, (S6364C9*)(S6364C10*), ABISELECT(6144,3380), "S6364C1");
    check_base_class_offset(lv, (S6364C10*)(S6364C11*), ABISELECT(6048,3324), "S6364C1");
    /*is_ambiguous_... S6364C11::S6364C2 */ AMB_check_base_class_offset(lv, (S6364C2*)(S6364C11*), ABISELECT(5568,3056), "S6364C1");
    /*is_ambiguous_... S6364C11::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S6364C11*), ABISELECT(5936,3252), "S6364C1");
    check_base_class_offset(lv, (S6364C11*), ABISELECT(5568,3056), "S6364C1");
    check_field_offset(lv, s6364c1f0, ABISELECT(2352,1308), "S6364C1.s6364c1f0");
    check_field_offset(lv, s6364c1f1, ABISELECT(2360,1312), "S6364C1.s6364c1f1");
    test_class_info(&lv, &cd_S6364C1);
    dp->~S6364C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6364C1(Test_S6364C1, "S6364C1", ABISELECT(6608,3636));

#else // __cplusplus

extern void _ZN7S6364C1C1Ev();
extern void _ZN7S6364C1D1Ev();
Name_Map name_map_S6364C1[] = {
  NSPAIR(_ZN7S6364C1C1Ev),
  NSPAIR(_ZN7S6364C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S6364C9;
extern VTBL_ENTRY _ZTI7S6364C9[];
extern  VTBL_ENTRY _ZTV7S6364C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C9[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S6364C8;
extern VTBL_ENTRY _ZTI7S6364C8[];
extern  VTBL_ENTRY _ZTV7S6364C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C8[];
extern Class_Descriptor cd_S6364C7;
extern VTBL_ENTRY _ZTI7S6364C7[];
extern  VTBL_ENTRY _ZTV7S6364C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C7[];
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S6364C9;
extern VTBL_ENTRY _ZTI7S6364C9[];
extern  VTBL_ENTRY _ZTV7S6364C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C9[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S6364C8;
extern VTBL_ENTRY _ZTI7S6364C8[];
extern  VTBL_ENTRY _ZTV7S6364C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C8[];
extern Class_Descriptor cd_S6364C6;
extern VTBL_ENTRY _ZTI7S6364C6[];
extern  VTBL_ENTRY _ZTV7S6364C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C6[];
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S6364C9;
extern VTBL_ENTRY _ZTI7S6364C9[];
extern  VTBL_ENTRY _ZTV7S6364C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C9[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S6364C8;
extern VTBL_ENTRY _ZTI7S6364C8[];
extern  VTBL_ENTRY _ZTV7S6364C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C8[];
extern Class_Descriptor cd_S6364C7;
extern VTBL_ENTRY _ZTI7S6364C7[];
extern  VTBL_ENTRY _ZTV7S6364C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C7[];
extern Class_Descriptor cd_S6364C5;
extern VTBL_ENTRY _ZTI7S6364C5[];
extern  VTBL_ENTRY _ZTV7S6364C5[];
extern Class_Descriptor cd_S6364C9;
extern VTBL_ENTRY _ZTI7S6364C9[];
extern  VTBL_ENTRY _ZTV7S6364C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C9[];
extern Class_Descriptor cd_S6364C10;
extern VTBL_ENTRY _ZTI8S6364C10[];
extern  VTBL_ENTRY _ZTV8S6364C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6364C10[];
extern Class_Descriptor cd_S6364C2;
extern VTBL_ENTRY _ZTI7S6364C2[];
extern  VTBL_ENTRY _ZTV7S6364C2[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S6364C11;
extern VTBL_ENTRY _ZTI8S6364C11[];
extern  VTBL_ENTRY _ZTV8S6364C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6364C11[];
static Base_Class bases_S6364C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6364C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6364C5,    ABISELECT(4256,2352), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(4296,2372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6364C5,    ABISELECT(2368,1316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6364C2,    ABISELECT(4320,2380), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6364C9,    ABISELECT(2368,1316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6364C2,    ABISELECT(2832,1572), //bcp->offset
    51, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6364C8,    ABISELECT(2368,1316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6364C7,    ABISELECT(2368,1316), //bcp->offset
    36, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6364C5,    ABISELECT(4688,2576), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S6364C9,    ABISELECT(4688,2576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6364C2,    ABISELECT(5152,2832), //bcp->offset
    77, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6364C8,    ABISELECT(4688,2576), //bcp->offset
    62, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6364C6,    ABISELECT(368,196), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6364C5,    ABISELECT(464,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
    19, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6364C9,    ABISELECT(464,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6364C2,    ABISELECT(928,528), //bcp->offset
    33, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6364C8,    ABISELECT(464,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6364C7,    ABISELECT(464,272), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6364C5,    ABISELECT(6144,3380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6364C9,    ABISELECT(6144,3380), //bcp->offset
    98, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S6364C10,    ABISELECT(6048,3324), //bcp->offset
    93, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S6364C2,    ABISELECT(5568,3056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(5936,3252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6364C11,    ABISELECT(5568,3056), //bcp->offset
    80, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6364C1[];
extern void _ZN7S6364C22v1Ev();
extern void _ZN7S6364C1D1Ev();
extern void _ZN7S6364C1D0Ev();
extern void ABISELECT(_ZThn368_N7S6364C1D1Ev,_ZThn196_N7S6364C1D1Ev)();
extern void ABISELECT(_ZThn368_N7S6364C1D0Ev,_ZThn196_N7S6364C1D0Ev)();
extern void _ZN7S6364C62v5Ev();
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void ABISELECT(_ZThn464_N7S6364C1D1Ev,_ZThn272_N7S6364C1D1Ev)();
extern void ABISELECT(_ZThn464_N7S6364C1D0Ev,_ZThn272_N7S6364C1D0Ev)();
extern void _ZN7S6364C82v4Ev();
extern void _ZN7S6364C22v1Ev();
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S6364C1D1Ev,_ZTv0_n32_N7S6364C1D1Ev)();
extern void ABISELECT(_ZThn2368_N7S6364C1D1Ev,_ZThn1316_N7S6364C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6364C1D0Ev,_ZTv0_n32_N7S6364C1D0Ev)();
extern void ABISELECT(_ZThn2368_N7S6364C1D0Ev,_ZThn1316_N7S6364C1D0Ev)() __attribute__((weak));
extern void _ZN7S6364C82v4Ev();
extern void _ZN7S6364C22v1Ev();
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C22v1Ev();
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S6364C1D1Ev,_ZTv0_n32_N7S6364C1D1Ev)();
extern void ABISELECT(_ZThn4688_N7S6364C1D1Ev,_ZThn2576_N7S6364C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6364C1D0Ev,_ZTv0_n32_N7S6364C1D0Ev)();
extern void ABISELECT(_ZThn4688_N7S6364C1D0Ev,_ZThn2576_N7S6364C1D0Ev)() __attribute__((weak));
extern void _ZN7S6364C82v4Ev();
extern void _ZN7S6364C22v1Ev();
extern void _ZN7S6364C22v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S6364C1D1Ev,_ZTv0_n32_N7S6364C1D1Ev)();
extern void ABISELECT(_ZThn5568_N7S6364C1D1Ev,_ZThn3056_N7S6364C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6364C1D0Ev,_ZTv0_n32_N7S6364C1D0Ev)();
extern void ABISELECT(_ZThn5568_N7S6364C1D0Ev,_ZThn3056_N7S6364C1D0Ev)() __attribute__((weak));
extern void _ZN8S6364C112v6Ev();
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY vtc_S6364C1[] = {
  ABISELECT(6144,3380),
  ABISELECT(6048,3324),
  ABISELECT(5568,3056),
  ABISELECT(4688,2576),
  ABISELECT(4320,2380),
  ABISELECT(4296,2372),
  ABISELECT(4256,2352),
  ABISELECT(2368,1316),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6364C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C1D0Ev,
  ABISELECT(4320,2380),
  ABISELECT(3952,2184),
  ABISELECT(3928,2176),
  ABISELECT(3888,2156),
  ABISELECT(2000,1120),
  ABISELECT(-368,-196),
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn368_N7S6364C1D1Ev,_ZThn196_N7S6364C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn368_N7S6364C1D0Ev,_ZThn196_N7S6364C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6364C62v5Ev,
  ABISELECT(3792,2080),
  ABISELECT(3832,2100),
  ABISELECT(3856,2108),
  ABISELECT(-464,-272),
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N7S6364C1D1Ev,_ZThn272_N7S6364C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N7S6364C1D0Ev,_ZThn272_N7S6364C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
  ABISELECT(-928,-528),
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
  ABISELECT(464,256),
  0,
  ABISELECT(-2368,-1316),
  0,
  0,
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  ABISELECT(-2368,-1316),
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C1D1Ev,_ZTv0_n32_N7S6364C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C1D0Ev,_ZTv0_n32_N7S6364C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
  ABISELECT(-2832,-1572),
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
  0,
  ABISELECT(-4256,-2352),
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  0,
  ABISELECT(-4320,-2380),
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
  ABISELECT(464,256),
  0,
  ABISELECT(-4688,-2576),
  0,
  0,
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  ABISELECT(-4688,-2576),
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C1D1Ev,_ZTv0_n32_N7S6364C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C1D0Ev,_ZTv0_n32_N7S6364C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
  ABISELECT(-5152,-2832),
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
  0,
  ABISELECT(-5568,-3056),
  0,
  ABISELECT(-1272,-684),
  ABISELECT(-1248,-676),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-5568,-3056),
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C1D1Ev,_ZTv0_n32_N7S6364C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C1D0Ev,_ZTv0_n32_N7S6364C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6364C112v6Ev,
  ABISELECT(-1752,-952),
  ABISELECT(-1728,-944),
  ABISELECT(96,56),
  ABISELECT(-6048,-3324),
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  0,
  0,
  ABISELECT(-1848,-1008),
  ABISELECT(-1824,-1000),
  ABISELECT(-6144,-3380),
  (VTBL_ENTRY)&(_ZTI7S6364C1[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern VTBL_ENTRY _ZTV7S6364C1[];
extern void _ZN7S6364C6D1Ev();
extern void _ZN7S6364C6D0Ev();
extern void _ZN7S6364C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C6__7S6364C1[] = {
  ABISELECT(4320,2380),
  ABISELECT(3952,2184),
  ABISELECT(3928,2176),
  ABISELECT(3888,2156),
  ABISELECT(2000,1120),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C62v5Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S6364C6D1Ev,_ZTv0_n32_N7S6364C6D1Ev)();
extern void ABISELECT(_ZThn2000_N7S6364C6D1Ev,_ZThn1120_N7S6364C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6364C6D0Ev,_ZTv0_n32_N7S6364C6D0Ev)();
extern void ABISELECT(_ZThn2000_N7S6364C6D0Ev,_ZThn1120_N7S6364C6D0Ev)() __attribute__((weak));
extern void _ZN7S6364C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C7__7S6364C6__7S6364C1[] = {
  ABISELECT(464,256),
  0,
  ABISELECT(-2000,-1120),
  0,
  0,
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  ABISELECT(-2000,-1120),
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C6D1Ev,_ZTv0_n32_N7S6364C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C6D0Ev,_ZTv0_n32_N7S6364C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
};
extern void _ZN7S6364C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C5__7S6364C6__7S6364C1[] = {
  0,
  ABISELECT(-3888,-2156),
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C6__7S6364C1[] = {
  0,
  ABISELECT(-3952,-2184),
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C27S6364C87S6364C7__A1__7S6364C6__7S6364C1[] = {
  ABISELECT(-2464,-1376),
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S6364C6D1Ev,_ZTv0_n32_N7S6364C6D1Ev)();
extern void ABISELECT(_ZThn4320_N7S6364C6D1Ev,_ZThn2380_N7S6364C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6364C6D0Ev,_ZTv0_n32_N7S6364C6D0Ev)();
extern void ABISELECT(_ZThn4320_N7S6364C6D0Ev,_ZThn2380_N7S6364C6D0Ev)() __attribute__((weak));
extern void _ZN7S6364C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C8__A1__7S6364C6__7S6364C1[] = {
  ABISELECT(464,256),
  0,
  ABISELECT(-4320,-2380),
  0,
  0,
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  ABISELECT(-4320,-2380),
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C6D1Ev,_ZTv0_n32_N7S6364C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6364C6D0Ev,_ZTv0_n32_N7S6364C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C27S6364C8__A2__7S6364C6__7S6364C1[] = {
  ABISELECT(-4784,-2636),
  (VTBL_ENTRY)&(_ZTI7S6364C6[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C7D1Ev();
extern void _ZN7S6364C7D0Ev();
extern void _ZN7S6364C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C7__A__7S6364C1[] = {
  ABISELECT(3792,2080),
  ABISELECT(3832,2100),
  ABISELECT(3856,2108),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6364C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C8D1Ev();
extern void _ZN7S6364C8D0Ev();
extern void _ZN7S6364C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C87S6364C7__A2__7S6364C1[] = {
  ABISELECT(3792,2080),
  ABISELECT(3832,2100),
  ABISELECT(3856,2108),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C97S6364C87S6364C7__A2__7S6364C1[] = {
  ABISELECT(3832,2100),
  ABISELECT(3856,2108),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C97S6364C87S6364C7__A2__7S6364C1[] = {
  0,
  ABISELECT(-3856,-2108),
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C5__7S6364C87S6364C7__A2__7S6364C1[] = {
  0,
  ABISELECT(-3792,-2080),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C87S6364C7__A2__7S6364C1[] = {
  0,
  ABISELECT(-3856,-2108),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C5__7S6364C7__A__7S6364C1[] = {
  0,
  ABISELECT(-3792,-2080),
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C7__A__7S6364C1[] = {
  0,
  ABISELECT(-3856,-2108),
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C7D1Ev();
extern void _ZN7S6364C7D0Ev();
extern void _ZN7S6364C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C7__7S6364C1[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6364C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C8D1Ev();
extern void _ZN7S6364C8D0Ev();
extern void _ZN7S6364C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C87S6364C7__7S6364C1[] = {
  ABISELECT(1888,1036),
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C97S6364C87S6364C7__7S6364C1[] = {
  ABISELECT(1928,1056),
  ABISELECT(1952,1064),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C97S6364C87S6364C7__7S6364C1[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C5__7S6364C87S6364C7__7S6364C1[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C87S6364C7__7S6364C1[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C5__7S6364C7__7S6364C1[] = {
  0,
  ABISELECT(-1888,-1036),
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C7__7S6364C1[] = {
  0,
  ABISELECT(-1952,-1064),
  (VTBL_ENTRY)&(_ZTI7S6364C7[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
extern void _ZN7S6364C8D1Ev();
extern void _ZN7S6364C8D0Ev();
extern void _ZN7S6364C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C8__A1__7S6364C1[] = {
  ABISELECT(-432,-224),
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6364C8D0Ev,
  (VTBL_ENTRY)&_ZN7S6364C82v4Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C97S6364C8__A1__7S6364C1[] = {
  ABISELECT(-392,-204),
  ABISELECT(-368,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C97S6364C8__A1__7S6364C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C5__7S6364C8__A1__7S6364C1[] = {
  0,
  ABISELECT(432,224),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C8__A1__7S6364C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S6364C8[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C22v1Ev();
extern void _ZN8S6364C11D1Ev();
extern void _ZN8S6364C11D0Ev();
extern void _ZN8S6364C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6364C11__7S6364C1[] = {
  ABISELECT(-1272,-684),
  ABISELECT(-1248,-676),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI8S6364C11[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
  (VTBL_ENTRY)&_ZN8S6364C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6364C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6364C112v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6364C10__8S6364C11__7S6364C1[] = {
  ABISELECT(-1752,-952),
  ABISELECT(-1728,-944),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI8S6364C11[0]),
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C9__8S6364C11__7S6364C1[] = {
  0,
  0,
  ABISELECT(-1848,-1008),
  ABISELECT(-1824,-1000),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S6364C11[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__8S6364C11__7S6364C1[] = {
  0,
  ABISELECT(1248,676),
  (VTBL_ENTRY)&(_ZTI8S6364C11[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6364C10__7S6364C1[] = {
  ABISELECT(-1752,-952),
  ABISELECT(-1728,-944),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6364C10[0]),
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C9__8S6364C10__7S6364C1[] = {
  0,
  0,
  ABISELECT(-1848,-1008),
  ABISELECT(-1824,-1000),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S6364C10[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__8S6364C10__7S6364C1[] = {
  0,
  ABISELECT(1728,944),
  (VTBL_ENTRY)&(_ZTI8S6364C10[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
extern void _ZN7S6364C52v2Ev();
extern void _ZN7S6364C92v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C9__A3__7S6364C1[] = {
  ABISELECT(-1848,-1008),
  ABISELECT(-1824,-1000),
  0,
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6364C92v3Ev,
};
extern void _ZN7S6364C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6364C2__7S6364C9__A3__7S6364C1[] = {
  0,
  ABISELECT(1824,1000),
  (VTBL_ENTRY)&(_ZTI7S6364C9[0]),
  (VTBL_ENTRY)&_ZN7S6364C22v1Ev,
};
static  VTT_ENTRY vtt_S6364C1[] = {
  {&(_ZTV7S6364C1[10]),  10,106},
  {&(_tg__ZTV7S6364C6__7S6364C1[7]),  7,10},
  {&(_tg__ZTV7S6364C7__7S6364C6__7S6364C1[10]),  10,15},
  {&(_tg__ZTV7S6364C5__7S6364C6__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C2__7S6364C6__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C27S6364C87S6364C7__A1__7S6364C6__7S6364C1[2]),  2,3},
  {&(_tg__ZTV7S6364C8__A1__7S6364C6__7S6364C1[10]),  10,15},
  {&(_tg__ZTV7S6364C27S6364C8__A2__7S6364C6__7S6364C1[2]),  2,3},
  {&(_tg__ZTV7S6364C7__A__7S6364C1[5]),  5,10},
  {&(_tg__ZTV7S6364C87S6364C7__A2__7S6364C1[5]),  5,10},
  {&(_tg__ZTV7S6364C97S6364C87S6364C7__A2__7S6364C1[4]),  4,6},
  {&(_tg__ZTV7S6364C2__7S6364C97S6364C87S6364C7__A2__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C5__7S6364C87S6364C7__A2__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C2__7S6364C87S6364C7__A2__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C5__7S6364C7__A__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C2__7S6364C7__A__7S6364C1[3]),  3,4},
  {&(_ZTV7S6364C1[20]),  20,106},
  {&(_ZTV7S6364C1[46]),  46,106},
  {&(_ZTV7S6364C1[57]),  57,106},
  {&(_ZTV7S6364C1[61]),  61,106},
  {&(_ZTV7S6364C1[53]),  53,106},
  {&(_ZTV7S6364C1[72]),  72,106},
  {&(_ZTV7S6364C1[79]),  79,106},
  {&(_ZTV7S6364C1[28]),  28,106},
  {&(_ZTV7S6364C1[89]),  89,106},
  {&(_ZTV7S6364C1[98]),  98,106},
  {&(_ZTV7S6364C1[104]),  104,106},
  {&(_tg__ZTV7S6364C7__7S6364C1[5]),  5,10},
  {&(_tg__ZTV7S6364C87S6364C7__7S6364C1[5]),  5,10},
  {&(_tg__ZTV7S6364C97S6364C87S6364C7__7S6364C1[4]),  4,6},
  {&(_tg__ZTV7S6364C2__7S6364C97S6364C87S6364C7__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C5__7S6364C87S6364C7__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C2__7S6364C87S6364C7__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C5__7S6364C7__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C2__7S6364C7__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C8__A1__7S6364C1[5]),  5,10},
  {&(_tg__ZTV7S6364C97S6364C8__A1__7S6364C1[4]),  4,6},
  {&(_tg__ZTV7S6364C2__7S6364C97S6364C8__A1__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C5__7S6364C8__A1__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C2__7S6364C8__A1__7S6364C1[3]),  3,4},
  {&(_tg__ZTV8S6364C11__7S6364C1[6]),  6,10},
  {&(_tg__ZTV8S6364C10__8S6364C11__7S6364C1[5]),  5,5},
  {&(_tg__ZTV7S6364C9__8S6364C11__7S6364C1[6]),  6,8},
  {&(_tg__ZTV7S6364C2__8S6364C11__7S6364C1[3]),  3,4},
  {&(_tg__ZTV8S6364C10__7S6364C1[5]),  5,5},
  {&(_tg__ZTV7S6364C9__8S6364C10__7S6364C1[6]),  6,8},
  {&(_tg__ZTV7S6364C2__8S6364C10__7S6364C1[3]),  3,4},
  {&(_tg__ZTV7S6364C9__A3__7S6364C1[4]),  4,6},
  {&(_tg__ZTV7S6364C2__7S6364C9__A3__7S6364C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6364C1[];
extern  VTBL_ENTRY _ZTV7S6364C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6364C1[];
static VTBL_ENTRY alt_thunk_names86[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6364C6D0Ev,_ZTv0_n32_N7S6364C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4320_N7S6364C6D0Ev,_ZThn2380_N7S6364C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2000_N7S6364C6D0Ev,_ZThn1120_N7S6364C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6364C6D1Ev,_ZTv0_n32_N7S6364C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4320_N7S6364C6D1Ev,_ZThn2380_N7S6364C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2000_N7S6364C6D1Ev,_ZThn1120_N7S6364C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6364C1D0Ev,_ZTv0_n32_N7S6364C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5568_N7S6364C1D0Ev,_ZThn3056_N7S6364C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4688_N7S6364C1D0Ev,_ZThn2576_N7S6364C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N7S6364C1D0Ev,_ZThn1316_N7S6364C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6364C1D1Ev,_ZTv0_n32_N7S6364C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5568_N7S6364C1D1Ev,_ZThn3056_N7S6364C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4688_N7S6364C1D1Ev,_ZThn2576_N7S6364C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N7S6364C1D1Ev,_ZThn1316_N7S6364C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6364C1 = {  "S6364C1", // class name
  bases_S6364C1, 25,
  &(vtc_S6364C1[0]), // expected_vtbl_contents
  &(vtt_S6364C1[0]), // expected_vtt_contents
  ABISELECT(6608,3636), // object size
  NSPAIRA(_ZTI7S6364C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6364C1),106, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6364C1),49, //virtual table table var
  23, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names86,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7541C6  {
  int s7541c6f0;
  void *s7541c6f1;
  ::S281C37_nt s7541c6f2;
  virtual void  v5(); // _ZN7S7541C62v5Ev
  ~S7541C6(); // tgen
  S7541C6(); // tgen
};
//SIG(-1 S7541C6) C1{ v1 Fi Fp FC2{ m Fp[2]}}


void  S7541C6 ::v5(){vfunc_called(this, "_ZN7S7541C62v5Ev");}
S7541C6 ::~S7541C6(){ note_dtor("S7541C6", this);} // tgen
S7541C6 ::S7541C6(){ note_ctor("S7541C6", this);} // tgen

static void Test_S7541C6()
{
  extern Class_Descriptor cd_S7541C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7541C6, buf);
    S7541C6 *dp, &lv = *(dp=new (buf) S7541C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7541C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7541C6)");
    check_field_offset(lv, s7541c6f0, ABISELECT(8,4), "S7541C6.s7541c6f0");
    check_field_offset(lv, s7541c6f1, ABISELECT(16,8), "S7541C6.s7541c6f1");
    check_field_offset(lv, s7541c6f2, ABISELECT(24,12), "S7541C6.s7541c6f2");
    test_class_info(&lv, &cd_S7541C6);
    dp->~S7541C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7541C6(Test_S7541C6, "S7541C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7541C6C1Ev();
extern void _ZN7S7541C6D1Ev();
Name_Map name_map_S7541C6[] = {
  NSPAIR(_ZN7S7541C6C1Ev),
  NSPAIR(_ZN7S7541C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7541C6[];
extern void _ZN7S7541C62v5Ev();
static  VTBL_ENTRY vtc_S7541C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7541C6[0]),
  (VTBL_ENTRY)&_ZN7S7541C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S7541C6[];
extern  VTBL_ENTRY _ZTV7S7541C6[];
Class_Descriptor cd_S7541C6 = {  "S7541C6", // class name
  0,0,//no base classes
  &(vtc_S7541C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7541C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7541C6),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7541C3  {
  int s7541c3f0[6];
  char s7541c3f1:2;
  long double s7541c3f2;
  void *s7541c3f3[2];
  int s7541c3f4;
  long double s7541c3f5;
  ::S20176C3_nt s7541c3f6;
  ::S281C37_nt s7541c3f7;
  ::S281C37_nt s7541c3f8[9];
  void *s7541c3f9;
  ::S7541C6 s7541c3f10;
  ::S7541C6 s7541c3f11;
  virtual void  v2(); // _ZN7S7541C32v2Ev
  ~S7541C3(); // tgen
  S7541C3(); // tgen
};
//SIG(-1 S7541C3) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S7541C3()
{
  extern Class_Descriptor cd_S7541C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S7541C3, buf);
    S7541C3 *dp, &lv = *(dp=new (buf) S7541C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S7541C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7541C3)");
    check_field_offset(lv, s7541c3f0, ABISELECT(8,4), "S7541C3.s7541c3f0");
    set_bf_and_test(lv, s7541c3f1, ABISELECT(32,28), 0, 2, 1, "S7541C3");
    set_bf_and_test(lv, s7541c3f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S7541C3");
    check_field_offset(lv, s7541c3f2, ABISELECT(48,32), "S7541C3.s7541c3f2");
    check_field_offset(lv, s7541c3f3, ABISELECT(64,44), "S7541C3.s7541c3f3");
    check_field_offset(lv, s7541c3f4, ABISELECT(80,52), "S7541C3.s7541c3f4");
    check_field_offset(lv, s7541c3f5, ABISELECT(96,56), "S7541C3.s7541c3f5");
    check_field_offset(lv, s7541c3f6, ABISELECT(112,68), "S7541C3.s7541c3f6");
    check_field_offset(lv, s7541c3f7, ABISELECT(120,72), "S7541C3.s7541c3f7");
    check_field_offset(lv, s7541c3f8, ABISELECT(136,80), "S7541C3.s7541c3f8");
    check_field_offset(lv, s7541c3f9, ABISELECT(280,152), "S7541C3.s7541c3f9");
    check_field_offset(lv, s7541c3f10, ABISELECT(288,156), "S7541C3.s7541c3f10");
    check_field_offset(lv, s7541c3f11, ABISELECT(328,176), "S7541C3.s7541c3f11");
    test_class_info(&lv, &cd_S7541C3);
    dp->~S7541C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7541C3(Test_S7541C3, "S7541C3", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN7S7541C3C1Ev();
extern void _ZN7S7541C3D1Ev();
Name_Map name_map_S7541C3[] = {
  NSPAIR(_ZN7S7541C3C1Ev),
  NSPAIR(_ZN7S7541C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7541C3[];
extern void _ZN7S7541C32v2Ev();
static  VTBL_ENTRY vtc_S7541C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7541C3[0]),
  (VTBL_ENTRY)&_ZN7S7541C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S7541C3[];
extern  VTBL_ENTRY _ZTV7S7541C3[];
Class_Descriptor cd_S7541C3 = {  "S7541C3", // class name
  0,0,//no base classes
  &(vtc_S7541C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI7S7541C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7541C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7541C2  : virtual S7541C3 {
  void *s7541c2f0;
  short s7541c2f1;
  long s7541c2f2;
  int s7541c2f3:6;
  void *s7541c2f4[2];
  ~S7541C2(); // tgen
  S7541C2(); // tgen
};
//SIG(-1 S7541C2) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} Fp Fs Fl Fi:6 Fp[2]}


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

static void Test_S7541C2()
{
  extern Class_Descriptor cd_S7541C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,57)];
    init_test(&cd_S7541C2, buf);
    S7541C2 *dp, &lv = *(dp=new (buf) S7541C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,224), "sizeof(S7541C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7541C2)");
    check_base_class_offset(lv, (S7541C3*), ABISELECT(64,28), "S7541C2");
    check_field_offset(lv, s7541c2f0, ABISELECT(8,4), "S7541C2.s7541c2f0");
    check_field_offset(lv, s7541c2f1, ABISELECT(16,8), "S7541C2.s7541c2f1");
    check_field_offset(lv, s7541c2f2, ABISELECT(24,12), "S7541C2.s7541c2f2");
    set_bf_and_test(lv, s7541c2f3, ABISELECT(32,16), 0, 6, 1, "S7541C2");
    set_bf_and_test(lv, s7541c2f3, ABISELECT(32,16), 0, 6, hide_sll(1LL<<5), "S7541C2");
    check_field_offset(lv, s7541c2f4, ABISELECT(40,20), "S7541C2.s7541c2f4");
    test_class_info(&lv, &cd_S7541C2);
    dp->~S7541C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7541C2(Test_S7541C2, "S7541C2", ABISELECT(432,224));

#else // __cplusplus

extern void _ZN7S7541C2C1Ev();
extern void _ZN7S7541C2D1Ev();
Name_Map name_map_S7541C2[] = {
  NSPAIR(_ZN7S7541C2C1Ev),
  NSPAIR(_ZN7S7541C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7541C3;
extern VTBL_ENTRY _ZTI7S7541C3[];
extern  VTBL_ENTRY _ZTV7S7541C3[];
static Base_Class bases_S7541C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7541C3,    ABISELECT(64,28), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7541C2[];
extern void _ZN7S7541C32v2Ev();
static  VTBL_ENTRY vtc_S7541C2[] = {
  ABISELECT(64,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7541C2[0]),
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI7S7541C2[0]),
  (VTBL_ENTRY)&_ZN7S7541C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7541C2[];
static  VTT_ENTRY vtt_S7541C2[] = {
  {&(_ZTV7S7541C2[3]),  3,7},
  {&(_ZTV7S7541C2[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S7541C2[];
extern  VTBL_ENTRY _ZTV7S7541C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7541C2[];
Class_Descriptor cd_S7541C2 = {  "S7541C2", // class name
  bases_S7541C2, 1,
  &(vtc_S7541C2[0]), // expected_vtbl_contents
  &(vtt_S7541C2[0]), // expected_vtt_contents
  ABISELECT(432,224), // object size
  NSPAIRA(_ZTI7S7541C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7541C2),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7541C2),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  S7541C7  {
  short s7541c7f0;
  char s7541c7f1;
  __tsi64 s7541c7f2;
  void *s7541c7f3;
  int s7541c7f4;
  long double s7541c7f5;
  long s7541c7f6;
  ::S20176C18 s7541c7f7;
  char s7541c7f8:2;
  ::S7541C3 s7541c7f9;
  virtual void  v3(); // _ZN7S7541C72v3Ev
  ~S7541C7(); // tgen
  S7541C7(); // tgen
};
//SIG(-1 S7541C7) C1{ v1 Fs Fc FL Fp Fi FD Fl FC2{ BC3{ VBC4{ VBC5{ BC6{ v2 Fi Fp FC7{ m Fp[2]}} VBC8{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC9{} FC7 FC7[9] Fp FC6 FC6} VBC7 v4 Fp FL Fc[2] FC8 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC8 BC7 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC9 Fp Fi Fc[8] Fs Fi} Fc:2 FC10{ v6 Fi[6] Fc:2 FD Fp[2] Fi FD FC9 FC7 FC7[9] Fp FC11{ v7 Fi Fp FC7} FC11}}


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

static void Test_S7541C7()
{
  extern Class_Descriptor cd_S7541C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(122,265)];
    init_test(&cd_S7541C7, buf);
    S7541C7 *dp, &lv = *(dp=new (buf) S7541C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1936,1056), "sizeof(S7541C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7541C7)");
    check_field_offset(lv, s7541c7f0, ABISELECT(8,4), "S7541C7.s7541c7f0");
    check_field_offset(lv, s7541c7f1, ABISELECT(10,6), "S7541C7.s7541c7f1");
    check_field_offset(lv, s7541c7f2, ABISELECT(16,8), "S7541C7.s7541c7f2");
    check_field_offset(lv, s7541c7f3, ABISELECT(24,16), "S7541C7.s7541c7f3");
    check_field_offset(lv, s7541c7f4, ABISELECT(32,20), "S7541C7.s7541c7f4");
    check_field_offset(lv, s7541c7f5, ABISELECT(48,24), "S7541C7.s7541c7f5");
    check_field_offset(lv, s7541c7f6, ABISELECT(64,36), "S7541C7.s7541c7f6");
    check_field_offset(lv, s7541c7f7, ABISELECT(80,40), "S7541C7.s7541c7f7");
    set_bf_and_test(lv, s7541c7f8, ABISELECT(1552,856), 0, 2, 1, "S7541C7");
    set_bf_and_test(lv, s7541c7f8, ABISELECT(1552,856), 0, 2, hide_sll(1LL<<1), "S7541C7");
    check_field_offset(lv, s7541c7f9, ABISELECT(1568,860), "S7541C7.s7541c7f9");
    test_class_info(&lv, &cd_S7541C7);
    dp->~S7541C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7541C7(Test_S7541C7, "S7541C7", ABISELECT(1936,1056));

#else // __cplusplus

extern void _ZN7S7541C7C1Ev();
extern void _ZN7S7541C7D1Ev();
Name_Map name_map_S7541C7[] = {
  NSPAIR(_ZN7S7541C7C1Ev),
  NSPAIR(_ZN7S7541C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7541C7[];
extern void _ZN7S7541C72v3Ev();
static  VTBL_ENTRY vtc_S7541C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7541C7[0]),
  (VTBL_ENTRY)&_ZN7S7541C72v3Ev,
};
extern VTBL_ENTRY _ZTI7S7541C7[];
extern  VTBL_ENTRY _ZTV7S7541C7[];
Class_Descriptor cd_S7541C7 = {  "S7541C7", // class name
  0,0,//no base classes
  &(vtc_S7541C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1936,1056), // object size
  NSPAIRA(_ZTI7S7541C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7541C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7541C1  : S7541C2 , virtual S7541C7 {
  long double s7541c1f0;
  void *s7541c1f1;
  ::S20177C17 s7541c1f2[9];
  __tsi64 s7541c1f3:58;
  int s7541c1f4;
  void *s7541c1f5[2];
  virtual void  v1(); // _ZN7S7541C12v1Ev
  ~S7541C1(); // tgen
  S7541C1(); // tgen
};
//SIG(1 S7541C1) C1{ BC2{ VBC3{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v5 Fi Fp FC5} FC6} Fp Fs Fl Fi:6 Fp[2]} VBC7{ v3 Fs Fc FL Fp Fi FD Fl FC8{ BC9{ VBC10{ VBC11{ BC12{ v6 Fi Fp FC5} VBC13{ v7 Fi[6] Fc:2 FD Fp[2] Fi FD FC4 FC5 FC5[9] Fp FC12 FC12} VBC5 v8 Fp FL Fc[2] FC13 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC13 BC5 vd v9 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC4 Fp Fi Fc[8] Fs Fi} Fc:2 FC3} v1 FD Fp FC14{ v4 Fl Fc Fs[2]}[9] FL:58 Fi Fp[2]}


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

static void Test_S7541C1()
{
  extern Class_Descriptor cd_S7541C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(166,366)];
    init_test(&cd_S7541C1, buf);
    S7541C1 *dp, &lv = *(dp=new (buf) S7541C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2640,1460), "sizeof(S7541C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7541C1)");
    check_base_class_offset(lv, (S7541C3*)(S7541C2*), ABISELECT(336,208), "S7541C1");
    check_base_class_offset(lv, (S7541C2*), 0, "S7541C1");
    check_base_class_offset(lv, (S7541C7*), ABISELECT(704,404), "S7541C1");
    check_field_offset(lv, s7541c1f0, ABISELECT(64,28), "S7541C1.s7541c1f0");
    check_field_offset(lv, s7541c1f1, ABISELECT(80,40), "S7541C1.s7541c1f1");
    check_field_offset(lv, s7541c1f2, ABISELECT(88,44), "S7541C1.s7541c1f2");
    set_bf_and_test(lv, s7541c1f3, ABISELECT(304,188), 0, 58, 1, "S7541C1");
    set_bf_and_test(lv, s7541c1f3, ABISELECT(304,188), 0, 58, hide_sll(1LL<<57), "S7541C1");
    check_field_offset(lv, s7541c1f4, ABISELECT(312,196), "S7541C1.s7541c1f4");
    check_field_offset(lv, s7541c1f5, ABISELECT(320,200), "S7541C1.s7541c1f5");
    test_class_info(&lv, &cd_S7541C1);
    dp->~S7541C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7541C1(Test_S7541C1, "S7541C1", ABISELECT(2640,1460));

#else // __cplusplus

extern void _ZN7S7541C1C1Ev();
extern void _ZN7S7541C1D1Ev();
Name_Map name_map_S7541C1[] = {
  NSPAIR(_ZN7S7541C1C1Ev),
  NSPAIR(_ZN7S7541C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7541C3;
extern VTBL_ENTRY _ZTI7S7541C3[];
extern  VTBL_ENTRY _ZTV7S7541C3[];
extern Class_Descriptor cd_S7541C2;
extern VTBL_ENTRY _ZTI7S7541C2[];
extern  VTBL_ENTRY _ZTV7S7541C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7541C2[];
extern Class_Descriptor cd_S7541C7;
extern VTBL_ENTRY _ZTI7S7541C7[];
extern  VTBL_ENTRY _ZTV7S7541C7[];
static Base_Class bases_S7541C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7541C3,    ABISELECT(336,208), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7541C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7541C7,    ABISELECT(704,404), //bcp->offset
    9, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7541C1[];
extern void _ZN7S7541C12v1Ev();
extern void _ZN7S7541C32v2Ev();
extern void _ZN7S7541C72v3Ev();
static  VTBL_ENTRY vtc_S7541C1[] = {
  ABISELECT(704,404),
  ABISELECT(336,208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7541C1[0]),
  (VTBL_ENTRY)&_ZN7S7541C12v1Ev,
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI7S7541C1[0]),
  (VTBL_ENTRY)&_ZN7S7541C32v2Ev,
  0,
  ABISELECT(-704,-404),
  (VTBL_ENTRY)&(_ZTI7S7541C1[0]),
  (VTBL_ENTRY)&_ZN7S7541C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S7541C1[];
static  VTBL_ENTRY _tg__ZTV7S7541C2__7S7541C1[] = {
  ABISELECT(336,208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7541C2[0]),
};
extern void _ZN7S7541C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7541C3__7S7541C2__7S7541C1[] = {
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI7S7541C2[0]),
  (VTBL_ENTRY)&_ZN7S7541C32v2Ev,
};
static  VTT_ENTRY vtt_S7541C1[] = {
  {&(_ZTV7S7541C1[4]),  4,13},
  {&(_tg__ZTV7S7541C2__7S7541C1[3]),  3,3},
  {&(_tg__ZTV7S7541C3__7S7541C2__7S7541C1[3]),  3,4},
  {&(_ZTV7S7541C1[8]),  8,13},
  {&(_ZTV7S7541C1[12]),  12,13},
};
extern VTBL_ENTRY _ZTI7S7541C1[];
extern  VTBL_ENTRY _ZTV7S7541C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7541C1[];
Class_Descriptor cd_S7541C1 = {  "S7541C1", // class name
  bases_S7541C1, 3,
  &(vtc_S7541C1[0]), // expected_vtbl_contents
  &(vtt_S7541C1[0]), // expected_vtt_contents
  ABISELECT(2640,1460), // object size
  NSPAIRA(_ZTI7S7541C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7541C1),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7541C1),5, //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  S7540C6  {
  int s7540c6f0;
  void *s7540c6f1;
  ::S281C37_nt s7540c6f2;
  virtual void  v5(); // _ZN7S7540C62v5Ev
  ~S7540C6(); // tgen
  S7540C6(); // tgen
};
//SIG(-1 S7540C6) C1{ v1 Fi Fp FC2{ m Fp[2]}}


void  S7540C6 ::v5(){vfunc_called(this, "_ZN7S7540C62v5Ev");}
S7540C6 ::~S7540C6(){ note_dtor("S7540C6", this);} // tgen
S7540C6 ::S7540C6(){ note_ctor("S7540C6", this);} // tgen

static void Test_S7540C6()
{
  extern Class_Descriptor cd_S7540C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7540C6, buf);
    S7540C6 *dp, &lv = *(dp=new (buf) S7540C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7540C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7540C6)");
    check_field_offset(lv, s7540c6f0, ABISELECT(8,4), "S7540C6.s7540c6f0");
    check_field_offset(lv, s7540c6f1, ABISELECT(16,8), "S7540C6.s7540c6f1");
    check_field_offset(lv, s7540c6f2, ABISELECT(24,12), "S7540C6.s7540c6f2");
    test_class_info(&lv, &cd_S7540C6);
    dp->~S7540C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7540C6(Test_S7540C6, "S7540C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7540C6C1Ev();
extern void _ZN7S7540C6D1Ev();
Name_Map name_map_S7540C6[] = {
  NSPAIR(_ZN7S7540C6C1Ev),
  NSPAIR(_ZN7S7540C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7540C6[];
extern void _ZN7S7540C62v5Ev();
static  VTBL_ENTRY vtc_S7540C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7540C6[0]),
  (VTBL_ENTRY)&_ZN7S7540C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S7540C6[];
extern  VTBL_ENTRY _ZTV7S7540C6[];
Class_Descriptor cd_S7540C6 = {  "S7540C6", // class name
  0,0,//no base classes
  &(vtc_S7540C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7540C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7540C6),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7540C3  {
  int s7540c3f0[6];
  char s7540c3f1:2;
  long double s7540c3f2;
  void *s7540c3f3[2];
  int s7540c3f4;
  long double s7540c3f5;
  ::S20176C3_nt s7540c3f6;
  ::S281C37_nt s7540c3f7;
  ::S281C37_nt s7540c3f8[9];
  void *s7540c3f9;
  ::S7540C6 s7540c3f10;
  ::S7540C6 s7540c3f11;
  virtual void  v2(); // _ZN7S7540C32v2Ev
  ~S7540C3(); // tgen
  S7540C3(); // tgen
};
//SIG(-1 S7540C3) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S7540C3()
{
  extern Class_Descriptor cd_S7540C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S7540C3, buf);
    S7540C3 *dp, &lv = *(dp=new (buf) S7540C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S7540C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7540C3)");
    check_field_offset(lv, s7540c3f0, ABISELECT(8,4), "S7540C3.s7540c3f0");
    set_bf_and_test(lv, s7540c3f1, ABISELECT(32,28), 0, 2, 1, "S7540C3");
    set_bf_and_test(lv, s7540c3f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S7540C3");
    check_field_offset(lv, s7540c3f2, ABISELECT(48,32), "S7540C3.s7540c3f2");
    check_field_offset(lv, s7540c3f3, ABISELECT(64,44), "S7540C3.s7540c3f3");
    check_field_offset(lv, s7540c3f4, ABISELECT(80,52), "S7540C3.s7540c3f4");
    check_field_offset(lv, s7540c3f5, ABISELECT(96,56), "S7540C3.s7540c3f5");
    check_field_offset(lv, s7540c3f6, ABISELECT(112,68), "S7540C3.s7540c3f6");
    check_field_offset(lv, s7540c3f7, ABISELECT(120,72), "S7540C3.s7540c3f7");
    check_field_offset(lv, s7540c3f8, ABISELECT(136,80), "S7540C3.s7540c3f8");
    check_field_offset(lv, s7540c3f9, ABISELECT(280,152), "S7540C3.s7540c3f9");
    check_field_offset(lv, s7540c3f10, ABISELECT(288,156), "S7540C3.s7540c3f10");
    check_field_offset(lv, s7540c3f11, ABISELECT(328,176), "S7540C3.s7540c3f11");
    test_class_info(&lv, &cd_S7540C3);
    dp->~S7540C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7540C3(Test_S7540C3, "S7540C3", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN7S7540C3C1Ev();
extern void _ZN7S7540C3D1Ev();
Name_Map name_map_S7540C3[] = {
  NSPAIR(_ZN7S7540C3C1Ev),
  NSPAIR(_ZN7S7540C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7540C3[];
extern void _ZN7S7540C32v2Ev();
static  VTBL_ENTRY vtc_S7540C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7540C3[0]),
  (VTBL_ENTRY)&_ZN7S7540C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S7540C3[];
extern  VTBL_ENTRY _ZTV7S7540C3[];
Class_Descriptor cd_S7540C3 = {  "S7540C3", // class name
  0,0,//no base classes
  &(vtc_S7540C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI7S7540C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7540C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7540C2  : virtual S7540C3 {
  void *s7540c2f0;
  short s7540c2f1;
  __tsi64 s7540c2f2;
  int s7540c2f3:6;
  void *s7540c2f4[2];
  ~S7540C2(); // tgen
  S7540C2(); // tgen
};
//SIG(-1 S7540C2) C1{ VBC2{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v2 Fi Fp FC4} FC5} Fp Fs FL Fi:6 Fp[2]}


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

static void Test_S7540C2()
{
  extern Class_Descriptor cd_S7540C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,58)];
    init_test(&cd_S7540C2, buf);
    S7540C2 *dp, &lv = *(dp=new (buf) S7540C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,228), "sizeof(S7540C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7540C2)");
    check_base_class_offset(lv, (S7540C3*), ABISELECT(64,32), "S7540C2");
    check_field_offset(lv, s7540c2f0, ABISELECT(8,4), "S7540C2.s7540c2f0");
    check_field_offset(lv, s7540c2f1, ABISELECT(16,8), "S7540C2.s7540c2f1");
    check_field_offset(lv, s7540c2f2, ABISELECT(24,12), "S7540C2.s7540c2f2");
    set_bf_and_test(lv, s7540c2f3, ABISELECT(32,20), 0, 6, 1, "S7540C2");
    set_bf_and_test(lv, s7540c2f3, ABISELECT(32,20), 0, 6, hide_sll(1LL<<5), "S7540C2");
    check_field_offset(lv, s7540c2f4, ABISELECT(40,24), "S7540C2.s7540c2f4");
    test_class_info(&lv, &cd_S7540C2);
    dp->~S7540C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7540C2(Test_S7540C2, "S7540C2", ABISELECT(432,228));

#else // __cplusplus

extern void _ZN7S7540C2C1Ev();
extern void _ZN7S7540C2D1Ev();
Name_Map name_map_S7540C2[] = {
  NSPAIR(_ZN7S7540C2C1Ev),
  NSPAIR(_ZN7S7540C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7540C3;
extern VTBL_ENTRY _ZTI7S7540C3[];
extern  VTBL_ENTRY _ZTV7S7540C3[];
static Base_Class bases_S7540C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7540C3,    ABISELECT(64,32), //bcp->offset
    3, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7540C2[];
extern void _ZN7S7540C32v2Ev();
static  VTBL_ENTRY vtc_S7540C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7540C2[0]),
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7540C2[0]),
  (VTBL_ENTRY)&_ZN7S7540C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7540C2[];
static  VTT_ENTRY vtt_S7540C2[] = {
  {&(_ZTV7S7540C2[3]),  3,7},
  {&(_ZTV7S7540C2[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S7540C2[];
extern  VTBL_ENTRY _ZTV7S7540C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7540C2[];
Class_Descriptor cd_S7540C2 = {  "S7540C2", // class name
  bases_S7540C2, 1,
  &(vtc_S7540C2[0]), // expected_vtbl_contents
  &(vtt_S7540C2[0]), // expected_vtt_contents
  ABISELECT(432,228), // object size
  NSPAIRA(_ZTI7S7540C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7540C2),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7540C2),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  S7540C7  {
  short s7540c7f0;
  char s7540c7f1;
  __tsi64 s7540c7f2;
  void *s7540c7f3;
  int s7540c7f4;
  long double s7540c7f5;
  long s7540c7f6;
  ::S20176C18 s7540c7f7;
  char s7540c7f8:2;
  ::S7540C3 s7540c7f9;
  virtual void  v3(); // _ZN7S7540C72v3Ev
  ~S7540C7(); // tgen
  S7540C7(); // tgen
};
//SIG(-1 S7540C7) C1{ v1 Fs Fc FL Fp Fi FD Fl FC2{ BC3{ VBC4{ VBC5{ BC6{ v2 Fi Fp FC7{ m Fp[2]}} VBC8{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC9{} FC7 FC7[9] Fp FC6 FC6} VBC7 v4 Fp FL Fc[2] FC8 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC7} BC8 BC7 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC9 Fp Fi Fc[8] Fs Fi} Fc:2 FC10{ v6 Fi[6] Fc:2 FD Fp[2] Fi FD FC9 FC7 FC7[9] Fp FC11{ v7 Fi Fp FC7} FC11}}


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

static void Test_S7540C7()
{
  extern Class_Descriptor cd_S7540C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(122,265)];
    init_test(&cd_S7540C7, buf);
    S7540C7 *dp, &lv = *(dp=new (buf) S7540C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1936,1056), "sizeof(S7540C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7540C7)");
    check_field_offset(lv, s7540c7f0, ABISELECT(8,4), "S7540C7.s7540c7f0");
    check_field_offset(lv, s7540c7f1, ABISELECT(10,6), "S7540C7.s7540c7f1");
    check_field_offset(lv, s7540c7f2, ABISELECT(16,8), "S7540C7.s7540c7f2");
    check_field_offset(lv, s7540c7f3, ABISELECT(24,16), "S7540C7.s7540c7f3");
    check_field_offset(lv, s7540c7f4, ABISELECT(32,20), "S7540C7.s7540c7f4");
    check_field_offset(lv, s7540c7f5, ABISELECT(48,24), "S7540C7.s7540c7f5");
    check_field_offset(lv, s7540c7f6, ABISELECT(64,36), "S7540C7.s7540c7f6");
    check_field_offset(lv, s7540c7f7, ABISELECT(80,40), "S7540C7.s7540c7f7");
    set_bf_and_test(lv, s7540c7f8, ABISELECT(1552,856), 0, 2, 1, "S7540C7");
    set_bf_and_test(lv, s7540c7f8, ABISELECT(1552,856), 0, 2, hide_sll(1LL<<1), "S7540C7");
    check_field_offset(lv, s7540c7f9, ABISELECT(1568,860), "S7540C7.s7540c7f9");
    test_class_info(&lv, &cd_S7540C7);
    dp->~S7540C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7540C7(Test_S7540C7, "S7540C7", ABISELECT(1936,1056));

#else // __cplusplus

extern void _ZN7S7540C7C1Ev();
extern void _ZN7S7540C7D1Ev();
Name_Map name_map_S7540C7[] = {
  NSPAIR(_ZN7S7540C7C1Ev),
  NSPAIR(_ZN7S7540C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7540C7[];
extern void _ZN7S7540C72v3Ev();
static  VTBL_ENTRY vtc_S7540C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7540C7[0]),
  (VTBL_ENTRY)&_ZN7S7540C72v3Ev,
};
extern VTBL_ENTRY _ZTI7S7540C7[];
extern  VTBL_ENTRY _ZTV7S7540C7[];
Class_Descriptor cd_S7540C7 = {  "S7540C7", // class name
  0,0,//no base classes
  &(vtc_S7540C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1936,1056), // object size
  NSPAIRA(_ZTI7S7540C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7540C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7540C1  : S7540C2 , virtual S7540C7 {
  long double s7540c1f0;
  void *s7540c1f1;
  ::S20177C17 s7540c1f2[9];
  int s7540c1f3:32;
  int s7540c1f4;
  void *s7540c1f5[2];
  virtual void  v1(); // _ZN7S7540C12v1Ev
  ~S7540C1(); // tgen
  S7540C1(); // tgen
};
//SIG(1 S7540C1) C1{ BC2{ VBC3{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v5 Fi Fp FC5} FC6} Fp Fs FL Fi:6 Fp[2]} VBC7{ v3 Fs Fc FL Fp Fi FD Fl FC8{ BC9{ VBC10{ VBC11{ BC12{ v6 Fi Fp FC5} VBC13{ v7 Fi[6] Fc:2 FD Fp[2] Fi FD FC4 FC5 FC5[9] Fp FC12 FC12} VBC5 v8 Fp FL Fc[2] FC13 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC13 BC5 vd v9 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fi FC4 Fp Fi Fc[8] Fs Fi} Fc:2 FC3} v1 FD Fp FC14{ v4 Fl Fc Fs[2]}[9] Fi:32 Fi Fp[2]}


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

static void Test_S7540C1()
{
  extern Class_Descriptor cd_S7540C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(166,366)];
    init_test(&cd_S7540C1, buf);
    S7540C1 *dp, &lv = *(dp=new (buf) S7540C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2640,1460), "sizeof(S7540C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7540C1)");
    check_base_class_offset(lv, (S7540C3*)(S7540C2*), ABISELECT(336,208), "S7540C1");
    check_base_class_offset(lv, (S7540C2*), 0, "S7540C1");
    check_base_class_offset(lv, (S7540C7*), ABISELECT(704,404), "S7540C1");
    check_field_offset(lv, s7540c1f0, ABISELECT(64,32), "S7540C1.s7540c1f0");
    check_field_offset(lv, s7540c1f1, ABISELECT(80,44), "S7540C1.s7540c1f1");
    check_field_offset(lv, s7540c1f2, ABISELECT(88,48), "S7540C1.s7540c1f2");
    set_bf_and_test(lv, s7540c1f3, ABISELECT(304,192), 0, 32, 1, "S7540C1");
    set_bf_and_test(lv, s7540c1f3, ABISELECT(304,192), 0, 32, hide_sll(1LL<<31), "S7540C1");
    check_field_offset(lv, s7540c1f4, ABISELECT(308,196), "S7540C1.s7540c1f4");
    check_field_offset(lv, s7540c1f5, ABISELECT(312,200), "S7540C1.s7540c1f5");
    test_class_info(&lv, &cd_S7540C1);
    dp->~S7540C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7540C1(Test_S7540C1, "S7540C1", ABISELECT(2640,1460));

#else // __cplusplus

extern void _ZN7S7540C1C1Ev();
extern void _ZN7S7540C1D1Ev();
Name_Map name_map_S7540C1[] = {
  NSPAIR(_ZN7S7540C1C1Ev),
  NSPAIR(_ZN7S7540C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7540C3;
extern VTBL_ENTRY _ZTI7S7540C3[];
extern  VTBL_ENTRY _ZTV7S7540C3[];
extern Class_Descriptor cd_S7540C2;
extern VTBL_ENTRY _ZTI7S7540C2[];
extern  VTBL_ENTRY _ZTV7S7540C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7540C2[];
extern Class_Descriptor cd_S7540C7;
extern VTBL_ENTRY _ZTI7S7540C7[];
extern  VTBL_ENTRY _ZTV7S7540C7[];
static Base_Class bases_S7540C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7540C3,    ABISELECT(336,208), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7540C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7540C7,    ABISELECT(704,404), //bcp->offset
    9, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7540C1[];
extern void _ZN7S7540C12v1Ev();
extern void _ZN7S7540C32v2Ev();
extern void _ZN7S7540C72v3Ev();
static  VTBL_ENTRY vtc_S7540C1[] = {
  ABISELECT(704,404),
  ABISELECT(336,208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7540C1[0]),
  (VTBL_ENTRY)&_ZN7S7540C12v1Ev,
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI7S7540C1[0]),
  (VTBL_ENTRY)&_ZN7S7540C32v2Ev,
  0,
  ABISELECT(-704,-404),
  (VTBL_ENTRY)&(_ZTI7S7540C1[0]),
  (VTBL_ENTRY)&_ZN7S7540C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S7540C1[];
static  VTBL_ENTRY _tg__ZTV7S7540C2__7S7540C1[] = {
  ABISELECT(336,208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7540C2[0]),
};
extern void _ZN7S7540C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7540C3__7S7540C2__7S7540C1[] = {
  0,
  ABISELECT(-336,-208),
  (VTBL_ENTRY)&(_ZTI7S7540C2[0]),
  (VTBL_ENTRY)&_ZN7S7540C32v2Ev,
};
static  VTT_ENTRY vtt_S7540C1[] = {
  {&(_ZTV7S7540C1[4]),  4,13},
  {&(_tg__ZTV7S7540C2__7S7540C1[3]),  3,3},
  {&(_tg__ZTV7S7540C3__7S7540C2__7S7540C1[3]),  3,4},
  {&(_ZTV7S7540C1[8]),  8,13},
  {&(_ZTV7S7540C1[12]),  12,13},
};
extern VTBL_ENTRY _ZTI7S7540C1[];
extern  VTBL_ENTRY _ZTV7S7540C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7540C1[];
Class_Descriptor cd_S7540C1 = {  "S7540C1", // class name
  bases_S7540C1, 3,
  &(vtc_S7540C1[0]), // expected_vtbl_contents
  &(vtt_S7540C1[0]), // expected_vtt_contents
  ABISELECT(2640,1460), // object size
  NSPAIRA(_ZTI7S7540C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7540C1),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7540C1),5, //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  S299C5  : S770C5_nt {
  virtual void  v10(); // _ZN6S299C53v10Ev
  virtual void  v11(); // _ZN6S299C53v11Ev
  virtual void  v12(); // _ZN6S299C53v12Ev
  virtual void  v13(); // _ZN6S299C53v13Ev
  virtual void  v14(); // _ZN6S299C53v14Ev
  ~S299C5(); // tgen
  S299C5(); // tgen
};
//SIG(-1 S299C5) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S299C5 ::v10(){vfunc_called(this, "_ZN6S299C53v10Ev");}
void  S299C5 ::v11(){vfunc_called(this, "_ZN6S299C53v11Ev");}
void  S299C5 ::v12(){vfunc_called(this, "_ZN6S299C53v12Ev");}
void  S299C5 ::v13(){vfunc_called(this, "_ZN6S299C53v13Ev");}
void  S299C5 ::v14(){vfunc_called(this, "_ZN6S299C53v14Ev");}
S299C5 ::~S299C5(){ note_dtor("S299C5", this);} // tgen
S299C5 ::S299C5(){ note_ctor("S299C5", this);} // tgen

static void Test_S299C5()
{
  extern Class_Descriptor cd_S299C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S299C5, buf);
    S299C5 *dp, &lv = *(dp=new (buf) S299C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S299C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S299C5)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S299C5");
    test_class_info(&lv, &cd_S299C5);
    dp->~S299C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS299C5(Test_S299C5, "S299C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S299C5C1Ev();
extern void _ZN6S299C5D1Ev();
Name_Map name_map_S299C5[] = {
  NSPAIR(_ZN6S299C5C1Ev),
  NSPAIR(_ZN6S299C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S299C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S299C5[];
extern void _ZN6S299C5D1Ev();
extern void _ZN6S299C5D0Ev();
extern void _ZN6S299C53v10Ev();
extern void _ZN6S299C53v11Ev();
extern void _ZN6S299C53v12Ev();
extern void _ZN6S299C53v13Ev();
extern void _ZN6S299C53v14Ev();
static  VTBL_ENTRY vtc_S299C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S299C5[0]),
  (VTBL_ENTRY)&_ZN6S299C5D1Ev,
  (VTBL_ENTRY)&_ZN6S299C5D0Ev,
  (VTBL_ENTRY)&_ZN6S299C53v10Ev,
  (VTBL_ENTRY)&_ZN6S299C53v11Ev,
  (VTBL_ENTRY)&_ZN6S299C53v12Ev,
  (VTBL_ENTRY)&_ZN6S299C53v13Ev,
  (VTBL_ENTRY)&_ZN6S299C53v14Ev,
};
extern VTBL_ENTRY _ZTI6S299C5[];
extern  VTBL_ENTRY _ZTV6S299C5[];
Class_Descriptor cd_S299C5 = {  "S299C5", // class name
  bases_S299C5, 1,
  &(vtc_S299C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S299C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S299C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S299C4  : S299C5 {
  void *s299c4f0[3];
  ::S770C6_nt s299c4f1;
  virtual void  v15(); // _ZN6S299C43v15Ev
  virtual void  v16(); // _ZN6S299C43v16Ev
  virtual void  v17(); // _ZN6S299C43v17Ev
  virtual void  v18(); // _ZN6S299C43v18Ev
  virtual void  v19(); // _ZN6S299C43v19Ev
  virtual void  v20(); // _ZN6S299C43v20Ev
  virtual void  v21(); // _ZN6S299C43v21Ev
  virtual void  v22(); // _ZN6S299C43v22Ev
  virtual void  v23(); // _ZN6S299C43v23Ev
  virtual void  v24(); // _ZN6S299C43v24Ev
  virtual void  v25(); // _ZN6S299C43v25Ev
  ~S299C4(); // tgen
  S299C4(); // tgen
};
//SIG(-1 S299C4) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S299C4 ::v15(){vfunc_called(this, "_ZN6S299C43v15Ev");}
void  S299C4 ::v16(){vfunc_called(this, "_ZN6S299C43v16Ev");}
void  S299C4 ::v17(){vfunc_called(this, "_ZN6S299C43v17Ev");}
void  S299C4 ::v18(){vfunc_called(this, "_ZN6S299C43v18Ev");}
void  S299C4 ::v19(){vfunc_called(this, "_ZN6S299C43v19Ev");}
void  S299C4 ::v20(){vfunc_called(this, "_ZN6S299C43v20Ev");}
void  S299C4 ::v21(){vfunc_called(this, "_ZN6S299C43v21Ev");}
void  S299C4 ::v22(){vfunc_called(this, "_ZN6S299C43v22Ev");}
void  S299C4 ::v23(){vfunc_called(this, "_ZN6S299C43v23Ev");}
void  S299C4 ::v24(){vfunc_called(this, "_ZN6S299C43v24Ev");}
void  S299C4 ::v25(){vfunc_called(this, "_ZN6S299C43v25Ev");}
S299C4 ::~S299C4(){ note_dtor("S299C4", this);} // tgen
S299C4 ::S299C4(){ note_ctor("S299C4", this);} // tgen

static void Test_S299C4()
{
  extern Class_Descriptor cd_S299C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S299C4, buf);
    S299C4 *dp, &lv = *(dp=new (buf) S299C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S299C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S299C4)");
    check_base_class_offset(lv, (S770C5_nt*)(S299C5*), 0, "S299C4");
    check_base_class_offset(lv, (S299C5*), 0, "S299C4");
    check_field_offset(lv, s299c4f0, ABISELECT(16,8), "S299C4.s299c4f0");
    check_field_offset(lv, s299c4f1, ABISELECT(40,20), "S299C4.s299c4f1");
    test_class_info(&lv, &cd_S299C4);
    dp->~S299C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS299C4(Test_S299C4, "S299C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S299C4C1Ev();
extern void _ZN6S299C4D1Ev();
Name_Map name_map_S299C4[] = {
  NSPAIR(_ZN6S299C4C1Ev),
  NSPAIR(_ZN6S299C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S299C5;
extern VTBL_ENTRY _ZTI6S299C5[];
extern  VTBL_ENTRY _ZTV6S299C5[];
static Base_Class bases_S299C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S299C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S299C4[];
extern void _ZN6S299C4D1Ev();
extern void _ZN6S299C4D0Ev();
extern void _ZN6S299C53v10Ev();
extern void _ZN6S299C53v11Ev();
extern void _ZN6S299C53v12Ev();
extern void _ZN6S299C53v13Ev();
extern void _ZN6S299C53v14Ev();
extern void _ZN6S299C43v15Ev();
extern void _ZN6S299C43v16Ev();
extern void _ZN6S299C43v17Ev();
extern void _ZN6S299C43v18Ev();
extern void _ZN6S299C43v19Ev();
extern void _ZN6S299C43v20Ev();
extern void _ZN6S299C43v21Ev();
extern void _ZN6S299C43v22Ev();
extern void _ZN6S299C43v23Ev();
extern void _ZN6S299C43v24Ev();
extern void _ZN6S299C43v25Ev();
static  VTBL_ENTRY vtc_S299C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S299C4[0]),
  (VTBL_ENTRY)&_ZN6S299C4D1Ev,
  (VTBL_ENTRY)&_ZN6S299C4D0Ev,
  (VTBL_ENTRY)&_ZN6S299C53v10Ev,
  (VTBL_ENTRY)&_ZN6S299C53v11Ev,
  (VTBL_ENTRY)&_ZN6S299C53v12Ev,
  (VTBL_ENTRY)&_ZN6S299C53v13Ev,
  (VTBL_ENTRY)&_ZN6S299C53v14Ev,
  (VTBL_ENTRY)&_ZN6S299C43v15Ev,
  (VTBL_ENTRY)&_ZN6S299C43v16Ev,
  (VTBL_ENTRY)&_ZN6S299C43v17Ev,
  (VTBL_ENTRY)&_ZN6S299C43v18Ev,
  (VTBL_ENTRY)&_ZN6S299C43v19Ev,
  (VTBL_ENTRY)&_ZN6S299C43v20Ev,
  (VTBL_ENTRY)&_ZN6S299C43v21Ev,
  (VTBL_ENTRY)&_ZN6S299C43v22Ev,
  (VTBL_ENTRY)&_ZN6S299C43v23Ev,
  (VTBL_ENTRY)&_ZN6S299C43v24Ev,
  (VTBL_ENTRY)&_ZN6S299C43v25Ev,
};
extern VTBL_ENTRY _ZTI6S299C4[];
extern  VTBL_ENTRY _ZTV6S299C4[];
Class_Descriptor cd_S299C4 = {  "S299C4", // class name
  bases_S299C4, 2,
  &(vtc_S299C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S299C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S299C4),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S299C3  : S299C4 {
  ::S770C6_nt s299c3f0;
  ::S770C9_nt s299c3f1;
  void *s299c3f2[3];
  virtual void  v26(); // _ZN6S299C33v26Ev
  virtual void  v27(); // _ZN6S299C33v27Ev
  virtual void  v28(); // _ZN6S299C33v28Ev
  virtual void  v29(); // _ZN6S299C33v29Ev
  virtual void  v30(); // _ZN6S299C33v30Ev
  virtual void  v31(); // _ZN6S299C33v31Ev
  virtual void  v32(); // _ZN6S299C33v32Ev
  virtual void  v33(); // _ZN6S299C33v33Ev
  ~S299C3(); // tgen
  S299C3(); // tgen
};
//SIG(-1 S299C3) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S299C3 ::v26(){vfunc_called(this, "_ZN6S299C33v26Ev");}
void  S299C3 ::v27(){vfunc_called(this, "_ZN6S299C33v27Ev");}
void  S299C3 ::v28(){vfunc_called(this, "_ZN6S299C33v28Ev");}
void  S299C3 ::v29(){vfunc_called(this, "_ZN6S299C33v29Ev");}
void  S299C3 ::v30(){vfunc_called(this, "_ZN6S299C33v30Ev");}
void  S299C3 ::v31(){vfunc_called(this, "_ZN6S299C33v31Ev");}
void  S299C3 ::v32(){vfunc_called(this, "_ZN6S299C33v32Ev");}
void  S299C3 ::v33(){vfunc_called(this, "_ZN6S299C33v33Ev");}
S299C3 ::~S299C3(){ note_dtor("S299C3", this);} // tgen
S299C3 ::S299C3(){ note_ctor("S299C3", this);} // tgen

static void Test_S299C3()
{
  extern Class_Descriptor cd_S299C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S299C3, buf);
    S299C3 *dp, &lv = *(dp=new (buf) S299C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S299C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S299C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S299C5*)(S299C4*), 0, "S299C3");
    check_base_class_offset(lv, (S299C5*)(S299C4*), 0, "S299C3");
    check_base_class_offset(lv, (S299C4*), 0, "S299C3");
    check_field_offset(lv, s299c3f0, ABISELECT(80,44), "S299C3.s299c3f0");
    check_field_offset(lv, s299c3f1, ABISELECT(120,68), "S299C3.s299c3f1");
    check_field_offset(lv, s299c3f2, ABISELECT(128,72), "S299C3.s299c3f2");
    test_class_info(&lv, &cd_S299C3);
    dp->~S299C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS299C3(Test_S299C3, "S299C3", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S299C3C1Ev();
extern void _ZN6S299C3D1Ev();
Name_Map name_map_S299C3[] = {
  NSPAIR(_ZN6S299C3C1Ev),
  NSPAIR(_ZN6S299C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S299C5;
extern VTBL_ENTRY _ZTI6S299C5[];
extern  VTBL_ENTRY _ZTV6S299C5[];
extern Class_Descriptor cd_S299C4;
extern VTBL_ENTRY _ZTI6S299C4[];
extern  VTBL_ENTRY _ZTV6S299C4[];
static Base_Class bases_S299C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S299C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S299C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S299C3[];
extern void _ZN6S299C3D1Ev();
extern void _ZN6S299C3D0Ev();
extern void _ZN6S299C53v10Ev();
extern void _ZN6S299C53v11Ev();
extern void _ZN6S299C53v12Ev();
extern void _ZN6S299C53v13Ev();
extern void _ZN6S299C53v14Ev();
extern void _ZN6S299C43v15Ev();
extern void _ZN6S299C43v16Ev();
extern void _ZN6S299C43v17Ev();
extern void _ZN6S299C43v18Ev();
extern void _ZN6S299C43v19Ev();
extern void _ZN6S299C43v20Ev();
extern void _ZN6S299C43v21Ev();
extern void _ZN6S299C43v22Ev();
extern void _ZN6S299C43v23Ev();
extern void _ZN6S299C43v24Ev();
extern void _ZN6S299C43v25Ev();
extern void _ZN6S299C33v26Ev();
extern void _ZN6S299C33v27Ev();
extern void _ZN6S299C33v28Ev();
extern void _ZN6S299C33v29Ev();
extern void _ZN6S299C33v30Ev();
extern void _ZN6S299C33v31Ev();
extern void _ZN6S299C33v32Ev();
extern void _ZN6S299C33v33Ev();
static  VTBL_ENTRY vtc_S299C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S299C3[0]),
  (VTBL_ENTRY)&_ZN6S299C3D1Ev,
  (VTBL_ENTRY)&_ZN6S299C3D0Ev,
  (VTBL_ENTRY)&_ZN6S299C53v10Ev,
  (VTBL_ENTRY)&_ZN6S299C53v11Ev,
  (VTBL_ENTRY)&_ZN6S299C53v12Ev,
  (VTBL_ENTRY)&_ZN6S299C53v13Ev,
  (VTBL_ENTRY)&_ZN6S299C53v14Ev,
  (VTBL_ENTRY)&_ZN6S299C43v15Ev,
  (VTBL_ENTRY)&_ZN6S299C43v16Ev,
  (VTBL_ENTRY)&_ZN6S299C43v17Ev,
  (VTBL_ENTRY)&_ZN6S299C43v18Ev,
  (VTBL_ENTRY)&_ZN6S299C43v19Ev,
  (VTBL_ENTRY)&_ZN6S299C43v20Ev,
  (VTBL_ENTRY)&_ZN6S299C43v21Ev,
  (VTBL_ENTRY)&_ZN6S299C43v22Ev,
  (VTBL_ENTRY)&_ZN6S299C43v23Ev,
  (VTBL_ENTRY)&_ZN6S299C43v24Ev,
  (VTBL_ENTRY)&_ZN6S299C43v25Ev,
  (VTBL_ENTRY)&_ZN6S299C33v26Ev,
  (VTBL_ENTRY)&_ZN6S299C33v27Ev,
  (VTBL_ENTRY)&_ZN6S299C33v28Ev,
  (VTBL_ENTRY)&_ZN6S299C33v29Ev,
  (VTBL_ENTRY)&_ZN6S299C33v30Ev,
  (VTBL_ENTRY)&_ZN6S299C33v31Ev,
  (VTBL_ENTRY)&_ZN6S299C33v32Ev,
  (VTBL_ENTRY)&_ZN6S299C33v33Ev,
};
extern VTBL_ENTRY _ZTI6S299C3[];
extern  VTBL_ENTRY _ZTV6S299C3[];
Class_Descriptor cd_S299C3 = {  "S299C3", // class name
  bases_S299C3, 3,
  &(vtc_S299C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S299C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S299C3),28, //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  S299C13  {
  ::S2215C20_nt s299c13f0;
  ::S2215C20_nt s299c13f1;
  ::S2215C20_nt s299c13f2;
  int s299c13f3[2];
  ::S2215C20_nt s299c13f4;
  int s299c13f5[2];
  ::S2215C20_nt s299c13f6;
  void  mf299c13(); // _ZN7S299C138mf299c13Ev
};
//SIG(-1 S299C13) C1{ m FC2{ m Fp Fi FC3{ m}} FC2 FC2 Fi[2] FC2 Fi[2] FC2}


void  S299C13 ::mf299c13(){}

static void Test_S299C13()
{
  {
    init_simple_test("S299C13");
    S299C13 lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S299C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S299C13)");
    check_field_offset(lv, s299c13f0, 0, "S299C13.s299c13f0");
    check_field_offset(lv, s299c13f1, ABISELECT(16,12), "S299C13.s299c13f1");
    check_field_offset(lv, s299c13f2, ABISELECT(32,24), "S299C13.s299c13f2");
    check_field_offset(lv, s299c13f3, ABISELECT(48,36), "S299C13.s299c13f3");
    check_field_offset(lv, s299c13f4, ABISELECT(56,44), "S299C13.s299c13f4");
    check_field_offset(lv, s299c13f5, ABISELECT(72,56), "S299C13.s299c13f5");
    check_field_offset(lv, s299c13f6, ABISELECT(80,64), "S299C13.s299c13f6");
  }
}
static Arrange_To_Call_Me vS299C13(Test_S299C13, "S299C13", ABISELECT(96,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S299C2  : S299C3 {
  int s299c2f0;
  ::S303C11_nt s299c2f1;
  ::S299C13 s299c2f2;
  virtual void  v34(); // _ZN6S299C23v34Ev
  virtual void  v35(); // _ZN6S299C23v35Ev
  virtual void  v36(); // _ZN6S299C23v36Ev
  virtual void  v37(); // _ZN6S299C23v37Ev
  virtual void  v38(); // _ZN6S299C23v38Ev
  virtual void  v39(); // _ZN6S299C23v39Ev
  ~S299C2(); // tgen
  S299C2(); // tgen
};
//SIG(-1 S299C2) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v7 v8 v9 v10 v11} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v23 v24 v25 v26 v27 v28 v29 v30 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 Fi FC10{ m FC11{ m FL}} FC12{ m FC13{ m Fp Fi FC14{ m}} FC13 FC13 Fi[2] FC13 Fi[2] FC13}}


void  S299C2 ::v34(){vfunc_called(this, "_ZN6S299C23v34Ev");}
void  S299C2 ::v35(){vfunc_called(this, "_ZN6S299C23v35Ev");}
void  S299C2 ::v36(){vfunc_called(this, "_ZN6S299C23v36Ev");}
void  S299C2 ::v37(){vfunc_called(this, "_ZN6S299C23v37Ev");}
void  S299C2 ::v38(){vfunc_called(this, "_ZN6S299C23v38Ev");}
void  S299C2 ::v39(){vfunc_called(this, "_ZN6S299C23v39Ev");}
S299C2 ::~S299C2(){ note_dtor("S299C2", this);} // tgen
S299C2 ::S299C2(){ note_ctor("S299C2", this);} // tgen

static void Test_S299C2()
{
  extern Class_Descriptor cd_S299C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,44)];
    init_test(&cd_S299C2, buf);
    S299C2 *dp, &lv = *(dp=new (buf) S299C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,172), "sizeof(S299C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S299C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S299C5*)(S299C4*)(S299C3*), 0, "S299C2");
    check_base_class_offset(lv, (S299C5*)(S299C4*)(S299C3*), 0, "S299C2");
    check_base_class_offset(lv, (S299C4*)(S299C3*), 0, "S299C2");
    check_base_class_offset(lv, (S299C3*), 0, "S299C2");
    check_field_offset(lv, s299c2f0, ABISELECT(152,84), "S299C2.s299c2f0");
    check_field_offset(lv, s299c2f1, ABISELECT(160,88), "S299C2.s299c2f1");
    check_field_offset(lv, s299c2f2, ABISELECT(168,96), "S299C2.s299c2f2");
    test_class_info(&lv, &cd_S299C2);
    dp->~S299C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS299C2(Test_S299C2, "S299C2", ABISELECT(264,172));

#else // __cplusplus

extern void _ZN6S299C2C1Ev();
extern void _ZN6S299C2D1Ev();
Name_Map name_map_S299C2[] = {
  NSPAIR(_ZN6S299C2C1Ev),
  NSPAIR(_ZN6S299C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S299C5;
extern VTBL_ENTRY _ZTI6S299C5[];
extern  VTBL_ENTRY _ZTV6S299C5[];
extern Class_Descriptor cd_S299C4;
extern VTBL_ENTRY _ZTI6S299C4[];
extern  VTBL_ENTRY _ZTV6S299C4[];
extern Class_Descriptor cd_S299C3;
extern VTBL_ENTRY _ZTI6S299C3[];
extern  VTBL_ENTRY _ZTV6S299C3[];
static Base_Class bases_S299C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S299C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S299C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S299C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S299C2[];
extern void _ZN6S299C2D1Ev();
extern void _ZN6S299C2D0Ev();
extern void _ZN6S299C53v10Ev();
extern void _ZN6S299C53v11Ev();
extern void _ZN6S299C53v12Ev();
extern void _ZN6S299C53v13Ev();
extern void _ZN6S299C53v14Ev();
extern void _ZN6S299C43v15Ev();
extern void _ZN6S299C43v16Ev();
extern void _ZN6S299C43v17Ev();
extern void _ZN6S299C43v18Ev();
extern void _ZN6S299C43v19Ev();
extern void _ZN6S299C43v20Ev();
extern void _ZN6S299C43v21Ev();
extern void _ZN6S299C43v22Ev();
extern void _ZN6S299C43v23Ev();
extern void _ZN6S299C43v24Ev();
extern void _ZN6S299C43v25Ev();
extern void _ZN6S299C33v26Ev();
extern void _ZN6S299C33v27Ev();
extern void _ZN6S299C33v28Ev();
extern void _ZN6S299C33v29Ev();
extern void _ZN6S299C33v30Ev();
extern void _ZN6S299C33v31Ev();
extern void _ZN6S299C33v32Ev();
extern void _ZN6S299C33v33Ev();
extern void _ZN6S299C23v34Ev();
extern void _ZN6S299C23v35Ev();
extern void _ZN6S299C23v36Ev();
extern void _ZN6S299C23v37Ev();
extern void _ZN6S299C23v38Ev();
extern void _ZN6S299C23v39Ev();
static  VTBL_ENTRY vtc_S299C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S299C2[0]),
  (VTBL_ENTRY)&_ZN6S299C2D1Ev,
  (VTBL_ENTRY)&_ZN6S299C2D0Ev,
  (VTBL_ENTRY)&_ZN6S299C53v10Ev,
  (VTBL_ENTRY)&_ZN6S299C53v11Ev,
  (VTBL_ENTRY)&_ZN6S299C53v12Ev,
  (VTBL_ENTRY)&_ZN6S299C53v13Ev,
  (VTBL_ENTRY)&_ZN6S299C53v14Ev,
  (VTBL_ENTRY)&_ZN6S299C43v15Ev,
  (VTBL_ENTRY)&_ZN6S299C43v16Ev,
  (VTBL_ENTRY)&_ZN6S299C43v17Ev,
  (VTBL_ENTRY)&_ZN6S299C43v18Ev,
  (VTBL_ENTRY)&_ZN6S299C43v19Ev,
  (VTBL_ENTRY)&_ZN6S299C43v20Ev,
  (VTBL_ENTRY)&_ZN6S299C43v21Ev,
  (VTBL_ENTRY)&_ZN6S299C43v22Ev,
  (VTBL_ENTRY)&_ZN6S299C43v23Ev,
  (VTBL_ENTRY)&_ZN6S299C43v24Ev,
  (VTBL_ENTRY)&_ZN6S299C43v25Ev,
  (VTBL_ENTRY)&_ZN6S299C33v26Ev,
  (VTBL_ENTRY)&_ZN6S299C33v27Ev,
  (VTBL_ENTRY)&_ZN6S299C33v28Ev,
  (VTBL_ENTRY)&_ZN6S299C33v29Ev,
  (VTBL_ENTRY)&_ZN6S299C33v30Ev,
  (VTBL_ENTRY)&_ZN6S299C33v31Ev,
  (VTBL_ENTRY)&_ZN6S299C33v32Ev,
  (VTBL_ENTRY)&_ZN6S299C33v33Ev,
  (VTBL_ENTRY)&_ZN6S299C23v34Ev,
  (VTBL_ENTRY)&_ZN6S299C23v35Ev,
  (VTBL_ENTRY)&_ZN6S299C23v36Ev,
  (VTBL_ENTRY)&_ZN6S299C23v37Ev,
  (VTBL_ENTRY)&_ZN6S299C23v38Ev,
  (VTBL_ENTRY)&_ZN6S299C23v39Ev,
};
extern VTBL_ENTRY _ZTI6S299C2[];
extern  VTBL_ENTRY _ZTV6S299C2[];
Class_Descriptor cd_S299C2 = {  "S299C2", // class name
  bases_S299C2, 4,
  &(vtc_S299C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,172), // object size
  NSPAIRA(_ZTI6S299C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S299C2),34, //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  S299C1  : S299C2 {
  int s299c1f0;
  ::S303C11_nt s299c1f1;
  void *s299c1f2[2];
  __tsi64 s299c1f3[2];
  virtual void  v1(); // _ZN6S299C12v1Ev
  virtual void  v2(); // _ZN6S299C12v2Ev
  virtual void  v3(); // _ZN6S299C12v3Ev
  virtual void  v4(); // _ZN6S299C12v4Ev
  virtual void  v5(); // _ZN6S299C12v5Ev
  virtual void  v6(); // _ZN6S299C12v6Ev
  virtual void  v7(); // _ZN6S299C12v7Ev
  virtual void  v8(); // _ZN6S299C12v8Ev
  virtual void  v9(); // _ZN6S299C12v9Ev
  ~S299C1(); // tgen
  S299C1(); // tgen
};
//SIG(1 S299C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fi} v10 v11 v12 v13 v14} v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fp[3] FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]}} v26 v27 v28 v29 v30 v31 v32 v33 FC7 FC10{ m Fp} Fp[3]} v34 v35 v36 v37 v38 v39 Fi FC11{ m FC12{ m FL}} FC13{ m FC14{ m Fp Fi FC15{ m}} FC14 FC14 Fi[2] FC14 Fi[2] FC14}} v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi FC11 Fp[2] FL[2]}


void  S299C1 ::v1(){vfunc_called(this, "_ZN6S299C12v1Ev");}
void  S299C1 ::v2(){vfunc_called(this, "_ZN6S299C12v2Ev");}
void  S299C1 ::v3(){vfunc_called(this, "_ZN6S299C12v3Ev");}
void  S299C1 ::v4(){vfunc_called(this, "_ZN6S299C12v4Ev");}
void  S299C1 ::v5(){vfunc_called(this, "_ZN6S299C12v5Ev");}
void  S299C1 ::v6(){vfunc_called(this, "_ZN6S299C12v6Ev");}
void  S299C1 ::v7(){vfunc_called(this, "_ZN6S299C12v7Ev");}
void  S299C1 ::v8(){vfunc_called(this, "_ZN6S299C12v8Ev");}
void  S299C1 ::v9(){vfunc_called(this, "_ZN6S299C12v9Ev");}
S299C1 ::~S299C1(){ note_dtor("S299C1", this);} // tgen
S299C1 ::S299C1(){ note_ctor("S299C1", this);} // tgen

static void Test_S299C1()
{
  extern Class_Descriptor cd_S299C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,53)];
    init_test(&cd_S299C1, buf);
    S299C1 *dp, &lv = *(dp=new (buf) S299C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,208), "sizeof(S299C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S299C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S299C5*)(S299C4*)(S299C3*)(S299C2*), 0, "S299C1");
    check_base_class_offset(lv, (S299C5*)(S299C4*)(S299C3*)(S299C2*), 0, "S299C1");
    check_base_class_offset(lv, (S299C4*)(S299C3*)(S299C2*), 0, "S299C1");
    check_base_class_offset(lv, (S299C3*)(S299C2*), 0, "S299C1");
    check_base_class_offset(lv, (S299C2*), 0, "S299C1");
    check_field_offset(lv, s299c1f0, ABISELECT(264,172), "S299C1.s299c1f0");
    check_field_offset(lv, s299c1f1, ABISELECT(272,176), "S299C1.s299c1f1");
    check_field_offset(lv, s299c1f2, ABISELECT(280,184), "S299C1.s299c1f2");
    check_field_offset(lv, s299c1f3, ABISELECT(296,192), "S299C1.s299c1f3");
    test_class_info(&lv, &cd_S299C1);
    dp->~S299C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS299C1(Test_S299C1, "S299C1", ABISELECT(312,208));

#else // __cplusplus

extern void _ZN6S299C1C1Ev();
extern void _ZN6S299C1D1Ev();
Name_Map name_map_S299C1[] = {
  NSPAIR(_ZN6S299C1C1Ev),
  NSPAIR(_ZN6S299C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S299C5;
extern VTBL_ENTRY _ZTI6S299C5[];
extern  VTBL_ENTRY _ZTV6S299C5[];
extern Class_Descriptor cd_S299C4;
extern VTBL_ENTRY _ZTI6S299C4[];
extern  VTBL_ENTRY _ZTV6S299C4[];
extern Class_Descriptor cd_S299C3;
extern VTBL_ENTRY _ZTI6S299C3[];
extern  VTBL_ENTRY _ZTV6S299C3[];
extern Class_Descriptor cd_S299C2;
extern VTBL_ENTRY _ZTI6S299C2[];
extern  VTBL_ENTRY _ZTV6S299C2[];
static Base_Class bases_S299C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S299C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S299C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S299C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S299C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S299C1[];
extern void _ZN6S299C1D1Ev();
extern void _ZN6S299C1D0Ev();
extern void _ZN6S299C53v10Ev();
extern void _ZN6S299C53v11Ev();
extern void _ZN6S299C53v12Ev();
extern void _ZN6S299C53v13Ev();
extern void _ZN6S299C53v14Ev();
extern void _ZN6S299C43v15Ev();
extern void _ZN6S299C43v16Ev();
extern void _ZN6S299C43v17Ev();
extern void _ZN6S299C43v18Ev();
extern void _ZN6S299C43v19Ev();
extern void _ZN6S299C43v20Ev();
extern void _ZN6S299C43v21Ev();
extern void _ZN6S299C43v22Ev();
extern void _ZN6S299C43v23Ev();
extern void _ZN6S299C43v24Ev();
extern void _ZN6S299C43v25Ev();
extern void _ZN6S299C33v26Ev();
extern void _ZN6S299C33v27Ev();
extern void _ZN6S299C33v28Ev();
extern void _ZN6S299C33v29Ev();
extern void _ZN6S299C33v30Ev();
extern void _ZN6S299C33v31Ev();
extern void _ZN6S299C33v32Ev();
extern void _ZN6S299C33v33Ev();
extern void _ZN6S299C23v34Ev();
extern void _ZN6S299C23v35Ev();
extern void _ZN6S299C23v36Ev();
extern void _ZN6S299C23v37Ev();
extern void _ZN6S299C23v38Ev();
extern void _ZN6S299C23v39Ev();
extern void _ZN6S299C12v1Ev();
extern void _ZN6S299C12v2Ev();
extern void _ZN6S299C12v3Ev();
extern void _ZN6S299C12v4Ev();
extern void _ZN6S299C12v5Ev();
extern void _ZN6S299C12v6Ev();
extern void _ZN6S299C12v7Ev();
extern void _ZN6S299C12v8Ev();
extern void _ZN6S299C12v9Ev();
static  VTBL_ENTRY vtc_S299C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S299C1[0]),
  (VTBL_ENTRY)&_ZN6S299C1D1Ev,
  (VTBL_ENTRY)&_ZN6S299C1D0Ev,
  (VTBL_ENTRY)&_ZN6S299C53v10Ev,
  (VTBL_ENTRY)&_ZN6S299C53v11Ev,
  (VTBL_ENTRY)&_ZN6S299C53v12Ev,
  (VTBL_ENTRY)&_ZN6S299C53v13Ev,
  (VTBL_ENTRY)&_ZN6S299C53v14Ev,
  (VTBL_ENTRY)&_ZN6S299C43v15Ev,
  (VTBL_ENTRY)&_ZN6S299C43v16Ev,
  (VTBL_ENTRY)&_ZN6S299C43v17Ev,
  (VTBL_ENTRY)&_ZN6S299C43v18Ev,
  (VTBL_ENTRY)&_ZN6S299C43v19Ev,
  (VTBL_ENTRY)&_ZN6S299C43v20Ev,
  (VTBL_ENTRY)&_ZN6S299C43v21Ev,
  (VTBL_ENTRY)&_ZN6S299C43v22Ev,
  (VTBL_ENTRY)&_ZN6S299C43v23Ev,
  (VTBL_ENTRY)&_ZN6S299C43v24Ev,
  (VTBL_ENTRY)&_ZN6S299C43v25Ev,
  (VTBL_ENTRY)&_ZN6S299C33v26Ev,
  (VTBL_ENTRY)&_ZN6S299C33v27Ev,
  (VTBL_ENTRY)&_ZN6S299C33v28Ev,
  (VTBL_ENTRY)&_ZN6S299C33v29Ev,
  (VTBL_ENTRY)&_ZN6S299C33v30Ev,
  (VTBL_ENTRY)&_ZN6S299C33v31Ev,
  (VTBL_ENTRY)&_ZN6S299C33v32Ev,
  (VTBL_ENTRY)&_ZN6S299C33v33Ev,
  (VTBL_ENTRY)&_ZN6S299C23v34Ev,
  (VTBL_ENTRY)&_ZN6S299C23v35Ev,
  (VTBL_ENTRY)&_ZN6S299C23v36Ev,
  (VTBL_ENTRY)&_ZN6S299C23v37Ev,
  (VTBL_ENTRY)&_ZN6S299C23v38Ev,
  (VTBL_ENTRY)&_ZN6S299C23v39Ev,
  (VTBL_ENTRY)&_ZN6S299C12v1Ev,
  (VTBL_ENTRY)&_ZN6S299C12v2Ev,
  (VTBL_ENTRY)&_ZN6S299C12v3Ev,
  (VTBL_ENTRY)&_ZN6S299C12v4Ev,
  (VTBL_ENTRY)&_ZN6S299C12v5Ev,
  (VTBL_ENTRY)&_ZN6S299C12v6Ev,
  (VTBL_ENTRY)&_ZN6S299C12v7Ev,
  (VTBL_ENTRY)&_ZN6S299C12v8Ev,
  (VTBL_ENTRY)&_ZN6S299C12v9Ev,
};
extern VTBL_ENTRY _ZTI6S299C1[];
extern  VTBL_ENTRY _ZTV6S299C1[];
Class_Descriptor cd_S299C1 = {  "S299C1", // class name
  bases_S299C1, 5,
  &(vtc_S299C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,208), // object size
  NSPAIRA(_ZTI6S299C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S299C1),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  S315C5  : S770C5_nt {
  virtual void  v4(); // _ZN6S315C52v4Ev
  virtual void  v5(); // _ZN6S315C52v5Ev
  virtual void  v6(); // _ZN6S315C52v6Ev
  virtual void  v7(); // _ZN6S315C52v7Ev
  virtual void  v8(); // _ZN6S315C52v8Ev
  ~S315C5(); // tgen
  S315C5(); // tgen
};
//SIG(-1 S315C5) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S315C5 ::v4(){vfunc_called(this, "_ZN6S315C52v4Ev");}
void  S315C5 ::v5(){vfunc_called(this, "_ZN6S315C52v5Ev");}
void  S315C5 ::v6(){vfunc_called(this, "_ZN6S315C52v6Ev");}
void  S315C5 ::v7(){vfunc_called(this, "_ZN6S315C52v7Ev");}
void  S315C5 ::v8(){vfunc_called(this, "_ZN6S315C52v8Ev");}
S315C5 ::~S315C5(){ note_dtor("S315C5", this);} // tgen
S315C5 ::S315C5(){ note_ctor("S315C5", this);} // tgen

static void Test_S315C5()
{
  extern Class_Descriptor cd_S315C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S315C5, buf);
    S315C5 *dp, &lv = *(dp=new (buf) S315C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S315C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S315C5)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S315C5");
    test_class_info(&lv, &cd_S315C5);
    dp->~S315C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS315C5(Test_S315C5, "S315C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S315C5C1Ev();
extern void _ZN6S315C5D1Ev();
Name_Map name_map_S315C5[] = {
  NSPAIR(_ZN6S315C5C1Ev),
  NSPAIR(_ZN6S315C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S315C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S315C5[];
extern void _ZN6S315C5D1Ev();
extern void _ZN6S315C5D0Ev();
extern void _ZN6S315C52v4Ev();
extern void _ZN6S315C52v5Ev();
extern void _ZN6S315C52v6Ev();
extern void _ZN6S315C52v7Ev();
extern void _ZN6S315C52v8Ev();
static  VTBL_ENTRY vtc_S315C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S315C5[0]),
  (VTBL_ENTRY)&_ZN6S315C5D1Ev,
  (VTBL_ENTRY)&_ZN6S315C5D0Ev,
  (VTBL_ENTRY)&_ZN6S315C52v4Ev,
  (VTBL_ENTRY)&_ZN6S315C52v5Ev,
  (VTBL_ENTRY)&_ZN6S315C52v6Ev,
  (VTBL_ENTRY)&_ZN6S315C52v7Ev,
  (VTBL_ENTRY)&_ZN6S315C52v8Ev,
};
extern VTBL_ENTRY _ZTI6S315C5[];
extern  VTBL_ENTRY _ZTV6S315C5[];
Class_Descriptor cd_S315C5 = {  "S315C5", // class name
  bases_S315C5, 1,
  &(vtc_S315C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S315C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S315C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S315C4  : S315C5 {
  void *s315c4f0[3];
  ::S770C6_nt s315c4f1;
  virtual void  v9(); // _ZN6S315C42v9Ev
  virtual void  v10(); // _ZN6S315C43v10Ev
  virtual void  v11(); // _ZN6S315C43v11Ev
  virtual void  v12(); // _ZN6S315C43v12Ev
  virtual void  v13(); // _ZN6S315C43v13Ev
  virtual void  v14(); // _ZN6S315C43v14Ev
  virtual void  v15(); // _ZN6S315C43v15Ev
  virtual void  v16(); // _ZN6S315C43v16Ev
  virtual void  v17(); // _ZN6S315C43v17Ev
  virtual void  v18(); // _ZN6S315C43v18Ev
  virtual void  v19(); // _ZN6S315C43v19Ev
  ~S315C4(); // tgen
  S315C4(); // tgen
};
//SIG(-1 S315C4) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S315C4 ::v9(){vfunc_called(this, "_ZN6S315C42v9Ev");}
void  S315C4 ::v10(){vfunc_called(this, "_ZN6S315C43v10Ev");}
void  S315C4 ::v11(){vfunc_called(this, "_ZN6S315C43v11Ev");}
void  S315C4 ::v12(){vfunc_called(this, "_ZN6S315C43v12Ev");}
void  S315C4 ::v13(){vfunc_called(this, "_ZN6S315C43v13Ev");}
void  S315C4 ::v14(){vfunc_called(this, "_ZN6S315C43v14Ev");}
void  S315C4 ::v15(){vfunc_called(this, "_ZN6S315C43v15Ev");}
void  S315C4 ::v16(){vfunc_called(this, "_ZN6S315C43v16Ev");}
void  S315C4 ::v17(){vfunc_called(this, "_ZN6S315C43v17Ev");}
void  S315C4 ::v18(){vfunc_called(this, "_ZN6S315C43v18Ev");}
void  S315C4 ::v19(){vfunc_called(this, "_ZN6S315C43v19Ev");}
S315C4 ::~S315C4(){ note_dtor("S315C4", this);} // tgen
S315C4 ::S315C4(){ note_ctor("S315C4", this);} // tgen

static void Test_S315C4()
{
  extern Class_Descriptor cd_S315C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S315C4, buf);
    S315C4 *dp, &lv = *(dp=new (buf) S315C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S315C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S315C4)");
    check_base_class_offset(lv, (S770C5_nt*)(S315C5*), 0, "S315C4");
    check_base_class_offset(lv, (S315C5*), 0, "S315C4");
    check_field_offset(lv, s315c4f0, ABISELECT(16,8), "S315C4.s315c4f0");
    check_field_offset(lv, s315c4f1, ABISELECT(40,20), "S315C4.s315c4f1");
    test_class_info(&lv, &cd_S315C4);
    dp->~S315C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS315C4(Test_S315C4, "S315C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S315C4C1Ev();
extern void _ZN6S315C4D1Ev();
Name_Map name_map_S315C4[] = {
  NSPAIR(_ZN6S315C4C1Ev),
  NSPAIR(_ZN6S315C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S315C5;
extern VTBL_ENTRY _ZTI6S315C5[];
extern  VTBL_ENTRY _ZTV6S315C5[];
static Base_Class bases_S315C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S315C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S315C4[];
extern void _ZN6S315C4D1Ev();
extern void _ZN6S315C4D0Ev();
extern void _ZN6S315C52v4Ev();
extern void _ZN6S315C52v5Ev();
extern void _ZN6S315C52v6Ev();
extern void _ZN6S315C52v7Ev();
extern void _ZN6S315C52v8Ev();
extern void _ZN6S315C42v9Ev();
extern void _ZN6S315C43v10Ev();
extern void _ZN6S315C43v11Ev();
extern void _ZN6S315C43v12Ev();
extern void _ZN6S315C43v13Ev();
extern void _ZN6S315C43v14Ev();
extern void _ZN6S315C43v15Ev();
extern void _ZN6S315C43v16Ev();
extern void _ZN6S315C43v17Ev();
extern void _ZN6S315C43v18Ev();
extern void _ZN6S315C43v19Ev();
static  VTBL_ENTRY vtc_S315C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S315C4[0]),
  (VTBL_ENTRY)&_ZN6S315C4D1Ev,
  (VTBL_ENTRY)&_ZN6S315C4D0Ev,
  (VTBL_ENTRY)&_ZN6S315C52v4Ev,
  (VTBL_ENTRY)&_ZN6S315C52v5Ev,
  (VTBL_ENTRY)&_ZN6S315C52v6Ev,
  (VTBL_ENTRY)&_ZN6S315C52v7Ev,
  (VTBL_ENTRY)&_ZN6S315C52v8Ev,
  (VTBL_ENTRY)&_ZN6S315C42v9Ev,
  (VTBL_ENTRY)&_ZN6S315C43v10Ev,
  (VTBL_ENTRY)&_ZN6S315C43v11Ev,
  (VTBL_ENTRY)&_ZN6S315C43v12Ev,
  (VTBL_ENTRY)&_ZN6S315C43v13Ev,
  (VTBL_ENTRY)&_ZN6S315C43v14Ev,
  (VTBL_ENTRY)&_ZN6S315C43v15Ev,
  (VTBL_ENTRY)&_ZN6S315C43v16Ev,
  (VTBL_ENTRY)&_ZN6S315C43v17Ev,
  (VTBL_ENTRY)&_ZN6S315C43v18Ev,
  (VTBL_ENTRY)&_ZN6S315C43v19Ev,
};
extern VTBL_ENTRY _ZTI6S315C4[];
extern  VTBL_ENTRY _ZTV6S315C4[];
Class_Descriptor cd_S315C4 = {  "S315C4", // class name
  bases_S315C4, 2,
  &(vtc_S315C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S315C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S315C4),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S315C3  : S315C4 {
  ::S770C6_nt s315c3f0;
  ::S770C9_nt s315c3f1;
  void *s315c3f2[3];
  virtual void  v20(); // _ZN6S315C33v20Ev
  virtual void  v21(); // _ZN6S315C33v21Ev
  virtual void  v22(); // _ZN6S315C33v22Ev
  virtual void  v23(); // _ZN6S315C33v23Ev
  virtual void  v24(); // _ZN6S315C33v24Ev
  virtual void  v25(); // _ZN6S315C33v25Ev
  virtual void  v26(); // _ZN6S315C33v26Ev
  virtual void  v27(); // _ZN6S315C33v27Ev
  ~S315C3(); // tgen
  S315C3(); // tgen
};
//SIG(-1 S315C3) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S315C3 ::v20(){vfunc_called(this, "_ZN6S315C33v20Ev");}
void  S315C3 ::v21(){vfunc_called(this, "_ZN6S315C33v21Ev");}
void  S315C3 ::v22(){vfunc_called(this, "_ZN6S315C33v22Ev");}
void  S315C3 ::v23(){vfunc_called(this, "_ZN6S315C33v23Ev");}
void  S315C3 ::v24(){vfunc_called(this, "_ZN6S315C33v24Ev");}
void  S315C3 ::v25(){vfunc_called(this, "_ZN6S315C33v25Ev");}
void  S315C3 ::v26(){vfunc_called(this, "_ZN6S315C33v26Ev");}
void  S315C3 ::v27(){vfunc_called(this, "_ZN6S315C33v27Ev");}
S315C3 ::~S315C3(){ note_dtor("S315C3", this);} // tgen
S315C3 ::S315C3(){ note_ctor("S315C3", this);} // tgen

static void Test_S315C3()
{
  extern Class_Descriptor cd_S315C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S315C3, buf);
    S315C3 *dp, &lv = *(dp=new (buf) S315C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S315C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S315C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S315C5*)(S315C4*), 0, "S315C3");
    check_base_class_offset(lv, (S315C5*)(S315C4*), 0, "S315C3");
    check_base_class_offset(lv, (S315C4*), 0, "S315C3");
    check_field_offset(lv, s315c3f0, ABISELECT(80,44), "S315C3.s315c3f0");
    check_field_offset(lv, s315c3f1, ABISELECT(120,68), "S315C3.s315c3f1");
    check_field_offset(lv, s315c3f2, ABISELECT(128,72), "S315C3.s315c3f2");
    test_class_info(&lv, &cd_S315C3);
    dp->~S315C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS315C3(Test_S315C3, "S315C3", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S315C3C1Ev();
extern void _ZN6S315C3D1Ev();
Name_Map name_map_S315C3[] = {
  NSPAIR(_ZN6S315C3C1Ev),
  NSPAIR(_ZN6S315C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S315C5;
extern VTBL_ENTRY _ZTI6S315C5[];
extern  VTBL_ENTRY _ZTV6S315C5[];
extern Class_Descriptor cd_S315C4;
extern VTBL_ENTRY _ZTI6S315C4[];
extern  VTBL_ENTRY _ZTV6S315C4[];
static Base_Class bases_S315C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S315C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S315C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S315C3[];
extern void _ZN6S315C3D1Ev();
extern void _ZN6S315C3D0Ev();
extern void _ZN6S315C52v4Ev();
extern void _ZN6S315C52v5Ev();
extern void _ZN6S315C52v6Ev();
extern void _ZN6S315C52v7Ev();
extern void _ZN6S315C52v8Ev();
extern void _ZN6S315C42v9Ev();
extern void _ZN6S315C43v10Ev();
extern void _ZN6S315C43v11Ev();
extern void _ZN6S315C43v12Ev();
extern void _ZN6S315C43v13Ev();
extern void _ZN6S315C43v14Ev();
extern void _ZN6S315C43v15Ev();
extern void _ZN6S315C43v16Ev();
extern void _ZN6S315C43v17Ev();
extern void _ZN6S315C43v18Ev();
extern void _ZN6S315C43v19Ev();
extern void _ZN6S315C33v20Ev();
extern void _ZN6S315C33v21Ev();
extern void _ZN6S315C33v22Ev();
extern void _ZN6S315C33v23Ev();
extern void _ZN6S315C33v24Ev();
extern void _ZN6S315C33v25Ev();
extern void _ZN6S315C33v26Ev();
extern void _ZN6S315C33v27Ev();
static  VTBL_ENTRY vtc_S315C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S315C3[0]),
  (VTBL_ENTRY)&_ZN6S315C3D1Ev,
  (VTBL_ENTRY)&_ZN6S315C3D0Ev,
  (VTBL_ENTRY)&_ZN6S315C52v4Ev,
  (VTBL_ENTRY)&_ZN6S315C52v5Ev,
  (VTBL_ENTRY)&_ZN6S315C52v6Ev,
  (VTBL_ENTRY)&_ZN6S315C52v7Ev,
  (VTBL_ENTRY)&_ZN6S315C52v8Ev,
  (VTBL_ENTRY)&_ZN6S315C42v9Ev,
  (VTBL_ENTRY)&_ZN6S315C43v10Ev,
  (VTBL_ENTRY)&_ZN6S315C43v11Ev,
  (VTBL_ENTRY)&_ZN6S315C43v12Ev,
  (VTBL_ENTRY)&_ZN6S315C43v13Ev,
  (VTBL_ENTRY)&_ZN6S315C43v14Ev,
  (VTBL_ENTRY)&_ZN6S315C43v15Ev,
  (VTBL_ENTRY)&_ZN6S315C43v16Ev,
  (VTBL_ENTRY)&_ZN6S315C43v17Ev,
  (VTBL_ENTRY)&_ZN6S315C43v18Ev,
  (VTBL_ENTRY)&_ZN6S315C43v19Ev,
  (VTBL_ENTRY)&_ZN6S315C33v20Ev,
  (VTBL_ENTRY)&_ZN6S315C33v21Ev,
  (VTBL_ENTRY)&_ZN6S315C33v22Ev,
  (VTBL_ENTRY)&_ZN6S315C33v23Ev,
  (VTBL_ENTRY)&_ZN6S315C33v24Ev,
  (VTBL_ENTRY)&_ZN6S315C33v25Ev,
  (VTBL_ENTRY)&_ZN6S315C33v26Ev,
  (VTBL_ENTRY)&_ZN6S315C33v27Ev,
};
extern VTBL_ENTRY _ZTI6S315C3[];
extern  VTBL_ENTRY _ZTV6S315C3[];
Class_Descriptor cd_S315C3 = {  "S315C3", // class name
  bases_S315C3, 3,
  &(vtc_S315C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S315C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S315C3),28, //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  S315C2  : S315C3 {
  int s315c2f0;
  ::S303C11_nt s315c2f1;
  void *s315c2f2[4];
  __tsi64 s315c2f3[2];
  void *s315c2f4;
  char s315c2f5;
  ::S2215C19_nt s315c2f6;
  virtual void  v28(); // _ZN6S315C23v28Ev
  virtual void  v29(); // _ZN6S315C23v29Ev
  virtual void  v30(); // _ZN6S315C23v30Ev
  virtual void  v31(); // _ZN6S315C23v31Ev
  virtual void  v32(); // _ZN6S315C23v32Ev
  virtual void  v33(); // _ZN6S315C23v33Ev
  virtual void  v34(); // _ZN6S315C23v34Ev
  virtual void  v35(); // _ZN6S315C23v35Ev
  virtual void  v36(); // _ZN6S315C23v36Ev
  virtual void  v37(); // _ZN6S315C23v37Ev
  virtual void  v38(); // _ZN6S315C23v38Ev
  virtual void  v39(); // _ZN6S315C23v39Ev
  virtual void  v40(); // _ZN6S315C23v40Ev
  virtual void  v41(); // _ZN6S315C23v41Ev
  ~S315C2(); // tgen
  S315C2(); // tgen
};
//SIG(-1 S315C2) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v15 v16 v17 v18 v19} v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v31 v32 v33 v34 v35 v36 v37 v38 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fi FC10{ m FC11{ m FL}} Fp[4] FL[2] Fp Fc FC12{ m FC13{ m Fp Fi FC14{ m}} Fi}}


void  S315C2 ::v28(){vfunc_called(this, "_ZN6S315C23v28Ev");}
void  S315C2 ::v29(){vfunc_called(this, "_ZN6S315C23v29Ev");}
void  S315C2 ::v30(){vfunc_called(this, "_ZN6S315C23v30Ev");}
void  S315C2 ::v31(){vfunc_called(this, "_ZN6S315C23v31Ev");}
void  S315C2 ::v32(){vfunc_called(this, "_ZN6S315C23v32Ev");}
void  S315C2 ::v33(){vfunc_called(this, "_ZN6S315C23v33Ev");}
void  S315C2 ::v34(){vfunc_called(this, "_ZN6S315C23v34Ev");}
void  S315C2 ::v35(){vfunc_called(this, "_ZN6S315C23v35Ev");}
void  S315C2 ::v36(){vfunc_called(this, "_ZN6S315C23v36Ev");}
void  S315C2 ::v37(){vfunc_called(this, "_ZN6S315C23v37Ev");}
void  S315C2 ::v38(){vfunc_called(this, "_ZN6S315C23v38Ev");}
void  S315C2 ::v39(){vfunc_called(this, "_ZN6S315C23v39Ev");}
void  S315C2 ::v40(){vfunc_called(this, "_ZN6S315C23v40Ev");}
void  S315C2 ::v41(){vfunc_called(this, "_ZN6S315C23v41Ev");}
S315C2 ::~S315C2(){ note_dtor("S315C2", this);} // tgen
S315C2 ::S315C2(){ note_ctor("S315C2", this);} // tgen

static void Test_S315C2()
{
  extern Class_Descriptor cd_S315C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,39)];
    init_test(&cd_S315C2, buf);
    S315C2 *dp, &lv = *(dp=new (buf) S315C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,152), "sizeof(S315C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S315C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S315C5*)(S315C4*)(S315C3*), 0, "S315C2");
    check_base_class_offset(lv, (S315C5*)(S315C4*)(S315C3*), 0, "S315C2");
    check_base_class_offset(lv, (S315C4*)(S315C3*), 0, "S315C2");
    check_base_class_offset(lv, (S315C3*), 0, "S315C2");
    check_field_offset(lv, s315c2f0, ABISELECT(152,84), "S315C2.s315c2f0");
    check_field_offset(lv, s315c2f1, ABISELECT(160,88), "S315C2.s315c2f1");
    check_field_offset(lv, s315c2f2, ABISELECT(168,96), "S315C2.s315c2f2");
    check_field_offset(lv, s315c2f3, ABISELECT(200,112), "S315C2.s315c2f3");
    check_field_offset(lv, s315c2f4, ABISELECT(216,128), "S315C2.s315c2f4");
    check_field_offset(lv, s315c2f5, ABISELECT(224,132), "S315C2.s315c2f5");
    check_field_offset(lv, s315c2f6, ABISELECT(232,136), "S315C2.s315c2f6");
    test_class_info(&lv, &cd_S315C2);
    dp->~S315C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS315C2(Test_S315C2, "S315C2", ABISELECT(256,152));

#else // __cplusplus

extern void _ZN6S315C2C1Ev();
extern void _ZN6S315C2D1Ev();
Name_Map name_map_S315C2[] = {
  NSPAIR(_ZN6S315C2C1Ev),
  NSPAIR(_ZN6S315C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S315C5;
extern VTBL_ENTRY _ZTI6S315C5[];
extern  VTBL_ENTRY _ZTV6S315C5[];
extern Class_Descriptor cd_S315C4;
extern VTBL_ENTRY _ZTI6S315C4[];
extern  VTBL_ENTRY _ZTV6S315C4[];
extern Class_Descriptor cd_S315C3;
extern VTBL_ENTRY _ZTI6S315C3[];
extern  VTBL_ENTRY _ZTV6S315C3[];
static Base_Class bases_S315C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S315C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S315C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S315C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S315C2[];
extern void _ZN6S315C2D1Ev();
extern void _ZN6S315C2D0Ev();
extern void _ZN6S315C52v4Ev();
extern void _ZN6S315C52v5Ev();
extern void _ZN6S315C52v6Ev();
extern void _ZN6S315C52v7Ev();
extern void _ZN6S315C52v8Ev();
extern void _ZN6S315C42v9Ev();
extern void _ZN6S315C43v10Ev();
extern void _ZN6S315C43v11Ev();
extern void _ZN6S315C43v12Ev();
extern void _ZN6S315C43v13Ev();
extern void _ZN6S315C43v14Ev();
extern void _ZN6S315C43v15Ev();
extern void _ZN6S315C43v16Ev();
extern void _ZN6S315C43v17Ev();
extern void _ZN6S315C43v18Ev();
extern void _ZN6S315C43v19Ev();
extern void _ZN6S315C33v20Ev();
extern void _ZN6S315C33v21Ev();
extern void _ZN6S315C33v22Ev();
extern void _ZN6S315C33v23Ev();
extern void _ZN6S315C33v24Ev();
extern void _ZN6S315C33v25Ev();
extern void _ZN6S315C33v26Ev();
extern void _ZN6S315C33v27Ev();
extern void _ZN6S315C23v28Ev();
extern void _ZN6S315C23v29Ev();
extern void _ZN6S315C23v30Ev();
extern void _ZN6S315C23v31Ev();
extern void _ZN6S315C23v32Ev();
extern void _ZN6S315C23v33Ev();
extern void _ZN6S315C23v34Ev();
extern void _ZN6S315C23v35Ev();
extern void _ZN6S315C23v36Ev();
extern void _ZN6S315C23v37Ev();
extern void _ZN6S315C23v38Ev();
extern void _ZN6S315C23v39Ev();
extern void _ZN6S315C23v40Ev();
extern void _ZN6S315C23v41Ev();
static  VTBL_ENTRY vtc_S315C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S315C2[0]),
  (VTBL_ENTRY)&_ZN6S315C2D1Ev,
  (VTBL_ENTRY)&_ZN6S315C2D0Ev,
  (VTBL_ENTRY)&_ZN6S315C52v4Ev,
  (VTBL_ENTRY)&_ZN6S315C52v5Ev,
  (VTBL_ENTRY)&_ZN6S315C52v6Ev,
  (VTBL_ENTRY)&_ZN6S315C52v7Ev,
  (VTBL_ENTRY)&_ZN6S315C52v8Ev,
  (VTBL_ENTRY)&_ZN6S315C42v9Ev,
  (VTBL_ENTRY)&_ZN6S315C43v10Ev,
  (VTBL_ENTRY)&_ZN6S315C43v11Ev,
  (VTBL_ENTRY)&_ZN6S315C43v12Ev,
  (VTBL_ENTRY)&_ZN6S315C43v13Ev,
  (VTBL_ENTRY)&_ZN6S315C43v14Ev,
  (VTBL_ENTRY)&_ZN6S315C43v15Ev,
  (VTBL_ENTRY)&_ZN6S315C43v16Ev,
  (VTBL_ENTRY)&_ZN6S315C43v17Ev,
  (VTBL_ENTRY)&_ZN6S315C43v18Ev,
  (VTBL_ENTRY)&_ZN6S315C43v19Ev,
  (VTBL_ENTRY)&_ZN6S315C33v20Ev,
  (VTBL_ENTRY)&_ZN6S315C33v21Ev,
  (VTBL_ENTRY)&_ZN6S315C33v22Ev,
  (VTBL_ENTRY)&_ZN6S315C33v23Ev,
  (VTBL_ENTRY)&_ZN6S315C33v24Ev,
  (VTBL_ENTRY)&_ZN6S315C33v25Ev,
  (VTBL_ENTRY)&_ZN6S315C33v26Ev,
  (VTBL_ENTRY)&_ZN6S315C33v27Ev,
  (VTBL_ENTRY)&_ZN6S315C23v28Ev,
  (VTBL_ENTRY)&_ZN6S315C23v29Ev,
  (VTBL_ENTRY)&_ZN6S315C23v30Ev,
  (VTBL_ENTRY)&_ZN6S315C23v31Ev,
  (VTBL_ENTRY)&_ZN6S315C23v32Ev,
  (VTBL_ENTRY)&_ZN6S315C23v33Ev,
  (VTBL_ENTRY)&_ZN6S315C23v34Ev,
  (VTBL_ENTRY)&_ZN6S315C23v35Ev,
  (VTBL_ENTRY)&_ZN6S315C23v36Ev,
  (VTBL_ENTRY)&_ZN6S315C23v37Ev,
  (VTBL_ENTRY)&_ZN6S315C23v38Ev,
  (VTBL_ENTRY)&_ZN6S315C23v39Ev,
  (VTBL_ENTRY)&_ZN6S315C23v40Ev,
  (VTBL_ENTRY)&_ZN6S315C23v41Ev,
};
extern VTBL_ENTRY _ZTI6S315C2[];
extern  VTBL_ENTRY _ZTV6S315C2[];
Class_Descriptor cd_S315C2 = {  "S315C2", // class name
  bases_S315C2, 4,
  &(vtc_S315C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,152), // object size
  NSPAIRA(_ZTI6S315C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S315C2),42, //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  S315C1  : S315C2 {
  ::S2215C19_nt s315c1f0;
  virtual void  v1(); // _ZN6S315C12v1Ev
  virtual void  v2(); // _ZN6S315C12v2Ev
  virtual void  v3(); // _ZN6S315C12v3Ev
  ~S315C1(); // tgen
  S315C1(); // tgen
};
//SIG(1 S315C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fi} v4 v5 v6 v7 v8} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]}} v20 v21 v22 v23 v24 v25 v26 v27 FC7 FC10{ m Fp} Fp[3]} v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 Fi FC11{ m FC12{ m FL}} Fp[4] FL[2] Fp Fc FC13{ m FC14{ m Fp Fi FC15{ m}} Fi}} v1 v2 v3 FC13}


void  S315C1 ::v1(){vfunc_called(this, "_ZN6S315C12v1Ev");}
void  S315C1 ::v2(){vfunc_called(this, "_ZN6S315C12v2Ev");}
void  S315C1 ::v3(){vfunc_called(this, "_ZN6S315C12v3Ev");}
S315C1 ::~S315C1(){ note_dtor("S315C1", this);} // tgen
S315C1 ::S315C1(){ note_ctor("S315C1", this);} // tgen

static void Test_S315C1()
{
  extern Class_Descriptor cd_S315C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,43)];
    init_test(&cd_S315C1, buf);
    S315C1 *dp, &lv = *(dp=new (buf) S315C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,168), "sizeof(S315C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S315C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S315C5*)(S315C4*)(S315C3*)(S315C2*), 0, "S315C1");
    check_base_class_offset(lv, (S315C5*)(S315C4*)(S315C3*)(S315C2*), 0, "S315C1");
    check_base_class_offset(lv, (S315C4*)(S315C3*)(S315C2*), 0, "S315C1");
    check_base_class_offset(lv, (S315C3*)(S315C2*), 0, "S315C1");
    check_base_class_offset(lv, (S315C2*), 0, "S315C1");
    check_field_offset(lv, s315c1f0, ABISELECT(256,152), "S315C1.s315c1f0");
    test_class_info(&lv, &cd_S315C1);
    dp->~S315C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS315C1(Test_S315C1, "S315C1", ABISELECT(280,168));

#else // __cplusplus

extern void _ZN6S315C1C1Ev();
extern void _ZN6S315C1D1Ev();
Name_Map name_map_S315C1[] = {
  NSPAIR(_ZN6S315C1C1Ev),
  NSPAIR(_ZN6S315C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S315C5;
extern VTBL_ENTRY _ZTI6S315C5[];
extern  VTBL_ENTRY _ZTV6S315C5[];
extern Class_Descriptor cd_S315C4;
extern VTBL_ENTRY _ZTI6S315C4[];
extern  VTBL_ENTRY _ZTV6S315C4[];
extern Class_Descriptor cd_S315C3;
extern VTBL_ENTRY _ZTI6S315C3[];
extern  VTBL_ENTRY _ZTV6S315C3[];
extern Class_Descriptor cd_S315C2;
extern VTBL_ENTRY _ZTI6S315C2[];
extern  VTBL_ENTRY _ZTV6S315C2[];
static Base_Class bases_S315C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S315C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S315C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S315C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S315C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S315C1[];
extern void _ZN6S315C1D1Ev();
extern void _ZN6S315C1D0Ev();
extern void _ZN6S315C52v4Ev();
extern void _ZN6S315C52v5Ev();
extern void _ZN6S315C52v6Ev();
extern void _ZN6S315C52v7Ev();
extern void _ZN6S315C52v8Ev();
extern void _ZN6S315C42v9Ev();
extern void _ZN6S315C43v10Ev();
extern void _ZN6S315C43v11Ev();
extern void _ZN6S315C43v12Ev();
extern void _ZN6S315C43v13Ev();
extern void _ZN6S315C43v14Ev();
extern void _ZN6S315C43v15Ev();
extern void _ZN6S315C43v16Ev();
extern void _ZN6S315C43v17Ev();
extern void _ZN6S315C43v18Ev();
extern void _ZN6S315C43v19Ev();
extern void _ZN6S315C33v20Ev();
extern void _ZN6S315C33v21Ev();
extern void _ZN6S315C33v22Ev();
extern void _ZN6S315C33v23Ev();
extern void _ZN6S315C33v24Ev();
extern void _ZN6S315C33v25Ev();
extern void _ZN6S315C33v26Ev();
extern void _ZN6S315C33v27Ev();
extern void _ZN6S315C23v28Ev();
extern void _ZN6S315C23v29Ev();
extern void _ZN6S315C23v30Ev();
extern void _ZN6S315C23v31Ev();
extern void _ZN6S315C23v32Ev();
extern void _ZN6S315C23v33Ev();
extern void _ZN6S315C23v34Ev();
extern void _ZN6S315C23v35Ev();
extern void _ZN6S315C23v36Ev();
extern void _ZN6S315C23v37Ev();
extern void _ZN6S315C23v38Ev();
extern void _ZN6S315C23v39Ev();
extern void _ZN6S315C23v40Ev();
extern void _ZN6S315C23v41Ev();
extern void _ZN6S315C12v1Ev();
extern void _ZN6S315C12v2Ev();
extern void _ZN6S315C12v3Ev();
static  VTBL_ENTRY vtc_S315C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S315C1[0]),
  (VTBL_ENTRY)&_ZN6S315C1D1Ev,
  (VTBL_ENTRY)&_ZN6S315C1D0Ev,
  (VTBL_ENTRY)&_ZN6S315C52v4Ev,
  (VTBL_ENTRY)&_ZN6S315C52v5Ev,
  (VTBL_ENTRY)&_ZN6S315C52v6Ev,
  (VTBL_ENTRY)&_ZN6S315C52v7Ev,
  (VTBL_ENTRY)&_ZN6S315C52v8Ev,
  (VTBL_ENTRY)&_ZN6S315C42v9Ev,
  (VTBL_ENTRY)&_ZN6S315C43v10Ev,
  (VTBL_ENTRY)&_ZN6S315C43v11Ev,
  (VTBL_ENTRY)&_ZN6S315C43v12Ev,
  (VTBL_ENTRY)&_ZN6S315C43v13Ev,
  (VTBL_ENTRY)&_ZN6S315C43v14Ev,
  (VTBL_ENTRY)&_ZN6S315C43v15Ev,
  (VTBL_ENTRY)&_ZN6S315C43v16Ev,
  (VTBL_ENTRY)&_ZN6S315C43v17Ev,
  (VTBL_ENTRY)&_ZN6S315C43v18Ev,
  (VTBL_ENTRY)&_ZN6S315C43v19Ev,
  (VTBL_ENTRY)&_ZN6S315C33v20Ev,
  (VTBL_ENTRY)&_ZN6S315C33v21Ev,
  (VTBL_ENTRY)&_ZN6S315C33v22Ev,
  (VTBL_ENTRY)&_ZN6S315C33v23Ev,
  (VTBL_ENTRY)&_ZN6S315C33v24Ev,
  (VTBL_ENTRY)&_ZN6S315C33v25Ev,
  (VTBL_ENTRY)&_ZN6S315C33v26Ev,
  (VTBL_ENTRY)&_ZN6S315C33v27Ev,
  (VTBL_ENTRY)&_ZN6S315C23v28Ev,
  (VTBL_ENTRY)&_ZN6S315C23v29Ev,
  (VTBL_ENTRY)&_ZN6S315C23v30Ev,
  (VTBL_ENTRY)&_ZN6S315C23v31Ev,
  (VTBL_ENTRY)&_ZN6S315C23v32Ev,
  (VTBL_ENTRY)&_ZN6S315C23v33Ev,
  (VTBL_ENTRY)&_ZN6S315C23v34Ev,
  (VTBL_ENTRY)&_ZN6S315C23v35Ev,
  (VTBL_ENTRY)&_ZN6S315C23v36Ev,
  (VTBL_ENTRY)&_ZN6S315C23v37Ev,
  (VTBL_ENTRY)&_ZN6S315C23v38Ev,
  (VTBL_ENTRY)&_ZN6S315C23v39Ev,
  (VTBL_ENTRY)&_ZN6S315C23v40Ev,
  (VTBL_ENTRY)&_ZN6S315C23v41Ev,
  (VTBL_ENTRY)&_ZN6S315C12v1Ev,
  (VTBL_ENTRY)&_ZN6S315C12v2Ev,
  (VTBL_ENTRY)&_ZN6S315C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S315C1[];
extern  VTBL_ENTRY _ZTV6S315C1[];
Class_Descriptor cd_S315C1 = {  "S315C1", // class name
  bases_S315C1, 5,
  &(vtc_S315C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,168), // object size
  NSPAIRA(_ZTI6S315C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S315C1),45, //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  S20015C2  {
  int s20015c2f0;
  void *s20015c2f1;
  ::S281C37_nt s20015c2f2;
  virtual void  v2(); // _ZN8S20015C22v2Ev
  ~S20015C2(); // tgen
  S20015C2(); // tgen
};
//SIG(-1 S20015C2) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S20015C2()
{
  extern Class_Descriptor cd_S20015C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20015C2, buf);
    S20015C2 *dp, &lv = *(dp=new (buf) S20015C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20015C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20015C2)");
    check_field_offset(lv, s20015c2f0, ABISELECT(8,4), "S20015C2.s20015c2f0");
    check_field_offset(lv, s20015c2f1, ABISELECT(16,8), "S20015C2.s20015c2f1");
    check_field_offset(lv, s20015c2f2, ABISELECT(24,12), "S20015C2.s20015c2f2");
    test_class_info(&lv, &cd_S20015C2);
    dp->~S20015C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20015C2(Test_S20015C2, "S20015C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20015C2C1Ev();
extern void _ZN8S20015C2D1Ev();
Name_Map name_map_S20015C2[] = {
  NSPAIR(_ZN8S20015C2C1Ev),
  NSPAIR(_ZN8S20015C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20015C2[];
extern void _ZN8S20015C22v2Ev();
static  VTBL_ENTRY vtc_S20015C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20015C2[0]),
  (VTBL_ENTRY)&_ZN8S20015C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S20015C2[];
extern  VTBL_ENTRY _ZTV8S20015C2[];
Class_Descriptor cd_S20015C2 = {  "S20015C2", // class name
  0,0,//no base classes
  &(vtc_S20015C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20015C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20015C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20015C1  : virtual S20015C2 {
  long s20015c1f0;
  int s20015c1f1;
  ::S20176C3_nt s20015c1f2;
  ::S20968C13 s20015c1f3;
  int s20015c1f4;
  void *s20015c1f5[2];
  int s20015c1f6[11];
  ::S20177C17 s20015c1f7;
  virtual void  v1(); // _ZN8S20015C12v1Ev
  ~S20015C1(); // tgen
  S20015C1(); // tgen
};
//SIG(1 S20015C1) C1{ VBC2{ v2 Fi Fp FC3{ m Fp[2]}} v1 Fl Fi FC4{} FC5{ VBC6{ VBC7{ BC8{ v3 Fi Fp FC3} VBC9{ v4 Fi[6] Fc:2 FD Fp[2] Fi FD FC4 FC3 FC3[9] Fp FC8 FC8} VBC3 v5 Fp FL Fc[2] FC9 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC3} VBC10{ VBC6 BC9 BC3 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC7 Fp Fs Fl Fi FL FC7[4] Fi} Fi Fp[2] Fi[11] FC11{ v7 Fl Fc Fs[2]}}


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

static void Test_S20015C1()
{
  extern Class_Descriptor cd_S20015C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(372,809)];
    init_test(&cd_S20015C1, buf);
    S20015C1 *dp, &lv = *(dp=new (buf) S20015C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5936,3232), "sizeof(S20015C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20015C1)");
    check_base_class_offset(lv, (S20015C2*), ABISELECT(5888,3212), "S20015C1");
    check_field_offset(lv, s20015c1f0, ABISELECT(8,4), "S20015C1.s20015c1f0");
    check_field_offset(lv, s20015c1f1, ABISELECT(16,8), "S20015C1.s20015c1f1");
    check_field_offset(lv, s20015c1f2, ABISELECT(20,12), "S20015C1.s20015c1f2");
    check_field_offset(lv, s20015c1f3, ABISELECT(32,16), "S20015C1.s20015c1f3");
    check_field_offset(lv, s20015c1f4, ABISELECT(5792,3140), "S20015C1.s20015c1f4");
    check_field_offset(lv, s20015c1f5, ABISELECT(5800,3144), "S20015C1.s20015c1f5");
    check_field_offset(lv, s20015c1f6, ABISELECT(5816,3152), "S20015C1.s20015c1f6");
    check_field_offset(lv, s20015c1f7, ABISELECT(5864,3196), "S20015C1.s20015c1f7");
    test_class_info(&lv, &cd_S20015C1);
    dp->~S20015C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20015C1(Test_S20015C1, "S20015C1", ABISELECT(5936,3232));

#else // __cplusplus

extern void _ZN8S20015C1C1Ev();
extern void _ZN8S20015C1D1Ev();
Name_Map name_map_S20015C1[] = {
  NSPAIR(_ZN8S20015C1C1Ev),
  NSPAIR(_ZN8S20015C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20015C2;
extern VTBL_ENTRY _ZTI8S20015C2[];
extern  VTBL_ENTRY _ZTV8S20015C2[];
static Base_Class bases_S20015C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20015C2,    ABISELECT(5888,3212), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20015C1[];
extern void _ZN8S20015C12v1Ev();
extern void _ZN8S20015C22v2Ev();
static  VTBL_ENTRY vtc_S20015C1[] = {
  ABISELECT(5888,3212),
  0,
  (VTBL_ENTRY)&(_ZTI8S20015C1[0]),
  (VTBL_ENTRY)&_ZN8S20015C12v1Ev,
  0,
  ABISELECT(-5888,-3212),
  (VTBL_ENTRY)&(_ZTI8S20015C1[0]),
  (VTBL_ENTRY)&_ZN8S20015C22v2Ev,
};
extern VTBL_ENTRY _ZTV8S20015C1[];
static  VTT_ENTRY vtt_S20015C1[] = {
  {&(_ZTV8S20015C1[3]),  3,8},
  {&(_ZTV8S20015C1[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S20015C1[];
extern  VTBL_ENTRY _ZTV8S20015C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20015C1[];
Class_Descriptor cd_S20015C1 = {  "S20015C1", // class name
  bases_S20015C1, 1,
  &(vtc_S20015C1[0]), // expected_vtbl_contents
  &(vtt_S20015C1[0]), // expected_vtt_contents
  ABISELECT(5936,3232), // object size
  NSPAIRA(_ZTI8S20015C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20015C1),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20015C1),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  S3028C3  {
  void *s3028c3f0;
  ::S2215C25 s3028c3f1;
  virtual  ~S3028C3(); // _ZN7S3028C3D1Ev
  virtual void  v14(); // _ZN7S3028C33v14Ev
  virtual void  v15(); // _ZN7S3028C33v15Ev
  virtual void  v16(); // _ZN7S3028C33v16Ev
  virtual void  v17(); // _ZN7S3028C33v17Ev
  virtual void  v18(); // _ZN7S3028C33v18Ev
  virtual void  v19(); // _ZN7S3028C33v19Ev
  virtual void  v20(); // _ZN7S3028C33v20Ev
  virtual void  v21(); // _ZN7S3028C33v21Ev
  virtual void  v22(); // _ZN7S3028C33v22Ev
  virtual void  v23(); // _ZN7S3028C33v23Ev
  virtual void  v24(); // _ZN7S3028C33v24Ev
  virtual void  v25(); // _ZN7S3028C33v25Ev
  virtual void  v26(); // _ZN7S3028C33v26Ev
  virtual void  v27(); // _ZN7S3028C33v27Ev
  virtual void  v28(); // _ZN7S3028C33v28Ev
  S3028C3(); // tgen
};
//SIG(-1 S3028C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}}}


 S3028C3 ::~S3028C3(){ note_dtor("S3028C3", this);}
void  S3028C3 ::v14(){vfunc_called(this, "_ZN7S3028C33v14Ev");}
void  S3028C3 ::v15(){vfunc_called(this, "_ZN7S3028C33v15Ev");}
void  S3028C3 ::v16(){vfunc_called(this, "_ZN7S3028C33v16Ev");}
void  S3028C3 ::v17(){vfunc_called(this, "_ZN7S3028C33v17Ev");}
void  S3028C3 ::v18(){vfunc_called(this, "_ZN7S3028C33v18Ev");}
void  S3028C3 ::v19(){vfunc_called(this, "_ZN7S3028C33v19Ev");}
void  S3028C3 ::v20(){vfunc_called(this, "_ZN7S3028C33v20Ev");}
void  S3028C3 ::v21(){vfunc_called(this, "_ZN7S3028C33v21Ev");}
void  S3028C3 ::v22(){vfunc_called(this, "_ZN7S3028C33v22Ev");}
void  S3028C3 ::v23(){vfunc_called(this, "_ZN7S3028C33v23Ev");}
void  S3028C3 ::v24(){vfunc_called(this, "_ZN7S3028C33v24Ev");}
void  S3028C3 ::v25(){vfunc_called(this, "_ZN7S3028C33v25Ev");}
void  S3028C3 ::v26(){vfunc_called(this, "_ZN7S3028C33v26Ev");}
void  S3028C3 ::v27(){vfunc_called(this, "_ZN7S3028C33v27Ev");}
void  S3028C3 ::v28(){vfunc_called(this, "_ZN7S3028C33v28Ev");}
S3028C3 ::S3028C3(){ note_ctor("S3028C3", this);} // tgen

static void Test_S3028C3()
{
  extern Class_Descriptor cd_S3028C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3028C3, buf);
    S3028C3 *dp, &lv = *(dp=new (buf) S3028C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3028C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3028C3)");
    check_field_offset(lv, s3028c3f0, ABISELECT(8,4), "S3028C3.s3028c3f0");
    check_field_offset(lv, s3028c3f1, ABISELECT(16,8), "S3028C3.s3028c3f1");
    test_class_info(&lv, &cd_S3028C3);
    dp->~S3028C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3028C3(Test_S3028C3, "S3028C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3028C3C1Ev();
extern void _ZN7S3028C3D1Ev();
Name_Map name_map_S3028C3[] = {
  NSPAIR(_ZN7S3028C3C1Ev),
  NSPAIR(_ZN7S3028C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3028C3[];
extern void _ZN7S3028C3D1Ev();
extern void _ZN7S3028C3D0Ev();
extern void _ZN7S3028C33v14Ev();
extern void _ZN7S3028C33v15Ev();
extern void _ZN7S3028C33v16Ev();
extern void _ZN7S3028C33v17Ev();
extern void _ZN7S3028C33v18Ev();
extern void _ZN7S3028C33v19Ev();
extern void _ZN7S3028C33v20Ev();
extern void _ZN7S3028C33v21Ev();
extern void _ZN7S3028C33v22Ev();
extern void _ZN7S3028C33v23Ev();
extern void _ZN7S3028C33v24Ev();
extern void _ZN7S3028C33v25Ev();
extern void _ZN7S3028C33v26Ev();
extern void _ZN7S3028C33v27Ev();
extern void _ZN7S3028C33v28Ev();
static  VTBL_ENTRY vtc_S3028C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3028C3[0]),
  (VTBL_ENTRY)&_ZN7S3028C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3028C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v28Ev,
};
extern VTBL_ENTRY _ZTI7S3028C3[];
extern  VTBL_ENTRY _ZTV7S3028C3[];
Class_Descriptor cd_S3028C3 = {  "S3028C3", // class name
  0,0,//no base classes
  &(vtc_S3028C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3028C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3028C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3028C2  : S3028C3 {
  ::S3047C24_nt s3028c2f0;
  virtual  ~S3028C2(); // _ZN7S3028C2D1Ev
  virtual void  v29(); // _ZN7S3028C23v29Ev
  virtual void  v30(); // _ZN7S3028C23v30Ev
  virtual void  v31(); // _ZN7S3028C23v31Ev
  virtual void  v32(); // _ZN7S3028C23v32Ev
  virtual void  v33(); // _ZN7S3028C23v33Ev
  S3028C2(); // tgen
};
//SIG(-1 S3028C2) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC5}}} vd v1 v2 v3 v4 v5 FC6{ m Fp Fi[2] FC7{ m}}}


 S3028C2 ::~S3028C2(){ note_dtor("S3028C2", this);}
void  S3028C2 ::v29(){vfunc_called(this, "_ZN7S3028C23v29Ev");}
void  S3028C2 ::v30(){vfunc_called(this, "_ZN7S3028C23v30Ev");}
void  S3028C2 ::v31(){vfunc_called(this, "_ZN7S3028C23v31Ev");}
void  S3028C2 ::v32(){vfunc_called(this, "_ZN7S3028C23v32Ev");}
void  S3028C2 ::v33(){vfunc_called(this, "_ZN7S3028C23v33Ev");}
S3028C2 ::S3028C2(){ note_ctor("S3028C2", this);} // tgen

static void Test_S3028C2()
{
  extern Class_Descriptor cd_S3028C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3028C2, buf);
    S3028C2 *dp, &lv = *(dp=new (buf) S3028C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3028C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3028C2)");
    check_base_class_offset(lv, (S3028C3*), 0, "S3028C2");
    check_field_offset(lv, s3028c2f0, ABISELECT(32,20), "S3028C2.s3028c2f0");
    test_class_info(&lv, &cd_S3028C2);
    dp->~S3028C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3028C2(Test_S3028C2, "S3028C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3028C2C1Ev();
extern void _ZN7S3028C2D1Ev();
Name_Map name_map_S3028C2[] = {
  NSPAIR(_ZN7S3028C2C1Ev),
  NSPAIR(_ZN7S3028C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3028C3;
extern VTBL_ENTRY _ZTI7S3028C3[];
extern  VTBL_ENTRY _ZTV7S3028C3[];
static Base_Class bases_S3028C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3028C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3028C2[];
extern void _ZN7S3028C2D1Ev();
extern void _ZN7S3028C2D0Ev();
extern void _ZN7S3028C33v14Ev();
extern void _ZN7S3028C33v15Ev();
extern void _ZN7S3028C33v16Ev();
extern void _ZN7S3028C33v17Ev();
extern void _ZN7S3028C33v18Ev();
extern void _ZN7S3028C33v19Ev();
extern void _ZN7S3028C33v20Ev();
extern void _ZN7S3028C33v21Ev();
extern void _ZN7S3028C33v22Ev();
extern void _ZN7S3028C33v23Ev();
extern void _ZN7S3028C33v24Ev();
extern void _ZN7S3028C33v25Ev();
extern void _ZN7S3028C33v26Ev();
extern void _ZN7S3028C33v27Ev();
extern void _ZN7S3028C33v28Ev();
extern void _ZN7S3028C23v29Ev();
extern void _ZN7S3028C23v30Ev();
extern void _ZN7S3028C23v31Ev();
extern void _ZN7S3028C23v32Ev();
extern void _ZN7S3028C23v33Ev();
static  VTBL_ENTRY vtc_S3028C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3028C2[0]),
  (VTBL_ENTRY)&_ZN7S3028C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3028C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3028C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3028C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3028C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3028C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3028C23v33Ev,
};
extern VTBL_ENTRY _ZTI7S3028C2[];
extern  VTBL_ENTRY _ZTV7S3028C2[];
Class_Descriptor cd_S3028C2 = {  "S3028C2", // class name
  bases_S3028C2, 1,
  &(vtc_S3028C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3028C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3028C2),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3028C12  {
  virtual  ~S3028C12(); // _ZN8S3028C12D1Ev
  virtual void  v34(); // _ZN8S3028C123v34Ev
  virtual void  v35(); // _ZN8S3028C123v35Ev
  virtual void  v36(); // _ZN8S3028C123v36Ev
  S3028C12(); // tgen
};
//SIG(-1 S3028C12) C1{ vd v1 v2 v3}


 S3028C12 ::~S3028C12(){ note_dtor("S3028C12", this);}
void  S3028C12 ::v34(){vfunc_called(this, "_ZN8S3028C123v34Ev");}
void  S3028C12 ::v35(){vfunc_called(this, "_ZN8S3028C123v35Ev");}
void  S3028C12 ::v36(){vfunc_called(this, "_ZN8S3028C123v36Ev");}
S3028C12 ::S3028C12(){ note_ctor("S3028C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S3028C12C1Ev();
extern void _ZN8S3028C12D1Ev();
Name_Map name_map_S3028C12[] = {
  NSPAIR(_ZN8S3028C12C1Ev),
  NSPAIR(_ZN8S3028C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3028C12[];
extern void _ZN8S3028C12D1Ev();
extern void _ZN8S3028C12D0Ev();
extern void _ZN8S3028C123v34Ev();
extern void _ZN8S3028C123v35Ev();
extern void _ZN8S3028C123v36Ev();
static  VTBL_ENTRY vtc_S3028C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3028C12[0]),
  (VTBL_ENTRY)&_ZN8S3028C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3028C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3028C123v34Ev,
  (VTBL_ENTRY)&_ZN8S3028C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3028C123v36Ev,
};
extern VTBL_ENTRY _ZTI8S3028C12[];
extern  VTBL_ENTRY _ZTV8S3028C12[];
Class_Descriptor cd_S3028C12 = {  "S3028C12", // class name
  0,0,//no base classes
  &(vtc_S3028C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3028C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3028C12),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  S3028C11  : S3028C12 {
  virtual  ~S3028C11(); // _ZN8S3028C11D1Ev
  virtual void  v37(); // _ZN8S3028C113v37Ev
  virtual void  v38(); // _ZN8S3028C113v38Ev
  virtual void  v39(); // _ZN8S3028C113v39Ev
  virtual void  v40(); // _ZN8S3028C113v40Ev
  virtual void  v41(); // _ZN8S3028C113v41Ev
  virtual void  v42(); // _ZN8S3028C113v42Ev
  S3028C11(); // tgen
};
//SIG(-1 S3028C11) C1{ BC2{ vd v7 v8 v9} vd v1 v2 v3 v4 v5 v6}


 S3028C11 ::~S3028C11(){ note_dtor("S3028C11", this);}
void  S3028C11 ::v37(){vfunc_called(this, "_ZN8S3028C113v37Ev");}
void  S3028C11 ::v38(){vfunc_called(this, "_ZN8S3028C113v38Ev");}
void  S3028C11 ::v39(){vfunc_called(this, "_ZN8S3028C113v39Ev");}
void  S3028C11 ::v40(){vfunc_called(this, "_ZN8S3028C113v40Ev");}
void  S3028C11 ::v41(){vfunc_called(this, "_ZN8S3028C113v41Ev");}
void  S3028C11 ::v42(){vfunc_called(this, "_ZN8S3028C113v42Ev");}
S3028C11 ::S3028C11(){ note_ctor("S3028C11", this);} // tgen

static void Test_S3028C11()
{
  extern Class_Descriptor cd_S3028C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3028C11, buf);
    S3028C11 *dp, &lv = *(dp=new (buf) S3028C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3028C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3028C11)");
    check_base_class_offset(lv, (S3028C12*), 0, "S3028C11");
    test_class_info(&lv, &cd_S3028C11);
    dp->~S3028C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3028C11(Test_S3028C11, "S3028C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3028C11C1Ev();
extern void _ZN8S3028C11D1Ev();
Name_Map name_map_S3028C11[] = {
  NSPAIR(_ZN8S3028C11C1Ev),
  NSPAIR(_ZN8S3028C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3028C12;
extern VTBL_ENTRY _ZTI8S3028C12[];
extern  VTBL_ENTRY _ZTV8S3028C12[];
static Base_Class bases_S3028C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3028C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3028C11[];
extern void _ZN8S3028C11D1Ev();
extern void _ZN8S3028C11D0Ev();
extern void _ZN8S3028C123v34Ev();
extern void _ZN8S3028C123v35Ev();
extern void _ZN8S3028C123v36Ev();
extern void _ZN8S3028C113v37Ev();
extern void _ZN8S3028C113v38Ev();
extern void _ZN8S3028C113v39Ev();
extern void _ZN8S3028C113v40Ev();
extern void _ZN8S3028C113v41Ev();
extern void _ZN8S3028C113v42Ev();
static  VTBL_ENTRY vtc_S3028C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3028C11[0]),
  (VTBL_ENTRY)&_ZN8S3028C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3028C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3028C123v34Ev,
  (VTBL_ENTRY)&_ZN8S3028C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3028C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v37Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v38Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v39Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v40Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v42Ev,
};
extern VTBL_ENTRY _ZTI8S3028C11[];
extern  VTBL_ENTRY _ZTV8S3028C11[];
Class_Descriptor cd_S3028C11 = {  "S3028C11", // class name
  bases_S3028C11, 1,
  &(vtc_S3028C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3028C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3028C11),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3028C10  : S3028C11 {
  ::S2215C37 s3028c10f0;
  ::S3048C15_nt s3028c10f1;
  char s3028c10f2;
  virtual  ~S3028C10(); // _ZN8S3028C10D1Ev
  virtual void  v43(); // _ZN8S3028C103v43Ev
  virtual void  v44(); // _ZN8S3028C103v44Ev
  virtual void  v45(); // _ZN8S3028C103v45Ev
  S3028C10(); // tgen
};
//SIG(-1 S3028C10) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 v10 v11 v12} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ FL[4]}} Fc}


 S3028C10 ::~S3028C10(){ note_dtor("S3028C10", this);}
void  S3028C10 ::v43(){vfunc_called(this, "_ZN8S3028C103v43Ev");}
void  S3028C10 ::v44(){vfunc_called(this, "_ZN8S3028C103v44Ev");}
void  S3028C10 ::v45(){vfunc_called(this, "_ZN8S3028C103v45Ev");}
S3028C10 ::S3028C10(){ note_ctor("S3028C10", this);} // tgen

static void Test_S3028C10()
{
  extern Class_Descriptor cd_S3028C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S3028C10, buf);
    S3028C10 *dp, &lv = *(dp=new (buf) S3028C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S3028C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3028C10)");
    check_base_class_offset(lv, (S3028C12*)(S3028C11*), 0, "S3028C10");
    check_base_class_offset(lv, (S3028C11*), 0, "S3028C10");
    check_field_offset(lv, s3028c10f0, ABISELECT(8,4), "S3028C10.s3028c10f0");
    check_field_offset(lv, s3028c10f1, ABISELECT(32,20), "S3028C10.s3028c10f1");
    check_field_offset(lv, s3028c10f2, ABISELECT(64,52), "S3028C10.s3028c10f2");
    test_class_info(&lv, &cd_S3028C10);
    dp->~S3028C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3028C10(Test_S3028C10, "S3028C10", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S3028C10C1Ev();
extern void _ZN8S3028C10D1Ev();
Name_Map name_map_S3028C10[] = {
  NSPAIR(_ZN8S3028C10C1Ev),
  NSPAIR(_ZN8S3028C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3028C12;
extern VTBL_ENTRY _ZTI8S3028C12[];
extern  VTBL_ENTRY _ZTV8S3028C12[];
extern Class_Descriptor cd_S3028C11;
extern VTBL_ENTRY _ZTI8S3028C11[];
extern  VTBL_ENTRY _ZTV8S3028C11[];
static Base_Class bases_S3028C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3028C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3028C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S3028C10[];
extern void _ZN8S3028C10D1Ev();
extern void _ZN8S3028C10D0Ev();
extern void _ZN8S3028C123v34Ev();
extern void _ZN8S3028C123v35Ev();
extern void _ZN8S3028C123v36Ev();
extern void _ZN8S3028C113v37Ev();
extern void _ZN8S3028C113v38Ev();
extern void _ZN8S3028C113v39Ev();
extern void _ZN8S3028C113v40Ev();
extern void _ZN8S3028C113v41Ev();
extern void _ZN8S3028C113v42Ev();
extern void _ZN8S3028C103v43Ev();
extern void _ZN8S3028C103v44Ev();
extern void _ZN8S3028C103v45Ev();
static  VTBL_ENTRY vtc_S3028C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3028C10[0]),
  (VTBL_ENTRY)&_ZN8S3028C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3028C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3028C123v34Ev,
  (VTBL_ENTRY)&_ZN8S3028C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3028C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v37Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v38Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v39Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v40Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3028C103v43Ev,
  (VTBL_ENTRY)&_ZN8S3028C103v44Ev,
  (VTBL_ENTRY)&_ZN8S3028C103v45Ev,
};
extern VTBL_ENTRY _ZTI8S3028C10[];
extern  VTBL_ENTRY _ZTV8S3028C10[];
Class_Descriptor cd_S3028C10 = {  "S3028C10", // class name
  bases_S3028C10, 2,
  &(vtc_S3028C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S3028C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3028C10),16, //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  S3028C1  : S3028C2 , S3028C10 {
  void *s3028c1f0;
  virtual  ~S3028C1(); // _ZN7S3028C1D1Ev
  virtual void  v1(); // _ZN7S3028C12v1Ev
  virtual void  v2(); // _ZN7S3028C12v2Ev
  virtual void  v3(); // _ZN7S3028C12v3Ev
  virtual void  v4(); // _ZN7S3028C12v4Ev
  virtual void  v5(); // _ZN7S3028C12v5Ev
  virtual void  v6(); // _ZN7S3028C12v6Ev
  virtual void  v7(); // _ZN7S3028C12v7Ev
  virtual void  v8(); // _ZN7S3028C12v8Ev
  virtual void  v9(); // _ZN7S3028C12v9Ev
  virtual void  v10(); // _ZN7S3028C13v10Ev
  virtual void  v11(); // _ZN7S3028C13v11Ev
  virtual void  v12(); // _ZN7S3028C13v12Ev
  virtual void  v13(); // _ZN7S3028C13v13Ev
  S3028C1(); // tgen
};
//SIG(1 S3028C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 Fp FC4{ BC5{ m Fp Fi FC6{ m} FC6}}} vd v29 v30 v31 v32 v33 FC7{ m Fp Fi[2] FC8{ m}}} BC9{ BC10{ BC11{ vd v34 v35 v36} vd v37 v38 v39 v40 v41 v42} vd v43 v44 v45 FC12{ m Fp Fi[2] FC8} FC13{ m FC14{ FL[4]}} Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp}


 S3028C1 ::~S3028C1(){ note_dtor("S3028C1", this);}
void  S3028C1 ::v1(){vfunc_called(this, "_ZN7S3028C12v1Ev");}
void  S3028C1 ::v2(){vfunc_called(this, "_ZN7S3028C12v2Ev");}
void  S3028C1 ::v3(){vfunc_called(this, "_ZN7S3028C12v3Ev");}
void  S3028C1 ::v4(){vfunc_called(this, "_ZN7S3028C12v4Ev");}
void  S3028C1 ::v5(){vfunc_called(this, "_ZN7S3028C12v5Ev");}
void  S3028C1 ::v6(){vfunc_called(this, "_ZN7S3028C12v6Ev");}
void  S3028C1 ::v7(){vfunc_called(this, "_ZN7S3028C12v7Ev");}
void  S3028C1 ::v8(){vfunc_called(this, "_ZN7S3028C12v8Ev");}
void  S3028C1 ::v9(){vfunc_called(this, "_ZN7S3028C12v9Ev");}
void  S3028C1 ::v10(){vfunc_called(this, "_ZN7S3028C13v10Ev");}
void  S3028C1 ::v11(){vfunc_called(this, "_ZN7S3028C13v11Ev");}
void  S3028C1 ::v12(){vfunc_called(this, "_ZN7S3028C13v12Ev");}
void  S3028C1 ::v13(){vfunc_called(this, "_ZN7S3028C13v13Ev");}
S3028C1 ::S3028C1(){ note_ctor("S3028C1", this);} // tgen

static void Test_S3028C1()
{
  extern Class_Descriptor cd_S3028C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S3028C1, buf);
    S3028C1 *dp, &lv = *(dp=new (buf) S3028C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S3028C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3028C1)");
    check_base_class_offset(lv, (S3028C3*)(S3028C2*), 0, "S3028C1");
    check_base_class_offset(lv, (S3028C2*), 0, "S3028C1");
    check_base_class_offset(lv, (S3028C12*)(S3028C11*)(S3028C10*), ABISELECT(56,36), "S3028C1");
    check_base_class_offset(lv, (S3028C11*)(S3028C10*), ABISELECT(56,36), "S3028C1");
    check_base_class_offset(lv, (S3028C10*), ABISELECT(56,36), "S3028C1");
    check_field_offset(lv, s3028c1f0, ABISELECT(128,92), "S3028C1.s3028c1f0");
    test_class_info(&lv, &cd_S3028C1);
    dp->~S3028C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3028C1(Test_S3028C1, "S3028C1", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN7S3028C1C1Ev();
extern void _ZN7S3028C1D1Ev();
Name_Map name_map_S3028C1[] = {
  NSPAIR(_ZN7S3028C1C1Ev),
  NSPAIR(_ZN7S3028C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3028C3;
extern VTBL_ENTRY _ZTI7S3028C3[];
extern  VTBL_ENTRY _ZTV7S3028C3[];
extern Class_Descriptor cd_S3028C2;
extern VTBL_ENTRY _ZTI7S3028C2[];
extern  VTBL_ENTRY _ZTV7S3028C2[];
extern Class_Descriptor cd_S3028C12;
extern VTBL_ENTRY _ZTI8S3028C12[];
extern  VTBL_ENTRY _ZTV8S3028C12[];
extern Class_Descriptor cd_S3028C11;
extern VTBL_ENTRY _ZTI8S3028C11[];
extern  VTBL_ENTRY _ZTV8S3028C11[];
extern Class_Descriptor cd_S3028C10;
extern VTBL_ENTRY _ZTI8S3028C10[];
extern  VTBL_ENTRY _ZTV8S3028C10[];
static Base_Class bases_S3028C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3028C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3028C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3028C12,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3028C11,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3028C10,    ABISELECT(56,36), //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 _ZTI7S3028C1[];
extern void _ZN7S3028C1D1Ev();
extern void _ZN7S3028C1D0Ev();
extern void _ZN7S3028C33v14Ev();
extern void _ZN7S3028C33v15Ev();
extern void _ZN7S3028C33v16Ev();
extern void _ZN7S3028C33v17Ev();
extern void _ZN7S3028C33v18Ev();
extern void _ZN7S3028C33v19Ev();
extern void _ZN7S3028C33v20Ev();
extern void _ZN7S3028C33v21Ev();
extern void _ZN7S3028C33v22Ev();
extern void _ZN7S3028C33v23Ev();
extern void _ZN7S3028C33v24Ev();
extern void _ZN7S3028C33v25Ev();
extern void _ZN7S3028C33v26Ev();
extern void _ZN7S3028C33v27Ev();
extern void _ZN7S3028C33v28Ev();
extern void _ZN7S3028C23v29Ev();
extern void _ZN7S3028C23v30Ev();
extern void _ZN7S3028C23v31Ev();
extern void _ZN7S3028C23v32Ev();
extern void _ZN7S3028C23v33Ev();
extern void _ZN7S3028C12v1Ev();
extern void _ZN7S3028C12v2Ev();
extern void _ZN7S3028C12v3Ev();
extern void _ZN7S3028C12v4Ev();
extern void _ZN7S3028C12v5Ev();
extern void _ZN7S3028C12v6Ev();
extern void _ZN7S3028C12v7Ev();
extern void _ZN7S3028C12v8Ev();
extern void _ZN7S3028C12v9Ev();
extern void _ZN7S3028C13v10Ev();
extern void _ZN7S3028C13v11Ev();
extern void _ZN7S3028C13v12Ev();
extern void _ZN7S3028C13v13Ev();
extern void ABISELECT(_ZThn56_N7S3028C1D1Ev,_ZThn36_N7S3028C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3028C1D0Ev,_ZThn36_N7S3028C1D0Ev)();
extern void _ZN8S3028C123v34Ev();
extern void _ZN8S3028C123v35Ev();
extern void _ZN8S3028C123v36Ev();
extern void _ZN8S3028C113v37Ev();
extern void _ZN8S3028C113v38Ev();
extern void _ZN8S3028C113v39Ev();
extern void _ZN8S3028C113v40Ev();
extern void _ZN8S3028C113v41Ev();
extern void _ZN8S3028C113v42Ev();
extern void _ZN8S3028C103v43Ev();
extern void _ZN8S3028C103v44Ev();
extern void _ZN8S3028C103v45Ev();
static  VTBL_ENTRY vtc_S3028C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3028C1[0]),
  (VTBL_ENTRY)&_ZN7S3028C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3028C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3028C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3028C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3028C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3028C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3028C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3028C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3028C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3028C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3028C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3028C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3028C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3028C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3028C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3028C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3028C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3028C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3028C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3028C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3028C13v13Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S3028C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3028C1D1Ev,_ZThn36_N7S3028C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3028C1D0Ev,_ZThn36_N7S3028C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3028C123v34Ev,
  (VTBL_ENTRY)&_ZN8S3028C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3028C123v36Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v37Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v38Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v39Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v40Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3028C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3028C103v43Ev,
  (VTBL_ENTRY)&_ZN8S3028C103v44Ev,
  (VTBL_ENTRY)&_ZN8S3028C103v45Ev,
};
extern VTBL_ENTRY _ZTI7S3028C1[];
extern  VTBL_ENTRY _ZTV7S3028C1[];
Class_Descriptor cd_S3028C1 = {  "S3028C1", // class name
  bases_S3028C1, 5,
  &(vtc_S3028C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI7S3028C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3028C1),53, //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  S20016C2  {
  int s20016c2f0;
  void *s20016c2f1;
  ::S281C37_nt s20016c2f2;
  virtual void  v2(); // _ZN8S20016C22v2Ev
  ~S20016C2(); // tgen
  S20016C2(); // tgen
};
//SIG(-1 S20016C2) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S20016C2()
{
  extern Class_Descriptor cd_S20016C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20016C2, buf);
    S20016C2 *dp, &lv = *(dp=new (buf) S20016C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20016C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20016C2)");
    check_field_offset(lv, s20016c2f0, ABISELECT(8,4), "S20016C2.s20016c2f0");
    check_field_offset(lv, s20016c2f1, ABISELECT(16,8), "S20016C2.s20016c2f1");
    check_field_offset(lv, s20016c2f2, ABISELECT(24,12), "S20016C2.s20016c2f2");
    test_class_info(&lv, &cd_S20016C2);
    dp->~S20016C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20016C2(Test_S20016C2, "S20016C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20016C2C1Ev();
extern void _ZN8S20016C2D1Ev();
Name_Map name_map_S20016C2[] = {
  NSPAIR(_ZN8S20016C2C1Ev),
  NSPAIR(_ZN8S20016C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20016C2[];
extern void _ZN8S20016C22v2Ev();
static  VTBL_ENTRY vtc_S20016C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20016C2[0]),
  (VTBL_ENTRY)&_ZN8S20016C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S20016C2[];
extern  VTBL_ENTRY _ZTV8S20016C2[];
Class_Descriptor cd_S20016C2 = {  "S20016C2", // class name
  0,0,//no base classes
  &(vtc_S20016C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20016C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20016C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20016C1  : virtual S20016C2 {
  __tsi64 s20016c1f0;
  int s20016c1f1;
  ::S20176C3_nt s20016c1f2;
  ::S20969C13 s20016c1f3;
  int s20016c1f4;
  void *s20016c1f5[2];
  int s20016c1f6[11];
  ::S20177C17 s20016c1f7;
  virtual void  v1(); // _ZN8S20016C12v1Ev
  ~S20016C1(); // tgen
  S20016C1(); // tgen
};
//SIG(1 S20016C1) C1{ VBC2{ v2 Fi Fp FC3{ m Fp[2]}} v1 FL Fi FC4{} FC5{ VBC6{ VBC7{ BC8{ v3 Fi Fp FC3} VBC9{ v4 Fi[6] Fc:2 FD Fp[2] Fi FD FC4 FC3 FC3[9] Fp FC8 FC8} VBC3 v5 Fp FL Fc[2] FC9 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC3} VBC10{ VBC6 BC9 BC3 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} vd Fl Fp FC7 Fp Fs FL Fi FL FC7[4] Fi} Fi Fp[2] Fi[11] FC11{ v7 Fl Fc Fs[2]}}


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

static void Test_S20016C1()
{
  extern Class_Descriptor cd_S20016C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(372,811)];
    init_test(&cd_S20016C1, buf);
    S20016C1 *dp, &lv = *(dp=new (buf) S20016C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5936,3240), "sizeof(S20016C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20016C1)");
    check_base_class_offset(lv, (S20016C2*), ABISELECT(5888,3220), "S20016C1");
    check_field_offset(lv, s20016c1f0, ABISELECT(8,4), "S20016C1.s20016c1f0");
    check_field_offset(lv, s20016c1f1, ABISELECT(16,12), "S20016C1.s20016c1f1");
    check_field_offset(lv, s20016c1f2, ABISELECT(20,16), "S20016C1.s20016c1f2");
    check_field_offset(lv, s20016c1f3, ABISELECT(32,20), "S20016C1.s20016c1f3");
    check_field_offset(lv, s20016c1f4, ABISELECT(5792,3148), "S20016C1.s20016c1f4");
    check_field_offset(lv, s20016c1f5, ABISELECT(5800,3152), "S20016C1.s20016c1f5");
    check_field_offset(lv, s20016c1f6, ABISELECT(5816,3160), "S20016C1.s20016c1f6");
    check_field_offset(lv, s20016c1f7, ABISELECT(5864,3204), "S20016C1.s20016c1f7");
    test_class_info(&lv, &cd_S20016C1);
    dp->~S20016C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20016C1(Test_S20016C1, "S20016C1", ABISELECT(5936,3240));

#else // __cplusplus

extern void _ZN8S20016C1C1Ev();
extern void _ZN8S20016C1D1Ev();
Name_Map name_map_S20016C1[] = {
  NSPAIR(_ZN8S20016C1C1Ev),
  NSPAIR(_ZN8S20016C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20016C2;
extern VTBL_ENTRY _ZTI8S20016C2[];
extern  VTBL_ENTRY _ZTV8S20016C2[];
static Base_Class bases_S20016C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20016C2,    ABISELECT(5888,3220), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20016C1[];
extern void _ZN8S20016C12v1Ev();
extern void _ZN8S20016C22v2Ev();
static  VTBL_ENTRY vtc_S20016C1[] = {
  ABISELECT(5888,3220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20016C1[0]),
  (VTBL_ENTRY)&_ZN8S20016C12v1Ev,
  0,
  ABISELECT(-5888,-3220),
  (VTBL_ENTRY)&(_ZTI8S20016C1[0]),
  (VTBL_ENTRY)&_ZN8S20016C22v2Ev,
};
extern VTBL_ENTRY _ZTV8S20016C1[];
static  VTT_ENTRY vtt_S20016C1[] = {
  {&(_ZTV8S20016C1[3]),  3,8},
  {&(_ZTV8S20016C1[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S20016C1[];
extern  VTBL_ENTRY _ZTV8S20016C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20016C1[];
Class_Descriptor cd_S20016C1 = {  "S20016C1", // class name
  bases_S20016C1, 1,
  &(vtc_S20016C1[0]), // expected_vtbl_contents
  &(vtt_S20016C1[0]), // expected_vtt_contents
  ABISELECT(5936,3240), // object size
  NSPAIRA(_ZTI8S20016C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20016C1),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20016C1),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  S7787C7  {
  int s7787c7f0;
  void *s7787c7f1;
  ::S281C37_nt s7787c7f2;
  virtual void  v2(); // _ZN7S7787C72v2Ev
  ~S7787C7(); // tgen
  S7787C7(); // tgen
};
//SIG(-1 S7787C7) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S7787C7()
{
  extern Class_Descriptor cd_S7787C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7787C7, buf);
    S7787C7 *dp, &lv = *(dp=new (buf) S7787C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7787C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7787C7)");
    check_field_offset(lv, s7787c7f0, ABISELECT(8,4), "S7787C7.s7787c7f0");
    check_field_offset(lv, s7787c7f1, ABISELECT(16,8), "S7787C7.s7787c7f1");
    check_field_offset(lv, s7787c7f2, ABISELECT(24,12), "S7787C7.s7787c7f2");
    test_class_info(&lv, &cd_S7787C7);
    dp->~S7787C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7787C7(Test_S7787C7, "S7787C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7787C7C1Ev();
extern void _ZN7S7787C7D1Ev();
Name_Map name_map_S7787C7[] = {
  NSPAIR(_ZN7S7787C7C1Ev),
  NSPAIR(_ZN7S7787C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7787C7[];
extern void _ZN7S7787C72v2Ev();
static  VTBL_ENTRY vtc_S7787C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C7[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
};
extern VTBL_ENTRY _ZTI7S7787C7[];
extern  VTBL_ENTRY _ZTV7S7787C7[];
Class_Descriptor cd_S7787C7 = {  "S7787C7", // class name
  0,0,//no base classes
  &(vtc_S7787C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7787C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7787C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7787C4  {
  int s7787c4f0[6];
  char s7787c4f1:2;
  long double s7787c4f2;
  void *s7787c4f3[2];
  int s7787c4f4;
  long double s7787c4f5;
  ::S20176C3_nt s7787c4f6;
  ::S281C37_nt s7787c4f7;
  ::S281C37_nt s7787c4f8[9];
  void *s7787c4f9;
  ::S7787C7 s7787c4f10;
  ::S7787C7 s7787c4f11;
  virtual void  v3(); // _ZN7S7787C42v3Ev
  ~S7787C4(); // tgen
  S7787C4(); // tgen
};
//SIG(-1 S7787C4) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S7787C4()
{
  extern Class_Descriptor cd_S7787C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S7787C4, buf);
    S7787C4 *dp, &lv = *(dp=new (buf) S7787C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S7787C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7787C4)");
    check_field_offset(lv, s7787c4f0, ABISELECT(8,4), "S7787C4.s7787c4f0");
    set_bf_and_test(lv, s7787c4f1, ABISELECT(32,28), 0, 2, 1, "S7787C4");
    set_bf_and_test(lv, s7787c4f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S7787C4");
    check_field_offset(lv, s7787c4f2, ABISELECT(48,32), "S7787C4.s7787c4f2");
    check_field_offset(lv, s7787c4f3, ABISELECT(64,44), "S7787C4.s7787c4f3");
    check_field_offset(lv, s7787c4f4, ABISELECT(80,52), "S7787C4.s7787c4f4");
    check_field_offset(lv, s7787c4f5, ABISELECT(96,56), "S7787C4.s7787c4f5");
    check_field_offset(lv, s7787c4f6, ABISELECT(112,68), "S7787C4.s7787c4f6");
    check_field_offset(lv, s7787c4f7, ABISELECT(120,72), "S7787C4.s7787c4f7");
    check_field_offset(lv, s7787c4f8, ABISELECT(136,80), "S7787C4.s7787c4f8");
    check_field_offset(lv, s7787c4f9, ABISELECT(280,152), "S7787C4.s7787c4f9");
    check_field_offset(lv, s7787c4f10, ABISELECT(288,156), "S7787C4.s7787c4f10");
    check_field_offset(lv, s7787c4f11, ABISELECT(328,176), "S7787C4.s7787c4f11");
    test_class_info(&lv, &cd_S7787C4);
    dp->~S7787C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7787C4(Test_S7787C4, "S7787C4", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN7S7787C4C1Ev();
extern void _ZN7S7787C4D1Ev();
Name_Map name_map_S7787C4[] = {
  NSPAIR(_ZN7S7787C4C1Ev),
  NSPAIR(_ZN7S7787C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7787C4[];
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY vtc_S7787C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C4[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
extern VTBL_ENTRY _ZTI7S7787C4[];
extern  VTBL_ENTRY _ZTV7S7787C4[];
Class_Descriptor cd_S7787C4 = {  "S7787C4", // class name
  0,0,//no base classes
  &(vtc_S7787C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI7S7787C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7787C4),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7787C10  : S7787C7 , virtual S7787C4 , virtual S281C37_nt {
  void *s7787c10f0;
  __tsi64 s7787c10f1;
  char s7787c10f2[2];
  ::S7787C4 s7787c10f3;
  short s7787c10f4[7];
  int s7787c10f5;
  char s7787c10f6;
  int s7787c10f7:20;
  virtual void  v4(); // _ZN8S7787C102v4Ev
  ~S7787C10(); // tgen
  S7787C10(); // tgen
};
//SIG(-1 S7787C10) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


void  S7787C10 ::v4(){vfunc_called(this, "_ZN8S7787C102v4Ev");}
S7787C10 ::~S7787C10(){ note_dtor("S7787C10", this);} // tgen
S7787C10 ::S7787C10(){ note_ctor("S7787C10", this);} // tgen

static void Test_S7787C10()
{
  extern Class_Descriptor cd_S7787C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S7787C10, buf);
    S7787C10 *dp, &lv = *(dp=new (buf) S7787C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S7787C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7787C10)");
    check_base_class_offset(lv, (S7787C7*), 0, "S7787C10");
    check_base_class_offset(lv, (S7787C4*), ABISELECT(464,256), "S7787C10");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S7787C10");
    check_field_offset(lv, s7787c10f0, ABISELECT(40,20), "S7787C10.s7787c10f0");
    check_field_offset(lv, s7787c10f1, ABISELECT(48,24), "S7787C10.s7787c10f1");
    check_field_offset(lv, s7787c10f2, ABISELECT(56,32), "S7787C10.s7787c10f2");
    check_field_offset(lv, s7787c10f3, ABISELECT(64,36), "S7787C10.s7787c10f3");
    check_field_offset(lv, s7787c10f4, ABISELECT(432,232), "S7787C10.s7787c10f4");
    check_field_offset(lv, s7787c10f5, ABISELECT(448,248), "S7787C10.s7787c10f5");
    check_field_offset(lv, s7787c10f6, ABISELECT(452,252), "S7787C10.s7787c10f6");
    set_bf_and_test(lv, s7787c10f7, ABISELECT(453,253), 0, 20, 1, "S7787C10");
    set_bf_and_test(lv, s7787c10f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S7787C10");
    test_class_info(&lv, &cd_S7787C10);
    dp->~S7787C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7787C10(Test_S7787C10, "S7787C10", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN8S7787C10C1Ev();
extern void _ZN8S7787C10D1Ev();
Name_Map name_map_S7787C10[] = {
  NSPAIR(_ZN8S7787C10C1Ev),
  NSPAIR(_ZN8S7787C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7787C7;
extern VTBL_ENTRY _ZTI7S7787C7[];
extern  VTBL_ENTRY _ZTV7S7787C7[];
extern Class_Descriptor cd_S7787C4;
extern VTBL_ENTRY _ZTI7S7787C4[];
extern  VTBL_ENTRY _ZTV7S7787C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S7787C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7787C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7787C4,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7787C10[];
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY vtc_S7787C10[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7787C10[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7787C10[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S7787C10[];
static  VTT_ENTRY vtt_S7787C10[] = {
  {&(_ZTV8S7787C10[4]),  4,10},
  {&(_ZTV8S7787C10[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S7787C10[];
extern  VTBL_ENTRY _ZTV8S7787C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7787C10[];
Class_Descriptor cd_S7787C10 = {  "S7787C10", // class name
  bases_S7787C10, 3,
  &(vtc_S7787C10[0]), // expected_vtbl_contents
  &(vtt_S7787C10[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI8S7787C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7787C10),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7787C10),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  S7787C9  : virtual S7787C10 {
  int s7787c9f0;
  char s7787c9f1;
  void *s7787c9f2[6];
  int s7787c9f3[2];
  void *s7787c9f4;
  ::S281C37_nt s7787c9f5;
  ~S7787C9(); // tgen
  S7787C9(); // tgen
};
//SIG(-1 S7787C9) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S7787C9()
{
  extern Class_Descriptor cd_S7787C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S7787C9, buf);
    S7787C9 *dp, &lv = *(dp=new (buf) S7787C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S7787C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7787C9)");
    check_base_class_offset(lv, (S7787C7*)(S7787C10*), ABISELECT(96,56), "S7787C9");
    check_base_class_offset(lv, (S7787C4*)(S7787C10*), ABISELECT(560,312), "S7787C9");
    check_base_class_offset(lv, (S281C37_nt*)(S7787C10*), ABISELECT(928,508), "S7787C9");
    check_base_class_offset(lv, (S7787C10*), ABISELECT(96,56), "S7787C9");
    check_field_offset(lv, s7787c9f0, ABISELECT(8,4), "S7787C9.s7787c9f0");
    check_field_offset(lv, s7787c9f1, ABISELECT(12,8), "S7787C9.s7787c9f1");
    check_field_offset(lv, s7787c9f2, ABISELECT(16,12), "S7787C9.s7787c9f2");
    check_field_offset(lv, s7787c9f3, ABISELECT(64,36), "S7787C9.s7787c9f3");
    check_field_offset(lv, s7787c9f4, ABISELECT(72,44), "S7787C9.s7787c9f4");
    check_field_offset(lv, s7787c9f5, ABISELECT(80,48), "S7787C9.s7787c9f5");
    test_class_info(&lv, &cd_S7787C9);
    dp->~S7787C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7787C9(Test_S7787C9, "S7787C9", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN7S7787C9C1Ev();
extern void _ZN7S7787C9D1Ev();
Name_Map name_map_S7787C9[] = {
  NSPAIR(_ZN7S7787C9C1Ev),
  NSPAIR(_ZN7S7787C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7787C7;
extern VTBL_ENTRY _ZTI7S7787C7[];
extern  VTBL_ENTRY _ZTV7S7787C7[];
extern Class_Descriptor cd_S7787C4;
extern VTBL_ENTRY _ZTI7S7787C4[];
extern  VTBL_ENTRY _ZTV7S7787C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7787C10;
extern VTBL_ENTRY _ZTI8S7787C10[];
extern  VTBL_ENTRY _ZTV8S7787C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7787C10[];
static Base_Class bases_S7787C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7787C7,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7787C4,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7787C10,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7787C9[];
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY vtc_S7787C9[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
extern VTBL_ENTRY _ZTV7S7787C9[];
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C9[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7787C10[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__8S7787C10__7S7787C9[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7787C10[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
static  VTT_ENTRY vtt_S7787C9[] = {
  {&(_ZTV7S7787C9[5]),  5,17},
  {&(_ZTV7S7787C9[11]),  11,17},
  {&(_ZTV7S7787C9[16]),  16,17},
  {&(_tg__ZTV8S7787C10__7S7787C9[4]),  4,6},
  {&(_tg__ZTV7S7787C4__8S7787C10__7S7787C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7787C9[];
extern  VTBL_ENTRY _ZTV7S7787C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C9[];
Class_Descriptor cd_S7787C9 = {  "S7787C9", // class name
  bases_S7787C9, 4,
  &(vtc_S7787C9[0]), // expected_vtbl_contents
  &(vtt_S7787C9[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI7S7787C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7787C9),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7787C9),5, //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  S7787C8  : virtual S7787C9 , S7787C4 , S281C37_nt {
  char s7787c8f0;
  int s7787c8f1[2];
  long double s7787c8f2[2];
  short s7787c8f3;
  void *s7787c8f4;
  int s7787c8f5;
  __tsi64 s7787c8f6;
  int s7787c8f7;
  void *s7787c8f8;
  virtual  ~S7787C8(); // _ZN7S7787C8D2Ev
  virtual void  v5(); // _ZN7S7787C82v5Ev
  S7787C8(); // tgen
};
//SIG(-1 S7787C8) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S7787C8 ::~S7787C8(){ note_dtor("S7787C8", this);}
void  S7787C8 ::v5(){vfunc_called(this, "_ZN7S7787C82v5Ev");}
S7787C8 ::S7787C8(){ note_ctor("S7787C8", this);} // tgen

static void Test_S7787C8()
{
  extern Class_Descriptor cd_S7787C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S7787C8, buf);
    S7787C8 *dp, &lv = *(dp=new (buf) S7787C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S7787C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7787C8)");
    check_base_class_offset(lv, (S7787C7*)(S7787C10*), ABISELECT(576,324), "S7787C8");
    check_base_class_offset(lv, (S7787C4*)(S7787C10*), ABISELECT(1040,580), "S7787C8");
    check_base_class_offset(lv, (S281C37_nt*)(S7787C10*), ABISELECT(1408,776), "S7787C8");
    check_base_class_offset(lv, (S7787C10*)(S7787C9*), ABISELECT(576,324), "S7787C8");
    check_base_class_offset(lv, (S7787C9*), ABISELECT(480,268), "S7787C8");
    /*is_ambiguous_... S7787C8::S7787C4 */ AMB_check_base_class_offset(lv, (S7787C4*), 0, "S7787C8");
    /*is_ambiguous_... S7787C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S7787C8");
    check_field_offset(lv, s7787c8f0, ABISELECT(384,204), "S7787C8.s7787c8f0");
    check_field_offset(lv, s7787c8f1, ABISELECT(388,208), "S7787C8.s7787c8f1");
    check_field_offset(lv, s7787c8f2, ABISELECT(400,216), "S7787C8.s7787c8f2");
    check_field_offset(lv, s7787c8f3, ABISELECT(432,240), "S7787C8.s7787c8f3");
    check_field_offset(lv, s7787c8f4, ABISELECT(440,244), "S7787C8.s7787c8f4");
    check_field_offset(lv, s7787c8f5, ABISELECT(448,248), "S7787C8.s7787c8f5");
    check_field_offset(lv, s7787c8f6, ABISELECT(456,252), "S7787C8.s7787c8f6");
    check_field_offset(lv, s7787c8f7, ABISELECT(464,260), "S7787C8.s7787c8f7");
    check_field_offset(lv, s7787c8f8, ABISELECT(472,264), "S7787C8.s7787c8f8");
    test_class_info(&lv, &cd_S7787C8);
    dp->~S7787C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7787C8(Test_S7787C8, "S7787C8", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN7S7787C8C1Ev();
extern void _ZN7S7787C8D2Ev();
Name_Map name_map_S7787C8[] = {
  NSPAIR(_ZN7S7787C8C1Ev),
  NSPAIR(_ZN7S7787C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7787C7;
extern VTBL_ENTRY _ZTI7S7787C7[];
extern  VTBL_ENTRY _ZTV7S7787C7[];
extern Class_Descriptor cd_S7787C4;
extern VTBL_ENTRY _ZTI7S7787C4[];
extern  VTBL_ENTRY _ZTV7S7787C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7787C10;
extern VTBL_ENTRY _ZTI8S7787C10[];
extern  VTBL_ENTRY _ZTV8S7787C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7787C10[];
extern Class_Descriptor cd_S7787C9;
extern VTBL_ENTRY _ZTI7S7787C9[];
extern  VTBL_ENTRY _ZTV7S7787C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C9[];
extern Class_Descriptor cd_S7787C4;
extern VTBL_ENTRY _ZTI7S7787C4[];
extern  VTBL_ENTRY _ZTV7S7787C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S7787C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7787C7,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7787C4,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7787C10,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7787C9,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7787C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7787C8[];
extern void _ZN7S7787C42v3Ev();
extern void _ZN7S7787C8D1Ev();
extern void _ZN7S7787C8D0Ev();
extern void _ZN7S7787C82v5Ev();
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY vtc_S7787C8[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7787C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7787C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7787C82v5Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
extern VTBL_ENTRY _ZTV7S7787C8[];
static  VTBL_ENTRY _tg__ZTV7S7787C9__7S7787C8[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C9__7S7787C8[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__7S7787C9__7S7787C8[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C8[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7787C10[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__8S7787C10__7S7787C8[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7787C10[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
static  VTT_ENTRY vtt_S7787C8[] = {
  {&(_ZTV7S7787C8[6]),  6,27},
  {&(_ZTV7S7787C8[15]),  15,27},
  {&(_ZTV7S7787C8[21]),  21,27},
  {&(_ZTV7S7787C8[26]),  26,27},
  {&(_tg__ZTV7S7787C9__7S7787C8[5]),  5,5},
  {&(_tg__ZTV8S7787C10__7S7787C9__7S7787C8[6]),  6,8},
  {&(_tg__ZTV7S7787C4__7S7787C9__7S7787C8[3]),  3,4},
  {&(_tg__ZTV8S7787C10__7S7787C8[4]),  4,6},
  {&(_tg__ZTV7S7787C4__8S7787C10__7S7787C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7787C8[];
extern  VTBL_ENTRY _ZTV7S7787C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C8[];
Class_Descriptor cd_S7787C8 = {  "S7787C8", // class name
  bases_S7787C8, 7,
  &(vtc_S7787C8[0]), // expected_vtbl_contents
  &(vtt_S7787C8[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI7S7787C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7787C8),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7787C8),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7787C3  : virtual S7787C4 , virtual S7787C8 {
  ::S7787C8 s7787c3f0[7];
  int s7787c3f1;
  short s7787c3f2;
  int s7787c3f3;
  ::S7787C10 s7787c3f4;
  __tsi64 s7787c3f5[9];
  virtual void  v6(); // _ZN7S7787C32v6Ev
  virtual void  v7(); // _ZN7S7787C32v7Ev
  ~S7787C3(); // tgen
  S7787C3(); // tgen
};
//SIG(-1 S7787C3) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 FL[9]}


void  S7787C3 ::v6(){vfunc_called(this, "_ZN7S7787C32v6Ev");}
void  S7787C3 ::v7(){vfunc_called(this, "_ZN7S7787C32v7Ev");}
S7787C3 ::~S7787C3(){ note_dtor("S7787C3", this);} // tgen
S7787C3 ::S7787C3(){ note_ctor("S7787C3", this);} // tgen

static void Test_S7787C3()
{
  extern Class_Descriptor cd_S7787C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1706)];
    init_test(&cd_S7787C3, buf);
    S7787C3 *dp, &lv = *(dp=new (buf) S7787C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6820), "sizeof(S7787C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7787C3)");
    /*is_ambiguous_... S7787C3::S7787C4 */ AMB_check_base_class_offset(lv, (S7787C4*), ABISELECT(10928,6036), "S7787C3");
    check_base_class_offset(lv, (S7787C4*)(S7787C10*), ABISELECT(10928,6036), "S7787C3");
    check_base_class_offset(lv, (S7787C7*)(S7787C10*), ABISELECT(11872,6556), "S7787C3");
    check_base_class_offset(lv, (S281C37_nt*)(S7787C10*), ABISELECT(12328,6812), "S7787C3");
    check_base_class_offset(lv, (S7787C10*)(S7787C9*), ABISELECT(11872,6556), "S7787C3");
    check_base_class_offset(lv, (S7787C9*)(S7787C8*), ABISELECT(11776,6500), "S7787C3");
    /*is_ambiguous_... S7787C8::S7787C4 */ AMB_check_base_class_offset(lv, (S7787C4*)(S7787C8*), ABISELECT(11296,6232), "S7787C3");
    /*is_ambiguous_... S7787C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7787C8*), ABISELECT(11664,6428), "S7787C3");
    check_base_class_offset(lv, (S7787C8*), ABISELECT(11296,6232), "S7787C3");
    check_field_offset(lv, s7787c3f0, ABISELECT(16,4), "S7787C3.s7787c3f0");
    check_field_offset(lv, s7787c3f1, ABISELECT(9984,5492), "S7787C3.s7787c3f1");
    check_field_offset(lv, s7787c3f2, ABISELECT(9988,5496), "S7787C3.s7787c3f2");
    check_field_offset(lv, s7787c3f3, ABISELECT(9992,5500), "S7787C3.s7787c3f3");
    check_field_offset(lv, s7787c3f4, ABISELECT(10000,5504), "S7787C3.s7787c3f4");
    check_field_offset(lv, s7787c3f5, ABISELECT(10848,5964), "S7787C3.s7787c3f5");
    test_class_info(&lv, &cd_S7787C3);
    dp->~S7787C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7787C3(Test_S7787C3, "S7787C3", ABISELECT(12352,6820));

#else // __cplusplus

extern void _ZN7S7787C3C1Ev();
extern void _ZN7S7787C3D1Ev();
Name_Map name_map_S7787C3[] = {
  NSPAIR(_ZN7S7787C3C1Ev),
  NSPAIR(_ZN7S7787C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7787C4;
extern VTBL_ENTRY _ZTI7S7787C4[];
extern  VTBL_ENTRY _ZTV7S7787C4[];
extern Class_Descriptor cd_S7787C7;
extern VTBL_ENTRY _ZTI7S7787C7[];
extern  VTBL_ENTRY _ZTV7S7787C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7787C10;
extern VTBL_ENTRY _ZTI8S7787C10[];
extern  VTBL_ENTRY _ZTV8S7787C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7787C10[];
extern Class_Descriptor cd_S7787C9;
extern VTBL_ENTRY _ZTI7S7787C9[];
extern  VTBL_ENTRY _ZTV7S7787C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C9[];
extern Class_Descriptor cd_S7787C4;
extern VTBL_ENTRY _ZTI7S7787C4[];
extern  VTBL_ENTRY _ZTV7S7787C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7787C8;
extern VTBL_ENTRY _ZTI7S7787C8[];
extern  VTBL_ENTRY _ZTV7S7787C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C8[];
static Base_Class bases_S7787C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7787C4,    ABISELECT(10928,6036), //bcp->offset
    11, //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_S7787C7,    ABISELECT(11872,6556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7787C10,    ABISELECT(11872,6556), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7787C9,    ABISELECT(11776,6500), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7787C4,    ABISELECT(11296,6232), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7787C8,    ABISELECT(11296,6232), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7787C3[];
extern void _ZN7S7787C32v6Ev();
extern void _ZN7S7787C32v7Ev();
extern void _ZN7S7787C3D1Ev();
extern void _ZN7S7787C3D0Ev();
extern void _ZN7S7787C42v3Ev();
extern void _ZN7S7787C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S7787C3D1Ev,_ZTv0_n32_N7S7787C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7787C3D1Ev,_ZThn6232_N7S7787C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7787C3D0Ev,_ZTv0_n32_N7S7787C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7787C3D0Ev,_ZThn6232_N7S7787C3D0Ev)() __attribute__((weak));
extern void _ZN7S7787C82v5Ev();
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY vtc_S7787C3[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  (VTBL_ENTRY)&_ZN7S7787C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7787C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7787C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7787C3D0Ev,
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7787C3D1Ev,_ZTv0_n32_N7S7787C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7787C3D0Ev,_ZTv0_n32_N7S7787C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7787C82v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern VTBL_ENTRY _ZTV7S7787C3[];
extern void _ZN7S7787C42v3Ev();
extern void _ZN7S7787C8D1Ev();
extern void _ZN7S7787C8D0Ev();
extern void _ZN7S7787C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C8__7S7787C3[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7787C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7787C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7787C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7787C9__7S7787C8__7S7787C3[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C8__7S7787C3[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__7S7787C8__7S7787C3[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7787C9__7S7787C3[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C9__7S7787C3[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__7S7787C9__7S7787C3[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C3[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7787C10[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__8S7787C10__7S7787C3[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7787C10[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
static  VTT_ENTRY vtt_S7787C3[] = {
  {&(_ZTV7S7787C3[7]),  7,41},
  {&(_ZTV7S7787C3[14]),  14,41},
  {&(_ZTV7S7787C3[24]),  24,41},
  {&(_ZTV7S7787C3[33]),  33,41},
  {&(_ZTV7S7787C3[39]),  39,41},
  {&(_tg__ZTV7S7787C8__7S7787C3[6]),  6,10},
  {&(_tg__ZTV7S7787C9__7S7787C8__7S7787C3[5]),  5,5},
  {&(_tg__ZTV8S7787C10__7S7787C8__7S7787C3[6]),  6,8},
  {&(_tg__ZTV7S7787C4__7S7787C8__7S7787C3[3]),  3,4},
  {&(_tg__ZTV7S7787C9__7S7787C3[5]),  5,5},
  {&(_tg__ZTV8S7787C10__7S7787C9__7S7787C3[6]),  6,8},
  {&(_tg__ZTV7S7787C4__7S7787C9__7S7787C3[3]),  3,4},
  {&(_tg__ZTV8S7787C10__7S7787C3[4]),  4,6},
  {&(_tg__ZTV7S7787C4__8S7787C10__7S7787C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7787C3[];
extern  VTBL_ENTRY _ZTV7S7787C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C3[];
static VTBL_ENTRY alt_thunk_names87[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7787C3D0Ev,_ZTv0_n32_N7S7787C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7787C3D0Ev,_ZThn6232_N7S7787C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7787C3D1Ev,_ZTv0_n32_N7S7787C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7787C3D1Ev,_ZThn6232_N7S7787C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7787C3 = {  "S7787C3", // class name
  bases_S7787C3, 8,
  &(vtc_S7787C3[0]), // expected_vtbl_contents
  &(vtt_S7787C3[0]), // expected_vtt_contents
  ABISELECT(12352,6820), // object size
  NSPAIRA(_ZTI7S7787C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7787C3),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7787C3),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names87,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7787C2  : virtual S7787C3 {
  char s7787c2f0;
  int s7787c2f1[3];
  virtual  ~S7787C2(); // _ZN7S7787C2D2Ev
  S7787C2(); // tgen
};
//SIG(-1 S7787C2) C1{ VBC2{ VBC3{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v2 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v3 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v5 v6 FC7[7] Fi Fs Fi FC9 FL[9]} vd Fc Fi[3]}


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

static void Test_S7787C2()
{
  extern Class_Descriptor cd_S7787C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(775,1711)];
    init_test(&cd_S7787C2, buf);
    S7787C2 *dp, &lv = *(dp=new (buf) S7787C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12384,6840), "sizeof(S7787C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7787C2)");
    /*is_ambiguous_... S7787C3::S7787C4 */ AMB_check_base_class_offset(lv, (S7787C4*)(S7787C3*), ABISELECT(10960,6056), "S7787C2");
    check_base_class_offset(lv, (S7787C4*)(S7787C10*), ABISELECT(10960,6056), "S7787C2");
    check_base_class_offset(lv, (S7787C7*)(S7787C10*), ABISELECT(11904,6576), "S7787C2");
    check_base_class_offset(lv, (S281C37_nt*)(S7787C10*), ABISELECT(12360,6832), "S7787C2");
    check_base_class_offset(lv, (S7787C10*)(S7787C9*), ABISELECT(11904,6576), "S7787C2");
    check_base_class_offset(lv, (S7787C9*)(S7787C8*), ABISELECT(11808,6520), "S7787C2");
    /*is_ambiguous_... S7787C8::S7787C4 */ AMB_check_base_class_offset(lv, (S7787C4*)(S7787C8*), ABISELECT(11328,6252), "S7787C2");
    /*is_ambiguous_... S7787C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7787C8*), ABISELECT(11696,6448), "S7787C2");
    check_base_class_offset(lv, (S7787C8*)(S7787C3*), ABISELECT(11328,6252), "S7787C2");
    check_base_class_offset(lv, (S7787C3*), ABISELECT(32,20), "S7787C2");
    check_field_offset(lv, s7787c2f0, ABISELECT(8,4), "S7787C2.s7787c2f0");
    check_field_offset(lv, s7787c2f1, ABISELECT(12,8), "S7787C2.s7787c2f1");
    test_class_info(&lv, &cd_S7787C2);
    dp->~S7787C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7787C2(Test_S7787C2, "S7787C2", ABISELECT(12384,6840));

#else // __cplusplus

extern void _ZN7S7787C2C1Ev();
extern void _ZN7S7787C2D2Ev();
Name_Map name_map_S7787C2[] = {
  NSPAIR(_ZN7S7787C2C1Ev),
  NSPAIR(_ZN7S7787C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7787C4;
extern VTBL_ENTRY _ZTI7S7787C4[];
extern  VTBL_ENTRY _ZTV7S7787C4[];
extern Class_Descriptor cd_S7787C7;
extern VTBL_ENTRY _ZTI7S7787C7[];
extern  VTBL_ENTRY _ZTV7S7787C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7787C10;
extern VTBL_ENTRY _ZTI8S7787C10[];
extern  VTBL_ENTRY _ZTV8S7787C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7787C10[];
extern Class_Descriptor cd_S7787C9;
extern VTBL_ENTRY _ZTI7S7787C9[];
extern  VTBL_ENTRY _ZTV7S7787C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C9[];
extern Class_Descriptor cd_S7787C4;
extern VTBL_ENTRY _ZTI7S7787C4[];
extern  VTBL_ENTRY _ZTV7S7787C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7787C8;
extern VTBL_ENTRY _ZTI7S7787C8[];
extern  VTBL_ENTRY _ZTV7S7787C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C8[];
extern Class_Descriptor cd_S7787C3;
extern VTBL_ENTRY _ZTI7S7787C3[];
extern  VTBL_ENTRY _ZTV7S7787C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C3[];
static Base_Class bases_S7787C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7787C4,    ABISELECT(10960,6056), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S7787C7,    ABISELECT(11904,6576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12360,6832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7787C10,    ABISELECT(11904,6576), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7787C9,    ABISELECT(11808,6520), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7787C4,    ABISELECT(11328,6252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11696,6448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7787C8,    ABISELECT(11328,6252), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7787C3,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7787C2[];
extern void _ZN7S7787C2D1Ev();
extern void _ZN7S7787C2D0Ev();
extern void _ZN7S7787C32v6Ev();
extern void _ZN7S7787C32v7Ev();
extern void ABISELECT(_ZTv0_n80_N7S7787C2D1Ev,_ZTv0_n40_N7S7787C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7787C2D1Ev,_ZThn20_N7S7787C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7787C2D0Ev,_ZTv0_n40_N7S7787C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7787C2D0Ev,_ZThn20_N7S7787C2D0Ev)() __attribute__((weak));
extern void _ZN7S7787C42v3Ev();
extern void _ZN7S7787C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S7787C2D1Ev,_ZTv0_n32_N7S7787C2D1Ev)();
extern void ABISELECT(_ZThn11328_N7S7787C2D1Ev,_ZThn6252_N7S7787C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7787C2D0Ev,_ZTv0_n32_N7S7787C2D0Ev)();
extern void ABISELECT(_ZThn11328_N7S7787C2D0Ev,_ZThn6252_N7S7787C2D0Ev)() __attribute__((weak));
extern void _ZN7S7787C82v5Ev();
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY vtc_S7787C2[] = {
  ABISELECT(12360,6832),
  ABISELECT(11904,6576),
  ABISELECT(11808,6520),
  ABISELECT(11328,6252),
  ABISELECT(10960,6056),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C2[0]),
  (VTBL_ENTRY)&_ZN7S7787C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7787C2D0Ev,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7787C2[0]),
  (VTBL_ENTRY)&_ZN7S7787C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7787C32v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7787C2D1Ev,_ZTv0_n40_N7S7787C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7787C2D0Ev,_ZTv0_n40_N7S7787C2D0Ev),
  0,
  ABISELECT(-10960,-6056),
  (VTBL_ENTRY)&(_ZTI7S7787C2[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  0,
  ABISELECT(-11328,-6252),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11328,-6252),
  (VTBL_ENTRY)&(_ZTI7S7787C2[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7787C2D1Ev,_ZTv0_n32_N7S7787C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7787C2D0Ev,_ZTv0_n32_N7S7787C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7787C82v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11808,-6520),
  (VTBL_ENTRY)&(_ZTI7S7787C2[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11904,-6576),
  (VTBL_ENTRY)&(_ZTI7S7787C2[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern VTBL_ENTRY _ZTV7S7787C2[];
extern void _ZN7S7787C32v6Ev();
extern void _ZN7S7787C32v7Ev();
extern void _ZN7S7787C3D1Ev();
extern void _ZN7S7787C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C3__7S7787C2[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  (VTBL_ENTRY)&_ZN7S7787C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7787C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7787C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7787C3D0Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__7S7787C3__7S7787C2[] = {
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
extern void _ZN7S7787C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S7787C3D1Ev,_ZTv0_n32_N7S7787C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7787C3D1Ev,_ZThn6232_N7S7787C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7787C3D0Ev,_ZTv0_n32_N7S7787C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7787C3D0Ev,_ZThn6232_N7S7787C3D0Ev)() __attribute__((weak));
extern void _ZN7S7787C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C8__7S7787C3__7S7787C2[] = {
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7787C3D1Ev,_ZTv0_n32_N7S7787C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7787C3D0Ev,_ZTv0_n32_N7S7787C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7787C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7787C9__7S7787C3__7S7787C2[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C3__7S7787C2[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
extern void _ZN7S7787C8D1Ev();
extern void _ZN7S7787C8D0Ev();
extern void _ZN7S7787C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C8__7S7787C2[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7787C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7787C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7787C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7787C9__7S7787C8__7S7787C2[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C8__7S7787C2[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__7S7787C8__7S7787C2[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7787C9__7S7787C2[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C9__7S7787C2[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__7S7787C9__7S7787C2[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C2[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7787C10[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__8S7787C10__7S7787C2[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7787C10[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
static  VTT_ENTRY vtt_S7787C2[] = {
  {&(_ZTV7S7787C2[8]),  8,54},
  {&(_ZTV7S7787C2[20]),  20,54},
  {&(_ZTV7S7787C2[27]),  27,54},
  {&(_ZTV7S7787C2[37]),  37,54},
  {&(_ZTV7S7787C2[46]),  46,54},
  {&(_ZTV7S7787C2[52]),  52,54},
  {&(_tg__ZTV7S7787C3__7S7787C2[7]),  7,11},
  {&(_tg__ZTV7S7787C4__7S7787C3__7S7787C2[3]),  3,4},
  {&(_tg__ZTV7S7787C8__7S7787C3__7S7787C2[9]),  9,13},
  {&(_tg__ZTV7S7787C9__7S7787C3__7S7787C2[5]),  5,5},
  {&(_tg__ZTV8S7787C10__7S7787C3__7S7787C2[6]),  6,8},
  {&(_tg__ZTV7S7787C8__7S7787C2[6]),  6,10},
  {&(_tg__ZTV7S7787C9__7S7787C8__7S7787C2[5]),  5,5},
  {&(_tg__ZTV8S7787C10__7S7787C8__7S7787C2[6]),  6,8},
  {&(_tg__ZTV7S7787C4__7S7787C8__7S7787C2[3]),  3,4},
  {&(_tg__ZTV7S7787C9__7S7787C2[5]),  5,5},
  {&(_tg__ZTV8S7787C10__7S7787C9__7S7787C2[6]),  6,8},
  {&(_tg__ZTV7S7787C4__7S7787C9__7S7787C2[3]),  3,4},
  {&(_tg__ZTV8S7787C10__7S7787C2[4]),  4,6},
  {&(_tg__ZTV7S7787C4__8S7787C10__7S7787C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7787C2[];
extern  VTBL_ENTRY _ZTV7S7787C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C2[];
static VTBL_ENTRY alt_thunk_names88[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7787C3D0Ev,_ZTv0_n32_N7S7787C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7787C3D0Ev,_ZThn6232_N7S7787C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7787C3D1Ev,_ZTv0_n32_N7S7787C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7787C3D1Ev,_ZThn6232_N7S7787C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7787C2D0Ev,_ZTv0_n32_N7S7787C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N7S7787C2D0Ev,_ZThn6252_N7S7787C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7787C2D1Ev,_ZTv0_n32_N7S7787C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N7S7787C2D1Ev,_ZThn6252_N7S7787C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7787C2D0Ev,_ZTv0_n40_N7S7787C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7787C2D0Ev,_ZThn20_N7S7787C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7787C2D1Ev,_ZTv0_n40_N7S7787C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7787C2D1Ev,_ZThn20_N7S7787C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7787C2 = {  "S7787C2", // class name
  bases_S7787C2, 9,
  &(vtc_S7787C2[0]), // expected_vtbl_contents
  &(vtt_S7787C2[0]), // expected_vtt_contents
  ABISELECT(12384,6840), // object size
  NSPAIRA(_ZTI7S7787C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7787C2),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7787C2),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names88,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7787C1  : S7787C2 {
  int s7787c1f0;
  void *s7787c1f1;
  int s7787c1f2[2];
  long double s7787c1f3;
  int s7787c1f4[8];
  long double s7787c1f5;
  void *s7787c1f6[8];
  char s7787c1f7;
  virtual void  v1(); // _ZN7S7787C12v1Ev
  ~S7787C1(); // tgen
  S7787C1(); // tgen
};
//SIG(1 S7787C1) C1{ BC2{ VBC3{ VBC4{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC6{ m Fp[2]} FC6[9] Fp FC7{ v3 Fi Fp FC6} FC7} VBC8{ VBC9{ VBC10{ BC7 VBC4 VBC6 v4 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC4 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v6 v7 FC8[7] Fi Fs Fi FC10 FL[9]} vd Fc Fi[3]} v1 Fi Fp Fi[2] FD Fi[8] FD Fp[8] Fc}


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

static void Test_S7787C1()
{
  extern Class_Descriptor cd_S7787C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(785,1738)];
    init_test(&cd_S7787C1, buf);
    S7787C1 *dp, &lv = *(dp=new (buf) S7787C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12544,6948), "sizeof(S7787C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7787C1)");
    /*is_ambiguous_... S7787C3::S7787C4 */ AMB_check_base_class_offset(lv, (S7787C4*)(S7787C3*), ABISELECT(11120,6164), "S7787C1");
    check_base_class_offset(lv, (S7787C4*)(S7787C10*), ABISELECT(11120,6164), "S7787C1");
    check_base_class_offset(lv, (S7787C7*)(S7787C10*), ABISELECT(12064,6684), "S7787C1");
    check_base_class_offset(lv, (S281C37_nt*)(S7787C10*), ABISELECT(12520,6940), "S7787C1");
    check_base_class_offset(lv, (S7787C10*)(S7787C9*), ABISELECT(12064,6684), "S7787C1");
    check_base_class_offset(lv, (S7787C9*)(S7787C8*), ABISELECT(11968,6628), "S7787C1");
    /*is_ambiguous_... S7787C8::S7787C4 */ AMB_check_base_class_offset(lv, (S7787C4*)(S7787C8*), ABISELECT(11488,6360), "S7787C1");
    /*is_ambiguous_... S7787C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7787C8*), ABISELECT(11856,6556), "S7787C1");
    check_base_class_offset(lv, (S7787C8*)(S7787C3*), ABISELECT(11488,6360), "S7787C1");
    check_base_class_offset(lv, (S7787C3*)(S7787C2*), ABISELECT(192,128), "S7787C1");
    check_base_class_offset(lv, (S7787C2*), 0, "S7787C1");
    check_field_offset(lv, s7787c1f0, ABISELECT(24,20), "S7787C1.s7787c1f0");
    check_field_offset(lv, s7787c1f1, ABISELECT(32,24), "S7787C1.s7787c1f1");
    check_field_offset(lv, s7787c1f2, ABISELECT(40,28), "S7787C1.s7787c1f2");
    check_field_offset(lv, s7787c1f3, ABISELECT(48,36), "S7787C1.s7787c1f3");
    check_field_offset(lv, s7787c1f4, ABISELECT(64,48), "S7787C1.s7787c1f4");
    check_field_offset(lv, s7787c1f5, ABISELECT(96,80), "S7787C1.s7787c1f5");
    check_field_offset(lv, s7787c1f6, ABISELECT(112,92), "S7787C1.s7787c1f6");
    check_field_offset(lv, s7787c1f7, ABISELECT(176,124), "S7787C1.s7787c1f7");
    test_class_info(&lv, &cd_S7787C1);
    dp->~S7787C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7787C1(Test_S7787C1, "S7787C1", ABISELECT(12544,6948));

#else // __cplusplus

extern void _ZN7S7787C1C1Ev();
extern void _ZN7S7787C1D1Ev();
Name_Map name_map_S7787C1[] = {
  NSPAIR(_ZN7S7787C1C1Ev),
  NSPAIR(_ZN7S7787C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7787C4;
extern VTBL_ENTRY _ZTI7S7787C4[];
extern  VTBL_ENTRY _ZTV7S7787C4[];
extern Class_Descriptor cd_S7787C7;
extern VTBL_ENTRY _ZTI7S7787C7[];
extern  VTBL_ENTRY _ZTV7S7787C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7787C10;
extern VTBL_ENTRY _ZTI8S7787C10[];
extern  VTBL_ENTRY _ZTV8S7787C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7787C10[];
extern Class_Descriptor cd_S7787C9;
extern VTBL_ENTRY _ZTI7S7787C9[];
extern  VTBL_ENTRY _ZTV7S7787C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C9[];
extern Class_Descriptor cd_S7787C4;
extern VTBL_ENTRY _ZTI7S7787C4[];
extern  VTBL_ENTRY _ZTV7S7787C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7787C8;
extern VTBL_ENTRY _ZTI7S7787C8[];
extern  VTBL_ENTRY _ZTV7S7787C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C8[];
extern Class_Descriptor cd_S7787C3;
extern VTBL_ENTRY _ZTI7S7787C3[];
extern  VTBL_ENTRY _ZTV7S7787C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C3[];
extern Class_Descriptor cd_S7787C2;
extern VTBL_ENTRY _ZTI7S7787C2[];
extern  VTBL_ENTRY _ZTV7S7787C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C2[];
static Base_Class bases_S7787C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7787C4,    ABISELECT(11120,6164), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7787C7,    ABISELECT(12064,6684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12520,6940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7787C10,    ABISELECT(12064,6684), //bcp->offset
    47, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7787C9,    ABISELECT(11968,6628), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7787C4,    ABISELECT(11488,6360), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11856,6556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7787C8,    ABISELECT(11488,6360), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //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
    8, //immediately_derived
  0, 1},
  {&cd_S7787C3,    ABISELECT(192,128), //bcp->offset
    11, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7787C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7787C1[];
extern void _ZN7S7787C1D1Ev();
extern void _ZN7S7787C1D0Ev();
extern void _ZN7S7787C12v1Ev();
extern void _ZN7S7787C32v6Ev();
extern void _ZN7S7787C32v7Ev();
extern void ABISELECT(_ZTv0_n80_N7S7787C1D1Ev,_ZTv0_n40_N7S7787C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S7787C1D1Ev,_ZThn128_N7S7787C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7787C1D0Ev,_ZTv0_n40_N7S7787C1D0Ev)();
extern void ABISELECT(_ZThn192_N7S7787C1D0Ev,_ZThn128_N7S7787C1D0Ev)() __attribute__((weak));
extern void _ZN7S7787C42v3Ev();
extern void _ZN7S7787C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S7787C1D1Ev,_ZTv0_n32_N7S7787C1D1Ev)();
extern void ABISELECT(_ZThn11488_N7S7787C1D1Ev,_ZThn6360_N7S7787C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7787C1D0Ev,_ZTv0_n32_N7S7787C1D0Ev)();
extern void ABISELECT(_ZThn11488_N7S7787C1D0Ev,_ZThn6360_N7S7787C1D0Ev)() __attribute__((weak));
extern void _ZN7S7787C82v5Ev();
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY vtc_S7787C1[] = {
  ABISELECT(12520,6940),
  ABISELECT(12064,6684),
  ABISELECT(11968,6628),
  ABISELECT(11488,6360),
  ABISELECT(11120,6164),
  ABISELECT(192,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C1[0]),
  (VTBL_ENTRY)&_ZN7S7787C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7787C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7787C12v1Ev,
  ABISELECT(-192,-128),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S7787C1[0]),
  (VTBL_ENTRY)&_ZN7S7787C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7787C32v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7787C1D1Ev,_ZTv0_n40_N7S7787C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7787C1D0Ev,_ZTv0_n40_N7S7787C1D0Ev),
  0,
  ABISELECT(-11120,-6164),
  (VTBL_ENTRY)&(_ZTI7S7787C1[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  0,
  ABISELECT(-11488,-6360),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11488,-6360),
  (VTBL_ENTRY)&(_ZTI7S7787C1[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7787C1D1Ev,_ZTv0_n32_N7S7787C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7787C1D0Ev,_ZTv0_n32_N7S7787C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7787C82v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11968,-6628),
  (VTBL_ENTRY)&(_ZTI7S7787C1[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-12064,-6684),
  (VTBL_ENTRY)&(_ZTI7S7787C1[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern VTBL_ENTRY _ZTV7S7787C1[];
extern void _ZN7S7787C2D1Ev();
extern void _ZN7S7787C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C2__7S7787C1[] = {
  ABISELECT(12520,6940),
  ABISELECT(12064,6684),
  ABISELECT(11968,6628),
  ABISELECT(11488,6360),
  ABISELECT(11120,6164),
  ABISELECT(192,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C2[0]),
  (VTBL_ENTRY)&_ZN7S7787C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7787C2D0Ev,
};
extern void _ZN7S7787C32v6Ev();
extern void _ZN7S7787C32v7Ev();
extern void ABISELECT(_ZTv0_n80_N7S7787C2D1Ev,_ZTv0_n40_N7S7787C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S7787C2D1Ev,_ZThn128_N7S7787C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7787C2D0Ev,_ZTv0_n40_N7S7787C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S7787C2D0Ev,_ZThn128_N7S7787C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7787C3__7S7787C2__7S7787C1[] = {
  ABISELECT(-192,-128),
  0,
  0,
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S7787C2[0]),
  (VTBL_ENTRY)&_ZN7S7787C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7787C32v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7787C2D1Ev,_ZTv0_n40_N7S7787C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7787C2D0Ev,_ZTv0_n40_N7S7787C2D0Ev),
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__7S7787C2__7S7787C1[] = {
  0,
  ABISELECT(-11120,-6164),
  (VTBL_ENTRY)&(_ZTI7S7787C2[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
extern void _ZN7S7787C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S7787C2D1Ev,_ZTv0_n32_N7S7787C2D1Ev)();
extern void ABISELECT(_ZThn11488_N7S7787C2D1Ev,_ZThn6360_N7S7787C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7787C2D0Ev,_ZTv0_n32_N7S7787C2D0Ev)();
extern void ABISELECT(_ZThn11488_N7S7787C2D0Ev,_ZThn6360_N7S7787C2D0Ev)() __attribute__((weak));
extern void _ZN7S7787C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C8__7S7787C2__7S7787C1[] = {
  0,
  ABISELECT(-11488,-6360),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11488,-6360),
  (VTBL_ENTRY)&(_ZTI7S7787C2[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7787C2D1Ev,_ZTv0_n32_N7S7787C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7787C2D0Ev,_ZTv0_n32_N7S7787C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7787C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7787C9__7S7787C2__7S7787C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11968,-6628),
  (VTBL_ENTRY)&(_ZTI7S7787C2[0]),
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C2__7S7787C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-12064,-6684),
  (VTBL_ENTRY)&(_ZTI7S7787C2[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C32v6Ev();
extern void _ZN7S7787C32v7Ev();
extern void _ZN7S7787C3D1Ev();
extern void _ZN7S7787C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C3__7S7787C1[] = {
  ABISELECT(12328,6812),
  ABISELECT(11872,6556),
  ABISELECT(11776,6500),
  ABISELECT(11296,6232),
  ABISELECT(10928,6036),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  (VTBL_ENTRY)&_ZN7S7787C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7787C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7787C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7787C3D0Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__7S7787C3__7S7787C1[] = {
  0,
  ABISELECT(-10928,-6036),
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
extern void _ZN7S7787C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S7787C3D1Ev,_ZTv0_n32_N7S7787C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7787C3D1Ev,_ZThn6232_N7S7787C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7787C3D0Ev,_ZTv0_n32_N7S7787C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7787C3D0Ev,_ZThn6232_N7S7787C3D0Ev)() __attribute__((weak));
extern void _ZN7S7787C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C8__7S7787C3__7S7787C1[] = {
  0,
  ABISELECT(-11296,-6232),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6232),
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7787C3D1Ev,_ZTv0_n32_N7S7787C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7787C3D0Ev,_ZTv0_n32_N7S7787C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7787C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7787C9__7S7787C3__7S7787C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6500),
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C3__7S7787C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6556),
  (VTBL_ENTRY)&(_ZTI7S7787C3[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
extern void _ZN7S7787C8D1Ev();
extern void _ZN7S7787C8D0Ev();
extern void _ZN7S7787C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C8__7S7787C1[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7787C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7787C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7787C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7787C9__7S7787C8__7S7787C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C8__7S7787C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__7S7787C8__7S7787C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7787C8[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7787C9__7S7787C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C9__7S7787C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__7S7787C9__7S7787C1[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7787C9[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
extern void _ZN7S7787C72v2Ev();
extern void _ZN8S7787C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7787C10__7S7787C1[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7787C10[0]),
  (VTBL_ENTRY)&_ZN7S7787C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7787C102v4Ev,
};
extern void _ZN7S7787C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7787C4__8S7787C10__7S7787C1[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7787C10[0]),
  (VTBL_ENTRY)&_ZN7S7787C42v3Ev,
};
static  VTT_ENTRY vtt_S7787C1[] = {
  {&(_ZTV7S7787C1[8]),  8,55},
  {&(_tg__ZTV7S7787C2__7S7787C1[8]),  8,10},
  {&(_tg__ZTV7S7787C3__7S7787C2__7S7787C1[10]),  10,14},
  {&(_tg__ZTV7S7787C4__7S7787C2__7S7787C1[3]),  3,4},
  {&(_tg__ZTV7S7787C8__7S7787C2__7S7787C1[9]),  9,13},
  {&(_tg__ZTV7S7787C9__7S7787C2__7S7787C1[5]),  5,5},
  {&(_tg__ZTV8S7787C10__7S7787C2__7S7787C1[6]),  6,8},
  {&(_ZTV7S7787C1[21]),  21,55},
  {&(_ZTV7S7787C1[28]),  28,55},
  {&(_ZTV7S7787C1[38]),  38,55},
  {&(_ZTV7S7787C1[47]),  47,55},
  {&(_ZTV7S7787C1[53]),  53,55},
  {&(_tg__ZTV7S7787C3__7S7787C1[7]),  7,11},
  {&(_tg__ZTV7S7787C4__7S7787C3__7S7787C1[3]),  3,4},
  {&(_tg__ZTV7S7787C8__7S7787C3__7S7787C1[9]),  9,13},
  {&(_tg__ZTV7S7787C9__7S7787C3__7S7787C1[5]),  5,5},
  {&(_tg__ZTV8S7787C10__7S7787C3__7S7787C1[6]),  6,8},
  {&(_tg__ZTV7S7787C8__7S7787C1[6]),  6,10},
  {&(_tg__ZTV7S7787C9__7S7787C8__7S7787C1[5]),  5,5},
  {&(_tg__ZTV8S7787C10__7S7787C8__7S7787C1[6]),  6,8},
  {&(_tg__ZTV7S7787C4__7S7787C8__7S7787C1[3]),  3,4},
  {&(_tg__ZTV7S7787C9__7S7787C1[5]),  5,5},
  {&(_tg__ZTV8S7787C10__7S7787C9__7S7787C1[6]),  6,8},
  {&(_tg__ZTV7S7787C4__7S7787C9__7S7787C1[3]),  3,4},
  {&(_tg__ZTV8S7787C10__7S7787C1[4]),  4,6},
  {&(_tg__ZTV7S7787C4__8S7787C10__7S7787C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7787C1[];
extern  VTBL_ENTRY _ZTV7S7787C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7787C1[];
static VTBL_ENTRY alt_thunk_names89[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7787C3D0Ev,_ZTv0_n32_N7S7787C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7787C3D0Ev,_ZThn6232_N7S7787C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7787C3D1Ev,_ZTv0_n32_N7S7787C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7787C3D1Ev,_ZThn6232_N7S7787C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7787C2D0Ev,_ZTv0_n32_N7S7787C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11488_N7S7787C2D0Ev,_ZThn6360_N7S7787C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7787C2D1Ev,_ZTv0_n32_N7S7787C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11488_N7S7787C2D1Ev,_ZThn6360_N7S7787C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7787C2D0Ev,_ZTv0_n40_N7S7787C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7787C2D0Ev,_ZThn128_N7S7787C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7787C2D1Ev,_ZTv0_n40_N7S7787C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7787C2D1Ev,_ZThn128_N7S7787C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7787C1D0Ev,_ZTv0_n32_N7S7787C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11488_N7S7787C1D0Ev,_ZThn6360_N7S7787C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7787C1D1Ev,_ZTv0_n32_N7S7787C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11488_N7S7787C1D1Ev,_ZThn6360_N7S7787C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7787C1D0Ev,_ZTv0_n40_N7S7787C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7787C1D0Ev,_ZThn128_N7S7787C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7787C1D1Ev,_ZTv0_n40_N7S7787C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7787C1D1Ev,_ZThn128_N7S7787C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7787C1 = {  "S7787C1", // class name
  bases_S7787C1, 10,
  &(vtc_S7787C1[0]), // expected_vtbl_contents
  &(vtt_S7787C1[0]), // expected_vtt_contents
  ABISELECT(12544,6948), // object size
  NSPAIRA(_ZTI7S7787C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7787C1),55, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7787C1),26, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names89,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7786C7  {
  int s7786c7f0;
  void *s7786c7f1;
  ::S281C37_nt s7786c7f2;
  virtual void  v2(); // _ZN7S7786C72v2Ev
  ~S7786C7(); // tgen
  S7786C7(); // tgen
};
//SIG(-1 S7786C7) C1{ v1 Fi Fp FC2{ m Fp[2]}}


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

static void Test_S7786C7()
{
  extern Class_Descriptor cd_S7786C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7786C7, buf);
    S7786C7 *dp, &lv = *(dp=new (buf) S7786C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7786C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7786C7)");
    check_field_offset(lv, s7786c7f0, ABISELECT(8,4), "S7786C7.s7786c7f0");
    check_field_offset(lv, s7786c7f1, ABISELECT(16,8), "S7786C7.s7786c7f1");
    check_field_offset(lv, s7786c7f2, ABISELECT(24,12), "S7786C7.s7786c7f2");
    test_class_info(&lv, &cd_S7786C7);
    dp->~S7786C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7786C7(Test_S7786C7, "S7786C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7786C7C1Ev();
extern void _ZN7S7786C7D1Ev();
Name_Map name_map_S7786C7[] = {
  NSPAIR(_ZN7S7786C7C1Ev),
  NSPAIR(_ZN7S7786C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7786C7[];
extern void _ZN7S7786C72v2Ev();
static  VTBL_ENTRY vtc_S7786C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C7[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
};
extern VTBL_ENTRY _ZTI7S7786C7[];
extern  VTBL_ENTRY _ZTV7S7786C7[];
Class_Descriptor cd_S7786C7 = {  "S7786C7", // class name
  0,0,//no base classes
  &(vtc_S7786C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7786C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7786C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7786C4  {
  int s7786c4f0[6];
  char s7786c4f1:2;
  long double s7786c4f2;
  void *s7786c4f3[2];
  int s7786c4f4;
  long double s7786c4f5;
  ::S20176C3_nt s7786c4f6;
  ::S281C37_nt s7786c4f7;
  ::S281C37_nt s7786c4f8[9];
  void *s7786c4f9;
  ::S7786C7 s7786c4f10;
  ::S7786C7 s7786c4f11;
  virtual void  v3(); // _ZN7S7786C42v3Ev
  ~S7786C4(); // tgen
  S7786C4(); // tgen
};
//SIG(-1 S7786C4) C1{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC2{} FC3{ m Fp[2]} FC3[9] Fp FC4{ v2 Fi Fp FC3} FC4}


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

static void Test_S7786C4()
{
  extern Class_Descriptor cd_S7786C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,50)];
    init_test(&cd_S7786C4, buf);
    S7786C4 *dp, &lv = *(dp=new (buf) S7786C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,196), "sizeof(S7786C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7786C4)");
    check_field_offset(lv, s7786c4f0, ABISELECT(8,4), "S7786C4.s7786c4f0");
    set_bf_and_test(lv, s7786c4f1, ABISELECT(32,28), 0, 2, 1, "S7786C4");
    set_bf_and_test(lv, s7786c4f1, ABISELECT(32,28), 0, 2, hide_sll(1LL<<1), "S7786C4");
    check_field_offset(lv, s7786c4f2, ABISELECT(48,32), "S7786C4.s7786c4f2");
    check_field_offset(lv, s7786c4f3, ABISELECT(64,44), "S7786C4.s7786c4f3");
    check_field_offset(lv, s7786c4f4, ABISELECT(80,52), "S7786C4.s7786c4f4");
    check_field_offset(lv, s7786c4f5, ABISELECT(96,56), "S7786C4.s7786c4f5");
    check_field_offset(lv, s7786c4f6, ABISELECT(112,68), "S7786C4.s7786c4f6");
    check_field_offset(lv, s7786c4f7, ABISELECT(120,72), "S7786C4.s7786c4f7");
    check_field_offset(lv, s7786c4f8, ABISELECT(136,80), "S7786C4.s7786c4f8");
    check_field_offset(lv, s7786c4f9, ABISELECT(280,152), "S7786C4.s7786c4f9");
    check_field_offset(lv, s7786c4f10, ABISELECT(288,156), "S7786C4.s7786c4f10");
    check_field_offset(lv, s7786c4f11, ABISELECT(328,176), "S7786C4.s7786c4f11");
    test_class_info(&lv, &cd_S7786C4);
    dp->~S7786C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7786C4(Test_S7786C4, "S7786C4", ABISELECT(368,196));

#else // __cplusplus

extern void _ZN7S7786C4C1Ev();
extern void _ZN7S7786C4D1Ev();
Name_Map name_map_S7786C4[] = {
  NSPAIR(_ZN7S7786C4C1Ev),
  NSPAIR(_ZN7S7786C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7786C4[];
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY vtc_S7786C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C4[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
extern VTBL_ENTRY _ZTI7S7786C4[];
extern  VTBL_ENTRY _ZTV7S7786C4[];
Class_Descriptor cd_S7786C4 = {  "S7786C4", // class name
  0,0,//no base classes
  &(vtc_S7786C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,196), // object size
  NSPAIRA(_ZTI7S7786C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7786C4),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7786C10  : S7786C7 , virtual S7786C4 , virtual S281C37_nt {
  void *s7786c10f0;
  __tsi64 s7786c10f1;
  char s7786c10f2[2];
  ::S7786C4 s7786c10f3;
  short s7786c10f4[7];
  int s7786c10f5;
  char s7786c10f6;
  int s7786c10f7:20;
  virtual void  v4(); // _ZN8S7786C102v4Ev
  ~S7786C10(); // tgen
  S7786C10(); // tgen
};
//SIG(-1 S7786C10) C1{ BC2{ v2 Fi Fp FC3{ m Fp[2]}} VBC4{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC3 FC3[9] Fp FC2 FC2} VBC3 v1 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20}


void  S7786C10 ::v4(){vfunc_called(this, "_ZN8S7786C102v4Ev");}
S7786C10 ::~S7786C10(){ note_dtor("S7786C10", this);} // tgen
S7786C10 ::S7786C10(){ note_ctor("S7786C10", this);} // tgen

static void Test_S7786C10()
{
  extern Class_Descriptor cd_S7786C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,116)];
    init_test(&cd_S7786C10, buf);
    S7786C10 *dp, &lv = *(dp=new (buf) S7786C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,460), "sizeof(S7786C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7786C10)");
    check_base_class_offset(lv, (S7786C7*), 0, "S7786C10");
    check_base_class_offset(lv, (S7786C4*), ABISELECT(464,256), "S7786C10");
    check_base_class_offset(lv, (S281C37_nt*), ABISELECT(832,452), "S7786C10");
    check_field_offset(lv, s7786c10f0, ABISELECT(40,20), "S7786C10.s7786c10f0");
    check_field_offset(lv, s7786c10f1, ABISELECT(48,24), "S7786C10.s7786c10f1");
    check_field_offset(lv, s7786c10f2, ABISELECT(56,32), "S7786C10.s7786c10f2");
    check_field_offset(lv, s7786c10f3, ABISELECT(64,36), "S7786C10.s7786c10f3");
    check_field_offset(lv, s7786c10f4, ABISELECT(432,232), "S7786C10.s7786c10f4");
    check_field_offset(lv, s7786c10f5, ABISELECT(448,248), "S7786C10.s7786c10f5");
    check_field_offset(lv, s7786c10f6, ABISELECT(452,252), "S7786C10.s7786c10f6");
    set_bf_and_test(lv, s7786c10f7, ABISELECT(453,253), 0, 20, 1, "S7786C10");
    set_bf_and_test(lv, s7786c10f7, ABISELECT(453,253), 0, 20, hide_sll(1LL<<19), "S7786C10");
    test_class_info(&lv, &cd_S7786C10);
    dp->~S7786C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7786C10(Test_S7786C10, "S7786C10", ABISELECT(848,460));

#else // __cplusplus

extern void _ZN8S7786C10C1Ev();
extern void _ZN8S7786C10D1Ev();
Name_Map name_map_S7786C10[] = {
  NSPAIR(_ZN8S7786C10C1Ev),
  NSPAIR(_ZN8S7786C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7786C7;
extern VTBL_ENTRY _ZTI7S7786C7[];
extern  VTBL_ENTRY _ZTV7S7786C7[];
extern Class_Descriptor cd_S7786C4;
extern VTBL_ENTRY _ZTI7S7786C4[];
extern  VTBL_ENTRY _ZTV7S7786C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S7786C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7786C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7786C4,    ABISELECT(464,256), //bcp->offset
    6, //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_S281C37_nt,    ABISELECT(832,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7786C10[];
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY vtc_S7786C10[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7786C10[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7786C10[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S7786C10[];
static  VTT_ENTRY vtt_S7786C10[] = {
  {&(_ZTV8S7786C10[4]),  4,10},
  {&(_ZTV8S7786C10[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S7786C10[];
extern  VTBL_ENTRY _ZTV8S7786C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7786C10[];
Class_Descriptor cd_S7786C10 = {  "S7786C10", // class name
  bases_S7786C10, 3,
  &(vtc_S7786C10[0]), // expected_vtbl_contents
  &(vtt_S7786C10[0]), // expected_vtt_contents
  ABISELECT(848,460), // object size
  NSPAIRA(_ZTI8S7786C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7786C10),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7786C10),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  S7786C9  : virtual S7786C10 {
  int s7786c9f0;
  char s7786c9f1;
  void *s7786c9f2[6];
  int s7786c9f3[2];
  void *s7786c9f4;
  ::S281C37_nt s7786c9f5;
  ~S7786C9(); // tgen
  S7786C9(); // tgen
};
//SIG(-1 S7786C9) C1{ VBC2{ BC3{ v1 Fi Fp FC4{ m Fp[2]}} VBC5{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC6{} FC4 FC4[9] Fp FC3 FC3} VBC4 v3 Fp FL Fc[2] FC5 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4}


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

static void Test_S7786C9()
{
  extern Class_Descriptor cd_S7786C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,130)];
    init_test(&cd_S7786C9, buf);
    S7786C9 *dp, &lv = *(dp=new (buf) S7786C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,516), "sizeof(S7786C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7786C9)");
    check_base_class_offset(lv, (S7786C7*)(S7786C10*), ABISELECT(96,56), "S7786C9");
    check_base_class_offset(lv, (S7786C4*)(S7786C10*), ABISELECT(560,312), "S7786C9");
    check_base_class_offset(lv, (S281C37_nt*)(S7786C10*), ABISELECT(928,508), "S7786C9");
    check_base_class_offset(lv, (S7786C10*), ABISELECT(96,56), "S7786C9");
    check_field_offset(lv, s7786c9f0, ABISELECT(8,4), "S7786C9.s7786c9f0");
    check_field_offset(lv, s7786c9f1, ABISELECT(12,8), "S7786C9.s7786c9f1");
    check_field_offset(lv, s7786c9f2, ABISELECT(16,12), "S7786C9.s7786c9f2");
    check_field_offset(lv, s7786c9f3, ABISELECT(64,36), "S7786C9.s7786c9f3");
    check_field_offset(lv, s7786c9f4, ABISELECT(72,44), "S7786C9.s7786c9f4");
    check_field_offset(lv, s7786c9f5, ABISELECT(80,48), "S7786C9.s7786c9f5");
    test_class_info(&lv, &cd_S7786C9);
    dp->~S7786C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7786C9(Test_S7786C9, "S7786C9", ABISELECT(944,516));

#else // __cplusplus

extern void _ZN7S7786C9C1Ev();
extern void _ZN7S7786C9D1Ev();
Name_Map name_map_S7786C9[] = {
  NSPAIR(_ZN7S7786C9C1Ev),
  NSPAIR(_ZN7S7786C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7786C7;
extern VTBL_ENTRY _ZTI7S7786C7[];
extern  VTBL_ENTRY _ZTV7S7786C7[];
extern Class_Descriptor cd_S7786C4;
extern VTBL_ENTRY _ZTI7S7786C4[];
extern  VTBL_ENTRY _ZTV7S7786C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7786C10;
extern VTBL_ENTRY _ZTI8S7786C10[];
extern  VTBL_ENTRY _ZTV8S7786C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7786C10[];
static Base_Class bases_S7786C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7786C7,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7786C4,    ABISELECT(560,312), //bcp->offset
    13, //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
    3, //immediately_derived
  0, 1},
  {&cd_S281C37_nt,    ABISELECT(928,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7786C10,    ABISELECT(96,56), //bcp->offset
    5, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7786C9[];
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY vtc_S7786C9[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
extern VTBL_ENTRY _ZTV7S7786C9[];
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C9[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7786C10[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__8S7786C10__7S7786C9[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7786C10[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
static  VTT_ENTRY vtt_S7786C9[] = {
  {&(_ZTV7S7786C9[5]),  5,17},
  {&(_ZTV7S7786C9[11]),  11,17},
  {&(_ZTV7S7786C9[16]),  16,17},
  {&(_tg__ZTV8S7786C10__7S7786C9[4]),  4,6},
  {&(_tg__ZTV7S7786C4__8S7786C10__7S7786C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7786C9[];
extern  VTBL_ENTRY _ZTV7S7786C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C9[];
Class_Descriptor cd_S7786C9 = {  "S7786C9", // class name
  bases_S7786C9, 4,
  &(vtc_S7786C9[0]), // expected_vtbl_contents
  &(vtt_S7786C9[0]), // expected_vtt_contents
  ABISELECT(944,516), // object size
  NSPAIRA(_ZTI7S7786C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7786C9),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7786C9),5, //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  S7786C8  : virtual S7786C9 , S7786C4 , S281C37_nt {
  char s7786c8f0;
  int s7786c8f1[2];
  long double s7786c8f2[2];
  short s7786c8f3;
  void *s7786c8f4;
  int s7786c8f5;
  __tsi64 s7786c8f6;
  int s7786c8f7;
  void *s7786c8f8;
  virtual  ~S7786C8(); // _ZN7S7786C8D2Ev
  virtual void  v5(); // _ZN7S7786C82v5Ev
  S7786C8(); // tgen
};
//SIG(-1 S7786C8) C1{ VBC2{ VBC3{ BC4{ v2 Fi Fp FC5{ m Fp[2]}} VBC6{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC7{} FC5 FC5[9] Fp FC4 FC4} VBC5 v4 Fp FL Fc[2] FC6 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC6 BC5 vd v1 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp}


 S7786C8 ::~S7786C8(){ note_dtor("S7786C8", this);}
void  S7786C8 ::v5(){vfunc_called(this, "_ZN7S7786C82v5Ev");}
S7786C8 ::S7786C8(){ note_ctor("S7786C8", this);} // tgen

static void Test_S7786C8()
{
  extern Class_Descriptor cd_S7786C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(90,197)];
    init_test(&cd_S7786C8, buf);
    S7786C8 *dp, &lv = *(dp=new (buf) S7786C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1424,784), "sizeof(S7786C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7786C8)");
    check_base_class_offset(lv, (S7786C7*)(S7786C10*), ABISELECT(576,324), "S7786C8");
    check_base_class_offset(lv, (S7786C4*)(S7786C10*), ABISELECT(1040,580), "S7786C8");
    check_base_class_offset(lv, (S281C37_nt*)(S7786C10*), ABISELECT(1408,776), "S7786C8");
    check_base_class_offset(lv, (S7786C10*)(S7786C9*), ABISELECT(576,324), "S7786C8");
    check_base_class_offset(lv, (S7786C9*), ABISELECT(480,268), "S7786C8");
    /*is_ambiguous_... S7786C8::S7786C4 */ AMB_check_base_class_offset(lv, (S7786C4*), 0, "S7786C8");
    /*is_ambiguous_... S7786C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*), ABISELECT(368,196), "S7786C8");
    check_field_offset(lv, s7786c8f0, ABISELECT(384,204), "S7786C8.s7786c8f0");
    check_field_offset(lv, s7786c8f1, ABISELECT(388,208), "S7786C8.s7786c8f1");
    check_field_offset(lv, s7786c8f2, ABISELECT(400,216), "S7786C8.s7786c8f2");
    check_field_offset(lv, s7786c8f3, ABISELECT(432,240), "S7786C8.s7786c8f3");
    check_field_offset(lv, s7786c8f4, ABISELECT(440,244), "S7786C8.s7786c8f4");
    check_field_offset(lv, s7786c8f5, ABISELECT(448,248), "S7786C8.s7786c8f5");
    check_field_offset(lv, s7786c8f6, ABISELECT(456,252), "S7786C8.s7786c8f6");
    check_field_offset(lv, s7786c8f7, ABISELECT(464,260), "S7786C8.s7786c8f7");
    check_field_offset(lv, s7786c8f8, ABISELECT(472,264), "S7786C8.s7786c8f8");
    test_class_info(&lv, &cd_S7786C8);
    dp->~S7786C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7786C8(Test_S7786C8, "S7786C8", ABISELECT(1424,784));

#else // __cplusplus

extern void _ZN7S7786C8C1Ev();
extern void _ZN7S7786C8D2Ev();
Name_Map name_map_S7786C8[] = {
  NSPAIR(_ZN7S7786C8C1Ev),
  NSPAIR(_ZN7S7786C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7786C7;
extern VTBL_ENTRY _ZTI7S7786C7[];
extern  VTBL_ENTRY _ZTV7S7786C7[];
extern Class_Descriptor cd_S7786C4;
extern VTBL_ENTRY _ZTI7S7786C4[];
extern  VTBL_ENTRY _ZTV7S7786C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7786C10;
extern VTBL_ENTRY _ZTI8S7786C10[];
extern  VTBL_ENTRY _ZTV8S7786C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7786C10[];
extern Class_Descriptor cd_S7786C9;
extern VTBL_ENTRY _ZTI7S7786C9[];
extern  VTBL_ENTRY _ZTV7S7786C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C9[];
extern Class_Descriptor cd_S7786C4;
extern VTBL_ENTRY _ZTI7S7786C4[];
extern  VTBL_ENTRY _ZTV7S7786C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
static Base_Class bases_S7786C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7786C7,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7786C4,    ABISELECT(1040,580), //bcp->offset
    23, //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_S281C37_nt,    ABISELECT(1408,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7786C10,    ABISELECT(576,324), //bcp->offset
    15, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7786C9,    ABISELECT(480,268), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7786C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S281C37_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7786C8[];
extern void _ZN7S7786C42v3Ev();
extern void _ZN7S7786C8D1Ev();
extern void _ZN7S7786C8D0Ev();
extern void _ZN7S7786C82v5Ev();
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY vtc_S7786C8[] = {
  ABISELECT(1408,776),
  ABISELECT(1040,580),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7786C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7786C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7786C82v5Ev,
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
  0,
  ABISELECT(-1040,-580),
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
extern VTBL_ENTRY _ZTV7S7786C8[];
static  VTBL_ENTRY _tg__ZTV7S7786C9__7S7786C8[] = {
  ABISELECT(928,508),
  ABISELECT(560,312),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C9__7S7786C8[] = {
  0,
  0,
  ABISELECT(832,452),
  ABISELECT(464,256),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__7S7786C9__7S7786C8[] = {
  0,
  ABISELECT(-560,-312),
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C8[] = {
  ABISELECT(832,452),
  ABISELECT(464,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7786C10[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__8S7786C10__7S7786C8[] = {
  0,
  ABISELECT(-464,-256),
  (VTBL_ENTRY)&(_ZTI8S7786C10[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
static  VTT_ENTRY vtt_S7786C8[] = {
  {&(_ZTV7S7786C8[6]),  6,27},
  {&(_ZTV7S7786C8[15]),  15,27},
  {&(_ZTV7S7786C8[21]),  21,27},
  {&(_ZTV7S7786C8[26]),  26,27},
  {&(_tg__ZTV7S7786C9__7S7786C8[5]),  5,5},
  {&(_tg__ZTV8S7786C10__7S7786C9__7S7786C8[6]),  6,8},
  {&(_tg__ZTV7S7786C4__7S7786C9__7S7786C8[3]),  3,4},
  {&(_tg__ZTV8S7786C10__7S7786C8[4]),  4,6},
  {&(_tg__ZTV7S7786C4__8S7786C10__7S7786C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7786C8[];
extern  VTBL_ENTRY _ZTV7S7786C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C8[];
Class_Descriptor cd_S7786C8 = {  "S7786C8", // class name
  bases_S7786C8, 7,
  &(vtc_S7786C8[0]), // expected_vtbl_contents
  &(vtt_S7786C8[0]), // expected_vtt_contents
  ABISELECT(1424,784), // object size
  NSPAIRA(_ZTI7S7786C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7786C8),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7786C8),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7786C3  : virtual S7786C4 , virtual S7786C8 {
  ::S7786C8 s7786c3f0[7];
  int s7786c3f1;
  short s7786c3f2;
  int s7786c3f3;
  ::S7786C10 s7786c3f4;
  long s7786c3f5[9];
  virtual void  v6(); // _ZN7S7786C32v6Ev
  virtual void  v7(); // _ZN7S7786C32v7Ev
  ~S7786C3(); // tgen
  S7786C3(); // tgen
};
//SIG(-1 S7786C3) C1{ VBC2{ v3 Fi[6] Fc:2 FD Fp[2] Fi FD FC3{} FC4{ m Fp[2]} FC4[9] Fp FC5{ v4 Fi Fp FC4} FC5} VBC6{ VBC7{ VBC8{ BC5 VBC2 VBC4 v5 Fp FL Fc[2] FC2 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC4} BC2 BC4 vd v6 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v1 v2 FC6[7] Fi Fs Fi FC8 Fl[9]}


void  S7786C3 ::v6(){vfunc_called(this, "_ZN7S7786C32v6Ev");}
void  S7786C3 ::v7(){vfunc_called(this, "_ZN7S7786C32v7Ev");}
S7786C3 ::~S7786C3(){ note_dtor("S7786C3", this);} // tgen
S7786C3 ::S7786C3(){ note_ctor("S7786C3", this);} // tgen

static void Test_S7786C3()
{
  extern Class_Descriptor cd_S7786C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(773,1697)];
    init_test(&cd_S7786C3, buf);
    S7786C3 *dp, &lv = *(dp=new (buf) S7786C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12352,6784), "sizeof(S7786C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7786C3)");
    /*is_ambiguous_... S7786C3::S7786C4 */ AMB_check_base_class_offset(lv, (S7786C4*), ABISELECT(10928,6000), "S7786C3");
    check_base_class_offset(lv, (S7786C4*)(S7786C10*), ABISELECT(10928,6000), "S7786C3");
    check_base_class_offset(lv, (S7786C7*)(S7786C10*), ABISELECT(11872,6520), "S7786C3");
    check_base_class_offset(lv, (S281C37_nt*)(S7786C10*), ABISELECT(12328,6776), "S7786C3");
    check_base_class_offset(lv, (S7786C10*)(S7786C9*), ABISELECT(11872,6520), "S7786C3");
    check_base_class_offset(lv, (S7786C9*)(S7786C8*), ABISELECT(11776,6464), "S7786C3");
    /*is_ambiguous_... S7786C8::S7786C4 */ AMB_check_base_class_offset(lv, (S7786C4*)(S7786C8*), ABISELECT(11296,6196), "S7786C3");
    /*is_ambiguous_... S7786C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7786C8*), ABISELECT(11664,6392), "S7786C3");
    check_base_class_offset(lv, (S7786C8*), ABISELECT(11296,6196), "S7786C3");
    check_field_offset(lv, s7786c3f0, ABISELECT(16,4), "S7786C3.s7786c3f0");
    check_field_offset(lv, s7786c3f1, ABISELECT(9984,5492), "S7786C3.s7786c3f1");
    check_field_offset(lv, s7786c3f2, ABISELECT(9988,5496), "S7786C3.s7786c3f2");
    check_field_offset(lv, s7786c3f3, ABISELECT(9992,5500), "S7786C3.s7786c3f3");
    check_field_offset(lv, s7786c3f4, ABISELECT(10000,5504), "S7786C3.s7786c3f4");
    check_field_offset(lv, s7786c3f5, ABISELECT(10848,5964), "S7786C3.s7786c3f5");
    test_class_info(&lv, &cd_S7786C3);
    dp->~S7786C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7786C3(Test_S7786C3, "S7786C3", ABISELECT(12352,6784));

#else // __cplusplus

extern void _ZN7S7786C3C1Ev();
extern void _ZN7S7786C3D1Ev();
Name_Map name_map_S7786C3[] = {
  NSPAIR(_ZN7S7786C3C1Ev),
  NSPAIR(_ZN7S7786C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7786C4;
extern VTBL_ENTRY _ZTI7S7786C4[];
extern  VTBL_ENTRY _ZTV7S7786C4[];
extern Class_Descriptor cd_S7786C7;
extern VTBL_ENTRY _ZTI7S7786C7[];
extern  VTBL_ENTRY _ZTV7S7786C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7786C10;
extern VTBL_ENTRY _ZTI8S7786C10[];
extern  VTBL_ENTRY _ZTV8S7786C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7786C10[];
extern Class_Descriptor cd_S7786C9;
extern VTBL_ENTRY _ZTI7S7786C9[];
extern  VTBL_ENTRY _ZTV7S7786C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C9[];
extern Class_Descriptor cd_S7786C4;
extern VTBL_ENTRY _ZTI7S7786C4[];
extern  VTBL_ENTRY _ZTV7S7786C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7786C8;
extern VTBL_ENTRY _ZTI7S7786C8[];
extern  VTBL_ENTRY _ZTV7S7786C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C8[];
static Base_Class bases_S7786C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7786C4,    ABISELECT(10928,6000), //bcp->offset
    11, //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_S7786C7,    ABISELECT(11872,6520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12328,6776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7786C10,    ABISELECT(11872,6520), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7786C9,    ABISELECT(11776,6464), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7786C4,    ABISELECT(11296,6196), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11664,6392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7786C8,    ABISELECT(11296,6196), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7786C3[];
extern void _ZN7S7786C32v6Ev();
extern void _ZN7S7786C32v7Ev();
extern void _ZN7S7786C3D1Ev();
extern void _ZN7S7786C3D0Ev();
extern void _ZN7S7786C42v3Ev();
extern void _ZN7S7786C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S7786C3D1Ev,_ZTv0_n32_N7S7786C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7786C3D1Ev,_ZThn6196_N7S7786C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7786C3D0Ev,_ZTv0_n32_N7S7786C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7786C3D0Ev,_ZThn6196_N7S7786C3D0Ev)() __attribute__((weak));
extern void _ZN7S7786C82v5Ev();
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY vtc_S7786C3[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  (VTBL_ENTRY)&_ZN7S7786C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7786C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7786C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7786C3D0Ev,
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7786C3D1Ev,_ZTv0_n32_N7S7786C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7786C3D0Ev,_ZTv0_n32_N7S7786C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7786C82v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern VTBL_ENTRY _ZTV7S7786C3[];
extern void _ZN7S7786C42v3Ev();
extern void _ZN7S7786C8D1Ev();
extern void _ZN7S7786C8D0Ev();
extern void _ZN7S7786C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C8__7S7786C3[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7786C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7786C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7786C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7786C9__7S7786C8__7S7786C3[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C8__7S7786C3[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__7S7786C8__7S7786C3[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7786C9__7S7786C3[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C9__7S7786C3[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__7S7786C9__7S7786C3[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C3[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7786C10[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__8S7786C10__7S7786C3[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7786C10[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
static  VTT_ENTRY vtt_S7786C3[] = {
  {&(_ZTV7S7786C3[7]),  7,41},
  {&(_ZTV7S7786C3[14]),  14,41},
  {&(_ZTV7S7786C3[24]),  24,41},
  {&(_ZTV7S7786C3[33]),  33,41},
  {&(_ZTV7S7786C3[39]),  39,41},
  {&(_tg__ZTV7S7786C8__7S7786C3[6]),  6,10},
  {&(_tg__ZTV7S7786C9__7S7786C8__7S7786C3[5]),  5,5},
  {&(_tg__ZTV8S7786C10__7S7786C8__7S7786C3[6]),  6,8},
  {&(_tg__ZTV7S7786C4__7S7786C8__7S7786C3[3]),  3,4},
  {&(_tg__ZTV7S7786C9__7S7786C3[5]),  5,5},
  {&(_tg__ZTV8S7786C10__7S7786C9__7S7786C3[6]),  6,8},
  {&(_tg__ZTV7S7786C4__7S7786C9__7S7786C3[3]),  3,4},
  {&(_tg__ZTV8S7786C10__7S7786C3[4]),  4,6},
  {&(_tg__ZTV7S7786C4__8S7786C10__7S7786C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7786C3[];
extern  VTBL_ENTRY _ZTV7S7786C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C3[];
static VTBL_ENTRY alt_thunk_names90[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7786C3D0Ev,_ZTv0_n32_N7S7786C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7786C3D0Ev,_ZThn6196_N7S7786C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7786C3D1Ev,_ZTv0_n32_N7S7786C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7786C3D1Ev,_ZThn6196_N7S7786C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7786C3 = {  "S7786C3", // class name
  bases_S7786C3, 8,
  &(vtc_S7786C3[0]), // expected_vtbl_contents
  &(vtt_S7786C3[0]), // expected_vtt_contents
  ABISELECT(12352,6784), // object size
  NSPAIRA(_ZTI7S7786C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7786C3),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7786C3),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names90,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7786C2  : virtual S7786C3 {
  char s7786c2f0;
  int s7786c2f1[3];
  virtual  ~S7786C2(); // _ZN7S7786C2D2Ev
  S7786C2(); // tgen
};
//SIG(-1 S7786C2) C1{ VBC2{ VBC3{ v1 Fi[6] Fc:2 FD Fp[2] Fi FD FC4{} FC5{ m Fp[2]} FC5[9] Fp FC6{ v2 Fi Fp FC5} FC6} VBC7{ VBC8{ VBC9{ BC6 VBC3 VBC5 v3 Fp FL Fc[2] FC3 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC5} BC3 BC5 vd v4 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v5 v6 FC7[7] Fi Fs Fi FC9 Fl[9]} vd Fc Fi[3]}


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

static void Test_S7786C2()
{
  extern Class_Descriptor cd_S7786C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(775,1702)];
    init_test(&cd_S7786C2, buf);
    S7786C2 *dp, &lv = *(dp=new (buf) S7786C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12384,6804), "sizeof(S7786C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7786C2)");
    /*is_ambiguous_... S7786C3::S7786C4 */ AMB_check_base_class_offset(lv, (S7786C4*)(S7786C3*), ABISELECT(10960,6020), "S7786C2");
    check_base_class_offset(lv, (S7786C4*)(S7786C10*), ABISELECT(10960,6020), "S7786C2");
    check_base_class_offset(lv, (S7786C7*)(S7786C10*), ABISELECT(11904,6540), "S7786C2");
    check_base_class_offset(lv, (S281C37_nt*)(S7786C10*), ABISELECT(12360,6796), "S7786C2");
    check_base_class_offset(lv, (S7786C10*)(S7786C9*), ABISELECT(11904,6540), "S7786C2");
    check_base_class_offset(lv, (S7786C9*)(S7786C8*), ABISELECT(11808,6484), "S7786C2");
    /*is_ambiguous_... S7786C8::S7786C4 */ AMB_check_base_class_offset(lv, (S7786C4*)(S7786C8*), ABISELECT(11328,6216), "S7786C2");
    /*is_ambiguous_... S7786C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7786C8*), ABISELECT(11696,6412), "S7786C2");
    check_base_class_offset(lv, (S7786C8*)(S7786C3*), ABISELECT(11328,6216), "S7786C2");
    check_base_class_offset(lv, (S7786C3*), ABISELECT(32,20), "S7786C2");
    check_field_offset(lv, s7786c2f0, ABISELECT(8,4), "S7786C2.s7786c2f0");
    check_field_offset(lv, s7786c2f1, ABISELECT(12,8), "S7786C2.s7786c2f1");
    test_class_info(&lv, &cd_S7786C2);
    dp->~S7786C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7786C2(Test_S7786C2, "S7786C2", ABISELECT(12384,6804));

#else // __cplusplus

extern void _ZN7S7786C2C1Ev();
extern void _ZN7S7786C2D2Ev();
Name_Map name_map_S7786C2[] = {
  NSPAIR(_ZN7S7786C2C1Ev),
  NSPAIR(_ZN7S7786C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7786C4;
extern VTBL_ENTRY _ZTI7S7786C4[];
extern  VTBL_ENTRY _ZTV7S7786C4[];
extern Class_Descriptor cd_S7786C7;
extern VTBL_ENTRY _ZTI7S7786C7[];
extern  VTBL_ENTRY _ZTV7S7786C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7786C10;
extern VTBL_ENTRY _ZTI8S7786C10[];
extern  VTBL_ENTRY _ZTV8S7786C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7786C10[];
extern Class_Descriptor cd_S7786C9;
extern VTBL_ENTRY _ZTI7S7786C9[];
extern  VTBL_ENTRY _ZTV7S7786C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C9[];
extern Class_Descriptor cd_S7786C4;
extern VTBL_ENTRY _ZTI7S7786C4[];
extern  VTBL_ENTRY _ZTV7S7786C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7786C8;
extern VTBL_ENTRY _ZTI7S7786C8[];
extern  VTBL_ENTRY _ZTV7S7786C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C8[];
extern Class_Descriptor cd_S7786C3;
extern VTBL_ENTRY _ZTI7S7786C3[];
extern  VTBL_ENTRY _ZTV7S7786C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C3[];
static Base_Class bases_S7786C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7786C4,    ABISELECT(10960,6020), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S7786C7,    ABISELECT(11904,6540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12360,6796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7786C10,    ABISELECT(11904,6540), //bcp->offset
    46, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7786C9,    ABISELECT(11808,6484), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7786C4,    ABISELECT(11328,6216), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11696,6412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7786C8,    ABISELECT(11328,6216), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7786C3,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7786C2[];
extern void _ZN7S7786C2D1Ev();
extern void _ZN7S7786C2D0Ev();
extern void _ZN7S7786C32v6Ev();
extern void _ZN7S7786C32v7Ev();
extern void ABISELECT(_ZTv0_n80_N7S7786C2D1Ev,_ZTv0_n40_N7S7786C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7786C2D1Ev,_ZThn20_N7S7786C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7786C2D0Ev,_ZTv0_n40_N7S7786C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7786C2D0Ev,_ZThn20_N7S7786C2D0Ev)() __attribute__((weak));
extern void _ZN7S7786C42v3Ev();
extern void _ZN7S7786C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S7786C2D1Ev,_ZTv0_n32_N7S7786C2D1Ev)();
extern void ABISELECT(_ZThn11328_N7S7786C2D1Ev,_ZThn6216_N7S7786C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7786C2D0Ev,_ZTv0_n32_N7S7786C2D0Ev)();
extern void ABISELECT(_ZThn11328_N7S7786C2D0Ev,_ZThn6216_N7S7786C2D0Ev)() __attribute__((weak));
extern void _ZN7S7786C82v5Ev();
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY vtc_S7786C2[] = {
  ABISELECT(12360,6796),
  ABISELECT(11904,6540),
  ABISELECT(11808,6484),
  ABISELECT(11328,6216),
  ABISELECT(10960,6020),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C2[0]),
  (VTBL_ENTRY)&_ZN7S7786C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7786C2D0Ev,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7786C2[0]),
  (VTBL_ENTRY)&_ZN7S7786C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7786C32v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7786C2D1Ev,_ZTv0_n40_N7S7786C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7786C2D0Ev,_ZTv0_n40_N7S7786C2D0Ev),
  0,
  ABISELECT(-10960,-6020),
  (VTBL_ENTRY)&(_ZTI7S7786C2[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  0,
  ABISELECT(-11328,-6216),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11328,-6216),
  (VTBL_ENTRY)&(_ZTI7S7786C2[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7786C2D1Ev,_ZTv0_n32_N7S7786C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7786C2D0Ev,_ZTv0_n32_N7S7786C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7786C82v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11808,-6484),
  (VTBL_ENTRY)&(_ZTI7S7786C2[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11904,-6540),
  (VTBL_ENTRY)&(_ZTI7S7786C2[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern VTBL_ENTRY _ZTV7S7786C2[];
extern void _ZN7S7786C32v6Ev();
extern void _ZN7S7786C32v7Ev();
extern void _ZN7S7786C3D1Ev();
extern void _ZN7S7786C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C3__7S7786C2[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  (VTBL_ENTRY)&_ZN7S7786C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7786C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7786C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7786C3D0Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__7S7786C3__7S7786C2[] = {
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
extern void _ZN7S7786C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S7786C3D1Ev,_ZTv0_n32_N7S7786C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7786C3D1Ev,_ZThn6196_N7S7786C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7786C3D0Ev,_ZTv0_n32_N7S7786C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7786C3D0Ev,_ZThn6196_N7S7786C3D0Ev)() __attribute__((weak));
extern void _ZN7S7786C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C8__7S7786C3__7S7786C2[] = {
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7786C3D1Ev,_ZTv0_n32_N7S7786C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7786C3D0Ev,_ZTv0_n32_N7S7786C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7786C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7786C9__7S7786C3__7S7786C2[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C3__7S7786C2[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
extern void _ZN7S7786C8D1Ev();
extern void _ZN7S7786C8D0Ev();
extern void _ZN7S7786C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C8__7S7786C2[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7786C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7786C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7786C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7786C9__7S7786C8__7S7786C2[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C8__7S7786C2[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__7S7786C8__7S7786C2[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7786C9__7S7786C2[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C9__7S7786C2[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__7S7786C9__7S7786C2[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C2[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7786C10[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__8S7786C10__7S7786C2[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7786C10[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
static  VTT_ENTRY vtt_S7786C2[] = {
  {&(_ZTV7S7786C2[8]),  8,54},
  {&(_ZTV7S7786C2[20]),  20,54},
  {&(_ZTV7S7786C2[27]),  27,54},
  {&(_ZTV7S7786C2[37]),  37,54},
  {&(_ZTV7S7786C2[46]),  46,54},
  {&(_ZTV7S7786C2[52]),  52,54},
  {&(_tg__ZTV7S7786C3__7S7786C2[7]),  7,11},
  {&(_tg__ZTV7S7786C4__7S7786C3__7S7786C2[3]),  3,4},
  {&(_tg__ZTV7S7786C8__7S7786C3__7S7786C2[9]),  9,13},
  {&(_tg__ZTV7S7786C9__7S7786C3__7S7786C2[5]),  5,5},
  {&(_tg__ZTV8S7786C10__7S7786C3__7S7786C2[6]),  6,8},
  {&(_tg__ZTV7S7786C8__7S7786C2[6]),  6,10},
  {&(_tg__ZTV7S7786C9__7S7786C8__7S7786C2[5]),  5,5},
  {&(_tg__ZTV8S7786C10__7S7786C8__7S7786C2[6]),  6,8},
  {&(_tg__ZTV7S7786C4__7S7786C8__7S7786C2[3]),  3,4},
  {&(_tg__ZTV7S7786C9__7S7786C2[5]),  5,5},
  {&(_tg__ZTV8S7786C10__7S7786C9__7S7786C2[6]),  6,8},
  {&(_tg__ZTV7S7786C4__7S7786C9__7S7786C2[3]),  3,4},
  {&(_tg__ZTV8S7786C10__7S7786C2[4]),  4,6},
  {&(_tg__ZTV7S7786C4__8S7786C10__7S7786C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7786C2[];
extern  VTBL_ENTRY _ZTV7S7786C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C2[];
static VTBL_ENTRY alt_thunk_names91[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7786C3D0Ev,_ZTv0_n32_N7S7786C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7786C3D0Ev,_ZThn6196_N7S7786C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7786C3D1Ev,_ZTv0_n32_N7S7786C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7786C3D1Ev,_ZThn6196_N7S7786C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7786C2D0Ev,_ZTv0_n32_N7S7786C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N7S7786C2D0Ev,_ZThn6216_N7S7786C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7786C2D1Ev,_ZTv0_n32_N7S7786C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11328_N7S7786C2D1Ev,_ZThn6216_N7S7786C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7786C2D0Ev,_ZTv0_n40_N7S7786C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7786C2D0Ev,_ZThn20_N7S7786C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7786C2D1Ev,_ZTv0_n40_N7S7786C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7786C2D1Ev,_ZThn20_N7S7786C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7786C2 = {  "S7786C2", // class name
  bases_S7786C2, 9,
  &(vtc_S7786C2[0]), // expected_vtbl_contents
  &(vtt_S7786C2[0]), // expected_vtt_contents
  ABISELECT(12384,6804), // object size
  NSPAIRA(_ZTI7S7786C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7786C2),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7786C2),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names91,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7786C1  : S7786C2 {
  int s7786c1f0;
  void *s7786c1f1;
  int s7786c1f2[2];
  long double s7786c1f3;
  int s7786c1f4[8];
  long double s7786c1f5;
  void *s7786c1f6[8];
  char s7786c1f7;
  virtual void  v1(); // _ZN7S7786C12v1Ev
  ~S7786C1(); // tgen
  S7786C1(); // tgen
};
//SIG(1 S7786C1) C1{ BC2{ VBC3{ VBC4{ v2 Fi[6] Fc:2 FD Fp[2] Fi FD FC5{} FC6{ m Fp[2]} FC6[9] Fp FC7{ v3 Fi Fp FC6} FC7} VBC8{ VBC9{ VBC10{ BC7 VBC4 VBC6 v4 Fp FL Fc[2] FC4 Fs[7] Fi Fc Fi:20} Fi Fc Fp[6] Fi[2] Fp FC6} BC4 BC6 vd v5 Fc Fi[2] FD[2] Fs Fp Fi FL Fi Fp} v6 v7 FC8[7] Fi Fs Fi FC10 Fl[9]} vd Fc Fi[3]} v1 Fi Fp Fi[2] FD Fi[8] FD Fp[8] Fc}


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

static void Test_S7786C1()
{
  extern Class_Descriptor cd_S7786C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(785,1729)];
    init_test(&cd_S7786C1, buf);
    S7786C1 *dp, &lv = *(dp=new (buf) S7786C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12544,6912), "sizeof(S7786C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7786C1)");
    /*is_ambiguous_... S7786C3::S7786C4 */ AMB_check_base_class_offset(lv, (S7786C4*)(S7786C3*), ABISELECT(11120,6128), "S7786C1");
    check_base_class_offset(lv, (S7786C4*)(S7786C10*), ABISELECT(11120,6128), "S7786C1");
    check_base_class_offset(lv, (S7786C7*)(S7786C10*), ABISELECT(12064,6648), "S7786C1");
    check_base_class_offset(lv, (S281C37_nt*)(S7786C10*), ABISELECT(12520,6904), "S7786C1");
    check_base_class_offset(lv, (S7786C10*)(S7786C9*), ABISELECT(12064,6648), "S7786C1");
    check_base_class_offset(lv, (S7786C9*)(S7786C8*), ABISELECT(11968,6592), "S7786C1");
    /*is_ambiguous_... S7786C8::S7786C4 */ AMB_check_base_class_offset(lv, (S7786C4*)(S7786C8*), ABISELECT(11488,6324), "S7786C1");
    /*is_ambiguous_... S7786C8::S281C37_nt */ AMB_check_base_class_offset(lv, (S281C37_nt*)(S7786C8*), ABISELECT(11856,6520), "S7786C1");
    check_base_class_offset(lv, (S7786C8*)(S7786C3*), ABISELECT(11488,6324), "S7786C1");
    check_base_class_offset(lv, (S7786C3*)(S7786C2*), ABISELECT(192,128), "S7786C1");
    check_base_class_offset(lv, (S7786C2*), 0, "S7786C1");
    check_field_offset(lv, s7786c1f0, ABISELECT(24,20), "S7786C1.s7786c1f0");
    check_field_offset(lv, s7786c1f1, ABISELECT(32,24), "S7786C1.s7786c1f1");
    check_field_offset(lv, s7786c1f2, ABISELECT(40,28), "S7786C1.s7786c1f2");
    check_field_offset(lv, s7786c1f3, ABISELECT(48,36), "S7786C1.s7786c1f3");
    check_field_offset(lv, s7786c1f4, ABISELECT(64,48), "S7786C1.s7786c1f4");
    check_field_offset(lv, s7786c1f5, ABISELECT(96,80), "S7786C1.s7786c1f5");
    check_field_offset(lv, s7786c1f6, ABISELECT(112,92), "S7786C1.s7786c1f6");
    check_field_offset(lv, s7786c1f7, ABISELECT(176,124), "S7786C1.s7786c1f7");
    test_class_info(&lv, &cd_S7786C1);
    dp->~S7786C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7786C1(Test_S7786C1, "S7786C1", ABISELECT(12544,6912));

#else // __cplusplus

extern void _ZN7S7786C1C1Ev();
extern void _ZN7S7786C1D1Ev();
Name_Map name_map_S7786C1[] = {
  NSPAIR(_ZN7S7786C1C1Ev),
  NSPAIR(_ZN7S7786C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7786C4;
extern VTBL_ENTRY _ZTI7S7786C4[];
extern  VTBL_ENTRY _ZTV7S7786C4[];
extern Class_Descriptor cd_S7786C7;
extern VTBL_ENTRY _ZTI7S7786C7[];
extern  VTBL_ENTRY _ZTV7S7786C7[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7786C10;
extern VTBL_ENTRY _ZTI8S7786C10[];
extern  VTBL_ENTRY _ZTV8S7786C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7786C10[];
extern Class_Descriptor cd_S7786C9;
extern VTBL_ENTRY _ZTI7S7786C9[];
extern  VTBL_ENTRY _ZTV7S7786C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C9[];
extern Class_Descriptor cd_S7786C4;
extern VTBL_ENTRY _ZTI7S7786C4[];
extern  VTBL_ENTRY _ZTV7S7786C4[];
extern Class_Descriptor cd_S281C37_nt;
extern VTBL_ENTRY _ZTI10S281C37_nt[];
extern Class_Descriptor cd_S7786C8;
extern VTBL_ENTRY _ZTI7S7786C8[];
extern  VTBL_ENTRY _ZTV7S7786C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C8[];
extern Class_Descriptor cd_S7786C3;
extern VTBL_ENTRY _ZTI7S7786C3[];
extern  VTBL_ENTRY _ZTV7S7786C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C3[];
extern Class_Descriptor cd_S7786C2;
extern VTBL_ENTRY _ZTI7S7786C2[];
extern  VTBL_ENTRY _ZTV7S7786C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C2[];
static Base_Class bases_S7786C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7786C4,    ABISELECT(11120,6128), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7786C7,    ABISELECT(12064,6648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S281C37_nt,    ABISELECT(12520,6904), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7786C10,    ABISELECT(12064,6648), //bcp->offset
    47, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7786C9,    ABISELECT(11968,6592), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7786C4,    ABISELECT(11488,6324), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S281C37_nt,    ABISELECT(11856,6520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7786C8,    ABISELECT(11488,6324), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //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
    8, //immediately_derived
  0, 1},
  {&cd_S7786C3,    ABISELECT(192,128), //bcp->offset
    11, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7786C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7786C1[];
extern void _ZN7S7786C1D1Ev();
extern void _ZN7S7786C1D0Ev();
extern void _ZN7S7786C12v1Ev();
extern void _ZN7S7786C32v6Ev();
extern void _ZN7S7786C32v7Ev();
extern void ABISELECT(_ZTv0_n80_N7S7786C1D1Ev,_ZTv0_n40_N7S7786C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S7786C1D1Ev,_ZThn128_N7S7786C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7786C1D0Ev,_ZTv0_n40_N7S7786C1D0Ev)();
extern void ABISELECT(_ZThn192_N7S7786C1D0Ev,_ZThn128_N7S7786C1D0Ev)() __attribute__((weak));
extern void _ZN7S7786C42v3Ev();
extern void _ZN7S7786C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S7786C1D1Ev,_ZTv0_n32_N7S7786C1D1Ev)();
extern void ABISELECT(_ZThn11488_N7S7786C1D1Ev,_ZThn6324_N7S7786C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7786C1D0Ev,_ZTv0_n32_N7S7786C1D0Ev)();
extern void ABISELECT(_ZThn11488_N7S7786C1D0Ev,_ZThn6324_N7S7786C1D0Ev)() __attribute__((weak));
extern void _ZN7S7786C82v5Ev();
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY vtc_S7786C1[] = {
  ABISELECT(12520,6904),
  ABISELECT(12064,6648),
  ABISELECT(11968,6592),
  ABISELECT(11488,6324),
  ABISELECT(11120,6128),
  ABISELECT(192,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C1[0]),
  (VTBL_ENTRY)&_ZN7S7786C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7786C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7786C12v1Ev,
  ABISELECT(-192,-128),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S7786C1[0]),
  (VTBL_ENTRY)&_ZN7S7786C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7786C32v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7786C1D1Ev,_ZTv0_n40_N7S7786C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7786C1D0Ev,_ZTv0_n40_N7S7786C1D0Ev),
  0,
  ABISELECT(-11120,-6128),
  (VTBL_ENTRY)&(_ZTI7S7786C1[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  0,
  ABISELECT(-11488,-6324),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11488,-6324),
  (VTBL_ENTRY)&(_ZTI7S7786C1[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7786C1D1Ev,_ZTv0_n32_N7S7786C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7786C1D0Ev,_ZTv0_n32_N7S7786C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7786C82v5Ev,
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11968,-6592),
  (VTBL_ENTRY)&(_ZTI7S7786C1[0]),
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-12064,-6648),
  (VTBL_ENTRY)&(_ZTI7S7786C1[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern VTBL_ENTRY _ZTV7S7786C1[];
extern void _ZN7S7786C2D1Ev();
extern void _ZN7S7786C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C2__7S7786C1[] = {
  ABISELECT(12520,6904),
  ABISELECT(12064,6648),
  ABISELECT(11968,6592),
  ABISELECT(11488,6324),
  ABISELECT(11120,6128),
  ABISELECT(192,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C2[0]),
  (VTBL_ENTRY)&_ZN7S7786C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7786C2D0Ev,
};
extern void _ZN7S7786C32v6Ev();
extern void _ZN7S7786C32v7Ev();
extern void ABISELECT(_ZTv0_n80_N7S7786C2D1Ev,_ZTv0_n40_N7S7786C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S7786C2D1Ev,_ZThn128_N7S7786C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7786C2D0Ev,_ZTv0_n40_N7S7786C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S7786C2D0Ev,_ZThn128_N7S7786C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7786C3__7S7786C2__7S7786C1[] = {
  ABISELECT(-192,-128),
  0,
  0,
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S7786C2[0]),
  (VTBL_ENTRY)&_ZN7S7786C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7786C32v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7786C2D1Ev,_ZTv0_n40_N7S7786C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7786C2D0Ev,_ZTv0_n40_N7S7786C2D0Ev),
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__7S7786C2__7S7786C1[] = {
  0,
  ABISELECT(-11120,-6128),
  (VTBL_ENTRY)&(_ZTI7S7786C2[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
extern void _ZN7S7786C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S7786C2D1Ev,_ZTv0_n32_N7S7786C2D1Ev)();
extern void ABISELECT(_ZThn11488_N7S7786C2D1Ev,_ZThn6324_N7S7786C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7786C2D0Ev,_ZTv0_n32_N7S7786C2D0Ev)();
extern void ABISELECT(_ZThn11488_N7S7786C2D0Ev,_ZThn6324_N7S7786C2D0Ev)() __attribute__((weak));
extern void _ZN7S7786C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C8__7S7786C2__7S7786C1[] = {
  0,
  ABISELECT(-11488,-6324),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11488,-6324),
  (VTBL_ENTRY)&(_ZTI7S7786C2[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7786C2D1Ev,_ZTv0_n32_N7S7786C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7786C2D0Ev,_ZTv0_n32_N7S7786C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7786C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7786C9__7S7786C2__7S7786C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11968,-6592),
  (VTBL_ENTRY)&(_ZTI7S7786C2[0]),
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C2__7S7786C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-12064,-6648),
  (VTBL_ENTRY)&(_ZTI7S7786C2[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C32v6Ev();
extern void _ZN7S7786C32v7Ev();
extern void _ZN7S7786C3D1Ev();
extern void _ZN7S7786C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C3__7S7786C1[] = {
  ABISELECT(12328,6776),
  ABISELECT(11872,6520),
  ABISELECT(11776,6464),
  ABISELECT(11296,6196),
  ABISELECT(10928,6000),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  (VTBL_ENTRY)&_ZN7S7786C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7786C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7786C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7786C3D0Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__7S7786C3__7S7786C1[] = {
  0,
  ABISELECT(-10928,-6000),
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
extern void _ZN7S7786C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S7786C3D1Ev,_ZTv0_n32_N7S7786C3D1Ev)();
extern void ABISELECT(_ZThn11296_N7S7786C3D1Ev,_ZThn6196_N7S7786C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7786C3D0Ev,_ZTv0_n32_N7S7786C3D0Ev)();
extern void ABISELECT(_ZThn11296_N7S7786C3D0Ev,_ZThn6196_N7S7786C3D0Ev)() __attribute__((weak));
extern void _ZN7S7786C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C8__7S7786C3__7S7786C1[] = {
  0,
  ABISELECT(-11296,-6196),
  0,
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  ABISELECT(-11296,-6196),
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7786C3D1Ev,_ZTv0_n32_N7S7786C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7786C3D0Ev,_ZTv0_n32_N7S7786C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7786C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7786C9__7S7786C3__7S7786C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-11776,-6464),
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C3__7S7786C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-11872,-6520),
  (VTBL_ENTRY)&(_ZTI7S7786C3[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
extern void _ZN7S7786C8D1Ev();
extern void _ZN7S7786C8D0Ev();
extern void _ZN7S7786C82v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C8__7S7786C1[] = {
  ABISELECT(1032,580),
  ABISELECT(-368,-196),
  ABISELECT(576,324),
  ABISELECT(480,268),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7786C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7786C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7786C82v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7786C9__7S7786C8__7S7786C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  ABISELECT(-480,-268),
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C8__7S7786C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__7S7786C8__7S7786C1[] = {
  0,
  ABISELECT(368,196),
  (VTBL_ENTRY)&(_ZTI7S7786C8[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7786C9__7S7786C1[] = {
  ABISELECT(552,312),
  ABISELECT(-848,-464),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C9__7S7786C1[] = {
  0,
  0,
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__7S7786C9__7S7786C1[] = {
  0,
  ABISELECT(848,464),
  (VTBL_ENTRY)&(_ZTI7S7786C9[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
extern void _ZN7S7786C72v2Ev();
extern void _ZN8S7786C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7786C10__7S7786C1[] = {
  ABISELECT(456,256),
  ABISELECT(-944,-520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7786C10[0]),
  (VTBL_ENTRY)&_ZN7S7786C72v2Ev,
  (VTBL_ENTRY)&_ZN8S7786C102v4Ev,
};
extern void _ZN7S7786C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7786C4__8S7786C10__7S7786C1[] = {
  0,
  ABISELECT(944,520),
  (VTBL_ENTRY)&(_ZTI8S7786C10[0]),
  (VTBL_ENTRY)&_ZN7S7786C42v3Ev,
};
static  VTT_ENTRY vtt_S7786C1[] = {
  {&(_ZTV7S7786C1[8]),  8,55},
  {&(_tg__ZTV7S7786C2__7S7786C1[8]),  8,10},
  {&(_tg__ZTV7S7786C3__7S7786C2__7S7786C1[10]),  10,14},
  {&(_tg__ZTV7S7786C4__7S7786C2__7S7786C1[3]),  3,4},
  {&(_tg__ZTV7S7786C8__7S7786C2__7S7786C1[9]),  9,13},
  {&(_tg__ZTV7S7786C9__7S7786C2__7S7786C1[5]),  5,5},
  {&(_tg__ZTV8S7786C10__7S7786C2__7S7786C1[6]),  6,8},
  {&(_ZTV7S7786C1[21]),  21,55},
  {&(_ZTV7S7786C1[28]),  28,55},
  {&(_ZTV7S7786C1[38]),  38,55},
  {&(_ZTV7S7786C1[47]),  47,55},
  {&(_ZTV7S7786C1[53]),  53,55},
  {&(_tg__ZTV7S7786C3__7S7786C1[7]),  7,11},
  {&(_tg__ZTV7S7786C4__7S7786C3__7S7786C1[3]),  3,4},
  {&(_tg__ZTV7S7786C8__7S7786C3__7S7786C1[9]),  9,13},
  {&(_tg__ZTV7S7786C9__7S7786C3__7S7786C1[5]),  5,5},
  {&(_tg__ZTV8S7786C10__7S7786C3__7S7786C1[6]),  6,8},
  {&(_tg__ZTV7S7786C8__7S7786C1[6]),  6,10},
  {&(_tg__ZTV7S7786C9__7S7786C8__7S7786C1[5]),  5,5},
  {&(_tg__ZTV8S7786C10__7S7786C8__7S7786C1[6]),  6,8},
  {&(_tg__ZTV7S7786C4__7S7786C8__7S7786C1[3]),  3,4},
  {&(_tg__ZTV7S7786C9__7S7786C1[5]),  5,5},
  {&(_tg__ZTV8S7786C10__7S7786C9__7S7786C1[6]),  6,8},
  {&(_tg__ZTV7S7786C4__7S7786C9__7S7786C1[3]),  3,4},
  {&(_tg__ZTV8S7786C10__7S7786C1[4]),  4,6},
  {&(_tg__ZTV7S7786C4__8S7786C10__7S7786C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7786C1[];
extern  VTBL_ENTRY _ZTV7S7786C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7786C1[];
static VTBL_ENTRY alt_thunk_names92[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7786C3D0Ev,_ZTv0_n32_N7S7786C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7786C3D0Ev,_ZThn6196_N7S7786C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7786C3D1Ev,_ZTv0_n32_N7S7786C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11296_N7S7786C3D1Ev,_ZThn6196_N7S7786C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7786C2D0Ev,_ZTv0_n32_N7S7786C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11488_N7S7786C2D0Ev,_ZThn6324_N7S7786C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7786C2D1Ev,_ZTv0_n32_N7S7786C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11488_N7S7786C2D1Ev,_ZThn6324_N7S7786C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7786C2D0Ev,_ZTv0_n40_N7S7786C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7786C2D0Ev,_ZThn128_N7S7786C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7786C2D1Ev,_ZTv0_n40_N7S7786C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7786C2D1Ev,_ZThn128_N7S7786C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7786C1D0Ev,_ZTv0_n32_N7S7786C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11488_N7S7786C1D0Ev,_ZThn6324_N7S7786C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7786C1D1Ev,_ZTv0_n32_N7S7786C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11488_N7S7786C1D1Ev,_ZThn6324_N7S7786C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7786C1D0Ev,_ZTv0_n40_N7S7786C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7786C1D0Ev,_ZThn128_N7S7786C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7786C1D1Ev,_ZTv0_n40_N7S7786C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7786C1D1Ev,_ZThn128_N7S7786C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7786C1 = {  "S7786C1", // class name
  bases_S7786C1, 10,
  &(vtc_S7786C1[0]), // expected_vtbl_contents
  &(vtt_S7786C1[0]), // expected_vtt_contents
  ABISELECT(12544,6912), // object size
  NSPAIRA(_ZTI7S7786C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7786C1),55, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7786C1),26, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names92,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S295C5  : S770C5_nt {
  virtual void  v10(); // _ZN6S295C53v10Ev
  virtual void  v11(); // _ZN6S295C53v11Ev
  virtual void  v12(); // _ZN6S295C53v12Ev
  virtual void  v13(); // _ZN6S295C53v13Ev
  virtual void  v14(); // _ZN6S295C53v14Ev
  ~S295C5(); // tgen
  S295C5(); // tgen
};
//SIG(-1 S295C5) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S295C5 ::v10(){vfunc_called(this, "_ZN6S295C53v10Ev");}
void  S295C5 ::v11(){vfunc_called(this, "_ZN6S295C53v11Ev");}
void  S295C5 ::v12(){vfunc_called(this, "_ZN6S295C53v12Ev");}
void  S295C5 ::v13(){vfunc_called(this, "_ZN6S295C53v13Ev");}
void  S295C5 ::v14(){vfunc_called(this, "_ZN6S295C53v14Ev");}
S295C5 ::~S295C5(){ note_dtor("S295C5", this);} // tgen
S295C5 ::S295C5(){ note_ctor("S295C5", this);} // tgen

static void Test_S295C5()
{
  extern Class_Descriptor cd_S295C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S295C5, buf);
    S295C5 *dp, &lv = *(dp=new (buf) S295C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S295C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S295C5)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S295C5");
    test_class_info(&lv, &cd_S295C5);
    dp->~S295C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS295C5(Test_S295C5, "S295C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S295C5C1Ev();
extern void _ZN6S295C5D1Ev();
Name_Map name_map_S295C5[] = {
  NSPAIR(_ZN6S295C5C1Ev),
  NSPAIR(_ZN6S295C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S295C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S295C5[];
extern void _ZN6S295C5D1Ev();
extern void _ZN6S295C5D0Ev();
extern void _ZN6S295C53v10Ev();
extern void _ZN6S295C53v11Ev();
extern void _ZN6S295C53v12Ev();
extern void _ZN6S295C53v13Ev();
extern void _ZN6S295C53v14Ev();
static  VTBL_ENTRY vtc_S295C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S295C5[0]),
  (VTBL_ENTRY)&_ZN6S295C5D1Ev,
  (VTBL_ENTRY)&_ZN6S295C5D0Ev,
  (VTBL_ENTRY)&_ZN6S295C53v10Ev,
  (VTBL_ENTRY)&_ZN6S295C53v11Ev,
  (VTBL_ENTRY)&_ZN6S295C53v12Ev,
  (VTBL_ENTRY)&_ZN6S295C53v13Ev,
  (VTBL_ENTRY)&_ZN6S295C53v14Ev,
};
extern VTBL_ENTRY _ZTI6S295C5[];
extern  VTBL_ENTRY _ZTV6S295C5[];
Class_Descriptor cd_S295C5 = {  "S295C5", // class name
  bases_S295C5, 1,
  &(vtc_S295C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S295C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S295C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S295C4  : S295C5 {
  void *s295c4f0[3];
  ::S770C6_nt s295c4f1;
  virtual void  v15(); // _ZN6S295C43v15Ev
  virtual void  v16(); // _ZN6S295C43v16Ev
  virtual void  v17(); // _ZN6S295C43v17Ev
  virtual void  v18(); // _ZN6S295C43v18Ev
  virtual void  v19(); // _ZN6S295C43v19Ev
  virtual void  v20(); // _ZN6S295C43v20Ev
  virtual void  v21(); // _ZN6S295C43v21Ev
  virtual void  v22(); // _ZN6S295C43v22Ev
  virtual void  v23(); // _ZN6S295C43v23Ev
  virtual void  v24(); // _ZN6S295C43v24Ev
  virtual void  v25(); // _ZN6S295C43v25Ev
  ~S295C4(); // tgen
  S295C4(); // tgen
};
//SIG(-1 S295C4) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S295C4 ::v15(){vfunc_called(this, "_ZN6S295C43v15Ev");}
void  S295C4 ::v16(){vfunc_called(this, "_ZN6S295C43v16Ev");}
void  S295C4 ::v17(){vfunc_called(this, "_ZN6S295C43v17Ev");}
void  S295C4 ::v18(){vfunc_called(this, "_ZN6S295C43v18Ev");}
void  S295C4 ::v19(){vfunc_called(this, "_ZN6S295C43v19Ev");}
void  S295C4 ::v20(){vfunc_called(this, "_ZN6S295C43v20Ev");}
void  S295C4 ::v21(){vfunc_called(this, "_ZN6S295C43v21Ev");}
void  S295C4 ::v22(){vfunc_called(this, "_ZN6S295C43v22Ev");}
void  S295C4 ::v23(){vfunc_called(this, "_ZN6S295C43v23Ev");}
void  S295C4 ::v24(){vfunc_called(this, "_ZN6S295C43v24Ev");}
void  S295C4 ::v25(){vfunc_called(this, "_ZN6S295C43v25Ev");}
S295C4 ::~S295C4(){ note_dtor("S295C4", this);} // tgen
S295C4 ::S295C4(){ note_ctor("S295C4", this);} // tgen

static void Test_S295C4()
{
  extern Class_Descriptor cd_S295C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S295C4, buf);
    S295C4 *dp, &lv = *(dp=new (buf) S295C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S295C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S295C4)");
    check_base_class_offset(lv, (S770C5_nt*)(S295C5*), 0, "S295C4");
    check_base_class_offset(lv, (S295C5*), 0, "S295C4");
    check_field_offset(lv, s295c4f0, ABISELECT(16,8), "S295C4.s295c4f0");
    check_field_offset(lv, s295c4f1, ABISELECT(40,20), "S295C4.s295c4f1");
    test_class_info(&lv, &cd_S295C4);
    dp->~S295C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS295C4(Test_S295C4, "S295C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S295C4C1Ev();
extern void _ZN6S295C4D1Ev();
Name_Map name_map_S295C4[] = {
  NSPAIR(_ZN6S295C4C1Ev),
  NSPAIR(_ZN6S295C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S295C5;
extern VTBL_ENTRY _ZTI6S295C5[];
extern  VTBL_ENTRY _ZTV6S295C5[];
static Base_Class bases_S295C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S295C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S295C4[];
extern void _ZN6S295C4D1Ev();
extern void _ZN6S295C4D0Ev();
extern void _ZN6S295C53v10Ev();
extern void _ZN6S295C53v11Ev();
extern void _ZN6S295C53v12Ev();
extern void _ZN6S295C53v13Ev();
extern void _ZN6S295C53v14Ev();
extern void _ZN6S295C43v15Ev();
extern void _ZN6S295C43v16Ev();
extern void _ZN6S295C43v17Ev();
extern void _ZN6S295C43v18Ev();
extern void _ZN6S295C43v19Ev();
extern void _ZN6S295C43v20Ev();
extern void _ZN6S295C43v21Ev();
extern void _ZN6S295C43v22Ev();
extern void _ZN6S295C43v23Ev();
extern void _ZN6S295C43v24Ev();
extern void _ZN6S295C43v25Ev();
static  VTBL_ENTRY vtc_S295C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S295C4[0]),
  (VTBL_ENTRY)&_ZN6S295C4D1Ev,
  (VTBL_ENTRY)&_ZN6S295C4D0Ev,
  (VTBL_ENTRY)&_ZN6S295C53v10Ev,
  (VTBL_ENTRY)&_ZN6S295C53v11Ev,
  (VTBL_ENTRY)&_ZN6S295C53v12Ev,
  (VTBL_ENTRY)&_ZN6S295C53v13Ev,
  (VTBL_ENTRY)&_ZN6S295C53v14Ev,
  (VTBL_ENTRY)&_ZN6S295C43v15Ev,
  (VTBL_ENTRY)&_ZN6S295C43v16Ev,
  (VTBL_ENTRY)&_ZN6S295C43v17Ev,
  (VTBL_ENTRY)&_ZN6S295C43v18Ev,
  (VTBL_ENTRY)&_ZN6S295C43v19Ev,
  (VTBL_ENTRY)&_ZN6S295C43v20Ev,
  (VTBL_ENTRY)&_ZN6S295C43v21Ev,
  (VTBL_ENTRY)&_ZN6S295C43v22Ev,
  (VTBL_ENTRY)&_ZN6S295C43v23Ev,
  (VTBL_ENTRY)&_ZN6S295C43v24Ev,
  (VTBL_ENTRY)&_ZN6S295C43v25Ev,
};
extern VTBL_ENTRY _ZTI6S295C4[];
extern  VTBL_ENTRY _ZTV6S295C4[];
Class_Descriptor cd_S295C4 = {  "S295C4", // class name
  bases_S295C4, 2,
  &(vtc_S295C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S295C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S295C4),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S295C3  : S295C4 {
  ::S770C6_nt s295c3f0;
  ::S770C9_nt s295c3f1;
  void *s295c3f2[3];
  virtual void  v26(); // _ZN6S295C33v26Ev
  virtual void  v27(); // _ZN6S295C33v27Ev
  virtual void  v28(); // _ZN6S295C33v28Ev
  virtual void  v29(); // _ZN6S295C33v29Ev
  virtual void  v30(); // _ZN6S295C33v30Ev
  virtual void  v31(); // _ZN6S295C33v31Ev
  virtual void  v32(); // _ZN6S295C33v32Ev
  virtual void  v33(); // _ZN6S295C33v33Ev
  ~S295C3(); // tgen
  S295C3(); // tgen
};
//SIG(-1 S295C3) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S295C3 ::v26(){vfunc_called(this, "_ZN6S295C33v26Ev");}
void  S295C3 ::v27(){vfunc_called(this, "_ZN6S295C33v27Ev");}
void  S295C3 ::v28(){vfunc_called(this, "_ZN6S295C33v28Ev");}
void  S295C3 ::v29(){vfunc_called(this, "_ZN6S295C33v29Ev");}
void  S295C3 ::v30(){vfunc_called(this, "_ZN6S295C33v30Ev");}
void  S295C3 ::v31(){vfunc_called(this, "_ZN6S295C33v31Ev");}
void  S295C3 ::v32(){vfunc_called(this, "_ZN6S295C33v32Ev");}
void  S295C3 ::v33(){vfunc_called(this, "_ZN6S295C33v33Ev");}
S295C3 ::~S295C3(){ note_dtor("S295C3", this);} // tgen
S295C3 ::S295C3(){ note_ctor("S295C3", this);} // tgen

static void Test_S295C3()
{
  extern Class_Descriptor cd_S295C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S295C3, buf);
    S295C3 *dp, &lv = *(dp=new (buf) S295C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S295C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S295C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S295C5*)(S295C4*), 0, "S295C3");
    check_base_class_offset(lv, (S295C5*)(S295C4*), 0, "S295C3");
    check_base_class_offset(lv, (S295C4*), 0, "S295C3");
    check_field_offset(lv, s295c3f0, ABISELECT(80,44), "S295C3.s295c3f0");
    check_field_offset(lv, s295c3f1, ABISELECT(120,68), "S295C3.s295c3f1");
    check_field_offset(lv, s295c3f2, ABISELECT(128,72), "S295C3.s295c3f2");
    test_class_info(&lv, &cd_S295C3);
    dp->~S295C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS295C3(Test_S295C3, "S295C3", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S295C3C1Ev();
extern void _ZN6S295C3D1Ev();
Name_Map name_map_S295C3[] = {
  NSPAIR(_ZN6S295C3C1Ev),
  NSPAIR(_ZN6S295C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S295C5;
extern VTBL_ENTRY _ZTI6S295C5[];
extern  VTBL_ENTRY _ZTV6S295C5[];
extern Class_Descriptor cd_S295C4;
extern VTBL_ENTRY _ZTI6S295C4[];
extern  VTBL_ENTRY _ZTV6S295C4[];
static Base_Class bases_S295C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S295C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S295C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S295C3[];
extern void _ZN6S295C3D1Ev();
extern void _ZN6S295C3D0Ev();
extern void _ZN6S295C53v10Ev();
extern void _ZN6S295C53v11Ev();
extern void _ZN6S295C53v12Ev();
extern void _ZN6S295C53v13Ev();
extern void _ZN6S295C53v14Ev();
extern void _ZN6S295C43v15Ev();
extern void _ZN6S295C43v16Ev();
extern void _ZN6S295C43v17Ev();
extern void _ZN6S295C43v18Ev();
extern void _ZN6S295C43v19Ev();
extern void _ZN6S295C43v20Ev();
extern void _ZN6S295C43v21Ev();
extern void _ZN6S295C43v22Ev();
extern void _ZN6S295C43v23Ev();
extern void _ZN6S295C43v24Ev();
extern void _ZN6S295C43v25Ev();
extern void _ZN6S295C33v26Ev();
extern void _ZN6S295C33v27Ev();
extern void _ZN6S295C33v28Ev();
extern void _ZN6S295C33v29Ev();
extern void _ZN6S295C33v30Ev();
extern void _ZN6S295C33v31Ev();
extern void _ZN6S295C33v32Ev();
extern void _ZN6S295C33v33Ev();
static  VTBL_ENTRY vtc_S295C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S295C3[0]),
  (VTBL_ENTRY)&_ZN6S295C3D1Ev,
  (VTBL_ENTRY)&_ZN6S295C3D0Ev,
  (VTBL_ENTRY)&_ZN6S295C53v10Ev,
  (VTBL_ENTRY)&_ZN6S295C53v11Ev,
  (VTBL_ENTRY)&_ZN6S295C53v12Ev,
  (VTBL_ENTRY)&_ZN6S295C53v13Ev,
  (VTBL_ENTRY)&_ZN6S295C53v14Ev,
  (VTBL_ENTRY)&_ZN6S295C43v15Ev,
  (VTBL_ENTRY)&_ZN6S295C43v16Ev,
  (VTBL_ENTRY)&_ZN6S295C43v17Ev,
  (VTBL_ENTRY)&_ZN6S295C43v18Ev,
  (VTBL_ENTRY)&_ZN6S295C43v19Ev,
  (VTBL_ENTRY)&_ZN6S295C43v20Ev,
  (VTBL_ENTRY)&_ZN6S295C43v21Ev,
  (VTBL_ENTRY)&_ZN6S295C43v22Ev,
  (VTBL_ENTRY)&_ZN6S295C43v23Ev,
  (VTBL_ENTRY)&_ZN6S295C43v24Ev,
  (VTBL_ENTRY)&_ZN6S295C43v25Ev,
  (VTBL_ENTRY)&_ZN6S295C33v26Ev,
  (VTBL_ENTRY)&_ZN6S295C33v27Ev,
  (VTBL_ENTRY)&_ZN6S295C33v28Ev,
  (VTBL_ENTRY)&_ZN6S295C33v29Ev,
  (VTBL_ENTRY)&_ZN6S295C33v30Ev,
  (VTBL_ENTRY)&_ZN6S295C33v31Ev,
  (VTBL_ENTRY)&_ZN6S295C33v32Ev,
  (VTBL_ENTRY)&_ZN6S295C33v33Ev,
};
extern VTBL_ENTRY _ZTI6S295C3[];
extern  VTBL_ENTRY _ZTV6S295C3[];
Class_Descriptor cd_S295C3 = {  "S295C3", // class name
  bases_S295C3, 3,
  &(vtc_S295C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S295C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S295C3),28, //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  S295C11  {
  virtual  ~S295C11(); // _ZN7S295C11D1Ev
  virtual void  v34(); // _ZN7S295C113v34Ev
  virtual void  v35(); // _ZN7S295C113v35Ev
  virtual void  v36(); // _ZN7S295C113v36Ev
  S295C11(); // tgen
};
//SIG(-1 S295C11) C1{ vd v1 v2 v3}


 S295C11 ::~S295C11(){ note_dtor("S295C11", this);}
void  S295C11 ::v34(){vfunc_called(this, "_ZN7S295C113v34Ev");}
void  S295C11 ::v35(){vfunc_called(this, "_ZN7S295C113v35Ev");}
void  S295C11 ::v36(){vfunc_called(this, "_ZN7S295C113v36Ev");}
S295C11 ::S295C11(){ note_ctor("S295C11", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S295C11C1Ev();
extern void _ZN7S295C11D1Ev();
Name_Map name_map_S295C11[] = {
  NSPAIR(_ZN7S295C11C1Ev),
  NSPAIR(_ZN7S295C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S295C11[];
extern void _ZN7S295C11D1Ev();
extern void _ZN7S295C11D0Ev();
extern void _ZN7S295C113v34Ev();
extern void _ZN7S295C113v35Ev();
extern void _ZN7S295C113v36Ev();
static  VTBL_ENTRY vtc_S295C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S295C11[0]),
  (VTBL_ENTRY)&_ZN7S295C11D1Ev,
  (VTBL_ENTRY)&_ZN7S295C11D0Ev,
  (VTBL_ENTRY)&_ZN7S295C113v34Ev,
  (VTBL_ENTRY)&_ZN7S295C113v35Ev,
  (VTBL_ENTRY)&_ZN7S295C113v36Ev,
};
extern VTBL_ENTRY _ZTI7S295C11[];
extern  VTBL_ENTRY _ZTV7S295C11[];
Class_Descriptor cd_S295C11 = {  "S295C11", // class name
  0,0,//no base classes
  &(vtc_S295C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S295C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S295C11),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  S295C2  : S295C3 , S295C11 {
  ::S292C12 s295c2f0;
  int s295c2f1;
  char s295c2f2;
  virtual void  v37(); // _ZN6S295C23v37Ev
  virtual void  v38(); // _ZN6S295C23v38Ev
  virtual void  v39(); // _ZN6S295C23v39Ev
  virtual void  v40(); // _ZN6S295C23v40Ev
  virtual void  v41(); // _ZN6S295C23v41Ev
  virtual void  v42(); // _ZN6S295C23v42Ev
  virtual void  v43(); // _ZN6S295C23v43Ev
  virtual void  v44(); // _ZN6S295C23v44Ev
  virtual void  v45(); // _ZN6S295C23v45Ev
  virtual void  v46(); // _ZN6S295C23v46Ev
  ~S295C2(); // tgen
  S295C2(); // tgen
};
//SIG(-1 S295C2) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v11 v12 v13 v14 v15} v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v27 v28 v29 v30 v31 v32 v33 v34 FC6 FC9{ m Fp} Fp[3]} BC10{ vd v35 v36 v37} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC11{ m FC12{ m Fp} Fi Fp} Fi Fc}


void  S295C2 ::v37(){vfunc_called(this, "_ZN6S295C23v37Ev");}
void  S295C2 ::v38(){vfunc_called(this, "_ZN6S295C23v38Ev");}
void  S295C2 ::v39(){vfunc_called(this, "_ZN6S295C23v39Ev");}
void  S295C2 ::v40(){vfunc_called(this, "_ZN6S295C23v40Ev");}
void  S295C2 ::v41(){vfunc_called(this, "_ZN6S295C23v41Ev");}
void  S295C2 ::v42(){vfunc_called(this, "_ZN6S295C23v42Ev");}
void  S295C2 ::v43(){vfunc_called(this, "_ZN6S295C23v43Ev");}
void  S295C2 ::v44(){vfunc_called(this, "_ZN6S295C23v44Ev");}
void  S295C2 ::v45(){vfunc_called(this, "_ZN6S295C23v45Ev");}
void  S295C2 ::v46(){vfunc_called(this, "_ZN6S295C23v46Ev");}
S295C2 ::~S295C2(){ note_dtor("S295C2", this);} // tgen
S295C2 ::S295C2(){ note_ctor("S295C2", this);} // tgen

static void Test_S295C2()
{
  extern Class_Descriptor cd_S295C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,28)];
    init_test(&cd_S295C2, buf);
    S295C2 *dp, &lv = *(dp=new (buf) S295C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,108), "sizeof(S295C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S295C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S295C5*)(S295C4*)(S295C3*), 0, "S295C2");
    check_base_class_offset(lv, (S295C5*)(S295C4*)(S295C3*), 0, "S295C2");
    check_base_class_offset(lv, (S295C4*)(S295C3*), 0, "S295C2");
    check_base_class_offset(lv, (S295C3*), 0, "S295C2");
    check_base_class_offset(lv, (S295C11*), ABISELECT(152,84), "S295C2");
    check_field_offset(lv, s295c2f0, ABISELECT(160,88), "S295C2.s295c2f0");
    check_field_offset(lv, s295c2f1, ABISELECT(184,100), "S295C2.s295c2f1");
    check_field_offset(lv, s295c2f2, ABISELECT(188,104), "S295C2.s295c2f2");
    test_class_info(&lv, &cd_S295C2);
    dp->~S295C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS295C2(Test_S295C2, "S295C2", ABISELECT(192,108));

#else // __cplusplus

extern void _ZN6S295C2C1Ev();
extern void _ZN6S295C2D1Ev();
Name_Map name_map_S295C2[] = {
  NSPAIR(_ZN6S295C2C1Ev),
  NSPAIR(_ZN6S295C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S295C5;
extern VTBL_ENTRY _ZTI6S295C5[];
extern  VTBL_ENTRY _ZTV6S295C5[];
extern Class_Descriptor cd_S295C4;
extern VTBL_ENTRY _ZTI6S295C4[];
extern  VTBL_ENTRY _ZTV6S295C4[];
extern Class_Descriptor cd_S295C3;
extern VTBL_ENTRY _ZTI6S295C3[];
extern  VTBL_ENTRY _ZTV6S295C3[];
extern Class_Descriptor cd_S295C11;
extern VTBL_ENTRY _ZTI7S295C11[];
extern  VTBL_ENTRY _ZTV7S295C11[];
static Base_Class bases_S295C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S295C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S295C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S295C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S295C11,    ABISELECT(152,84), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S295C2[];
extern void _ZN6S295C2D1Ev();
extern void _ZN6S295C2D0Ev();
extern void _ZN6S295C53v10Ev();
extern void _ZN6S295C53v11Ev();
extern void _ZN6S295C53v12Ev();
extern void _ZN6S295C53v13Ev();
extern void _ZN6S295C53v14Ev();
extern void _ZN6S295C43v15Ev();
extern void _ZN6S295C43v16Ev();
extern void _ZN6S295C43v17Ev();
extern void _ZN6S295C43v18Ev();
extern void _ZN6S295C43v19Ev();
extern void _ZN6S295C43v20Ev();
extern void _ZN6S295C43v21Ev();
extern void _ZN6S295C43v22Ev();
extern void _ZN6S295C43v23Ev();
extern void _ZN6S295C43v24Ev();
extern void _ZN6S295C43v25Ev();
extern void _ZN6S295C33v26Ev();
extern void _ZN6S295C33v27Ev();
extern void _ZN6S295C33v28Ev();
extern void _ZN6S295C33v29Ev();
extern void _ZN6S295C33v30Ev();
extern void _ZN6S295C33v31Ev();
extern void _ZN6S295C33v32Ev();
extern void _ZN6S295C33v33Ev();
extern void _ZN6S295C23v37Ev();
extern void _ZN6S295C23v38Ev();
extern void _ZN6S295C23v39Ev();
extern void _ZN6S295C23v40Ev();
extern void _ZN6S295C23v41Ev();
extern void _ZN6S295C23v42Ev();
extern void _ZN6S295C23v43Ev();
extern void _ZN6S295C23v44Ev();
extern void _ZN6S295C23v45Ev();
extern void _ZN6S295C23v46Ev();
extern void ABISELECT(_ZThn152_N6S295C2D1Ev,_ZThn84_N6S295C2D1Ev)();
extern void ABISELECT(_ZThn152_N6S295C2D0Ev,_ZThn84_N6S295C2D0Ev)();
extern void _ZN7S295C113v34Ev();
extern void _ZN7S295C113v35Ev();
extern void _ZN7S295C113v36Ev();
static  VTBL_ENTRY vtc_S295C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S295C2[0]),
  (VTBL_ENTRY)&_ZN6S295C2D1Ev,
  (VTBL_ENTRY)&_ZN6S295C2D0Ev,
  (VTBL_ENTRY)&_ZN6S295C53v10Ev,
  (VTBL_ENTRY)&_ZN6S295C53v11Ev,
  (VTBL_ENTRY)&_ZN6S295C53v12Ev,
  (VTBL_ENTRY)&_ZN6S295C53v13Ev,
  (VTBL_ENTRY)&_ZN6S295C53v14Ev,
  (VTBL_ENTRY)&_ZN6S295C43v15Ev,
  (VTBL_ENTRY)&_ZN6S295C43v16Ev,
  (VTBL_ENTRY)&_ZN6S295C43v17Ev,
  (VTBL_ENTRY)&_ZN6S295C43v18Ev,
  (VTBL_ENTRY)&_ZN6S295C43v19Ev,
  (VTBL_ENTRY)&_ZN6S295C43v20Ev,
  (VTBL_ENTRY)&_ZN6S295C43v21Ev,
  (VTBL_ENTRY)&_ZN6S295C43v22Ev,
  (VTBL_ENTRY)&_ZN6S295C43v23Ev,
  (VTBL_ENTRY)&_ZN6S295C43v24Ev,
  (VTBL_ENTRY)&_ZN6S295C43v25Ev,
  (VTBL_ENTRY)&_ZN6S295C33v26Ev,
  (VTBL_ENTRY)&_ZN6S295C33v27Ev,
  (VTBL_ENTRY)&_ZN6S295C33v28Ev,
  (VTBL_ENTRY)&_ZN6S295C33v29Ev,
  (VTBL_ENTRY)&_ZN6S295C33v30Ev,
  (VTBL_ENTRY)&_ZN6S295C33v31Ev,
  (VTBL_ENTRY)&_ZN6S295C33v32Ev,
  (VTBL_ENTRY)&_ZN6S295C33v33Ev,
  (VTBL_ENTRY)&_ZN6S295C23v37Ev,
  (VTBL_ENTRY)&_ZN6S295C23v38Ev,
  (VTBL_ENTRY)&_ZN6S295C23v39Ev,
  (VTBL_ENTRY)&_ZN6S295C23v40Ev,
  (VTBL_ENTRY)&_ZN6S295C23v41Ev,
  (VTBL_ENTRY)&_ZN6S295C23v42Ev,
  (VTBL_ENTRY)&_ZN6S295C23v43Ev,
  (VTBL_ENTRY)&_ZN6S295C23v44Ev,
  (VTBL_ENTRY)&_ZN6S295C23v45Ev,
  (VTBL_ENTRY)&_ZN6S295C23v46Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI6S295C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S295C2D1Ev,_ZThn84_N6S295C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S295C2D0Ev,_ZThn84_N6S295C2D0Ev),
  (VTBL_ENTRY)&_ZN7S295C113v34Ev,
  (VTBL_ENTRY)&_ZN7S295C113v35Ev,
  (VTBL_ENTRY)&_ZN7S295C113v36Ev,
};
extern VTBL_ENTRY _ZTI6S295C2[];
extern  VTBL_ENTRY _ZTV6S295C2[];
Class_Descriptor cd_S295C2 = {  "S295C2", // class name
  bases_S295C2, 5,
  &(vtc_S295C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,108), // object size
  NSPAIRA(_ZTI6S295C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S295C2),45, //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  S295C1  : S295C2 {
  virtual void  v1(); // _ZN6S295C12v1Ev
  virtual void  v2(); // _ZN6S295C12v2Ev
  virtual void  v3(); // _ZN6S295C12v3Ev
  virtual void  v4(); // _ZN6S295C12v4Ev
  virtual void  v5(); // _ZN6S295C12v5Ev
  virtual void  v6(); // _ZN6S295C12v6Ev
  virtual void  v7(); // _ZN6S295C12v7Ev
  virtual void  v8(); // _ZN6S295C12v8Ev
  virtual void  v9(); // _ZN6S295C12v9Ev
  ~S295C1(); // tgen
  S295C1(); // tgen
};
//SIG(1 S295C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fi} v10 v11 v12 v13 v14} v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fp[3] FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]}} v26 v27 v28 v29 v30 v31 v32 v33 FC7 FC10{ m Fp} Fp[3]} BC11{ vd v34 v35 v36} v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 FC12{ m FC13{ m Fp} Fi Fp} Fi Fc} v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S295C1 ::v1(){vfunc_called(this, "_ZN6S295C12v1Ev");}
void  S295C1 ::v2(){vfunc_called(this, "_ZN6S295C12v2Ev");}
void  S295C1 ::v3(){vfunc_called(this, "_ZN6S295C12v3Ev");}
void  S295C1 ::v4(){vfunc_called(this, "_ZN6S295C12v4Ev");}
void  S295C1 ::v5(){vfunc_called(this, "_ZN6S295C12v5Ev");}
void  S295C1 ::v6(){vfunc_called(this, "_ZN6S295C12v6Ev");}
void  S295C1 ::v7(){vfunc_called(this, "_ZN6S295C12v7Ev");}
void  S295C1 ::v8(){vfunc_called(this, "_ZN6S295C12v8Ev");}
void  S295C1 ::v9(){vfunc_called(this, "_ZN6S295C12v9Ev");}
S295C1 ::~S295C1(){ note_dtor("S295C1", this);} // tgen
S295C1 ::S295C1(){ note_ctor("S295C1", this);} // tgen

static void Test_S295C1()
{
  extern Class_Descriptor cd_S295C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,28)];
    init_test(&cd_S295C1, buf);
    S295C1 *dp, &lv = *(dp=new (buf) S295C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,108), "sizeof(S295C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S295C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S295C5*)(S295C4*)(S295C3*)(S295C2*), 0, "S295C1");
    check_base_class_offset(lv, (S295C5*)(S295C4*)(S295C3*)(S295C2*), 0, "S295C1");
    check_base_class_offset(lv, (S295C4*)(S295C3*)(S295C2*), 0, "S295C1");
    check_base_class_offset(lv, (S295C3*)(S295C2*), 0, "S295C1");
    check_base_class_offset(lv, (S295C11*)(S295C2*), ABISELECT(152,84), "S295C1");
    check_base_class_offset(lv, (S295C2*), 0, "S295C1");
    test_class_info(&lv, &cd_S295C1);
    dp->~S295C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS295C1(Test_S295C1, "S295C1", ABISELECT(192,108));

#else // __cplusplus

extern void _ZN6S295C1C1Ev();
extern void _ZN6S295C1D1Ev();
Name_Map name_map_S295C1[] = {
  NSPAIR(_ZN6S295C1C1Ev),
  NSPAIR(_ZN6S295C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S295C5;
extern VTBL_ENTRY _ZTI6S295C5[];
extern  VTBL_ENTRY _ZTV6S295C5[];
extern Class_Descriptor cd_S295C4;
extern VTBL_ENTRY _ZTI6S295C4[];
extern  VTBL_ENTRY _ZTV6S295C4[];
extern Class_Descriptor cd_S295C3;
extern VTBL_ENTRY _ZTI6S295C3[];
extern  VTBL_ENTRY _ZTV6S295C3[];
extern Class_Descriptor cd_S295C11;
extern VTBL_ENTRY _ZTI7S295C11[];
extern  VTBL_ENTRY _ZTV7S295C11[];
extern Class_Descriptor cd_S295C2;
extern VTBL_ENTRY _ZTI6S295C2[];
extern  VTBL_ENTRY _ZTV6S295C2[];
static Base_Class bases_S295C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S295C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S295C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S295C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S295C11,    ABISELECT(152,84), //bcp->offset
    47, //bcp->virtual_function_table_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_S295C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S295C1[];
extern void _ZN6S295C1D1Ev();
extern void _ZN6S295C1D0Ev();
extern void _ZN6S295C53v10Ev();
extern void _ZN6S295C53v11Ev();
extern void _ZN6S295C53v12Ev();
extern void _ZN6S295C53v13Ev();
extern void _ZN6S295C53v14Ev();
extern void _ZN6S295C43v15Ev();
extern void _ZN6S295C43v16Ev();
extern void _ZN6S295C43v17Ev();
extern void _ZN6S295C43v18Ev();
extern void _ZN6S295C43v19Ev();
extern void _ZN6S295C43v20Ev();
extern void _ZN6S295C43v21Ev();
extern void _ZN6S295C43v22Ev();
extern void _ZN6S295C43v23Ev();
extern void _ZN6S295C43v24Ev();
extern void _ZN6S295C43v25Ev();
extern void _ZN6S295C33v26Ev();
extern void _ZN6S295C33v27Ev();
extern void _ZN6S295C33v28Ev();
extern void _ZN6S295C33v29Ev();
extern void _ZN6S295C33v30Ev();
extern void _ZN6S295C33v31Ev();
extern void _ZN6S295C33v32Ev();
extern void _ZN6S295C33v33Ev();
extern void _ZN6S295C23v37Ev();
extern void _ZN6S295C23v38Ev();
extern void _ZN6S295C23v39Ev();
extern void _ZN6S295C23v40Ev();
extern void _ZN6S295C23v41Ev();
extern void _ZN6S295C23v42Ev();
extern void _ZN6S295C23v43Ev();
extern void _ZN6S295C23v44Ev();
extern void _ZN6S295C23v45Ev();
extern void _ZN6S295C23v46Ev();
extern void _ZN6S295C12v1Ev();
extern void _ZN6S295C12v2Ev();
extern void _ZN6S295C12v3Ev();
extern void _ZN6S295C12v4Ev();
extern void _ZN6S295C12v5Ev();
extern void _ZN6S295C12v6Ev();
extern void _ZN6S295C12v7Ev();
extern void _ZN6S295C12v8Ev();
extern void _ZN6S295C12v9Ev();
extern void ABISELECT(_ZThn152_N6S295C1D1Ev,_ZThn84_N6S295C1D1Ev)();
extern void ABISELECT(_ZThn152_N6S295C1D0Ev,_ZThn84_N6S295C1D0Ev)();
extern void _ZN7S295C113v34Ev();
extern void _ZN7S295C113v35Ev();
extern void _ZN7S295C113v36Ev();
static  VTBL_ENTRY vtc_S295C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S295C1[0]),
  (VTBL_ENTRY)&_ZN6S295C1D1Ev,
  (VTBL_ENTRY)&_ZN6S295C1D0Ev,
  (VTBL_ENTRY)&_ZN6S295C53v10Ev,
  (VTBL_ENTRY)&_ZN6S295C53v11Ev,
  (VTBL_ENTRY)&_ZN6S295C53v12Ev,
  (VTBL_ENTRY)&_ZN6S295C53v13Ev,
  (VTBL_ENTRY)&_ZN6S295C53v14Ev,
  (VTBL_ENTRY)&_ZN6S295C43v15Ev,
  (VTBL_ENTRY)&_ZN6S295C43v16Ev,
  (VTBL_ENTRY)&_ZN6S295C43v17Ev,
  (VTBL_ENTRY)&_ZN6S295C43v18Ev,
  (VTBL_ENTRY)&_ZN6S295C43v19Ev,
  (VTBL_ENTRY)&_ZN6S295C43v20Ev,
  (VTBL_ENTRY)&_ZN6S295C43v21Ev,
  (VTBL_ENTRY)&_ZN6S295C43v22Ev,
  (VTBL_ENTRY)&_ZN6S295C43v23Ev,
  (VTBL_ENTRY)&_ZN6S295C43v24Ev,
  (VTBL_ENTRY)&_ZN6S295C43v25Ev,
  (VTBL_ENTRY)&_ZN6S295C33v26Ev,
  (VTBL_ENTRY)&_ZN6S295C33v27Ev,
  (VTBL_ENTRY)&_ZN6S295C33v28Ev,
  (VTBL_ENTRY)&_ZN6S295C33v29Ev,
  (VTBL_ENTRY)&_ZN6S295C33v30Ev,
  (VTBL_ENTRY)&_ZN6S295C33v31Ev,
  (VTBL_ENTRY)&_ZN6S295C33v32Ev,
  (VTBL_ENTRY)&_ZN6S295C33v33Ev,
  (VTBL_ENTRY)&_ZN6S295C23v37Ev,
  (VTBL_ENTRY)&_ZN6S295C23v38Ev,
  (VTBL_ENTRY)&_ZN6S295C23v39Ev,
  (VTBL_ENTRY)&_ZN6S295C23v40Ev,
  (VTBL_ENTRY)&_ZN6S295C23v41Ev,
  (VTBL_ENTRY)&_ZN6S295C23v42Ev,
  (VTBL_ENTRY)&_ZN6S295C23v43Ev,
  (VTBL_ENTRY)&_ZN6S295C23v44Ev,
  (VTBL_ENTRY)&_ZN6S295C23v45Ev,
  (VTBL_ENTRY)&_ZN6S295C23v46Ev,
  (VTBL_ENTRY)&_ZN6S295C12v1Ev,
  (VTBL_ENTRY)&_ZN6S295C12v2Ev,
  (VTBL_ENTRY)&_ZN6S295C12v3Ev,
  (VTBL_ENTRY)&_ZN6S295C12v4Ev,
  (VTBL_ENTRY)&_ZN6S295C12v5Ev,
  (VTBL_ENTRY)&_ZN6S295C12v6Ev,
  (VTBL_ENTRY)&_ZN6S295C12v7Ev,
  (VTBL_ENTRY)&_ZN6S295C12v8Ev,
  (VTBL_ENTRY)&_ZN6S295C12v9Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI6S295C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S295C1D1Ev,_ZThn84_N6S295C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S295C1D0Ev,_ZThn84_N6S295C1D0Ev),
  (VTBL_ENTRY)&_ZN7S295C113v34Ev,
  (VTBL_ENTRY)&_ZN7S295C113v35Ev,
  (VTBL_ENTRY)&_ZN7S295C113v36Ev,
};
extern VTBL_ENTRY _ZTI6S295C1[];
extern  VTBL_ENTRY _ZTV6S295C1[];
Class_Descriptor cd_S295C1 = {  "S295C1", // class name
  bases_S295C1, 6,
  &(vtc_S295C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,108), // object size
  NSPAIRA(_ZTI6S295C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S295C1),54, //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  S740C4  : S770C5_nt {
  virtual void  v13(); // _ZN6S740C43v13Ev
  virtual void  v14(); // _ZN6S740C43v14Ev
  virtual void  v15(); // _ZN6S740C43v15Ev
  virtual void  v16(); // _ZN6S740C43v16Ev
  virtual void  v17(); // _ZN6S740C43v17Ev
  ~S740C4(); // tgen
  S740C4(); // tgen
};
//SIG(-1 S740C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S740C4 ::v13(){vfunc_called(this, "_ZN6S740C43v13Ev");}
void  S740C4 ::v14(){vfunc_called(this, "_ZN6S740C43v14Ev");}
void  S740C4 ::v15(){vfunc_called(this, "_ZN6S740C43v15Ev");}
void  S740C4 ::v16(){vfunc_called(this, "_ZN6S740C43v16Ev");}
void  S740C4 ::v17(){vfunc_called(this, "_ZN6S740C43v17Ev");}
S740C4 ::~S740C4(){ note_dtor("S740C4", this);} // tgen
S740C4 ::S740C4(){ note_ctor("S740C4", this);} // tgen

static void Test_S740C4()
{
  extern Class_Descriptor cd_S740C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S740C4, buf);
    S740C4 *dp, &lv = *(dp=new (buf) S740C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S740C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S740C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S740C4");
    test_class_info(&lv, &cd_S740C4);
    dp->~S740C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS740C4(Test_S740C4, "S740C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S740C4C1Ev();
extern void _ZN6S740C4D1Ev();
Name_Map name_map_S740C4[] = {
  NSPAIR(_ZN6S740C4C1Ev),
  NSPAIR(_ZN6S740C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S740C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S740C4[];
extern void _ZN6S740C4D1Ev();
extern void _ZN6S740C4D0Ev();
extern void _ZN6S740C43v13Ev();
extern void _ZN6S740C43v14Ev();
extern void _ZN6S740C43v15Ev();
extern void _ZN6S740C43v16Ev();
extern void _ZN6S740C43v17Ev();
static  VTBL_ENTRY vtc_S740C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S740C4[0]),
  (VTBL_ENTRY)&_ZN6S740C4D1Ev,
  (VTBL_ENTRY)&_ZN6S740C4D0Ev,
  (VTBL_ENTRY)&_ZN6S740C43v13Ev,
  (VTBL_ENTRY)&_ZN6S740C43v14Ev,
  (VTBL_ENTRY)&_ZN6S740C43v15Ev,
  (VTBL_ENTRY)&_ZN6S740C43v16Ev,
  (VTBL_ENTRY)&_ZN6S740C43v17Ev,
};
extern VTBL_ENTRY _ZTI6S740C4[];
extern  VTBL_ENTRY _ZTV6S740C4[];
Class_Descriptor cd_S740C4 = {  "S740C4", // class name
  bases_S740C4, 1,
  &(vtc_S740C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S740C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S740C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S740C3  : S740C4 {
  void *s740c3f0[3];
  ::S770C6_nt s740c3f1;
  virtual void  v18(); // _ZN6S740C33v18Ev
  virtual void  v19(); // _ZN6S740C33v19Ev
  virtual void  v20(); // _ZN6S740C33v20Ev
  virtual void  v21(); // _ZN6S740C33v21Ev
  virtual void  v22(); // _ZN6S740C33v22Ev
  virtual void  v23(); // _ZN6S740C33v23Ev
  virtual void  v24(); // _ZN6S740C33v24Ev
  virtual void  v25(); // _ZN6S740C33v25Ev
  virtual void  v26(); // _ZN6S740C33v26Ev
  virtual void  v27(); // _ZN6S740C33v27Ev
  virtual void  v28(); // _ZN6S740C33v28Ev
  ~S740C3(); // tgen
  S740C3(); // tgen
};
//SIG(-1 S740C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S740C3 ::v18(){vfunc_called(this, "_ZN6S740C33v18Ev");}
void  S740C3 ::v19(){vfunc_called(this, "_ZN6S740C33v19Ev");}
void  S740C3 ::v20(){vfunc_called(this, "_ZN6S740C33v20Ev");}
void  S740C3 ::v21(){vfunc_called(this, "_ZN6S740C33v21Ev");}
void  S740C3 ::v22(){vfunc_called(this, "_ZN6S740C33v22Ev");}
void  S740C3 ::v23(){vfunc_called(this, "_ZN6S740C33v23Ev");}
void  S740C3 ::v24(){vfunc_called(this, "_ZN6S740C33v24Ev");}
void  S740C3 ::v25(){vfunc_called(this, "_ZN6S740C33v25Ev");}
void  S740C3 ::v26(){vfunc_called(this, "_ZN6S740C33v26Ev");}
void  S740C3 ::v27(){vfunc_called(this, "_ZN6S740C33v27Ev");}
void  S740C3 ::v28(){vfunc_called(this, "_ZN6S740C33v28Ev");}
S740C3 ::~S740C3(){ note_dtor("S740C3", this);} // tgen
S740C3 ::S740C3(){ note_ctor("S740C3", this);} // tgen

static void Test_S740C3()
{
  extern Class_Descriptor cd_S740C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S740C3, buf);
    S740C3 *dp, &lv = *(dp=new (buf) S740C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S740C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S740C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S740C4*), 0, "S740C3");
    check_base_class_offset(lv, (S740C4*), 0, "S740C3");
    check_field_offset(lv, s740c3f0, ABISELECT(16,8), "S740C3.s740c3f0");
    check_field_offset(lv, s740c3f1, ABISELECT(40,20), "S740C3.s740c3f1");
    test_class_info(&lv, &cd_S740C3);
    dp->~S740C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS740C3(Test_S740C3, "S740C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S740C3C1Ev();
extern void _ZN6S740C3D1Ev();
Name_Map name_map_S740C3[] = {
  NSPAIR(_ZN6S740C3C1Ev),
  NSPAIR(_ZN6S740C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S740C4;
extern VTBL_ENTRY _ZTI6S740C4[];
extern  VTBL_ENTRY _ZTV6S740C4[];
static Base_Class bases_S740C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S740C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S740C3[];
extern void _ZN6S740C3D1Ev();
extern void _ZN6S740C3D0Ev();
extern void _ZN6S740C43v13Ev();
extern void _ZN6S740C43v14Ev();
extern void _ZN6S740C43v15Ev();
extern void _ZN6S740C43v16Ev();
extern void _ZN6S740C43v17Ev();
extern void _ZN6S740C33v18Ev();
extern void _ZN6S740C33v19Ev();
extern void _ZN6S740C33v20Ev();
extern void _ZN6S740C33v21Ev();
extern void _ZN6S740C33v22Ev();
extern void _ZN6S740C33v23Ev();
extern void _ZN6S740C33v24Ev();
extern void _ZN6S740C33v25Ev();
extern void _ZN6S740C33v26Ev();
extern void _ZN6S740C33v27Ev();
extern void _ZN6S740C33v28Ev();
static  VTBL_ENTRY vtc_S740C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S740C3[0]),
  (VTBL_ENTRY)&_ZN6S740C3D1Ev,
  (VTBL_ENTRY)&_ZN6S740C3D0Ev,
  (VTBL_ENTRY)&_ZN6S740C43v13Ev,
  (VTBL_ENTRY)&_ZN6S740C43v14Ev,
  (VTBL_ENTRY)&_ZN6S740C43v15Ev,
  (VTBL_ENTRY)&_ZN6S740C43v16Ev,
  (VTBL_ENTRY)&_ZN6S740C43v17Ev,
  (VTBL_ENTRY)&_ZN6S740C33v18Ev,
  (VTBL_ENTRY)&_ZN6S740C33v19Ev,
  (VTBL_ENTRY)&_ZN6S740C33v20Ev,
  (VTBL_ENTRY)&_ZN6S740C33v21Ev,
  (VTBL_ENTRY)&_ZN6S740C33v22Ev,
  (VTBL_ENTRY)&_ZN6S740C33v23Ev,
  (VTBL_ENTRY)&_ZN6S740C33v24Ev,
  (VTBL_ENTRY)&_ZN6S740C33v25Ev,
  (VTBL_ENTRY)&_ZN6S740C33v26Ev,
  (VTBL_ENTRY)&_ZN6S740C33v27Ev,
  (VTBL_ENTRY)&_ZN6S740C33v28Ev,
};
extern VTBL_ENTRY _ZTI6S740C3[];
extern  VTBL_ENTRY _ZTV6S740C3[];
Class_Descriptor cd_S740C3 = {  "S740C3", // class name
  bases_S740C3, 2,
  &(vtc_S740C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S740C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S740C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S740C2  : S740C3 {
  ::S770C6_nt s740c2f0;
  ::S770C9_nt s740c2f1;
  void *s740c2f2[3];
  virtual void  v29(); // _ZN6S740C23v29Ev
  virtual void  v30(); // _ZN6S740C23v30Ev
  virtual void  v31(); // _ZN6S740C23v31Ev
  virtual void  v32(); // _ZN6S740C23v32Ev
  virtual void  v33(); // _ZN6S740C23v33Ev
  virtual void  v34(); // _ZN6S740C23v34Ev
  virtual void  v35(); // _ZN6S740C23v35Ev
  virtual void  v36(); // _ZN6S740C23v36Ev
  ~S740C2(); // tgen
  S740C2(); // tgen
};
//SIG(-1 S740C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S740C2 ::v29(){vfunc_called(this, "_ZN6S740C23v29Ev");}
void  S740C2 ::v30(){vfunc_called(this, "_ZN6S740C23v30Ev");}
void  S740C2 ::v31(){vfunc_called(this, "_ZN6S740C23v31Ev");}
void  S740C2 ::v32(){vfunc_called(this, "_ZN6S740C23v32Ev");}
void  S740C2 ::v33(){vfunc_called(this, "_ZN6S740C23v33Ev");}
void  S740C2 ::v34(){vfunc_called(this, "_ZN6S740C23v34Ev");}
void  S740C2 ::v35(){vfunc_called(this, "_ZN6S740C23v35Ev");}
void  S740C2 ::v36(){vfunc_called(this, "_ZN6S740C23v36Ev");}
S740C2 ::~S740C2(){ note_dtor("S740C2", this);} // tgen
S740C2 ::S740C2(){ note_ctor("S740C2", this);} // tgen

static void Test_S740C2()
{
  extern Class_Descriptor cd_S740C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S740C2, buf);
    S740C2 *dp, &lv = *(dp=new (buf) S740C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S740C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S740C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S740C4*)(S740C3*), 0, "S740C2");
    check_base_class_offset(lv, (S740C4*)(S740C3*), 0, "S740C2");
    check_base_class_offset(lv, (S740C3*), 0, "S740C2");
    check_field_offset(lv, s740c2f0, ABISELECT(80,44), "S740C2.s740c2f0");
    check_field_offset(lv, s740c2f1, ABISELECT(120,68), "S740C2.s740c2f1");
    check_field_offset(lv, s740c2f2, ABISELECT(128,72), "S740C2.s740c2f2");
    test_class_info(&lv, &cd_S740C2);
    dp->~S740C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS740C2(Test_S740C2, "S740C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S740C2C1Ev();
extern void _ZN6S740C2D1Ev();
Name_Map name_map_S740C2[] = {
  NSPAIR(_ZN6S740C2C1Ev),
  NSPAIR(_ZN6S740C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S740C4;
extern VTBL_ENTRY _ZTI6S740C4[];
extern  VTBL_ENTRY _ZTV6S740C4[];
extern Class_Descriptor cd_S740C3;
extern VTBL_ENTRY _ZTI6S740C3[];
extern  VTBL_ENTRY _ZTV6S740C3[];
static Base_Class bases_S740C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S740C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S740C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S740C2[];
extern void _ZN6S740C2D1Ev();
extern void _ZN6S740C2D0Ev();
extern void _ZN6S740C43v13Ev();
extern void _ZN6S740C43v14Ev();
extern void _ZN6S740C43v15Ev();
extern void _ZN6S740C43v16Ev();
extern void _ZN6S740C43v17Ev();
extern void _ZN6S740C33v18Ev();
extern void _ZN6S740C33v19Ev();
extern void _ZN6S740C33v20Ev();
extern void _ZN6S740C33v21Ev();
extern void _ZN6S740C33v22Ev();
extern void _ZN6S740C33v23Ev();
extern void _ZN6S740C33v24Ev();
extern void _ZN6S740C33v25Ev();
extern void _ZN6S740C33v26Ev();
extern void _ZN6S740C33v27Ev();
extern void _ZN6S740C33v28Ev();
extern void _ZN6S740C23v29Ev();
extern void _ZN6S740C23v30Ev();
extern void _ZN6S740C23v31Ev();
extern void _ZN6S740C23v32Ev();
extern void _ZN6S740C23v33Ev();
extern void _ZN6S740C23v34Ev();
extern void _ZN6S740C23v35Ev();
extern void _ZN6S740C23v36Ev();
static  VTBL_ENTRY vtc_S740C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S740C2[0]),
  (VTBL_ENTRY)&_ZN6S740C2D1Ev,
  (VTBL_ENTRY)&_ZN6S740C2D0Ev,
  (VTBL_ENTRY)&_ZN6S740C43v13Ev,
  (VTBL_ENTRY)&_ZN6S740C43v14Ev,
  (VTBL_ENTRY)&_ZN6S740C43v15Ev,
  (VTBL_ENTRY)&_ZN6S740C43v16Ev,
  (VTBL_ENTRY)&_ZN6S740C43v17Ev,
  (VTBL_ENTRY)&_ZN6S740C33v18Ev,
  (VTBL_ENTRY)&_ZN6S740C33v19Ev,
  (VTBL_ENTRY)&_ZN6S740C33v20Ev,
  (VTBL_ENTRY)&_ZN6S740C33v21Ev,
  (VTBL_ENTRY)&_ZN6S740C33v22Ev,
  (VTBL_ENTRY)&_ZN6S740C33v23Ev,
  (VTBL_ENTRY)&_ZN6S740C33v24Ev,
  (VTBL_ENTRY)&_ZN6S740C33v25Ev,
  (VTBL_ENTRY)&_ZN6S740C33v26Ev,
  (VTBL_ENTRY)&_ZN6S740C33v27Ev,
  (VTBL_ENTRY)&_ZN6S740C33v28Ev,
  (VTBL_ENTRY)&_ZN6S740C23v29Ev,
  (VTBL_ENTRY)&_ZN6S740C23v30Ev,
  (VTBL_ENTRY)&_ZN6S740C23v31Ev,
  (VTBL_ENTRY)&_ZN6S740C23v32Ev,
  (VTBL_ENTRY)&_ZN6S740C23v33Ev,
  (VTBL_ENTRY)&_ZN6S740C23v34Ev,
  (VTBL_ENTRY)&_ZN6S740C23v35Ev,
  (VTBL_ENTRY)&_ZN6S740C23v36Ev,
};
extern VTBL_ENTRY _ZTI6S740C2[];
extern  VTBL_ENTRY _ZTV6S740C2[];
Class_Descriptor cd_S740C2 = {  "S740C2", // class name
  bases_S740C2, 3,
  &(vtc_S740C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S740C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S740C2),28, //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  S740C1  : S740C2 {
  int s740c1f0;
  ::S303C11_nt s740c1f1;
  void *s740c1f2[2];
  __tsi64 s740c1f3[2];
  ::S2215C20_nt s740c1f4;
  int s740c1f5[2];
  void *s740c1f6[6];
  virtual void  v1(); // _ZN6S740C12v1Ev
  virtual void  v2(); // _ZN6S740C12v2Ev
  virtual void  v3(); // _ZN6S740C12v3Ev
  virtual void  v4(); // _ZN6S740C12v4Ev
  virtual void  v5(); // _ZN6S740C12v5Ev
  virtual void  v6(); // _ZN6S740C12v6Ev
  virtual void  v7(); // _ZN6S740C12v7Ev
  virtual void  v8(); // _ZN6S740C12v8Ev
  virtual void  v9(); // _ZN6S740C12v9Ev
  virtual void  v10(); // _ZN6S740C13v10Ev
  virtual void  v11(); // _ZN6S740C13v11Ev
  virtual void  v12(); // _ZN6S740C13v12Ev
  ~S740C1(); // tgen
  S740C1(); // tgen
};
//SIG(1 S740C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v13 v14 v15 v16 v17} v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v29 v30 v31 v32 v33 v34 v35 v36 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fi FC10{ m FC11{ m FL}} Fp[2] FL[2] FC12{ m Fp Fi FC13{ m}} Fi[2] Fp[6]}


void  S740C1 ::v1(){vfunc_called(this, "_ZN6S740C12v1Ev");}
void  S740C1 ::v2(){vfunc_called(this, "_ZN6S740C12v2Ev");}
void  S740C1 ::v3(){vfunc_called(this, "_ZN6S740C12v3Ev");}
void  S740C1 ::v4(){vfunc_called(this, "_ZN6S740C12v4Ev");}
void  S740C1 ::v5(){vfunc_called(this, "_ZN6S740C12v5Ev");}
void  S740C1 ::v6(){vfunc_called(this, "_ZN6S740C12v6Ev");}
void  S740C1 ::v7(){vfunc_called(this, "_ZN6S740C12v7Ev");}
void  S740C1 ::v8(){vfunc_called(this, "_ZN6S740C12v8Ev");}
void  S740C1 ::v9(){vfunc_called(this, "_ZN6S740C12v9Ev");}
void  S740C1 ::v10(){vfunc_called(this, "_ZN6S740C13v10Ev");}
void  S740C1 ::v11(){vfunc_called(this, "_ZN6S740C13v11Ev");}
void  S740C1 ::v12(){vfunc_called(this, "_ZN6S740C13v12Ev");}
S740C1 ::~S740C1(){ note_dtor("S740C1", this);} // tgen
S740C1 ::S740C1(){ note_ctor("S740C1", this);} // tgen

static void Test_S740C1()
{
  extern Class_Descriptor cd_S740C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,42)];
    init_test(&cd_S740C1, buf);
    S740C1 *dp, &lv = *(dp=new (buf) S740C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,164), "sizeof(S740C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S740C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S740C4*)(S740C3*)(S740C2*), 0, "S740C1");
    check_base_class_offset(lv, (S740C4*)(S740C3*)(S740C2*), 0, "S740C1");
    check_base_class_offset(lv, (S740C3*)(S740C2*), 0, "S740C1");
    check_base_class_offset(lv, (S740C2*), 0, "S740C1");
    check_field_offset(lv, s740c1f0, ABISELECT(152,84), "S740C1.s740c1f0");
    check_field_offset(lv, s740c1f1, ABISELECT(160,88), "S740C1.s740c1f1");
    check_field_offset(lv, s740c1f2, ABISELECT(168,96), "S740C1.s740c1f2");
    check_field_offset(lv, s740c1f3, ABISELECT(184,104), "S740C1.s740c1f3");
    check_field_offset(lv, s740c1f4, ABISELECT(200,120), "S740C1.s740c1f4");
    check_field_offset(lv, s740c1f5, ABISELECT(216,132), "S740C1.s740c1f5");
    check_field_offset(lv, s740c1f6, ABISELECT(224,140), "S740C1.s740c1f6");
    test_class_info(&lv, &cd_S740C1);
    dp->~S740C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS740C1(Test_S740C1, "S740C1", ABISELECT(272,164));

#else // __cplusplus

extern void _ZN6S740C1C1Ev();
extern void _ZN6S740C1D1Ev();
Name_Map name_map_S740C1[] = {
  NSPAIR(_ZN6S740C1C1Ev),
  NSPAIR(_ZN6S740C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S740C4;
extern VTBL_ENTRY _ZTI6S740C4[];
extern  VTBL_ENTRY _ZTV6S740C4[];
extern Class_Descriptor cd_S740C3;
extern VTBL_ENTRY _ZTI6S740C3[];
extern  VTBL_ENTRY _ZTV6S740C3[];
extern Class_Descriptor cd_S740C2;
extern VTBL_ENTRY _ZTI6S740C2[];
extern  VTBL_ENTRY _ZTV6S740C2[];
static Base_Class bases_S740C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S740C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S740C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S740C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S740C1[];
extern void _ZN6S740C1D1Ev();
extern void _ZN6S740C1D0Ev();
extern void _ZN6S740C43v13Ev();
extern void _ZN6S740C43v14Ev();
extern void _ZN6S740C43v15Ev();
extern void _ZN6S740C43v16Ev();
extern void _ZN6S740C43v17Ev();
extern void _ZN6S740C33v18Ev();
extern void _ZN6S740C33v19Ev();
extern void _ZN6S740C33v20Ev();
extern void _ZN6S740C33v21Ev();
extern void _ZN6S740C33v22Ev();
extern void _ZN6S740C33v23Ev();
extern void _ZN6S740C33v24Ev();
extern void _ZN6S740C33v25Ev();
extern void _ZN6S740C33v26Ev();
extern void _ZN6S740C33v27Ev();
extern void _ZN6S740C33v28Ev();
extern void _ZN6S740C23v29Ev();
extern void _ZN6S740C23v30Ev();
extern void _ZN6S740C23v31Ev();
extern void _ZN6S740C23v32Ev();
extern void _ZN6S740C23v33Ev();
extern void _ZN6S740C23v34Ev();
extern void _ZN6S740C23v35Ev();
extern void _ZN6S740C23v36Ev();
extern void _ZN6S740C12v1Ev();
extern void _ZN6S740C12v2Ev();
extern void _ZN6S740C12v3Ev();
extern void _ZN6S740C12v4Ev();
extern void _ZN6S740C12v5Ev();
extern void _ZN6S740C12v6Ev();
extern void _ZN6S740C12v7Ev();
extern void _ZN6S740C12v8Ev();
extern void _ZN6S740C12v9Ev();
extern void _ZN6S740C13v10Ev();
extern void _ZN6S740C13v11Ev();
extern void _ZN6S740C13v12Ev();
static  VTBL_ENTRY vtc_S740C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S740C1[0]),
  (VTBL_ENTRY)&_ZN6S740C1D1Ev,
  (VTBL_ENTRY)&_ZN6S740C1D0Ev,
  (VTBL_ENTRY)&_ZN6S740C43v13Ev,
  (VTBL_ENTRY)&_ZN6S740C43v14Ev,
  (VTBL_ENTRY)&_ZN6S740C43v15Ev,
  (VTBL_ENTRY)&_ZN6S740C43v16Ev,
  (VTBL_ENTRY)&_ZN6S740C43v17Ev,
  (VTBL_ENTRY)&_ZN6S740C33v18Ev,
  (VTBL_ENTRY)&_ZN6S740C33v19Ev,
  (VTBL_ENTRY)&_ZN6S740C33v20Ev,
  (VTBL_ENTRY)&_ZN6S740C33v21Ev,
  (VTBL_ENTRY)&_ZN6S740C33v22Ev,
  (VTBL_ENTRY)&_ZN6S740C33v23Ev,
  (VTBL_ENTRY)&_ZN6S740C33v24Ev,
  (VTBL_ENTRY)&_ZN6S740C33v25Ev,
  (VTBL_ENTRY)&_ZN6S740C33v26Ev,
  (VTBL_ENTRY)&_ZN6S740C33v27Ev,
  (VTBL_ENTRY)&_ZN6S740C33v28Ev,
  (VTBL_ENTRY)&_ZN6S740C23v29Ev,
  (VTBL_ENTRY)&_ZN6S740C23v30Ev,
  (VTBL_ENTRY)&_ZN6S740C23v31Ev,
  (VTBL_ENTRY)&_ZN6S740C23v32Ev,
  (VTBL_ENTRY)&_ZN6S740C23v33Ev,
  (VTBL_ENTRY)&_ZN6S740C23v34Ev,
  (VTBL_ENTRY)&_ZN6S740C23v35Ev,
  (VTBL_ENTRY)&_ZN6S740C23v36Ev,
  (VTBL_ENTRY)&_ZN6S740C12v1Ev,
  (VTBL_ENTRY)&_ZN6S740C12v2Ev,
  (VTBL_ENTRY)&_ZN6S740C12v3Ev,
  (VTBL_ENTRY)&_ZN6S740C12v4Ev,
  (VTBL_ENTRY)&_ZN6S740C12v5Ev,
  (VTBL_ENTRY)&_ZN6S740C12v6Ev,
  (VTBL_ENTRY)&_ZN6S740C12v7Ev,
  (VTBL_ENTRY)&_ZN6S740C12v8Ev,
  (VTBL_ENTRY)&_ZN6S740C12v9Ev,
  (VTBL_ENTRY)&_ZN6S740C13v10Ev,
  (VTBL_ENTRY)&_ZN6S740C13v11Ev,
  (VTBL_ENTRY)&_ZN6S740C13v12Ev,
};
extern VTBL_ENTRY _ZTI6S740C1[];
extern  VTBL_ENTRY _ZTV6S740C1[];
Class_Descriptor cd_S740C1 = {  "S740C1", // class name
  bases_S740C1, 4,
  &(vtc_S740C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,164), // object size
  NSPAIRA(_ZTI6S740C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S740C1),40, //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  S737C4  : S770C5_nt {
  virtual void  v11(); // _ZN6S737C43v11Ev
  virtual void  v12(); // _ZN6S737C43v12Ev
  virtual void  v13(); // _ZN6S737C43v13Ev
  virtual void  v14(); // _ZN6S737C43v14Ev
  virtual void  v15(); // _ZN6S737C43v15Ev
  ~S737C4(); // tgen
  S737C4(); // tgen
};
//SIG(-1 S737C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S737C4 ::v11(){vfunc_called(this, "_ZN6S737C43v11Ev");}
void  S737C4 ::v12(){vfunc_called(this, "_ZN6S737C43v12Ev");}
void  S737C4 ::v13(){vfunc_called(this, "_ZN6S737C43v13Ev");}
void  S737C4 ::v14(){vfunc_called(this, "_ZN6S737C43v14Ev");}
void  S737C4 ::v15(){vfunc_called(this, "_ZN6S737C43v15Ev");}
S737C4 ::~S737C4(){ note_dtor("S737C4", this);} // tgen
S737C4 ::S737C4(){ note_ctor("S737C4", this);} // tgen

static void Test_S737C4()
{
  extern Class_Descriptor cd_S737C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S737C4, buf);
    S737C4 *dp, &lv = *(dp=new (buf) S737C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S737C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S737C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S737C4");
    test_class_info(&lv, &cd_S737C4);
    dp->~S737C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS737C4(Test_S737C4, "S737C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S737C4C1Ev();
extern void _ZN6S737C4D1Ev();
Name_Map name_map_S737C4[] = {
  NSPAIR(_ZN6S737C4C1Ev),
  NSPAIR(_ZN6S737C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S737C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S737C4[];
extern void _ZN6S737C4D1Ev();
extern void _ZN6S737C4D0Ev();
extern void _ZN6S737C43v11Ev();
extern void _ZN6S737C43v12Ev();
extern void _ZN6S737C43v13Ev();
extern void _ZN6S737C43v14Ev();
extern void _ZN6S737C43v15Ev();
static  VTBL_ENTRY vtc_S737C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S737C4[0]),
  (VTBL_ENTRY)&_ZN6S737C4D1Ev,
  (VTBL_ENTRY)&_ZN6S737C4D0Ev,
  (VTBL_ENTRY)&_ZN6S737C43v11Ev,
  (VTBL_ENTRY)&_ZN6S737C43v12Ev,
  (VTBL_ENTRY)&_ZN6S737C43v13Ev,
  (VTBL_ENTRY)&_ZN6S737C43v14Ev,
  (VTBL_ENTRY)&_ZN6S737C43v15Ev,
};
extern VTBL_ENTRY _ZTI6S737C4[];
extern  VTBL_ENTRY _ZTV6S737C4[];
Class_Descriptor cd_S737C4 = {  "S737C4", // class name
  bases_S737C4, 1,
  &(vtc_S737C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S737C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S737C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S737C3  : S737C4 {
  void *s737c3f0[3];
  ::S770C6_nt s737c3f1;
  virtual void  v16(); // _ZN6S737C33v16Ev
  virtual void  v17(); // _ZN6S737C33v17Ev
  virtual void  v18(); // _ZN6S737C33v18Ev
  virtual void  v19(); // _ZN6S737C33v19Ev
  virtual void  v20(); // _ZN6S737C33v20Ev
  virtual void  v21(); // _ZN6S737C33v21Ev
  virtual void  v22(); // _ZN6S737C33v22Ev
  virtual void  v23(); // _ZN6S737C33v23Ev
  virtual void  v24(); // _ZN6S737C33v24Ev
  virtual void  v25(); // _ZN6S737C33v25Ev
  virtual void  v26(); // _ZN6S737C33v26Ev
  ~S737C3(); // tgen
  S737C3(); // tgen
};
//SIG(-1 S737C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S737C3 ::v16(){vfunc_called(this, "_ZN6S737C33v16Ev");}
void  S737C3 ::v17(){vfunc_called(this, "_ZN6S737C33v17Ev");}
void  S737C3 ::v18(){vfunc_called(this, "_ZN6S737C33v18Ev");}
void  S737C3 ::v19(){vfunc_called(this, "_ZN6S737C33v19Ev");}
void  S737C3 ::v20(){vfunc_called(this, "_ZN6S737C33v20Ev");}
void  S737C3 ::v21(){vfunc_called(this, "_ZN6S737C33v21Ev");}
void  S737C3 ::v22(){vfunc_called(this, "_ZN6S737C33v22Ev");}
void  S737C3 ::v23(){vfunc_called(this, "_ZN6S737C33v23Ev");}
void  S737C3 ::v24(){vfunc_called(this, "_ZN6S737C33v24Ev");}
void  S737C3 ::v25(){vfunc_called(this, "_ZN6S737C33v25Ev");}
void  S737C3 ::v26(){vfunc_called(this, "_ZN6S737C33v26Ev");}
S737C3 ::~S737C3(){ note_dtor("S737C3", this);} // tgen
S737C3 ::S737C3(){ note_ctor("S737C3", this);} // tgen

static void Test_S737C3()
{
  extern Class_Descriptor cd_S737C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S737C3, buf);
    S737C3 *dp, &lv = *(dp=new (buf) S737C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S737C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S737C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S737C4*), 0, "S737C3");
    check_base_class_offset(lv, (S737C4*), 0, "S737C3");
    check_field_offset(lv, s737c3f0, ABISELECT(16,8), "S737C3.s737c3f0");
    check_field_offset(lv, s737c3f1, ABISELECT(40,20), "S737C3.s737c3f1");
    test_class_info(&lv, &cd_S737C3);
    dp->~S737C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS737C3(Test_S737C3, "S737C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S737C3C1Ev();
extern void _ZN6S737C3D1Ev();
Name_Map name_map_S737C3[] = {
  NSPAIR(_ZN6S737C3C1Ev),
  NSPAIR(_ZN6S737C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S737C4;
extern VTBL_ENTRY _ZTI6S737C4[];
extern  VTBL_ENTRY _ZTV6S737C4[];
static Base_Class bases_S737C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S737C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S737C3[];
extern void _ZN6S737C3D1Ev();
extern void _ZN6S737C3D0Ev();
extern void _ZN6S737C43v11Ev();
extern void _ZN6S737C43v12Ev();
extern void _ZN6S737C43v13Ev();
extern void _ZN6S737C43v14Ev();
extern void _ZN6S737C43v15Ev();
extern void _ZN6S737C33v16Ev();
extern void _ZN6S737C33v17Ev();
extern void _ZN6S737C33v18Ev();
extern void _ZN6S737C33v19Ev();
extern void _ZN6S737C33v20Ev();
extern void _ZN6S737C33v21Ev();
extern void _ZN6S737C33v22Ev();
extern void _ZN6S737C33v23Ev();
extern void _ZN6S737C33v24Ev();
extern void _ZN6S737C33v25Ev();
extern void _ZN6S737C33v26Ev();
static  VTBL_ENTRY vtc_S737C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S737C3[0]),
  (VTBL_ENTRY)&_ZN6S737C3D1Ev,
  (VTBL_ENTRY)&_ZN6S737C3D0Ev,
  (VTBL_ENTRY)&_ZN6S737C43v11Ev,
  (VTBL_ENTRY)&_ZN6S737C43v12Ev,
  (VTBL_ENTRY)&_ZN6S737C43v13Ev,
  (VTBL_ENTRY)&_ZN6S737C43v14Ev,
  (VTBL_ENTRY)&_ZN6S737C43v15Ev,
  (VTBL_ENTRY)&_ZN6S737C33v16Ev,
  (VTBL_ENTRY)&_ZN6S737C33v17Ev,
  (VTBL_ENTRY)&_ZN6S737C33v18Ev,
  (VTBL_ENTRY)&_ZN6S737C33v19Ev,
  (VTBL_ENTRY)&_ZN6S737C33v20Ev,
  (VTBL_ENTRY)&_ZN6S737C33v21Ev,
  (VTBL_ENTRY)&_ZN6S737C33v22Ev,
  (VTBL_ENTRY)&_ZN6S737C33v23Ev,
  (VTBL_ENTRY)&_ZN6S737C33v24Ev,
  (VTBL_ENTRY)&_ZN6S737C33v25Ev,
  (VTBL_ENTRY)&_ZN6S737C33v26Ev,
};
extern VTBL_ENTRY _ZTI6S737C3[];
extern  VTBL_ENTRY _ZTV6S737C3[];
Class_Descriptor cd_S737C3 = {  "S737C3", // class name
  bases_S737C3, 2,
  &(vtc_S737C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S737C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S737C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S737C2  : S737C3 {
  ::S770C6_nt s737c2f0;
  ::S770C9_nt s737c2f1;
  void *s737c2f2[3];
  virtual void  v27(); // _ZN6S737C23v27Ev
  virtual void  v28(); // _ZN6S737C23v28Ev
  virtual void  v29(); // _ZN6S737C23v29Ev
  virtual void  v30(); // _ZN6S737C23v30Ev
  virtual void  v31(); // _ZN6S737C23v31Ev
  virtual void  v32(); // _ZN6S737C23v32Ev
  virtual void  v33(); // _ZN6S737C23v33Ev
  virtual void  v34(); // _ZN6S737C23v34Ev
  ~S737C2(); // tgen
  S737C2(); // tgen
};
//SIG(-1 S737C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S737C2 ::v27(){vfunc_called(this, "_ZN6S737C23v27Ev");}
void  S737C2 ::v28(){vfunc_called(this, "_ZN6S737C23v28Ev");}
void  S737C2 ::v29(){vfunc_called(this, "_ZN6S737C23v29Ev");}
void  S737C2 ::v30(){vfunc_called(this, "_ZN6S737C23v30Ev");}
void  S737C2 ::v31(){vfunc_called(this, "_ZN6S737C23v31Ev");}
void  S737C2 ::v32(){vfunc_called(this, "_ZN6S737C23v32Ev");}
void  S737C2 ::v33(){vfunc_called(this, "_ZN6S737C23v33Ev");}
void  S737C2 ::v34(){vfunc_called(this, "_ZN6S737C23v34Ev");}
S737C2 ::~S737C2(){ note_dtor("S737C2", this);} // tgen
S737C2 ::S737C2(){ note_ctor("S737C2", this);} // tgen

static void Test_S737C2()
{
  extern Class_Descriptor cd_S737C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S737C2, buf);
    S737C2 *dp, &lv = *(dp=new (buf) S737C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S737C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S737C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S737C4*)(S737C3*), 0, "S737C2");
    check_base_class_offset(lv, (S737C4*)(S737C3*), 0, "S737C2");
    check_base_class_offset(lv, (S737C3*), 0, "S737C2");
    check_field_offset(lv, s737c2f0, ABISELECT(80,44), "S737C2.s737c2f0");
    check_field_offset(lv, s737c2f1, ABISELECT(120,68), "S737C2.s737c2f1");
    check_field_offset(lv, s737c2f2, ABISELECT(128,72), "S737C2.s737c2f2");
    test_class_info(&lv, &cd_S737C2);
    dp->~S737C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS737C2(Test_S737C2, "S737C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S737C2C1Ev();
extern void _ZN6S737C2D1Ev();
Name_Map name_map_S737C2[] = {
  NSPAIR(_ZN6S737C2C1Ev),
  NSPAIR(_ZN6S737C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S737C4;
extern VTBL_ENTRY _ZTI6S737C4[];
extern  VTBL_ENTRY _ZTV6S737C4[];
extern Class_Descriptor cd_S737C3;
extern VTBL_ENTRY _ZTI6S737C3[];
extern  VTBL_ENTRY _ZTV6S737C3[];
static Base_Class bases_S737C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S737C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S737C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S737C2[];
extern void _ZN6S737C2D1Ev();
extern void _ZN6S737C2D0Ev();
extern void _ZN6S737C43v11Ev();
extern void _ZN6S737C43v12Ev();
extern void _ZN6S737C43v13Ev();
extern void _ZN6S737C43v14Ev();
extern void _ZN6S737C43v15Ev();
extern void _ZN6S737C33v16Ev();
extern void _ZN6S737C33v17Ev();
extern void _ZN6S737C33v18Ev();
extern void _ZN6S737C33v19Ev();
extern void _ZN6S737C33v20Ev();
extern void _ZN6S737C33v21Ev();
extern void _ZN6S737C33v22Ev();
extern void _ZN6S737C33v23Ev();
extern void _ZN6S737C33v24Ev();
extern void _ZN6S737C33v25Ev();
extern void _ZN6S737C33v26Ev();
extern void _ZN6S737C23v27Ev();
extern void _ZN6S737C23v28Ev();
extern void _ZN6S737C23v29Ev();
extern void _ZN6S737C23v30Ev();
extern void _ZN6S737C23v31Ev();
extern void _ZN6S737C23v32Ev();
extern void _ZN6S737C23v33Ev();
extern void _ZN6S737C23v34Ev();
static  VTBL_ENTRY vtc_S737C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S737C2[0]),
  (VTBL_ENTRY)&_ZN6S737C2D1Ev,
  (VTBL_ENTRY)&_ZN6S737C2D0Ev,
  (VTBL_ENTRY)&_ZN6S737C43v11Ev,
  (VTBL_ENTRY)&_ZN6S737C43v12Ev,
  (VTBL_ENTRY)&_ZN6S737C43v13Ev,
  (VTBL_ENTRY)&_ZN6S737C43v14Ev,
  (VTBL_ENTRY)&_ZN6S737C43v15Ev,
  (VTBL_ENTRY)&_ZN6S737C33v16Ev,
  (VTBL_ENTRY)&_ZN6S737C33v17Ev,
  (VTBL_ENTRY)&_ZN6S737C33v18Ev,
  (VTBL_ENTRY)&_ZN6S737C33v19Ev,
  (VTBL_ENTRY)&_ZN6S737C33v20Ev,
  (VTBL_ENTRY)&_ZN6S737C33v21Ev,
  (VTBL_ENTRY)&_ZN6S737C33v22Ev,
  (VTBL_ENTRY)&_ZN6S737C33v23Ev,
  (VTBL_ENTRY)&_ZN6S737C33v24Ev,
  (VTBL_ENTRY)&_ZN6S737C33v25Ev,
  (VTBL_ENTRY)&_ZN6S737C33v26Ev,
  (VTBL_ENTRY)&_ZN6S737C23v27Ev,
  (VTBL_ENTRY)&_ZN6S737C23v28Ev,
  (VTBL_ENTRY)&_ZN6S737C23v29Ev,
  (VTBL_ENTRY)&_ZN6S737C23v30Ev,
  (VTBL_ENTRY)&_ZN6S737C23v31Ev,
  (VTBL_ENTRY)&_ZN6S737C23v32Ev,
  (VTBL_ENTRY)&_ZN6S737C23v33Ev,
  (VTBL_ENTRY)&_ZN6S737C23v34Ev,
};
extern VTBL_ENTRY _ZTI6S737C2[];
extern  VTBL_ENTRY _ZTV6S737C2[];
Class_Descriptor cd_S737C2 = {  "S737C2", // class name
  bases_S737C2, 3,
  &(vtc_S737C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S737C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S737C2),28, //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  S737C1  : S737C2 {
  int s737c1f0;
  ::S303C11_nt s737c1f1;
  void *s737c1f2[2];
  __tsi64 s737c1f3[2];
  ::S2215C20_nt s737c1f4;
  int s737c1f5[2];
  void *s737c1f6[6];
  virtual void  v1(); // _ZN6S737C12v1Ev
  virtual void  v2(); // _ZN6S737C12v2Ev
  virtual void  v3(); // _ZN6S737C12v3Ev
  virtual void  v4(); // _ZN6S737C12v4Ev
  virtual void  v5(); // _ZN6S737C12v5Ev
  virtual void  v6(); // _ZN6S737C12v6Ev
  virtual void  v7(); // _ZN6S737C12v7Ev
  virtual void  v8(); // _ZN6S737C12v8Ev
  virtual void  v9(); // _ZN6S737C12v9Ev
  virtual void  v10(); // _ZN6S737C13v10Ev
  ~S737C1(); // tgen
  S737C1(); // tgen
};
//SIG(1 S737C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v11 v12 v13 v14 v15} v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v27 v28 v29 v30 v31 v32 v33 v34 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi FC10{ m FC11{ m FL}} Fp[2] FL[2] FC12{ m Fp Fi FC13{ m}} Fi[2] Fp[6]}


void  S737C1 ::v1(){vfunc_called(this, "_ZN6S737C12v1Ev");}
void  S737C1 ::v2(){vfunc_called(this, "_ZN6S737C12v2Ev");}
void  S737C1 ::v3(){vfunc_called(this, "_ZN6S737C12v3Ev");}
void  S737C1 ::v4(){vfunc_called(this, "_ZN6S737C12v4Ev");}
void  S737C1 ::v5(){vfunc_called(this, "_ZN6S737C12v5Ev");}
void  S737C1 ::v6(){vfunc_called(this, "_ZN6S737C12v6Ev");}
void  S737C1 ::v7(){vfunc_called(this, "_ZN6S737C12v7Ev");}
void  S737C1 ::v8(){vfunc_called(this, "_ZN6S737C12v8Ev");}
void  S737C1 ::v9(){vfunc_called(this, "_ZN6S737C12v9Ev");}
void  S737C1 ::v10(){vfunc_called(this, "_ZN6S737C13v10Ev");}
S737C1 ::~S737C1(){ note_dtor("S737C1", this);} // tgen
S737C1 ::S737C1(){ note_ctor("S737C1", this);} // tgen

static void Test_S737C1()
{
  extern Class_Descriptor cd_S737C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,42)];
    init_test(&cd_S737C1, buf);
    S737C1 *dp, &lv = *(dp=new (buf) S737C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,164), "sizeof(S737C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S737C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S737C4*)(S737C3*)(S737C2*), 0, "S737C1");
    check_base_class_offset(lv, (S737C4*)(S737C3*)(S737C2*), 0, "S737C1");
    check_base_class_offset(lv, (S737C3*)(S737C2*), 0, "S737C1");
    check_base_class_offset(lv, (S737C2*), 0, "S737C1");
    check_field_offset(lv, s737c1f0, ABISELECT(152,84), "S737C1.s737c1f0");
    check_field_offset(lv, s737c1f1, ABISELECT(160,88), "S737C1.s737c1f1");
    check_field_offset(lv, s737c1f2, ABISELECT(168,96), "S737C1.s737c1f2");
    check_field_offset(lv, s737c1f3, ABISELECT(184,104), "S737C1.s737c1f3");
    check_field_offset(lv, s737c1f4, ABISELECT(200,120), "S737C1.s737c1f4");
    check_field_offset(lv, s737c1f5, ABISELECT(216,132), "S737C1.s737c1f5");
    check_field_offset(lv, s737c1f6, ABISELECT(224,140), "S737C1.s737c1f6");
    test_class_info(&lv, &cd_S737C1);
    dp->~S737C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS737C1(Test_S737C1, "S737C1", ABISELECT(272,164));

#else // __cplusplus

extern void _ZN6S737C1C1Ev();
extern void _ZN6S737C1D1Ev();
Name_Map name_map_S737C1[] = {
  NSPAIR(_ZN6S737C1C1Ev),
  NSPAIR(_ZN6S737C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S737C4;
extern VTBL_ENTRY _ZTI6S737C4[];
extern  VTBL_ENTRY _ZTV6S737C4[];
extern Class_Descriptor cd_S737C3;
extern VTBL_ENTRY _ZTI6S737C3[];
extern  VTBL_ENTRY _ZTV6S737C3[];
extern Class_Descriptor cd_S737C2;
extern VTBL_ENTRY _ZTI6S737C2[];
extern  VTBL_ENTRY _ZTV6S737C2[];
static Base_Class bases_S737C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S737C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S737C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S737C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S737C1[];
extern void _ZN6S737C1D1Ev();
extern void _ZN6S737C1D0Ev();
extern void _ZN6S737C43v11Ev();
extern void _ZN6S737C43v12Ev();
extern void _ZN6S737C43v13Ev();
extern void _ZN6S737C43v14Ev();
extern void _ZN6S737C43v15Ev();
extern void _ZN6S737C33v16Ev();
extern void _ZN6S737C33v17Ev();
extern void _ZN6S737C33v18Ev();
extern void _ZN6S737C33v19Ev();
extern void _ZN6S737C33v20Ev();
extern void _ZN6S737C33v21Ev();
extern void _ZN6S737C33v22Ev();
extern void _ZN6S737C33v23Ev();
extern void _ZN6S737C33v24Ev();
extern void _ZN6S737C33v25Ev();
extern void _ZN6S737C33v26Ev();
extern void _ZN6S737C23v27Ev();
extern void _ZN6S737C23v28Ev();
extern void _ZN6S737C23v29Ev();
extern void _ZN6S737C23v30Ev();
extern void _ZN6S737C23v31Ev();
extern void _ZN6S737C23v32Ev();
extern void _ZN6S737C23v33Ev();
extern void _ZN6S737C23v34Ev();
extern void _ZN6S737C12v1Ev();
extern void _ZN6S737C12v2Ev();
extern void _ZN6S737C12v3Ev();
extern void _ZN6S737C12v4Ev();
extern void _ZN6S737C12v5Ev();
extern void _ZN6S737C12v6Ev();
extern void _ZN6S737C12v7Ev();
extern void _ZN6S737C12v8Ev();
extern void _ZN6S737C12v9Ev();
extern void _ZN6S737C13v10Ev();
static  VTBL_ENTRY vtc_S737C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S737C1[0]),
  (VTBL_ENTRY)&_ZN6S737C1D1Ev,
  (VTBL_ENTRY)&_ZN6S737C1D0Ev,
  (VTBL_ENTRY)&_ZN6S737C43v11Ev,
  (VTBL_ENTRY)&_ZN6S737C43v12Ev,
  (VTBL_ENTRY)&_ZN6S737C43v13Ev,
  (VTBL_ENTRY)&_ZN6S737C43v14Ev,
  (VTBL_ENTRY)&_ZN6S737C43v15Ev,
  (VTBL_ENTRY)&_ZN6S737C33v16Ev,
  (VTBL_ENTRY)&_ZN6S737C33v17Ev,
  (VTBL_ENTRY)&_ZN6S737C33v18Ev,
  (VTBL_ENTRY)&_ZN6S737C33v19Ev,
  (VTBL_ENTRY)&_ZN6S737C33v20Ev,
  (VTBL_ENTRY)&_ZN6S737C33v21Ev,
  (VTBL_ENTRY)&_ZN6S737C33v22Ev,
  (VTBL_ENTRY)&_ZN6S737C33v23Ev,
  (VTBL_ENTRY)&_ZN6S737C33v24Ev,
  (VTBL_ENTRY)&_ZN6S737C33v25Ev,
  (VTBL_ENTRY)&_ZN6S737C33v26Ev,
  (VTBL_ENTRY)&_ZN6S737C23v27Ev,
  (VTBL_ENTRY)&_ZN6S737C23v28Ev,
  (VTBL_ENTRY)&_ZN6S737C23v29Ev,
  (VTBL_ENTRY)&_ZN6S737C23v30Ev,
  (VTBL_ENTRY)&_ZN6S737C23v31Ev,
  (VTBL_ENTRY)&_ZN6S737C23v32Ev,
  (VTBL_ENTRY)&_ZN6S737C23v33Ev,
  (VTBL_ENTRY)&_ZN6S737C23v34Ev,
  (VTBL_ENTRY)&_ZN6S737C12v1Ev,
  (VTBL_ENTRY)&_ZN6S737C12v2Ev,
  (VTBL_ENTRY)&_ZN6S737C12v3Ev,
  (VTBL_ENTRY)&_ZN6S737C12v4Ev,
  (VTBL_ENTRY)&_ZN6S737C12v5Ev,
  (VTBL_ENTRY)&_ZN6S737C12v6Ev,
  (VTBL_ENTRY)&_ZN6S737C12v7Ev,
  (VTBL_ENTRY)&_ZN6S737C12v8Ev,
  (VTBL_ENTRY)&_ZN6S737C12v9Ev,
  (VTBL_ENTRY)&_ZN6S737C13v10Ev,
};
extern VTBL_ENTRY _ZTI6S737C1[];
extern  VTBL_ENTRY _ZTV6S737C1[];
Class_Descriptor cd_S737C1 = {  "S737C1", // class name
  bases_S737C1, 4,
  &(vtc_S737C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,164), // object size
  NSPAIRA(_ZTI6S737C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S737C1),38, //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  S11166C3_nt  {
  unsigned char s11166c3f0:1;
  char s11166c3f1:7;
  char s11166c3f2;
  char s11166c3f3:6;
  unsigned char s11166c3f4:1;
  unsigned char s11166c3f5:1;
  char s11166c3f6;
};
//SIG(-1 S11166C3_nt) C1{ Fc:1 Fc:7 Fc Fc:6 Fc:1 Fc:1 Fc}



//skip512 S11166C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11166C5  {
  short s11166c5f0;
  char s11166c5f1[2];
};
//SIG(-1 S11166C5) C1{ Fs Fc[2]}



static void Test_S11166C5()
{
  {
    init_simple_test("S11166C5");
    S11166C5 lv;
    check2(sizeof(lv), 4, "sizeof(S11166C5)");
    check2(__alignof__(lv), 2, "__alignof__(S11166C5)");
    check_field_offset(lv, s11166c5f0, 0, "S11166C5.s11166c5f0");
    check_field_offset(lv, s11166c5f1, 2, "S11166C5.s11166c5f1");
  }
}
static Arrange_To_Call_Me vS11166C5(Test_S11166C5, "S11166C5", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11166C17_nt  {
  long s11166c17f0;
};
//SIG(-1 S11166C17_nt) C1{ Fl}



//skip512 S11166C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11166C1  {
  ::S770C11_nt s11166c1f0;
  int s11166c1f1[4];
  void *s11166c1f2;
  int s11166c1f3;
  void *s11166c1f4;
  int s11166c1f5;
  ::S11166C3_nt s11166c1f6;
  ::S770C16_nt s11166c1f7;
  ::S11166C5 s11166c1f8;
  long s11166c1f9[2];
  char s11166c1f10[16];
  int s11166c1f11;
  ::S770C12 s11166c1f12;
  int s11166c1f13;
  int s11166c1f14;
  int s11166c1f15;
  int s11166c1f16;
  ::S11166C17_nt s11166c1f17;
  int s11166c1f18;
  long s11166c1f19;
  int s11166c1f20;
};
//SIG(1 S11166C1) C1{ FC2{ Fc[20]} Fi[4] Fp Fi Fp Fi FC3{ Fc:1 Fc:7 Fc Fc:6 Fc:1 Fc:1 Fc} FC4{ Fc[4]} FC5{ Fs Fc[2]} Fl[2] Fc[16] Fi FC6{ FC7{ FC8{ FC2 Fc[16]} FC9{ Fc[52]} FC10{ Fc[128]}} FC4 FC11{ Fi[3] Fc[4]} Fi FC12{ Fc[64]} FU13{ FC14{ Fi Fi} FL FC15{ Fi Fi Fi Fc[128]}} Fi} Fi Fi Fi Fi FC16{ Fl} Fi Fl Fi}



static void Test_S11166C1()
{
  {
    init_simple_test("S11166C1");
    static S11166C1 lv;
    check2(sizeof(lv), ABISELECT(624,572), "sizeof(S11166C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11166C1)");
    check_field_offset(lv, s11166c1f0, 0, "S11166C1.s11166c1f0");
    check_field_offset(lv, s11166c1f1, 20, "S11166C1.s11166c1f1");
    check_field_offset(lv, s11166c1f2, ABISELECT(40,36), "S11166C1.s11166c1f2");
    check_field_offset(lv, s11166c1f3, ABISELECT(48,40), "S11166C1.s11166c1f3");
    check_field_offset(lv, s11166c1f4, ABISELECT(56,44), "S11166C1.s11166c1f4");
    check_field_offset(lv, s11166c1f5, ABISELECT(64,48), "S11166C1.s11166c1f5");
    check_field_offset(lv, s11166c1f6, ABISELECT(68,52), "S11166C1.s11166c1f6");
    check_field_offset(lv, s11166c1f7, ABISELECT(72,56), "S11166C1.s11166c1f7");
    check_field_offset(lv, s11166c1f8, ABISELECT(76,60), "S11166C1.s11166c1f8");
    check_field_offset(lv, s11166c1f9, ABISELECT(80,64), "S11166C1.s11166c1f9");
    check_field_offset(lv, s11166c1f10, ABISELECT(96,72), "S11166C1.s11166c1f10");
    check_field_offset(lv, s11166c1f11, ABISELECT(112,88), "S11166C1.s11166c1f11");
    check_field_offset(lv, s11166c1f12, ABISELECT(120,92), "S11166C1.s11166c1f12");
    check_field_offset(lv, s11166c1f13, ABISELECT(576,540), "S11166C1.s11166c1f13");
    check_field_offset(lv, s11166c1f14, ABISELECT(580,544), "S11166C1.s11166c1f14");
    check_field_offset(lv, s11166c1f15, ABISELECT(584,548), "S11166C1.s11166c1f15");
    check_field_offset(lv, s11166c1f16, ABISELECT(588,552), "S11166C1.s11166c1f16");
    check_field_offset(lv, s11166c1f17, ABISELECT(592,556), "S11166C1.s11166c1f17");
    check_field_offset(lv, s11166c1f18, ABISELECT(600,560), "S11166C1.s11166c1f18");
    check_field_offset(lv, s11166c1f19, ABISELECT(608,564), "S11166C1.s11166c1f19");
    check_field_offset(lv, s11166c1f20, ABISELECT(616,568), "S11166C1.s11166c1f20");
  }
}
static Arrange_To_Call_Me vS11166C1(Test_S11166C1, "S11166C1", ABISELECT(624,572));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11167C17_nt  {
  __tsi64 s11167c17f0;
};
//SIG(-1 S11167C17_nt) C1{ FL}



//skip512 S11167C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11167C1  {
  ::S770C11_nt s11167c1f0;
  int s11167c1f1[4];
  void *s11167c1f2;
  int s11167c1f3;
  void *s11167c1f4;
  int s11167c1f5;
  ::S11166C3_nt s11167c1f6;
  ::S770C16_nt s11167c1f7;
  ::S11166C5 s11167c1f8;
  __tsi64 s11167c1f9[2];
  char s11167c1f10[16];
  int s11167c1f11;
  ::S770C12 s11167c1f12;
  int s11167c1f13;
  int s11167c1f14;
  int s11167c1f15;
  int s11167c1f16;
  ::S11167C17_nt s11167c1f17;
  int s11167c1f18;
  __tsi64 s11167c1f19;
  int s11167c1f20;
};
//SIG(1 S11167C1) C1{ FC2{ Fc[20]} Fi[4] Fp Fi Fp Fi FC3{ Fc:1 Fc:7 Fc Fc:6 Fc:1 Fc:1 Fc} FC4{ Fc[4]} FC5{ Fs Fc[2]} FL[2] Fc[16] Fi FC6{ FC7{ FC8{ FC2 Fc[16]} FC9{ Fc[52]} FC10{ Fc[128]}} FC4 FC11{ Fi[3] Fc[4]} Fi FC12{ Fc[64]} FU13{ FC14{ Fi Fi} FL FC15{ Fi Fi Fi Fc[128]}} Fi} Fi Fi Fi Fi FC16{ FL} Fi FL Fi}



static void Test_S11167C1()
{
  {
    init_simple_test("S11167C1");
    static S11167C1 lv;
    check2(sizeof(lv), ABISELECT(624,588), "sizeof(S11167C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11167C1)");
    check_field_offset(lv, s11167c1f0, 0, "S11167C1.s11167c1f0");
    check_field_offset(lv, s11167c1f1, 20, "S11167C1.s11167c1f1");
    check_field_offset(lv, s11167c1f2, ABISELECT(40,36), "S11167C1.s11167c1f2");
    check_field_offset(lv, s11167c1f3, ABISELECT(48,40), "S11167C1.s11167c1f3");
    check_field_offset(lv, s11167c1f4, ABISELECT(56,44), "S11167C1.s11167c1f4");
    check_field_offset(lv, s11167c1f5, ABISELECT(64,48), "S11167C1.s11167c1f5");
    check_field_offset(lv, s11167c1f6, ABISELECT(68,52), "S11167C1.s11167c1f6");
    check_field_offset(lv, s11167c1f7, ABISELECT(72,56), "S11167C1.s11167c1f7");
    check_field_offset(lv, s11167c1f8, ABISELECT(76,60), "S11167C1.s11167c1f8");
    check_field_offset(lv, s11167c1f9, ABISELECT(80,64), "S11167C1.s11167c1f9");
    check_field_offset(lv, s11167c1f10, ABISELECT(96,80), "S11167C1.s11167c1f10");
    check_field_offset(lv, s11167c1f11, ABISELECT(112,96), "S11167C1.s11167c1f11");
    check_field_offset(lv, s11167c1f12, ABISELECT(120,100), "S11167C1.s11167c1f12");
    check_field_offset(lv, s11167c1f13, ABISELECT(576,548), "S11167C1.s11167c1f13");
    check_field_offset(lv, s11167c1f14, ABISELECT(580,552), "S11167C1.s11167c1f14");
    check_field_offset(lv, s11167c1f15, ABISELECT(584,556), "S11167C1.s11167c1f15");
    check_field_offset(lv, s11167c1f16, ABISELECT(588,560), "S11167C1.s11167c1f16");
    check_field_offset(lv, s11167c1f17, ABISELECT(592,564), "S11167C1.s11167c1f17");
    check_field_offset(lv, s11167c1f18, ABISELECT(600,572), "S11167C1.s11167c1f18");
    check_field_offset(lv, s11167c1f19, ABISELECT(608,576), "S11167C1.s11167c1f19");
    check_field_offset(lv, s11167c1f20, ABISELECT(616,584), "S11167C1.s11167c1f20");
  }
}
static Arrange_To_Call_Me vS11167C1(Test_S11167C1, "S11167C1", ABISELECT(624,588));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S771C4  : S770C5_nt {
  virtual void  v7(); // _ZN6S771C42v7Ev
  virtual void  v8(); // _ZN6S771C42v8Ev
  virtual void  v9(); // _ZN6S771C42v9Ev
  virtual void  v10(); // _ZN6S771C43v10Ev
  virtual void  v11(); // _ZN6S771C43v11Ev
  ~S771C4(); // tgen
  S771C4(); // tgen
};
//SIG(-1 S771C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S771C4 ::v7(){vfunc_called(this, "_ZN6S771C42v7Ev");}
void  S771C4 ::v8(){vfunc_called(this, "_ZN6S771C42v8Ev");}
void  S771C4 ::v9(){vfunc_called(this, "_ZN6S771C42v9Ev");}
void  S771C4 ::v10(){vfunc_called(this, "_ZN6S771C43v10Ev");}
void  S771C4 ::v11(){vfunc_called(this, "_ZN6S771C43v11Ev");}
S771C4 ::~S771C4(){ note_dtor("S771C4", this);} // tgen
S771C4 ::S771C4(){ note_ctor("S771C4", this);} // tgen

static void Test_S771C4()
{
  extern Class_Descriptor cd_S771C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S771C4, buf);
    S771C4 *dp, &lv = *(dp=new (buf) S771C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S771C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S771C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S771C4");
    test_class_info(&lv, &cd_S771C4);
    dp->~S771C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS771C4(Test_S771C4, "S771C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S771C4C1Ev();
extern void _ZN6S771C4D1Ev();
Name_Map name_map_S771C4[] = {
  NSPAIR(_ZN6S771C4C1Ev),
  NSPAIR(_ZN6S771C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S771C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S771C4[];
extern void _ZN6S771C4D1Ev();
extern void _ZN6S771C4D0Ev();
extern void _ZN6S771C42v7Ev();
extern void _ZN6S771C42v8Ev();
extern void _ZN6S771C42v9Ev();
extern void _ZN6S771C43v10Ev();
extern void _ZN6S771C43v11Ev();
static  VTBL_ENTRY vtc_S771C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S771C4[0]),
  (VTBL_ENTRY)&_ZN6S771C4D1Ev,
  (VTBL_ENTRY)&_ZN6S771C4D0Ev,
  (VTBL_ENTRY)&_ZN6S771C42v7Ev,
  (VTBL_ENTRY)&_ZN6S771C42v8Ev,
  (VTBL_ENTRY)&_ZN6S771C42v9Ev,
  (VTBL_ENTRY)&_ZN6S771C43v10Ev,
  (VTBL_ENTRY)&_ZN6S771C43v11Ev,
};
extern VTBL_ENTRY _ZTI6S771C4[];
extern  VTBL_ENTRY _ZTV6S771C4[];
Class_Descriptor cd_S771C4 = {  "S771C4", // class name
  bases_S771C4, 1,
  &(vtc_S771C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S771C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S771C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S771C3  : S771C4 {
  void *s771c3f0[3];
  ::S770C6_nt s771c3f1;
  virtual void  v12(); // _ZN6S771C33v12Ev
  virtual void  v13(); // _ZN6S771C33v13Ev
  virtual void  v14(); // _ZN6S771C33v14Ev
  virtual void  v15(); // _ZN6S771C33v15Ev
  virtual void  v16(); // _ZN6S771C33v16Ev
  virtual void  v17(); // _ZN6S771C33v17Ev
  virtual void  v18(); // _ZN6S771C33v18Ev
  virtual void  v19(); // _ZN6S771C33v19Ev
  virtual void  v20(); // _ZN6S771C33v20Ev
  virtual void  v21(); // _ZN6S771C33v21Ev
  virtual void  v22(); // _ZN6S771C33v22Ev
  ~S771C3(); // tgen
  S771C3(); // tgen
};
//SIG(-1 S771C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S771C3 ::v12(){vfunc_called(this, "_ZN6S771C33v12Ev");}
void  S771C3 ::v13(){vfunc_called(this, "_ZN6S771C33v13Ev");}
void  S771C3 ::v14(){vfunc_called(this, "_ZN6S771C33v14Ev");}
void  S771C3 ::v15(){vfunc_called(this, "_ZN6S771C33v15Ev");}
void  S771C3 ::v16(){vfunc_called(this, "_ZN6S771C33v16Ev");}
void  S771C3 ::v17(){vfunc_called(this, "_ZN6S771C33v17Ev");}
void  S771C3 ::v18(){vfunc_called(this, "_ZN6S771C33v18Ev");}
void  S771C3 ::v19(){vfunc_called(this, "_ZN6S771C33v19Ev");}
void  S771C3 ::v20(){vfunc_called(this, "_ZN6S771C33v20Ev");}
void  S771C3 ::v21(){vfunc_called(this, "_ZN6S771C33v21Ev");}
void  S771C3 ::v22(){vfunc_called(this, "_ZN6S771C33v22Ev");}
S771C3 ::~S771C3(){ note_dtor("S771C3", this);} // tgen
S771C3 ::S771C3(){ note_ctor("S771C3", this);} // tgen

static void Test_S771C3()
{
  extern Class_Descriptor cd_S771C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S771C3, buf);
    S771C3 *dp, &lv = *(dp=new (buf) S771C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S771C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S771C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S771C4*), 0, "S771C3");
    check_base_class_offset(lv, (S771C4*), 0, "S771C3");
    check_field_offset(lv, s771c3f0, ABISELECT(16,8), "S771C3.s771c3f0");
    check_field_offset(lv, s771c3f1, ABISELECT(40,20), "S771C3.s771c3f1");
    test_class_info(&lv, &cd_S771C3);
    dp->~S771C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS771C3(Test_S771C3, "S771C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S771C3C1Ev();
extern void _ZN6S771C3D1Ev();
Name_Map name_map_S771C3[] = {
  NSPAIR(_ZN6S771C3C1Ev),
  NSPAIR(_ZN6S771C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S771C4;
extern VTBL_ENTRY _ZTI6S771C4[];
extern  VTBL_ENTRY _ZTV6S771C4[];
static Base_Class bases_S771C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S771C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S771C3[];
extern void _ZN6S771C3D1Ev();
extern void _ZN6S771C3D0Ev();
extern void _ZN6S771C42v7Ev();
extern void _ZN6S771C42v8Ev();
extern void _ZN6S771C42v9Ev();
extern void _ZN6S771C43v10Ev();
extern void _ZN6S771C43v11Ev();
extern void _ZN6S771C33v12Ev();
extern void _ZN6S771C33v13Ev();
extern void _ZN6S771C33v14Ev();
extern void _ZN6S771C33v15Ev();
extern void _ZN6S771C33v16Ev();
extern void _ZN6S771C33v17Ev();
extern void _ZN6S771C33v18Ev();
extern void _ZN6S771C33v19Ev();
extern void _ZN6S771C33v20Ev();
extern void _ZN6S771C33v21Ev();
extern void _ZN6S771C33v22Ev();
static  VTBL_ENTRY vtc_S771C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S771C3[0]),
  (VTBL_ENTRY)&_ZN6S771C3D1Ev,
  (VTBL_ENTRY)&_ZN6S771C3D0Ev,
  (VTBL_ENTRY)&_ZN6S771C42v7Ev,
  (VTBL_ENTRY)&_ZN6S771C42v8Ev,
  (VTBL_ENTRY)&_ZN6S771C42v9Ev,
  (VTBL_ENTRY)&_ZN6S771C43v10Ev,
  (VTBL_ENTRY)&_ZN6S771C43v11Ev,
  (VTBL_ENTRY)&_ZN6S771C33v12Ev,
  (VTBL_ENTRY)&_ZN6S771C33v13Ev,
  (VTBL_ENTRY)&_ZN6S771C33v14Ev,
  (VTBL_ENTRY)&_ZN6S771C33v15Ev,
  (VTBL_ENTRY)&_ZN6S771C33v16Ev,
  (VTBL_ENTRY)&_ZN6S771C33v17Ev,
  (VTBL_ENTRY)&_ZN6S771C33v18Ev,
  (VTBL_ENTRY)&_ZN6S771C33v19Ev,
  (VTBL_ENTRY)&_ZN6S771C33v20Ev,
  (VTBL_ENTRY)&_ZN6S771C33v21Ev,
  (VTBL_ENTRY)&_ZN6S771C33v22Ev,
};
extern VTBL_ENTRY _ZTI6S771C3[];
extern  VTBL_ENTRY _ZTV6S771C3[];
Class_Descriptor cd_S771C3 = {  "S771C3", // class name
  bases_S771C3, 2,
  &(vtc_S771C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S771C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S771C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S771C2  : S771C3 {
  ::S770C6_nt s771c2f0;
  ::S770C9_nt s771c2f1;
  void *s771c2f2[3];
  virtual void  v23(); // _ZN6S771C23v23Ev
  virtual void  v24(); // _ZN6S771C23v24Ev
  virtual void  v25(); // _ZN6S771C23v25Ev
  virtual void  v26(); // _ZN6S771C23v26Ev
  virtual void  v27(); // _ZN6S771C23v27Ev
  virtual void  v28(); // _ZN6S771C23v28Ev
  virtual void  v29(); // _ZN6S771C23v29Ev
  virtual void  v30(); // _ZN6S771C23v30Ev
  ~S771C2(); // tgen
  S771C2(); // tgen
};
//SIG(-1 S771C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S771C2 ::v23(){vfunc_called(this, "_ZN6S771C23v23Ev");}
void  S771C2 ::v24(){vfunc_called(this, "_ZN6S771C23v24Ev");}
void  S771C2 ::v25(){vfunc_called(this, "_ZN6S771C23v25Ev");}
void  S771C2 ::v26(){vfunc_called(this, "_ZN6S771C23v26Ev");}
void  S771C2 ::v27(){vfunc_called(this, "_ZN6S771C23v27Ev");}
void  S771C2 ::v28(){vfunc_called(this, "_ZN6S771C23v28Ev");}
void  S771C2 ::v29(){vfunc_called(this, "_ZN6S771C23v29Ev");}
void  S771C2 ::v30(){vfunc_called(this, "_ZN6S771C23v30Ev");}
S771C2 ::~S771C2(){ note_dtor("S771C2", this);} // tgen
S771C2 ::S771C2(){ note_ctor("S771C2", this);} // tgen

static void Test_S771C2()
{
  extern Class_Descriptor cd_S771C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S771C2, buf);
    S771C2 *dp, &lv = *(dp=new (buf) S771C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S771C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S771C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S771C4*)(S771C3*), 0, "S771C2");
    check_base_class_offset(lv, (S771C4*)(S771C3*), 0, "S771C2");
    check_base_class_offset(lv, (S771C3*), 0, "S771C2");
    check_field_offset(lv, s771c2f0, ABISELECT(80,44), "S771C2.s771c2f0");
    check_field_offset(lv, s771c2f1, ABISELECT(120,68), "S771C2.s771c2f1");
    check_field_offset(lv, s771c2f2, ABISELECT(128,72), "S771C2.s771c2f2");
    test_class_info(&lv, &cd_S771C2);
    dp->~S771C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS771C2(Test_S771C2, "S771C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S771C2C1Ev();
extern void _ZN6S771C2D1Ev();
Name_Map name_map_S771C2[] = {
  NSPAIR(_ZN6S771C2C1Ev),
  NSPAIR(_ZN6S771C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S771C4;
extern VTBL_ENTRY _ZTI6S771C4[];
extern  VTBL_ENTRY _ZTV6S771C4[];
extern Class_Descriptor cd_S771C3;
extern VTBL_ENTRY _ZTI6S771C3[];
extern  VTBL_ENTRY _ZTV6S771C3[];
static Base_Class bases_S771C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S771C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S771C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S771C2[];
extern void _ZN6S771C2D1Ev();
extern void _ZN6S771C2D0Ev();
extern void _ZN6S771C42v7Ev();
extern void _ZN6S771C42v8Ev();
extern void _ZN6S771C42v9Ev();
extern void _ZN6S771C43v10Ev();
extern void _ZN6S771C43v11Ev();
extern void _ZN6S771C33v12Ev();
extern void _ZN6S771C33v13Ev();
extern void _ZN6S771C33v14Ev();
extern void _ZN6S771C33v15Ev();
extern void _ZN6S771C33v16Ev();
extern void _ZN6S771C33v17Ev();
extern void _ZN6S771C33v18Ev();
extern void _ZN6S771C33v19Ev();
extern void _ZN6S771C33v20Ev();
extern void _ZN6S771C33v21Ev();
extern void _ZN6S771C33v22Ev();
extern void _ZN6S771C23v23Ev();
extern void _ZN6S771C23v24Ev();
extern void _ZN6S771C23v25Ev();
extern void _ZN6S771C23v26Ev();
extern void _ZN6S771C23v27Ev();
extern void _ZN6S771C23v28Ev();
extern void _ZN6S771C23v29Ev();
extern void _ZN6S771C23v30Ev();
static  VTBL_ENTRY vtc_S771C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S771C2[0]),
  (VTBL_ENTRY)&_ZN6S771C2D1Ev,
  (VTBL_ENTRY)&_ZN6S771C2D0Ev,
  (VTBL_ENTRY)&_ZN6S771C42v7Ev,
  (VTBL_ENTRY)&_ZN6S771C42v8Ev,
  (VTBL_ENTRY)&_ZN6S771C42v9Ev,
  (VTBL_ENTRY)&_ZN6S771C43v10Ev,
  (VTBL_ENTRY)&_ZN6S771C43v11Ev,
  (VTBL_ENTRY)&_ZN6S771C33v12Ev,
  (VTBL_ENTRY)&_ZN6S771C33v13Ev,
  (VTBL_ENTRY)&_ZN6S771C33v14Ev,
  (VTBL_ENTRY)&_ZN6S771C33v15Ev,
  (VTBL_ENTRY)&_ZN6S771C33v16Ev,
  (VTBL_ENTRY)&_ZN6S771C33v17Ev,
  (VTBL_ENTRY)&_ZN6S771C33v18Ev,
  (VTBL_ENTRY)&_ZN6S771C33v19Ev,
  (VTBL_ENTRY)&_ZN6S771C33v20Ev,
  (VTBL_ENTRY)&_ZN6S771C33v21Ev,
  (VTBL_ENTRY)&_ZN6S771C33v22Ev,
  (VTBL_ENTRY)&_ZN6S771C23v23Ev,
  (VTBL_ENTRY)&_ZN6S771C23v24Ev,
  (VTBL_ENTRY)&_ZN6S771C23v25Ev,
  (VTBL_ENTRY)&_ZN6S771C23v26Ev,
  (VTBL_ENTRY)&_ZN6S771C23v27Ev,
  (VTBL_ENTRY)&_ZN6S771C23v28Ev,
  (VTBL_ENTRY)&_ZN6S771C23v29Ev,
  (VTBL_ENTRY)&_ZN6S771C23v30Ev,
};
extern VTBL_ENTRY _ZTI6S771C2[];
extern  VTBL_ENTRY _ZTV6S771C2[];
Class_Descriptor cd_S771C2 = {  "S771C2", // class name
  bases_S771C2, 3,
  &(vtc_S771C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S771C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S771C2),28, //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  S771C10  {
  ::S2215C20_nt s771c10f0;
  ::S2215C20_nt s771c10f1;
  ::S2215C20_nt s771c10f2;
  __tsi64 s771c10f3;
};
//SIG(-1 S771C10) C1{ FC2{ m Fp Fi FC3{ m}} FC2 FC2 FL}



static void Test_S771C10()
{
  {
    init_simple_test("S771C10");
    S771C10 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S771C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S771C10)");
    check_field_offset(lv, s771c10f0, 0, "S771C10.s771c10f0");
    check_field_offset(lv, s771c10f1, ABISELECT(16,12), "S771C10.s771c10f1");
    check_field_offset(lv, s771c10f2, ABISELECT(32,24), "S771C10.s771c10f2");
    check_field_offset(lv, s771c10f3, ABISELECT(48,36), "S771C10.s771c10f3");
  }
}
static Arrange_To_Call_Me vS771C10(Test_S771C10, "S771C10", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S771C1  : S771C2 {
  void *s771c1f0[2];
  int s771c1f1;
  ::S771C10 s771c1f2;
  char s771c1f3;
  void *s771c1f4;
  int s771c1f5;
  void *s771c1f6[3];
  __tsi64 s771c1f7;
  void *s771c1f8;
  virtual  ~S771C1(); // _ZN6S771C1D1Ev
  virtual void  v1(); // _ZN6S771C12v1Ev
  virtual void  v2(); // _ZN6S771C12v2Ev
  virtual void  v3(); // _ZN6S771C12v3Ev
  virtual void  v4(); // _ZN6S771C12v4Ev
  virtual void  v5(); // _ZN6S771C12v5Ev
  virtual void  v6(); // _ZN6S771C12v6Ev
  S771C1(); // tgen
};
//SIG(1 S771C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v7 v8 v9 v10 v11} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v23 v24 v25 v26 v27 v28 v29 v30 FC6 FC9{ m Fp} Fp[3]} vd v1 v2 v3 v4 v5 v6 Fp[2] Fi FC10{ FC11{ m Fp Fi FC12{ m}} FC11 FC11 FL} Fc Fp Fi Fp[3] FL Fp}


 S771C1 ::~S771C1(){ note_dtor("S771C1", this);}
void  S771C1 ::v1(){vfunc_called(this, "_ZN6S771C12v1Ev");}
void  S771C1 ::v2(){vfunc_called(this, "_ZN6S771C12v2Ev");}
void  S771C1 ::v3(){vfunc_called(this, "_ZN6S771C12v3Ev");}
void  S771C1 ::v4(){vfunc_called(this, "_ZN6S771C12v4Ev");}
void  S771C1 ::v5(){vfunc_called(this, "_ZN6S771C12v5Ev");}
void  S771C1 ::v6(){vfunc_called(this, "_ZN6S771C12v6Ev");}
S771C1 ::S771C1(){ note_ctor("S771C1", this);} // tgen

static void Test_S771C1()
{
  extern Class_Descriptor cd_S771C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,45)];
    init_test(&cd_S771C1, buf);
    S771C1 *dp, &lv = *(dp=new (buf) S771C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,176), "sizeof(S771C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S771C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S771C4*)(S771C3*)(S771C2*), 0, "S771C1");
    check_base_class_offset(lv, (S771C4*)(S771C3*)(S771C2*), 0, "S771C1");
    check_base_class_offset(lv, (S771C3*)(S771C2*), 0, "S771C1");
    check_base_class_offset(lv, (S771C2*), 0, "S771C1");
    check_field_offset(lv, s771c1f0, ABISELECT(152,84), "S771C1.s771c1f0");
    check_field_offset(lv, s771c1f1, ABISELECT(168,92), "S771C1.s771c1f1");
    check_field_offset(lv, s771c1f2, ABISELECT(176,96), "S771C1.s771c1f2");
    check_field_offset(lv, s771c1f3, ABISELECT(232,140), "S771C1.s771c1f3");
    check_field_offset(lv, s771c1f4, ABISELECT(240,144), "S771C1.s771c1f4");
    check_field_offset(lv, s771c1f5, ABISELECT(248,148), "S771C1.s771c1f5");
    check_field_offset(lv, s771c1f6, ABISELECT(256,152), "S771C1.s771c1f6");
    check_field_offset(lv, s771c1f7, ABISELECT(280,164), "S771C1.s771c1f7");
    check_field_offset(lv, s771c1f8, ABISELECT(288,172), "S771C1.s771c1f8");
    test_class_info(&lv, &cd_S771C1);
    dp->~S771C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS771C1(Test_S771C1, "S771C1", ABISELECT(296,176));

#else // __cplusplus

extern void _ZN6S771C1C1Ev();
extern void _ZN6S771C1D1Ev();
Name_Map name_map_S771C1[] = {
  NSPAIR(_ZN6S771C1C1Ev),
  NSPAIR(_ZN6S771C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S771C4;
extern VTBL_ENTRY _ZTI6S771C4[];
extern  VTBL_ENTRY _ZTV6S771C4[];
extern Class_Descriptor cd_S771C3;
extern VTBL_ENTRY _ZTI6S771C3[];
extern  VTBL_ENTRY _ZTV6S771C3[];
extern Class_Descriptor cd_S771C2;
extern VTBL_ENTRY _ZTI6S771C2[];
extern  VTBL_ENTRY _ZTV6S771C2[];
static Base_Class bases_S771C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S771C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S771C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S771C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S771C1[];
extern void _ZN6S771C1D1Ev();
extern void _ZN6S771C1D0Ev();
extern void _ZN6S771C42v7Ev();
extern void _ZN6S771C42v8Ev();
extern void _ZN6S771C42v9Ev();
extern void _ZN6S771C43v10Ev();
extern void _ZN6S771C43v11Ev();
extern void _ZN6S771C33v12Ev();
extern void _ZN6S771C33v13Ev();
extern void _ZN6S771C33v14Ev();
extern void _ZN6S771C33v15Ev();
extern void _ZN6S771C33v16Ev();
extern void _ZN6S771C33v17Ev();
extern void _ZN6S771C33v18Ev();
extern void _ZN6S771C33v19Ev();
extern void _ZN6S771C33v20Ev();
extern void _ZN6S771C33v21Ev();
extern void _ZN6S771C33v22Ev();
extern void _ZN6S771C23v23Ev();
extern void _ZN6S771C23v24Ev();
extern void _ZN6S771C23v25Ev();
extern void _ZN6S771C23v26Ev();
extern void _ZN6S771C23v27Ev();
extern void _ZN6S771C23v28Ev();
extern void _ZN6S771C23v29Ev();
extern void _ZN6S771C23v30Ev();
extern void _ZN6S771C12v1Ev();
extern void _ZN6S771C12v2Ev();
extern void _ZN6S771C12v3Ev();
extern void _ZN6S771C12v4Ev();
extern void _ZN6S771C12v5Ev();
extern void _ZN6S771C12v6Ev();
static  VTBL_ENTRY vtc_S771C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S771C1[0]),
  (VTBL_ENTRY)&_ZN6S771C1D1Ev,
  (VTBL_ENTRY)&_ZN6S771C1D0Ev,
  (VTBL_ENTRY)&_ZN6S771C42v7Ev,
  (VTBL_ENTRY)&_ZN6S771C42v8Ev,
  (VTBL_ENTRY)&_ZN6S771C42v9Ev,
  (VTBL_ENTRY)&_ZN6S771C43v10Ev,
  (VTBL_ENTRY)&_ZN6S771C43v11Ev,
  (VTBL_ENTRY)&_ZN6S771C33v12Ev,
  (VTBL_ENTRY)&_ZN6S771C33v13Ev,
  (VTBL_ENTRY)&_ZN6S771C33v14Ev,
  (VTBL_ENTRY)&_ZN6S771C33v15Ev,
  (VTBL_ENTRY)&_ZN6S771C33v16Ev,
  (VTBL_ENTRY)&_ZN6S771C33v17Ev,
  (VTBL_ENTRY)&_ZN6S771C33v18Ev,
  (VTBL_ENTRY)&_ZN6S771C33v19Ev,
  (VTBL_ENTRY)&_ZN6S771C33v20Ev,
  (VTBL_ENTRY)&_ZN6S771C33v21Ev,
  (VTBL_ENTRY)&_ZN6S771C33v22Ev,
  (VTBL_ENTRY)&_ZN6S771C23v23Ev,
  (VTBL_ENTRY)&_ZN6S771C23v24Ev,
  (VTBL_ENTRY)&_ZN6S771C23v25Ev,
  (VTBL_ENTRY)&_ZN6S771C23v26Ev,
  (VTBL_ENTRY)&_ZN6S771C23v27Ev,
  (VTBL_ENTRY)&_ZN6S771C23v28Ev,
  (VTBL_ENTRY)&_ZN6S771C23v29Ev,
  (VTBL_ENTRY)&_ZN6S771C23v30Ev,
  (VTBL_ENTRY)&_ZN6S771C12v1Ev,
  (VTBL_ENTRY)&_ZN6S771C12v2Ev,
  (VTBL_ENTRY)&_ZN6S771C12v3Ev,
  (VTBL_ENTRY)&_ZN6S771C12v4Ev,
  (VTBL_ENTRY)&_ZN6S771C12v5Ev,
  (VTBL_ENTRY)&_ZN6S771C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S771C1[];
extern  VTBL_ENTRY _ZTV6S771C1[];
Class_Descriptor cd_S771C1 = {  "S771C1", // class name
  bases_S771C1, 4,
  &(vtc_S771C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,176), // object size
  NSPAIRA(_ZTI6S771C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S771C1),34, //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  S773C4  : S770C5_nt {
  virtual void  v8(); // _ZN6S773C42v8Ev
  virtual void  v9(); // _ZN6S773C42v9Ev
  virtual void  v10(); // _ZN6S773C43v10Ev
  virtual void  v11(); // _ZN6S773C43v11Ev
  virtual void  v12(); // _ZN6S773C43v12Ev
  ~S773C4(); // tgen
  S773C4(); // tgen
};
//SIG(-1 S773C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S773C4 ::v8(){vfunc_called(this, "_ZN6S773C42v8Ev");}
void  S773C4 ::v9(){vfunc_called(this, "_ZN6S773C42v9Ev");}
void  S773C4 ::v10(){vfunc_called(this, "_ZN6S773C43v10Ev");}
void  S773C4 ::v11(){vfunc_called(this, "_ZN6S773C43v11Ev");}
void  S773C4 ::v12(){vfunc_called(this, "_ZN6S773C43v12Ev");}
S773C4 ::~S773C4(){ note_dtor("S773C4", this);} // tgen
S773C4 ::S773C4(){ note_ctor("S773C4", this);} // tgen

static void Test_S773C4()
{
  extern Class_Descriptor cd_S773C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S773C4, buf);
    S773C4 *dp, &lv = *(dp=new (buf) S773C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S773C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S773C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S773C4");
    test_class_info(&lv, &cd_S773C4);
    dp->~S773C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS773C4(Test_S773C4, "S773C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S773C4C1Ev();
extern void _ZN6S773C4D1Ev();
Name_Map name_map_S773C4[] = {
  NSPAIR(_ZN6S773C4C1Ev),
  NSPAIR(_ZN6S773C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S773C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S773C4[];
extern void _ZN6S773C4D1Ev();
extern void _ZN6S773C4D0Ev();
extern void _ZN6S773C42v8Ev();
extern void _ZN6S773C42v9Ev();
extern void _ZN6S773C43v10Ev();
extern void _ZN6S773C43v11Ev();
extern void _ZN6S773C43v12Ev();
static  VTBL_ENTRY vtc_S773C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S773C4[0]),
  (VTBL_ENTRY)&_ZN6S773C4D1Ev,
  (VTBL_ENTRY)&_ZN6S773C4D0Ev,
  (VTBL_ENTRY)&_ZN6S773C42v8Ev,
  (VTBL_ENTRY)&_ZN6S773C42v9Ev,
  (VTBL_ENTRY)&_ZN6S773C43v10Ev,
  (VTBL_ENTRY)&_ZN6S773C43v11Ev,
  (VTBL_ENTRY)&_ZN6S773C43v12Ev,
};
extern VTBL_ENTRY _ZTI6S773C4[];
extern  VTBL_ENTRY _ZTV6S773C4[];
Class_Descriptor cd_S773C4 = {  "S773C4", // class name
  bases_S773C4, 1,
  &(vtc_S773C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S773C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S773C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S773C3  : S773C4 {
  void *s773c3f0[3];
  ::S770C6_nt s773c3f1;
  virtual void  v13(); // _ZN6S773C33v13Ev
  virtual void  v14(); // _ZN6S773C33v14Ev
  virtual void  v15(); // _ZN6S773C33v15Ev
  virtual void  v16(); // _ZN6S773C33v16Ev
  virtual void  v17(); // _ZN6S773C33v17Ev
  virtual void  v18(); // _ZN6S773C33v18Ev
  virtual void  v19(); // _ZN6S773C33v19Ev
  virtual void  v20(); // _ZN6S773C33v20Ev
  virtual void  v21(); // _ZN6S773C33v21Ev
  virtual void  v22(); // _ZN6S773C33v22Ev
  virtual void  v23(); // _ZN6S773C33v23Ev
  ~S773C3(); // tgen
  S773C3(); // tgen
};
//SIG(-1 S773C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S773C3 ::v13(){vfunc_called(this, "_ZN6S773C33v13Ev");}
void  S773C3 ::v14(){vfunc_called(this, "_ZN6S773C33v14Ev");}
void  S773C3 ::v15(){vfunc_called(this, "_ZN6S773C33v15Ev");}
void  S773C3 ::v16(){vfunc_called(this, "_ZN6S773C33v16Ev");}
void  S773C3 ::v17(){vfunc_called(this, "_ZN6S773C33v17Ev");}
void  S773C3 ::v18(){vfunc_called(this, "_ZN6S773C33v18Ev");}
void  S773C3 ::v19(){vfunc_called(this, "_ZN6S773C33v19Ev");}
void  S773C3 ::v20(){vfunc_called(this, "_ZN6S773C33v20Ev");}
void  S773C3 ::v21(){vfunc_called(this, "_ZN6S773C33v21Ev");}
void  S773C3 ::v22(){vfunc_called(this, "_ZN6S773C33v22Ev");}
void  S773C3 ::v23(){vfunc_called(this, "_ZN6S773C33v23Ev");}
S773C3 ::~S773C3(){ note_dtor("S773C3", this);} // tgen
S773C3 ::S773C3(){ note_ctor("S773C3", this);} // tgen

static void Test_S773C3()
{
  extern Class_Descriptor cd_S773C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S773C3, buf);
    S773C3 *dp, &lv = *(dp=new (buf) S773C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S773C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S773C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S773C4*), 0, "S773C3");
    check_base_class_offset(lv, (S773C4*), 0, "S773C3");
    check_field_offset(lv, s773c3f0, ABISELECT(16,8), "S773C3.s773c3f0");
    check_field_offset(lv, s773c3f1, ABISELECT(40,20), "S773C3.s773c3f1");
    test_class_info(&lv, &cd_S773C3);
    dp->~S773C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS773C3(Test_S773C3, "S773C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S773C3C1Ev();
extern void _ZN6S773C3D1Ev();
Name_Map name_map_S773C3[] = {
  NSPAIR(_ZN6S773C3C1Ev),
  NSPAIR(_ZN6S773C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S773C4;
extern VTBL_ENTRY _ZTI6S773C4[];
extern  VTBL_ENTRY _ZTV6S773C4[];
static Base_Class bases_S773C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S773C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S773C3[];
extern void _ZN6S773C3D1Ev();
extern void _ZN6S773C3D0Ev();
extern void _ZN6S773C42v8Ev();
extern void _ZN6S773C42v9Ev();
extern void _ZN6S773C43v10Ev();
extern void _ZN6S773C43v11Ev();
extern void _ZN6S773C43v12Ev();
extern void _ZN6S773C33v13Ev();
extern void _ZN6S773C33v14Ev();
extern void _ZN6S773C33v15Ev();
extern void _ZN6S773C33v16Ev();
extern void _ZN6S773C33v17Ev();
extern void _ZN6S773C33v18Ev();
extern void _ZN6S773C33v19Ev();
extern void _ZN6S773C33v20Ev();
extern void _ZN6S773C33v21Ev();
extern void _ZN6S773C33v22Ev();
extern void _ZN6S773C33v23Ev();
static  VTBL_ENTRY vtc_S773C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S773C3[0]),
  (VTBL_ENTRY)&_ZN6S773C3D1Ev,
  (VTBL_ENTRY)&_ZN6S773C3D0Ev,
  (VTBL_ENTRY)&_ZN6S773C42v8Ev,
  (VTBL_ENTRY)&_ZN6S773C42v9Ev,
  (VTBL_ENTRY)&_ZN6S773C43v10Ev,
  (VTBL_ENTRY)&_ZN6S773C43v11Ev,
  (VTBL_ENTRY)&_ZN6S773C43v12Ev,
  (VTBL_ENTRY)&_ZN6S773C33v13Ev,
  (VTBL_ENTRY)&_ZN6S773C33v14Ev,
  (VTBL_ENTRY)&_ZN6S773C33v15Ev,
  (VTBL_ENTRY)&_ZN6S773C33v16Ev,
  (VTBL_ENTRY)&_ZN6S773C33v17Ev,
  (VTBL_ENTRY)&_ZN6S773C33v18Ev,
  (VTBL_ENTRY)&_ZN6S773C33v19Ev,
  (VTBL_ENTRY)&_ZN6S773C33v20Ev,
  (VTBL_ENTRY)&_ZN6S773C33v21Ev,
  (VTBL_ENTRY)&_ZN6S773C33v22Ev,
  (VTBL_ENTRY)&_ZN6S773C33v23Ev,
};
extern VTBL_ENTRY _ZTI6S773C3[];
extern  VTBL_ENTRY _ZTV6S773C3[];
Class_Descriptor cd_S773C3 = {  "S773C3", // class name
  bases_S773C3, 2,
  &(vtc_S773C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S773C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S773C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S773C2  : S773C3 {
  ::S770C6_nt s773c2f0;
  ::S770C9_nt s773c2f1;
  void *s773c2f2[3];
  virtual void  v24(); // _ZN6S773C23v24Ev
  virtual void  v25(); // _ZN6S773C23v25Ev
  virtual void  v26(); // _ZN6S773C23v26Ev
  virtual void  v27(); // _ZN6S773C23v27Ev
  virtual void  v28(); // _ZN6S773C23v28Ev
  virtual void  v29(); // _ZN6S773C23v29Ev
  virtual void  v30(); // _ZN6S773C23v30Ev
  virtual void  v31(); // _ZN6S773C23v31Ev
  ~S773C2(); // tgen
  S773C2(); // tgen
};
//SIG(-1 S773C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S773C2 ::v24(){vfunc_called(this, "_ZN6S773C23v24Ev");}
void  S773C2 ::v25(){vfunc_called(this, "_ZN6S773C23v25Ev");}
void  S773C2 ::v26(){vfunc_called(this, "_ZN6S773C23v26Ev");}
void  S773C2 ::v27(){vfunc_called(this, "_ZN6S773C23v27Ev");}
void  S773C2 ::v28(){vfunc_called(this, "_ZN6S773C23v28Ev");}
void  S773C2 ::v29(){vfunc_called(this, "_ZN6S773C23v29Ev");}
void  S773C2 ::v30(){vfunc_called(this, "_ZN6S773C23v30Ev");}
void  S773C2 ::v31(){vfunc_called(this, "_ZN6S773C23v31Ev");}
S773C2 ::~S773C2(){ note_dtor("S773C2", this);} // tgen
S773C2 ::S773C2(){ note_ctor("S773C2", this);} // tgen

static void Test_S773C2()
{
  extern Class_Descriptor cd_S773C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S773C2, buf);
    S773C2 *dp, &lv = *(dp=new (buf) S773C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S773C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S773C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S773C4*)(S773C3*), 0, "S773C2");
    check_base_class_offset(lv, (S773C4*)(S773C3*), 0, "S773C2");
    check_base_class_offset(lv, (S773C3*), 0, "S773C2");
    check_field_offset(lv, s773c2f0, ABISELECT(80,44), "S773C2.s773c2f0");
    check_field_offset(lv, s773c2f1, ABISELECT(120,68), "S773C2.s773c2f1");
    check_field_offset(lv, s773c2f2, ABISELECT(128,72), "S773C2.s773c2f2");
    test_class_info(&lv, &cd_S773C2);
    dp->~S773C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS773C2(Test_S773C2, "S773C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S773C2C1Ev();
extern void _ZN6S773C2D1Ev();
Name_Map name_map_S773C2[] = {
  NSPAIR(_ZN6S773C2C1Ev),
  NSPAIR(_ZN6S773C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S773C4;
extern VTBL_ENTRY _ZTI6S773C4[];
extern  VTBL_ENTRY _ZTV6S773C4[];
extern Class_Descriptor cd_S773C3;
extern VTBL_ENTRY _ZTI6S773C3[];
extern  VTBL_ENTRY _ZTV6S773C3[];
static Base_Class bases_S773C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S773C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S773C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S773C2[];
extern void _ZN6S773C2D1Ev();
extern void _ZN6S773C2D0Ev();
extern void _ZN6S773C42v8Ev();
extern void _ZN6S773C42v9Ev();
extern void _ZN6S773C43v10Ev();
extern void _ZN6S773C43v11Ev();
extern void _ZN6S773C43v12Ev();
extern void _ZN6S773C33v13Ev();
extern void _ZN6S773C33v14Ev();
extern void _ZN6S773C33v15Ev();
extern void _ZN6S773C33v16Ev();
extern void _ZN6S773C33v17Ev();
extern void _ZN6S773C33v18Ev();
extern void _ZN6S773C33v19Ev();
extern void _ZN6S773C33v20Ev();
extern void _ZN6S773C33v21Ev();
extern void _ZN6S773C33v22Ev();
extern void _ZN6S773C33v23Ev();
extern void _ZN6S773C23v24Ev();
extern void _ZN6S773C23v25Ev();
extern void _ZN6S773C23v26Ev();
extern void _ZN6S773C23v27Ev();
extern void _ZN6S773C23v28Ev();
extern void _ZN6S773C23v29Ev();
extern void _ZN6S773C23v30Ev();
extern void _ZN6S773C23v31Ev();
static  VTBL_ENTRY vtc_S773C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S773C2[0]),
  (VTBL_ENTRY)&_ZN6S773C2D1Ev,
  (VTBL_ENTRY)&_ZN6S773C2D0Ev,
  (VTBL_ENTRY)&_ZN6S773C42v8Ev,
  (VTBL_ENTRY)&_ZN6S773C42v9Ev,
  (VTBL_ENTRY)&_ZN6S773C43v10Ev,
  (VTBL_ENTRY)&_ZN6S773C43v11Ev,
  (VTBL_ENTRY)&_ZN6S773C43v12Ev,
  (VTBL_ENTRY)&_ZN6S773C33v13Ev,
  (VTBL_ENTRY)&_ZN6S773C33v14Ev,
  (VTBL_ENTRY)&_ZN6S773C33v15Ev,
  (VTBL_ENTRY)&_ZN6S773C33v16Ev,
  (VTBL_ENTRY)&_ZN6S773C33v17Ev,
  (VTBL_ENTRY)&_ZN6S773C33v18Ev,
  (VTBL_ENTRY)&_ZN6S773C33v19Ev,
  (VTBL_ENTRY)&_ZN6S773C33v20Ev,
  (VTBL_ENTRY)&_ZN6S773C33v21Ev,
  (VTBL_ENTRY)&_ZN6S773C33v22Ev,
  (VTBL_ENTRY)&_ZN6S773C33v23Ev,
  (VTBL_ENTRY)&_ZN6S773C23v24Ev,
  (VTBL_ENTRY)&_ZN6S773C23v25Ev,
  (VTBL_ENTRY)&_ZN6S773C23v26Ev,
  (VTBL_ENTRY)&_ZN6S773C23v27Ev,
  (VTBL_ENTRY)&_ZN6S773C23v28Ev,
  (VTBL_ENTRY)&_ZN6S773C23v29Ev,
  (VTBL_ENTRY)&_ZN6S773C23v30Ev,
  (VTBL_ENTRY)&_ZN6S773C23v31Ev,
};
extern VTBL_ENTRY _ZTI6S773C2[];
extern  VTBL_ENTRY _ZTV6S773C2[];
Class_Descriptor cd_S773C2 = {  "S773C2", // class name
  bases_S773C2, 3,
  &(vtc_S773C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S773C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S773C2),28, //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  S773C1  : S773C2 {
  int s773c1f0;
  ::S303C11_nt s773c1f1;
  void *s773c1f2[4];
  ::S281C37_nt s773c1f3;
  ::S2215C20_nt s773c1f4;
  int s773c1f5;
  virtual void  v1(); // _ZN6S773C12v1Ev
  virtual void  v2(); // _ZN6S773C12v2Ev
  virtual void  v3(); // _ZN6S773C12v3Ev
  virtual void  v4(); // _ZN6S773C12v4Ev
  virtual void  v5(); // _ZN6S773C12v5Ev
  virtual void  v6(); // _ZN6S773C12v6Ev
  virtual void  v7(); // _ZN6S773C12v7Ev
  ~S773C1(); // tgen
  S773C1(); // tgen
};
//SIG(1 S773C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v8 v9 v10 v11 v12} v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v24 v25 v26 v27 v28 v29 v30 v31 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 v7 Fi FC10{ m FC11{ m FL}} Fp[4] FC12{ m Fp[2]} FC13{ m Fp Fi FC14{ m}} Fi}


void  S773C1 ::v1(){vfunc_called(this, "_ZN6S773C12v1Ev");}
void  S773C1 ::v2(){vfunc_called(this, "_ZN6S773C12v2Ev");}
void  S773C1 ::v3(){vfunc_called(this, "_ZN6S773C12v3Ev");}
void  S773C1 ::v4(){vfunc_called(this, "_ZN6S773C12v4Ev");}
void  S773C1 ::v5(){vfunc_called(this, "_ZN6S773C12v5Ev");}
void  S773C1 ::v6(){vfunc_called(this, "_ZN6S773C12v6Ev");}
void  S773C1 ::v7(){vfunc_called(this, "_ZN6S773C12v7Ev");}
S773C1 ::~S773C1(){ note_dtor("S773C1", this);} // tgen
S773C1 ::S773C1(){ note_ctor("S773C1", this);} // tgen

static void Test_S773C1()
{
  extern Class_Descriptor cd_S773C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,35)];
    init_test(&cd_S773C1, buf);
    S773C1 *dp, &lv = *(dp=new (buf) S773C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,136), "sizeof(S773C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S773C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S773C4*)(S773C3*)(S773C2*), 0, "S773C1");
    check_base_class_offset(lv, (S773C4*)(S773C3*)(S773C2*), 0, "S773C1");
    check_base_class_offset(lv, (S773C3*)(S773C2*), 0, "S773C1");
    check_base_class_offset(lv, (S773C2*), 0, "S773C1");
    check_field_offset(lv, s773c1f0, ABISELECT(152,84), "S773C1.s773c1f0");
    check_field_offset(lv, s773c1f1, ABISELECT(160,88), "S773C1.s773c1f1");
    check_field_offset(lv, s773c1f2, ABISELECT(168,96), "S773C1.s773c1f2");
    check_field_offset(lv, s773c1f3, ABISELECT(200,112), "S773C1.s773c1f3");
    check_field_offset(lv, s773c1f4, ABISELECT(216,120), "S773C1.s773c1f4");
    check_field_offset(lv, s773c1f5, ABISELECT(232,132), "S773C1.s773c1f5");
    test_class_info(&lv, &cd_S773C1);
    dp->~S773C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS773C1(Test_S773C1, "S773C1", ABISELECT(240,136));

#else // __cplusplus

extern void _ZN6S773C1C1Ev();
extern void _ZN6S773C1D1Ev();
Name_Map name_map_S773C1[] = {
  NSPAIR(_ZN6S773C1C1Ev),
  NSPAIR(_ZN6S773C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S773C4;
extern VTBL_ENTRY _ZTI6S773C4[];
extern  VTBL_ENTRY _ZTV6S773C4[];
extern Class_Descriptor cd_S773C3;
extern VTBL_ENTRY _ZTI6S773C3[];
extern  VTBL_ENTRY _ZTV6S773C3[];
extern Class_Descriptor cd_S773C2;
extern VTBL_ENTRY _ZTI6S773C2[];
extern  VTBL_ENTRY _ZTV6S773C2[];
static Base_Class bases_S773C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S773C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S773C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S773C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S773C1[];
extern void _ZN6S773C1D1Ev();
extern void _ZN6S773C1D0Ev();
extern void _ZN6S773C42v8Ev();
extern void _ZN6S773C42v9Ev();
extern void _ZN6S773C43v10Ev();
extern void _ZN6S773C43v11Ev();
extern void _ZN6S773C43v12Ev();
extern void _ZN6S773C33v13Ev();
extern void _ZN6S773C33v14Ev();
extern void _ZN6S773C33v15Ev();
extern void _ZN6S773C33v16Ev();
extern void _ZN6S773C33v17Ev();
extern void _ZN6S773C33v18Ev();
extern void _ZN6S773C33v19Ev();
extern void _ZN6S773C33v20Ev();
extern void _ZN6S773C33v21Ev();
extern void _ZN6S773C33v22Ev();
extern void _ZN6S773C33v23Ev();
extern void _ZN6S773C23v24Ev();
extern void _ZN6S773C23v25Ev();
extern void _ZN6S773C23v26Ev();
extern void _ZN6S773C23v27Ev();
extern void _ZN6S773C23v28Ev();
extern void _ZN6S773C23v29Ev();
extern void _ZN6S773C23v30Ev();
extern void _ZN6S773C23v31Ev();
extern void _ZN6S773C12v1Ev();
extern void _ZN6S773C12v2Ev();
extern void _ZN6S773C12v3Ev();
extern void _ZN6S773C12v4Ev();
extern void _ZN6S773C12v5Ev();
extern void _ZN6S773C12v6Ev();
extern void _ZN6S773C12v7Ev();
static  VTBL_ENTRY vtc_S773C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S773C1[0]),
  (VTBL_ENTRY)&_ZN6S773C1D1Ev,
  (VTBL_ENTRY)&_ZN6S773C1D0Ev,
  (VTBL_ENTRY)&_ZN6S773C42v8Ev,
  (VTBL_ENTRY)&_ZN6S773C42v9Ev,
  (VTBL_ENTRY)&_ZN6S773C43v10Ev,
  (VTBL_ENTRY)&_ZN6S773C43v11Ev,
  (VTBL_ENTRY)&_ZN6S773C43v12Ev,
  (VTBL_ENTRY)&_ZN6S773C33v13Ev,
  (VTBL_ENTRY)&_ZN6S773C33v14Ev,
  (VTBL_ENTRY)&_ZN6S773C33v15Ev,
  (VTBL_ENTRY)&_ZN6S773C33v16Ev,
  (VTBL_ENTRY)&_ZN6S773C33v17Ev,
  (VTBL_ENTRY)&_ZN6S773C33v18Ev,
  (VTBL_ENTRY)&_ZN6S773C33v19Ev,
  (VTBL_ENTRY)&_ZN6S773C33v20Ev,
  (VTBL_ENTRY)&_ZN6S773C33v21Ev,
  (VTBL_ENTRY)&_ZN6S773C33v22Ev,
  (VTBL_ENTRY)&_ZN6S773C33v23Ev,
  (VTBL_ENTRY)&_ZN6S773C23v24Ev,
  (VTBL_ENTRY)&_ZN6S773C23v25Ev,
  (VTBL_ENTRY)&_ZN6S773C23v26Ev,
  (VTBL_ENTRY)&_ZN6S773C23v27Ev,
  (VTBL_ENTRY)&_ZN6S773C23v28Ev,
  (VTBL_ENTRY)&_ZN6S773C23v29Ev,
  (VTBL_ENTRY)&_ZN6S773C23v30Ev,
  (VTBL_ENTRY)&_ZN6S773C23v31Ev,
  (VTBL_ENTRY)&_ZN6S773C12v1Ev,
  (VTBL_ENTRY)&_ZN6S773C12v2Ev,
  (VTBL_ENTRY)&_ZN6S773C12v3Ev,
  (VTBL_ENTRY)&_ZN6S773C12v4Ev,
  (VTBL_ENTRY)&_ZN6S773C12v5Ev,
  (VTBL_ENTRY)&_ZN6S773C12v6Ev,
  (VTBL_ENTRY)&_ZN6S773C12v7Ev,
};
extern VTBL_ENTRY _ZTI6S773C1[];
extern  VTBL_ENTRY _ZTV6S773C1[];
Class_Descriptor cd_S773C1 = {  "S773C1", // class name
  bases_S773C1, 4,
  &(vtc_S773C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,136), // object size
  NSPAIRA(_ZTI6S773C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S773C1),35, //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  S309C5  : S770C5_nt {
  virtual void  v2(); // _ZN6S309C52v2Ev
  virtual void  v3(); // _ZN6S309C52v3Ev
  virtual void  v4(); // _ZN6S309C52v4Ev
  virtual void  v5(); // _ZN6S309C52v5Ev
  virtual void  v6(); // _ZN6S309C52v6Ev
  ~S309C5(); // tgen
  S309C5(); // tgen
};
//SIG(-1 S309C5) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S309C5 ::v2(){vfunc_called(this, "_ZN6S309C52v2Ev");}
void  S309C5 ::v3(){vfunc_called(this, "_ZN6S309C52v3Ev");}
void  S309C5 ::v4(){vfunc_called(this, "_ZN6S309C52v4Ev");}
void  S309C5 ::v5(){vfunc_called(this, "_ZN6S309C52v5Ev");}
void  S309C5 ::v6(){vfunc_called(this, "_ZN6S309C52v6Ev");}
S309C5 ::~S309C5(){ note_dtor("S309C5", this);} // tgen
S309C5 ::S309C5(){ note_ctor("S309C5", this);} // tgen

static void Test_S309C5()
{
  extern Class_Descriptor cd_S309C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S309C5, buf);
    S309C5 *dp, &lv = *(dp=new (buf) S309C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S309C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S309C5)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S309C5");
    test_class_info(&lv, &cd_S309C5);
    dp->~S309C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS309C5(Test_S309C5, "S309C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S309C5C1Ev();
extern void _ZN6S309C5D1Ev();
Name_Map name_map_S309C5[] = {
  NSPAIR(_ZN6S309C5C1Ev),
  NSPAIR(_ZN6S309C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S309C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S309C5[];
extern void _ZN6S309C5D1Ev();
extern void _ZN6S309C5D0Ev();
extern void _ZN6S309C52v2Ev();
extern void _ZN6S309C52v3Ev();
extern void _ZN6S309C52v4Ev();
extern void _ZN6S309C52v5Ev();
extern void _ZN6S309C52v6Ev();
static  VTBL_ENTRY vtc_S309C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S309C5[0]),
  (VTBL_ENTRY)&_ZN6S309C5D1Ev,
  (VTBL_ENTRY)&_ZN6S309C5D0Ev,
  (VTBL_ENTRY)&_ZN6S309C52v2Ev,
  (VTBL_ENTRY)&_ZN6S309C52v3Ev,
  (VTBL_ENTRY)&_ZN6S309C52v4Ev,
  (VTBL_ENTRY)&_ZN6S309C52v5Ev,
  (VTBL_ENTRY)&_ZN6S309C52v6Ev,
};
extern VTBL_ENTRY _ZTI6S309C5[];
extern  VTBL_ENTRY _ZTV6S309C5[];
Class_Descriptor cd_S309C5 = {  "S309C5", // class name
  bases_S309C5, 1,
  &(vtc_S309C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S309C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S309C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S309C4  : S309C5 {
  void *s309c4f0[3];
  ::S770C6_nt s309c4f1;
  virtual void  v7(); // _ZN6S309C42v7Ev
  virtual void  v8(); // _ZN6S309C42v8Ev
  virtual void  v9(); // _ZN6S309C42v9Ev
  virtual void  v10(); // _ZN6S309C43v10Ev
  virtual void  v11(); // _ZN6S309C43v11Ev
  virtual void  v12(); // _ZN6S309C43v12Ev
  virtual void  v13(); // _ZN6S309C43v13Ev
  virtual void  v14(); // _ZN6S309C43v14Ev
  virtual void  v15(); // _ZN6S309C43v15Ev
  virtual void  v16(); // _ZN6S309C43v16Ev
  virtual void  v17(); // _ZN6S309C43v17Ev
  ~S309C4(); // tgen
  S309C4(); // tgen
};
//SIG(-1 S309C4) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S309C4 ::v7(){vfunc_called(this, "_ZN6S309C42v7Ev");}
void  S309C4 ::v8(){vfunc_called(this, "_ZN6S309C42v8Ev");}
void  S309C4 ::v9(){vfunc_called(this, "_ZN6S309C42v9Ev");}
void  S309C4 ::v10(){vfunc_called(this, "_ZN6S309C43v10Ev");}
void  S309C4 ::v11(){vfunc_called(this, "_ZN6S309C43v11Ev");}
void  S309C4 ::v12(){vfunc_called(this, "_ZN6S309C43v12Ev");}
void  S309C4 ::v13(){vfunc_called(this, "_ZN6S309C43v13Ev");}
void  S309C4 ::v14(){vfunc_called(this, "_ZN6S309C43v14Ev");}
void  S309C4 ::v15(){vfunc_called(this, "_ZN6S309C43v15Ev");}
void  S309C4 ::v16(){vfunc_called(this, "_ZN6S309C43v16Ev");}
void  S309C4 ::v17(){vfunc_called(this, "_ZN6S309C43v17Ev");}
S309C4 ::~S309C4(){ note_dtor("S309C4", this);} // tgen
S309C4 ::S309C4(){ note_ctor("S309C4", this);} // tgen

static void Test_S309C4()
{
  extern Class_Descriptor cd_S309C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S309C4, buf);
    S309C4 *dp, &lv = *(dp=new (buf) S309C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S309C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S309C4)");
    check_base_class_offset(lv, (S770C5_nt*)(S309C5*), 0, "S309C4");
    check_base_class_offset(lv, (S309C5*), 0, "S309C4");
    check_field_offset(lv, s309c4f0, ABISELECT(16,8), "S309C4.s309c4f0");
    check_field_offset(lv, s309c4f1, ABISELECT(40,20), "S309C4.s309c4f1");
    test_class_info(&lv, &cd_S309C4);
    dp->~S309C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS309C4(Test_S309C4, "S309C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S309C4C1Ev();
extern void _ZN6S309C4D1Ev();
Name_Map name_map_S309C4[] = {
  NSPAIR(_ZN6S309C4C1Ev),
  NSPAIR(_ZN6S309C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S309C5;
extern VTBL_ENTRY _ZTI6S309C5[];
extern  VTBL_ENTRY _ZTV6S309C5[];
static Base_Class bases_S309C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S309C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S309C4[];
extern void _ZN6S309C4D1Ev();
extern void _ZN6S309C4D0Ev();
extern void _ZN6S309C52v2Ev();
extern void _ZN6S309C52v3Ev();
extern void _ZN6S309C52v4Ev();
extern void _ZN6S309C52v5Ev();
extern void _ZN6S309C52v6Ev();
extern void _ZN6S309C42v7Ev();
extern void _ZN6S309C42v8Ev();
extern void _ZN6S309C42v9Ev();
extern void _ZN6S309C43v10Ev();
extern void _ZN6S309C43v11Ev();
extern void _ZN6S309C43v12Ev();
extern void _ZN6S309C43v13Ev();
extern void _ZN6S309C43v14Ev();
extern void _ZN6S309C43v15Ev();
extern void _ZN6S309C43v16Ev();
extern void _ZN6S309C43v17Ev();
static  VTBL_ENTRY vtc_S309C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S309C4[0]),
  (VTBL_ENTRY)&_ZN6S309C4D1Ev,
  (VTBL_ENTRY)&_ZN6S309C4D0Ev,
  (VTBL_ENTRY)&_ZN6S309C52v2Ev,
  (VTBL_ENTRY)&_ZN6S309C52v3Ev,
  (VTBL_ENTRY)&_ZN6S309C52v4Ev,
  (VTBL_ENTRY)&_ZN6S309C52v5Ev,
  (VTBL_ENTRY)&_ZN6S309C52v6Ev,
  (VTBL_ENTRY)&_ZN6S309C42v7Ev,
  (VTBL_ENTRY)&_ZN6S309C42v8Ev,
  (VTBL_ENTRY)&_ZN6S309C42v9Ev,
  (VTBL_ENTRY)&_ZN6S309C43v10Ev,
  (VTBL_ENTRY)&_ZN6S309C43v11Ev,
  (VTBL_ENTRY)&_ZN6S309C43v12Ev,
  (VTBL_ENTRY)&_ZN6S309C43v13Ev,
  (VTBL_ENTRY)&_ZN6S309C43v14Ev,
  (VTBL_ENTRY)&_ZN6S309C43v15Ev,
  (VTBL_ENTRY)&_ZN6S309C43v16Ev,
  (VTBL_ENTRY)&_ZN6S309C43v17Ev,
};
extern VTBL_ENTRY _ZTI6S309C4[];
extern  VTBL_ENTRY _ZTV6S309C4[];
Class_Descriptor cd_S309C4 = {  "S309C4", // class name
  bases_S309C4, 2,
  &(vtc_S309C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S309C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S309C4),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S309C3  : S309C4 {
  ::S770C6_nt s309c3f0;
  ::S770C9_nt s309c3f1;
  void *s309c3f2[3];
  virtual void  v18(); // _ZN6S309C33v18Ev
  virtual void  v19(); // _ZN6S309C33v19Ev
  virtual void  v20(); // _ZN6S309C33v20Ev
  virtual void  v21(); // _ZN6S309C33v21Ev
  virtual void  v22(); // _ZN6S309C33v22Ev
  virtual void  v23(); // _ZN6S309C33v23Ev
  virtual void  v24(); // _ZN6S309C33v24Ev
  virtual void  v25(); // _ZN6S309C33v25Ev
  ~S309C3(); // tgen
  S309C3(); // tgen
};
//SIG(-1 S309C3) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S309C3 ::v18(){vfunc_called(this, "_ZN6S309C33v18Ev");}
void  S309C3 ::v19(){vfunc_called(this, "_ZN6S309C33v19Ev");}
void  S309C3 ::v20(){vfunc_called(this, "_ZN6S309C33v20Ev");}
void  S309C3 ::v21(){vfunc_called(this, "_ZN6S309C33v21Ev");}
void  S309C3 ::v22(){vfunc_called(this, "_ZN6S309C33v22Ev");}
void  S309C3 ::v23(){vfunc_called(this, "_ZN6S309C33v23Ev");}
void  S309C3 ::v24(){vfunc_called(this, "_ZN6S309C33v24Ev");}
void  S309C3 ::v25(){vfunc_called(this, "_ZN6S309C33v25Ev");}
S309C3 ::~S309C3(){ note_dtor("S309C3", this);} // tgen
S309C3 ::S309C3(){ note_ctor("S309C3", this);} // tgen

static void Test_S309C3()
{
  extern Class_Descriptor cd_S309C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S309C3, buf);
    S309C3 *dp, &lv = *(dp=new (buf) S309C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S309C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S309C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S309C5*)(S309C4*), 0, "S309C3");
    check_base_class_offset(lv, (S309C5*)(S309C4*), 0, "S309C3");
    check_base_class_offset(lv, (S309C4*), 0, "S309C3");
    check_field_offset(lv, s309c3f0, ABISELECT(80,44), "S309C3.s309c3f0");
    check_field_offset(lv, s309c3f1, ABISELECT(120,68), "S309C3.s309c3f1");
    check_field_offset(lv, s309c3f2, ABISELECT(128,72), "S309C3.s309c3f2");
    test_class_info(&lv, &cd_S309C3);
    dp->~S309C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS309C3(Test_S309C3, "S309C3", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S309C3C1Ev();
extern void _ZN6S309C3D1Ev();
Name_Map name_map_S309C3[] = {
  NSPAIR(_ZN6S309C3C1Ev),
  NSPAIR(_ZN6S309C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S309C5;
extern VTBL_ENTRY _ZTI6S309C5[];
extern  VTBL_ENTRY _ZTV6S309C5[];
extern Class_Descriptor cd_S309C4;
extern VTBL_ENTRY _ZTI6S309C4[];
extern  VTBL_ENTRY _ZTV6S309C4[];
static Base_Class bases_S309C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S309C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S309C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S309C3[];
extern void _ZN6S309C3D1Ev();
extern void _ZN6S309C3D0Ev();
extern void _ZN6S309C52v2Ev();
extern void _ZN6S309C52v3Ev();
extern void _ZN6S309C52v4Ev();
extern void _ZN6S309C52v5Ev();
extern void _ZN6S309C52v6Ev();
extern void _ZN6S309C42v7Ev();
extern void _ZN6S309C42v8Ev();
extern void _ZN6S309C42v9Ev();
extern void _ZN6S309C43v10Ev();
extern void _ZN6S309C43v11Ev();
extern void _ZN6S309C43v12Ev();
extern void _ZN6S309C43v13Ev();
extern void _ZN6S309C43v14Ev();
extern void _ZN6S309C43v15Ev();
extern void _ZN6S309C43v16Ev();
extern void _ZN6S309C43v17Ev();
extern void _ZN6S309C33v18Ev();
extern void _ZN6S309C33v19Ev();
extern void _ZN6S309C33v20Ev();
extern void _ZN6S309C33v21Ev();
extern void _ZN6S309C33v22Ev();
extern void _ZN6S309C33v23Ev();
extern void _ZN6S309C33v24Ev();
extern void _ZN6S309C33v25Ev();
static  VTBL_ENTRY vtc_S309C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S309C3[0]),
  (VTBL_ENTRY)&_ZN6S309C3D1Ev,
  (VTBL_ENTRY)&_ZN6S309C3D0Ev,
  (VTBL_ENTRY)&_ZN6S309C52v2Ev,
  (VTBL_ENTRY)&_ZN6S309C52v3Ev,
  (VTBL_ENTRY)&_ZN6S309C52v4Ev,
  (VTBL_ENTRY)&_ZN6S309C52v5Ev,
  (VTBL_ENTRY)&_ZN6S309C52v6Ev,
  (VTBL_ENTRY)&_ZN6S309C42v7Ev,
  (VTBL_ENTRY)&_ZN6S309C42v8Ev,
  (VTBL_ENTRY)&_ZN6S309C42v9Ev,
  (VTBL_ENTRY)&_ZN6S309C43v10Ev,
  (VTBL_ENTRY)&_ZN6S309C43v11Ev,
  (VTBL_ENTRY)&_ZN6S309C43v12Ev,
  (VTBL_ENTRY)&_ZN6S309C43v13Ev,
  (VTBL_ENTRY)&_ZN6S309C43v14Ev,
  (VTBL_ENTRY)&_ZN6S309C43v15Ev,
  (VTBL_ENTRY)&_ZN6S309C43v16Ev,
  (VTBL_ENTRY)&_ZN6S309C43v17Ev,
  (VTBL_ENTRY)&_ZN6S309C33v18Ev,
  (VTBL_ENTRY)&_ZN6S309C33v19Ev,
  (VTBL_ENTRY)&_ZN6S309C33v20Ev,
  (VTBL_ENTRY)&_ZN6S309C33v21Ev,
  (VTBL_ENTRY)&_ZN6S309C33v22Ev,
  (VTBL_ENTRY)&_ZN6S309C33v23Ev,
  (VTBL_ENTRY)&_ZN6S309C33v24Ev,
  (VTBL_ENTRY)&_ZN6S309C33v25Ev,
};
extern VTBL_ENTRY _ZTI6S309C3[];
extern  VTBL_ENTRY _ZTV6S309C3[];
Class_Descriptor cd_S309C3 = {  "S309C3", // class name
  bases_S309C3, 3,
  &(vtc_S309C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S309C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S309C3),28, //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  S309C2  : S309C3 {
  void *s309c2f0[3];
  int s309c2f1;
  ::S770C10_nt s309c2f2;
  char s309c2f3[255];
  ::S744C15_nt s309c2f4;
  __tsi64 s309c2f5;
  virtual void  v26(); // _ZN6S309C23v26Ev
  virtual void  v27(); // _ZN6S309C23v27Ev
  virtual void  v28(); // _ZN6S309C23v28Ev
  virtual void  v29(); // _ZN6S309C23v29Ev
  virtual void  v30(); // _ZN6S309C23v30Ev
  virtual void  v31(); // _ZN6S309C23v31Ev
  ~S309C2(); // tgen
  S309C2(); // tgen
};
//SIG(-1 S309C2) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v7 v8 v9 v10 v11} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v23 v24 v25 v26 v27 v28 v29 v30 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 Fp[3] Fi FC10{ FC11{ Fc[20]} Fc[16]} Fc[255] FC12{ m Fp} FL}


void  S309C2 ::v26(){vfunc_called(this, "_ZN6S309C23v26Ev");}
void  S309C2 ::v27(){vfunc_called(this, "_ZN6S309C23v27Ev");}
void  S309C2 ::v28(){vfunc_called(this, "_ZN6S309C23v28Ev");}
void  S309C2 ::v29(){vfunc_called(this, "_ZN6S309C23v29Ev");}
void  S309C2 ::v30(){vfunc_called(this, "_ZN6S309C23v30Ev");}
void  S309C2 ::v31(){vfunc_called(this, "_ZN6S309C23v31Ev");}
S309C2 ::~S309C2(){ note_dtor("S309C2", this);} // tgen
S309C2 ::S309C2(){ note_ctor("S309C2", this);} // tgen

static void Test_S309C2()
{
  extern Class_Descriptor cd_S309C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(62,102)];
    init_test(&cd_S309C2, buf);
    S309C2 *dp, &lv = *(dp=new (buf) S309C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(488,404), "sizeof(S309C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S309C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S309C5*)(S309C4*)(S309C3*), 0, "S309C2");
    check_base_class_offset(lv, (S309C5*)(S309C4*)(S309C3*), 0, "S309C2");
    check_base_class_offset(lv, (S309C4*)(S309C3*), 0, "S309C2");
    check_base_class_offset(lv, (S309C3*), 0, "S309C2");
    check_field_offset(lv, s309c2f0, ABISELECT(152,84), "S309C2.s309c2f0");
    check_field_offset(lv, s309c2f1, ABISELECT(176,96), "S309C2.s309c2f1");
    check_field_offset(lv, s309c2f2, ABISELECT(180,100), "S309C2.s309c2f2");
    check_field_offset(lv, s309c2f3, ABISELECT(216,136), "S309C2.s309c2f3");
    check_field_offset(lv, s309c2f4, ABISELECT(472,392), "S309C2.s309c2f4");
    check_field_offset(lv, s309c2f5, ABISELECT(480,396), "S309C2.s309c2f5");
    test_class_info(&lv, &cd_S309C2);
    dp->~S309C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS309C2(Test_S309C2, "S309C2", ABISELECT(488,404));

#else // __cplusplus

extern void _ZN6S309C2C1Ev();
extern void _ZN6S309C2D1Ev();
Name_Map name_map_S309C2[] = {
  NSPAIR(_ZN6S309C2C1Ev),
  NSPAIR(_ZN6S309C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S309C5;
extern VTBL_ENTRY _ZTI6S309C5[];
extern  VTBL_ENTRY _ZTV6S309C5[];
extern Class_Descriptor cd_S309C4;
extern VTBL_ENTRY _ZTI6S309C4[];
extern  VTBL_ENTRY _ZTV6S309C4[];
extern Class_Descriptor cd_S309C3;
extern VTBL_ENTRY _ZTI6S309C3[];
extern  VTBL_ENTRY _ZTV6S309C3[];
static Base_Class bases_S309C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S309C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S309C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S309C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S309C2[];
extern void _ZN6S309C2D1Ev();
extern void _ZN6S309C2D0Ev();
extern void _ZN6S309C52v2Ev();
extern void _ZN6S309C52v3Ev();
extern void _ZN6S309C52v4Ev();
extern void _ZN6S309C52v5Ev();
extern void _ZN6S309C52v6Ev();
extern void _ZN6S309C42v7Ev();
extern void _ZN6S309C42v8Ev();
extern void _ZN6S309C42v9Ev();
extern void _ZN6S309C43v10Ev();
extern void _ZN6S309C43v11Ev();
extern void _ZN6S309C43v12Ev();
extern void _ZN6S309C43v13Ev();
extern void _ZN6S309C43v14Ev();
extern void _ZN6S309C43v15Ev();
extern void _ZN6S309C43v16Ev();
extern void _ZN6S309C43v17Ev();
extern void _ZN6S309C33v18Ev();
extern void _ZN6S309C33v19Ev();
extern void _ZN6S309C33v20Ev();
extern void _ZN6S309C33v21Ev();
extern void _ZN6S309C33v22Ev();
extern void _ZN6S309C33v23Ev();
extern void _ZN6S309C33v24Ev();
extern void _ZN6S309C33v25Ev();
extern void _ZN6S309C23v26Ev();
extern void _ZN6S309C23v27Ev();
extern void _ZN6S309C23v28Ev();
extern void _ZN6S309C23v29Ev();
extern void _ZN6S309C23v30Ev();
extern void _ZN6S309C23v31Ev();
static  VTBL_ENTRY vtc_S309C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S309C2[0]),
  (VTBL_ENTRY)&_ZN6S309C2D1Ev,
  (VTBL_ENTRY)&_ZN6S309C2D0Ev,
  (VTBL_ENTRY)&_ZN6S309C52v2Ev,
  (VTBL_ENTRY)&_ZN6S309C52v3Ev,
  (VTBL_ENTRY)&_ZN6S309C52v4Ev,
  (VTBL_ENTRY)&_ZN6S309C52v5Ev,
  (VTBL_ENTRY)&_ZN6S309C52v6Ev,
  (VTBL_ENTRY)&_ZN6S309C42v7Ev,
  (VTBL_ENTRY)&_ZN6S309C42v8Ev,
  (VTBL_ENTRY)&_ZN6S309C42v9Ev,
  (VTBL_ENTRY)&_ZN6S309C43v10Ev,
  (VTBL_ENTRY)&_ZN6S309C43v11Ev,
  (VTBL_ENTRY)&_ZN6S309C43v12Ev,
  (VTBL_ENTRY)&_ZN6S309C43v13Ev,
  (VTBL_ENTRY)&_ZN6S309C43v14Ev,
  (VTBL_ENTRY)&_ZN6S309C43v15Ev,
  (VTBL_ENTRY)&_ZN6S309C43v16Ev,
  (VTBL_ENTRY)&_ZN6S309C43v17Ev,
  (VTBL_ENTRY)&_ZN6S309C33v18Ev,
  (VTBL_ENTRY)&_ZN6S309C33v19Ev,
  (VTBL_ENTRY)&_ZN6S309C33v20Ev,
  (VTBL_ENTRY)&_ZN6S309C33v21Ev,
  (VTBL_ENTRY)&_ZN6S309C33v22Ev,
  (VTBL_ENTRY)&_ZN6S309C33v23Ev,
  (VTBL_ENTRY)&_ZN6S309C33v24Ev,
  (VTBL_ENTRY)&_ZN6S309C33v25Ev,
  (VTBL_ENTRY)&_ZN6S309C23v26Ev,
  (VTBL_ENTRY)&_ZN6S309C23v27Ev,
  (VTBL_ENTRY)&_ZN6S309C23v28Ev,
  (VTBL_ENTRY)&_ZN6S309C23v29Ev,
  (VTBL_ENTRY)&_ZN6S309C23v30Ev,
  (VTBL_ENTRY)&_ZN6S309C23v31Ev,
};
extern VTBL_ENTRY _ZTI6S309C2[];
extern  VTBL_ENTRY _ZTV6S309C2[];
Class_Descriptor cd_S309C2 = {  "S309C2", // class name
  bases_S309C2, 4,
  &(vtc_S309C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(488,404), // object size
  NSPAIRA(_ZTI6S309C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S309C2),34, //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  S309C1  : S309C2 {
  virtual void  v1(); // _ZN6S309C12v1Ev
  ~S309C1(); // tgen
  S309C1(); // tgen
};
//SIG(1 S309C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fi} v2 v3 v4 v5 v6} v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[3] FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]}} v18 v19 v20 v21 v22 v23 v24 v25 FC7 FC10{ m Fp} Fp[3]} v26 v27 v28 v29 v30 v31 Fp[3] Fi FC11{ FC12{ Fc[20]} Fc[16]} Fc[255] FC13{ m Fp} FL} v1}


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

static void Test_S309C1()
{
  extern Class_Descriptor cd_S309C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(62,102)];
    init_test(&cd_S309C1, buf);
    S309C1 *dp, &lv = *(dp=new (buf) S309C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(488,404), "sizeof(S309C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S309C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S309C5*)(S309C4*)(S309C3*)(S309C2*), 0, "S309C1");
    check_base_class_offset(lv, (S309C5*)(S309C4*)(S309C3*)(S309C2*), 0, "S309C1");
    check_base_class_offset(lv, (S309C4*)(S309C3*)(S309C2*), 0, "S309C1");
    check_base_class_offset(lv, (S309C3*)(S309C2*), 0, "S309C1");
    check_base_class_offset(lv, (S309C2*), 0, "S309C1");
    test_class_info(&lv, &cd_S309C1);
    dp->~S309C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS309C1(Test_S309C1, "S309C1", ABISELECT(488,404));

#else // __cplusplus

extern void _ZN6S309C1C1Ev();
extern void _ZN6S309C1D1Ev();
Name_Map name_map_S309C1[] = {
  NSPAIR(_ZN6S309C1C1Ev),
  NSPAIR(_ZN6S309C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S309C5;
extern VTBL_ENTRY _ZTI6S309C5[];
extern  VTBL_ENTRY _ZTV6S309C5[];
extern Class_Descriptor cd_S309C4;
extern VTBL_ENTRY _ZTI6S309C4[];
extern  VTBL_ENTRY _ZTV6S309C4[];
extern Class_Descriptor cd_S309C3;
extern VTBL_ENTRY _ZTI6S309C3[];
extern  VTBL_ENTRY _ZTV6S309C3[];
extern Class_Descriptor cd_S309C2;
extern VTBL_ENTRY _ZTI6S309C2[];
extern  VTBL_ENTRY _ZTV6S309C2[];
static Base_Class bases_S309C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S309C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S309C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S309C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S309C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S309C1[];
extern void _ZN6S309C1D1Ev();
extern void _ZN6S309C1D0Ev();
extern void _ZN6S309C52v2Ev();
extern void _ZN6S309C52v3Ev();
extern void _ZN6S309C52v4Ev();
extern void _ZN6S309C52v5Ev();
extern void _ZN6S309C52v6Ev();
extern void _ZN6S309C42v7Ev();
extern void _ZN6S309C42v8Ev();
extern void _ZN6S309C42v9Ev();
extern void _ZN6S309C43v10Ev();
extern void _ZN6S309C43v11Ev();
extern void _ZN6S309C43v12Ev();
extern void _ZN6S309C43v13Ev();
extern void _ZN6S309C43v14Ev();
extern void _ZN6S309C43v15Ev();
extern void _ZN6S309C43v16Ev();
extern void _ZN6S309C43v17Ev();
extern void _ZN6S309C33v18Ev();
extern void _ZN6S309C33v19Ev();
extern void _ZN6S309C33v20Ev();
extern void _ZN6S309C33v21Ev();
extern void _ZN6S309C33v22Ev();
extern void _ZN6S309C33v23Ev();
extern void _ZN6S309C33v24Ev();
extern void _ZN6S309C33v25Ev();
extern void _ZN6S309C23v26Ev();
extern void _ZN6S309C23v27Ev();
extern void _ZN6S309C23v28Ev();
extern void _ZN6S309C23v29Ev();
extern void _ZN6S309C23v30Ev();
extern void _ZN6S309C23v31Ev();
extern void _ZN6S309C12v1Ev();
static  VTBL_ENTRY vtc_S309C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S309C1[0]),
  (VTBL_ENTRY)&_ZN6S309C1D1Ev,
  (VTBL_ENTRY)&_ZN6S309C1D0Ev,
  (VTBL_ENTRY)&_ZN6S309C52v2Ev,
  (VTBL_ENTRY)&_ZN6S309C52v3Ev,
  (VTBL_ENTRY)&_ZN6S309C52v4Ev,
  (VTBL_ENTRY)&_ZN6S309C52v5Ev,
  (VTBL_ENTRY)&_ZN6S309C52v6Ev,
  (VTBL_ENTRY)&_ZN6S309C42v7Ev,
  (VTBL_ENTRY)&_ZN6S309C42v8Ev,
  (VTBL_ENTRY)&_ZN6S309C42v9Ev,
  (VTBL_ENTRY)&_ZN6S309C43v10Ev,
  (VTBL_ENTRY)&_ZN6S309C43v11Ev,
  (VTBL_ENTRY)&_ZN6S309C43v12Ev,
  (VTBL_ENTRY)&_ZN6S309C43v13Ev,
  (VTBL_ENTRY)&_ZN6S309C43v14Ev,
  (VTBL_ENTRY)&_ZN6S309C43v15Ev,
  (VTBL_ENTRY)&_ZN6S309C43v16Ev,
  (VTBL_ENTRY)&_ZN6S309C43v17Ev,
  (VTBL_ENTRY)&_ZN6S309C33v18Ev,
  (VTBL_ENTRY)&_ZN6S309C33v19Ev,
  (VTBL_ENTRY)&_ZN6S309C33v20Ev,
  (VTBL_ENTRY)&_ZN6S309C33v21Ev,
  (VTBL_ENTRY)&_ZN6S309C33v22Ev,
  (VTBL_ENTRY)&_ZN6S309C33v23Ev,
  (VTBL_ENTRY)&_ZN6S309C33v24Ev,
  (VTBL_ENTRY)&_ZN6S309C33v25Ev,
  (VTBL_ENTRY)&_ZN6S309C23v26Ev,
  (VTBL_ENTRY)&_ZN6S309C23v27Ev,
  (VTBL_ENTRY)&_ZN6S309C23v28Ev,
  (VTBL_ENTRY)&_ZN6S309C23v29Ev,
  (VTBL_ENTRY)&_ZN6S309C23v30Ev,
  (VTBL_ENTRY)&_ZN6S309C23v31Ev,
  (VTBL_ENTRY)&_ZN6S309C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S309C1[];
extern  VTBL_ENTRY _ZTV6S309C1[];
Class_Descriptor cd_S309C1 = {  "S309C1", // class name
  bases_S309C1, 5,
  &(vtc_S309C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(488,404), // object size
  NSPAIRA(_ZTI6S309C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S309C1),35, //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  S741C4  : S770C5_nt {
  virtual void  v13(); // _ZN6S741C43v13Ev
  virtual void  v14(); // _ZN6S741C43v14Ev
  virtual void  v15(); // _ZN6S741C43v15Ev
  virtual void  v16(); // _ZN6S741C43v16Ev
  virtual void  v17(); // _ZN6S741C43v17Ev
  ~S741C4(); // tgen
  S741C4(); // tgen
};
//SIG(-1 S741C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S741C4 ::v13(){vfunc_called(this, "_ZN6S741C43v13Ev");}
void  S741C4 ::v14(){vfunc_called(this, "_ZN6S741C43v14Ev");}
void  S741C4 ::v15(){vfunc_called(this, "_ZN6S741C43v15Ev");}
void  S741C4 ::v16(){vfunc_called(this, "_ZN6S741C43v16Ev");}
void  S741C4 ::v17(){vfunc_called(this, "_ZN6S741C43v17Ev");}
S741C4 ::~S741C4(){ note_dtor("S741C4", this);} // tgen
S741C4 ::S741C4(){ note_ctor("S741C4", this);} // tgen

static void Test_S741C4()
{
  extern Class_Descriptor cd_S741C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S741C4, buf);
    S741C4 *dp, &lv = *(dp=new (buf) S741C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S741C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S741C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S741C4");
    test_class_info(&lv, &cd_S741C4);
    dp->~S741C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS741C4(Test_S741C4, "S741C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S741C4C1Ev();
extern void _ZN6S741C4D1Ev();
Name_Map name_map_S741C4[] = {
  NSPAIR(_ZN6S741C4C1Ev),
  NSPAIR(_ZN6S741C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S741C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S741C4[];
extern void _ZN6S741C4D1Ev();
extern void _ZN6S741C4D0Ev();
extern void _ZN6S741C43v13Ev();
extern void _ZN6S741C43v14Ev();
extern void _ZN6S741C43v15Ev();
extern void _ZN6S741C43v16Ev();
extern void _ZN6S741C43v17Ev();
static  VTBL_ENTRY vtc_S741C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S741C4[0]),
  (VTBL_ENTRY)&_ZN6S741C4D1Ev,
  (VTBL_ENTRY)&_ZN6S741C4D0Ev,
  (VTBL_ENTRY)&_ZN6S741C43v13Ev,
  (VTBL_ENTRY)&_ZN6S741C43v14Ev,
  (VTBL_ENTRY)&_ZN6S741C43v15Ev,
  (VTBL_ENTRY)&_ZN6S741C43v16Ev,
  (VTBL_ENTRY)&_ZN6S741C43v17Ev,
};
extern VTBL_ENTRY _ZTI6S741C4[];
extern  VTBL_ENTRY _ZTV6S741C4[];
Class_Descriptor cd_S741C4 = {  "S741C4", // class name
  bases_S741C4, 1,
  &(vtc_S741C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S741C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S741C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S741C3  : S741C4 {
  void *s741c3f0[3];
  ::S770C6_nt s741c3f1;
  virtual void  v18(); // _ZN6S741C33v18Ev
  virtual void  v19(); // _ZN6S741C33v19Ev
  virtual void  v20(); // _ZN6S741C33v20Ev
  virtual void  v21(); // _ZN6S741C33v21Ev
  virtual void  v22(); // _ZN6S741C33v22Ev
  virtual void  v23(); // _ZN6S741C33v23Ev
  virtual void  v24(); // _ZN6S741C33v24Ev
  virtual void  v25(); // _ZN6S741C33v25Ev
  virtual void  v26(); // _ZN6S741C33v26Ev
  virtual void  v27(); // _ZN6S741C33v27Ev
  virtual void  v28(); // _ZN6S741C33v28Ev
  ~S741C3(); // tgen
  S741C3(); // tgen
};
//SIG(-1 S741C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S741C3 ::v18(){vfunc_called(this, "_ZN6S741C33v18Ev");}
void  S741C3 ::v19(){vfunc_called(this, "_ZN6S741C33v19Ev");}
void  S741C3 ::v20(){vfunc_called(this, "_ZN6S741C33v20Ev");}
void  S741C3 ::v21(){vfunc_called(this, "_ZN6S741C33v21Ev");}
void  S741C3 ::v22(){vfunc_called(this, "_ZN6S741C33v22Ev");}
void  S741C3 ::v23(){vfunc_called(this, "_ZN6S741C33v23Ev");}
void  S741C3 ::v24(){vfunc_called(this, "_ZN6S741C33v24Ev");}
void  S741C3 ::v25(){vfunc_called(this, "_ZN6S741C33v25Ev");}
void  S741C3 ::v26(){vfunc_called(this, "_ZN6S741C33v26Ev");}
void  S741C3 ::v27(){vfunc_called(this, "_ZN6S741C33v27Ev");}
void  S741C3 ::v28(){vfunc_called(this, "_ZN6S741C33v28Ev");}
S741C3 ::~S741C3(){ note_dtor("S741C3", this);} // tgen
S741C3 ::S741C3(){ note_ctor("S741C3", this);} // tgen

static void Test_S741C3()
{
  extern Class_Descriptor cd_S741C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S741C3, buf);
    S741C3 *dp, &lv = *(dp=new (buf) S741C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S741C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S741C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S741C4*), 0, "S741C3");
    check_base_class_offset(lv, (S741C4*), 0, "S741C3");
    check_field_offset(lv, s741c3f0, ABISELECT(16,8), "S741C3.s741c3f0");
    check_field_offset(lv, s741c3f1, ABISELECT(40,20), "S741C3.s741c3f1");
    test_class_info(&lv, &cd_S741C3);
    dp->~S741C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS741C3(Test_S741C3, "S741C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S741C3C1Ev();
extern void _ZN6S741C3D1Ev();
Name_Map name_map_S741C3[] = {
  NSPAIR(_ZN6S741C3C1Ev),
  NSPAIR(_ZN6S741C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S741C4;
extern VTBL_ENTRY _ZTI6S741C4[];
extern  VTBL_ENTRY _ZTV6S741C4[];
static Base_Class bases_S741C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S741C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S741C3[];
extern void _ZN6S741C3D1Ev();
extern void _ZN6S741C3D0Ev();
extern void _ZN6S741C43v13Ev();
extern void _ZN6S741C43v14Ev();
extern void _ZN6S741C43v15Ev();
extern void _ZN6S741C43v16Ev();
extern void _ZN6S741C43v17Ev();
extern void _ZN6S741C33v18Ev();
extern void _ZN6S741C33v19Ev();
extern void _ZN6S741C33v20Ev();
extern void _ZN6S741C33v21Ev();
extern void _ZN6S741C33v22Ev();
extern void _ZN6S741C33v23Ev();
extern void _ZN6S741C33v24Ev();
extern void _ZN6S741C33v25Ev();
extern void _ZN6S741C33v26Ev();
extern void _ZN6S741C33v27Ev();
extern void _ZN6S741C33v28Ev();
static  VTBL_ENTRY vtc_S741C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S741C3[0]),
  (VTBL_ENTRY)&_ZN6S741C3D1Ev,
  (VTBL_ENTRY)&_ZN6S741C3D0Ev,
  (VTBL_ENTRY)&_ZN6S741C43v13Ev,
  (VTBL_ENTRY)&_ZN6S741C43v14Ev,
  (VTBL_ENTRY)&_ZN6S741C43v15Ev,
  (VTBL_ENTRY)&_ZN6S741C43v16Ev,
  (VTBL_ENTRY)&_ZN6S741C43v17Ev,
  (VTBL_ENTRY)&_ZN6S741C33v18Ev,
  (VTBL_ENTRY)&_ZN6S741C33v19Ev,
  (VTBL_ENTRY)&_ZN6S741C33v20Ev,
  (VTBL_ENTRY)&_ZN6S741C33v21Ev,
  (VTBL_ENTRY)&_ZN6S741C33v22Ev,
  (VTBL_ENTRY)&_ZN6S741C33v23Ev,
  (VTBL_ENTRY)&_ZN6S741C33v24Ev,
  (VTBL_ENTRY)&_ZN6S741C33v25Ev,
  (VTBL_ENTRY)&_ZN6S741C33v26Ev,
  (VTBL_ENTRY)&_ZN6S741C33v27Ev,
  (VTBL_ENTRY)&_ZN6S741C33v28Ev,
};
extern VTBL_ENTRY _ZTI6S741C3[];
extern  VTBL_ENTRY _ZTV6S741C3[];
Class_Descriptor cd_S741C3 = {  "S741C3", // class name
  bases_S741C3, 2,
  &(vtc_S741C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S741C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S741C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S741C2  : S741C3 {
  ::S770C6_nt s741c2f0;
  ::S770C9_nt s741c2f1;
  void *s741c2f2[3];
  virtual void  v29(); // _ZN6S741C23v29Ev
  virtual void  v30(); // _ZN6S741C23v30Ev
  virtual void  v31(); // _ZN6S741C23v31Ev
  virtual void  v32(); // _ZN6S741C23v32Ev
  virtual void  v33(); // _ZN6S741C23v33Ev
  virtual void  v34(); // _ZN6S741C23v34Ev
  virtual void  v35(); // _ZN6S741C23v35Ev
  virtual void  v36(); // _ZN6S741C23v36Ev
  ~S741C2(); // tgen
  S741C2(); // tgen
};
//SIG(-1 S741C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S741C2 ::v29(){vfunc_called(this, "_ZN6S741C23v29Ev");}
void  S741C2 ::v30(){vfunc_called(this, "_ZN6S741C23v30Ev");}
void  S741C2 ::v31(){vfunc_called(this, "_ZN6S741C23v31Ev");}
void  S741C2 ::v32(){vfunc_called(this, "_ZN6S741C23v32Ev");}
void  S741C2 ::v33(){vfunc_called(this, "_ZN6S741C23v33Ev");}
void  S741C2 ::v34(){vfunc_called(this, "_ZN6S741C23v34Ev");}
void  S741C2 ::v35(){vfunc_called(this, "_ZN6S741C23v35Ev");}
void  S741C2 ::v36(){vfunc_called(this, "_ZN6S741C23v36Ev");}
S741C2 ::~S741C2(){ note_dtor("S741C2", this);} // tgen
S741C2 ::S741C2(){ note_ctor("S741C2", this);} // tgen

static void Test_S741C2()
{
  extern Class_Descriptor cd_S741C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S741C2, buf);
    S741C2 *dp, &lv = *(dp=new (buf) S741C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S741C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S741C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S741C4*)(S741C3*), 0, "S741C2");
    check_base_class_offset(lv, (S741C4*)(S741C3*), 0, "S741C2");
    check_base_class_offset(lv, (S741C3*), 0, "S741C2");
    check_field_offset(lv, s741c2f0, ABISELECT(80,44), "S741C2.s741c2f0");
    check_field_offset(lv, s741c2f1, ABISELECT(120,68), "S741C2.s741c2f1");
    check_field_offset(lv, s741c2f2, ABISELECT(128,72), "S741C2.s741c2f2");
    test_class_info(&lv, &cd_S741C2);
    dp->~S741C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS741C2(Test_S741C2, "S741C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S741C2C1Ev();
extern void _ZN6S741C2D1Ev();
Name_Map name_map_S741C2[] = {
  NSPAIR(_ZN6S741C2C1Ev),
  NSPAIR(_ZN6S741C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S741C4;
extern VTBL_ENTRY _ZTI6S741C4[];
extern  VTBL_ENTRY _ZTV6S741C4[];
extern Class_Descriptor cd_S741C3;
extern VTBL_ENTRY _ZTI6S741C3[];
extern  VTBL_ENTRY _ZTV6S741C3[];
static Base_Class bases_S741C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S741C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S741C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S741C2[];
extern void _ZN6S741C2D1Ev();
extern void _ZN6S741C2D0Ev();
extern void _ZN6S741C43v13Ev();
extern void _ZN6S741C43v14Ev();
extern void _ZN6S741C43v15Ev();
extern void _ZN6S741C43v16Ev();
extern void _ZN6S741C43v17Ev();
extern void _ZN6S741C33v18Ev();
extern void _ZN6S741C33v19Ev();
extern void _ZN6S741C33v20Ev();
extern void _ZN6S741C33v21Ev();
extern void _ZN6S741C33v22Ev();
extern void _ZN6S741C33v23Ev();
extern void _ZN6S741C33v24Ev();
extern void _ZN6S741C33v25Ev();
extern void _ZN6S741C33v26Ev();
extern void _ZN6S741C33v27Ev();
extern void _ZN6S741C33v28Ev();
extern void _ZN6S741C23v29Ev();
extern void _ZN6S741C23v30Ev();
extern void _ZN6S741C23v31Ev();
extern void _ZN6S741C23v32Ev();
extern void _ZN6S741C23v33Ev();
extern void _ZN6S741C23v34Ev();
extern void _ZN6S741C23v35Ev();
extern void _ZN6S741C23v36Ev();
static  VTBL_ENTRY vtc_S741C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S741C2[0]),
  (VTBL_ENTRY)&_ZN6S741C2D1Ev,
  (VTBL_ENTRY)&_ZN6S741C2D0Ev,
  (VTBL_ENTRY)&_ZN6S741C43v13Ev,
  (VTBL_ENTRY)&_ZN6S741C43v14Ev,
  (VTBL_ENTRY)&_ZN6S741C43v15Ev,
  (VTBL_ENTRY)&_ZN6S741C43v16Ev,
  (VTBL_ENTRY)&_ZN6S741C43v17Ev,
  (VTBL_ENTRY)&_ZN6S741C33v18Ev,
  (VTBL_ENTRY)&_ZN6S741C33v19Ev,
  (VTBL_ENTRY)&_ZN6S741C33v20Ev,
  (VTBL_ENTRY)&_ZN6S741C33v21Ev,
  (VTBL_ENTRY)&_ZN6S741C33v22Ev,
  (VTBL_ENTRY)&_ZN6S741C33v23Ev,
  (VTBL_ENTRY)&_ZN6S741C33v24Ev,
  (VTBL_ENTRY)&_ZN6S741C33v25Ev,
  (VTBL_ENTRY)&_ZN6S741C33v26Ev,
  (VTBL_ENTRY)&_ZN6S741C33v27Ev,
  (VTBL_ENTRY)&_ZN6S741C33v28Ev,
  (VTBL_ENTRY)&_ZN6S741C23v29Ev,
  (VTBL_ENTRY)&_ZN6S741C23v30Ev,
  (VTBL_ENTRY)&_ZN6S741C23v31Ev,
  (VTBL_ENTRY)&_ZN6S741C23v32Ev,
  (VTBL_ENTRY)&_ZN6S741C23v33Ev,
  (VTBL_ENTRY)&_ZN6S741C23v34Ev,
  (VTBL_ENTRY)&_ZN6S741C23v35Ev,
  (VTBL_ENTRY)&_ZN6S741C23v36Ev,
};
extern VTBL_ENTRY _ZTI6S741C2[];
extern  VTBL_ENTRY _ZTV6S741C2[];
Class_Descriptor cd_S741C2 = {  "S741C2", // class name
  bases_S741C2, 3,
  &(vtc_S741C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S741C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S741C2),28, //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  S741C1  : S741C2 {
  int s741c1f0;
  ::S303C11_nt s741c1f1;
  void *s741c1f2[3];
  char s741c1f3;
  int s741c1f4;
  virtual void  v1(); // _ZN6S741C12v1Ev
  virtual void  v2(); // _ZN6S741C12v2Ev
  virtual void  v3(); // _ZN6S741C12v3Ev
  virtual void  v4(); // _ZN6S741C12v4Ev
  virtual void  v5(); // _ZN6S741C12v5Ev
  virtual void  v6(); // _ZN6S741C12v6Ev
  virtual void  v7(); // _ZN6S741C12v7Ev
  virtual void  v8(); // _ZN6S741C12v8Ev
  virtual void  v9(); // _ZN6S741C12v9Ev
  virtual void  v10(); // _ZN6S741C13v10Ev
  virtual void  v11(); // _ZN6S741C13v11Ev
  virtual void  v12(); // _ZN6S741C13v12Ev
  ~S741C1(); // tgen
  S741C1(); // tgen
};
//SIG(1 S741C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v13 v14 v15 v16 v17} v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v29 v30 v31 v32 v33 v34 v35 v36 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fi FC10{ m FC11{ m FL}} Fp[3] Fc Fi}


void  S741C1 ::v1(){vfunc_called(this, "_ZN6S741C12v1Ev");}
void  S741C1 ::v2(){vfunc_called(this, "_ZN6S741C12v2Ev");}
void  S741C1 ::v3(){vfunc_called(this, "_ZN6S741C12v3Ev");}
void  S741C1 ::v4(){vfunc_called(this, "_ZN6S741C12v4Ev");}
void  S741C1 ::v5(){vfunc_called(this, "_ZN6S741C12v5Ev");}
void  S741C1 ::v6(){vfunc_called(this, "_ZN6S741C12v6Ev");}
void  S741C1 ::v7(){vfunc_called(this, "_ZN6S741C12v7Ev");}
void  S741C1 ::v8(){vfunc_called(this, "_ZN6S741C12v8Ev");}
void  S741C1 ::v9(){vfunc_called(this, "_ZN6S741C12v9Ev");}
void  S741C1 ::v10(){vfunc_called(this, "_ZN6S741C13v10Ev");}
void  S741C1 ::v11(){vfunc_called(this, "_ZN6S741C13v11Ev");}
void  S741C1 ::v12(){vfunc_called(this, "_ZN6S741C13v12Ev");}
S741C1 ::~S741C1(){ note_dtor("S741C1", this);} // tgen
S741C1 ::S741C1(){ note_ctor("S741C1", this);} // tgen

static void Test_S741C1()
{
  extern Class_Descriptor cd_S741C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,30)];
    init_test(&cd_S741C1, buf);
    S741C1 *dp, &lv = *(dp=new (buf) S741C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,116), "sizeof(S741C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S741C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S741C4*)(S741C3*)(S741C2*), 0, "S741C1");
    check_base_class_offset(lv, (S741C4*)(S741C3*)(S741C2*), 0, "S741C1");
    check_base_class_offset(lv, (S741C3*)(S741C2*), 0, "S741C1");
    check_base_class_offset(lv, (S741C2*), 0, "S741C1");
    check_field_offset(lv, s741c1f0, ABISELECT(152,84), "S741C1.s741c1f0");
    check_field_offset(lv, s741c1f1, ABISELECT(160,88), "S741C1.s741c1f1");
    check_field_offset(lv, s741c1f2, ABISELECT(168,96), "S741C1.s741c1f2");
    check_field_offset(lv, s741c1f3, ABISELECT(192,108), "S741C1.s741c1f3");
    check_field_offset(lv, s741c1f4, ABISELECT(196,112), "S741C1.s741c1f4");
    test_class_info(&lv, &cd_S741C1);
    dp->~S741C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS741C1(Test_S741C1, "S741C1", ABISELECT(200,116));

#else // __cplusplus

extern void _ZN6S741C1C1Ev();
extern void _ZN6S741C1D1Ev();
Name_Map name_map_S741C1[] = {
  NSPAIR(_ZN6S741C1C1Ev),
  NSPAIR(_ZN6S741C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S741C4;
extern VTBL_ENTRY _ZTI6S741C4[];
extern  VTBL_ENTRY _ZTV6S741C4[];
extern Class_Descriptor cd_S741C3;
extern VTBL_ENTRY _ZTI6S741C3[];
extern  VTBL_ENTRY _ZTV6S741C3[];
extern Class_Descriptor cd_S741C2;
extern VTBL_ENTRY _ZTI6S741C2[];
extern  VTBL_ENTRY _ZTV6S741C2[];
static Base_Class bases_S741C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S741C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S741C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S741C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S741C1[];
extern void _ZN6S741C1D1Ev();
extern void _ZN6S741C1D0Ev();
extern void _ZN6S741C43v13Ev();
extern void _ZN6S741C43v14Ev();
extern void _ZN6S741C43v15Ev();
extern void _ZN6S741C43v16Ev();
extern void _ZN6S741C43v17Ev();
extern void _ZN6S741C33v18Ev();
extern void _ZN6S741C33v19Ev();
extern void _ZN6S741C33v20Ev();
extern void _ZN6S741C33v21Ev();
extern void _ZN6S741C33v22Ev();
extern void _ZN6S741C33v23Ev();
extern void _ZN6S741C33v24Ev();
extern void _ZN6S741C33v25Ev();
extern void _ZN6S741C33v26Ev();
extern void _ZN6S741C33v27Ev();
extern void _ZN6S741C33v28Ev();
extern void _ZN6S741C23v29Ev();
extern void _ZN6S741C23v30Ev();
extern void _ZN6S741C23v31Ev();
extern void _ZN6S741C23v32Ev();
extern void _ZN6S741C23v33Ev();
extern void _ZN6S741C23v34Ev();
extern void _ZN6S741C23v35Ev();
extern void _ZN6S741C23v36Ev();
extern void _ZN6S741C12v1Ev();
extern void _ZN6S741C12v2Ev();
extern void _ZN6S741C12v3Ev();
extern void _ZN6S741C12v4Ev();
extern void _ZN6S741C12v5Ev();
extern void _ZN6S741C12v6Ev();
extern void _ZN6S741C12v7Ev();
extern void _ZN6S741C12v8Ev();
extern void _ZN6S741C12v9Ev();
extern void _ZN6S741C13v10Ev();
extern void _ZN6S741C13v11Ev();
extern void _ZN6S741C13v12Ev();
static  VTBL_ENTRY vtc_S741C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S741C1[0]),
  (VTBL_ENTRY)&_ZN6S741C1D1Ev,
  (VTBL_ENTRY)&_ZN6S741C1D0Ev,
  (VTBL_ENTRY)&_ZN6S741C43v13Ev,
  (VTBL_ENTRY)&_ZN6S741C43v14Ev,
  (VTBL_ENTRY)&_ZN6S741C43v15Ev,
  (VTBL_ENTRY)&_ZN6S741C43v16Ev,
  (VTBL_ENTRY)&_ZN6S741C43v17Ev,
  (VTBL_ENTRY)&_ZN6S741C33v18Ev,
  (VTBL_ENTRY)&_ZN6S741C33v19Ev,
  (VTBL_ENTRY)&_ZN6S741C33v20Ev,
  (VTBL_ENTRY)&_ZN6S741C33v21Ev,
  (VTBL_ENTRY)&_ZN6S741C33v22Ev,
  (VTBL_ENTRY)&_ZN6S741C33v23Ev,
  (VTBL_ENTRY)&_ZN6S741C33v24Ev,
  (VTBL_ENTRY)&_ZN6S741C33v25Ev,
  (VTBL_ENTRY)&_ZN6S741C33v26Ev,
  (VTBL_ENTRY)&_ZN6S741C33v27Ev,
  (VTBL_ENTRY)&_ZN6S741C33v28Ev,
  (VTBL_ENTRY)&_ZN6S741C23v29Ev,
  (VTBL_ENTRY)&_ZN6S741C23v30Ev,
  (VTBL_ENTRY)&_ZN6S741C23v31Ev,
  (VTBL_ENTRY)&_ZN6S741C23v32Ev,
  (VTBL_ENTRY)&_ZN6S741C23v33Ev,
  (VTBL_ENTRY)&_ZN6S741C23v34Ev,
  (VTBL_ENTRY)&_ZN6S741C23v35Ev,
  (VTBL_ENTRY)&_ZN6S741C23v36Ev,
  (VTBL_ENTRY)&_ZN6S741C12v1Ev,
  (VTBL_ENTRY)&_ZN6S741C12v2Ev,
  (VTBL_ENTRY)&_ZN6S741C12v3Ev,
  (VTBL_ENTRY)&_ZN6S741C12v4Ev,
  (VTBL_ENTRY)&_ZN6S741C12v5Ev,
  (VTBL_ENTRY)&_ZN6S741C12v6Ev,
  (VTBL_ENTRY)&_ZN6S741C12v7Ev,
  (VTBL_ENTRY)&_ZN6S741C12v8Ev,
  (VTBL_ENTRY)&_ZN6S741C12v9Ev,
  (VTBL_ENTRY)&_ZN6S741C13v10Ev,
  (VTBL_ENTRY)&_ZN6S741C13v11Ev,
  (VTBL_ENTRY)&_ZN6S741C13v12Ev,
};
extern VTBL_ENTRY _ZTI6S741C1[];
extern  VTBL_ENTRY _ZTV6S741C1[];
Class_Descriptor cd_S741C1 = {  "S741C1", // class name
  bases_S741C1, 4,
  &(vtc_S741C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,116), // object size
  NSPAIRA(_ZTI6S741C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S741C1),40, //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  S738C4  : S770C5_nt {
  virtual void  v11(); // _ZN6S738C43v11Ev
  virtual void  v12(); // _ZN6S738C43v12Ev
  virtual void  v13(); // _ZN6S738C43v13Ev
  virtual void  v14(); // _ZN6S738C43v14Ev
  virtual void  v15(); // _ZN6S738C43v15Ev
  ~S738C4(); // tgen
  S738C4(); // tgen
};
//SIG(-1 S738C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S738C4 ::v11(){vfunc_called(this, "_ZN6S738C43v11Ev");}
void  S738C4 ::v12(){vfunc_called(this, "_ZN6S738C43v12Ev");}
void  S738C4 ::v13(){vfunc_called(this, "_ZN6S738C43v13Ev");}
void  S738C4 ::v14(){vfunc_called(this, "_ZN6S738C43v14Ev");}
void  S738C4 ::v15(){vfunc_called(this, "_ZN6S738C43v15Ev");}
S738C4 ::~S738C4(){ note_dtor("S738C4", this);} // tgen
S738C4 ::S738C4(){ note_ctor("S738C4", this);} // tgen

static void Test_S738C4()
{
  extern Class_Descriptor cd_S738C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S738C4, buf);
    S738C4 *dp, &lv = *(dp=new (buf) S738C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S738C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S738C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S738C4");
    test_class_info(&lv, &cd_S738C4);
    dp->~S738C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS738C4(Test_S738C4, "S738C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S738C4C1Ev();
extern void _ZN6S738C4D1Ev();
Name_Map name_map_S738C4[] = {
  NSPAIR(_ZN6S738C4C1Ev),
  NSPAIR(_ZN6S738C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S738C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S738C4[];
extern void _ZN6S738C4D1Ev();
extern void _ZN6S738C4D0Ev();
extern void _ZN6S738C43v11Ev();
extern void _ZN6S738C43v12Ev();
extern void _ZN6S738C43v13Ev();
extern void _ZN6S738C43v14Ev();
extern void _ZN6S738C43v15Ev();
static  VTBL_ENTRY vtc_S738C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S738C4[0]),
  (VTBL_ENTRY)&_ZN6S738C4D1Ev,
  (VTBL_ENTRY)&_ZN6S738C4D0Ev,
  (VTBL_ENTRY)&_ZN6S738C43v11Ev,
  (VTBL_ENTRY)&_ZN6S738C43v12Ev,
  (VTBL_ENTRY)&_ZN6S738C43v13Ev,
  (VTBL_ENTRY)&_ZN6S738C43v14Ev,
  (VTBL_ENTRY)&_ZN6S738C43v15Ev,
};
extern VTBL_ENTRY _ZTI6S738C4[];
extern  VTBL_ENTRY _ZTV6S738C4[];
Class_Descriptor cd_S738C4 = {  "S738C4", // class name
  bases_S738C4, 1,
  &(vtc_S738C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S738C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S738C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S738C3  : S738C4 {
  void *s738c3f0[3];
  ::S770C6_nt s738c3f1;
  virtual void  v16(); // _ZN6S738C33v16Ev
  virtual void  v17(); // _ZN6S738C33v17Ev
  virtual void  v18(); // _ZN6S738C33v18Ev
  virtual void  v19(); // _ZN6S738C33v19Ev
  virtual void  v20(); // _ZN6S738C33v20Ev
  virtual void  v21(); // _ZN6S738C33v21Ev
  virtual void  v22(); // _ZN6S738C33v22Ev
  virtual void  v23(); // _ZN6S738C33v23Ev
  virtual void  v24(); // _ZN6S738C33v24Ev
  virtual void  v25(); // _ZN6S738C33v25Ev
  virtual void  v26(); // _ZN6S738C33v26Ev
  ~S738C3(); // tgen
  S738C3(); // tgen
};
//SIG(-1 S738C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S738C3 ::v16(){vfunc_called(this, "_ZN6S738C33v16Ev");}
void  S738C3 ::v17(){vfunc_called(this, "_ZN6S738C33v17Ev");}
void  S738C3 ::v18(){vfunc_called(this, "_ZN6S738C33v18Ev");}
void  S738C3 ::v19(){vfunc_called(this, "_ZN6S738C33v19Ev");}
void  S738C3 ::v20(){vfunc_called(this, "_ZN6S738C33v20Ev");}
void  S738C3 ::v21(){vfunc_called(this, "_ZN6S738C33v21Ev");}
void  S738C3 ::v22(){vfunc_called(this, "_ZN6S738C33v22Ev");}
void  S738C3 ::v23(){vfunc_called(this, "_ZN6S738C33v23Ev");}
void  S738C3 ::v24(){vfunc_called(this, "_ZN6S738C33v24Ev");}
void  S738C3 ::v25(){vfunc_called(this, "_ZN6S738C33v25Ev");}
void  S738C3 ::v26(){vfunc_called(this, "_ZN6S738C33v26Ev");}
S738C3 ::~S738C3(){ note_dtor("S738C3", this);} // tgen
S738C3 ::S738C3(){ note_ctor("S738C3", this);} // tgen

static void Test_S738C3()
{
  extern Class_Descriptor cd_S738C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S738C3, buf);
    S738C3 *dp, &lv = *(dp=new (buf) S738C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S738C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S738C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S738C4*), 0, "S738C3");
    check_base_class_offset(lv, (S738C4*), 0, "S738C3");
    check_field_offset(lv, s738c3f0, ABISELECT(16,8), "S738C3.s738c3f0");
    check_field_offset(lv, s738c3f1, ABISELECT(40,20), "S738C3.s738c3f1");
    test_class_info(&lv, &cd_S738C3);
    dp->~S738C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS738C3(Test_S738C3, "S738C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S738C3C1Ev();
extern void _ZN6S738C3D1Ev();
Name_Map name_map_S738C3[] = {
  NSPAIR(_ZN6S738C3C1Ev),
  NSPAIR(_ZN6S738C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S738C4;
extern VTBL_ENTRY _ZTI6S738C4[];
extern  VTBL_ENTRY _ZTV6S738C4[];
static Base_Class bases_S738C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S738C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S738C3[];
extern void _ZN6S738C3D1Ev();
extern void _ZN6S738C3D0Ev();
extern void _ZN6S738C43v11Ev();
extern void _ZN6S738C43v12Ev();
extern void _ZN6S738C43v13Ev();
extern void _ZN6S738C43v14Ev();
extern void _ZN6S738C43v15Ev();
extern void _ZN6S738C33v16Ev();
extern void _ZN6S738C33v17Ev();
extern void _ZN6S738C33v18Ev();
extern void _ZN6S738C33v19Ev();
extern void _ZN6S738C33v20Ev();
extern void _ZN6S738C33v21Ev();
extern void _ZN6S738C33v22Ev();
extern void _ZN6S738C33v23Ev();
extern void _ZN6S738C33v24Ev();
extern void _ZN6S738C33v25Ev();
extern void _ZN6S738C33v26Ev();
static  VTBL_ENTRY vtc_S738C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S738C3[0]),
  (VTBL_ENTRY)&_ZN6S738C3D1Ev,
  (VTBL_ENTRY)&_ZN6S738C3D0Ev,
  (VTBL_ENTRY)&_ZN6S738C43v11Ev,
  (VTBL_ENTRY)&_ZN6S738C43v12Ev,
  (VTBL_ENTRY)&_ZN6S738C43v13Ev,
  (VTBL_ENTRY)&_ZN6S738C43v14Ev,
  (VTBL_ENTRY)&_ZN6S738C43v15Ev,
  (VTBL_ENTRY)&_ZN6S738C33v16Ev,
  (VTBL_ENTRY)&_ZN6S738C33v17Ev,
  (VTBL_ENTRY)&_ZN6S738C33v18Ev,
  (VTBL_ENTRY)&_ZN6S738C33v19Ev,
  (VTBL_ENTRY)&_ZN6S738C33v20Ev,
  (VTBL_ENTRY)&_ZN6S738C33v21Ev,
  (VTBL_ENTRY)&_ZN6S738C33v22Ev,
  (VTBL_ENTRY)&_ZN6S738C33v23Ev,
  (VTBL_ENTRY)&_ZN6S738C33v24Ev,
  (VTBL_ENTRY)&_ZN6S738C33v25Ev,
  (VTBL_ENTRY)&_ZN6S738C33v26Ev,
};
extern VTBL_ENTRY _ZTI6S738C3[];
extern  VTBL_ENTRY _ZTV6S738C3[];
Class_Descriptor cd_S738C3 = {  "S738C3", // class name
  bases_S738C3, 2,
  &(vtc_S738C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S738C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S738C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S738C2  : S738C3 {
  ::S770C6_nt s738c2f0;
  ::S770C9_nt s738c2f1;
  void *s738c2f2[3];
  virtual void  v27(); // _ZN6S738C23v27Ev
  virtual void  v28(); // _ZN6S738C23v28Ev
  virtual void  v29(); // _ZN6S738C23v29Ev
  virtual void  v30(); // _ZN6S738C23v30Ev
  virtual void  v31(); // _ZN6S738C23v31Ev
  virtual void  v32(); // _ZN6S738C23v32Ev
  virtual void  v33(); // _ZN6S738C23v33Ev
  virtual void  v34(); // _ZN6S738C23v34Ev
  ~S738C2(); // tgen
  S738C2(); // tgen
};
//SIG(-1 S738C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S738C2 ::v27(){vfunc_called(this, "_ZN6S738C23v27Ev");}
void  S738C2 ::v28(){vfunc_called(this, "_ZN6S738C23v28Ev");}
void  S738C2 ::v29(){vfunc_called(this, "_ZN6S738C23v29Ev");}
void  S738C2 ::v30(){vfunc_called(this, "_ZN6S738C23v30Ev");}
void  S738C2 ::v31(){vfunc_called(this, "_ZN6S738C23v31Ev");}
void  S738C2 ::v32(){vfunc_called(this, "_ZN6S738C23v32Ev");}
void  S738C2 ::v33(){vfunc_called(this, "_ZN6S738C23v33Ev");}
void  S738C2 ::v34(){vfunc_called(this, "_ZN6S738C23v34Ev");}
S738C2 ::~S738C2(){ note_dtor("S738C2", this);} // tgen
S738C2 ::S738C2(){ note_ctor("S738C2", this);} // tgen

static void Test_S738C2()
{
  extern Class_Descriptor cd_S738C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S738C2, buf);
    S738C2 *dp, &lv = *(dp=new (buf) S738C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S738C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S738C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S738C4*)(S738C3*), 0, "S738C2");
    check_base_class_offset(lv, (S738C4*)(S738C3*), 0, "S738C2");
    check_base_class_offset(lv, (S738C3*), 0, "S738C2");
    check_field_offset(lv, s738c2f0, ABISELECT(80,44), "S738C2.s738c2f0");
    check_field_offset(lv, s738c2f1, ABISELECT(120,68), "S738C2.s738c2f1");
    check_field_offset(lv, s738c2f2, ABISELECT(128,72), "S738C2.s738c2f2");
    test_class_info(&lv, &cd_S738C2);
    dp->~S738C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS738C2(Test_S738C2, "S738C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S738C2C1Ev();
extern void _ZN6S738C2D1Ev();
Name_Map name_map_S738C2[] = {
  NSPAIR(_ZN6S738C2C1Ev),
  NSPAIR(_ZN6S738C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S738C4;
extern VTBL_ENTRY _ZTI6S738C4[];
extern  VTBL_ENTRY _ZTV6S738C4[];
extern Class_Descriptor cd_S738C3;
extern VTBL_ENTRY _ZTI6S738C3[];
extern  VTBL_ENTRY _ZTV6S738C3[];
static Base_Class bases_S738C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S738C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S738C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S738C2[];
extern void _ZN6S738C2D1Ev();
extern void _ZN6S738C2D0Ev();
extern void _ZN6S738C43v11Ev();
extern void _ZN6S738C43v12Ev();
extern void _ZN6S738C43v13Ev();
extern void _ZN6S738C43v14Ev();
extern void _ZN6S738C43v15Ev();
extern void _ZN6S738C33v16Ev();
extern void _ZN6S738C33v17Ev();
extern void _ZN6S738C33v18Ev();
extern void _ZN6S738C33v19Ev();
extern void _ZN6S738C33v20Ev();
extern void _ZN6S738C33v21Ev();
extern void _ZN6S738C33v22Ev();
extern void _ZN6S738C33v23Ev();
extern void _ZN6S738C33v24Ev();
extern void _ZN6S738C33v25Ev();
extern void _ZN6S738C33v26Ev();
extern void _ZN6S738C23v27Ev();
extern void _ZN6S738C23v28Ev();
extern void _ZN6S738C23v29Ev();
extern void _ZN6S738C23v30Ev();
extern void _ZN6S738C23v31Ev();
extern void _ZN6S738C23v32Ev();
extern void _ZN6S738C23v33Ev();
extern void _ZN6S738C23v34Ev();
static  VTBL_ENTRY vtc_S738C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S738C2[0]),
  (VTBL_ENTRY)&_ZN6S738C2D1Ev,
  (VTBL_ENTRY)&_ZN6S738C2D0Ev,
  (VTBL_ENTRY)&_ZN6S738C43v11Ev,
  (VTBL_ENTRY)&_ZN6S738C43v12Ev,
  (VTBL_ENTRY)&_ZN6S738C43v13Ev,
  (VTBL_ENTRY)&_ZN6S738C43v14Ev,
  (VTBL_ENTRY)&_ZN6S738C43v15Ev,
  (VTBL_ENTRY)&_ZN6S738C33v16Ev,
  (VTBL_ENTRY)&_ZN6S738C33v17Ev,
  (VTBL_ENTRY)&_ZN6S738C33v18Ev,
  (VTBL_ENTRY)&_ZN6S738C33v19Ev,
  (VTBL_ENTRY)&_ZN6S738C33v20Ev,
  (VTBL_ENTRY)&_ZN6S738C33v21Ev,
  (VTBL_ENTRY)&_ZN6S738C33v22Ev,
  (VTBL_ENTRY)&_ZN6S738C33v23Ev,
  (VTBL_ENTRY)&_ZN6S738C33v24Ev,
  (VTBL_ENTRY)&_ZN6S738C33v25Ev,
  (VTBL_ENTRY)&_ZN6S738C33v26Ev,
  (VTBL_ENTRY)&_ZN6S738C23v27Ev,
  (VTBL_ENTRY)&_ZN6S738C23v28Ev,
  (VTBL_ENTRY)&_ZN6S738C23v29Ev,
  (VTBL_ENTRY)&_ZN6S738C23v30Ev,
  (VTBL_ENTRY)&_ZN6S738C23v31Ev,
  (VTBL_ENTRY)&_ZN6S738C23v32Ev,
  (VTBL_ENTRY)&_ZN6S738C23v33Ev,
  (VTBL_ENTRY)&_ZN6S738C23v34Ev,
};
extern VTBL_ENTRY _ZTI6S738C2[];
extern  VTBL_ENTRY _ZTV6S738C2[];
Class_Descriptor cd_S738C2 = {  "S738C2", // class name
  bases_S738C2, 3,
  &(vtc_S738C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S738C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S738C2),28, //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  S738C1  : S738C2 {
  int s738c1f0;
  ::S303C11_nt s738c1f1;
  void *s738c1f2[2];
  __tsi64 s738c1f3[2];
  virtual void  v1(); // _ZN6S738C12v1Ev
  virtual void  v2(); // _ZN6S738C12v2Ev
  virtual void  v3(); // _ZN6S738C12v3Ev
  virtual void  v4(); // _ZN6S738C12v4Ev
  virtual void  v5(); // _ZN6S738C12v5Ev
  virtual void  v6(); // _ZN6S738C12v6Ev
  virtual void  v7(); // _ZN6S738C12v7Ev
  virtual void  v8(); // _ZN6S738C12v8Ev
  virtual void  v9(); // _ZN6S738C12v9Ev
  virtual void  v10(); // _ZN6S738C13v10Ev
  ~S738C1(); // tgen
  S738C1(); // tgen
};
//SIG(1 S738C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v11 v12 v13 v14 v15} v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v27 v28 v29 v30 v31 v32 v33 v34 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi FC10{ m FC11{ m FL}} Fp[2] FL[2]}


void  S738C1 ::v1(){vfunc_called(this, "_ZN6S738C12v1Ev");}
void  S738C1 ::v2(){vfunc_called(this, "_ZN6S738C12v2Ev");}
void  S738C1 ::v3(){vfunc_called(this, "_ZN6S738C12v3Ev");}
void  S738C1 ::v4(){vfunc_called(this, "_ZN6S738C12v4Ev");}
void  S738C1 ::v5(){vfunc_called(this, "_ZN6S738C12v5Ev");}
void  S738C1 ::v6(){vfunc_called(this, "_ZN6S738C12v6Ev");}
void  S738C1 ::v7(){vfunc_called(this, "_ZN6S738C12v7Ev");}
void  S738C1 ::v8(){vfunc_called(this, "_ZN6S738C12v8Ev");}
void  S738C1 ::v9(){vfunc_called(this, "_ZN6S738C12v9Ev");}
void  S738C1 ::v10(){vfunc_called(this, "_ZN6S738C13v10Ev");}
S738C1 ::~S738C1(){ note_dtor("S738C1", this);} // tgen
S738C1 ::S738C1(){ note_ctor("S738C1", this);} // tgen

static void Test_S738C1()
{
  extern Class_Descriptor cd_S738C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,31)];
    init_test(&cd_S738C1, buf);
    S738C1 *dp, &lv = *(dp=new (buf) S738C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,120), "sizeof(S738C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S738C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S738C4*)(S738C3*)(S738C2*), 0, "S738C1");
    check_base_class_offset(lv, (S738C4*)(S738C3*)(S738C2*), 0, "S738C1");
    check_base_class_offset(lv, (S738C3*)(S738C2*), 0, "S738C1");
    check_base_class_offset(lv, (S738C2*), 0, "S738C1");
    check_field_offset(lv, s738c1f0, ABISELECT(152,84), "S738C1.s738c1f0");
    check_field_offset(lv, s738c1f1, ABISELECT(160,88), "S738C1.s738c1f1");
    check_field_offset(lv, s738c1f2, ABISELECT(168,96), "S738C1.s738c1f2");
    check_field_offset(lv, s738c1f3, ABISELECT(184,104), "S738C1.s738c1f3");
    test_class_info(&lv, &cd_S738C1);
    dp->~S738C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS738C1(Test_S738C1, "S738C1", ABISELECT(200,120));

#else // __cplusplus

extern void _ZN6S738C1C1Ev();
extern void _ZN6S738C1D1Ev();
Name_Map name_map_S738C1[] = {
  NSPAIR(_ZN6S738C1C1Ev),
  NSPAIR(_ZN6S738C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S738C4;
extern VTBL_ENTRY _ZTI6S738C4[];
extern  VTBL_ENTRY _ZTV6S738C4[];
extern Class_Descriptor cd_S738C3;
extern VTBL_ENTRY _ZTI6S738C3[];
extern  VTBL_ENTRY _ZTV6S738C3[];
extern Class_Descriptor cd_S738C2;
extern VTBL_ENTRY _ZTI6S738C2[];
extern  VTBL_ENTRY _ZTV6S738C2[];
static Base_Class bases_S738C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S738C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S738C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S738C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S738C1[];
extern void _ZN6S738C1D1Ev();
extern void _ZN6S738C1D0Ev();
extern void _ZN6S738C43v11Ev();
extern void _ZN6S738C43v12Ev();
extern void _ZN6S738C43v13Ev();
extern void _ZN6S738C43v14Ev();
extern void _ZN6S738C43v15Ev();
extern void _ZN6S738C33v16Ev();
extern void _ZN6S738C33v17Ev();
extern void _ZN6S738C33v18Ev();
extern void _ZN6S738C33v19Ev();
extern void _ZN6S738C33v20Ev();
extern void _ZN6S738C33v21Ev();
extern void _ZN6S738C33v22Ev();
extern void _ZN6S738C33v23Ev();
extern void _ZN6S738C33v24Ev();
extern void _ZN6S738C33v25Ev();
extern void _ZN6S738C33v26Ev();
extern void _ZN6S738C23v27Ev();
extern void _ZN6S738C23v28Ev();
extern void _ZN6S738C23v29Ev();
extern void _ZN6S738C23v30Ev();
extern void _ZN6S738C23v31Ev();
extern void _ZN6S738C23v32Ev();
extern void _ZN6S738C23v33Ev();
extern void _ZN6S738C23v34Ev();
extern void _ZN6S738C12v1Ev();
extern void _ZN6S738C12v2Ev();
extern void _ZN6S738C12v3Ev();
extern void _ZN6S738C12v4Ev();
extern void _ZN6S738C12v5Ev();
extern void _ZN6S738C12v6Ev();
extern void _ZN6S738C12v7Ev();
extern void _ZN6S738C12v8Ev();
extern void _ZN6S738C12v9Ev();
extern void _ZN6S738C13v10Ev();
static  VTBL_ENTRY vtc_S738C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S738C1[0]),
  (VTBL_ENTRY)&_ZN6S738C1D1Ev,
  (VTBL_ENTRY)&_ZN6S738C1D0Ev,
  (VTBL_ENTRY)&_ZN6S738C43v11Ev,
  (VTBL_ENTRY)&_ZN6S738C43v12Ev,
  (VTBL_ENTRY)&_ZN6S738C43v13Ev,
  (VTBL_ENTRY)&_ZN6S738C43v14Ev,
  (VTBL_ENTRY)&_ZN6S738C43v15Ev,
  (VTBL_ENTRY)&_ZN6S738C33v16Ev,
  (VTBL_ENTRY)&_ZN6S738C33v17Ev,
  (VTBL_ENTRY)&_ZN6S738C33v18Ev,
  (VTBL_ENTRY)&_ZN6S738C33v19Ev,
  (VTBL_ENTRY)&_ZN6S738C33v20Ev,
  (VTBL_ENTRY)&_ZN6S738C33v21Ev,
  (VTBL_ENTRY)&_ZN6S738C33v22Ev,
  (VTBL_ENTRY)&_ZN6S738C33v23Ev,
  (VTBL_ENTRY)&_ZN6S738C33v24Ev,
  (VTBL_ENTRY)&_ZN6S738C33v25Ev,
  (VTBL_ENTRY)&_ZN6S738C33v26Ev,
  (VTBL_ENTRY)&_ZN6S738C23v27Ev,
  (VTBL_ENTRY)&_ZN6S738C23v28Ev,
  (VTBL_ENTRY)&_ZN6S738C23v29Ev,
  (VTBL_ENTRY)&_ZN6S738C23v30Ev,
  (VTBL_ENTRY)&_ZN6S738C23v31Ev,
  (VTBL_ENTRY)&_ZN6S738C23v32Ev,
  (VTBL_ENTRY)&_ZN6S738C23v33Ev,
  (VTBL_ENTRY)&_ZN6S738C23v34Ev,
  (VTBL_ENTRY)&_ZN6S738C12v1Ev,
  (VTBL_ENTRY)&_ZN6S738C12v2Ev,
  (VTBL_ENTRY)&_ZN6S738C12v3Ev,
  (VTBL_ENTRY)&_ZN6S738C12v4Ev,
  (VTBL_ENTRY)&_ZN6S738C12v5Ev,
  (VTBL_ENTRY)&_ZN6S738C12v6Ev,
  (VTBL_ENTRY)&_ZN6S738C12v7Ev,
  (VTBL_ENTRY)&_ZN6S738C12v8Ev,
  (VTBL_ENTRY)&_ZN6S738C12v9Ev,
  (VTBL_ENTRY)&_ZN6S738C13v10Ev,
};
extern VTBL_ENTRY _ZTI6S738C1[];
extern  VTBL_ENTRY _ZTV6S738C1[];
Class_Descriptor cd_S738C1 = {  "S738C1", // class name
  bases_S738C1, 4,
  &(vtc_S738C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,120), // object size
  NSPAIRA(_ZTI6S738C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S738C1),38, //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  S767C4  : S770C5_nt {
  virtual void  v7(); // _ZN6S767C42v7Ev
  virtual void  v8(); // _ZN6S767C42v8Ev
  virtual void  v9(); // _ZN6S767C42v9Ev
  virtual void  v10(); // _ZN6S767C43v10Ev
  virtual void  v11(); // _ZN6S767C43v11Ev
  ~S767C4(); // tgen
  S767C4(); // tgen
};
//SIG(-1 S767C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S767C4 ::v7(){vfunc_called(this, "_ZN6S767C42v7Ev");}
void  S767C4 ::v8(){vfunc_called(this, "_ZN6S767C42v8Ev");}
void  S767C4 ::v9(){vfunc_called(this, "_ZN6S767C42v9Ev");}
void  S767C4 ::v10(){vfunc_called(this, "_ZN6S767C43v10Ev");}
void  S767C4 ::v11(){vfunc_called(this, "_ZN6S767C43v11Ev");}
S767C4 ::~S767C4(){ note_dtor("S767C4", this);} // tgen
S767C4 ::S767C4(){ note_ctor("S767C4", this);} // tgen

static void Test_S767C4()
{
  extern Class_Descriptor cd_S767C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S767C4, buf);
    S767C4 *dp, &lv = *(dp=new (buf) S767C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S767C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S767C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S767C4");
    test_class_info(&lv, &cd_S767C4);
    dp->~S767C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS767C4(Test_S767C4, "S767C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S767C4C1Ev();
extern void _ZN6S767C4D1Ev();
Name_Map name_map_S767C4[] = {
  NSPAIR(_ZN6S767C4C1Ev),
  NSPAIR(_ZN6S767C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S767C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S767C4[];
extern void _ZN6S767C4D1Ev();
extern void _ZN6S767C4D0Ev();
extern void _ZN6S767C42v7Ev();
extern void _ZN6S767C42v8Ev();
extern void _ZN6S767C42v9Ev();
extern void _ZN6S767C43v10Ev();
extern void _ZN6S767C43v11Ev();
static  VTBL_ENTRY vtc_S767C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S767C4[0]),
  (VTBL_ENTRY)&_ZN6S767C4D1Ev,
  (VTBL_ENTRY)&_ZN6S767C4D0Ev,
  (VTBL_ENTRY)&_ZN6S767C42v7Ev,
  (VTBL_ENTRY)&_ZN6S767C42v8Ev,
  (VTBL_ENTRY)&_ZN6S767C42v9Ev,
  (VTBL_ENTRY)&_ZN6S767C43v10Ev,
  (VTBL_ENTRY)&_ZN6S767C43v11Ev,
};
extern VTBL_ENTRY _ZTI6S767C4[];
extern  VTBL_ENTRY _ZTV6S767C4[];
Class_Descriptor cd_S767C4 = {  "S767C4", // class name
  bases_S767C4, 1,
  &(vtc_S767C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S767C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S767C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S767C3  : S767C4 {
  void *s767c3f0[3];
  ::S770C6_nt s767c3f1;
  virtual void  v12(); // _ZN6S767C33v12Ev
  virtual void  v13(); // _ZN6S767C33v13Ev
  virtual void  v14(); // _ZN6S767C33v14Ev
  virtual void  v15(); // _ZN6S767C33v15Ev
  virtual void  v16(); // _ZN6S767C33v16Ev
  virtual void  v17(); // _ZN6S767C33v17Ev
  virtual void  v18(); // _ZN6S767C33v18Ev
  virtual void  v19(); // _ZN6S767C33v19Ev
  virtual void  v20(); // _ZN6S767C33v20Ev
  virtual void  v21(); // _ZN6S767C33v21Ev
  virtual void  v22(); // _ZN6S767C33v22Ev
  ~S767C3(); // tgen
  S767C3(); // tgen
};
//SIG(-1 S767C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S767C3 ::v12(){vfunc_called(this, "_ZN6S767C33v12Ev");}
void  S767C3 ::v13(){vfunc_called(this, "_ZN6S767C33v13Ev");}
void  S767C3 ::v14(){vfunc_called(this, "_ZN6S767C33v14Ev");}
void  S767C3 ::v15(){vfunc_called(this, "_ZN6S767C33v15Ev");}
void  S767C3 ::v16(){vfunc_called(this, "_ZN6S767C33v16Ev");}
void  S767C3 ::v17(){vfunc_called(this, "_ZN6S767C33v17Ev");}
void  S767C3 ::v18(){vfunc_called(this, "_ZN6S767C33v18Ev");}
void  S767C3 ::v19(){vfunc_called(this, "_ZN6S767C33v19Ev");}
void  S767C3 ::v20(){vfunc_called(this, "_ZN6S767C33v20Ev");}
void  S767C3 ::v21(){vfunc_called(this, "_ZN6S767C33v21Ev");}
void  S767C3 ::v22(){vfunc_called(this, "_ZN6S767C33v22Ev");}
S767C3 ::~S767C3(){ note_dtor("S767C3", this);} // tgen
S767C3 ::S767C3(){ note_ctor("S767C3", this);} // tgen

static void Test_S767C3()
{
  extern Class_Descriptor cd_S767C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S767C3, buf);
    S767C3 *dp, &lv = *(dp=new (buf) S767C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S767C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S767C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S767C4*), 0, "S767C3");
    check_base_class_offset(lv, (S767C4*), 0, "S767C3");
    check_field_offset(lv, s767c3f0, ABISELECT(16,8), "S767C3.s767c3f0");
    check_field_offset(lv, s767c3f1, ABISELECT(40,20), "S767C3.s767c3f1");
    test_class_info(&lv, &cd_S767C3);
    dp->~S767C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS767C3(Test_S767C3, "S767C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S767C3C1Ev();
extern void _ZN6S767C3D1Ev();
Name_Map name_map_S767C3[] = {
  NSPAIR(_ZN6S767C3C1Ev),
  NSPAIR(_ZN6S767C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S767C4;
extern VTBL_ENTRY _ZTI6S767C4[];
extern  VTBL_ENTRY _ZTV6S767C4[];
static Base_Class bases_S767C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S767C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S767C3[];
extern void _ZN6S767C3D1Ev();
extern void _ZN6S767C3D0Ev();
extern void _ZN6S767C42v7Ev();
extern void _ZN6S767C42v8Ev();
extern void _ZN6S767C42v9Ev();
extern void _ZN6S767C43v10Ev();
extern void _ZN6S767C43v11Ev();
extern void _ZN6S767C33v12Ev();
extern void _ZN6S767C33v13Ev();
extern void _ZN6S767C33v14Ev();
extern void _ZN6S767C33v15Ev();
extern void _ZN6S767C33v16Ev();
extern void _ZN6S767C33v17Ev();
extern void _ZN6S767C33v18Ev();
extern void _ZN6S767C33v19Ev();
extern void _ZN6S767C33v20Ev();
extern void _ZN6S767C33v21Ev();
extern void _ZN6S767C33v22Ev();
static  VTBL_ENTRY vtc_S767C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S767C3[0]),
  (VTBL_ENTRY)&_ZN6S767C3D1Ev,
  (VTBL_ENTRY)&_ZN6S767C3D0Ev,
  (VTBL_ENTRY)&_ZN6S767C42v7Ev,
  (VTBL_ENTRY)&_ZN6S767C42v8Ev,
  (VTBL_ENTRY)&_ZN6S767C42v9Ev,
  (VTBL_ENTRY)&_ZN6S767C43v10Ev,
  (VTBL_ENTRY)&_ZN6S767C43v11Ev,
  (VTBL_ENTRY)&_ZN6S767C33v12Ev,
  (VTBL_ENTRY)&_ZN6S767C33v13Ev,
  (VTBL_ENTRY)&_ZN6S767C33v14Ev,
  (VTBL_ENTRY)&_ZN6S767C33v15Ev,
  (VTBL_ENTRY)&_ZN6S767C33v16Ev,
  (VTBL_ENTRY)&_ZN6S767C33v17Ev,
  (VTBL_ENTRY)&_ZN6S767C33v18Ev,
  (VTBL_ENTRY)&_ZN6S767C33v19Ev,
  (VTBL_ENTRY)&_ZN6S767C33v20Ev,
  (VTBL_ENTRY)&_ZN6S767C33v21Ev,
  (VTBL_ENTRY)&_ZN6S767C33v22Ev,
};
extern VTBL_ENTRY _ZTI6S767C3[];
extern  VTBL_ENTRY _ZTV6S767C3[];
Class_Descriptor cd_S767C3 = {  "S767C3", // class name
  bases_S767C3, 2,
  &(vtc_S767C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S767C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S767C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S767C2  : S767C3 {
  ::S770C6_nt s767c2f0;
  ::S770C9_nt s767c2f1;
  void *s767c2f2[3];
  virtual void  v23(); // _ZN6S767C23v23Ev
  virtual void  v24(); // _ZN6S767C23v24Ev
  virtual void  v25(); // _ZN6S767C23v25Ev
  virtual void  v26(); // _ZN6S767C23v26Ev
  virtual void  v27(); // _ZN6S767C23v27Ev
  virtual void  v28(); // _ZN6S767C23v28Ev
  virtual void  v29(); // _ZN6S767C23v29Ev
  virtual void  v30(); // _ZN6S767C23v30Ev
  ~S767C2(); // tgen
  S767C2(); // tgen
};
//SIG(-1 S767C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S767C2 ::v23(){vfunc_called(this, "_ZN6S767C23v23Ev");}
void  S767C2 ::v24(){vfunc_called(this, "_ZN6S767C23v24Ev");}
void  S767C2 ::v25(){vfunc_called(this, "_ZN6S767C23v25Ev");}
void  S767C2 ::v26(){vfunc_called(this, "_ZN6S767C23v26Ev");}
void  S767C2 ::v27(){vfunc_called(this, "_ZN6S767C23v27Ev");}
void  S767C2 ::v28(){vfunc_called(this, "_ZN6S767C23v28Ev");}
void  S767C2 ::v29(){vfunc_called(this, "_ZN6S767C23v29Ev");}
void  S767C2 ::v30(){vfunc_called(this, "_ZN6S767C23v30Ev");}
S767C2 ::~S767C2(){ note_dtor("S767C2", this);} // tgen
S767C2 ::S767C2(){ note_ctor("S767C2", this);} // tgen

static void Test_S767C2()
{
  extern Class_Descriptor cd_S767C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S767C2, buf);
    S767C2 *dp, &lv = *(dp=new (buf) S767C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S767C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S767C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S767C4*)(S767C3*), 0, "S767C2");
    check_base_class_offset(lv, (S767C4*)(S767C3*), 0, "S767C2");
    check_base_class_offset(lv, (S767C3*), 0, "S767C2");
    check_field_offset(lv, s767c2f0, ABISELECT(80,44), "S767C2.s767c2f0");
    check_field_offset(lv, s767c2f1, ABISELECT(120,68), "S767C2.s767c2f1");
    check_field_offset(lv, s767c2f2, ABISELECT(128,72), "S767C2.s767c2f2");
    test_class_info(&lv, &cd_S767C2);
    dp->~S767C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS767C2(Test_S767C2, "S767C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S767C2C1Ev();
extern void _ZN6S767C2D1Ev();
Name_Map name_map_S767C2[] = {
  NSPAIR(_ZN6S767C2C1Ev),
  NSPAIR(_ZN6S767C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S767C4;
extern VTBL_ENTRY _ZTI6S767C4[];
extern  VTBL_ENTRY _ZTV6S767C4[];
extern Class_Descriptor cd_S767C3;
extern VTBL_ENTRY _ZTI6S767C3[];
extern  VTBL_ENTRY _ZTV6S767C3[];
static Base_Class bases_S767C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S767C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S767C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S767C2[];
extern void _ZN6S767C2D1Ev();
extern void _ZN6S767C2D0Ev();
extern void _ZN6S767C42v7Ev();
extern void _ZN6S767C42v8Ev();
extern void _ZN6S767C42v9Ev();
extern void _ZN6S767C43v10Ev();
extern void _ZN6S767C43v11Ev();
extern void _ZN6S767C33v12Ev();
extern void _ZN6S767C33v13Ev();
extern void _ZN6S767C33v14Ev();
extern void _ZN6S767C33v15Ev();
extern void _ZN6S767C33v16Ev();
extern void _ZN6S767C33v17Ev();
extern void _ZN6S767C33v18Ev();
extern void _ZN6S767C33v19Ev();
extern void _ZN6S767C33v20Ev();
extern void _ZN6S767C33v21Ev();
extern void _ZN6S767C33v22Ev();
extern void _ZN6S767C23v23Ev();
extern void _ZN6S767C23v24Ev();
extern void _ZN6S767C23v25Ev();
extern void _ZN6S767C23v26Ev();
extern void _ZN6S767C23v27Ev();
extern void _ZN6S767C23v28Ev();
extern void _ZN6S767C23v29Ev();
extern void _ZN6S767C23v30Ev();
static  VTBL_ENTRY vtc_S767C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S767C2[0]),
  (VTBL_ENTRY)&_ZN6S767C2D1Ev,
  (VTBL_ENTRY)&_ZN6S767C2D0Ev,
  (VTBL_ENTRY)&_ZN6S767C42v7Ev,
  (VTBL_ENTRY)&_ZN6S767C42v8Ev,
  (VTBL_ENTRY)&_ZN6S767C42v9Ev,
  (VTBL_ENTRY)&_ZN6S767C43v10Ev,
  (VTBL_ENTRY)&_ZN6S767C43v11Ev,
  (VTBL_ENTRY)&_ZN6S767C33v12Ev,
  (VTBL_ENTRY)&_ZN6S767C33v13Ev,
  (VTBL_ENTRY)&_ZN6S767C33v14Ev,
  (VTBL_ENTRY)&_ZN6S767C33v15Ev,
  (VTBL_ENTRY)&_ZN6S767C33v16Ev,
  (VTBL_ENTRY)&_ZN6S767C33v17Ev,
  (VTBL_ENTRY)&_ZN6S767C33v18Ev,
  (VTBL_ENTRY)&_ZN6S767C33v19Ev,
  (VTBL_ENTRY)&_ZN6S767C33v20Ev,
  (VTBL_ENTRY)&_ZN6S767C33v21Ev,
  (VTBL_ENTRY)&_ZN6S767C33v22Ev,
  (VTBL_ENTRY)&_ZN6S767C23v23Ev,
  (VTBL_ENTRY)&_ZN6S767C23v24Ev,
  (VTBL_ENTRY)&_ZN6S767C23v25Ev,
  (VTBL_ENTRY)&_ZN6S767C23v26Ev,
  (VTBL_ENTRY)&_ZN6S767C23v27Ev,
  (VTBL_ENTRY)&_ZN6S767C23v28Ev,
  (VTBL_ENTRY)&_ZN6S767C23v29Ev,
  (VTBL_ENTRY)&_ZN6S767C23v30Ev,
};
extern VTBL_ENTRY _ZTI6S767C2[];
extern  VTBL_ENTRY _ZTV6S767C2[];
Class_Descriptor cd_S767C2 = {  "S767C2", // class name
  bases_S767C2, 3,
  &(vtc_S767C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S767C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S767C2),28, //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  S767C1  : S767C2 {
  void *s767c1f0;
  ::S2215C20_nt s767c1f1;
  ::S2215C20_nt s767c1f2;
  ::S744C15_nt s767c1f3;
  virtual void  v1(); // _ZN6S767C12v1Ev
  virtual void  v2(); // _ZN6S767C12v2Ev
  virtual void  v3(); // _ZN6S767C12v3Ev
  virtual void  v4(); // _ZN6S767C12v4Ev
  virtual void  v5(); // _ZN6S767C12v5Ev
  virtual void  v6(); // _ZN6S767C12v6Ev
  ~S767C1(); // tgen
  S767C1(); // tgen
};
//SIG(1 S767C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v7 v8 v9 v10 v11} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v23 v24 v25 v26 v27 v28 v29 v30 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 Fp FC10{ m Fp Fi FC11{ m}} FC10 FC12{ m Fp}}


void  S767C1 ::v1(){vfunc_called(this, "_ZN6S767C12v1Ev");}
void  S767C1 ::v2(){vfunc_called(this, "_ZN6S767C12v2Ev");}
void  S767C1 ::v3(){vfunc_called(this, "_ZN6S767C12v3Ev");}
void  S767C1 ::v4(){vfunc_called(this, "_ZN6S767C12v4Ev");}
void  S767C1 ::v5(){vfunc_called(this, "_ZN6S767C12v5Ev");}
void  S767C1 ::v6(){vfunc_called(this, "_ZN6S767C12v6Ev");}
S767C1 ::~S767C1(){ note_dtor("S767C1", this);} // tgen
S767C1 ::S767C1(){ note_ctor("S767C1", this);} // tgen

static void Test_S767C1()
{
  extern Class_Descriptor cd_S767C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,30)];
    init_test(&cd_S767C1, buf);
    S767C1 *dp, &lv = *(dp=new (buf) S767C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,116), "sizeof(S767C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S767C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S767C4*)(S767C3*)(S767C2*), 0, "S767C1");
    check_base_class_offset(lv, (S767C4*)(S767C3*)(S767C2*), 0, "S767C1");
    check_base_class_offset(lv, (S767C3*)(S767C2*), 0, "S767C1");
    check_base_class_offset(lv, (S767C2*), 0, "S767C1");
    check_field_offset(lv, s767c1f0, ABISELECT(152,84), "S767C1.s767c1f0");
    check_field_offset(lv, s767c1f1, ABISELECT(160,88), "S767C1.s767c1f1");
    check_field_offset(lv, s767c1f2, ABISELECT(176,100), "S767C1.s767c1f2");
    check_field_offset(lv, s767c1f3, ABISELECT(192,112), "S767C1.s767c1f3");
    test_class_info(&lv, &cd_S767C1);
    dp->~S767C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS767C1(Test_S767C1, "S767C1", ABISELECT(200,116));

#else // __cplusplus

extern void _ZN6S767C1C1Ev();
extern void _ZN6S767C1D1Ev();
Name_Map name_map_S767C1[] = {
  NSPAIR(_ZN6S767C1C1Ev),
  NSPAIR(_ZN6S767C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S767C4;
extern VTBL_ENTRY _ZTI6S767C4[];
extern  VTBL_ENTRY _ZTV6S767C4[];
extern Class_Descriptor cd_S767C3;
extern VTBL_ENTRY _ZTI6S767C3[];
extern  VTBL_ENTRY _ZTV6S767C3[];
extern Class_Descriptor cd_S767C2;
extern VTBL_ENTRY _ZTI6S767C2[];
extern  VTBL_ENTRY _ZTV6S767C2[];
static Base_Class bases_S767C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S767C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S767C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S767C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S767C1[];
extern void _ZN6S767C1D1Ev();
extern void _ZN6S767C1D0Ev();
extern void _ZN6S767C42v7Ev();
extern void _ZN6S767C42v8Ev();
extern void _ZN6S767C42v9Ev();
extern void _ZN6S767C43v10Ev();
extern void _ZN6S767C43v11Ev();
extern void _ZN6S767C33v12Ev();
extern void _ZN6S767C33v13Ev();
extern void _ZN6S767C33v14Ev();
extern void _ZN6S767C33v15Ev();
extern void _ZN6S767C33v16Ev();
extern void _ZN6S767C33v17Ev();
extern void _ZN6S767C33v18Ev();
extern void _ZN6S767C33v19Ev();
extern void _ZN6S767C33v20Ev();
extern void _ZN6S767C33v21Ev();
extern void _ZN6S767C33v22Ev();
extern void _ZN6S767C23v23Ev();
extern void _ZN6S767C23v24Ev();
extern void _ZN6S767C23v25Ev();
extern void _ZN6S767C23v26Ev();
extern void _ZN6S767C23v27Ev();
extern void _ZN6S767C23v28Ev();
extern void _ZN6S767C23v29Ev();
extern void _ZN6S767C23v30Ev();
extern void _ZN6S767C12v1Ev();
extern void _ZN6S767C12v2Ev();
extern void _ZN6S767C12v3Ev();
extern void _ZN6S767C12v4Ev();
extern void _ZN6S767C12v5Ev();
extern void _ZN6S767C12v6Ev();
static  VTBL_ENTRY vtc_S767C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S767C1[0]),
  (VTBL_ENTRY)&_ZN6S767C1D1Ev,
  (VTBL_ENTRY)&_ZN6S767C1D0Ev,
  (VTBL_ENTRY)&_ZN6S767C42v7Ev,
  (VTBL_ENTRY)&_ZN6S767C42v8Ev,
  (VTBL_ENTRY)&_ZN6S767C42v9Ev,
  (VTBL_ENTRY)&_ZN6S767C43v10Ev,
  (VTBL_ENTRY)&_ZN6S767C43v11Ev,
  (VTBL_ENTRY)&_ZN6S767C33v12Ev,
  (VTBL_ENTRY)&_ZN6S767C33v13Ev,
  (VTBL_ENTRY)&_ZN6S767C33v14Ev,
  (VTBL_ENTRY)&_ZN6S767C33v15Ev,
  (VTBL_ENTRY)&_ZN6S767C33v16Ev,
  (VTBL_ENTRY)&_ZN6S767C33v17Ev,
  (VTBL_ENTRY)&_ZN6S767C33v18Ev,
  (VTBL_ENTRY)&_ZN6S767C33v19Ev,
  (VTBL_ENTRY)&_ZN6S767C33v20Ev,
  (VTBL_ENTRY)&_ZN6S767C33v21Ev,
  (VTBL_ENTRY)&_ZN6S767C33v22Ev,
  (VTBL_ENTRY)&_ZN6S767C23v23Ev,
  (VTBL_ENTRY)&_ZN6S767C23v24Ev,
  (VTBL_ENTRY)&_ZN6S767C23v25Ev,
  (VTBL_ENTRY)&_ZN6S767C23v26Ev,
  (VTBL_ENTRY)&_ZN6S767C23v27Ev,
  (VTBL_ENTRY)&_ZN6S767C23v28Ev,
  (VTBL_ENTRY)&_ZN6S767C23v29Ev,
  (VTBL_ENTRY)&_ZN6S767C23v30Ev,
  (VTBL_ENTRY)&_ZN6S767C12v1Ev,
  (VTBL_ENTRY)&_ZN6S767C12v2Ev,
  (VTBL_ENTRY)&_ZN6S767C12v3Ev,
  (VTBL_ENTRY)&_ZN6S767C12v4Ev,
  (VTBL_ENTRY)&_ZN6S767C12v5Ev,
  (VTBL_ENTRY)&_ZN6S767C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S767C1[];
extern  VTBL_ENTRY _ZTV6S767C1[];
Class_Descriptor cd_S767C1 = {  "S767C1", // class name
  bases_S767C1, 4,
  &(vtc_S767C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,116), // object size
  NSPAIRA(_ZTI6S767C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S767C1),34, //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  S768C4  : S770C5_nt {
  virtual void  v7(); // _ZN6S768C42v7Ev
  virtual void  v8(); // _ZN6S768C42v8Ev
  virtual void  v9(); // _ZN6S768C42v9Ev
  virtual void  v10(); // _ZN6S768C43v10Ev
  virtual void  v11(); // _ZN6S768C43v11Ev
  ~S768C4(); // tgen
  S768C4(); // tgen
};
//SIG(-1 S768C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S768C4 ::v7(){vfunc_called(this, "_ZN6S768C42v7Ev");}
void  S768C4 ::v8(){vfunc_called(this, "_ZN6S768C42v8Ev");}
void  S768C4 ::v9(){vfunc_called(this, "_ZN6S768C42v9Ev");}
void  S768C4 ::v10(){vfunc_called(this, "_ZN6S768C43v10Ev");}
void  S768C4 ::v11(){vfunc_called(this, "_ZN6S768C43v11Ev");}
S768C4 ::~S768C4(){ note_dtor("S768C4", this);} // tgen
S768C4 ::S768C4(){ note_ctor("S768C4", this);} // tgen

static void Test_S768C4()
{
  extern Class_Descriptor cd_S768C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S768C4, buf);
    S768C4 *dp, &lv = *(dp=new (buf) S768C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S768C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S768C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S768C4");
    test_class_info(&lv, &cd_S768C4);
    dp->~S768C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS768C4(Test_S768C4, "S768C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S768C4C1Ev();
extern void _ZN6S768C4D1Ev();
Name_Map name_map_S768C4[] = {
  NSPAIR(_ZN6S768C4C1Ev),
  NSPAIR(_ZN6S768C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S768C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S768C4[];
extern void _ZN6S768C4D1Ev();
extern void _ZN6S768C4D0Ev();
extern void _ZN6S768C42v7Ev();
extern void _ZN6S768C42v8Ev();
extern void _ZN6S768C42v9Ev();
extern void _ZN6S768C43v10Ev();
extern void _ZN6S768C43v11Ev();
static  VTBL_ENTRY vtc_S768C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S768C4[0]),
  (VTBL_ENTRY)&_ZN6S768C4D1Ev,
  (VTBL_ENTRY)&_ZN6S768C4D0Ev,
  (VTBL_ENTRY)&_ZN6S768C42v7Ev,
  (VTBL_ENTRY)&_ZN6S768C42v8Ev,
  (VTBL_ENTRY)&_ZN6S768C42v9Ev,
  (VTBL_ENTRY)&_ZN6S768C43v10Ev,
  (VTBL_ENTRY)&_ZN6S768C43v11Ev,
};
extern VTBL_ENTRY _ZTI6S768C4[];
extern  VTBL_ENTRY _ZTV6S768C4[];
Class_Descriptor cd_S768C4 = {  "S768C4", // class name
  bases_S768C4, 1,
  &(vtc_S768C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S768C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S768C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S768C3  : S768C4 {
  void *s768c3f0[3];
  ::S770C6_nt s768c3f1;
  virtual void  v12(); // _ZN6S768C33v12Ev
  virtual void  v13(); // _ZN6S768C33v13Ev
  virtual void  v14(); // _ZN6S768C33v14Ev
  virtual void  v15(); // _ZN6S768C33v15Ev
  virtual void  v16(); // _ZN6S768C33v16Ev
  virtual void  v17(); // _ZN6S768C33v17Ev
  virtual void  v18(); // _ZN6S768C33v18Ev
  virtual void  v19(); // _ZN6S768C33v19Ev
  virtual void  v20(); // _ZN6S768C33v20Ev
  virtual void  v21(); // _ZN6S768C33v21Ev
  virtual void  v22(); // _ZN6S768C33v22Ev
  ~S768C3(); // tgen
  S768C3(); // tgen
};
//SIG(-1 S768C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S768C3 ::v12(){vfunc_called(this, "_ZN6S768C33v12Ev");}
void  S768C3 ::v13(){vfunc_called(this, "_ZN6S768C33v13Ev");}
void  S768C3 ::v14(){vfunc_called(this, "_ZN6S768C33v14Ev");}
void  S768C3 ::v15(){vfunc_called(this, "_ZN6S768C33v15Ev");}
void  S768C3 ::v16(){vfunc_called(this, "_ZN6S768C33v16Ev");}
void  S768C3 ::v17(){vfunc_called(this, "_ZN6S768C33v17Ev");}
void  S768C3 ::v18(){vfunc_called(this, "_ZN6S768C33v18Ev");}
void  S768C3 ::v19(){vfunc_called(this, "_ZN6S768C33v19Ev");}
void  S768C3 ::v20(){vfunc_called(this, "_ZN6S768C33v20Ev");}
void  S768C3 ::v21(){vfunc_called(this, "_ZN6S768C33v21Ev");}
void  S768C3 ::v22(){vfunc_called(this, "_ZN6S768C33v22Ev");}
S768C3 ::~S768C3(){ note_dtor("S768C3", this);} // tgen
S768C3 ::S768C3(){ note_ctor("S768C3", this);} // tgen

static void Test_S768C3()
{
  extern Class_Descriptor cd_S768C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S768C3, buf);
    S768C3 *dp, &lv = *(dp=new (buf) S768C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S768C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S768C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S768C4*), 0, "S768C3");
    check_base_class_offset(lv, (S768C4*), 0, "S768C3");
    check_field_offset(lv, s768c3f0, ABISELECT(16,8), "S768C3.s768c3f0");
    check_field_offset(lv, s768c3f1, ABISELECT(40,20), "S768C3.s768c3f1");
    test_class_info(&lv, &cd_S768C3);
    dp->~S768C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS768C3(Test_S768C3, "S768C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S768C3C1Ev();
extern void _ZN6S768C3D1Ev();
Name_Map name_map_S768C3[] = {
  NSPAIR(_ZN6S768C3C1Ev),
  NSPAIR(_ZN6S768C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S768C4;
extern VTBL_ENTRY _ZTI6S768C4[];
extern  VTBL_ENTRY _ZTV6S768C4[];
static Base_Class bases_S768C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S768C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S768C3[];
extern void _ZN6S768C3D1Ev();
extern void _ZN6S768C3D0Ev();
extern void _ZN6S768C42v7Ev();
extern void _ZN6S768C42v8Ev();
extern void _ZN6S768C42v9Ev();
extern void _ZN6S768C43v10Ev();
extern void _ZN6S768C43v11Ev();
extern void _ZN6S768C33v12Ev();
extern void _ZN6S768C33v13Ev();
extern void _ZN6S768C33v14Ev();
extern void _ZN6S768C33v15Ev();
extern void _ZN6S768C33v16Ev();
extern void _ZN6S768C33v17Ev();
extern void _ZN6S768C33v18Ev();
extern void _ZN6S768C33v19Ev();
extern void _ZN6S768C33v20Ev();
extern void _ZN6S768C33v21Ev();
extern void _ZN6S768C33v22Ev();
static  VTBL_ENTRY vtc_S768C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S768C3[0]),
  (VTBL_ENTRY)&_ZN6S768C3D1Ev,
  (VTBL_ENTRY)&_ZN6S768C3D0Ev,
  (VTBL_ENTRY)&_ZN6S768C42v7Ev,
  (VTBL_ENTRY)&_ZN6S768C42v8Ev,
  (VTBL_ENTRY)&_ZN6S768C42v9Ev,
  (VTBL_ENTRY)&_ZN6S768C43v10Ev,
  (VTBL_ENTRY)&_ZN6S768C43v11Ev,
  (VTBL_ENTRY)&_ZN6S768C33v12Ev,
  (VTBL_ENTRY)&_ZN6S768C33v13Ev,
  (VTBL_ENTRY)&_ZN6S768C33v14Ev,
  (VTBL_ENTRY)&_ZN6S768C33v15Ev,
  (VTBL_ENTRY)&_ZN6S768C33v16Ev,
  (VTBL_ENTRY)&_ZN6S768C33v17Ev,
  (VTBL_ENTRY)&_ZN6S768C33v18Ev,
  (VTBL_ENTRY)&_ZN6S768C33v19Ev,
  (VTBL_ENTRY)&_ZN6S768C33v20Ev,
  (VTBL_ENTRY)&_ZN6S768C33v21Ev,
  (VTBL_ENTRY)&_ZN6S768C33v22Ev,
};
extern VTBL_ENTRY _ZTI6S768C3[];
extern  VTBL_ENTRY _ZTV6S768C3[];
Class_Descriptor cd_S768C3 = {  "S768C3", // class name
  bases_S768C3, 2,
  &(vtc_S768C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S768C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S768C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S768C2  : S768C3 {
  ::S770C6_nt s768c2f0;
  ::S770C9_nt s768c2f1;
  void *s768c2f2[3];
  virtual void  v23(); // _ZN6S768C23v23Ev
  virtual void  v24(); // _ZN6S768C23v24Ev
  virtual void  v25(); // _ZN6S768C23v25Ev
  virtual void  v26(); // _ZN6S768C23v26Ev
  virtual void  v27(); // _ZN6S768C23v27Ev
  virtual void  v28(); // _ZN6S768C23v28Ev
  virtual void  v29(); // _ZN6S768C23v29Ev
  virtual void  v30(); // _ZN6S768C23v30Ev
  ~S768C2(); // tgen
  S768C2(); // tgen
};
//SIG(-1 S768C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S768C2 ::v23(){vfunc_called(this, "_ZN6S768C23v23Ev");}
void  S768C2 ::v24(){vfunc_called(this, "_ZN6S768C23v24Ev");}
void  S768C2 ::v25(){vfunc_called(this, "_ZN6S768C23v25Ev");}
void  S768C2 ::v26(){vfunc_called(this, "_ZN6S768C23v26Ev");}
void  S768C2 ::v27(){vfunc_called(this, "_ZN6S768C23v27Ev");}
void  S768C2 ::v28(){vfunc_called(this, "_ZN6S768C23v28Ev");}
void  S768C2 ::v29(){vfunc_called(this, "_ZN6S768C23v29Ev");}
void  S768C2 ::v30(){vfunc_called(this, "_ZN6S768C23v30Ev");}
S768C2 ::~S768C2(){ note_dtor("S768C2", this);} // tgen
S768C2 ::S768C2(){ note_ctor("S768C2", this);} // tgen

static void Test_S768C2()
{
  extern Class_Descriptor cd_S768C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S768C2, buf);
    S768C2 *dp, &lv = *(dp=new (buf) S768C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S768C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S768C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S768C4*)(S768C3*), 0, "S768C2");
    check_base_class_offset(lv, (S768C4*)(S768C3*), 0, "S768C2");
    check_base_class_offset(lv, (S768C3*), 0, "S768C2");
    check_field_offset(lv, s768c2f0, ABISELECT(80,44), "S768C2.s768c2f0");
    check_field_offset(lv, s768c2f1, ABISELECT(120,68), "S768C2.s768c2f1");
    check_field_offset(lv, s768c2f2, ABISELECT(128,72), "S768C2.s768c2f2");
    test_class_info(&lv, &cd_S768C2);
    dp->~S768C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS768C2(Test_S768C2, "S768C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S768C2C1Ev();
extern void _ZN6S768C2D1Ev();
Name_Map name_map_S768C2[] = {
  NSPAIR(_ZN6S768C2C1Ev),
  NSPAIR(_ZN6S768C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S768C4;
extern VTBL_ENTRY _ZTI6S768C4[];
extern  VTBL_ENTRY _ZTV6S768C4[];
extern Class_Descriptor cd_S768C3;
extern VTBL_ENTRY _ZTI6S768C3[];
extern  VTBL_ENTRY _ZTV6S768C3[];
static Base_Class bases_S768C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S768C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S768C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S768C2[];
extern void _ZN6S768C2D1Ev();
extern void _ZN6S768C2D0Ev();
extern void _ZN6S768C42v7Ev();
extern void _ZN6S768C42v8Ev();
extern void _ZN6S768C42v9Ev();
extern void _ZN6S768C43v10Ev();
extern void _ZN6S768C43v11Ev();
extern void _ZN6S768C33v12Ev();
extern void _ZN6S768C33v13Ev();
extern void _ZN6S768C33v14Ev();
extern void _ZN6S768C33v15Ev();
extern void _ZN6S768C33v16Ev();
extern void _ZN6S768C33v17Ev();
extern void _ZN6S768C33v18Ev();
extern void _ZN6S768C33v19Ev();
extern void _ZN6S768C33v20Ev();
extern void _ZN6S768C33v21Ev();
extern void _ZN6S768C33v22Ev();
extern void _ZN6S768C23v23Ev();
extern void _ZN6S768C23v24Ev();
extern void _ZN6S768C23v25Ev();
extern void _ZN6S768C23v26Ev();
extern void _ZN6S768C23v27Ev();
extern void _ZN6S768C23v28Ev();
extern void _ZN6S768C23v29Ev();
extern void _ZN6S768C23v30Ev();
static  VTBL_ENTRY vtc_S768C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S768C2[0]),
  (VTBL_ENTRY)&_ZN6S768C2D1Ev,
  (VTBL_ENTRY)&_ZN6S768C2D0Ev,
  (VTBL_ENTRY)&_ZN6S768C42v7Ev,
  (VTBL_ENTRY)&_ZN6S768C42v8Ev,
  (VTBL_ENTRY)&_ZN6S768C42v9Ev,
  (VTBL_ENTRY)&_ZN6S768C43v10Ev,
  (VTBL_ENTRY)&_ZN6S768C43v11Ev,
  (VTBL_ENTRY)&_ZN6S768C33v12Ev,
  (VTBL_ENTRY)&_ZN6S768C33v13Ev,
  (VTBL_ENTRY)&_ZN6S768C33v14Ev,
  (VTBL_ENTRY)&_ZN6S768C33v15Ev,
  (VTBL_ENTRY)&_ZN6S768C33v16Ev,
  (VTBL_ENTRY)&_ZN6S768C33v17Ev,
  (VTBL_ENTRY)&_ZN6S768C33v18Ev,
  (VTBL_ENTRY)&_ZN6S768C33v19Ev,
  (VTBL_ENTRY)&_ZN6S768C33v20Ev,
  (VTBL_ENTRY)&_ZN6S768C33v21Ev,
  (VTBL_ENTRY)&_ZN6S768C33v22Ev,
  (VTBL_ENTRY)&_ZN6S768C23v23Ev,
  (VTBL_ENTRY)&_ZN6S768C23v24Ev,
  (VTBL_ENTRY)&_ZN6S768C23v25Ev,
  (VTBL_ENTRY)&_ZN6S768C23v26Ev,
  (VTBL_ENTRY)&_ZN6S768C23v27Ev,
  (VTBL_ENTRY)&_ZN6S768C23v28Ev,
  (VTBL_ENTRY)&_ZN6S768C23v29Ev,
  (VTBL_ENTRY)&_ZN6S768C23v30Ev,
};
extern VTBL_ENTRY _ZTI6S768C2[];
extern  VTBL_ENTRY _ZTV6S768C2[];
Class_Descriptor cd_S768C2 = {  "S768C2", // class name
  bases_S768C2, 3,
  &(vtc_S768C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S768C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S768C2),28, //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  S768C1  : S768C2 {
  void *s768c1f0;
  int s768c1f1[3];
  char s768c1f2[255];
  ::S744C15_nt s768c1f3;
  char s768c1f4;
  int s768c1f5;
  virtual void  v1(); // _ZN6S768C12v1Ev
  virtual void  v2(); // _ZN6S768C12v2Ev
  virtual void  v3(); // _ZN6S768C12v3Ev
  virtual void  v4(); // _ZN6S768C12v4Ev
  virtual void  v5(); // _ZN6S768C12v5Ev
  virtual void  v6(); // _ZN6S768C12v6Ev
  ~S768C1(); // tgen
  S768C1(); // tgen
};
//SIG(1 S768C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v7 v8 v9 v10 v11} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v23 v24 v25 v26 v27 v28 v29 v30 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 Fp Fi[3] Fc[255] FC10{ m Fp} Fc Fi}


void  S768C1 ::v1(){vfunc_called(this, "_ZN6S768C12v1Ev");}
void  S768C1 ::v2(){vfunc_called(this, "_ZN6S768C12v2Ev");}
void  S768C1 ::v3(){vfunc_called(this, "_ZN6S768C12v3Ev");}
void  S768C1 ::v4(){vfunc_called(this, "_ZN6S768C12v4Ev");}
void  S768C1 ::v5(){vfunc_called(this, "_ZN6S768C12v5Ev");}
void  S768C1 ::v6(){vfunc_called(this, "_ZN6S768C12v6Ev");}
S768C1 ::~S768C1(){ note_dtor("S768C1", this);} // tgen
S768C1 ::S768C1(){ note_ctor("S768C1", this);} // tgen

static void Test_S768C1()
{
  extern Class_Descriptor cd_S768C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(57,93)];
    init_test(&cd_S768C1, buf);
    S768C1 *dp, &lv = *(dp=new (buf) S768C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,368), "sizeof(S768C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S768C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S768C4*)(S768C3*)(S768C2*), 0, "S768C1");
    check_base_class_offset(lv, (S768C4*)(S768C3*)(S768C2*), 0, "S768C1");
    check_base_class_offset(lv, (S768C3*)(S768C2*), 0, "S768C1");
    check_base_class_offset(lv, (S768C2*), 0, "S768C1");
    check_field_offset(lv, s768c1f0, ABISELECT(152,84), "S768C1.s768c1f0");
    check_field_offset(lv, s768c1f1, ABISELECT(160,88), "S768C1.s768c1f1");
    check_field_offset(lv, s768c1f2, ABISELECT(172,100), "S768C1.s768c1f2");
    check_field_offset(lv, s768c1f3, ABISELECT(432,356), "S768C1.s768c1f3");
    check_field_offset(lv, s768c1f4, ABISELECT(440,360), "S768C1.s768c1f4");
    check_field_offset(lv, s768c1f5, ABISELECT(444,364), "S768C1.s768c1f5");
    test_class_info(&lv, &cd_S768C1);
    dp->~S768C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS768C1(Test_S768C1, "S768C1", ABISELECT(448,368));

#else // __cplusplus

extern void _ZN6S768C1C1Ev();
extern void _ZN6S768C1D1Ev();
Name_Map name_map_S768C1[] = {
  NSPAIR(_ZN6S768C1C1Ev),
  NSPAIR(_ZN6S768C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S768C4;
extern VTBL_ENTRY _ZTI6S768C4[];
extern  VTBL_ENTRY _ZTV6S768C4[];
extern Class_Descriptor cd_S768C3;
extern VTBL_ENTRY _ZTI6S768C3[];
extern  VTBL_ENTRY _ZTV6S768C3[];
extern Class_Descriptor cd_S768C2;
extern VTBL_ENTRY _ZTI6S768C2[];
extern  VTBL_ENTRY _ZTV6S768C2[];
static Base_Class bases_S768C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S768C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S768C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S768C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S768C1[];
extern void _ZN6S768C1D1Ev();
extern void _ZN6S768C1D0Ev();
extern void _ZN6S768C42v7Ev();
extern void _ZN6S768C42v8Ev();
extern void _ZN6S768C42v9Ev();
extern void _ZN6S768C43v10Ev();
extern void _ZN6S768C43v11Ev();
extern void _ZN6S768C33v12Ev();
extern void _ZN6S768C33v13Ev();
extern void _ZN6S768C33v14Ev();
extern void _ZN6S768C33v15Ev();
extern void _ZN6S768C33v16Ev();
extern void _ZN6S768C33v17Ev();
extern void _ZN6S768C33v18Ev();
extern void _ZN6S768C33v19Ev();
extern void _ZN6S768C33v20Ev();
extern void _ZN6S768C33v21Ev();
extern void _ZN6S768C33v22Ev();
extern void _ZN6S768C23v23Ev();
extern void _ZN6S768C23v24Ev();
extern void _ZN6S768C23v25Ev();
extern void _ZN6S768C23v26Ev();
extern void _ZN6S768C23v27Ev();
extern void _ZN6S768C23v28Ev();
extern void _ZN6S768C23v29Ev();
extern void _ZN6S768C23v30Ev();
extern void _ZN6S768C12v1Ev();
extern void _ZN6S768C12v2Ev();
extern void _ZN6S768C12v3Ev();
extern void _ZN6S768C12v4Ev();
extern void _ZN6S768C12v5Ev();
extern void _ZN6S768C12v6Ev();
static  VTBL_ENTRY vtc_S768C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S768C1[0]),
  (VTBL_ENTRY)&_ZN6S768C1D1Ev,
  (VTBL_ENTRY)&_ZN6S768C1D0Ev,
  (VTBL_ENTRY)&_ZN6S768C42v7Ev,
  (VTBL_ENTRY)&_ZN6S768C42v8Ev,
  (VTBL_ENTRY)&_ZN6S768C42v9Ev,
  (VTBL_ENTRY)&_ZN6S768C43v10Ev,
  (VTBL_ENTRY)&_ZN6S768C43v11Ev,
  (VTBL_ENTRY)&_ZN6S768C33v12Ev,
  (VTBL_ENTRY)&_ZN6S768C33v13Ev,
  (VTBL_ENTRY)&_ZN6S768C33v14Ev,
  (VTBL_ENTRY)&_ZN6S768C33v15Ev,
  (VTBL_ENTRY)&_ZN6S768C33v16Ev,
  (VTBL_ENTRY)&_ZN6S768C33v17Ev,
  (VTBL_ENTRY)&_ZN6S768C33v18Ev,
  (VTBL_ENTRY)&_ZN6S768C33v19Ev,
  (VTBL_ENTRY)&_ZN6S768C33v20Ev,
  (VTBL_ENTRY)&_ZN6S768C33v21Ev,
  (VTBL_ENTRY)&_ZN6S768C33v22Ev,
  (VTBL_ENTRY)&_ZN6S768C23v23Ev,
  (VTBL_ENTRY)&_ZN6S768C23v24Ev,
  (VTBL_ENTRY)&_ZN6S768C23v25Ev,
  (VTBL_ENTRY)&_ZN6S768C23v26Ev,
  (VTBL_ENTRY)&_ZN6S768C23v27Ev,
  (VTBL_ENTRY)&_ZN6S768C23v28Ev,
  (VTBL_ENTRY)&_ZN6S768C23v29Ev,
  (VTBL_ENTRY)&_ZN6S768C23v30Ev,
  (VTBL_ENTRY)&_ZN6S768C12v1Ev,
  (VTBL_ENTRY)&_ZN6S768C12v2Ev,
  (VTBL_ENTRY)&_ZN6S768C12v3Ev,
  (VTBL_ENTRY)&_ZN6S768C12v4Ev,
  (VTBL_ENTRY)&_ZN6S768C12v5Ev,
  (VTBL_ENTRY)&_ZN6S768C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S768C1[];
extern  VTBL_ENTRY _ZTV6S768C1[];
Class_Descriptor cd_S768C1 = {  "S768C1", // class name
  bases_S768C1, 4,
  &(vtc_S768C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,368), // object size
  NSPAIRA(_ZTI6S768C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S768C1),34, //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  S775C4  : S770C5_nt {
  virtual void  v9(); // _ZN6S775C42v9Ev
  virtual void  v10(); // _ZN6S775C43v10Ev
  virtual void  v11(); // _ZN6S775C43v11Ev
  virtual void  v12(); // _ZN6S775C43v12Ev
  virtual void  v13(); // _ZN6S775C43v13Ev
  ~S775C4(); // tgen
  S775C4(); // tgen
};
//SIG(-1 S775C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S775C4 ::v9(){vfunc_called(this, "_ZN6S775C42v9Ev");}
void  S775C4 ::v10(){vfunc_called(this, "_ZN6S775C43v10Ev");}
void  S775C4 ::v11(){vfunc_called(this, "_ZN6S775C43v11Ev");}
void  S775C4 ::v12(){vfunc_called(this, "_ZN6S775C43v12Ev");}
void  S775C4 ::v13(){vfunc_called(this, "_ZN6S775C43v13Ev");}
S775C4 ::~S775C4(){ note_dtor("S775C4", this);} // tgen
S775C4 ::S775C4(){ note_ctor("S775C4", this);} // tgen

static void Test_S775C4()
{
  extern Class_Descriptor cd_S775C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S775C4, buf);
    S775C4 *dp, &lv = *(dp=new (buf) S775C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S775C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S775C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S775C4");
    test_class_info(&lv, &cd_S775C4);
    dp->~S775C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS775C4(Test_S775C4, "S775C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S775C4C1Ev();
extern void _ZN6S775C4D1Ev();
Name_Map name_map_S775C4[] = {
  NSPAIR(_ZN6S775C4C1Ev),
  NSPAIR(_ZN6S775C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S775C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S775C4[];
extern void _ZN6S775C4D1Ev();
extern void _ZN6S775C4D0Ev();
extern void _ZN6S775C42v9Ev();
extern void _ZN6S775C43v10Ev();
extern void _ZN6S775C43v11Ev();
extern void _ZN6S775C43v12Ev();
extern void _ZN6S775C43v13Ev();
static  VTBL_ENTRY vtc_S775C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S775C4[0]),
  (VTBL_ENTRY)&_ZN6S775C4D1Ev,
  (VTBL_ENTRY)&_ZN6S775C4D0Ev,
  (VTBL_ENTRY)&_ZN6S775C42v9Ev,
  (VTBL_ENTRY)&_ZN6S775C43v10Ev,
  (VTBL_ENTRY)&_ZN6S775C43v11Ev,
  (VTBL_ENTRY)&_ZN6S775C43v12Ev,
  (VTBL_ENTRY)&_ZN6S775C43v13Ev,
};
extern VTBL_ENTRY _ZTI6S775C4[];
extern  VTBL_ENTRY _ZTV6S775C4[];
Class_Descriptor cd_S775C4 = {  "S775C4", // class name
  bases_S775C4, 1,
  &(vtc_S775C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S775C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S775C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S775C3  : S775C4 {
  void *s775c3f0[3];
  ::S770C6_nt s775c3f1;
  virtual void  v14(); // _ZN6S775C33v14Ev
  virtual void  v15(); // _ZN6S775C33v15Ev
  virtual void  v16(); // _ZN6S775C33v16Ev
  virtual void  v17(); // _ZN6S775C33v17Ev
  virtual void  v18(); // _ZN6S775C33v18Ev
  virtual void  v19(); // _ZN6S775C33v19Ev
  virtual void  v20(); // _ZN6S775C33v20Ev
  virtual void  v21(); // _ZN6S775C33v21Ev
  virtual void  v22(); // _ZN6S775C33v22Ev
  virtual void  v23(); // _ZN6S775C33v23Ev
  virtual void  v24(); // _ZN6S775C33v24Ev
  ~S775C3(); // tgen
  S775C3(); // tgen
};
//SIG(-1 S775C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S775C3 ::v14(){vfunc_called(this, "_ZN6S775C33v14Ev");}
void  S775C3 ::v15(){vfunc_called(this, "_ZN6S775C33v15Ev");}
void  S775C3 ::v16(){vfunc_called(this, "_ZN6S775C33v16Ev");}
void  S775C3 ::v17(){vfunc_called(this, "_ZN6S775C33v17Ev");}
void  S775C3 ::v18(){vfunc_called(this, "_ZN6S775C33v18Ev");}
void  S775C3 ::v19(){vfunc_called(this, "_ZN6S775C33v19Ev");}
void  S775C3 ::v20(){vfunc_called(this, "_ZN6S775C33v20Ev");}
void  S775C3 ::v21(){vfunc_called(this, "_ZN6S775C33v21Ev");}
void  S775C3 ::v22(){vfunc_called(this, "_ZN6S775C33v22Ev");}
void  S775C3 ::v23(){vfunc_called(this, "_ZN6S775C33v23Ev");}
void  S775C3 ::v24(){vfunc_called(this, "_ZN6S775C33v24Ev");}
S775C3 ::~S775C3(){ note_dtor("S775C3", this);} // tgen
S775C3 ::S775C3(){ note_ctor("S775C3", this);} // tgen

static void Test_S775C3()
{
  extern Class_Descriptor cd_S775C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S775C3, buf);
    S775C3 *dp, &lv = *(dp=new (buf) S775C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S775C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S775C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S775C4*), 0, "S775C3");
    check_base_class_offset(lv, (S775C4*), 0, "S775C3");
    check_field_offset(lv, s775c3f0, ABISELECT(16,8), "S775C3.s775c3f0");
    check_field_offset(lv, s775c3f1, ABISELECT(40,20), "S775C3.s775c3f1");
    test_class_info(&lv, &cd_S775C3);
    dp->~S775C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS775C3(Test_S775C3, "S775C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S775C3C1Ev();
extern void _ZN6S775C3D1Ev();
Name_Map name_map_S775C3[] = {
  NSPAIR(_ZN6S775C3C1Ev),
  NSPAIR(_ZN6S775C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S775C4;
extern VTBL_ENTRY _ZTI6S775C4[];
extern  VTBL_ENTRY _ZTV6S775C4[];
static Base_Class bases_S775C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S775C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S775C3[];
extern void _ZN6S775C3D1Ev();
extern void _ZN6S775C3D0Ev();
extern void _ZN6S775C42v9Ev();
extern void _ZN6S775C43v10Ev();
extern void _ZN6S775C43v11Ev();
extern void _ZN6S775C43v12Ev();
extern void _ZN6S775C43v13Ev();
extern void _ZN6S775C33v14Ev();
extern void _ZN6S775C33v15Ev();
extern void _ZN6S775C33v16Ev();
extern void _ZN6S775C33v17Ev();
extern void _ZN6S775C33v18Ev();
extern void _ZN6S775C33v19Ev();
extern void _ZN6S775C33v20Ev();
extern void _ZN6S775C33v21Ev();
extern void _ZN6S775C33v22Ev();
extern void _ZN6S775C33v23Ev();
extern void _ZN6S775C33v24Ev();
static  VTBL_ENTRY vtc_S775C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S775C3[0]),
  (VTBL_ENTRY)&_ZN6S775C3D1Ev,
  (VTBL_ENTRY)&_ZN6S775C3D0Ev,
  (VTBL_ENTRY)&_ZN6S775C42v9Ev,
  (VTBL_ENTRY)&_ZN6S775C43v10Ev,
  (VTBL_ENTRY)&_ZN6S775C43v11Ev,
  (VTBL_ENTRY)&_ZN6S775C43v12Ev,
  (VTBL_ENTRY)&_ZN6S775C43v13Ev,
  (VTBL_ENTRY)&_ZN6S775C33v14Ev,
  (VTBL_ENTRY)&_ZN6S775C33v15Ev,
  (VTBL_ENTRY)&_ZN6S775C33v16Ev,
  (VTBL_ENTRY)&_ZN6S775C33v17Ev,
  (VTBL_ENTRY)&_ZN6S775C33v18Ev,
  (VTBL_ENTRY)&_ZN6S775C33v19Ev,
  (VTBL_ENTRY)&_ZN6S775C33v20Ev,
  (VTBL_ENTRY)&_ZN6S775C33v21Ev,
  (VTBL_ENTRY)&_ZN6S775C33v22Ev,
  (VTBL_ENTRY)&_ZN6S775C33v23Ev,
  (VTBL_ENTRY)&_ZN6S775C33v24Ev,
};
extern VTBL_ENTRY _ZTI6S775C3[];
extern  VTBL_ENTRY _ZTV6S775C3[];
Class_Descriptor cd_S775C3 = {  "S775C3", // class name
  bases_S775C3, 2,
  &(vtc_S775C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S775C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S775C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S775C2  : S775C3 {
  ::S770C6_nt s775c2f0;
  ::S770C9_nt s775c2f1;
  void *s775c2f2[3];
  virtual void  v25(); // _ZN6S775C23v25Ev
  virtual void  v26(); // _ZN6S775C23v26Ev
  virtual void  v27(); // _ZN6S775C23v27Ev
  virtual void  v28(); // _ZN6S775C23v28Ev
  virtual void  v29(); // _ZN6S775C23v29Ev
  virtual void  v30(); // _ZN6S775C23v30Ev
  virtual void  v31(); // _ZN6S775C23v31Ev
  virtual void  v32(); // _ZN6S775C23v32Ev
  ~S775C2(); // tgen
  S775C2(); // tgen
};
//SIG(-1 S775C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S775C2 ::v25(){vfunc_called(this, "_ZN6S775C23v25Ev");}
void  S775C2 ::v26(){vfunc_called(this, "_ZN6S775C23v26Ev");}
void  S775C2 ::v27(){vfunc_called(this, "_ZN6S775C23v27Ev");}
void  S775C2 ::v28(){vfunc_called(this, "_ZN6S775C23v28Ev");}
void  S775C2 ::v29(){vfunc_called(this, "_ZN6S775C23v29Ev");}
void  S775C2 ::v30(){vfunc_called(this, "_ZN6S775C23v30Ev");}
void  S775C2 ::v31(){vfunc_called(this, "_ZN6S775C23v31Ev");}
void  S775C2 ::v32(){vfunc_called(this, "_ZN6S775C23v32Ev");}
S775C2 ::~S775C2(){ note_dtor("S775C2", this);} // tgen
S775C2 ::S775C2(){ note_ctor("S775C2", this);} // tgen

static void Test_S775C2()
{
  extern Class_Descriptor cd_S775C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S775C2, buf);
    S775C2 *dp, &lv = *(dp=new (buf) S775C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S775C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S775C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S775C4*)(S775C3*), 0, "S775C2");
    check_base_class_offset(lv, (S775C4*)(S775C3*), 0, "S775C2");
    check_base_class_offset(lv, (S775C3*), 0, "S775C2");
    check_field_offset(lv, s775c2f0, ABISELECT(80,44), "S775C2.s775c2f0");
    check_field_offset(lv, s775c2f1, ABISELECT(120,68), "S775C2.s775c2f1");
    check_field_offset(lv, s775c2f2, ABISELECT(128,72), "S775C2.s775c2f2");
    test_class_info(&lv, &cd_S775C2);
    dp->~S775C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS775C2(Test_S775C2, "S775C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S775C2C1Ev();
extern void _ZN6S775C2D1Ev();
Name_Map name_map_S775C2[] = {
  NSPAIR(_ZN6S775C2C1Ev),
  NSPAIR(_ZN6S775C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S775C4;
extern VTBL_ENTRY _ZTI6S775C4[];
extern  VTBL_ENTRY _ZTV6S775C4[];
extern Class_Descriptor cd_S775C3;
extern VTBL_ENTRY _ZTI6S775C3[];
extern  VTBL_ENTRY _ZTV6S775C3[];
static Base_Class bases_S775C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S775C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S775C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S775C2[];
extern void _ZN6S775C2D1Ev();
extern void _ZN6S775C2D0Ev();
extern void _ZN6S775C42v9Ev();
extern void _ZN6S775C43v10Ev();
extern void _ZN6S775C43v11Ev();
extern void _ZN6S775C43v12Ev();
extern void _ZN6S775C43v13Ev();
extern void _ZN6S775C33v14Ev();
extern void _ZN6S775C33v15Ev();
extern void _ZN6S775C33v16Ev();
extern void _ZN6S775C33v17Ev();
extern void _ZN6S775C33v18Ev();
extern void _ZN6S775C33v19Ev();
extern void _ZN6S775C33v20Ev();
extern void _ZN6S775C33v21Ev();
extern void _ZN6S775C33v22Ev();
extern void _ZN6S775C33v23Ev();
extern void _ZN6S775C33v24Ev();
extern void _ZN6S775C23v25Ev();
extern void _ZN6S775C23v26Ev();
extern void _ZN6S775C23v27Ev();
extern void _ZN6S775C23v28Ev();
extern void _ZN6S775C23v29Ev();
extern void _ZN6S775C23v30Ev();
extern void _ZN6S775C23v31Ev();
extern void _ZN6S775C23v32Ev();
static  VTBL_ENTRY vtc_S775C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S775C2[0]),
  (VTBL_ENTRY)&_ZN6S775C2D1Ev,
  (VTBL_ENTRY)&_ZN6S775C2D0Ev,
  (VTBL_ENTRY)&_ZN6S775C42v9Ev,
  (VTBL_ENTRY)&_ZN6S775C43v10Ev,
  (VTBL_ENTRY)&_ZN6S775C43v11Ev,
  (VTBL_ENTRY)&_ZN6S775C43v12Ev,
  (VTBL_ENTRY)&_ZN6S775C43v13Ev,
  (VTBL_ENTRY)&_ZN6S775C33v14Ev,
  (VTBL_ENTRY)&_ZN6S775C33v15Ev,
  (VTBL_ENTRY)&_ZN6S775C33v16Ev,
  (VTBL_ENTRY)&_ZN6S775C33v17Ev,
  (VTBL_ENTRY)&_ZN6S775C33v18Ev,
  (VTBL_ENTRY)&_ZN6S775C33v19Ev,
  (VTBL_ENTRY)&_ZN6S775C33v20Ev,
  (VTBL_ENTRY)&_ZN6S775C33v21Ev,
  (VTBL_ENTRY)&_ZN6S775C33v22Ev,
  (VTBL_ENTRY)&_ZN6S775C33v23Ev,
  (VTBL_ENTRY)&_ZN6S775C33v24Ev,
  (VTBL_ENTRY)&_ZN6S775C23v25Ev,
  (VTBL_ENTRY)&_ZN6S775C23v26Ev,
  (VTBL_ENTRY)&_ZN6S775C23v27Ev,
  (VTBL_ENTRY)&_ZN6S775C23v28Ev,
  (VTBL_ENTRY)&_ZN6S775C23v29Ev,
  (VTBL_ENTRY)&_ZN6S775C23v30Ev,
  (VTBL_ENTRY)&_ZN6S775C23v31Ev,
  (VTBL_ENTRY)&_ZN6S775C23v32Ev,
};
extern VTBL_ENTRY _ZTI6S775C2[];
extern  VTBL_ENTRY _ZTV6S775C2[];
Class_Descriptor cd_S775C2 = {  "S775C2", // class name
  bases_S775C2, 3,
  &(vtc_S775C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S775C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S775C2),28, //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  S775C1  : S775C2 {
  int s775c1f0;
  ::S303C11_nt s775c1f1;
  char s775c1f2;
  virtual void  v1(); // _ZN6S775C12v1Ev
  virtual void  v2(); // _ZN6S775C12v2Ev
  virtual void  v3(); // _ZN6S775C12v3Ev
  virtual void  v4(); // _ZN6S775C12v4Ev
  virtual void  v5(); // _ZN6S775C12v5Ev
  virtual void  v6(); // _ZN6S775C12v6Ev
  virtual void  v7(); // _ZN6S775C12v7Ev
  virtual void  v8(); // _ZN6S775C12v8Ev
  ~S775C1(); // tgen
  S775C1(); // tgen
};
//SIG(1 S775C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v25 v26 v27 v28 v29 v30 v31 v32 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 v7 v8 Fi FC10{ m FC11{ m FL}} Fc}


void  S775C1 ::v1(){vfunc_called(this, "_ZN6S775C12v1Ev");}
void  S775C1 ::v2(){vfunc_called(this, "_ZN6S775C12v2Ev");}
void  S775C1 ::v3(){vfunc_called(this, "_ZN6S775C12v3Ev");}
void  S775C1 ::v4(){vfunc_called(this, "_ZN6S775C12v4Ev");}
void  S775C1 ::v5(){vfunc_called(this, "_ZN6S775C12v5Ev");}
void  S775C1 ::v6(){vfunc_called(this, "_ZN6S775C12v6Ev");}
void  S775C1 ::v7(){vfunc_called(this, "_ZN6S775C12v7Ev");}
void  S775C1 ::v8(){vfunc_called(this, "_ZN6S775C12v8Ev");}
S775C1 ::~S775C1(){ note_dtor("S775C1", this);} // tgen
S775C1 ::S775C1(){ note_ctor("S775C1", this);} // tgen

static void Test_S775C1()
{
  extern Class_Descriptor cd_S775C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,26)];
    init_test(&cd_S775C1, buf);
    S775C1 *dp, &lv = *(dp=new (buf) S775C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,100), "sizeof(S775C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S775C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S775C4*)(S775C3*)(S775C2*), 0, "S775C1");
    check_base_class_offset(lv, (S775C4*)(S775C3*)(S775C2*), 0, "S775C1");
    check_base_class_offset(lv, (S775C3*)(S775C2*), 0, "S775C1");
    check_base_class_offset(lv, (S775C2*), 0, "S775C1");
    check_field_offset(lv, s775c1f0, ABISELECT(152,84), "S775C1.s775c1f0");
    check_field_offset(lv, s775c1f1, ABISELECT(160,88), "S775C1.s775c1f1");
    check_field_offset(lv, s775c1f2, ABISELECT(168,96), "S775C1.s775c1f2");
    test_class_info(&lv, &cd_S775C1);
    dp->~S775C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS775C1(Test_S775C1, "S775C1", ABISELECT(176,100));

#else // __cplusplus

extern void _ZN6S775C1C1Ev();
extern void _ZN6S775C1D1Ev();
Name_Map name_map_S775C1[] = {
  NSPAIR(_ZN6S775C1C1Ev),
  NSPAIR(_ZN6S775C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S775C4;
extern VTBL_ENTRY _ZTI6S775C4[];
extern  VTBL_ENTRY _ZTV6S775C4[];
extern Class_Descriptor cd_S775C3;
extern VTBL_ENTRY _ZTI6S775C3[];
extern  VTBL_ENTRY _ZTV6S775C3[];
extern Class_Descriptor cd_S775C2;
extern VTBL_ENTRY _ZTI6S775C2[];
extern  VTBL_ENTRY _ZTV6S775C2[];
static Base_Class bases_S775C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S775C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S775C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S775C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S775C1[];
extern void _ZN6S775C1D1Ev();
extern void _ZN6S775C1D0Ev();
extern void _ZN6S775C42v9Ev();
extern void _ZN6S775C43v10Ev();
extern void _ZN6S775C43v11Ev();
extern void _ZN6S775C43v12Ev();
extern void _ZN6S775C43v13Ev();
extern void _ZN6S775C33v14Ev();
extern void _ZN6S775C33v15Ev();
extern void _ZN6S775C33v16Ev();
extern void _ZN6S775C33v17Ev();
extern void _ZN6S775C33v18Ev();
extern void _ZN6S775C33v19Ev();
extern void _ZN6S775C33v20Ev();
extern void _ZN6S775C33v21Ev();
extern void _ZN6S775C33v22Ev();
extern void _ZN6S775C33v23Ev();
extern void _ZN6S775C33v24Ev();
extern void _ZN6S775C23v25Ev();
extern void _ZN6S775C23v26Ev();
extern void _ZN6S775C23v27Ev();
extern void _ZN6S775C23v28Ev();
extern void _ZN6S775C23v29Ev();
extern void _ZN6S775C23v30Ev();
extern void _ZN6S775C23v31Ev();
extern void _ZN6S775C23v32Ev();
extern void _ZN6S775C12v1Ev();
extern void _ZN6S775C12v2Ev();
extern void _ZN6S775C12v3Ev();
extern void _ZN6S775C12v4Ev();
extern void _ZN6S775C12v5Ev();
extern void _ZN6S775C12v6Ev();
extern void _ZN6S775C12v7Ev();
extern void _ZN6S775C12v8Ev();
static  VTBL_ENTRY vtc_S775C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S775C1[0]),
  (VTBL_ENTRY)&_ZN6S775C1D1Ev,
  (VTBL_ENTRY)&_ZN6S775C1D0Ev,
  (VTBL_ENTRY)&_ZN6S775C42v9Ev,
  (VTBL_ENTRY)&_ZN6S775C43v10Ev,
  (VTBL_ENTRY)&_ZN6S775C43v11Ev,
  (VTBL_ENTRY)&_ZN6S775C43v12Ev,
  (VTBL_ENTRY)&_ZN6S775C43v13Ev,
  (VTBL_ENTRY)&_ZN6S775C33v14Ev,
  (VTBL_ENTRY)&_ZN6S775C33v15Ev,
  (VTBL_ENTRY)&_ZN6S775C33v16Ev,
  (VTBL_ENTRY)&_ZN6S775C33v17Ev,
  (VTBL_ENTRY)&_ZN6S775C33v18Ev,
  (VTBL_ENTRY)&_ZN6S775C33v19Ev,
  (VTBL_ENTRY)&_ZN6S775C33v20Ev,
  (VTBL_ENTRY)&_ZN6S775C33v21Ev,
  (VTBL_ENTRY)&_ZN6S775C33v22Ev,
  (VTBL_ENTRY)&_ZN6S775C33v23Ev,
  (VTBL_ENTRY)&_ZN6S775C33v24Ev,
  (VTBL_ENTRY)&_ZN6S775C23v25Ev,
  (VTBL_ENTRY)&_ZN6S775C23v26Ev,
  (VTBL_ENTRY)&_ZN6S775C23v27Ev,
  (VTBL_ENTRY)&_ZN6S775C23v28Ev,
  (VTBL_ENTRY)&_ZN6S775C23v29Ev,
  (VTBL_ENTRY)&_ZN6S775C23v30Ev,
  (VTBL_ENTRY)&_ZN6S775C23v31Ev,
  (VTBL_ENTRY)&_ZN6S775C23v32Ev,
  (VTBL_ENTRY)&_ZN6S775C12v1Ev,
  (VTBL_ENTRY)&_ZN6S775C12v2Ev,
  (VTBL_ENTRY)&_ZN6S775C12v3Ev,
  (VTBL_ENTRY)&_ZN6S775C12v4Ev,
  (VTBL_ENTRY)&_ZN6S775C12v5Ev,
  (VTBL_ENTRY)&_ZN6S775C12v6Ev,
  (VTBL_ENTRY)&_ZN6S775C12v7Ev,
  (VTBL_ENTRY)&_ZN6S775C12v8Ev,
};
extern VTBL_ENTRY _ZTI6S775C1[];
extern  VTBL_ENTRY _ZTV6S775C1[];
Class_Descriptor cd_S775C1 = {  "S775C1", // class name
  bases_S775C1, 4,
  &(vtc_S775C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,100), // object size
  NSPAIRA(_ZTI6S775C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S775C1),36, //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  S769C4  : S770C5_nt {
  virtual void  v7(); // _ZN6S769C42v7Ev
  virtual void  v8(); // _ZN6S769C42v8Ev
  virtual void  v9(); // _ZN6S769C42v9Ev
  virtual void  v10(); // _ZN6S769C43v10Ev
  virtual void  v11(); // _ZN6S769C43v11Ev
  ~S769C4(); // tgen
  S769C4(); // tgen
};
//SIG(-1 S769C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S769C4 ::v7(){vfunc_called(this, "_ZN6S769C42v7Ev");}
void  S769C4 ::v8(){vfunc_called(this, "_ZN6S769C42v8Ev");}
void  S769C4 ::v9(){vfunc_called(this, "_ZN6S769C42v9Ev");}
void  S769C4 ::v10(){vfunc_called(this, "_ZN6S769C43v10Ev");}
void  S769C4 ::v11(){vfunc_called(this, "_ZN6S769C43v11Ev");}
S769C4 ::~S769C4(){ note_dtor("S769C4", this);} // tgen
S769C4 ::S769C4(){ note_ctor("S769C4", this);} // tgen

static void Test_S769C4()
{
  extern Class_Descriptor cd_S769C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S769C4, buf);
    S769C4 *dp, &lv = *(dp=new (buf) S769C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S769C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S769C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S769C4");
    test_class_info(&lv, &cd_S769C4);
    dp->~S769C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS769C4(Test_S769C4, "S769C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S769C4C1Ev();
extern void _ZN6S769C4D1Ev();
Name_Map name_map_S769C4[] = {
  NSPAIR(_ZN6S769C4C1Ev),
  NSPAIR(_ZN6S769C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S769C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S769C4[];
extern void _ZN6S769C4D1Ev();
extern void _ZN6S769C4D0Ev();
extern void _ZN6S769C42v7Ev();
extern void _ZN6S769C42v8Ev();
extern void _ZN6S769C42v9Ev();
extern void _ZN6S769C43v10Ev();
extern void _ZN6S769C43v11Ev();
static  VTBL_ENTRY vtc_S769C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S769C4[0]),
  (VTBL_ENTRY)&_ZN6S769C4D1Ev,
  (VTBL_ENTRY)&_ZN6S769C4D0Ev,
  (VTBL_ENTRY)&_ZN6S769C42v7Ev,
  (VTBL_ENTRY)&_ZN6S769C42v8Ev,
  (VTBL_ENTRY)&_ZN6S769C42v9Ev,
  (VTBL_ENTRY)&_ZN6S769C43v10Ev,
  (VTBL_ENTRY)&_ZN6S769C43v11Ev,
};
extern VTBL_ENTRY _ZTI6S769C4[];
extern  VTBL_ENTRY _ZTV6S769C4[];
Class_Descriptor cd_S769C4 = {  "S769C4", // class name
  bases_S769C4, 1,
  &(vtc_S769C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S769C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S769C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S769C3  : S769C4 {
  void *s769c3f0[3];
  ::S770C6_nt s769c3f1;
  virtual void  v12(); // _ZN6S769C33v12Ev
  virtual void  v13(); // _ZN6S769C33v13Ev
  virtual void  v14(); // _ZN6S769C33v14Ev
  virtual void  v15(); // _ZN6S769C33v15Ev
  virtual void  v16(); // _ZN6S769C33v16Ev
  virtual void  v17(); // _ZN6S769C33v17Ev
  virtual void  v18(); // _ZN6S769C33v18Ev
  virtual void  v19(); // _ZN6S769C33v19Ev
  virtual void  v20(); // _ZN6S769C33v20Ev
  virtual void  v21(); // _ZN6S769C33v21Ev
  virtual void  v22(); // _ZN6S769C33v22Ev
  ~S769C3(); // tgen
  S769C3(); // tgen
};
//SIG(-1 S769C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S769C3 ::v12(){vfunc_called(this, "_ZN6S769C33v12Ev");}
void  S769C3 ::v13(){vfunc_called(this, "_ZN6S769C33v13Ev");}
void  S769C3 ::v14(){vfunc_called(this, "_ZN6S769C33v14Ev");}
void  S769C3 ::v15(){vfunc_called(this, "_ZN6S769C33v15Ev");}
void  S769C3 ::v16(){vfunc_called(this, "_ZN6S769C33v16Ev");}
void  S769C3 ::v17(){vfunc_called(this, "_ZN6S769C33v17Ev");}
void  S769C3 ::v18(){vfunc_called(this, "_ZN6S769C33v18Ev");}
void  S769C3 ::v19(){vfunc_called(this, "_ZN6S769C33v19Ev");}
void  S769C3 ::v20(){vfunc_called(this, "_ZN6S769C33v20Ev");}
void  S769C3 ::v21(){vfunc_called(this, "_ZN6S769C33v21Ev");}
void  S769C3 ::v22(){vfunc_called(this, "_ZN6S769C33v22Ev");}
S769C3 ::~S769C3(){ note_dtor("S769C3", this);} // tgen
S769C3 ::S769C3(){ note_ctor("S769C3", this);} // tgen

static void Test_S769C3()
{
  extern Class_Descriptor cd_S769C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S769C3, buf);
    S769C3 *dp, &lv = *(dp=new (buf) S769C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S769C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S769C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S769C4*), 0, "S769C3");
    check_base_class_offset(lv, (S769C4*), 0, "S769C3");
    check_field_offset(lv, s769c3f0, ABISELECT(16,8), "S769C3.s769c3f0");
    check_field_offset(lv, s769c3f1, ABISELECT(40,20), "S769C3.s769c3f1");
    test_class_info(&lv, &cd_S769C3);
    dp->~S769C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS769C3(Test_S769C3, "S769C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S769C3C1Ev();
extern void _ZN6S769C3D1Ev();
Name_Map name_map_S769C3[] = {
  NSPAIR(_ZN6S769C3C1Ev),
  NSPAIR(_ZN6S769C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S769C4;
extern VTBL_ENTRY _ZTI6S769C4[];
extern  VTBL_ENTRY _ZTV6S769C4[];
static Base_Class bases_S769C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S769C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S769C3[];
extern void _ZN6S769C3D1Ev();
extern void _ZN6S769C3D0Ev();
extern void _ZN6S769C42v7Ev();
extern void _ZN6S769C42v8Ev();
extern void _ZN6S769C42v9Ev();
extern void _ZN6S769C43v10Ev();
extern void _ZN6S769C43v11Ev();
extern void _ZN6S769C33v12Ev();
extern void _ZN6S769C33v13Ev();
extern void _ZN6S769C33v14Ev();
extern void _ZN6S769C33v15Ev();
extern void _ZN6S769C33v16Ev();
extern void _ZN6S769C33v17Ev();
extern void _ZN6S769C33v18Ev();
extern void _ZN6S769C33v19Ev();
extern void _ZN6S769C33v20Ev();
extern void _ZN6S769C33v21Ev();
extern void _ZN6S769C33v22Ev();
static  VTBL_ENTRY vtc_S769C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S769C3[0]),
  (VTBL_ENTRY)&_ZN6S769C3D1Ev,
  (VTBL_ENTRY)&_ZN6S769C3D0Ev,
  (VTBL_ENTRY)&_ZN6S769C42v7Ev,
  (VTBL_ENTRY)&_ZN6S769C42v8Ev,
  (VTBL_ENTRY)&_ZN6S769C42v9Ev,
  (VTBL_ENTRY)&_ZN6S769C43v10Ev,
  (VTBL_ENTRY)&_ZN6S769C43v11Ev,
  (VTBL_ENTRY)&_ZN6S769C33v12Ev,
  (VTBL_ENTRY)&_ZN6S769C33v13Ev,
  (VTBL_ENTRY)&_ZN6S769C33v14Ev,
  (VTBL_ENTRY)&_ZN6S769C33v15Ev,
  (VTBL_ENTRY)&_ZN6S769C33v16Ev,
  (VTBL_ENTRY)&_ZN6S769C33v17Ev,
  (VTBL_ENTRY)&_ZN6S769C33v18Ev,
  (VTBL_ENTRY)&_ZN6S769C33v19Ev,
  (VTBL_ENTRY)&_ZN6S769C33v20Ev,
  (VTBL_ENTRY)&_ZN6S769C33v21Ev,
  (VTBL_ENTRY)&_ZN6S769C33v22Ev,
};
extern VTBL_ENTRY _ZTI6S769C3[];
extern  VTBL_ENTRY _ZTV6S769C3[];
Class_Descriptor cd_S769C3 = {  "S769C3", // class name
  bases_S769C3, 2,
  &(vtc_S769C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S769C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S769C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S769C2  : S769C3 {
  ::S770C6_nt s769c2f0;
  ::S770C9_nt s769c2f1;
  void *s769c2f2[3];
  virtual void  v23(); // _ZN6S769C23v23Ev
  virtual void  v24(); // _ZN6S769C23v24Ev
  virtual void  v25(); // _ZN6S769C23v25Ev
  virtual void  v26(); // _ZN6S769C23v26Ev
  virtual void  v27(); // _ZN6S769C23v27Ev
  virtual void  v28(); // _ZN6S769C23v28Ev
  virtual void  v29(); // _ZN6S769C23v29Ev
  virtual void  v30(); // _ZN6S769C23v30Ev
  ~S769C2(); // tgen
  S769C2(); // tgen
};
//SIG(-1 S769C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S769C2 ::v23(){vfunc_called(this, "_ZN6S769C23v23Ev");}
void  S769C2 ::v24(){vfunc_called(this, "_ZN6S769C23v24Ev");}
void  S769C2 ::v25(){vfunc_called(this, "_ZN6S769C23v25Ev");}
void  S769C2 ::v26(){vfunc_called(this, "_ZN6S769C23v26Ev");}
void  S769C2 ::v27(){vfunc_called(this, "_ZN6S769C23v27Ev");}
void  S769C2 ::v28(){vfunc_called(this, "_ZN6S769C23v28Ev");}
void  S769C2 ::v29(){vfunc_called(this, "_ZN6S769C23v29Ev");}
void  S769C2 ::v30(){vfunc_called(this, "_ZN6S769C23v30Ev");}
S769C2 ::~S769C2(){ note_dtor("S769C2", this);} // tgen
S769C2 ::S769C2(){ note_ctor("S769C2", this);} // tgen

static void Test_S769C2()
{
  extern Class_Descriptor cd_S769C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S769C2, buf);
    S769C2 *dp, &lv = *(dp=new (buf) S769C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S769C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S769C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S769C4*)(S769C3*), 0, "S769C2");
    check_base_class_offset(lv, (S769C4*)(S769C3*), 0, "S769C2");
    check_base_class_offset(lv, (S769C3*), 0, "S769C2");
    check_field_offset(lv, s769c2f0, ABISELECT(80,44), "S769C2.s769c2f0");
    check_field_offset(lv, s769c2f1, ABISELECT(120,68), "S769C2.s769c2f1");
    check_field_offset(lv, s769c2f2, ABISELECT(128,72), "S769C2.s769c2f2");
    test_class_info(&lv, &cd_S769C2);
    dp->~S769C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS769C2(Test_S769C2, "S769C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S769C2C1Ev();
extern void _ZN6S769C2D1Ev();
Name_Map name_map_S769C2[] = {
  NSPAIR(_ZN6S769C2C1Ev),
  NSPAIR(_ZN6S769C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S769C4;
extern VTBL_ENTRY _ZTI6S769C4[];
extern  VTBL_ENTRY _ZTV6S769C4[];
extern Class_Descriptor cd_S769C3;
extern VTBL_ENTRY _ZTI6S769C3[];
extern  VTBL_ENTRY _ZTV6S769C3[];
static Base_Class bases_S769C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S769C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S769C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S769C2[];
extern void _ZN6S769C2D1Ev();
extern void _ZN6S769C2D0Ev();
extern void _ZN6S769C42v7Ev();
extern void _ZN6S769C42v8Ev();
extern void _ZN6S769C42v9Ev();
extern void _ZN6S769C43v10Ev();
extern void _ZN6S769C43v11Ev();
extern void _ZN6S769C33v12Ev();
extern void _ZN6S769C33v13Ev();
extern void _ZN6S769C33v14Ev();
extern void _ZN6S769C33v15Ev();
extern void _ZN6S769C33v16Ev();
extern void _ZN6S769C33v17Ev();
extern void _ZN6S769C33v18Ev();
extern void _ZN6S769C33v19Ev();
extern void _ZN6S769C33v20Ev();
extern void _ZN6S769C33v21Ev();
extern void _ZN6S769C33v22Ev();
extern void _ZN6S769C23v23Ev();
extern void _ZN6S769C23v24Ev();
extern void _ZN6S769C23v25Ev();
extern void _ZN6S769C23v26Ev();
extern void _ZN6S769C23v27Ev();
extern void _ZN6S769C23v28Ev();
extern void _ZN6S769C23v29Ev();
extern void _ZN6S769C23v30Ev();
static  VTBL_ENTRY vtc_S769C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S769C2[0]),
  (VTBL_ENTRY)&_ZN6S769C2D1Ev,
  (VTBL_ENTRY)&_ZN6S769C2D0Ev,
  (VTBL_ENTRY)&_ZN6S769C42v7Ev,
  (VTBL_ENTRY)&_ZN6S769C42v8Ev,
  (VTBL_ENTRY)&_ZN6S769C42v9Ev,
  (VTBL_ENTRY)&_ZN6S769C43v10Ev,
  (VTBL_ENTRY)&_ZN6S769C43v11Ev,
  (VTBL_ENTRY)&_ZN6S769C33v12Ev,
  (VTBL_ENTRY)&_ZN6S769C33v13Ev,
  (VTBL_ENTRY)&_ZN6S769C33v14Ev,
  (VTBL_ENTRY)&_ZN6S769C33v15Ev,
  (VTBL_ENTRY)&_ZN6S769C33v16Ev,
  (VTBL_ENTRY)&_ZN6S769C33v17Ev,
  (VTBL_ENTRY)&_ZN6S769C33v18Ev,
  (VTBL_ENTRY)&_ZN6S769C33v19Ev,
  (VTBL_ENTRY)&_ZN6S769C33v20Ev,
  (VTBL_ENTRY)&_ZN6S769C33v21Ev,
  (VTBL_ENTRY)&_ZN6S769C33v22Ev,
  (VTBL_ENTRY)&_ZN6S769C23v23Ev,
  (VTBL_ENTRY)&_ZN6S769C23v24Ev,
  (VTBL_ENTRY)&_ZN6S769C23v25Ev,
  (VTBL_ENTRY)&_ZN6S769C23v26Ev,
  (VTBL_ENTRY)&_ZN6S769C23v27Ev,
  (VTBL_ENTRY)&_ZN6S769C23v28Ev,
  (VTBL_ENTRY)&_ZN6S769C23v29Ev,
  (VTBL_ENTRY)&_ZN6S769C23v30Ev,
};
extern VTBL_ENTRY _ZTI6S769C2[];
extern  VTBL_ENTRY _ZTV6S769C2[];
Class_Descriptor cd_S769C2 = {  "S769C2", // class name
  bases_S769C2, 3,
  &(vtc_S769C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S769C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S769C2),28, //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  S769C1  : S769C2 {
  void *s769c1f0[2];
  char s769c1f1[255];
  ::S744C15_nt s769c1f2;
  virtual void  v1(); // _ZN6S769C12v1Ev
  virtual void  v2(); // _ZN6S769C12v2Ev
  virtual void  v3(); // _ZN6S769C12v3Ev
  virtual void  v4(); // _ZN6S769C12v4Ev
  virtual void  v5(); // _ZN6S769C12v5Ev
  virtual void  v6(); // _ZN6S769C12v6Ev
  ~S769C1(); // tgen
  S769C1(); // tgen
};
//SIG(1 S769C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v7 v8 v9 v10 v11} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v23 v24 v25 v26 v27 v28 v29 v30 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 Fp[2] Fc[255] FC10{ m Fp}}


void  S769C1 ::v1(){vfunc_called(this, "_ZN6S769C12v1Ev");}
void  S769C1 ::v2(){vfunc_called(this, "_ZN6S769C12v2Ev");}
void  S769C1 ::v3(){vfunc_called(this, "_ZN6S769C12v3Ev");}
void  S769C1 ::v4(){vfunc_called(this, "_ZN6S769C12v4Ev");}
void  S769C1 ::v5(){vfunc_called(this, "_ZN6S769C12v5Ev");}
void  S769C1 ::v6(){vfunc_called(this, "_ZN6S769C12v6Ev");}
S769C1 ::~S769C1(){ note_dtor("S769C1", this);} // tgen
S769C1 ::S769C1(){ note_ctor("S769C1", this);} // tgen

static void Test_S769C1()
{
  extern Class_Descriptor cd_S769C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,89)];
    init_test(&cd_S769C1, buf);
    S769C1 *dp, &lv = *(dp=new (buf) S769C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,352), "sizeof(S769C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S769C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S769C4*)(S769C3*)(S769C2*), 0, "S769C1");
    check_base_class_offset(lv, (S769C4*)(S769C3*)(S769C2*), 0, "S769C1");
    check_base_class_offset(lv, (S769C3*)(S769C2*), 0, "S769C1");
    check_base_class_offset(lv, (S769C2*), 0, "S769C1");
    check_field_offset(lv, s769c1f0, ABISELECT(152,84), "S769C1.s769c1f0");
    check_field_offset(lv, s769c1f1, ABISELECT(168,92), "S769C1.s769c1f1");
    check_field_offset(lv, s769c1f2, ABISELECT(424,348), "S769C1.s769c1f2");
    test_class_info(&lv, &cd_S769C1);
    dp->~S769C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS769C1(Test_S769C1, "S769C1", ABISELECT(432,352));

#else // __cplusplus

extern void _ZN6S769C1C1Ev();
extern void _ZN6S769C1D1Ev();
Name_Map name_map_S769C1[] = {
  NSPAIR(_ZN6S769C1C1Ev),
  NSPAIR(_ZN6S769C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S769C4;
extern VTBL_ENTRY _ZTI6S769C4[];
extern  VTBL_ENTRY _ZTV6S769C4[];
extern Class_Descriptor cd_S769C3;
extern VTBL_ENTRY _ZTI6S769C3[];
extern  VTBL_ENTRY _ZTV6S769C3[];
extern Class_Descriptor cd_S769C2;
extern VTBL_ENTRY _ZTI6S769C2[];
extern  VTBL_ENTRY _ZTV6S769C2[];
static Base_Class bases_S769C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S769C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S769C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S769C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S769C1[];
extern void _ZN6S769C1D1Ev();
extern void _ZN6S769C1D0Ev();
extern void _ZN6S769C42v7Ev();
extern void _ZN6S769C42v8Ev();
extern void _ZN6S769C42v9Ev();
extern void _ZN6S769C43v10Ev();
extern void _ZN6S769C43v11Ev();
extern void _ZN6S769C33v12Ev();
extern void _ZN6S769C33v13Ev();
extern void _ZN6S769C33v14Ev();
extern void _ZN6S769C33v15Ev();
extern void _ZN6S769C33v16Ev();
extern void _ZN6S769C33v17Ev();
extern void _ZN6S769C33v18Ev();
extern void _ZN6S769C33v19Ev();
extern void _ZN6S769C33v20Ev();
extern void _ZN6S769C33v21Ev();
extern void _ZN6S769C33v22Ev();
extern void _ZN6S769C23v23Ev();
extern void _ZN6S769C23v24Ev();
extern void _ZN6S769C23v25Ev();
extern void _ZN6S769C23v26Ev();
extern void _ZN6S769C23v27Ev();
extern void _ZN6S769C23v28Ev();
extern void _ZN6S769C23v29Ev();
extern void _ZN6S769C23v30Ev();
extern void _ZN6S769C12v1Ev();
extern void _ZN6S769C12v2Ev();
extern void _ZN6S769C12v3Ev();
extern void _ZN6S769C12v4Ev();
extern void _ZN6S769C12v5Ev();
extern void _ZN6S769C12v6Ev();
static  VTBL_ENTRY vtc_S769C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S769C1[0]),
  (VTBL_ENTRY)&_ZN6S769C1D1Ev,
  (VTBL_ENTRY)&_ZN6S769C1D0Ev,
  (VTBL_ENTRY)&_ZN6S769C42v7Ev,
  (VTBL_ENTRY)&_ZN6S769C42v8Ev,
  (VTBL_ENTRY)&_ZN6S769C42v9Ev,
  (VTBL_ENTRY)&_ZN6S769C43v10Ev,
  (VTBL_ENTRY)&_ZN6S769C43v11Ev,
  (VTBL_ENTRY)&_ZN6S769C33v12Ev,
  (VTBL_ENTRY)&_ZN6S769C33v13Ev,
  (VTBL_ENTRY)&_ZN6S769C33v14Ev,
  (VTBL_ENTRY)&_ZN6S769C33v15Ev,
  (VTBL_ENTRY)&_ZN6S769C33v16Ev,
  (VTBL_ENTRY)&_ZN6S769C33v17Ev,
  (VTBL_ENTRY)&_ZN6S769C33v18Ev,
  (VTBL_ENTRY)&_ZN6S769C33v19Ev,
  (VTBL_ENTRY)&_ZN6S769C33v20Ev,
  (VTBL_ENTRY)&_ZN6S769C33v21Ev,
  (VTBL_ENTRY)&_ZN6S769C33v22Ev,
  (VTBL_ENTRY)&_ZN6S769C23v23Ev,
  (VTBL_ENTRY)&_ZN6S769C23v24Ev,
  (VTBL_ENTRY)&_ZN6S769C23v25Ev,
  (VTBL_ENTRY)&_ZN6S769C23v26Ev,
  (VTBL_ENTRY)&_ZN6S769C23v27Ev,
  (VTBL_ENTRY)&_ZN6S769C23v28Ev,
  (VTBL_ENTRY)&_ZN6S769C23v29Ev,
  (VTBL_ENTRY)&_ZN6S769C23v30Ev,
  (VTBL_ENTRY)&_ZN6S769C12v1Ev,
  (VTBL_ENTRY)&_ZN6S769C12v2Ev,
  (VTBL_ENTRY)&_ZN6S769C12v3Ev,
  (VTBL_ENTRY)&_ZN6S769C12v4Ev,
  (VTBL_ENTRY)&_ZN6S769C12v5Ev,
  (VTBL_ENTRY)&_ZN6S769C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S769C1[];
extern  VTBL_ENTRY _ZTV6S769C1[];
Class_Descriptor cd_S769C1 = {  "S769C1", // class name
  bases_S769C1, 4,
  &(vtc_S769C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(432,352), // object size
  NSPAIRA(_ZTI6S769C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S769C1),34, //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  S766C4  : S770C5_nt {
  virtual void  v7(); // _ZN6S766C42v7Ev
  virtual void  v8(); // _ZN6S766C42v8Ev
  virtual void  v9(); // _ZN6S766C42v9Ev
  virtual void  v10(); // _ZN6S766C43v10Ev
  virtual void  v11(); // _ZN6S766C43v11Ev
  ~S766C4(); // tgen
  S766C4(); // tgen
};
//SIG(-1 S766C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S766C4 ::v7(){vfunc_called(this, "_ZN6S766C42v7Ev");}
void  S766C4 ::v8(){vfunc_called(this, "_ZN6S766C42v8Ev");}
void  S766C4 ::v9(){vfunc_called(this, "_ZN6S766C42v9Ev");}
void  S766C4 ::v10(){vfunc_called(this, "_ZN6S766C43v10Ev");}
void  S766C4 ::v11(){vfunc_called(this, "_ZN6S766C43v11Ev");}
S766C4 ::~S766C4(){ note_dtor("S766C4", this);} // tgen
S766C4 ::S766C4(){ note_ctor("S766C4", this);} // tgen

static void Test_S766C4()
{
  extern Class_Descriptor cd_S766C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S766C4, buf);
    S766C4 *dp, &lv = *(dp=new (buf) S766C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S766C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S766C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S766C4");
    test_class_info(&lv, &cd_S766C4);
    dp->~S766C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS766C4(Test_S766C4, "S766C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S766C4C1Ev();
extern void _ZN6S766C4D1Ev();
Name_Map name_map_S766C4[] = {
  NSPAIR(_ZN6S766C4C1Ev),
  NSPAIR(_ZN6S766C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S766C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S766C4[];
extern void _ZN6S766C4D1Ev();
extern void _ZN6S766C4D0Ev();
extern void _ZN6S766C42v7Ev();
extern void _ZN6S766C42v8Ev();
extern void _ZN6S766C42v9Ev();
extern void _ZN6S766C43v10Ev();
extern void _ZN6S766C43v11Ev();
static  VTBL_ENTRY vtc_S766C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S766C4[0]),
  (VTBL_ENTRY)&_ZN6S766C4D1Ev,
  (VTBL_ENTRY)&_ZN6S766C4D0Ev,
  (VTBL_ENTRY)&_ZN6S766C42v7Ev,
  (VTBL_ENTRY)&_ZN6S766C42v8Ev,
  (VTBL_ENTRY)&_ZN6S766C42v9Ev,
  (VTBL_ENTRY)&_ZN6S766C43v10Ev,
  (VTBL_ENTRY)&_ZN6S766C43v11Ev,
};
extern VTBL_ENTRY _ZTI6S766C4[];
extern  VTBL_ENTRY _ZTV6S766C4[];
Class_Descriptor cd_S766C4 = {  "S766C4", // class name
  bases_S766C4, 1,
  &(vtc_S766C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S766C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S766C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S766C3  : S766C4 {
  void *s766c3f0[3];
  ::S770C6_nt s766c3f1;
  virtual void  v12(); // _ZN6S766C33v12Ev
  virtual void  v13(); // _ZN6S766C33v13Ev
  virtual void  v14(); // _ZN6S766C33v14Ev
  virtual void  v15(); // _ZN6S766C33v15Ev
  virtual void  v16(); // _ZN6S766C33v16Ev
  virtual void  v17(); // _ZN6S766C33v17Ev
  virtual void  v18(); // _ZN6S766C33v18Ev
  virtual void  v19(); // _ZN6S766C33v19Ev
  virtual void  v20(); // _ZN6S766C33v20Ev
  virtual void  v21(); // _ZN6S766C33v21Ev
  virtual void  v22(); // _ZN6S766C33v22Ev
  ~S766C3(); // tgen
  S766C3(); // tgen
};
//SIG(-1 S766C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S766C3 ::v12(){vfunc_called(this, "_ZN6S766C33v12Ev");}
void  S766C3 ::v13(){vfunc_called(this, "_ZN6S766C33v13Ev");}
void  S766C3 ::v14(){vfunc_called(this, "_ZN6S766C33v14Ev");}
void  S766C3 ::v15(){vfunc_called(this, "_ZN6S766C33v15Ev");}
void  S766C3 ::v16(){vfunc_called(this, "_ZN6S766C33v16Ev");}
void  S766C3 ::v17(){vfunc_called(this, "_ZN6S766C33v17Ev");}
void  S766C3 ::v18(){vfunc_called(this, "_ZN6S766C33v18Ev");}
void  S766C3 ::v19(){vfunc_called(this, "_ZN6S766C33v19Ev");}
void  S766C3 ::v20(){vfunc_called(this, "_ZN6S766C33v20Ev");}
void  S766C3 ::v21(){vfunc_called(this, "_ZN6S766C33v21Ev");}
void  S766C3 ::v22(){vfunc_called(this, "_ZN6S766C33v22Ev");}
S766C3 ::~S766C3(){ note_dtor("S766C3", this);} // tgen
S766C3 ::S766C3(){ note_ctor("S766C3", this);} // tgen

static void Test_S766C3()
{
  extern Class_Descriptor cd_S766C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S766C3, buf);
    S766C3 *dp, &lv = *(dp=new (buf) S766C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S766C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S766C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S766C4*), 0, "S766C3");
    check_base_class_offset(lv, (S766C4*), 0, "S766C3");
    check_field_offset(lv, s766c3f0, ABISELECT(16,8), "S766C3.s766c3f0");
    check_field_offset(lv, s766c3f1, ABISELECT(40,20), "S766C3.s766c3f1");
    test_class_info(&lv, &cd_S766C3);
    dp->~S766C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS766C3(Test_S766C3, "S766C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S766C3C1Ev();
extern void _ZN6S766C3D1Ev();
Name_Map name_map_S766C3[] = {
  NSPAIR(_ZN6S766C3C1Ev),
  NSPAIR(_ZN6S766C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S766C4;
extern VTBL_ENTRY _ZTI6S766C4[];
extern  VTBL_ENTRY _ZTV6S766C4[];
static Base_Class bases_S766C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S766C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S766C3[];
extern void _ZN6S766C3D1Ev();
extern void _ZN6S766C3D0Ev();
extern void _ZN6S766C42v7Ev();
extern void _ZN6S766C42v8Ev();
extern void _ZN6S766C42v9Ev();
extern void _ZN6S766C43v10Ev();
extern void _ZN6S766C43v11Ev();
extern void _ZN6S766C33v12Ev();
extern void _ZN6S766C33v13Ev();
extern void _ZN6S766C33v14Ev();
extern void _ZN6S766C33v15Ev();
extern void _ZN6S766C33v16Ev();
extern void _ZN6S766C33v17Ev();
extern void _ZN6S766C33v18Ev();
extern void _ZN6S766C33v19Ev();
extern void _ZN6S766C33v20Ev();
extern void _ZN6S766C33v21Ev();
extern void _ZN6S766C33v22Ev();
static  VTBL_ENTRY vtc_S766C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S766C3[0]),
  (VTBL_ENTRY)&_ZN6S766C3D1Ev,
  (VTBL_ENTRY)&_ZN6S766C3D0Ev,
  (VTBL_ENTRY)&_ZN6S766C42v7Ev,
  (VTBL_ENTRY)&_ZN6S766C42v8Ev,
  (VTBL_ENTRY)&_ZN6S766C42v9Ev,
  (VTBL_ENTRY)&_ZN6S766C43v10Ev,
  (VTBL_ENTRY)&_ZN6S766C43v11Ev,
  (VTBL_ENTRY)&_ZN6S766C33v12Ev,
  (VTBL_ENTRY)&_ZN6S766C33v13Ev,
  (VTBL_ENTRY)&_ZN6S766C33v14Ev,
  (VTBL_ENTRY)&_ZN6S766C33v15Ev,
  (VTBL_ENTRY)&_ZN6S766C33v16Ev,
  (VTBL_ENTRY)&_ZN6S766C33v17Ev,
  (VTBL_ENTRY)&_ZN6S766C33v18Ev,
  (VTBL_ENTRY)&_ZN6S766C33v19Ev,
  (VTBL_ENTRY)&_ZN6S766C33v20Ev,
  (VTBL_ENTRY)&_ZN6S766C33v21Ev,
  (VTBL_ENTRY)&_ZN6S766C33v22Ev,
};
extern VTBL_ENTRY _ZTI6S766C3[];
extern  VTBL_ENTRY _ZTV6S766C3[];
Class_Descriptor cd_S766C3 = {  "S766C3", // class name
  bases_S766C3, 2,
  &(vtc_S766C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S766C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S766C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S766C2  : S766C3 {
  ::S770C6_nt s766c2f0;
  ::S770C9_nt s766c2f1;
  void *s766c2f2[3];
  virtual void  v23(); // _ZN6S766C23v23Ev
  virtual void  v24(); // _ZN6S766C23v24Ev
  virtual void  v25(); // _ZN6S766C23v25Ev
  virtual void  v26(); // _ZN6S766C23v26Ev
  virtual void  v27(); // _ZN6S766C23v27Ev
  virtual void  v28(); // _ZN6S766C23v28Ev
  virtual void  v29(); // _ZN6S766C23v29Ev
  virtual void  v30(); // _ZN6S766C23v30Ev
  ~S766C2(); // tgen
  S766C2(); // tgen
};
//SIG(-1 S766C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S766C2 ::v23(){vfunc_called(this, "_ZN6S766C23v23Ev");}
void  S766C2 ::v24(){vfunc_called(this, "_ZN6S766C23v24Ev");}
void  S766C2 ::v25(){vfunc_called(this, "_ZN6S766C23v25Ev");}
void  S766C2 ::v26(){vfunc_called(this, "_ZN6S766C23v26Ev");}
void  S766C2 ::v27(){vfunc_called(this, "_ZN6S766C23v27Ev");}
void  S766C2 ::v28(){vfunc_called(this, "_ZN6S766C23v28Ev");}
void  S766C2 ::v29(){vfunc_called(this, "_ZN6S766C23v29Ev");}
void  S766C2 ::v30(){vfunc_called(this, "_ZN6S766C23v30Ev");}
S766C2 ::~S766C2(){ note_dtor("S766C2", this);} // tgen
S766C2 ::S766C2(){ note_ctor("S766C2", this);} // tgen

static void Test_S766C2()
{
  extern Class_Descriptor cd_S766C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S766C2, buf);
    S766C2 *dp, &lv = *(dp=new (buf) S766C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S766C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S766C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S766C4*)(S766C3*), 0, "S766C2");
    check_base_class_offset(lv, (S766C4*)(S766C3*), 0, "S766C2");
    check_base_class_offset(lv, (S766C3*), 0, "S766C2");
    check_field_offset(lv, s766c2f0, ABISELECT(80,44), "S766C2.s766c2f0");
    check_field_offset(lv, s766c2f1, ABISELECT(120,68), "S766C2.s766c2f1");
    check_field_offset(lv, s766c2f2, ABISELECT(128,72), "S766C2.s766c2f2");
    test_class_info(&lv, &cd_S766C2);
    dp->~S766C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS766C2(Test_S766C2, "S766C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S766C2C1Ev();
extern void _ZN6S766C2D1Ev();
Name_Map name_map_S766C2[] = {
  NSPAIR(_ZN6S766C2C1Ev),
  NSPAIR(_ZN6S766C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S766C4;
extern VTBL_ENTRY _ZTI6S766C4[];
extern  VTBL_ENTRY _ZTV6S766C4[];
extern Class_Descriptor cd_S766C3;
extern VTBL_ENTRY _ZTI6S766C3[];
extern  VTBL_ENTRY _ZTV6S766C3[];
static Base_Class bases_S766C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S766C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S766C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S766C2[];
extern void _ZN6S766C2D1Ev();
extern void _ZN6S766C2D0Ev();
extern void _ZN6S766C42v7Ev();
extern void _ZN6S766C42v8Ev();
extern void _ZN6S766C42v9Ev();
extern void _ZN6S766C43v10Ev();
extern void _ZN6S766C43v11Ev();
extern void _ZN6S766C33v12Ev();
extern void _ZN6S766C33v13Ev();
extern void _ZN6S766C33v14Ev();
extern void _ZN6S766C33v15Ev();
extern void _ZN6S766C33v16Ev();
extern void _ZN6S766C33v17Ev();
extern void _ZN6S766C33v18Ev();
extern void _ZN6S766C33v19Ev();
extern void _ZN6S766C33v20Ev();
extern void _ZN6S766C33v21Ev();
extern void _ZN6S766C33v22Ev();
extern void _ZN6S766C23v23Ev();
extern void _ZN6S766C23v24Ev();
extern void _ZN6S766C23v25Ev();
extern void _ZN6S766C23v26Ev();
extern void _ZN6S766C23v27Ev();
extern void _ZN6S766C23v28Ev();
extern void _ZN6S766C23v29Ev();
extern void _ZN6S766C23v30Ev();
static  VTBL_ENTRY vtc_S766C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S766C2[0]),
  (VTBL_ENTRY)&_ZN6S766C2D1Ev,
  (VTBL_ENTRY)&_ZN6S766C2D0Ev,
  (VTBL_ENTRY)&_ZN6S766C42v7Ev,
  (VTBL_ENTRY)&_ZN6S766C42v8Ev,
  (VTBL_ENTRY)&_ZN6S766C42v9Ev,
  (VTBL_ENTRY)&_ZN6S766C43v10Ev,
  (VTBL_ENTRY)&_ZN6S766C43v11Ev,
  (VTBL_ENTRY)&_ZN6S766C33v12Ev,
  (VTBL_ENTRY)&_ZN6S766C33v13Ev,
  (VTBL_ENTRY)&_ZN6S766C33v14Ev,
  (VTBL_ENTRY)&_ZN6S766C33v15Ev,
  (VTBL_ENTRY)&_ZN6S766C33v16Ev,
  (VTBL_ENTRY)&_ZN6S766C33v17Ev,
  (VTBL_ENTRY)&_ZN6S766C33v18Ev,
  (VTBL_ENTRY)&_ZN6S766C33v19Ev,
  (VTBL_ENTRY)&_ZN6S766C33v20Ev,
  (VTBL_ENTRY)&_ZN6S766C33v21Ev,
  (VTBL_ENTRY)&_ZN6S766C33v22Ev,
  (VTBL_ENTRY)&_ZN6S766C23v23Ev,
  (VTBL_ENTRY)&_ZN6S766C23v24Ev,
  (VTBL_ENTRY)&_ZN6S766C23v25Ev,
  (VTBL_ENTRY)&_ZN6S766C23v26Ev,
  (VTBL_ENTRY)&_ZN6S766C23v27Ev,
  (VTBL_ENTRY)&_ZN6S766C23v28Ev,
  (VTBL_ENTRY)&_ZN6S766C23v29Ev,
  (VTBL_ENTRY)&_ZN6S766C23v30Ev,
};
extern VTBL_ENTRY _ZTI6S766C2[];
extern  VTBL_ENTRY _ZTV6S766C2[];
Class_Descriptor cd_S766C2 = {  "S766C2", // class name
  bases_S766C2, 3,
  &(vtc_S766C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S766C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S766C2),28, //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  S766C1  : S766C2 {
  void *s766c1f0;
  char s766c1f1[255];
  ::S744C15_nt s766c1f2;
  virtual void  v1(); // _ZN6S766C12v1Ev
  virtual void  v2(); // _ZN6S766C12v2Ev
  virtual void  v3(); // _ZN6S766C12v3Ev
  virtual void  v4(); // _ZN6S766C12v4Ev
  virtual void  v5(); // _ZN6S766C12v5Ev
  virtual void  v6(); // _ZN6S766C12v6Ev
  ~S766C1(); // tgen
  S766C1(); // tgen
};
//SIG(1 S766C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v7 v8 v9 v10 v11} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v23 v24 v25 v26 v27 v28 v29 v30 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 Fp Fc[255] FC10{ m Fp}}


void  S766C1 ::v1(){vfunc_called(this, "_ZN6S766C12v1Ev");}
void  S766C1 ::v2(){vfunc_called(this, "_ZN6S766C12v2Ev");}
void  S766C1 ::v3(){vfunc_called(this, "_ZN6S766C12v3Ev");}
void  S766C1 ::v4(){vfunc_called(this, "_ZN6S766C12v4Ev");}
void  S766C1 ::v5(){vfunc_called(this, "_ZN6S766C12v5Ev");}
void  S766C1 ::v6(){vfunc_called(this, "_ZN6S766C12v6Ev");}
S766C1 ::~S766C1(){ note_dtor("S766C1", this);} // tgen
S766C1 ::S766C1(){ note_ctor("S766C1", this);} // tgen

static void Test_S766C1()
{
  extern Class_Descriptor cd_S766C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,88)];
    init_test(&cd_S766C1, buf);
    S766C1 *dp, &lv = *(dp=new (buf) S766C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,348), "sizeof(S766C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S766C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S766C4*)(S766C3*)(S766C2*), 0, "S766C1");
    check_base_class_offset(lv, (S766C4*)(S766C3*)(S766C2*), 0, "S766C1");
    check_base_class_offset(lv, (S766C3*)(S766C2*), 0, "S766C1");
    check_base_class_offset(lv, (S766C2*), 0, "S766C1");
    check_field_offset(lv, s766c1f0, ABISELECT(152,84), "S766C1.s766c1f0");
    check_field_offset(lv, s766c1f1, ABISELECT(160,88), "S766C1.s766c1f1");
    check_field_offset(lv, s766c1f2, ABISELECT(416,344), "S766C1.s766c1f2");
    test_class_info(&lv, &cd_S766C1);
    dp->~S766C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS766C1(Test_S766C1, "S766C1", ABISELECT(424,348));

#else // __cplusplus

extern void _ZN6S766C1C1Ev();
extern void _ZN6S766C1D1Ev();
Name_Map name_map_S766C1[] = {
  NSPAIR(_ZN6S766C1C1Ev),
  NSPAIR(_ZN6S766C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S766C4;
extern VTBL_ENTRY _ZTI6S766C4[];
extern  VTBL_ENTRY _ZTV6S766C4[];
extern Class_Descriptor cd_S766C3;
extern VTBL_ENTRY _ZTI6S766C3[];
extern  VTBL_ENTRY _ZTV6S766C3[];
extern Class_Descriptor cd_S766C2;
extern VTBL_ENTRY _ZTI6S766C2[];
extern  VTBL_ENTRY _ZTV6S766C2[];
static Base_Class bases_S766C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S766C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S766C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S766C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S766C1[];
extern void _ZN6S766C1D1Ev();
extern void _ZN6S766C1D0Ev();
extern void _ZN6S766C42v7Ev();
extern void _ZN6S766C42v8Ev();
extern void _ZN6S766C42v9Ev();
extern void _ZN6S766C43v10Ev();
extern void _ZN6S766C43v11Ev();
extern void _ZN6S766C33v12Ev();
extern void _ZN6S766C33v13Ev();
extern void _ZN6S766C33v14Ev();
extern void _ZN6S766C33v15Ev();
extern void _ZN6S766C33v16Ev();
extern void _ZN6S766C33v17Ev();
extern void _ZN6S766C33v18Ev();
extern void _ZN6S766C33v19Ev();
extern void _ZN6S766C33v20Ev();
extern void _ZN6S766C33v21Ev();
extern void _ZN6S766C33v22Ev();
extern void _ZN6S766C23v23Ev();
extern void _ZN6S766C23v24Ev();
extern void _ZN6S766C23v25Ev();
extern void _ZN6S766C23v26Ev();
extern void _ZN6S766C23v27Ev();
extern void _ZN6S766C23v28Ev();
extern void _ZN6S766C23v29Ev();
extern void _ZN6S766C23v30Ev();
extern void _ZN6S766C12v1Ev();
extern void _ZN6S766C12v2Ev();
extern void _ZN6S766C12v3Ev();
extern void _ZN6S766C12v4Ev();
extern void _ZN6S766C12v5Ev();
extern void _ZN6S766C12v6Ev();
static  VTBL_ENTRY vtc_S766C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S766C1[0]),
  (VTBL_ENTRY)&_ZN6S766C1D1Ev,
  (VTBL_ENTRY)&_ZN6S766C1D0Ev,
  (VTBL_ENTRY)&_ZN6S766C42v7Ev,
  (VTBL_ENTRY)&_ZN6S766C42v8Ev,
  (VTBL_ENTRY)&_ZN6S766C42v9Ev,
  (VTBL_ENTRY)&_ZN6S766C43v10Ev,
  (VTBL_ENTRY)&_ZN6S766C43v11Ev,
  (VTBL_ENTRY)&_ZN6S766C33v12Ev,
  (VTBL_ENTRY)&_ZN6S766C33v13Ev,
  (VTBL_ENTRY)&_ZN6S766C33v14Ev,
  (VTBL_ENTRY)&_ZN6S766C33v15Ev,
  (VTBL_ENTRY)&_ZN6S766C33v16Ev,
  (VTBL_ENTRY)&_ZN6S766C33v17Ev,
  (VTBL_ENTRY)&_ZN6S766C33v18Ev,
  (VTBL_ENTRY)&_ZN6S766C33v19Ev,
  (VTBL_ENTRY)&_ZN6S766C33v20Ev,
  (VTBL_ENTRY)&_ZN6S766C33v21Ev,
  (VTBL_ENTRY)&_ZN6S766C33v22Ev,
  (VTBL_ENTRY)&_ZN6S766C23v23Ev,
  (VTBL_ENTRY)&_ZN6S766C23v24Ev,
  (VTBL_ENTRY)&_ZN6S766C23v25Ev,
  (VTBL_ENTRY)&_ZN6S766C23v26Ev,
  (VTBL_ENTRY)&_ZN6S766C23v27Ev,
  (VTBL_ENTRY)&_ZN6S766C23v28Ev,
  (VTBL_ENTRY)&_ZN6S766C23v29Ev,
  (VTBL_ENTRY)&_ZN6S766C23v30Ev,
  (VTBL_ENTRY)&_ZN6S766C12v1Ev,
  (VTBL_ENTRY)&_ZN6S766C12v2Ev,
  (VTBL_ENTRY)&_ZN6S766C12v3Ev,
  (VTBL_ENTRY)&_ZN6S766C12v4Ev,
  (VTBL_ENTRY)&_ZN6S766C12v5Ev,
  (VTBL_ENTRY)&_ZN6S766C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S766C1[];
extern  VTBL_ENTRY _ZTV6S766C1[];
Class_Descriptor cd_S766C1 = {  "S766C1", // class name
  bases_S766C1, 4,
  &(vtc_S766C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,348), // object size
  NSPAIRA(_ZTI6S766C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S766C1),34, //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  S765C4  : S770C5_nt {
  virtual void  v7(); // _ZN6S765C42v7Ev
  virtual void  v8(); // _ZN6S765C42v8Ev
  virtual void  v9(); // _ZN6S765C42v9Ev
  virtual void  v10(); // _ZN6S765C43v10Ev
  virtual void  v11(); // _ZN6S765C43v11Ev
  ~S765C4(); // tgen
  S765C4(); // tgen
};
//SIG(-1 S765C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S765C4 ::v7(){vfunc_called(this, "_ZN6S765C42v7Ev");}
void  S765C4 ::v8(){vfunc_called(this, "_ZN6S765C42v8Ev");}
void  S765C4 ::v9(){vfunc_called(this, "_ZN6S765C42v9Ev");}
void  S765C4 ::v10(){vfunc_called(this, "_ZN6S765C43v10Ev");}
void  S765C4 ::v11(){vfunc_called(this, "_ZN6S765C43v11Ev");}
S765C4 ::~S765C4(){ note_dtor("S765C4", this);} // tgen
S765C4 ::S765C4(){ note_ctor("S765C4", this);} // tgen

static void Test_S765C4()
{
  extern Class_Descriptor cd_S765C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S765C4, buf);
    S765C4 *dp, &lv = *(dp=new (buf) S765C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S765C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S765C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S765C4");
    test_class_info(&lv, &cd_S765C4);
    dp->~S765C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS765C4(Test_S765C4, "S765C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S765C4C1Ev();
extern void _ZN6S765C4D1Ev();
Name_Map name_map_S765C4[] = {
  NSPAIR(_ZN6S765C4C1Ev),
  NSPAIR(_ZN6S765C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S765C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S765C4[];
extern void _ZN6S765C4D1Ev();
extern void _ZN6S765C4D0Ev();
extern void _ZN6S765C42v7Ev();
extern void _ZN6S765C42v8Ev();
extern void _ZN6S765C42v9Ev();
extern void _ZN6S765C43v10Ev();
extern void _ZN6S765C43v11Ev();
static  VTBL_ENTRY vtc_S765C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S765C4[0]),
  (VTBL_ENTRY)&_ZN6S765C4D1Ev,
  (VTBL_ENTRY)&_ZN6S765C4D0Ev,
  (VTBL_ENTRY)&_ZN6S765C42v7Ev,
  (VTBL_ENTRY)&_ZN6S765C42v8Ev,
  (VTBL_ENTRY)&_ZN6S765C42v9Ev,
  (VTBL_ENTRY)&_ZN6S765C43v10Ev,
  (VTBL_ENTRY)&_ZN6S765C43v11Ev,
};
extern VTBL_ENTRY _ZTI6S765C4[];
extern  VTBL_ENTRY _ZTV6S765C4[];
Class_Descriptor cd_S765C4 = {  "S765C4", // class name
  bases_S765C4, 1,
  &(vtc_S765C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S765C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S765C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S765C3  : S765C4 {
  void *s765c3f0[3];
  ::S770C6_nt s765c3f1;
  virtual void  v12(); // _ZN6S765C33v12Ev
  virtual void  v13(); // _ZN6S765C33v13Ev
  virtual void  v14(); // _ZN6S765C33v14Ev
  virtual void  v15(); // _ZN6S765C33v15Ev
  virtual void  v16(); // _ZN6S765C33v16Ev
  virtual void  v17(); // _ZN6S765C33v17Ev
  virtual void  v18(); // _ZN6S765C33v18Ev
  virtual void  v19(); // _ZN6S765C33v19Ev
  virtual void  v20(); // _ZN6S765C33v20Ev
  virtual void  v21(); // _ZN6S765C33v21Ev
  virtual void  v22(); // _ZN6S765C33v22Ev
  ~S765C3(); // tgen
  S765C3(); // tgen
};
//SIG(-1 S765C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S765C3 ::v12(){vfunc_called(this, "_ZN6S765C33v12Ev");}
void  S765C3 ::v13(){vfunc_called(this, "_ZN6S765C33v13Ev");}
void  S765C3 ::v14(){vfunc_called(this, "_ZN6S765C33v14Ev");}
void  S765C3 ::v15(){vfunc_called(this, "_ZN6S765C33v15Ev");}
void  S765C3 ::v16(){vfunc_called(this, "_ZN6S765C33v16Ev");}
void  S765C3 ::v17(){vfunc_called(this, "_ZN6S765C33v17Ev");}
void  S765C3 ::v18(){vfunc_called(this, "_ZN6S765C33v18Ev");}
void  S765C3 ::v19(){vfunc_called(this, "_ZN6S765C33v19Ev");}
void  S765C3 ::v20(){vfunc_called(this, "_ZN6S765C33v20Ev");}
void  S765C3 ::v21(){vfunc_called(this, "_ZN6S765C33v21Ev");}
void  S765C3 ::v22(){vfunc_called(this, "_ZN6S765C33v22Ev");}
S765C3 ::~S765C3(){ note_dtor("S765C3", this);} // tgen
S765C3 ::S765C3(){ note_ctor("S765C3", this);} // tgen

static void Test_S765C3()
{
  extern Class_Descriptor cd_S765C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S765C3, buf);
    S765C3 *dp, &lv = *(dp=new (buf) S765C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S765C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S765C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S765C4*), 0, "S765C3");
    check_base_class_offset(lv, (S765C4*), 0, "S765C3");
    check_field_offset(lv, s765c3f0, ABISELECT(16,8), "S765C3.s765c3f0");
    check_field_offset(lv, s765c3f1, ABISELECT(40,20), "S765C3.s765c3f1");
    test_class_info(&lv, &cd_S765C3);
    dp->~S765C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS765C3(Test_S765C3, "S765C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S765C3C1Ev();
extern void _ZN6S765C3D1Ev();
Name_Map name_map_S765C3[] = {
  NSPAIR(_ZN6S765C3C1Ev),
  NSPAIR(_ZN6S765C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S765C4;
extern VTBL_ENTRY _ZTI6S765C4[];
extern  VTBL_ENTRY _ZTV6S765C4[];
static Base_Class bases_S765C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S765C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S765C3[];
extern void _ZN6S765C3D1Ev();
extern void _ZN6S765C3D0Ev();
extern void _ZN6S765C42v7Ev();
extern void _ZN6S765C42v8Ev();
extern void _ZN6S765C42v9Ev();
extern void _ZN6S765C43v10Ev();
extern void _ZN6S765C43v11Ev();
extern void _ZN6S765C33v12Ev();
extern void _ZN6S765C33v13Ev();
extern void _ZN6S765C33v14Ev();
extern void _ZN6S765C33v15Ev();
extern void _ZN6S765C33v16Ev();
extern void _ZN6S765C33v17Ev();
extern void _ZN6S765C33v18Ev();
extern void _ZN6S765C33v19Ev();
extern void _ZN6S765C33v20Ev();
extern void _ZN6S765C33v21Ev();
extern void _ZN6S765C33v22Ev();
static  VTBL_ENTRY vtc_S765C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S765C3[0]),
  (VTBL_ENTRY)&_ZN6S765C3D1Ev,
  (VTBL_ENTRY)&_ZN6S765C3D0Ev,
  (VTBL_ENTRY)&_ZN6S765C42v7Ev,
  (VTBL_ENTRY)&_ZN6S765C42v8Ev,
  (VTBL_ENTRY)&_ZN6S765C42v9Ev,
  (VTBL_ENTRY)&_ZN6S765C43v10Ev,
  (VTBL_ENTRY)&_ZN6S765C43v11Ev,
  (VTBL_ENTRY)&_ZN6S765C33v12Ev,
  (VTBL_ENTRY)&_ZN6S765C33v13Ev,
  (VTBL_ENTRY)&_ZN6S765C33v14Ev,
  (VTBL_ENTRY)&_ZN6S765C33v15Ev,
  (VTBL_ENTRY)&_ZN6S765C33v16Ev,
  (VTBL_ENTRY)&_ZN6S765C33v17Ev,
  (VTBL_ENTRY)&_ZN6S765C33v18Ev,
  (VTBL_ENTRY)&_ZN6S765C33v19Ev,
  (VTBL_ENTRY)&_ZN6S765C33v20Ev,
  (VTBL_ENTRY)&_ZN6S765C33v21Ev,
  (VTBL_ENTRY)&_ZN6S765C33v22Ev,
};
extern VTBL_ENTRY _ZTI6S765C3[];
extern  VTBL_ENTRY _ZTV6S765C3[];
Class_Descriptor cd_S765C3 = {  "S765C3", // class name
  bases_S765C3, 2,
  &(vtc_S765C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S765C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S765C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S765C2  : S765C3 {
  ::S770C6_nt s765c2f0;
  ::S770C9_nt s765c2f1;
  void *s765c2f2[3];
  virtual void  v23(); // _ZN6S765C23v23Ev
  virtual void  v24(); // _ZN6S765C23v24Ev
  virtual void  v25(); // _ZN6S765C23v25Ev
  virtual void  v26(); // _ZN6S765C23v26Ev
  virtual void  v27(); // _ZN6S765C23v27Ev
  virtual void  v28(); // _ZN6S765C23v28Ev
  virtual void  v29(); // _ZN6S765C23v29Ev
  virtual void  v30(); // _ZN6S765C23v30Ev
  ~S765C2(); // tgen
  S765C2(); // tgen
};
//SIG(-1 S765C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S765C2 ::v23(){vfunc_called(this, "_ZN6S765C23v23Ev");}
void  S765C2 ::v24(){vfunc_called(this, "_ZN6S765C23v24Ev");}
void  S765C2 ::v25(){vfunc_called(this, "_ZN6S765C23v25Ev");}
void  S765C2 ::v26(){vfunc_called(this, "_ZN6S765C23v26Ev");}
void  S765C2 ::v27(){vfunc_called(this, "_ZN6S765C23v27Ev");}
void  S765C2 ::v28(){vfunc_called(this, "_ZN6S765C23v28Ev");}
void  S765C2 ::v29(){vfunc_called(this, "_ZN6S765C23v29Ev");}
void  S765C2 ::v30(){vfunc_called(this, "_ZN6S765C23v30Ev");}
S765C2 ::~S765C2(){ note_dtor("S765C2", this);} // tgen
S765C2 ::S765C2(){ note_ctor("S765C2", this);} // tgen

static void Test_S765C2()
{
  extern Class_Descriptor cd_S765C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S765C2, buf);
    S765C2 *dp, &lv = *(dp=new (buf) S765C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S765C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S765C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S765C4*)(S765C3*), 0, "S765C2");
    check_base_class_offset(lv, (S765C4*)(S765C3*), 0, "S765C2");
    check_base_class_offset(lv, (S765C3*), 0, "S765C2");
    check_field_offset(lv, s765c2f0, ABISELECT(80,44), "S765C2.s765c2f0");
    check_field_offset(lv, s765c2f1, ABISELECT(120,68), "S765C2.s765c2f1");
    check_field_offset(lv, s765c2f2, ABISELECT(128,72), "S765C2.s765c2f2");
    test_class_info(&lv, &cd_S765C2);
    dp->~S765C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS765C2(Test_S765C2, "S765C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S765C2C1Ev();
extern void _ZN6S765C2D1Ev();
Name_Map name_map_S765C2[] = {
  NSPAIR(_ZN6S765C2C1Ev),
  NSPAIR(_ZN6S765C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S765C4;
extern VTBL_ENTRY _ZTI6S765C4[];
extern  VTBL_ENTRY _ZTV6S765C4[];
extern Class_Descriptor cd_S765C3;
extern VTBL_ENTRY _ZTI6S765C3[];
extern  VTBL_ENTRY _ZTV6S765C3[];
static Base_Class bases_S765C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S765C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S765C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S765C2[];
extern void _ZN6S765C2D1Ev();
extern void _ZN6S765C2D0Ev();
extern void _ZN6S765C42v7Ev();
extern void _ZN6S765C42v8Ev();
extern void _ZN6S765C42v9Ev();
extern void _ZN6S765C43v10Ev();
extern void _ZN6S765C43v11Ev();
extern void _ZN6S765C33v12Ev();
extern void _ZN6S765C33v13Ev();
extern void _ZN6S765C33v14Ev();
extern void _ZN6S765C33v15Ev();
extern void _ZN6S765C33v16Ev();
extern void _ZN6S765C33v17Ev();
extern void _ZN6S765C33v18Ev();
extern void _ZN6S765C33v19Ev();
extern void _ZN6S765C33v20Ev();
extern void _ZN6S765C33v21Ev();
extern void _ZN6S765C33v22Ev();
extern void _ZN6S765C23v23Ev();
extern void _ZN6S765C23v24Ev();
extern void _ZN6S765C23v25Ev();
extern void _ZN6S765C23v26Ev();
extern void _ZN6S765C23v27Ev();
extern void _ZN6S765C23v28Ev();
extern void _ZN6S765C23v29Ev();
extern void _ZN6S765C23v30Ev();
static  VTBL_ENTRY vtc_S765C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S765C2[0]),
  (VTBL_ENTRY)&_ZN6S765C2D1Ev,
  (VTBL_ENTRY)&_ZN6S765C2D0Ev,
  (VTBL_ENTRY)&_ZN6S765C42v7Ev,
  (VTBL_ENTRY)&_ZN6S765C42v8Ev,
  (VTBL_ENTRY)&_ZN6S765C42v9Ev,
  (VTBL_ENTRY)&_ZN6S765C43v10Ev,
  (VTBL_ENTRY)&_ZN6S765C43v11Ev,
  (VTBL_ENTRY)&_ZN6S765C33v12Ev,
  (VTBL_ENTRY)&_ZN6S765C33v13Ev,
  (VTBL_ENTRY)&_ZN6S765C33v14Ev,
  (VTBL_ENTRY)&_ZN6S765C33v15Ev,
  (VTBL_ENTRY)&_ZN6S765C33v16Ev,
  (VTBL_ENTRY)&_ZN6S765C33v17Ev,
  (VTBL_ENTRY)&_ZN6S765C33v18Ev,
  (VTBL_ENTRY)&_ZN6S765C33v19Ev,
  (VTBL_ENTRY)&_ZN6S765C33v20Ev,
  (VTBL_ENTRY)&_ZN6S765C33v21Ev,
  (VTBL_ENTRY)&_ZN6S765C33v22Ev,
  (VTBL_ENTRY)&_ZN6S765C23v23Ev,
  (VTBL_ENTRY)&_ZN6S765C23v24Ev,
  (VTBL_ENTRY)&_ZN6S765C23v25Ev,
  (VTBL_ENTRY)&_ZN6S765C23v26Ev,
  (VTBL_ENTRY)&_ZN6S765C23v27Ev,
  (VTBL_ENTRY)&_ZN6S765C23v28Ev,
  (VTBL_ENTRY)&_ZN6S765C23v29Ev,
  (VTBL_ENTRY)&_ZN6S765C23v30Ev,
};
extern VTBL_ENTRY _ZTI6S765C2[];
extern  VTBL_ENTRY _ZTV6S765C2[];
Class_Descriptor cd_S765C2 = {  "S765C2", // class name
  bases_S765C2, 3,
  &(vtc_S765C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S765C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S765C2),28, //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  S765C1  : S765C2 {
  int s765c1f0;
  ::S303C11_nt s765c1f1;
  virtual void  v1(); // _ZN6S765C12v1Ev
  virtual void  v2(); // _ZN6S765C12v2Ev
  virtual void  v3(); // _ZN6S765C12v3Ev
  virtual void  v4(); // _ZN6S765C12v4Ev
  virtual void  v5(); // _ZN6S765C12v5Ev
  virtual void  v6(); // _ZN6S765C12v6Ev
  ~S765C1(); // tgen
  S765C1(); // tgen
};
//SIG(1 S765C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v7 v8 v9 v10 v11} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v23 v24 v25 v26 v27 v28 v29 v30 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 v4 v5 v6 Fi FC10{ m FC11{ m FL}}}


void  S765C1 ::v1(){vfunc_called(this, "_ZN6S765C12v1Ev");}
void  S765C1 ::v2(){vfunc_called(this, "_ZN6S765C12v2Ev");}
void  S765C1 ::v3(){vfunc_called(this, "_ZN6S765C12v3Ev");}
void  S765C1 ::v4(){vfunc_called(this, "_ZN6S765C12v4Ev");}
void  S765C1 ::v5(){vfunc_called(this, "_ZN6S765C12v5Ev");}
void  S765C1 ::v6(){vfunc_called(this, "_ZN6S765C12v6Ev");}
S765C1 ::~S765C1(){ note_dtor("S765C1", this);} // tgen
S765C1 ::S765C1(){ note_ctor("S765C1", this);} // tgen

static void Test_S765C1()
{
  extern Class_Descriptor cd_S765C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,25)];
    init_test(&cd_S765C1, buf);
    S765C1 *dp, &lv = *(dp=new (buf) S765C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,96), "sizeof(S765C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S765C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S765C4*)(S765C3*)(S765C2*), 0, "S765C1");
    check_base_class_offset(lv, (S765C4*)(S765C3*)(S765C2*), 0, "S765C1");
    check_base_class_offset(lv, (S765C3*)(S765C2*), 0, "S765C1");
    check_base_class_offset(lv, (S765C2*), 0, "S765C1");
    check_field_offset(lv, s765c1f0, ABISELECT(152,84), "S765C1.s765c1f0");
    check_field_offset(lv, s765c1f1, ABISELECT(160,88), "S765C1.s765c1f1");
    test_class_info(&lv, &cd_S765C1);
    dp->~S765C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS765C1(Test_S765C1, "S765C1", ABISELECT(168,96));

#else // __cplusplus

extern void _ZN6S765C1C1Ev();
extern void _ZN6S765C1D1Ev();
Name_Map name_map_S765C1[] = {
  NSPAIR(_ZN6S765C1C1Ev),
  NSPAIR(_ZN6S765C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S765C4;
extern VTBL_ENTRY _ZTI6S765C4[];
extern  VTBL_ENTRY _ZTV6S765C4[];
extern Class_Descriptor cd_S765C3;
extern VTBL_ENTRY _ZTI6S765C3[];
extern  VTBL_ENTRY _ZTV6S765C3[];
extern Class_Descriptor cd_S765C2;
extern VTBL_ENTRY _ZTI6S765C2[];
extern  VTBL_ENTRY _ZTV6S765C2[];
static Base_Class bases_S765C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S765C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S765C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S765C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S765C1[];
extern void _ZN6S765C1D1Ev();
extern void _ZN6S765C1D0Ev();
extern void _ZN6S765C42v7Ev();
extern void _ZN6S765C42v8Ev();
extern void _ZN6S765C42v9Ev();
extern void _ZN6S765C43v10Ev();
extern void _ZN6S765C43v11Ev();
extern void _ZN6S765C33v12Ev();
extern void _ZN6S765C33v13Ev();
extern void _ZN6S765C33v14Ev();
extern void _ZN6S765C33v15Ev();
extern void _ZN6S765C33v16Ev();
extern void _ZN6S765C33v17Ev();
extern void _ZN6S765C33v18Ev();
extern void _ZN6S765C33v19Ev();
extern void _ZN6S765C33v20Ev();
extern void _ZN6S765C33v21Ev();
extern void _ZN6S765C33v22Ev();
extern void _ZN6S765C23v23Ev();
extern void _ZN6S765C23v24Ev();
extern void _ZN6S765C23v25Ev();
extern void _ZN6S765C23v26Ev();
extern void _ZN6S765C23v27Ev();
extern void _ZN6S765C23v28Ev();
extern void _ZN6S765C23v29Ev();
extern void _ZN6S765C23v30Ev();
extern void _ZN6S765C12v1Ev();
extern void _ZN6S765C12v2Ev();
extern void _ZN6S765C12v3Ev();
extern void _ZN6S765C12v4Ev();
extern void _ZN6S765C12v5Ev();
extern void _ZN6S765C12v6Ev();
static  VTBL_ENTRY vtc_S765C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S765C1[0]),
  (VTBL_ENTRY)&_ZN6S765C1D1Ev,
  (VTBL_ENTRY)&_ZN6S765C1D0Ev,
  (VTBL_ENTRY)&_ZN6S765C42v7Ev,
  (VTBL_ENTRY)&_ZN6S765C42v8Ev,
  (VTBL_ENTRY)&_ZN6S765C42v9Ev,
  (VTBL_ENTRY)&_ZN6S765C43v10Ev,
  (VTBL_ENTRY)&_ZN6S765C43v11Ev,
  (VTBL_ENTRY)&_ZN6S765C33v12Ev,
  (VTBL_ENTRY)&_ZN6S765C33v13Ev,
  (VTBL_ENTRY)&_ZN6S765C33v14Ev,
  (VTBL_ENTRY)&_ZN6S765C33v15Ev,
  (VTBL_ENTRY)&_ZN6S765C33v16Ev,
  (VTBL_ENTRY)&_ZN6S765C33v17Ev,
  (VTBL_ENTRY)&_ZN6S765C33v18Ev,
  (VTBL_ENTRY)&_ZN6S765C33v19Ev,
  (VTBL_ENTRY)&_ZN6S765C33v20Ev,
  (VTBL_ENTRY)&_ZN6S765C33v21Ev,
  (VTBL_ENTRY)&_ZN6S765C33v22Ev,
  (VTBL_ENTRY)&_ZN6S765C23v23Ev,
  (VTBL_ENTRY)&_ZN6S765C23v24Ev,
  (VTBL_ENTRY)&_ZN6S765C23v25Ev,
  (VTBL_ENTRY)&_ZN6S765C23v26Ev,
  (VTBL_ENTRY)&_ZN6S765C23v27Ev,
  (VTBL_ENTRY)&_ZN6S765C23v28Ev,
  (VTBL_ENTRY)&_ZN6S765C23v29Ev,
  (VTBL_ENTRY)&_ZN6S765C23v30Ev,
  (VTBL_ENTRY)&_ZN6S765C12v1Ev,
  (VTBL_ENTRY)&_ZN6S765C12v2Ev,
  (VTBL_ENTRY)&_ZN6S765C12v3Ev,
  (VTBL_ENTRY)&_ZN6S765C12v4Ev,
  (VTBL_ENTRY)&_ZN6S765C12v5Ev,
  (VTBL_ENTRY)&_ZN6S765C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S765C1[];
extern  VTBL_ENTRY _ZTV6S765C1[];
Class_Descriptor cd_S765C1 = {  "S765C1", // class name
  bases_S765C1, 4,
  &(vtc_S765C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,96), // object size
  NSPAIRA(_ZTI6S765C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S765C1),34, //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  S5347C3  {
  virtual  ~S5347C3(); // _ZN7S5347C3D1Ev
  virtual void  v6(); // _ZN7S5347C32v6Ev
  virtual void  v7(); // _ZN7S5347C32v7Ev
  S5347C3(); // tgen
};
//SIG(-1 S5347C3) C1{ vd v1 v2}


 S5347C3 ::~S5347C3(){ note_dtor("S5347C3", this);}
void  S5347C3 ::v6(){vfunc_called(this, "_ZN7S5347C32v6Ev");}
void  S5347C3 ::v7(){vfunc_called(this, "_ZN7S5347C32v7Ev");}
S5347C3 ::S5347C3(){ note_ctor("S5347C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5347C3C1Ev();
extern void _ZN7S5347C3D1Ev();
Name_Map name_map_S5347C3[] = {
  NSPAIR(_ZN7S5347C3C1Ev),
  NSPAIR(_ZN7S5347C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5347C3[];
extern void _ZN7S5347C3D1Ev();
extern void _ZN7S5347C3D0Ev();
extern void _ZN7S5347C32v6Ev();
extern void _ZN7S5347C32v7Ev();
static  VTBL_ENTRY vtc_S5347C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5347C3[0]),
  (VTBL_ENTRY)&_ZN7S5347C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5347C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5347C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5347C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5347C3[];
extern  VTBL_ENTRY _ZTV7S5347C3[];
Class_Descriptor cd_S5347C3 = {  "S5347C3", // class name
  0,0,//no base classes
  &(vtc_S5347C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5347C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5347C3),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  S5347C2_nt  : S5347C3 {
  int s5347c2f0[4];
  virtual  ~S5347C2_nt(); // _ZN10S5347C2_ntD1Ev
  virtual void  v8(); // _ZN10S5347C2_nt2v8Ev
  virtual void  v9(); // _ZN10S5347C2_nt2v9Ev
  S5347C2_nt(); // tgen
};
//SIG(-1 S5347C2_nt) C1{ BC2{ vd v3 v4} vd v1 v2 Fi[4]}


 S5347C2_nt ::~S5347C2_nt(){ note_dtor("S5347C2_nt", this);}
void  S5347C2_nt ::v8(){vfunc_called(this, "_ZN10S5347C2_nt2v8Ev");}
void  S5347C2_nt ::v9(){vfunc_called(this, "_ZN10S5347C2_nt2v9Ev");}
S5347C2_nt ::S5347C2_nt(){ note_ctor("S5347C2_nt", this);} // tgen

//skip512 S5347C2_nt

#else // __cplusplus

extern void _ZN10S5347C2_ntC1Ev();
extern void _ZN10S5347C2_ntD1Ev();
Name_Map name_map_S5347C2_nt[] = {
  NSPAIR(_ZN10S5347C2_ntC1Ev),
  NSPAIR(_ZN10S5347C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5347C3;
extern VTBL_ENTRY _ZTI7S5347C3[];
extern  VTBL_ENTRY _ZTV7S5347C3[];
static Base_Class bases_S5347C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5347C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S5347C2_nt[];
extern void _ZN10S5347C2_ntD1Ev();
extern void _ZN10S5347C2_ntD0Ev();
extern void _ZN7S5347C32v6Ev();
extern void _ZN7S5347C32v7Ev();
extern void _ZN10S5347C2_nt2v8Ev();
extern void _ZN10S5347C2_nt2v9Ev();
static  VTBL_ENTRY vtc_S5347C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5347C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5347C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5347C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S5347C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5347C32v7Ev,
  (VTBL_ENTRY)&_ZN10S5347C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5347C2_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI10S5347C2_nt[];
VTBL_ENTRY *P__ZTI10S5347C2_nt = _ZTI10S5347C2_nt; 
extern  VTBL_ENTRY _ZTV10S5347C2_nt[];
Class_Descriptor cd_S5347C2_nt = {  "S5347C2_nt", // class name
  bases_S5347C2_nt, 1,
  &(vtc_S5347C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI10S5347C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5347C2_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5347C1  : S5347C2_nt {
  ::S3047C20_nt s5347c1f0;
  virtual void  v1(); // _ZN7S5347C12v1Ev
  virtual void  v2(); // _ZN7S5347C12v2Ev
  virtual void  v3(); // _ZN7S5347C12v3Ev
  virtual void  v4(); // _ZN7S5347C12v4Ev
  virtual void  v5(); // _ZN7S5347C12v5Ev
  ~S5347C1(); // tgen
  S5347C1(); // tgen
};
//SIG(1 S5347C1) C1{ BC2{ BC3{ vd v6 v7} vd v8 v9 Fi[4]} v1 v2 v3 v4 v5 FC4{ BC5{ vd v12 v13} vd v10 v11 Fi[5] FC6{ BC5 vd v14 v15 FL} FC7{ BC8{ m Fp Fi[2] FC9{ m}} BC5 vd v16 v17} FC10{ m Fp Fi FC11{ m}} FC12{ vd m FC13{ m Fs[6] Fi[2] Fc Fs}} FC12}}


void  S5347C1 ::v1(){vfunc_called(this, "_ZN7S5347C12v1Ev");}
void  S5347C1 ::v2(){vfunc_called(this, "_ZN7S5347C12v2Ev");}
void  S5347C1 ::v3(){vfunc_called(this, "_ZN7S5347C12v3Ev");}
void  S5347C1 ::v4(){vfunc_called(this, "_ZN7S5347C12v4Ev");}
void  S5347C1 ::v5(){vfunc_called(this, "_ZN7S5347C12v5Ev");}
S5347C1 ::~S5347C1(){ note_dtor("S5347C1", this);} // tgen
S5347C1 ::S5347C1(){ note_ctor("S5347C1", this);} // tgen

static void Test_S5347C1()
{
  extern Class_Descriptor cd_S5347C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,37)];
    init_test(&cd_S5347C1, buf);
    S5347C1 *dp, &lv = *(dp=new (buf) S5347C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,144), "sizeof(S5347C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5347C1)");
    check_base_class_offset(lv, (S5347C3*)(S5347C2_nt*), 0, "S5347C1");
    check_base_class_offset(lv, (S5347C2_nt*), 0, "S5347C1");
    check_field_offset(lv, s5347c1f0, ABISELECT(24,20), "S5347C1.s5347c1f0");
    test_class_info(&lv, &cd_S5347C1);
    dp->~S5347C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5347C1(Test_S5347C1, "S5347C1", ABISELECT(184,144));

#else // __cplusplus

extern void _ZN7S5347C1C1Ev();
extern void _ZN7S5347C1D1Ev();
Name_Map name_map_S5347C1[] = {
  NSPAIR(_ZN7S5347C1C1Ev),
  NSPAIR(_ZN7S5347C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5347C3;
extern VTBL_ENTRY _ZTI7S5347C3[];
extern  VTBL_ENTRY _ZTV7S5347C3[];
extern Class_Descriptor cd_S5347C2_nt;
extern VTBL_ENTRY _ZTI10S5347C2_nt[];
extern  VTBL_ENTRY _ZTV10S5347C2_nt[];
static Base_Class bases_S5347C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5347C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5347C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S5347C1[];
extern void _ZN7S5347C1D1Ev();
extern void _ZN7S5347C1D0Ev();
extern void _ZN7S5347C32v6Ev();
extern void _ZN7S5347C32v7Ev();
extern void _ZN10S5347C2_nt2v8Ev();
extern void _ZN10S5347C2_nt2v9Ev();
extern void _ZN7S5347C12v1Ev();
extern void _ZN7S5347C12v2Ev();
extern void _ZN7S5347C12v3Ev();
extern void _ZN7S5347C12v4Ev();
extern void _ZN7S5347C12v5Ev();
static  VTBL_ENTRY vtc_S5347C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5347C1[0]),
  (VTBL_ENTRY)&_ZN7S5347C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5347C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5347C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5347C32v7Ev,
  (VTBL_ENTRY)&_ZN10S5347C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5347C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S5347C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5347C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5347C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5347C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5347C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S5347C1[];
extern  VTBL_ENTRY _ZTV7S5347C1[];
Class_Descriptor cd_S5347C1 = {  "S5347C1", // class name
  bases_S5347C1, 2,
  &(vtc_S5347C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,144), // object size
  NSPAIRA(_ZTI7S5347C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5347C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10413C2  {
  void *s10413c2f0;
  virtual  ~S10413C2(); // _ZN8S10413C2D1Ev
  virtual void  v2(); // _ZN8S10413C22v2Ev
  S10413C2(); // tgen
};
//SIG(-1 S10413C2) C1{ vd v1 Fp}


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

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

#else // __cplusplus

extern void _ZN8S10413C2C1Ev();
extern void _ZN8S10413C2D1Ev();
Name_Map name_map_S10413C2[] = {
  NSPAIR(_ZN8S10413C2C1Ev),
  NSPAIR(_ZN8S10413C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10413C2[];
extern void _ZN8S10413C2D1Ev();
extern void _ZN8S10413C2D0Ev();
extern void _ZN8S10413C22v2Ev();
static  VTBL_ENTRY vtc_S10413C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10413C2[0]),
  (VTBL_ENTRY)&_ZN8S10413C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10413C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10413C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S10413C2[];
extern  VTBL_ENTRY _ZTV8S10413C2[];
Class_Descriptor cd_S10413C2 = {  "S10413C2", // class name
  0,0,//no base classes
  &(vtc_S10413C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10413C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10413C2),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  S10413C1  : S10413C2 {
  void *s10413c1f0[6];
  ::S770C14 s10413c1f1;
  ::S770C17 s10413c1f2;
  ::S770C18_nt s10413c1f3;
  int s10413c1f4;
  char s10413c1f5[8];
  int s10413c1f6[2];
  ::S770C12 s10413c1f7;
  virtual  ~S10413C1(); // _ZN8S10413C1D1Ev
  virtual void  v1(); // _ZN8S10413C12v1Ev
  S10413C1(); // tgen
};
//SIG(1 S10413C1) C1{ BC2{ vd v2 Fp} vd v1 Fp[6] FC3{ Fc[52]} FC4{ Fi[3] Fc[4]} FC5{ Fc[64]} Fi Fc[8] Fi[2] FC6{ FC7{ FC8{ FC9{ Fc[20]} Fc[16]} FC3 FC10{ Fc[128]}} FC11{ Fc[4]} FC4 Fi FC5 FU12{ FC13{ Fi Fi} FL FC14{ Fi Fi Fi Fc[128]}} Fi}}


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

static void Test_S10413C1()
{
  extern Class_Descriptor cd_S10413C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(85,159)];
    init_test(&cd_S10413C1, buf);
    S10413C1 *dp, &lv = *(dp=new (buf) S10413C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,632), "sizeof(S10413C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10413C1)");
    check_base_class_offset(lv, (S10413C2*), 0, "S10413C1");
    check_field_offset(lv, s10413c1f0, ABISELECT(16,8), "S10413C1.s10413c1f0");
    check_field_offset(lv, s10413c1f1, ABISELECT(64,32), "S10413C1.s10413c1f1");
    check_field_offset(lv, s10413c1f2, ABISELECT(116,84), "S10413C1.s10413c1f2");
    check_field_offset(lv, s10413c1f3, ABISELECT(132,100), "S10413C1.s10413c1f3");
    check_field_offset(lv, s10413c1f4, ABISELECT(196,164), "S10413C1.s10413c1f4");
    check_field_offset(lv, s10413c1f5, ABISELECT(200,168), "S10413C1.s10413c1f5");
    check_field_offset(lv, s10413c1f6, ABISELECT(208,176), "S10413C1.s10413c1f6");
    check_field_offset(lv, s10413c1f7, ABISELECT(216,184), "S10413C1.s10413c1f7");
    test_class_info(&lv, &cd_S10413C1);
    dp->~S10413C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10413C1(Test_S10413C1, "S10413C1", ABISELECT(672,632));

#else // __cplusplus

extern void _ZN8S10413C1C1Ev();
extern void _ZN8S10413C1D1Ev();
Name_Map name_map_S10413C1[] = {
  NSPAIR(_ZN8S10413C1C1Ev),
  NSPAIR(_ZN8S10413C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10413C2;
extern VTBL_ENTRY _ZTI8S10413C2[];
extern  VTBL_ENTRY _ZTV8S10413C2[];
static Base_Class bases_S10413C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10413C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10413C1[];
extern void _ZN8S10413C1D1Ev();
extern void _ZN8S10413C1D0Ev();
extern void _ZN8S10413C22v2Ev();
extern void _ZN8S10413C12v1Ev();
static  VTBL_ENTRY vtc_S10413C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10413C1[0]),
  (VTBL_ENTRY)&_ZN8S10413C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10413C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10413C22v2Ev,
  (VTBL_ENTRY)&_ZN8S10413C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S10413C1[];
extern  VTBL_ENTRY _ZTV8S10413C1[];
Class_Descriptor cd_S10413C1 = {  "S10413C1", // class name
  bases_S10413C1, 1,
  &(vtc_S10413C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(672,632), // object size
  NSPAIRA(_ZTI8S10413C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10413C1),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  S8454C3  {
  char s8454c3f0[160];
  void  mf8454c3(); // _ZN7S8454C38mf8454c3Ev
};
//SIG(-1 S8454C3) C1{ m Fc[160]}


void  S8454C3 ::mf8454c3(){}

static void Test_S8454C3()
{
  {
    init_simple_test("S8454C3");
    S8454C3 lv;
    check2(sizeof(lv), 160, "sizeof(S8454C3)");
    check2(__alignof__(lv), 1, "__alignof__(S8454C3)");
    check_field_offset(lv, s8454c3f0, 0, "S8454C3.s8454c3f0");
  }
}
static Arrange_To_Call_Me vS8454C3(Test_S8454C3, "S8454C3", 160);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8454C2  {
  ::S8454C3 s8454c2f0;
  int s8454c2f1;
  char s8454c2f2;
  __tsi64 s8454c2f3[2];
  int s8454c2f4;
  virtual  ~S8454C2(); // _ZN7S8454C2D1Ev
  virtual void  v1(); // _ZN7S8454C22v1Ev
  virtual void  v2(); // _ZN7S8454C22v2Ev
  virtual void  v3(); // _ZN7S8454C22v3Ev
  S8454C2(); // tgen
};
//SIG(-1 S8454C2) C1{ vd v1 v2 v3 FC2{ m Fc[160]} Fi Fc FL[2] Fi}


 S8454C2 ::~S8454C2(){ note_dtor("S8454C2", this);}
void  S8454C2 ::v1(){vfunc_called(this, "_ZN7S8454C22v1Ev");}
void  S8454C2 ::v2(){vfunc_called(this, "_ZN7S8454C22v2Ev");}
void  S8454C2 ::v3(){vfunc_called(this, "_ZN7S8454C22v3Ev");}
S8454C2 ::S8454C2(){ note_ctor("S8454C2", this);} // tgen

static void Test_S8454C2()
{
  extern Class_Descriptor cd_S8454C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,49)];
    init_test(&cd_S8454C2, buf);
    S8454C2 *dp, &lv = *(dp=new (buf) S8454C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,192), "sizeof(S8454C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8454C2)");
    check_field_offset(lv, s8454c2f0, ABISELECT(8,4), "S8454C2.s8454c2f0");
    check_field_offset(lv, s8454c2f1, ABISELECT(168,164), "S8454C2.s8454c2f1");
    check_field_offset(lv, s8454c2f2, ABISELECT(172,168), "S8454C2.s8454c2f2");
    check_field_offset(lv, s8454c2f3, ABISELECT(176,172), "S8454C2.s8454c2f3");
    check_field_offset(lv, s8454c2f4, ABISELECT(192,188), "S8454C2.s8454c2f4");
    test_class_info(&lv, &cd_S8454C2);
    dp->~S8454C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8454C2(Test_S8454C2, "S8454C2", ABISELECT(200,192));

#else // __cplusplus

extern void _ZN7S8454C2C1Ev();
extern void _ZN7S8454C2D1Ev();
Name_Map name_map_S8454C2[] = {
  NSPAIR(_ZN7S8454C2C1Ev),
  NSPAIR(_ZN7S8454C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8454C2[];
extern void _ZN7S8454C2D1Ev();
extern void _ZN7S8454C2D0Ev();
extern void _ZN7S8454C22v1Ev();
extern void _ZN7S8454C22v2Ev();
extern void _ZN7S8454C22v3Ev();
static  VTBL_ENTRY vtc_S8454C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8454C2[0]),
  (VTBL_ENTRY)&_ZN7S8454C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8454C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8454C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8454C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8454C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S8454C2[];
extern  VTBL_ENTRY _ZTV7S8454C2[];
Class_Descriptor cd_S8454C2 = {  "S8454C2", // class name
  0,0,//no base classes
  &(vtc_S8454C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,192), // object size
  NSPAIRA(_ZTI7S8454C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8454C2),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  S8454C1  : S8454C2 {
  ::S770C12 s8454c1f0;
  virtual  ~S8454C1(); // _ZN7S8454C1D1Ev
  S8454C1(); // tgen
};
//SIG(1 S8454C1) C1{ BC2{ vd v1 v2 v3 FC3{ m Fc[160]} Fi Fc FL[2] Fi} vd FC4{ FC5{ FC6{ FC7{ Fc[20]} Fc[16]} FC8{ Fc[52]} FC9{ Fc[128]}} FC10{ Fc[4]} FC11{ Fi[3] Fc[4]} Fi FC12{ Fc[64]} FU13{ FC14{ Fi Fi} FL FC15{ Fi Fi Fi Fc[128]}} Fi}}


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

static void Test_S8454C1()
{
  extern Class_Descriptor cd_S8454C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(83,161)];
    init_test(&cd_S8454C1, buf);
    S8454C1 *dp, &lv = *(dp=new (buf) S8454C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,640), "sizeof(S8454C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8454C1)");
    check_base_class_offset(lv, (S8454C2*), 0, "S8454C1");
    check_field_offset(lv, s8454c1f0, ABISELECT(200,192), "S8454C1.s8454c1f0");
    test_class_info(&lv, &cd_S8454C1);
    dp->~S8454C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8454C1(Test_S8454C1, "S8454C1", ABISELECT(656,640));

#else // __cplusplus

extern void _ZN7S8454C1C1Ev();
extern void _ZN7S8454C1D1Ev();
Name_Map name_map_S8454C1[] = {
  NSPAIR(_ZN7S8454C1C1Ev),
  NSPAIR(_ZN7S8454C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8454C2;
extern VTBL_ENTRY _ZTI7S8454C2[];
extern  VTBL_ENTRY _ZTV7S8454C2[];
static Base_Class bases_S8454C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8454C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8454C1[];
extern void _ZN7S8454C1D1Ev();
extern void _ZN7S8454C1D0Ev();
extern void _ZN7S8454C22v1Ev();
extern void _ZN7S8454C22v2Ev();
extern void _ZN7S8454C22v3Ev();
static  VTBL_ENTRY vtc_S8454C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8454C1[0]),
  (VTBL_ENTRY)&_ZN7S8454C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8454C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8454C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8454C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8454C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S8454C1[];
extern  VTBL_ENTRY _ZTV7S8454C1[];
Class_Descriptor cd_S8454C1 = {  "S8454C1", // class name
  bases_S8454C1, 1,
  &(vtc_S8454C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(656,640), // object size
  NSPAIRA(_ZTI7S8454C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8454C1),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  S16567C14_nt  {
  void *s16567c14f0;
  void *s16567c14f1;
  void  mf16567c14(); // _ZN12S16567C14_nt10mf16567c14Ev
};
//SIG(-1 S16567C14_nt) C1{ m Fp[2]}


void  S16567C14_nt ::mf16567c14(){}

//skip512 S16567C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16567C15_nt  {
  int s16567c15f0;
  void  mf16567c15(); // _ZN12S16567C15_nt10mf16567c15Ev
};
//SIG(-1 S16567C15_nt) C1{ m Fi}


void  S16567C15_nt ::mf16567c15(){}

//skip512 S16567C15_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI12S16567C15_nt[];
VTBL_ENTRY *P__ZTI12S16567C15_nt = _ZTI12S16567C15_nt; 
Class_Descriptor cd_S16567C15_nt = {  "S16567C15_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI12S16567C15_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  S16567C1  {
  int s16567c1f0;
  char s16567c1f1;
  void *s16567c1f2;
  int s16567c1f3;
  void *s16567c1f4;
  ::S770C10_nt s16567c1f5;
  int s16567c1f6;
  ::S770C12 s16567c1f7;
  ::S16567C14_nt s16567c1f8;
  ::S16567C15_nt s16567c1f9;
  void  mf16567c1(); // _ZN8S16567C19mf16567c1Ev
};
//SIG(1 S16567C1) C1{ m Fi Fc Fp Fi Fp FC2{ FC3{ Fc[20]} Fc[16]} Fi FC4{ FC5{ FC2 FC6{ Fc[52]} FC7{ Fc[128]}} FC8{ Fc[4]} FC9{ Fi[3] Fc[4]} Fi FC10{ Fc[64]} FU11{ FC12{ Fi Fi} FL FC13{ Fi Fi Fi Fc[128]}} Fi} FC14{ m Fp Fp} FC15{ m Fi}}


void  S16567C1 ::mf16567c1(){}

static void Test_S16567C1()
{
  {
    init_simple_test("S16567C1");
    S16567C1 lv;
    check2(sizeof(lv), ABISELECT(552,520), "sizeof(S16567C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16567C1)");
    check_field_offset(lv, s16567c1f0, 0, "S16567C1.s16567c1f0");
    check_field_offset(lv, s16567c1f1, 4, "S16567C1.s16567c1f1");
    check_field_offset(lv, s16567c1f2, 8, "S16567C1.s16567c1f2");
    check_field_offset(lv, s16567c1f3, ABISELECT(16,12), "S16567C1.s16567c1f3");
    check_field_offset(lv, s16567c1f4, ABISELECT(24,16), "S16567C1.s16567c1f4");
    check_field_offset(lv, s16567c1f5, ABISELECT(32,20), "S16567C1.s16567c1f5");
    check_field_offset(lv, s16567c1f6, ABISELECT(68,56), "S16567C1.s16567c1f6");
    check_field_offset(lv, s16567c1f7, ABISELECT(72,60), "S16567C1.s16567c1f7");
    check_field_offset(lv, s16567c1f8, ABISELECT(528,508), "S16567C1.s16567c1f8");
    check_field_offset(lv, s16567c1f9, ABISELECT(544,516), "S16567C1.s16567c1f9");
  }
}
static Arrange_To_Call_Me vS16567C1(Test_S16567C1, "S16567C1", ABISELECT(552,520));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S755C4  : S770C5_nt {
  virtual void  v4(); // _ZN6S755C42v4Ev
  virtual void  v5(); // _ZN6S755C42v5Ev
  virtual void  v6(); // _ZN6S755C42v6Ev
  virtual void  v7(); // _ZN6S755C42v7Ev
  virtual void  v8(); // _ZN6S755C42v8Ev
  ~S755C4(); // tgen
  S755C4(); // tgen
};
//SIG(-1 S755C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S755C4 ::v4(){vfunc_called(this, "_ZN6S755C42v4Ev");}
void  S755C4 ::v5(){vfunc_called(this, "_ZN6S755C42v5Ev");}
void  S755C4 ::v6(){vfunc_called(this, "_ZN6S755C42v6Ev");}
void  S755C4 ::v7(){vfunc_called(this, "_ZN6S755C42v7Ev");}
void  S755C4 ::v8(){vfunc_called(this, "_ZN6S755C42v8Ev");}
S755C4 ::~S755C4(){ note_dtor("S755C4", this);} // tgen
S755C4 ::S755C4(){ note_ctor("S755C4", this);} // tgen

static void Test_S755C4()
{
  extern Class_Descriptor cd_S755C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S755C4, buf);
    S755C4 *dp, &lv = *(dp=new (buf) S755C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S755C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S755C4)");
    check_base_class_offset(lv, (S770C5_nt*), 0, "S755C4");
    test_class_info(&lv, &cd_S755C4);
    dp->~S755C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS755C4(Test_S755C4, "S755C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S755C4C1Ev();
extern void _ZN6S755C4D1Ev();
Name_Map name_map_S755C4[] = {
  NSPAIR(_ZN6S755C4C1Ev),
  NSPAIR(_ZN6S755C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
static Base_Class bases_S755C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S755C4[];
extern void _ZN6S755C4D1Ev();
extern void _ZN6S755C4D0Ev();
extern void _ZN6S755C42v4Ev();
extern void _ZN6S755C42v5Ev();
extern void _ZN6S755C42v6Ev();
extern void _ZN6S755C42v7Ev();
extern void _ZN6S755C42v8Ev();
static  VTBL_ENTRY vtc_S755C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S755C4[0]),
  (VTBL_ENTRY)&_ZN6S755C4D1Ev,
  (VTBL_ENTRY)&_ZN6S755C4D0Ev,
  (VTBL_ENTRY)&_ZN6S755C42v4Ev,
  (VTBL_ENTRY)&_ZN6S755C42v5Ev,
  (VTBL_ENTRY)&_ZN6S755C42v6Ev,
  (VTBL_ENTRY)&_ZN6S755C42v7Ev,
  (VTBL_ENTRY)&_ZN6S755C42v8Ev,
};
extern VTBL_ENTRY _ZTI6S755C4[];
extern  VTBL_ENTRY _ZTV6S755C4[];
Class_Descriptor cd_S755C4 = {  "S755C4", // class name
  bases_S755C4, 1,
  &(vtc_S755C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S755C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S755C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S755C3  : S755C4 {
  void *s755c3f0[3];
  ::S770C6_nt s755c3f1;
  virtual void  v9(); // _ZN6S755C32v9Ev
  virtual void  v10(); // _ZN6S755C33v10Ev
  virtual void  v11(); // _ZN6S755C33v11Ev
  virtual void  v12(); // _ZN6S755C33v12Ev
  virtual void  v13(); // _ZN6S755C33v13Ev
  virtual void  v14(); // _ZN6S755C33v14Ev
  virtual void  v15(); // _ZN6S755C33v15Ev
  virtual void  v16(); // _ZN6S755C33v16Ev
  virtual void  v17(); // _ZN6S755C33v17Ev
  virtual void  v18(); // _ZN6S755C33v18Ev
  virtual void  v19(); // _ZN6S755C33v19Ev
  ~S755C3(); // tgen
  S755C3(); // tgen
};
//SIG(-1 S755C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S755C3 ::v9(){vfunc_called(this, "_ZN6S755C32v9Ev");}
void  S755C3 ::v10(){vfunc_called(this, "_ZN6S755C33v10Ev");}
void  S755C3 ::v11(){vfunc_called(this, "_ZN6S755C33v11Ev");}
void  S755C3 ::v12(){vfunc_called(this, "_ZN6S755C33v12Ev");}
void  S755C3 ::v13(){vfunc_called(this, "_ZN6S755C33v13Ev");}
void  S755C3 ::v14(){vfunc_called(this, "_ZN6S755C33v14Ev");}
void  S755C3 ::v15(){vfunc_called(this, "_ZN6S755C33v15Ev");}
void  S755C3 ::v16(){vfunc_called(this, "_ZN6S755C33v16Ev");}
void  S755C3 ::v17(){vfunc_called(this, "_ZN6S755C33v17Ev");}
void  S755C3 ::v18(){vfunc_called(this, "_ZN6S755C33v18Ev");}
void  S755C3 ::v19(){vfunc_called(this, "_ZN6S755C33v19Ev");}
S755C3 ::~S755C3(){ note_dtor("S755C3", this);} // tgen
S755C3 ::S755C3(){ note_ctor("S755C3", this);} // tgen

static void Test_S755C3()
{
  extern Class_Descriptor cd_S755C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S755C3, buf);
    S755C3 *dp, &lv = *(dp=new (buf) S755C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S755C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S755C3)");
    check_base_class_offset(lv, (S770C5_nt*)(S755C4*), 0, "S755C3");
    check_base_class_offset(lv, (S755C4*), 0, "S755C3");
    check_field_offset(lv, s755c3f0, ABISELECT(16,8), "S755C3.s755c3f0");
    check_field_offset(lv, s755c3f1, ABISELECT(40,20), "S755C3.s755c3f1");
    test_class_info(&lv, &cd_S755C3);
    dp->~S755C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS755C3(Test_S755C3, "S755C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S755C3C1Ev();
extern void _ZN6S755C3D1Ev();
Name_Map name_map_S755C3[] = {
  NSPAIR(_ZN6S755C3C1Ev),
  NSPAIR(_ZN6S755C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S755C4;
extern VTBL_ENTRY _ZTI6S755C4[];
extern  VTBL_ENTRY _ZTV6S755C4[];
static Base_Class bases_S755C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S755C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S755C3[];
extern void _ZN6S755C3D1Ev();
extern void _ZN6S755C3D0Ev();
extern void _ZN6S755C42v4Ev();
extern void _ZN6S755C42v5Ev();
extern void _ZN6S755C42v6Ev();
extern void _ZN6S755C42v7Ev();
extern void _ZN6S755C42v8Ev();
extern void _ZN6S755C32v9Ev();
extern void _ZN6S755C33v10Ev();
extern void _ZN6S755C33v11Ev();
extern void _ZN6S755C33v12Ev();
extern void _ZN6S755C33v13Ev();
extern void _ZN6S755C33v14Ev();
extern void _ZN6S755C33v15Ev();
extern void _ZN6S755C33v16Ev();
extern void _ZN6S755C33v17Ev();
extern void _ZN6S755C33v18Ev();
extern void _ZN6S755C33v19Ev();
static  VTBL_ENTRY vtc_S755C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S755C3[0]),
  (VTBL_ENTRY)&_ZN6S755C3D1Ev,
  (VTBL_ENTRY)&_ZN6S755C3D0Ev,
  (VTBL_ENTRY)&_ZN6S755C42v4Ev,
  (VTBL_ENTRY)&_ZN6S755C42v5Ev,
  (VTBL_ENTRY)&_ZN6S755C42v6Ev,
  (VTBL_ENTRY)&_ZN6S755C42v7Ev,
  (VTBL_ENTRY)&_ZN6S755C42v8Ev,
  (VTBL_ENTRY)&_ZN6S755C32v9Ev,
  (VTBL_ENTRY)&_ZN6S755C33v10Ev,
  (VTBL_ENTRY)&_ZN6S755C33v11Ev,
  (VTBL_ENTRY)&_ZN6S755C33v12Ev,
  (VTBL_ENTRY)&_ZN6S755C33v13Ev,
  (VTBL_ENTRY)&_ZN6S755C33v14Ev,
  (VTBL_ENTRY)&_ZN6S755C33v15Ev,
  (VTBL_ENTRY)&_ZN6S755C33v16Ev,
  (VTBL_ENTRY)&_ZN6S755C33v17Ev,
  (VTBL_ENTRY)&_ZN6S755C33v18Ev,
  (VTBL_ENTRY)&_ZN6S755C33v19Ev,
};
extern VTBL_ENTRY _ZTI6S755C3[];
extern  VTBL_ENTRY _ZTV6S755C3[];
Class_Descriptor cd_S755C3 = {  "S755C3", // class name
  bases_S755C3, 2,
  &(vtc_S755C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S755C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S755C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S755C2  : S755C3 {
  ::S770C6_nt s755c2f0;
  ::S770C9_nt s755c2f1;
  void *s755c2f2[3];
  virtual void  v20(); // _ZN6S755C23v20Ev
  virtual void  v21(); // _ZN6S755C23v21Ev
  virtual void  v22(); // _ZN6S755C23v22Ev
  virtual void  v23(); // _ZN6S755C23v23Ev
  virtual void  v24(); // _ZN6S755C23v24Ev
  virtual void  v25(); // _ZN6S755C23v25Ev
  virtual void  v26(); // _ZN6S755C23v26Ev
  virtual void  v27(); // _ZN6S755C23v27Ev
  ~S755C2(); // tgen
  S755C2(); // tgen
};
//SIG(-1 S755C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 v5 v6 v7 v8 FC5 FC8{ m Fp} Fp[3]}


void  S755C2 ::v20(){vfunc_called(this, "_ZN6S755C23v20Ev");}
void  S755C2 ::v21(){vfunc_called(this, "_ZN6S755C23v21Ev");}
void  S755C2 ::v22(){vfunc_called(this, "_ZN6S755C23v22Ev");}
void  S755C2 ::v23(){vfunc_called(this, "_ZN6S755C23v23Ev");}
void  S755C2 ::v24(){vfunc_called(this, "_ZN6S755C23v24Ev");}
void  S755C2 ::v25(){vfunc_called(this, "_ZN6S755C23v25Ev");}
void  S755C2 ::v26(){vfunc_called(this, "_ZN6S755C23v26Ev");}
void  S755C2 ::v27(){vfunc_called(this, "_ZN6S755C23v27Ev");}
S755C2 ::~S755C2(){ note_dtor("S755C2", this);} // tgen
S755C2 ::S755C2(){ note_ctor("S755C2", this);} // tgen

static void Test_S755C2()
{
  extern Class_Descriptor cd_S755C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S755C2, buf);
    S755C2 *dp, &lv = *(dp=new (buf) S755C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S755C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S755C2)");
    check_base_class_offset(lv, (S770C5_nt*)(S755C4*)(S755C3*), 0, "S755C2");
    check_base_class_offset(lv, (S755C4*)(S755C3*), 0, "S755C2");
    check_base_class_offset(lv, (S755C3*), 0, "S755C2");
    check_field_offset(lv, s755c2f0, ABISELECT(80,44), "S755C2.s755c2f0");
    check_field_offset(lv, s755c2f1, ABISELECT(120,68), "S755C2.s755c2f1");
    check_field_offset(lv, s755c2f2, ABISELECT(128,72), "S755C2.s755c2f2");
    test_class_info(&lv, &cd_S755C2);
    dp->~S755C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS755C2(Test_S755C2, "S755C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S755C2C1Ev();
extern void _ZN6S755C2D1Ev();
Name_Map name_map_S755C2[] = {
  NSPAIR(_ZN6S755C2C1Ev),
  NSPAIR(_ZN6S755C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S755C4;
extern VTBL_ENTRY _ZTI6S755C4[];
extern  VTBL_ENTRY _ZTV6S755C4[];
extern Class_Descriptor cd_S755C3;
extern VTBL_ENTRY _ZTI6S755C3[];
extern  VTBL_ENTRY _ZTV6S755C3[];
static Base_Class bases_S755C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S755C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S755C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S755C2[];
extern void _ZN6S755C2D1Ev();
extern void _ZN6S755C2D0Ev();
extern void _ZN6S755C42v4Ev();
extern void _ZN6S755C42v5Ev();
extern void _ZN6S755C42v6Ev();
extern void _ZN6S755C42v7Ev();
extern void _ZN6S755C42v8Ev();
extern void _ZN6S755C32v9Ev();
extern void _ZN6S755C33v10Ev();
extern void _ZN6S755C33v11Ev();
extern void _ZN6S755C33v12Ev();
extern void _ZN6S755C33v13Ev();
extern void _ZN6S755C33v14Ev();
extern void _ZN6S755C33v15Ev();
extern void _ZN6S755C33v16Ev();
extern void _ZN6S755C33v17Ev();
extern void _ZN6S755C33v18Ev();
extern void _ZN6S755C33v19Ev();
extern void _ZN6S755C23v20Ev();
extern void _ZN6S755C23v21Ev();
extern void _ZN6S755C23v22Ev();
extern void _ZN6S755C23v23Ev();
extern void _ZN6S755C23v24Ev();
extern void _ZN6S755C23v25Ev();
extern void _ZN6S755C23v26Ev();
extern void _ZN6S755C23v27Ev();
static  VTBL_ENTRY vtc_S755C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S755C2[0]),
  (VTBL_ENTRY)&_ZN6S755C2D1Ev,
  (VTBL_ENTRY)&_ZN6S755C2D0Ev,
  (VTBL_ENTRY)&_ZN6S755C42v4Ev,
  (VTBL_ENTRY)&_ZN6S755C42v5Ev,
  (VTBL_ENTRY)&_ZN6S755C42v6Ev,
  (VTBL_ENTRY)&_ZN6S755C42v7Ev,
  (VTBL_ENTRY)&_ZN6S755C42v8Ev,
  (VTBL_ENTRY)&_ZN6S755C32v9Ev,
  (VTBL_ENTRY)&_ZN6S755C33v10Ev,
  (VTBL_ENTRY)&_ZN6S755C33v11Ev,
  (VTBL_ENTRY)&_ZN6S755C33v12Ev,
  (VTBL_ENTRY)&_ZN6S755C33v13Ev,
  (VTBL_ENTRY)&_ZN6S755C33v14Ev,
  (VTBL_ENTRY)&_ZN6S755C33v15Ev,
  (VTBL_ENTRY)&_ZN6S755C33v16Ev,
  (VTBL_ENTRY)&_ZN6S755C33v17Ev,
  (VTBL_ENTRY)&_ZN6S755C33v18Ev,
  (VTBL_ENTRY)&_ZN6S755C33v19Ev,
  (VTBL_ENTRY)&_ZN6S755C23v20Ev,
  (VTBL_ENTRY)&_ZN6S755C23v21Ev,
  (VTBL_ENTRY)&_ZN6S755C23v22Ev,
  (VTBL_ENTRY)&_ZN6S755C23v23Ev,
  (VTBL_ENTRY)&_ZN6S755C23v24Ev,
  (VTBL_ENTRY)&_ZN6S755C23v25Ev,
  (VTBL_ENTRY)&_ZN6S755C23v26Ev,
  (VTBL_ENTRY)&_ZN6S755C23v27Ev,
};
extern VTBL_ENTRY _ZTI6S755C2[];
extern  VTBL_ENTRY _ZTV6S755C2[];
Class_Descriptor cd_S755C2 = {  "S755C2", // class name
  bases_S755C2, 3,
  &(vtc_S755C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S755C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S755C2),28, //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  S755C1  : S755C2 {
  void *s755c1f0;
  virtual void  v1(); // _ZN6S755C12v1Ev
  virtual void  v2(); // _ZN6S755C12v2Ev
  virtual void  v3(); // _ZN6S755C12v3Ev
  ~S755C1(); // tgen
  S755C1(); // tgen
};
//SIG(1 S755C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v4 v5 v6 v7 v8} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v20 v21 v22 v23 v24 v25 v26 v27 FC6 FC9{ m Fp} Fp[3]} v1 v2 v3 Fp}


void  S755C1 ::v1(){vfunc_called(this, "_ZN6S755C12v1Ev");}
void  S755C1 ::v2(){vfunc_called(this, "_ZN6S755C12v2Ev");}
void  S755C1 ::v3(){vfunc_called(this, "_ZN6S755C12v3Ev");}
S755C1 ::~S755C1(){ note_dtor("S755C1", this);} // tgen
S755C1 ::S755C1(){ note_ctor("S755C1", this);} // tgen

static void Test_S755C1()
{
  extern Class_Descriptor cd_S755C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,23)];
    init_test(&cd_S755C1, buf);
    S755C1 *dp, &lv = *(dp=new (buf) S755C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,88), "sizeof(S755C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S755C1)");
    check_base_class_offset(lv, (S770C5_nt*)(S755C4*)(S755C3*)(S755C2*), 0, "S755C1");
    check_base_class_offset(lv, (S755C4*)(S755C3*)(S755C2*), 0, "S755C1");
    check_base_class_offset(lv, (S755C3*)(S755C2*), 0, "S755C1");
    check_base_class_offset(lv, (S755C2*), 0, "S755C1");
    check_field_offset(lv, s755c1f0, ABISELECT(152,84), "S755C1.s755c1f0");
    test_class_info(&lv, &cd_S755C1);
    dp->~S755C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS755C1(Test_S755C1, "S755C1", ABISELECT(160,88));

#else // __cplusplus

extern void _ZN6S755C1C1Ev();
extern void _ZN6S755C1D1Ev();
Name_Map name_map_S755C1[] = {
  NSPAIR(_ZN6S755C1C1Ev),
  NSPAIR(_ZN6S755C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S770C5_nt;
extern VTBL_ENTRY _ZTI9S770C5_nt[];
extern  VTBL_ENTRY _ZTV9S770C5_nt[];
extern Class_Descriptor cd_S755C4;
extern VTBL_ENTRY _ZTI6S755C4[];
extern  VTBL_ENTRY _ZTV6S755C4[];
extern Class_Descriptor cd_S755C3;
extern VTBL_ENTRY _ZTI6S755C3[];
extern  VTBL_ENTRY _ZTV6S755C3[];
extern Class_Descriptor cd_S755C2;
extern VTBL_ENTRY _ZTI6S755C2[];
extern  VTBL_ENTRY _ZTV6S755C2[];
static Base_Class bases_S755C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S770C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S755C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S755C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S755C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S755C1[];
extern void _ZN6S755C1D1Ev();
extern void _ZN6S755C1D0Ev();
extern void _ZN6S755C42v4Ev();
extern void _ZN6S755C42v5Ev();
extern void _ZN6S755C42v6Ev();
extern void _ZN6S755C42v7Ev();
extern void _ZN6S755C42v8Ev();
extern void _ZN6S755C32v9Ev();
extern void _ZN6S755C33v10Ev();
extern void _ZN6S755C33v11Ev();
extern void _ZN6S755C33v12Ev();
extern void _ZN6S755C33v13Ev();
extern void _ZN6S755C33v14Ev();
extern void _ZN6S755C33v15Ev();
extern void _ZN6S755C33v16Ev();
extern void _ZN6S755C33v17Ev();
extern void _ZN6S755C33v18Ev();
extern void _ZN6S755C33v19Ev();
extern void _ZN6S755C23v20Ev();
extern void _ZN6S755C23v21Ev();
extern void _ZN6S755C23v22Ev();
extern void _ZN6S755C23v23Ev();
extern void _ZN6S755C23v24Ev();
extern void _ZN6S755C23v25Ev();
extern void _ZN6S755C23v26Ev();
extern void _ZN6S755C23v27Ev();
extern void _ZN6S755C12v1Ev();
extern void _ZN6S755C12v2Ev();
extern void _ZN6S755C12v3Ev();
static  VTBL_ENTRY vtc_S755C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S755C1[0]),
  (VTBL_ENTRY)&_ZN6S755C1D1Ev,
  (VTBL_ENTRY)&_ZN6S755C1D0Ev,
  (VTBL_ENTRY)&_ZN6S755C42v4Ev,
  (VTBL_ENTRY)&_ZN6S755C42v5Ev,
  (VTBL_ENTRY)&_ZN6S755C42v6Ev,
  (VTBL_ENTRY)&_ZN6S755C42v7Ev,
  (VTBL_ENTRY)&_ZN6S755C42v8Ev,
  (VTBL_ENTRY)&_ZN6S755C32v9Ev,
  (VTBL_ENTRY)&_ZN6S755C33v10Ev,
  (VTBL_ENTRY)&_ZN6S755C33v11Ev,
  (VTBL_ENTRY)&_ZN6S755C33v12Ev,
  (VTBL_ENTRY)&_ZN6S755C33v13Ev,
  (VTBL_ENTRY)&_ZN6S755C33v14Ev,
  (VTBL_ENTRY)&_ZN6S755C33v15Ev,
  (VTBL_ENTRY)&_ZN6S755C33v16Ev,
  (VTBL_ENTRY)&_ZN6S755C33v17Ev,
  (VTBL_ENTRY)&_ZN6S755C33v18Ev,
  (VTBL_ENTRY)&_ZN6S755C33v19Ev,
  (VTBL_ENTRY)&_ZN6S755C23v20Ev,
  (VTBL_ENTRY)&_ZN6S755C23v21Ev,
  (VTBL_ENTRY)&_ZN6S755C23v22Ev,
  (VTBL_ENTRY)&_ZN6S755C23v23Ev,
  (VTBL_ENTRY)&_ZN6S755C23v24Ev,
  (VTBL_ENTRY)&_ZN6S755C23v25Ev,
  (VTBL_ENTRY)&_ZN6S755C23v26Ev,
  (VTBL_ENTRY)&_ZN6S755C23v27Ev,
  (VTBL_ENTRY)&_ZN6S755C12v1Ev,
  (VTBL_ENTRY)&_ZN6S755C12v2Ev,
  (VTBL_ENTRY)&_ZN6S755C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S755C1[];
extern  VTBL_ENTRY _ZTV6S755C1[];
Class_Descriptor cd_S755C1 = {  "S755C1", // class name
  bases_S755C1, 4,
  &(vtc_S755C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,88), // object size
  NSPAIRA(_ZTI6S755C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S755C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4630C3  {
  virtual  ~S4630C3(); // _ZN7S4630C3D1Ev
  virtual void  v2(); // _ZN7S4630C32v2Ev
  S4630C3(); // tgen
};
//SIG(-1 S4630C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4630C3C1Ev();
extern void _ZN7S4630C3D1Ev();
Name_Map name_map_S4630C3[] = {
  NSPAIR(_ZN7S4630C3C1Ev),
  NSPAIR(_ZN7S4630C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4630C3[];
extern void _ZN7S4630C3D1Ev();
extern void _ZN7S4630C3D0Ev();
extern void _ZN7S4630C32v2Ev();
static  VTBL_ENTRY vtc_S4630C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4630C3[0]),
  (VTBL_ENTRY)&_ZN7S4630C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4630C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4630C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4630C3[];
extern  VTBL_ENTRY _ZTV7S4630C3[];
Class_Descriptor cd_S4630C3 = {  "S4630C3", // class name
  0,0,//no base classes
  &(vtc_S4630C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4630C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4630C3),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  S4630C2  : S4630C3 {
  virtual  ~S4630C2(); // _ZN7S4630C2D1Ev
  S4630C2(); // tgen
};
//SIG(-1 S4630C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4630C2()
{
  extern Class_Descriptor cd_S4630C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4630C2, buf);
    S4630C2 *dp, &lv = *(dp=new (buf) S4630C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4630C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4630C2)");
    check_base_class_offset(lv, (S4630C3*), 0, "S4630C2");
    test_class_info(&lv, &cd_S4630C2);
    dp->~S4630C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4630C2(Test_S4630C2, "S4630C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4630C2C1Ev();
extern void _ZN7S4630C2D1Ev();
Name_Map name_map_S4630C2[] = {
  NSPAIR(_ZN7S4630C2C1Ev),
  NSPAIR(_ZN7S4630C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4630C3;
extern VTBL_ENTRY _ZTI7S4630C3[];
extern  VTBL_ENTRY _ZTV7S4630C3[];
static Base_Class bases_S4630C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4630C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4630C2[];
extern void _ZN7S4630C2D1Ev();
extern void _ZN7S4630C2D0Ev();
extern void _ZN7S4630C32v2Ev();
static  VTBL_ENTRY vtc_S4630C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4630C2[0]),
  (VTBL_ENTRY)&_ZN7S4630C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4630C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4630C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4630C2[];
extern  VTBL_ENTRY _ZTV7S4630C2[];
Class_Descriptor cd_S4630C2 = {  "S4630C2", // class name
  bases_S4630C2, 1,
  &(vtc_S4630C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4630C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4630C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4630C1  : S4630C2 {
  void *s4630c1f0;
  ::S3047C20_nt s4630c1f1;
  virtual  ~S4630C1(); // _ZN7S4630C1D1Ev
  virtual void  v1(); // _ZN7S4630C12v1Ev
  S4630C1(); // tgen
};
//SIG(1 S4630C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp FC4{ BC5{ vd v5 v6} vd v3 v4 Fi[5] FC6{ BC5 vd v7 v8 FL} FC7{ BC8{ m Fp Fi[2] FC9{ m}} BC5 vd v9 v10} FC10{ m Fp Fi FC11{ m}} FC12{ vd m FC13{ m Fs[6] Fi[2] Fc Fs}} FC12}}


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

static void Test_S4630C1()
{
  extern Class_Descriptor cd_S4630C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,34)];
    init_test(&cd_S4630C1, buf);
    S4630C1 *dp, &lv = *(dp=new (buf) S4630C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,132), "sizeof(S4630C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4630C1)");
    check_base_class_offset(lv, (S4630C3*)(S4630C2*), 0, "S4630C1");
    check_base_class_offset(lv, (S4630C2*), 0, "S4630C1");
    check_field_offset(lv, s4630c1f0, ABISELECT(8,4), "S4630C1.s4630c1f0");
    check_field_offset(lv, s4630c1f1, ABISELECT(16,8), "S4630C1.s4630c1f1");
    test_class_info(&lv, &cd_S4630C1);
    dp->~S4630C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4630C1(Test_S4630C1, "S4630C1", ABISELECT(176,132));

#else // __cplusplus

extern void _ZN7S4630C1C1Ev();
extern void _ZN7S4630C1D1Ev();
Name_Map name_map_S4630C1[] = {
  NSPAIR(_ZN7S4630C1C1Ev),
  NSPAIR(_ZN7S4630C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4630C3;
extern VTBL_ENTRY _ZTI7S4630C3[];
extern  VTBL_ENTRY _ZTV7S4630C3[];
extern Class_Descriptor cd_S4630C2;
extern VTBL_ENTRY _ZTI7S4630C2[];
extern  VTBL_ENTRY _ZTV7S4630C2[];
static Base_Class bases_S4630C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4630C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4630C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4630C1[];
extern void _ZN7S4630C1D1Ev();
extern void _ZN7S4630C1D0Ev();
extern void _ZN7S4630C32v2Ev();
extern void _ZN7S4630C12v1Ev();
static  VTBL_ENTRY vtc_S4630C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4630C1[0]),
  (VTBL_ENTRY)&_ZN7S4630C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4630C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4630C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4630C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4630C1[];
extern  VTBL_ENTRY _ZTV7S4630C1[];
Class_Descriptor cd_S4630C1 = {  "S4630C1", // class name
  bases_S4630C1, 2,
  &(vtc_S4630C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,132), // object size
  NSPAIRA(_ZTI7S4630C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4630C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17891C1  {
  void *s17891c1f0[2];
  ::S770C10_nt s17891c1f1;
  ::S770C12 s17891c1f2;
  ::S770C12 s17891c1f3;
  void *s17891c1f4;
  void *s17891c1f5;
  void *s17891c1f6;
  void *s17891c1f7;
  void *s17891c1f8;
  void *s17891c1f9;
  void  mf17891c1(); // _ZN8S17891C19mf17891c1Ev
};
//SIG(1 S17891C1) C1{ m Fp[2] FC2{ FC3{ Fc[20]} Fc[16]} FC4{ FC5{ FC2 FC6{ Fc[52]} FC7{ Fc[128]}} FC8{ Fc[4]} FC9{ Fi[3] Fc[4]} Fi FC10{ Fc[64]} FU11{ FC12{ Fi Fi} FL FC13{ Fi Fi Fi Fc[128]}} Fi} FC4 Fp Fp Fp Fp Fp Fp}


void  S17891C1 ::mf17891c1(){}

static void Test_S17891C1()
{
  {
    init_simple_test("S17891C1");
    S17891C1 lv;
    check2(sizeof(lv), ABISELECT(1016,964), "sizeof(S17891C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17891C1)");
    check_field_offset(lv, s17891c1f0, 0, "S17891C1.s17891c1f0");
    check_field_offset(lv, s17891c1f1, ABISELECT(16,8), "S17891C1.s17891c1f1");
    check_field_offset(lv, s17891c1f2, ABISELECT(56,44), "S17891C1.s17891c1f2");
    check_field_offset(lv, s17891c1f3, ABISELECT(512,492), "S17891C1.s17891c1f3");
    check_field_offset(lv, s17891c1f4, ABISELECT(968,940), "S17891C1.s17891c1f4");
    check_field_offset(lv, s17891c1f5, ABISELECT(976,944), "S17891C1.s17891c1f5");
    check_field_offset(lv, s17891c1f6, ABISELECT(984,948), "S17891C1.s17891c1f6");
    check_field_offset(lv, s17891c1f7, ABISELECT(992,952), "S17891C1.s17891c1f7");
    check_field_offset(lv, s17891c1f8, ABISELECT(1000,956), "S17891C1.s17891c1f8");
    check_field_offset(lv, s17891c1f9, ABISELECT(1008,960), "S17891C1.s17891c1f9");
  }
}
static Arrange_To_Call_Me vS17891C1(Test_S17891C1, "S17891C1", ABISELECT(1016,964));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17451C1  {
  void *s17451c1f0;
  char s17451c1f1;
  void *s17451c1f2[2];
  char s17451c1f3;
  ::S303C13_nt s17451c1f4;
  void *s17451c1f5;
  char s17451c1f6;
  void *s17451c1f7;
  ::S2215C20_nt s17451c1f8;
  __tsi64 s17451c1f9;
  void  mf17451c1(); // _ZN8S17451C19mf17451c1Ev
};
//SIG(1 S17451C1) C1{ m Fp Fc Fp[2] Fc FC2{ m FL[2] Fc Fi FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 Fi[3] FC3 FC3 FC3 FL[2] Fi[4] FC3 FC3 Fi[2] FL Fi[5] FL Fc} Fp Fc Fp FC3 FL}


void  S17451C1 ::mf17451c1(){}

static void Test_S17451C1()
{
  {
    init_simple_test("S17451C1");
    S17451C1 lv;
    check2(sizeof(lv), ABISELECT(488,372), "sizeof(S17451C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17451C1)");
    check_field_offset(lv, s17451c1f0, 0, "S17451C1.s17451c1f0");
    check_field_offset(lv, s17451c1f1, ABISELECT(8,4), "S17451C1.s17451c1f1");
    check_field_offset(lv, s17451c1f2, ABISELECT(16,8), "S17451C1.s17451c1f2");
    check_field_offset(lv, s17451c1f3, ABISELECT(32,16), "S17451C1.s17451c1f3");
    check_field_offset(lv, s17451c1f4, ABISELECT(40,20), "S17451C1.s17451c1f4");
    check_field_offset(lv, s17451c1f5, ABISELECT(440,340), "S17451C1.s17451c1f5");
    check_field_offset(lv, s17451c1f6, ABISELECT(448,344), "S17451C1.s17451c1f6");
    check_field_offset(lv, s17451c1f7, ABISELECT(456,348), "S17451C1.s17451c1f7");
    check_field_offset(lv, s17451c1f8, ABISELECT(464,352), "S17451C1.s17451c1f8");
    check_field_offset(lv, s17451c1f9, ABISELECT(480,364), "S17451C1.s17451c1f9");
  }
}
static Arrange_To_Call_Me vS17451C1(Test_S17451C1, "S17451C1", ABISELECT(488,372));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4034C3_nt  {
  void  mf4034c3(); // _ZN10S4034C3_nt8mf4034c3Ev
  virtual  ~S4034C3_nt(); // _ZN10S4034C3_ntD1Ev
  S4034C3_nt(); // tgen
};
//SIG(-1 S4034C3_nt) C1{ vd m}


void  S4034C3_nt ::mf4034c3(){}
 S4034C3_nt ::~S4034C3_nt(){ note_dtor("S4034C3_nt", this);}
S4034C3_nt ::S4034C3_nt(){ note_ctor("S4034C3_nt", this);} // tgen

//skip512 S4034C3_nt

#else // __cplusplus

extern void _ZN10S4034C3_ntC1Ev();
extern void _ZN10S4034C3_ntD1Ev();
Name_Map name_map_S4034C3_nt[] = {
  NSPAIR(_ZN10S4034C3_ntC1Ev),
  NSPAIR(_ZN10S4034C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4034C3_nt[];
extern void _ZN10S4034C3_ntD1Ev();
extern void _ZN10S4034C3_ntD0Ev();
static  VTBL_ENTRY vtc_S4034C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4034C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4034C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4034C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4034C3_nt[];
VTBL_ENTRY *P__ZTI10S4034C3_nt = _ZTI10S4034C3_nt; 
extern  VTBL_ENTRY _ZTV10S4034C3_nt[];
Class_Descriptor cd_S4034C3_nt = {  "S4034C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4034C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4034C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4034C3_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  S4034C2  : S4034C3_nt {
  int s4034c2f0[2];
  char s4034c2f1;
  virtual  ~S4034C2(); // _ZN7S4034C2D1Ev
  S4034C2(); // tgen
};
//SIG(-1 S4034C2) C1{ BC2{ vd m} vd Fi[2] Fc}


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

static void Test_S4034C2()
{
  extern Class_Descriptor cd_S4034C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4034C2, buf);
    S4034C2 *dp, &lv = *(dp=new (buf) S4034C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4034C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4034C2)");
    check_base_class_offset(lv, (S4034C3_nt*), 0, "S4034C2");
    check_field_offset(lv, s4034c2f0, ABISELECT(8,4), "S4034C2.s4034c2f0");
    check_field_offset(lv, s4034c2f1, ABISELECT(16,12), "S4034C2.s4034c2f1");
    test_class_info(&lv, &cd_S4034C2);
    dp->~S4034C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4034C2(Test_S4034C2, "S4034C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4034C2C1Ev();
extern void _ZN7S4034C2D1Ev();
Name_Map name_map_S4034C2[] = {
  NSPAIR(_ZN7S4034C2C1Ev),
  NSPAIR(_ZN7S4034C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4034C3_nt;
extern VTBL_ENTRY _ZTI10S4034C3_nt[];
extern  VTBL_ENTRY _ZTV10S4034C3_nt[];
static Base_Class bases_S4034C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4034C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4034C2[];
extern void _ZN7S4034C2D1Ev();
extern void _ZN7S4034C2D0Ev();
static  VTBL_ENTRY vtc_S4034C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4034C2[0]),
  (VTBL_ENTRY)&_ZN7S4034C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4034C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S4034C2[];
extern  VTBL_ENTRY _ZTV7S4034C2[];
Class_Descriptor cd_S4034C2 = {  "S4034C2", // class name
  bases_S4034C2, 1,
  &(vtc_S4034C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4034C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4034C2),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  S4034C1  : S4034C2 {
  ::S770C12 s4034c1f0;
  ~S4034C1(); // tgen
  S4034C1(); // tgen
};
//SIG(1 S4034C1) C1{ BC2{ BC3{ vd m} vd Fi[2] Fc} FC4{ FC5{ FC6{ FC7{ Fc[20]} Fc[16]} FC8{ Fc[52]} FC9{ Fc[128]}} FC10{ Fc[4]} FC11{ Fi[3] Fc[4]} Fi FC12{ Fc[64]} FU13{ FC14{ Fi Fi} FL FC15{ Fi Fi Fi Fc[128]}} Fi}}


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

static void Test_S4034C1()
{
  extern Class_Descriptor cd_S4034C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(61,117)];
    init_test(&cd_S4034C1, buf);
    S4034C1 *dp, &lv = *(dp=new (buf) S4034C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,464), "sizeof(S4034C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4034C1)");
    check_base_class_offset(lv, (S4034C3_nt*)(S4034C2*), 0, "S4034C1");
    check_base_class_offset(lv, (S4034C2*), 0, "S4034C1");
    check_field_offset(lv, s4034c1f0, ABISELECT(24,16), "S4034C1.s4034c1f0");
    test_class_info(&lv, &cd_S4034C1);
    dp->~S4034C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4034C1(Test_S4034C1, "S4034C1", ABISELECT(480,464));

#else // __cplusplus

extern void _ZN7S4034C1C1Ev();
extern void _ZN7S4034C1D1Ev();
Name_Map name_map_S4034C1[] = {
  NSPAIR(_ZN7S4034C1C1Ev),
  NSPAIR(_ZN7S4034C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4034C3_nt;
extern VTBL_ENTRY _ZTI10S4034C3_nt[];
extern  VTBL_ENTRY _ZTV10S4034C3_nt[];
extern Class_Descriptor cd_S4034C2;
extern VTBL_ENTRY _ZTI7S4034C2[];
extern  VTBL_ENTRY _ZTV7S4034C2[];
static Base_Class bases_S4034C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4034C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4034C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4034C1[];
extern void _ZN7S4034C1D1Ev();
extern void _ZN7S4034C1D0Ev();
static  VTBL_ENTRY vtc_S4034C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4034C1[0]),
  (VTBL_ENTRY)&_ZN7S4034C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4034C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S4034C1[];
extern  VTBL_ENTRY _ZTV7S4034C1[];
Class_Descriptor cd_S4034C1 = {  "S4034C1", // class name
  bases_S4034C1, 2,
  &(vtc_S4034C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(480,464), // object size
  NSPAIRA(_ZTI7S4034C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4034C1),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  S10408C2  {
  void *s10408c2f0;
  virtual  ~S10408C2(); // _ZN8S10408C2D1Ev
  virtual void  v2(); // _ZN8S10408C22v2Ev
  S10408C2(); // tgen
};
//SIG(-1 S10408C2) C1{ vd v1 Fp}


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

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

#else // __cplusplus

extern void _ZN8S10408C2C1Ev();
extern void _ZN8S10408C2D1Ev();
Name_Map name_map_S10408C2[] = {
  NSPAIR(_ZN8S10408C2C1Ev),
  NSPAIR(_ZN8S10408C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10408C2[];
extern void _ZN8S10408C2D1Ev();
extern void _ZN8S10408C2D0Ev();
extern void _ZN8S10408C22v2Ev();
static  VTBL_ENTRY vtc_S10408C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10408C2[0]),
  (VTBL_ENTRY)&_ZN8S10408C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10408C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10408C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S10408C2[];
extern  VTBL_ENTRY _ZTV8S10408C2[];
Class_Descriptor cd_S10408C2 = {  "S10408C2", // class name
  0,0,//no base classes
  &(vtc_S10408C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10408C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10408C2),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  S10408C1  : S10408C2 {
  int s10408c1f0;
  ::S770C12 s10408c1f1;
  virtual void  v1(); // _ZN8S10408C12v1Ev
  ~S10408C1(); // tgen
  S10408C1(); // tgen
};
//SIG(1 S10408C1) C1{ BC2{ vd v2 Fp} v1 Fi FC3{ FC4{ FC5{ FC6{ Fc[20]} Fc[16]} FC7{ Fc[52]} FC8{ Fc[128]}} FC9{ Fc[4]} FC10{ Fi[3] Fc[4]} Fi FC11{ Fc[64]} FU12{ FC13{ Fi Fi} FL FC14{ Fi Fi Fi Fc[128]}} Fi}}


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

static void Test_S10408C1()
{
  extern Class_Descriptor cd_S10408C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(61,116)];
    init_test(&cd_S10408C1, buf);
    S10408C1 *dp, &lv = *(dp=new (buf) S10408C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,460), "sizeof(S10408C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10408C1)");
    check_base_class_offset(lv, (S10408C2*), 0, "S10408C1");
    check_field_offset(lv, s10408c1f0, ABISELECT(16,8), "S10408C1.s10408c1f0");
    check_field_offset(lv, s10408c1f1, ABISELECT(24,12), "S10408C1.s10408c1f1");
    test_class_info(&lv, &cd_S10408C1);
    dp->~S10408C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10408C1(Test_S10408C1, "S10408C1", ABISELECT(480,460));

#else // __cplusplus

extern void _ZN8S10408C1C1Ev();
extern void _ZN8S10408C1D1Ev();
Name_Map name_map_S10408C1[] = {
  NSPAIR(_ZN8S10408C1C1Ev),
  NSPAIR(_ZN8S10408C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10408C2;
extern VTBL_ENTRY _ZTI8S10408C2[];
extern  VTBL_ENTRY _ZTV8S10408C2[];
static Base_Class bases_S10408C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10408C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10408C1[];
extern void _ZN8S10408C1D1Ev();
extern void _ZN8S10408C1D0Ev();
extern void _ZN8S10408C22v2Ev();
extern void _ZN8S10408C12v1Ev();
static  VTBL_ENTRY vtc_S10408C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10408C1[0]),
  (VTBL_ENTRY)&_ZN8S10408C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10408C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10408C22v2Ev,
  (VTBL_ENTRY)&_ZN8S10408C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S10408C1[];
extern  VTBL_ENTRY _ZTV8S10408C1[];
Class_Descriptor cd_S10408C1 = {  "S10408C1", // class name
  bases_S10408C1, 1,
  &(vtc_S10408C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(480,460), // object size
  NSPAIRA(_ZTI8S10408C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10408C1),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  S17468C1  {
  void *s17468c1f0;
  char s17468c1f1[2];
  void *s17468c1f2;
  ::S303C13_nt s17468c1f3;
  char s17468c1f4[2];
  void  mf17468c1(); // _ZN8S17468C19mf17468c1Ev
};
//SIG(1 S17468C1) C1{ m Fp Fc[2] Fp FC2{ m FL[2] Fc Fi FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 Fi[3] FC3 FC3 FC3 FL[2] Fi[4] FC3 FC3 Fi[2] FL Fi[5] FL Fc} Fc[2]}


void  S17468C1 ::mf17468c1(){}

static void Test_S17468C1()
{
  {
    init_simple_test("S17468C1");
    S17468C1 lv;
    check2(sizeof(lv), ABISELECT(432,336), "sizeof(S17468C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17468C1)");
    check_field_offset(lv, s17468c1f0, 0, "S17468C1.s17468c1f0");
    check_field_offset(lv, s17468c1f1, ABISELECT(8,4), "S17468C1.s17468c1f1");
    check_field_offset(lv, s17468c1f2, ABISELECT(16,8), "S17468C1.s17468c1f2");
    check_field_offset(lv, s17468c1f3, ABISELECT(24,12), "S17468C1.s17468c1f3");
    check_field_offset(lv, s17468c1f4, ABISELECT(424,332), "S17468C1.s17468c1f4");
  }
}
static Arrange_To_Call_Me vS17468C1(Test_S17468C1, "S17468C1", ABISELECT(432,336));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21346C1  {
  ::S292C14 s21346c1f0;
  ::S3048C15_nt s21346c1f1;
  void  mf21346c1(); // _ZN8S21346C19mf21346c1Ev
  virtual  ~S21346C1(); // _ZN8S21346C1D1Ev
  S21346C1(); // tgen
};
//SIG(1 S21346C1) C1{ vd m FC2{ FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC5{ m Fi[5]} FC6{ m FC5 Fi FC7{ m Fs[6] Fi[2] Fc Fs} Fc} FC6 Fi[2] FC8{ m Fp} Fi} FC9{ m FC10{ FL[4]}}}


void  S21346C1 ::mf21346c1(){}
 S21346C1 ::~S21346C1(){ note_dtor("S21346C1", this);}
S21346C1 ::S21346C1(){ note_ctor("S21346C1", this);} // tgen

static void Test_S21346C1()
{
  extern Class_Descriptor cd_S21346C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,54)];
    init_test(&cd_S21346C1, buf);
    S21346C1 *dp, &lv = *(dp=new (buf) S21346C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,212), "sizeof(S21346C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21346C1)");
    check_field_offset(lv, s21346c1f0, ABISELECT(8,4), "S21346C1.s21346c1f0");
    check_field_offset(lv, s21346c1f1, ABISELECT(208,180), "S21346C1.s21346c1f1");
    test_class_info(&lv, &cd_S21346C1);
    dp->~S21346C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21346C1(Test_S21346C1, "S21346C1", ABISELECT(240,212));

#else // __cplusplus

extern void _ZN8S21346C1C1Ev();
extern void _ZN8S21346C1D1Ev();
Name_Map name_map_S21346C1[] = {
  NSPAIR(_ZN8S21346C1C1Ev),
  NSPAIR(_ZN8S21346C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21346C1[];
extern void _ZN8S21346C1D1Ev();
extern void _ZN8S21346C1D0Ev();
static  VTBL_ENTRY vtc_S21346C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21346C1[0]),
  (VTBL_ENTRY)&_ZN8S21346C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21346C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21346C1[];
extern  VTBL_ENTRY _ZTV8S21346C1[];
Class_Descriptor cd_S21346C1 = {  "S21346C1", // class name
  0,0,//no base classes
  &(vtc_S21346C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,212), // object size
  NSPAIRA(_ZTI8S21346C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21346C1),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  S21345C1  {
  ::S292C14 s21345c1f0;
  ::S3047C15_nt s21345c1f1;
  void  mf21345c1(); // _ZN8S21345C19mf21345c1Ev
  virtual  ~S21345C1(); // _ZN8S21345C1D1Ev
  S21345C1(); // tgen
};
//SIG(1 S21345C1) C1{ vd m FC2{ FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC5{ m Fi[5]} FC6{ m FC5 Fi FC7{ m Fs[6] Fi[2] Fc Fs} Fc} FC6 Fi[2] FC8{ m Fp} Fi} FC9{ m FC10{ Fl[4]}}}


void  S21345C1 ::mf21345c1(){}
 S21345C1 ::~S21345C1(){ note_dtor("S21345C1", this);}
S21345C1 ::S21345C1(){ note_ctor("S21345C1", this);} // tgen

static void Test_S21345C1()
{
  extern Class_Descriptor cd_S21345C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,50)];
    init_test(&cd_S21345C1, buf);
    S21345C1 *dp, &lv = *(dp=new (buf) S21345C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,196), "sizeof(S21345C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21345C1)");
    check_field_offset(lv, s21345c1f0, ABISELECT(8,4), "S21345C1.s21345c1f0");
    check_field_offset(lv, s21345c1f1, ABISELECT(208,180), "S21345C1.s21345c1f1");
    test_class_info(&lv, &cd_S21345C1);
    dp->~S21345C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21345C1(Test_S21345C1, "S21345C1", ABISELECT(240,196));

#else // __cplusplus

extern void _ZN8S21345C1C1Ev();
extern void _ZN8S21345C1D1Ev();
Name_Map name_map_S21345C1[] = {
  NSPAIR(_ZN8S21345C1C1Ev),
  NSPAIR(_ZN8S21345C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21345C1[];
extern void _ZN8S21345C1D1Ev();
extern void _ZN8S21345C1D0Ev();
static  VTBL_ENTRY vtc_S21345C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21345C1[0]),
  (VTBL_ENTRY)&_ZN8S21345C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21345C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21345C1[];
extern  VTBL_ENTRY _ZTV8S21345C1[];
Class_Descriptor cd_S21345C1 = {  "S21345C1", // class name
  0,0,//no base classes
  &(vtc_S21345C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,196), // object size
  NSPAIRA(_ZTI8S21345C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21345C1),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  S21349C1  {
  ::S293C14 s21349c1f0;
  ::S3048C15_nt s21349c1f1;
  void  mf21349c1(); // _ZN8S21349C19mf21349c1Ev
  virtual  ~S21349C1(); // _ZN8S21349C1D1Ev
  S21349C1(); // tgen
};
//SIG(1 S21349C1) C1{ vd m FC2{ FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC5{ m Fi[5]} FC6{ m FC5 Fi FC7{ m Fs[6] Fi[2] Fc Fs} Fc} FC6 Fi[2] FC8{ m Fp}} FC9{ m FC10{ FL[4]}}}


void  S21349C1 ::mf21349c1(){}
 S21349C1 ::~S21349C1(){ note_dtor("S21349C1", this);}
S21349C1 ::S21349C1(){ note_ctor("S21349C1", this);} // tgen

static void Test_S21349C1()
{
  extern Class_Descriptor cd_S21349C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,53)];
    init_test(&cd_S21349C1, buf);
    S21349C1 *dp, &lv = *(dp=new (buf) S21349C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,208), "sizeof(S21349C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21349C1)");
    check_field_offset(lv, s21349c1f0, ABISELECT(8,4), "S21349C1.s21349c1f0");
    check_field_offset(lv, s21349c1f1, ABISELECT(200,176), "S21349C1.s21349c1f1");
    test_class_info(&lv, &cd_S21349C1);
    dp->~S21349C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21349C1(Test_S21349C1, "S21349C1", ABISELECT(232,208));

#else // __cplusplus

extern void _ZN8S21349C1C1Ev();
extern void _ZN8S21349C1D1Ev();
Name_Map name_map_S21349C1[] = {
  NSPAIR(_ZN8S21349C1C1Ev),
  NSPAIR(_ZN8S21349C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21349C1[];
extern void _ZN8S21349C1D1Ev();
extern void _ZN8S21349C1D0Ev();
static  VTBL_ENTRY vtc_S21349C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21349C1[0]),
  (VTBL_ENTRY)&_ZN8S21349C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21349C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21349C1[];
extern  VTBL_ENTRY _ZTV8S21349C1[];
Class_Descriptor cd_S21349C1 = {  "S21349C1", // class name
  0,0,//no base classes
  &(vtc_S21349C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,208), // object size
  NSPAIRA(_ZTI8S21349C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21349C1),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  S21348C1  {
  ::S293C14 s21348c1f0;
  ::S3047C15_nt s21348c1f1;
  void  mf21348c1(); // _ZN8S21348C19mf21348c1Ev
  virtual  ~S21348C1(); // _ZN8S21348C1D1Ev
  S21348C1(); // tgen
};
//SIG(1 S21348C1) C1{ vd m FC2{ FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC5{ m Fi[5]} FC6{ m FC5 Fi FC7{ m Fs[6] Fi[2] Fc Fs} Fc} FC6 Fi[2] FC8{ m Fp}} FC9{ m FC10{ Fl[4]}}}


void  S21348C1 ::mf21348c1(){}
 S21348C1 ::~S21348C1(){ note_dtor("S21348C1", this);}
S21348C1 ::S21348C1(){ note_ctor("S21348C1", this);} // tgen

static void Test_S21348C1()
{
  extern Class_Descriptor cd_S21348C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,49)];
    init_test(&cd_S21348C1, buf);
    S21348C1 *dp, &lv = *(dp=new (buf) S21348C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,192), "sizeof(S21348C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21348C1)");
    check_field_offset(lv, s21348c1f0, ABISELECT(8,4), "S21348C1.s21348c1f0");
    check_field_offset(lv, s21348c1f1, ABISELECT(200,176), "S21348C1.s21348c1f1");
    test_class_info(&lv, &cd_S21348C1);
    dp->~S21348C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21348C1(Test_S21348C1, "S21348C1", ABISELECT(232,192));

#else // __cplusplus

extern void _ZN8S21348C1C1Ev();
extern void _ZN8S21348C1D1Ev();
Name_Map name_map_S21348C1[] = {
  NSPAIR(_ZN8S21348C1C1Ev),
  NSPAIR(_ZN8S21348C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21348C1[];
extern void _ZN8S21348C1D1Ev();
extern void _ZN8S21348C1D0Ev();
static  VTBL_ENTRY vtc_S21348C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21348C1[0]),
  (VTBL_ENTRY)&_ZN8S21348C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21348C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21348C1[];
extern  VTBL_ENTRY _ZTV8S21348C1[];
Class_Descriptor cd_S21348C1 = {  "S21348C1", // class name
  0,0,//no base classes
  &(vtc_S21348C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,192), // object size
  NSPAIRA(_ZTI8S21348C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21348C1),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  S21352C1  {
  ::S294C14 s21352c1f0;
  ::S3048C15_nt s21352c1f1;
  void  mf21352c1(); // _ZN8S21352C19mf21352c1Ev
  virtual  ~S21352C1(); // _ZN8S21352C1D1Ev
  S21352C1(); // tgen
};
//SIG(1 S21352C1) C1{ vd m FC2{ FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC5{ m Fi[5]} FC6{ m Fi FC7{ m Fs[6] Fi[2] Fc Fs} Fc} FC6 Fi[4] FC8{ m Fp} FC8} FC9{ m FC10{ FL[4]}}}


void  S21352C1 ::mf21352c1(){}
 S21352C1 ::~S21352C1(){ note_dtor("S21352C1", this);}
S21352C1 ::S21352C1(){ note_ctor("S21352C1", this);} // tgen

static void Test_S21352C1()
{
  extern Class_Descriptor cd_S21352C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,46)];
    init_test(&cd_S21352C1, buf);
    S21352C1 *dp, &lv = *(dp=new (buf) S21352C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,180), "sizeof(S21352C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21352C1)");
    check_field_offset(lv, s21352c1f0, ABISELECT(8,4), "S21352C1.s21352c1f0");
    check_field_offset(lv, s21352c1f1, ABISELECT(176,148), "S21352C1.s21352c1f1");
    test_class_info(&lv, &cd_S21352C1);
    dp->~S21352C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21352C1(Test_S21352C1, "S21352C1", ABISELECT(208,180));

#else // __cplusplus

extern void _ZN8S21352C1C1Ev();
extern void _ZN8S21352C1D1Ev();
Name_Map name_map_S21352C1[] = {
  NSPAIR(_ZN8S21352C1C1Ev),
  NSPAIR(_ZN8S21352C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21352C1[];
extern void _ZN8S21352C1D1Ev();
extern void _ZN8S21352C1D0Ev();
static  VTBL_ENTRY vtc_S21352C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21352C1[0]),
  (VTBL_ENTRY)&_ZN8S21352C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21352C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21352C1[];
extern  VTBL_ENTRY _ZTV8S21352C1[];
Class_Descriptor cd_S21352C1 = {  "S21352C1", // class name
  0,0,//no base classes
  &(vtc_S21352C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,180), // object size
  NSPAIRA(_ZTI8S21352C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21352C1),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  S21351C1  {
  ::S294C14 s21351c1f0;
  ::S3047C15_nt s21351c1f1;
  void  mf21351c1(); // _ZN8S21351C19mf21351c1Ev
  virtual  ~S21351C1(); // _ZN8S21351C1D1Ev
  S21351C1(); // tgen
};
//SIG(1 S21351C1) C1{ vd m FC2{ FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC5{ m Fi[5]} FC6{ m Fi FC7{ m Fs[6] Fi[2] Fc Fs} Fc} FC6 Fi[4] FC8{ m Fp} FC8} FC9{ m FC10{ Fl[4]}}}


void  S21351C1 ::mf21351c1(){}
 S21351C1 ::~S21351C1(){ note_dtor("S21351C1", this);}
S21351C1 ::S21351C1(){ note_ctor("S21351C1", this);} // tgen

static void Test_S21351C1()
{
  extern Class_Descriptor cd_S21351C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,42)];
    init_test(&cd_S21351C1, buf);
    S21351C1 *dp, &lv = *(dp=new (buf) S21351C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,164), "sizeof(S21351C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21351C1)");
    check_field_offset(lv, s21351c1f0, ABISELECT(8,4), "S21351C1.s21351c1f0");
    check_field_offset(lv, s21351c1f1, ABISELECT(176,148), "S21351C1.s21351c1f1");
    test_class_info(&lv, &cd_S21351C1);
    dp->~S21351C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21351C1(Test_S21351C1, "S21351C1", ABISELECT(208,164));

#else // __cplusplus

extern void _ZN8S21351C1C1Ev();
extern void _ZN8S21351C1D1Ev();
Name_Map name_map_S21351C1[] = {
  NSPAIR(_ZN8S21351C1C1Ev),
  NSPAIR(_ZN8S21351C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21351C1[];
extern void _ZN8S21351C1D1Ev();
extern void _ZN8S21351C1D0Ev();
static  VTBL_ENTRY vtc_S21351C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21351C1[0]),
  (VTBL_ENTRY)&_ZN8S21351C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21351C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21351C1[];
extern  VTBL_ENTRY _ZTV8S21351C1[];
Class_Descriptor cd_S21351C1 = {  "S21351C1", // class name
  0,0,//no base classes
  &(vtc_S21351C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,164), // object size
  NSPAIRA(_ZTI8S21351C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21351C1),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  S21347C1  {
  ::S292C14 s21347c1f0;
  ::S3049C15_nt s21347c1f1;
  void  mf21347c1(); // _ZN8S21347C19mf21347c1Ev
  virtual  ~S21347C1(); // _ZN8S21347C1D1Ev
  S21347C1(); // tgen
};
//SIG(1 S21347C1) C1{ vd m FC2{ FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC5{ m Fi[5]} FC6{ m FC5 Fi FC7{ m Fs[6] Fi[2] Fc Fs} Fc} FC6 Fi[2] FC8{ m Fp} Fi} FC9{ m FL[4]}}


void  S21347C1 ::mf21347c1(){}
 S21347C1 ::~S21347C1(){ note_dtor("S21347C1", this);}
S21347C1 ::S21347C1(){ note_ctor("S21347C1", this);} // tgen

static void Test_S21347C1()
{
  extern Class_Descriptor cd_S21347C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,54)];
    init_test(&cd_S21347C1, buf);
    S21347C1 *dp, &lv = *(dp=new (buf) S21347C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,212), "sizeof(S21347C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21347C1)");
    check_field_offset(lv, s21347c1f0, ABISELECT(8,4), "S21347C1.s21347c1f0");
    check_field_offset(lv, s21347c1f1, ABISELECT(208,180), "S21347C1.s21347c1f1");
    test_class_info(&lv, &cd_S21347C1);
    dp->~S21347C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21347C1(Test_S21347C1, "S21347C1", ABISELECT(240,212));

#else // __cplusplus

extern void _ZN8S21347C1C1Ev();
extern void _ZN8S21347C1D1Ev();
Name_Map name_map_S21347C1[] = {
  NSPAIR(_ZN8S21347C1C1Ev),
  NSPAIR(_ZN8S21347C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21347C1[];
extern void _ZN8S21347C1D1Ev();
extern void _ZN8S21347C1D0Ev();
static  VTBL_ENTRY vtc_S21347C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21347C1[0]),
  (VTBL_ENTRY)&_ZN8S21347C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21347C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21347C1[];
extern  VTBL_ENTRY _ZTV8S21347C1[];
Class_Descriptor cd_S21347C1 = {  "S21347C1", // class name
  0,0,//no base classes
  &(vtc_S21347C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,212), // object size
  NSPAIRA(_ZTI8S21347C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21347C1),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  S21350C1  {
  ::S293C14 s21350c1f0;
  ::S3049C15_nt s21350c1f1;
  void  mf21350c1(); // _ZN8S21350C19mf21350c1Ev
  virtual  ~S21350C1(); // _ZN8S21350C1D1Ev
  S21350C1(); // tgen
};
//SIG(1 S21350C1) C1{ vd m FC2{ FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC5{ m Fi[5]} FC6{ m FC5 Fi FC7{ m Fs[6] Fi[2] Fc Fs} Fc} FC6 Fi[2] FC8{ m Fp}} FC9{ m FL[4]}}


void  S21350C1 ::mf21350c1(){}
 S21350C1 ::~S21350C1(){ note_dtor("S21350C1", this);}
S21350C1 ::S21350C1(){ note_ctor("S21350C1", this);} // tgen

static void Test_S21350C1()
{
  extern Class_Descriptor cd_S21350C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,53)];
    init_test(&cd_S21350C1, buf);
    S21350C1 *dp, &lv = *(dp=new (buf) S21350C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,208), "sizeof(S21350C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21350C1)");
    check_field_offset(lv, s21350c1f0, ABISELECT(8,4), "S21350C1.s21350c1f0");
    check_field_offset(lv, s21350c1f1, ABISELECT(200,176), "S21350C1.s21350c1f1");
    test_class_info(&lv, &cd_S21350C1);
    dp->~S21350C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21350C1(Test_S21350C1, "S21350C1", ABISELECT(232,208));

#else // __cplusplus

extern void _ZN8S21350C1C1Ev();
extern void _ZN8S21350C1D1Ev();
Name_Map name_map_S21350C1[] = {
  NSPAIR(_ZN8S21350C1C1Ev),
  NSPAIR(_ZN8S21350C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21350C1[];
extern void _ZN8S21350C1D1Ev();
extern void _ZN8S21350C1D0Ev();
static  VTBL_ENTRY vtc_S21350C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21350C1[0]),
  (VTBL_ENTRY)&_ZN8S21350C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21350C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21350C1[];
extern  VTBL_ENTRY _ZTV8S21350C1[];
Class_Descriptor cd_S21350C1 = {  "S21350C1", // class name
  0,0,//no base classes
  &(vtc_S21350C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,208), // object size
  NSPAIRA(_ZTI8S21350C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21350C1),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  S21353C1  {
  ::S294C14 s21353c1f0;
  ::S3049C15_nt s21353c1f1;
  void  mf21353c1(); // _ZN8S21353C19mf21353c1Ev
  virtual  ~S21353C1(); // _ZN8S21353C1D1Ev
  S21353C1(); // tgen
};
//SIG(1 S21353C1) C1{ vd m FC2{ FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC5{ m Fi[5]} FC6{ m Fi FC7{ m Fs[6] Fi[2] Fc Fs} Fc} FC6 Fi[4] FC8{ m Fp} FC8} FC9{ m FL[4]}}


void  S21353C1 ::mf21353c1(){}
 S21353C1 ::~S21353C1(){ note_dtor("S21353C1", this);}
S21353C1 ::S21353C1(){ note_ctor("S21353C1", this);} // tgen

static void Test_S21353C1()
{
  extern Class_Descriptor cd_S21353C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,46)];
    init_test(&cd_S21353C1, buf);
    S21353C1 *dp, &lv = *(dp=new (buf) S21353C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,180), "sizeof(S21353C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21353C1)");
    check_field_offset(lv, s21353c1f0, ABISELECT(8,4), "S21353C1.s21353c1f0");
    check_field_offset(lv, s21353c1f1, ABISELECT(176,148), "S21353C1.s21353c1f1");
    test_class_info(&lv, &cd_S21353C1);
    dp->~S21353C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21353C1(Test_S21353C1, "S21353C1", ABISELECT(208,180));

#else // __cplusplus

extern void _ZN8S21353C1C1Ev();
extern void _ZN8S21353C1D1Ev();
Name_Map name_map_S21353C1[] = {
  NSPAIR(_ZN8S21353C1C1Ev),
  NSPAIR(_ZN8S21353C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21353C1[];
extern void _ZN8S21353C1D1Ev();
extern void _ZN8S21353C1D0Ev();
static  VTBL_ENTRY vtc_S21353C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21353C1[0]),
  (VTBL_ENTRY)&_ZN8S21353C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21353C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21353C1[];
extern  VTBL_ENTRY _ZTV8S21353C1[];
Class_Descriptor cd_S21353C1 = {  "S21353C1", // class name
  0,0,//no base classes
  &(vtc_S21353C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,180), // object size
  NSPAIRA(_ZTI8S21353C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21353C1),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  S9750C2_nt  {
  void *s9750c2f0;
  virtual  ~S9750C2_nt(); // _ZN10S9750C2_ntD1Ev
  virtual void  v4(); // _ZN10S9750C2_nt2v4Ev
  virtual void  v5(); // _ZN10S9750C2_nt2v5Ev
  virtual void  v6(); // _ZN10S9750C2_nt2v6Ev
  S9750C2_nt(); // tgen
};
//SIG(-1 S9750C2_nt) C1{ vd v1 v2 v3 Fp}


 S9750C2_nt ::~S9750C2_nt(){ note_dtor("S9750C2_nt", this);}
void  S9750C2_nt ::v4(){vfunc_called(this, "_ZN10S9750C2_nt2v4Ev");}
void  S9750C2_nt ::v5(){vfunc_called(this, "_ZN10S9750C2_nt2v5Ev");}
void  S9750C2_nt ::v6(){vfunc_called(this, "_ZN10S9750C2_nt2v6Ev");}
S9750C2_nt ::S9750C2_nt(){ note_ctor("S9750C2_nt", this);} // tgen

//skip512 S9750C2_nt

#else // __cplusplus

extern void _ZN10S9750C2_ntC1Ev();
extern void _ZN10S9750C2_ntD1Ev();
Name_Map name_map_S9750C2_nt[] = {
  NSPAIR(_ZN10S9750C2_ntC1Ev),
  NSPAIR(_ZN10S9750C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9750C2_nt[];
extern void _ZN10S9750C2_ntD1Ev();
extern void _ZN10S9750C2_ntD0Ev();
extern void _ZN10S9750C2_nt2v4Ev();
extern void _ZN10S9750C2_nt2v5Ev();
extern void _ZN10S9750C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S9750C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9750C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9750C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9750C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9750C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9750C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9750C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S9750C2_nt[];
VTBL_ENTRY *P__ZTI10S9750C2_nt = _ZTI10S9750C2_nt; 
extern  VTBL_ENTRY _ZTV10S9750C2_nt[];
Class_Descriptor cd_S9750C2_nt = {  "S9750C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9750C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S9750C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9750C2_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  S9750C1  : S9750C2_nt {
  void *s9750c1f0[9];
  char s9750c1f1[4];
  int s9750c1f2;
  ::S3047C24_nt s9750c1f3;
  ::S3047C29_nt s9750c1f4;
  __tsi64 s9750c1f5;
  virtual  ~S9750C1(); // _ZN7S9750C1D1Ev
  virtual void  v1(); // _ZN7S9750C12v1Ev
  virtual void  v2(); // _ZN7S9750C12v2Ev
  virtual void  v3(); // _ZN7S9750C12v3Ev
  S9750C1(); // tgen
};
//SIG(1 S9750C1) C1{ BC2{ vd v4 v5 v6 Fp} vd v1 v2 v3 Fp[9] Fc[4] Fi FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fs[6] Fi[2] Fc Fs} FL}


 S9750C1 ::~S9750C1(){ note_dtor("S9750C1", this);}
void  S9750C1 ::v1(){vfunc_called(this, "_ZN7S9750C12v1Ev");}
void  S9750C1 ::v2(){vfunc_called(this, "_ZN7S9750C12v2Ev");}
void  S9750C1 ::v3(){vfunc_called(this, "_ZN7S9750C12v3Ev");}
S9750C1 ::S9750C1(){ note_ctor("S9750C1", this);} // tgen

static void Test_S9750C1()
{
  extern Class_Descriptor cd_S9750C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,26)];
    init_test(&cd_S9750C1, buf);
    S9750C1 *dp, &lv = *(dp=new (buf) S9750C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,100), "sizeof(S9750C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9750C1)");
    check_base_class_offset(lv, (S9750C2_nt*), 0, "S9750C1");
    check_field_offset(lv, s9750c1f0, ABISELECT(16,8), "S9750C1.s9750c1f0");
    check_field_offset(lv, s9750c1f1, ABISELECT(88,44), "S9750C1.s9750c1f1");
    check_field_offset(lv, s9750c1f2, ABISELECT(92,48), "S9750C1.s9750c1f2");
    check_field_offset(lv, s9750c1f3, ABISELECT(96,52), "S9750C1.s9750c1f3");
    check_field_offset(lv, s9750c1f4, ABISELECT(120,68), "S9750C1.s9750c1f4");
    check_field_offset(lv, s9750c1f5, ABISELECT(144,92), "S9750C1.s9750c1f5");
    test_class_info(&lv, &cd_S9750C1);
    dp->~S9750C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9750C1(Test_S9750C1, "S9750C1", ABISELECT(152,100));

#else // __cplusplus

extern void _ZN7S9750C1C1Ev();
extern void _ZN7S9750C1D1Ev();
Name_Map name_map_S9750C1[] = {
  NSPAIR(_ZN7S9750C1C1Ev),
  NSPAIR(_ZN7S9750C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9750C2_nt;
extern VTBL_ENTRY _ZTI10S9750C2_nt[];
extern  VTBL_ENTRY _ZTV10S9750C2_nt[];
static Base_Class bases_S9750C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9750C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9750C1[];
extern void _ZN7S9750C1D1Ev();
extern void _ZN7S9750C1D0Ev();
extern void _ZN10S9750C2_nt2v4Ev();
extern void _ZN10S9750C2_nt2v5Ev();
extern void _ZN10S9750C2_nt2v6Ev();
extern void _ZN7S9750C12v1Ev();
extern void _ZN7S9750C12v2Ev();
extern void _ZN7S9750C12v3Ev();
static  VTBL_ENTRY vtc_S9750C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9750C1[0]),
  (VTBL_ENTRY)&_ZN7S9750C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9750C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9750C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9750C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9750C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S9750C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9750C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9750C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9750C1[];
extern  VTBL_ENTRY _ZTV7S9750C1[];
Class_Descriptor cd_S9750C1 = {  "S9750C1", // class name
  bases_S9750C1, 1,
  &(vtc_S9750C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,100), // object size
  NSPAIRA(_ZTI7S9750C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9750C1),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  S6740C2  {
  virtual  ~S6740C2(); // _ZN7S6740C2D1Ev
  virtual void  v3(); // _ZN7S6740C22v3Ev
  virtual void  v4(); // _ZN7S6740C22v4Ev
  S6740C2(); // tgen
};
//SIG(-1 S6740C2) C1{ vd v1 v2}


 S6740C2 ::~S6740C2(){ note_dtor("S6740C2", this);}
void  S6740C2 ::v3(){vfunc_called(this, "_ZN7S6740C22v3Ev");}
void  S6740C2 ::v4(){vfunc_called(this, "_ZN7S6740C22v4Ev");}
S6740C2 ::S6740C2(){ note_ctor("S6740C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6740C2C1Ev();
extern void _ZN7S6740C2D1Ev();
Name_Map name_map_S6740C2[] = {
  NSPAIR(_ZN7S6740C2C1Ev),
  NSPAIR(_ZN7S6740C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6740C2[];
extern void _ZN7S6740C2D1Ev();
extern void _ZN7S6740C2D0Ev();
extern void _ZN7S6740C22v3Ev();
extern void _ZN7S6740C22v4Ev();
static  VTBL_ENTRY vtc_S6740C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6740C2[0]),
  (VTBL_ENTRY)&_ZN7S6740C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6740C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6740C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6740C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6740C2[];
extern  VTBL_ENTRY _ZTV7S6740C2[];
Class_Descriptor cd_S6740C2 = {  "S6740C2", // class name
  0,0,//no base classes
  &(vtc_S6740C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6740C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6740C2),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  S6740C3  {
  void *s6740c3f0;
  ::S2215C19_nt s6740c3f1;
  ::S2215C19_nt s6740c3f2;
  ::S2215C13_nt s6740c3f3;
  int s6740c3f4;
  void *s6740c3f5[5];
  void  mf6740c3(); // _ZN7S6740C38mf6740c3Ev
};
//SIG(-1 S6740C3) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC5{ m FC6{ m FL[2]}} Fi Fp[5]}


void  S6740C3 ::mf6740c3(){}

static void Test_S6740C3()
{
  {
    init_simple_test("S6740C3");
    S6740C3 lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S6740C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6740C3)");
    check_field_offset(lv, s6740c3f0, 0, "S6740C3.s6740c3f0");
    check_field_offset(lv, s6740c3f1, ABISELECT(8,4), "S6740C3.s6740c3f1");
    check_field_offset(lv, s6740c3f2, ABISELECT(32,20), "S6740C3.s6740c3f2");
    check_field_offset(lv, s6740c3f3, ABISELECT(56,36), "S6740C3.s6740c3f3");
    check_field_offset(lv, s6740c3f4, ABISELECT(72,52), "S6740C3.s6740c3f4");
    check_field_offset(lv, s6740c3f5, ABISELECT(80,56), "S6740C3.s6740c3f5");
  }
}
static Arrange_To_Call_Me vS6740C3(Test_S6740C3, "S6740C3", ABISELECT(120,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6740C1  : S6740C2 {
  ::S6740C3 s6740c1f0;
  int s6740c1f1;
  virtual void  v1(); // _ZN7S6740C12v1Ev
  virtual void  v2(); // _ZN7S6740C12v2Ev
  ~S6740C1(); // tgen
  S6740C1(); // tgen
};
//SIG(1 S6740C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC4 FC7{ m FC8{ m FL[2]}} Fi Fp[5]} Fi}


void  S6740C1 ::v1(){vfunc_called(this, "_ZN7S6740C12v1Ev");}
void  S6740C1 ::v2(){vfunc_called(this, "_ZN7S6740C12v2Ev");}
S6740C1 ::~S6740C1(){ note_dtor("S6740C1", this);} // tgen
S6740C1 ::S6740C1(){ note_ctor("S6740C1", this);} // tgen

static void Test_S6740C1()
{
  extern Class_Descriptor cd_S6740C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S6740C1, buf);
    S6740C1 *dp, &lv = *(dp=new (buf) S6740C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S6740C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6740C1)");
    check_base_class_offset(lv, (S6740C2*), 0, "S6740C1");
    check_field_offset(lv, s6740c1f0, ABISELECT(8,4), "S6740C1.s6740c1f0");
    check_field_offset(lv, s6740c1f1, ABISELECT(128,80), "S6740C1.s6740c1f1");
    test_class_info(&lv, &cd_S6740C1);
    dp->~S6740C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6740C1(Test_S6740C1, "S6740C1", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN7S6740C1C1Ev();
extern void _ZN7S6740C1D1Ev();
Name_Map name_map_S6740C1[] = {
  NSPAIR(_ZN7S6740C1C1Ev),
  NSPAIR(_ZN7S6740C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6740C2;
extern VTBL_ENTRY _ZTI7S6740C2[];
extern  VTBL_ENTRY _ZTV7S6740C2[];
static Base_Class bases_S6740C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6740C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6740C1[];
extern void _ZN7S6740C1D1Ev();
extern void _ZN7S6740C1D0Ev();
extern void _ZN7S6740C22v3Ev();
extern void _ZN7S6740C22v4Ev();
extern void _ZN7S6740C12v1Ev();
extern void _ZN7S6740C12v2Ev();
static  VTBL_ENTRY vtc_S6740C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6740C1[0]),
  (VTBL_ENTRY)&_ZN7S6740C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6740C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6740C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6740C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6740C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6740C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6740C1[];
extern  VTBL_ENTRY _ZTV7S6740C1[];
Class_Descriptor cd_S6740C1 = {  "S6740C1", // class name
  bases_S6740C1, 1,
  &(vtc_S6740C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI7S6740C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6740C1),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  S14676C1  {
  void *s14676c1f0[4];
  int s14676c1f1;
  void *s14676c1f2[3];
  int s14676c1f3[3];
  void *s14676c1f4[2];
  int s14676c1f5;
  void *s14676c1f6[5];
  int s14676c1f7[2];
  void *s14676c1f8[2];
  int s14676c1f9;
  void *s14676c1f10;
  int s14676c1f11[2];
  void *s14676c1f12[2];
  int s14676c1f13[2];
  void *s14676c1f14;
  int s14676c1f15;
  void *s14676c1f16[2];
  int s14676c1f17[2];
};
//SIG(1 S14676C1) C1{ Fp[4] Fi Fp[3] Fi[3] Fp[2] Fi Fp[5] Fi[2] Fp[2] Fi Fp Fi[2] Fp[2] Fi[2] Fp Fi Fp[2] Fi[2]}



static void Test_S14676C1()
{
  {
    init_simple_test("S14676C1");
    S14676C1 lv;
    check2(sizeof(lv), ABISELECT(256,148), "sizeof(S14676C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14676C1)");
    check_field_offset(lv, s14676c1f0, 0, "S14676C1.s14676c1f0");
    check_field_offset(lv, s14676c1f1, ABISELECT(32,16), "S14676C1.s14676c1f1");
    check_field_offset(lv, s14676c1f2, ABISELECT(40,20), "S14676C1.s14676c1f2");
    check_field_offset(lv, s14676c1f3, ABISELECT(64,32), "S14676C1.s14676c1f3");
    check_field_offset(lv, s14676c1f4, ABISELECT(80,44), "S14676C1.s14676c1f4");
    check_field_offset(lv, s14676c1f5, ABISELECT(96,52), "S14676C1.s14676c1f5");
    check_field_offset(lv, s14676c1f6, ABISELECT(104,56), "S14676C1.s14676c1f6");
    check_field_offset(lv, s14676c1f7, ABISELECT(144,76), "S14676C1.s14676c1f7");
    check_field_offset(lv, s14676c1f8, ABISELECT(152,84), "S14676C1.s14676c1f8");
    check_field_offset(lv, s14676c1f9, ABISELECT(168,92), "S14676C1.s14676c1f9");
    check_field_offset(lv, s14676c1f10, ABISELECT(176,96), "S14676C1.s14676c1f10");
    check_field_offset(lv, s14676c1f11, ABISELECT(184,100), "S14676C1.s14676c1f11");
    check_field_offset(lv, s14676c1f12, ABISELECT(192,108), "S14676C1.s14676c1f12");
    check_field_offset(lv, s14676c1f13, ABISELECT(208,116), "S14676C1.s14676c1f13");
    check_field_offset(lv, s14676c1f14, ABISELECT(216,124), "S14676C1.s14676c1f14");
    check_field_offset(lv, s14676c1f15, ABISELECT(224,128), "S14676C1.s14676c1f15");
    check_field_offset(lv, s14676c1f16, ABISELECT(232,132), "S14676C1.s14676c1f16");
    check_field_offset(lv, s14676c1f17, ABISELECT(248,140), "S14676C1.s14676c1f17");
  }
}
static Arrange_To_Call_Me vS14676C1(Test_S14676C1, "S14676C1", ABISELECT(256,148));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5351C3  {
  virtual  ~S5351C3(); // _ZN7S5351C3D1Ev
  virtual void  v6(); // _ZN7S5351C32v6Ev
  virtual void  v7(); // _ZN7S5351C32v7Ev
  S5351C3(); // tgen
};
//SIG(-1 S5351C3) C1{ vd v1 v2}


 S5351C3 ::~S5351C3(){ note_dtor("S5351C3", this);}
void  S5351C3 ::v6(){vfunc_called(this, "_ZN7S5351C32v6Ev");}
void  S5351C3 ::v7(){vfunc_called(this, "_ZN7S5351C32v7Ev");}
S5351C3 ::S5351C3(){ note_ctor("S5351C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5351C3C1Ev();
extern void _ZN7S5351C3D1Ev();
Name_Map name_map_S5351C3[] = {
  NSPAIR(_ZN7S5351C3C1Ev),
  NSPAIR(_ZN7S5351C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5351C3[];
extern void _ZN7S5351C3D1Ev();
extern void _ZN7S5351C3D0Ev();
extern void _ZN7S5351C32v6Ev();
extern void _ZN7S5351C32v7Ev();
static  VTBL_ENTRY vtc_S5351C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5351C3[0]),
  (VTBL_ENTRY)&_ZN7S5351C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5351C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5351C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5351C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5351C3[];
extern  VTBL_ENTRY _ZTV7S5351C3[];
Class_Descriptor cd_S5351C3 = {  "S5351C3", // class name
  0,0,//no base classes
  &(vtc_S5351C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5351C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5351C3),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  S5351C2  : S5351C3 {
  int s5351c2f0[4];
  virtual  ~S5351C2(); // _ZN7S5351C2D1Ev
  virtual void  v8(); // _ZN7S5351C22v8Ev
  virtual void  v9(); // _ZN7S5351C22v9Ev
  S5351C2(); // tgen
};
//SIG(-1 S5351C2) C1{ BC2{ vd v3 v4} vd v1 v2 Fi[4]}


 S5351C2 ::~S5351C2(){ note_dtor("S5351C2", this);}
void  S5351C2 ::v8(){vfunc_called(this, "_ZN7S5351C22v8Ev");}
void  S5351C2 ::v9(){vfunc_called(this, "_ZN7S5351C22v9Ev");}
S5351C2 ::S5351C2(){ note_ctor("S5351C2", this);} // tgen

static void Test_S5351C2()
{
  extern Class_Descriptor cd_S5351C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S5351C2, buf);
    S5351C2 *dp, &lv = *(dp=new (buf) S5351C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S5351C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5351C2)");
    check_base_class_offset(lv, (S5351C3*), 0, "S5351C2");
    check_field_offset(lv, s5351c2f0, ABISELECT(8,4), "S5351C2.s5351c2f0");
    test_class_info(&lv, &cd_S5351C2);
    dp->~S5351C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5351C2(Test_S5351C2, "S5351C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S5351C2C1Ev();
extern void _ZN7S5351C2D1Ev();
Name_Map name_map_S5351C2[] = {
  NSPAIR(_ZN7S5351C2C1Ev),
  NSPAIR(_ZN7S5351C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5351C3;
extern VTBL_ENTRY _ZTI7S5351C3[];
extern  VTBL_ENTRY _ZTV7S5351C3[];
static Base_Class bases_S5351C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5351C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5351C2[];
extern void _ZN7S5351C2D1Ev();
extern void _ZN7S5351C2D0Ev();
extern void _ZN7S5351C32v6Ev();
extern void _ZN7S5351C32v7Ev();
extern void _ZN7S5351C22v8Ev();
extern void _ZN7S5351C22v9Ev();
static  VTBL_ENTRY vtc_S5351C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5351C2[0]),
  (VTBL_ENTRY)&_ZN7S5351C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5351C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5351C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5351C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5351C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5351C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S5351C2[];
extern  VTBL_ENTRY _ZTV7S5351C2[];
Class_Descriptor cd_S5351C2 = {  "S5351C2", // class name
  bases_S5351C2, 1,
  &(vtc_S5351C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S5351C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5351C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5351C1  : S5351C2 {
  ::S3047C23_nt s5351c1f0;
  virtual void  v1(); // _ZN7S5351C12v1Ev
  virtual void  v2(); // _ZN7S5351C12v2Ev
  virtual void  v3(); // _ZN7S5351C12v3Ev
  virtual void  v4(); // _ZN7S5351C12v4Ev
  virtual void  v5(); // _ZN7S5351C12v5Ev
  ~S5351C1(); // tgen
  S5351C1(); // tgen
};
//SIG(1 S5351C1) C1{ BC2{ BC3{ vd v6 v7} vd v8 v9 Fi[4]} v1 v2 v3 v4 v5 FC4{ BC5{ m Fp Fi[2] FC6{ m}} BC7{ vd v12 v13} vd v10 v11}}


void  S5351C1 ::v1(){vfunc_called(this, "_ZN7S5351C12v1Ev");}
void  S5351C1 ::v2(){vfunc_called(this, "_ZN7S5351C12v2Ev");}
void  S5351C1 ::v3(){vfunc_called(this, "_ZN7S5351C12v3Ev");}
void  S5351C1 ::v4(){vfunc_called(this, "_ZN7S5351C12v4Ev");}
void  S5351C1 ::v5(){vfunc_called(this, "_ZN7S5351C12v5Ev");}
S5351C1 ::~S5351C1(){ note_dtor("S5351C1", this);} // tgen
S5351C1 ::S5351C1(){ note_ctor("S5351C1", this);} // tgen

static void Test_S5351C1()
{
  extern Class_Descriptor cd_S5351C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S5351C1, buf);
    S5351C1 *dp, &lv = *(dp=new (buf) S5351C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S5351C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5351C1)");
    check_base_class_offset(lv, (S5351C3*)(S5351C2*), 0, "S5351C1");
    check_base_class_offset(lv, (S5351C2*), 0, "S5351C1");
    check_field_offset(lv, s5351c1f0, ABISELECT(24,20), "S5351C1.s5351c1f0");
    test_class_info(&lv, &cd_S5351C1);
    dp->~S5351C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5351C1(Test_S5351C1, "S5351C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S5351C1C1Ev();
extern void _ZN7S5351C1D1Ev();
Name_Map name_map_S5351C1[] = {
  NSPAIR(_ZN7S5351C1C1Ev),
  NSPAIR(_ZN7S5351C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5351C3;
extern VTBL_ENTRY _ZTI7S5351C3[];
extern  VTBL_ENTRY _ZTV7S5351C3[];
extern Class_Descriptor cd_S5351C2;
extern VTBL_ENTRY _ZTI7S5351C2[];
extern  VTBL_ENTRY _ZTV7S5351C2[];
static Base_Class bases_S5351C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5351C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5351C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S5351C1[];
extern void _ZN7S5351C1D1Ev();
extern void _ZN7S5351C1D0Ev();
extern void _ZN7S5351C32v6Ev();
extern void _ZN7S5351C32v7Ev();
extern void _ZN7S5351C22v8Ev();
extern void _ZN7S5351C22v9Ev();
extern void _ZN7S5351C12v1Ev();
extern void _ZN7S5351C12v2Ev();
extern void _ZN7S5351C12v3Ev();
extern void _ZN7S5351C12v4Ev();
extern void _ZN7S5351C12v5Ev();
static  VTBL_ENTRY vtc_S5351C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5351C1[0]),
  (VTBL_ENTRY)&_ZN7S5351C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5351C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5351C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5351C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5351C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5351C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5351C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5351C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5351C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5351C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5351C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S5351C1[];
extern  VTBL_ENTRY _ZTV7S5351C1[];
Class_Descriptor cd_S5351C1 = {  "S5351C1", // class name
  bases_S5351C1, 2,
  &(vtc_S5351C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S5351C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5351C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9172C2_nt  {
  char s9172c2f0[2];
  virtual  ~S9172C2_nt(); // _ZN10S9172C2_ntD1Ev
  virtual void  v3(); // _ZN10S9172C2_nt2v3Ev
  virtual void  v4(); // _ZN10S9172C2_nt2v4Ev
  S9172C2_nt(); // tgen
};
//SIG(-1 S9172C2_nt) C1{ vd v1 v2 Fc[2]}


 S9172C2_nt ::~S9172C2_nt(){ note_dtor("S9172C2_nt", this);}
void  S9172C2_nt ::v3(){vfunc_called(this, "_ZN10S9172C2_nt2v3Ev");}
void  S9172C2_nt ::v4(){vfunc_called(this, "_ZN10S9172C2_nt2v4Ev");}
S9172C2_nt ::S9172C2_nt(){ note_ctor("S9172C2_nt", this);} // tgen

//skip512 S9172C2_nt

#else // __cplusplus

extern void _ZN10S9172C2_ntC1Ev();
extern void _ZN10S9172C2_ntD1Ev();
Name_Map name_map_S9172C2_nt[] = {
  NSPAIR(_ZN10S9172C2_ntC1Ev),
  NSPAIR(_ZN10S9172C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9172C2_nt[];
extern void _ZN10S9172C2_ntD1Ev();
extern void _ZN10S9172C2_ntD0Ev();
extern void _ZN10S9172C2_nt2v3Ev();
extern void _ZN10S9172C2_nt2v4Ev();
static  VTBL_ENTRY vtc_S9172C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9172C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9172C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9172C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9172C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9172C2_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S9172C2_nt[];
VTBL_ENTRY *P__ZTI10S9172C2_nt = _ZTI10S9172C2_nt; 
extern  VTBL_ENTRY _ZTV10S9172C2_nt[];
Class_Descriptor cd_S9172C2_nt = {  "S9172C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9172C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S9172C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9172C2_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  S9172C1  : S9172C2_nt {
  ::S770C13 s9172c1f0;
  char s9172c1f1[128];
  int s9172c1f2[2];
  virtual void  v1(); // _ZN7S9172C12v1Ev
  virtual void  v2(); // _ZN7S9172C12v2Ev
  ~S9172C1(); // tgen
  S9172C1(); // tgen
};
//SIG(1 S9172C1) C1{ BC2{ vd v3 v4 Fc[2]} v1 v2 FC3{ FC4{ FC5{ Fc[20]} Fc[16]} FC6{ Fc[52]} FC7{ Fc[128]}} Fc[128] Fi[2]}


void  S9172C1 ::v1(){vfunc_called(this, "_ZN7S9172C12v1Ev");}
void  S9172C1 ::v2(){vfunc_called(this, "_ZN7S9172C12v2Ev");}
S9172C1 ::~S9172C1(){ note_dtor("S9172C1", this);} // tgen
S9172C1 ::S9172C1(){ note_ctor("S9172C1", this);} // tgen

static void Test_S9172C1()
{
  extern Class_Descriptor cd_S9172C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,91)];
    init_test(&cd_S9172C1, buf);
    S9172C1 *dp, &lv = *(dp=new (buf) S9172C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,360), "sizeof(S9172C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9172C1)");
    check_base_class_offset(lv, (S9172C2_nt*), 0, "S9172C1");
    check_field_offset(lv, s9172c1f0, ABISELECT(10,6), "S9172C1.s9172c1f0");
    check_field_offset(lv, s9172c1f1, ABISELECT(226,222), "S9172C1.s9172c1f1");
    check_field_offset(lv, s9172c1f2, ABISELECT(356,352), "S9172C1.s9172c1f2");
    test_class_info(&lv, &cd_S9172C1);
    dp->~S9172C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9172C1(Test_S9172C1, "S9172C1", ABISELECT(368,360));

#else // __cplusplus

extern void _ZN7S9172C1C1Ev();
extern void _ZN7S9172C1D1Ev();
Name_Map name_map_S9172C1[] = {
  NSPAIR(_ZN7S9172C1C1Ev),
  NSPAIR(_ZN7S9172C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9172C2_nt;
extern VTBL_ENTRY _ZTI10S9172C2_nt[];
extern  VTBL_ENTRY _ZTV10S9172C2_nt[];
static Base_Class bases_S9172C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9172C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9172C1[];
extern void _ZN7S9172C1D1Ev();
extern void _ZN7S9172C1D0Ev();
extern void _ZN10S9172C2_nt2v3Ev();
extern void _ZN10S9172C2_nt2v4Ev();
extern void _ZN7S9172C12v1Ev();
extern void _ZN7S9172C12v2Ev();
static  VTBL_ENTRY vtc_S9172C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9172C1[0]),
  (VTBL_ENTRY)&_ZN7S9172C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9172C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9172C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9172C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S9172C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9172C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9172C1[];
extern  VTBL_ENTRY _ZTV7S9172C1[];
Class_Descriptor cd_S9172C1 = {  "S9172C1", // class name
  bases_S9172C1, 1,
  &(vtc_S9172C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,360), // object size
  NSPAIRA(_ZTI7S9172C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9172C1),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  S9579C2  {
  virtual  ~S9579C2(); // _ZN7S9579C2D1Ev
  virtual void  v3(); // _ZN7S9579C22v3Ev
  virtual void  v4(); // _ZN7S9579C22v4Ev
  S9579C2(); // tgen
};
//SIG(-1 S9579C2) C1{ vd v1 v2}


 S9579C2 ::~S9579C2(){ note_dtor("S9579C2", this);}
void  S9579C2 ::v3(){vfunc_called(this, "_ZN7S9579C22v3Ev");}
void  S9579C2 ::v4(){vfunc_called(this, "_ZN7S9579C22v4Ev");}
S9579C2 ::S9579C2(){ note_ctor("S9579C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9579C2C1Ev();
extern void _ZN7S9579C2D1Ev();
Name_Map name_map_S9579C2[] = {
  NSPAIR(_ZN7S9579C2C1Ev),
  NSPAIR(_ZN7S9579C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9579C2[];
extern void _ZN7S9579C2D1Ev();
extern void _ZN7S9579C2D0Ev();
extern void _ZN7S9579C22v3Ev();
extern void _ZN7S9579C22v4Ev();
static  VTBL_ENTRY vtc_S9579C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9579C2[0]),
  (VTBL_ENTRY)&_ZN7S9579C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9579C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9579C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9579C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9579C2[];
extern  VTBL_ENTRY _ZTV7S9579C2[];
Class_Descriptor cd_S9579C2 = {  "S9579C2", // class name
  0,0,//no base classes
  &(vtc_S9579C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9579C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9579C2),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  S9579C3  : S9579C2 {
  __tsi64 s9579c3f0;
  ::S3047C23_nt s9579c3f1;
  virtual  ~S9579C3(); // _ZN7S9579C3D1Ev
  virtual void  v5(); // _ZN7S9579C32v5Ev
  virtual void  v6(); // _ZN7S9579C32v6Ev
  S9579C3(); // tgen
};
//SIG(-1 S9579C3) C1{ BC2{ vd v3 v4} vd v1 v2 FL FC3{ BC4{ m Fp Fi[2] FC5{ m}} BC6{ vd v7 v8} vd v5 v6}}


 S9579C3 ::~S9579C3(){ note_dtor("S9579C3", this);}
void  S9579C3 ::v5(){vfunc_called(this, "_ZN7S9579C32v5Ev");}
void  S9579C3 ::v6(){vfunc_called(this, "_ZN7S9579C32v6Ev");}
S9579C3 ::S9579C3(){ note_ctor("S9579C3", this);} // tgen

static void Test_S9579C3()
{
  extern Class_Descriptor cd_S9579C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S9579C3, buf);
    S9579C3 *dp, &lv = *(dp=new (buf) S9579C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S9579C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9579C3)");
    check_base_class_offset(lv, (S9579C2*), 0, "S9579C3");
    check_field_offset(lv, s9579c3f0, ABISELECT(8,4), "S9579C3.s9579c3f0");
    check_field_offset(lv, s9579c3f1, ABISELECT(16,12), "S9579C3.s9579c3f1");
    test_class_info(&lv, &cd_S9579C3);
    dp->~S9579C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9579C3(Test_S9579C3, "S9579C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S9579C3C1Ev();
extern void _ZN7S9579C3D1Ev();
Name_Map name_map_S9579C3[] = {
  NSPAIR(_ZN7S9579C3C1Ev),
  NSPAIR(_ZN7S9579C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9579C2;
extern VTBL_ENTRY _ZTI7S9579C2[];
extern  VTBL_ENTRY _ZTV7S9579C2[];
static Base_Class bases_S9579C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9579C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9579C3[];
extern void _ZN7S9579C3D1Ev();
extern void _ZN7S9579C3D0Ev();
extern void _ZN7S9579C22v3Ev();
extern void _ZN7S9579C22v4Ev();
extern void _ZN7S9579C32v5Ev();
extern void _ZN7S9579C32v6Ev();
static  VTBL_ENTRY vtc_S9579C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9579C3[0]),
  (VTBL_ENTRY)&_ZN7S9579C3D1Ev,
  (VTBL_ENTRY)&_ZN7S9579C3D0Ev,
  (VTBL_ENTRY)&_ZN7S9579C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9579C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9579C32v5Ev,
  (VTBL_ENTRY)&_ZN7S9579C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S9579C3[];
extern  VTBL_ENTRY _ZTV7S9579C3[];
Class_Descriptor cd_S9579C3 = {  "S9579C3", // class name
  bases_S9579C3, 1,
  &(vtc_S9579C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S9579C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9579C3),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  S9579C1  : S9579C2 {
  char s9579c1f0[2];
  ::S9579C3 s9579c1f1;
  virtual  ~S9579C1(); // _ZN7S9579C1D1Ev
  virtual void  v1(); // _ZN7S9579C12v1Ev
  virtual void  v2(); // _ZN7S9579C12v2Ev
  S9579C1(); // tgen
};
//SIG(1 S9579C1) C1{ BC2{ vd v3 v4} vd v1 v2 Fc[2] FC3{ BC2 vd v5 v6 FL FC4{ BC5{ m Fp Fi[2] FC6{ m}} BC7{ vd v9 v10} vd v7 v8}}}


 S9579C1 ::~S9579C1(){ note_dtor("S9579C1", this);}
void  S9579C1 ::v1(){vfunc_called(this, "_ZN7S9579C12v1Ev");}
void  S9579C1 ::v2(){vfunc_called(this, "_ZN7S9579C12v2Ev");}
S9579C1 ::S9579C1(){ note_ctor("S9579C1", this);} // tgen

static void Test_S9579C1()
{
  extern Class_Descriptor cd_S9579C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S9579C1, buf);
    S9579C1 *dp, &lv = *(dp=new (buf) S9579C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S9579C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9579C1)");
    check_base_class_offset(lv, (S9579C2*), 0, "S9579C1");
    check_field_offset(lv, s9579c1f0, ABISELECT(8,4), "S9579C1.s9579c1f0");
    check_field_offset(lv, s9579c1f1, ABISELECT(16,8), "S9579C1.s9579c1f1");
    test_class_info(&lv, &cd_S9579C1);
    dp->~S9579C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9579C1(Test_S9579C1, "S9579C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S9579C1C1Ev();
extern void _ZN7S9579C1D1Ev();
Name_Map name_map_S9579C1[] = {
  NSPAIR(_ZN7S9579C1C1Ev),
  NSPAIR(_ZN7S9579C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9579C2;
extern VTBL_ENTRY _ZTI7S9579C2[];
extern  VTBL_ENTRY _ZTV7S9579C2[];
static Base_Class bases_S9579C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9579C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9579C1[];
extern void _ZN7S9579C1D1Ev();
extern void _ZN7S9579C1D0Ev();
extern void _ZN7S9579C22v3Ev();
extern void _ZN7S9579C22v4Ev();
extern void _ZN7S9579C12v1Ev();
extern void _ZN7S9579C12v2Ev();
static  VTBL_ENTRY vtc_S9579C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9579C1[0]),
  (VTBL_ENTRY)&_ZN7S9579C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9579C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9579C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9579C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9579C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9579C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9579C1[];
extern  VTBL_ENTRY _ZTV7S9579C1[];
Class_Descriptor cd_S9579C1 = {  "S9579C1", // class name
  bases_S9579C1, 1,
  &(vtc_S9579C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S9579C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9579C1),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  S4871C4_nt  {
  void *s4871c4f0[2];
};
//SIG(-1 S4871C4_nt) C1{ Fp[2]}



//skip512 S4871C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4871C3_nt  {
  int s4871c3f0;
  void *s4871c3f1;
  int s4871c3f2;
  ::S4871C4_nt s4871c3f3;
  void *s4871c3f4;
  int s4871c3f5;
  virtual  ~S4871C3_nt(); // _ZN10S4871C3_ntD1Ev
  virtual void  v3(); // _ZN10S4871C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4871C3_nt2v4Ev
  virtual void  v5(); // _ZN10S4871C3_nt2v5Ev
  S4871C3_nt(); // tgen
};
//SIG(-1 S4871C3_nt) C1{ vd v1 v2 v3 Fi Fp Fi FC2{ Fp[2]} Fp Fi}


 S4871C3_nt ::~S4871C3_nt(){ note_dtor("S4871C3_nt", this);}
void  S4871C3_nt ::v3(){vfunc_called(this, "_ZN10S4871C3_nt2v3Ev");}
void  S4871C3_nt ::v4(){vfunc_called(this, "_ZN10S4871C3_nt2v4Ev");}
void  S4871C3_nt ::v5(){vfunc_called(this, "_ZN10S4871C3_nt2v5Ev");}
S4871C3_nt ::S4871C3_nt(){ note_ctor("S4871C3_nt", this);} // tgen

//skip512 S4871C3_nt

#else // __cplusplus

extern void _ZN10S4871C3_ntC1Ev();
extern void _ZN10S4871C3_ntD1Ev();
Name_Map name_map_S4871C3_nt[] = {
  NSPAIR(_ZN10S4871C3_ntC1Ev),
  NSPAIR(_ZN10S4871C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4871C3_nt[];
extern void _ZN10S4871C3_ntD1Ev();
extern void _ZN10S4871C3_ntD0Ev();
extern void _ZN10S4871C3_nt2v3Ev();
extern void _ZN10S4871C3_nt2v4Ev();
extern void _ZN10S4871C3_nt2v5Ev();
static  VTBL_ENTRY vtc_S4871C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4871C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4871C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4871C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4871C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4871C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4871C3_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S4871C3_nt[];
VTBL_ENTRY *P__ZTI10S4871C3_nt = _ZTI10S4871C3_nt; 
extern  VTBL_ENTRY _ZTV10S4871C3_nt[];
Class_Descriptor cd_S4871C3_nt = {  "S4871C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4871C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI10S4871C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4871C3_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  S4871C2_nt  : S4871C3_nt {
  void *s4871c2f0;
  int s4871c2f1[2];
  virtual void  v6(); // _ZN10S4871C2_nt2v6Ev
  ~S4871C2_nt(); // tgen
  S4871C2_nt(); // tgen
};
//SIG(-1 S4871C2_nt) C1{ BC2{ vd v2 v3 v4 Fi Fp Fi FC3{ Fp[2]} Fp Fi} v1 Fp Fi[2]}


void  S4871C2_nt ::v6(){vfunc_called(this, "_ZN10S4871C2_nt2v6Ev");}
S4871C2_nt ::~S4871C2_nt(){ note_dtor("S4871C2_nt", this);} // tgen
S4871C2_nt ::S4871C2_nt(){ note_ctor("S4871C2_nt", this);} // tgen

//skip512 S4871C2_nt

#else // __cplusplus

extern void _ZN10S4871C2_ntC1Ev();
extern void _ZN10S4871C2_ntD1Ev();
Name_Map name_map_S4871C2_nt[] = {
  NSPAIR(_ZN10S4871C2_ntC1Ev),
  NSPAIR(_ZN10S4871C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4871C3_nt;
extern VTBL_ENTRY _ZTI10S4871C3_nt[];
extern  VTBL_ENTRY _ZTV10S4871C3_nt[];
static Base_Class bases_S4871C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4871C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4871C2_nt[];
extern void _ZN10S4871C2_ntD1Ev();
extern void _ZN10S4871C2_ntD0Ev();
extern void _ZN10S4871C3_nt2v3Ev();
extern void _ZN10S4871C3_nt2v4Ev();
extern void _ZN10S4871C3_nt2v5Ev();
extern void _ZN10S4871C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S4871C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4871C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4871C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4871C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4871C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4871C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4871C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4871C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S4871C2_nt[];
VTBL_ENTRY *P__ZTI10S4871C2_nt = _ZTI10S4871C2_nt; 
extern  VTBL_ENTRY _ZTV10S4871C2_nt[];
Class_Descriptor cd_S4871C2_nt = {  "S4871C2_nt", // class name
  bases_S4871C2_nt, 1,
  &(vtc_S4871C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI10S4871C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4871C2_nt),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  S4871C1  : S4871C2_nt {
  void *s4871c1f0;
  int s4871c1f1[3];
  ::S770C15_nt s4871c1f2;
  virtual void  v1(); // _ZN7S4871C12v1Ev
  virtual void  v2(); // _ZN7S4871C12v2Ev
  ~S4871C1(); // tgen
  S4871C1(); // tgen
};
//SIG(1 S4871C1) C1{ BC2{ BC3{ vd v3 v4 v5 Fi Fp Fi FC4{ Fp[2]} Fp Fi} v6 Fp Fi[2]} v1 v2 Fp Fi[3] FC5{ Fc[128]}}


void  S4871C1 ::v1(){vfunc_called(this, "_ZN7S4871C12v1Ev");}
void  S4871C1 ::v2(){vfunc_called(this, "_ZN7S4871C12v2Ev");}
S4871C1 ::~S4871C1(){ note_dtor("S4871C1", this);} // tgen
S4871C1 ::S4871C1(){ note_ctor("S4871C1", this);} // tgen

static void Test_S4871C1()
{
  extern Class_Descriptor cd_S4871C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,48)];
    init_test(&cd_S4871C1, buf);
    S4871C1 *dp, &lv = *(dp=new (buf) S4871C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,188), "sizeof(S4871C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4871C1)");
    check_base_class_offset(lv, (S4871C3_nt*)(S4871C2_nt*), 0, "S4871C1");
    check_base_class_offset(lv, (S4871C2_nt*), 0, "S4871C1");
    check_field_offset(lv, s4871c1f0, ABISELECT(80,44), "S4871C1.s4871c1f0");
    check_field_offset(lv, s4871c1f1, ABISELECT(88,48), "S4871C1.s4871c1f1");
    check_field_offset(lv, s4871c1f2, ABISELECT(100,60), "S4871C1.s4871c1f2");
    test_class_info(&lv, &cd_S4871C1);
    dp->~S4871C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4871C1(Test_S4871C1, "S4871C1", ABISELECT(232,188));

#else // __cplusplus

extern void _ZN7S4871C1C1Ev();
extern void _ZN7S4871C1D1Ev();
Name_Map name_map_S4871C1[] = {
  NSPAIR(_ZN7S4871C1C1Ev),
  NSPAIR(_ZN7S4871C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4871C3_nt;
extern VTBL_ENTRY _ZTI10S4871C3_nt[];
extern  VTBL_ENTRY _ZTV10S4871C3_nt[];
extern Class_Descriptor cd_S4871C2_nt;
extern VTBL_ENTRY _ZTI10S4871C2_nt[];
extern  VTBL_ENTRY _ZTV10S4871C2_nt[];
static Base_Class bases_S4871C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4871C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4871C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4871C1[];
extern void _ZN7S4871C1D1Ev();
extern void _ZN7S4871C1D0Ev();
extern void _ZN10S4871C3_nt2v3Ev();
extern void _ZN10S4871C3_nt2v4Ev();
extern void _ZN10S4871C3_nt2v5Ev();
extern void _ZN10S4871C2_nt2v6Ev();
extern void _ZN7S4871C12v1Ev();
extern void _ZN7S4871C12v2Ev();
static  VTBL_ENTRY vtc_S4871C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4871C1[0]),
  (VTBL_ENTRY)&_ZN7S4871C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4871C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4871C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4871C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4871C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4871C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S4871C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4871C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4871C1[];
extern  VTBL_ENTRY _ZTV7S4871C1[];
Class_Descriptor cd_S4871C1 = {  "S4871C1", // class name
  bases_S4871C1, 2,
  &(vtc_S4871C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,188), // object size
  NSPAIRA(_ZTI7S4871C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4871C1),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  S18189C5  {
  ::S2215C20_nt s18189c5f0;
  ::S2215C20_nt s18189c5f1;
  ::S3047C29_nt s18189c5f2;
  int s18189c5f3[2];
  void  mf18189c5(); // _ZN8S18189C59mf18189c5Ev
};
//SIG(-1 S18189C5) C1{ m FC2{ m Fp Fi FC3{ m}} FC2 FC4{ m Fs[6] Fi[2] Fc Fs} Fi[2]}


void  S18189C5 ::mf18189c5(){}

static void Test_S18189C5()
{
  {
    init_simple_test("S18189C5");
    S18189C5 lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S18189C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18189C5)");
    check_field_offset(lv, s18189c5f0, 0, "S18189C5.s18189c5f0");
    check_field_offset(lv, s18189c5f1, ABISELECT(16,12), "S18189C5.s18189c5f1");
    check_field_offset(lv, s18189c5f2, ABISELECT(32,24), "S18189C5.s18189c5f2");
    check_field_offset(lv, s18189c5f3, ABISELECT(56,48), "S18189C5.s18189c5f3");
  }
}
static Arrange_To_Call_Me vS18189C5(Test_S18189C5, "S18189C5", ABISELECT(64,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18189C2  {
  ::S2215C20_nt s18189c2f0;
  ::S18189C5 s18189c2f1;
  void  mf18189c2(); // _ZN8S18189C29mf18189c2Ev
};
//SIG(-1 S18189C2) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m FC2 FC2 FC5{ m Fs[6] Fi[2] Fc Fs} Fi[2]}}


void  S18189C2 ::mf18189c2(){}

static void Test_S18189C2()
{
  {
    init_simple_test("S18189C2");
    S18189C2 lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S18189C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18189C2)");
    check_field_offset(lv, s18189c2f0, 0, "S18189C2.s18189c2f0");
    check_field_offset(lv, s18189c2f1, ABISELECT(16,12), "S18189C2.s18189c2f1");
  }
}
static Arrange_To_Call_Me vS18189C2(Test_S18189C2, "S18189C2", ABISELECT(80,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18189C1  {
  void *s18189c1f0[3];
  ::S18189C2 s18189c1f1;
  char s18189c1f2[2];
  void  mf18189c1(); // _ZN8S18189C19mf18189c1Ev
};
//SIG(1 S18189C1) C1{ m Fp[3] FC2{ m FC3{ m Fp Fi FC4{ m}} FC5{ m FC3 FC3 FC6{ m Fs[6] Fi[2] Fc Fs} Fi[2]}} Fc[2]}


void  S18189C1 ::mf18189c1(){}

static void Test_S18189C1()
{
  {
    init_simple_test("S18189C1");
    S18189C1 lv;
    check2(sizeof(lv), ABISELECT(112,84), "sizeof(S18189C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18189C1)");
    check_field_offset(lv, s18189c1f0, 0, "S18189C1.s18189c1f0");
    check_field_offset(lv, s18189c1f1, ABISELECT(24,12), "S18189C1.s18189c1f1");
    check_field_offset(lv, s18189c1f2, ABISELECT(104,80), "S18189C1.s18189c1f2");
  }
}
static Arrange_To_Call_Me vS18189C1(Test_S18189C1, "S18189C1", ABISELECT(112,84));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4865C3  {
  int s4865c3f0;
  void *s4865c3f1;
  int s4865c3f2;
  ::S4871C4_nt s4865c3f3;
  void *s4865c3f4;
  int s4865c3f5;
  virtual  ~S4865C3(); // _ZN7S4865C3D1Ev
  virtual void  v3(); // _ZN7S4865C32v3Ev
  virtual void  v4(); // _ZN7S4865C32v4Ev
  virtual void  v5(); // _ZN7S4865C32v5Ev
  S4865C3(); // tgen
};
//SIG(-1 S4865C3) C1{ vd v1 v2 v3 Fi Fp Fi FC2{ Fp[2]} Fp Fi}


 S4865C3 ::~S4865C3(){ note_dtor("S4865C3", this);}
void  S4865C3 ::v3(){vfunc_called(this, "_ZN7S4865C32v3Ev");}
void  S4865C3 ::v4(){vfunc_called(this, "_ZN7S4865C32v4Ev");}
void  S4865C3 ::v5(){vfunc_called(this, "_ZN7S4865C32v5Ev");}
S4865C3 ::S4865C3(){ note_ctor("S4865C3", this);} // tgen

static void Test_S4865C3()
{
  extern Class_Descriptor cd_S4865C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S4865C3, buf);
    S4865C3 *dp, &lv = *(dp=new (buf) S4865C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S4865C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4865C3)");
    check_field_offset(lv, s4865c3f0, ABISELECT(8,4), "S4865C3.s4865c3f0");
    check_field_offset(lv, s4865c3f1, ABISELECT(16,8), "S4865C3.s4865c3f1");
    check_field_offset(lv, s4865c3f2, ABISELECT(24,12), "S4865C3.s4865c3f2");
    check_field_offset(lv, s4865c3f3, ABISELECT(32,16), "S4865C3.s4865c3f3");
    check_field_offset(lv, s4865c3f4, ABISELECT(48,24), "S4865C3.s4865c3f4");
    check_field_offset(lv, s4865c3f5, ABISELECT(56,28), "S4865C3.s4865c3f5");
    test_class_info(&lv, &cd_S4865C3);
    dp->~S4865C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4865C3(Test_S4865C3, "S4865C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S4865C3C1Ev();
extern void _ZN7S4865C3D1Ev();
Name_Map name_map_S4865C3[] = {
  NSPAIR(_ZN7S4865C3C1Ev),
  NSPAIR(_ZN7S4865C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4865C3[];
extern void _ZN7S4865C3D1Ev();
extern void _ZN7S4865C3D0Ev();
extern void _ZN7S4865C32v3Ev();
extern void _ZN7S4865C32v4Ev();
extern void _ZN7S4865C32v5Ev();
static  VTBL_ENTRY vtc_S4865C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4865C3[0]),
  (VTBL_ENTRY)&_ZN7S4865C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4865C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4865C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4865C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4865C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4865C3[];
extern  VTBL_ENTRY _ZTV7S4865C3[];
Class_Descriptor cd_S4865C3 = {  "S4865C3", // class name
  0,0,//no base classes
  &(vtc_S4865C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S4865C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4865C3),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  S4865C2  : S4865C3 {
  void *s4865c2f0;
  int s4865c2f1[2];
  virtual void  v6(); // _ZN7S4865C22v6Ev
  ~S4865C2(); // tgen
  S4865C2(); // tgen
};
//SIG(-1 S4865C2) C1{ BC2{ vd v2 v3 v4 Fi Fp Fi FC3{ Fp[2]} Fp Fi} v1 Fp Fi[2]}


void  S4865C2 ::v6(){vfunc_called(this, "_ZN7S4865C22v6Ev");}
S4865C2 ::~S4865C2(){ note_dtor("S4865C2", this);} // tgen
S4865C2 ::S4865C2(){ note_ctor("S4865C2", this);} // tgen

static void Test_S4865C2()
{
  extern Class_Descriptor cd_S4865C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S4865C2, buf);
    S4865C2 *dp, &lv = *(dp=new (buf) S4865C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S4865C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4865C2)");
    check_base_class_offset(lv, (S4865C3*), 0, "S4865C2");
    check_field_offset(lv, s4865c2f0, ABISELECT(64,32), "S4865C2.s4865c2f0");
    check_field_offset(lv, s4865c2f1, ABISELECT(72,36), "S4865C2.s4865c2f1");
    test_class_info(&lv, &cd_S4865C2);
    dp->~S4865C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4865C2(Test_S4865C2, "S4865C2", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S4865C2C1Ev();
extern void _ZN7S4865C2D1Ev();
Name_Map name_map_S4865C2[] = {
  NSPAIR(_ZN7S4865C2C1Ev),
  NSPAIR(_ZN7S4865C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4865C3;
extern VTBL_ENTRY _ZTI7S4865C3[];
extern  VTBL_ENTRY _ZTV7S4865C3[];
static Base_Class bases_S4865C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4865C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4865C2[];
extern void _ZN7S4865C2D1Ev();
extern void _ZN7S4865C2D0Ev();
extern void _ZN7S4865C32v3Ev();
extern void _ZN7S4865C32v4Ev();
extern void _ZN7S4865C32v5Ev();
extern void _ZN7S4865C22v6Ev();
static  VTBL_ENTRY vtc_S4865C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4865C2[0]),
  (VTBL_ENTRY)&_ZN7S4865C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4865C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4865C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4865C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4865C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4865C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4865C2[];
extern  VTBL_ENTRY _ZTV7S4865C2[];
Class_Descriptor cd_S4865C2 = {  "S4865C2", // class name
  bases_S4865C2, 1,
  &(vtc_S4865C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S4865C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4865C2),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  S4865C1  : S4865C2 {
  int s4865c1f0[4];
  ::S770C15_nt s4865c1f1;
  virtual void  v1(); // _ZN7S4865C12v1Ev
  virtual void  v2(); // _ZN7S4865C12v2Ev
  ~S4865C1(); // tgen
  S4865C1(); // tgen
};
//SIG(1 S4865C1) C1{ BC2{ BC3{ vd v3 v4 v5 Fi Fp Fi FC4{ Fp[2]} Fp Fi} v6 Fp Fi[2]} v1 v2 Fi[4] FC5{ Fc[128]}}


void  S4865C1 ::v1(){vfunc_called(this, "_ZN7S4865C12v1Ev");}
void  S4865C1 ::v2(){vfunc_called(this, "_ZN7S4865C12v2Ev");}
S4865C1 ::~S4865C1(){ note_dtor("S4865C1", this);} // tgen
S4865C1 ::S4865C1(){ note_ctor("S4865C1", this);} // tgen

static void Test_S4865C1()
{
  extern Class_Descriptor cd_S4865C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,48)];
    init_test(&cd_S4865C1, buf);
    S4865C1 *dp, &lv = *(dp=new (buf) S4865C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,188), "sizeof(S4865C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4865C1)");
    check_base_class_offset(lv, (S4865C3*)(S4865C2*), 0, "S4865C1");
    check_base_class_offset(lv, (S4865C2*), 0, "S4865C1");
    check_field_offset(lv, s4865c1f0, ABISELECT(80,44), "S4865C1.s4865c1f0");
    check_field_offset(lv, s4865c1f1, ABISELECT(96,60), "S4865C1.s4865c1f1");
    test_class_info(&lv, &cd_S4865C1);
    dp->~S4865C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4865C1(Test_S4865C1, "S4865C1", ABISELECT(224,188));

#else // __cplusplus

extern void _ZN7S4865C1C1Ev();
extern void _ZN7S4865C1D1Ev();
Name_Map name_map_S4865C1[] = {
  NSPAIR(_ZN7S4865C1C1Ev),
  NSPAIR(_ZN7S4865C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4865C3;
extern VTBL_ENTRY _ZTI7S4865C3[];
extern  VTBL_ENTRY _ZTV7S4865C3[];
extern Class_Descriptor cd_S4865C2;
extern VTBL_ENTRY _ZTI7S4865C2[];
extern  VTBL_ENTRY _ZTV7S4865C2[];
static Base_Class bases_S4865C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4865C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4865C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4865C1[];
extern void _ZN7S4865C1D1Ev();
extern void _ZN7S4865C1D0Ev();
extern void _ZN7S4865C32v3Ev();
extern void _ZN7S4865C32v4Ev();
extern void _ZN7S4865C32v5Ev();
extern void _ZN7S4865C22v6Ev();
extern void _ZN7S4865C12v1Ev();
extern void _ZN7S4865C12v2Ev();
static  VTBL_ENTRY vtc_S4865C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4865C1[0]),
  (VTBL_ENTRY)&_ZN7S4865C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4865C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4865C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4865C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4865C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4865C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4865C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4865C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4865C1[];
extern  VTBL_ENTRY _ZTV7S4865C1[];
Class_Descriptor cd_S4865C1 = {  "S4865C1", // class name
  bases_S4865C1, 2,
  &(vtc_S4865C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,188), // object size
  NSPAIRA(_ZTI7S4865C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4865C1),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  S15266C4_nt  {
  char s15266c4f0;
  char s15266c4f1[15];
  void  mf15266c4(); // _ZN11S15266C4_nt9mf15266c4Ev
};
//SIG(-1 S15266C4_nt) C1{ m Fc[16]}


void  S15266C4_nt ::mf15266c4(){}

//skip512 S15266C4_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S15266C3_nt  : S15266C4_nt {
};
//SIG(-1 S15266C3_nt) C1{ BC2{ m Fc[16]}}



//skip512 S15266C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S15266C4_nt;
static Base_Class bases_S15266C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15266C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S15266C2  {
  ::S15266C3_nt s15266c2f0;
  ::S15266C3_nt s15266c2f1;
  ::S15266C3_nt s15266c2f2;
  ::S15266C3_nt s15266c2f3;
  int s15266c2f4[7];
  char s15266c2f5[4];
  void  mf15266c2(); // _ZN8S15266C29mf15266c2Ev
};
//SIG(-1 S15266C2) C1{ m FC2{ BC3{ m Fc[16]}} FC2 FC2 FC2 Fi[7] Fc[4]}


void  S15266C2 ::mf15266c2(){}

static void Test_S15266C2()
{
  {
    init_simple_test("S15266C2");
    S15266C2 lv;
    check2(sizeof(lv), 96, "sizeof(S15266C2)");
    check2(__alignof__(lv), 4, "__alignof__(S15266C2)");
    check_field_offset(lv, s15266c2f0, 0, "S15266C2.s15266c2f0");
    check_field_offset(lv, s15266c2f1, 16, "S15266C2.s15266c2f1");
    check_field_offset(lv, s15266c2f2, 32, "S15266C2.s15266c2f2");
    check_field_offset(lv, s15266c2f3, 48, "S15266C2.s15266c2f3");
    check_field_offset(lv, s15266c2f4, 64, "S15266C2.s15266c2f4");
    check_field_offset(lv, s15266c2f5, 92, "S15266C2.s15266c2f5");
  }
}
static Arrange_To_Call_Me vS15266C2(Test_S15266C2, "S15266C2", 96);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15266C1  {
  char s15266c1f0[64];
  void *s15266c1f1;
  char s15266c1f2;
  void *s15266c1f3;
  int s15266c1f4[2];
  ::S15266C2 s15266c1f5;
  void  mf15266c1(); // _ZN8S15266C19mf15266c1Ev
};
//SIG(1 S15266C1) C1{ m Fc[64] Fp Fc Fp Fi[2] FC2{ m FC3{ BC4{ m Fc[16]}} FC3 FC3 FC3 Fi[7] Fc[4]}}


void  S15266C1 ::mf15266c1(){}

static void Test_S15266C1()
{
  {
    init_simple_test("S15266C1");
    S15266C1 lv;
    check2(sizeof(lv), ABISELECT(192,180), "sizeof(S15266C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15266C1)");
    check_field_offset(lv, s15266c1f0, 0, "S15266C1.s15266c1f0");
    check_field_offset(lv, s15266c1f1, 64, "S15266C1.s15266c1f1");
    check_field_offset(lv, s15266c1f2, ABISELECT(72,68), "S15266C1.s15266c1f2");
    check_field_offset(lv, s15266c1f3, ABISELECT(80,72), "S15266C1.s15266c1f3");
    check_field_offset(lv, s15266c1f4, ABISELECT(88,76), "S15266C1.s15266c1f4");
    check_field_offset(lv, s15266c1f5, ABISELECT(96,84), "S15266C1.s15266c1f5");
  }
}
static Arrange_To_Call_Me vS15266C1(Test_S15266C1, "S15266C1", ABISELECT(192,180));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4636C3  {
  virtual  ~S4636C3(); // _ZN7S4636C3D1Ev
  virtual void  v2(); // _ZN7S4636C32v2Ev
  S4636C3(); // tgen
};
//SIG(-1 S4636C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4636C3C1Ev();
extern void _ZN7S4636C3D1Ev();
Name_Map name_map_S4636C3[] = {
  NSPAIR(_ZN7S4636C3C1Ev),
  NSPAIR(_ZN7S4636C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4636C3[];
extern void _ZN7S4636C3D1Ev();
extern void _ZN7S4636C3D0Ev();
extern void _ZN7S4636C32v2Ev();
static  VTBL_ENTRY vtc_S4636C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4636C3[0]),
  (VTBL_ENTRY)&_ZN7S4636C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4636C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4636C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4636C3[];
extern  VTBL_ENTRY _ZTV7S4636C3[];
Class_Descriptor cd_S4636C3 = {  "S4636C3", // class name
  0,0,//no base classes
  &(vtc_S4636C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4636C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4636C3),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  S4636C2  : S4636C3 {
  virtual  ~S4636C2(); // _ZN7S4636C2D1Ev
  S4636C2(); // tgen
};
//SIG(-1 S4636C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4636C2()
{
  extern Class_Descriptor cd_S4636C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4636C2, buf);
    S4636C2 *dp, &lv = *(dp=new (buf) S4636C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4636C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4636C2)");
    check_base_class_offset(lv, (S4636C3*), 0, "S4636C2");
    test_class_info(&lv, &cd_S4636C2);
    dp->~S4636C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4636C2(Test_S4636C2, "S4636C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4636C2C1Ev();
extern void _ZN7S4636C2D1Ev();
Name_Map name_map_S4636C2[] = {
  NSPAIR(_ZN7S4636C2C1Ev),
  NSPAIR(_ZN7S4636C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4636C3;
extern VTBL_ENTRY _ZTI7S4636C3[];
extern  VTBL_ENTRY _ZTV7S4636C3[];
static Base_Class bases_S4636C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4636C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4636C2[];
extern void _ZN7S4636C2D1Ev();
extern void _ZN7S4636C2D0Ev();
extern void _ZN7S4636C32v2Ev();
static  VTBL_ENTRY vtc_S4636C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4636C2[0]),
  (VTBL_ENTRY)&_ZN7S4636C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4636C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4636C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4636C2[];
extern  VTBL_ENTRY _ZTV7S4636C2[];
Class_Descriptor cd_S4636C2 = {  "S4636C2", // class name
  bases_S4636C2, 1,
  &(vtc_S4636C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4636C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4636C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4636C1  : S4636C2 {
  void *s4636c1f0[2];
  ::S3047C23_nt s4636c1f1;
  virtual  ~S4636C1(); // _ZN7S4636C1D1Ev
  virtual void  v1(); // _ZN7S4636C12v1Ev
  S4636C1(); // tgen
};
//SIG(1 S4636C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp[2] FC4{ BC5{ m Fp Fi[2] FC6{ m}} BC7{ vd v5 v6} vd v3 v4}}


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

static void Test_S4636C1()
{
  extern Class_Descriptor cd_S4636C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S4636C1, buf);
    S4636C1 *dp, &lv = *(dp=new (buf) S4636C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S4636C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4636C1)");
    check_base_class_offset(lv, (S4636C3*)(S4636C2*), 0, "S4636C1");
    check_base_class_offset(lv, (S4636C2*), 0, "S4636C1");
    check_field_offset(lv, s4636c1f0, ABISELECT(8,4), "S4636C1.s4636c1f0");
    check_field_offset(lv, s4636c1f1, ABISELECT(24,12), "S4636C1.s4636c1f1");
    test_class_info(&lv, &cd_S4636C1);
    dp->~S4636C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4636C1(Test_S4636C1, "S4636C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S4636C1C1Ev();
extern void _ZN7S4636C1D1Ev();
Name_Map name_map_S4636C1[] = {
  NSPAIR(_ZN7S4636C1C1Ev),
  NSPAIR(_ZN7S4636C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4636C3;
extern VTBL_ENTRY _ZTI7S4636C3[];
extern  VTBL_ENTRY _ZTV7S4636C3[];
extern Class_Descriptor cd_S4636C2;
extern VTBL_ENTRY _ZTI7S4636C2[];
extern  VTBL_ENTRY _ZTV7S4636C2[];
static Base_Class bases_S4636C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4636C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4636C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4636C1[];
extern void _ZN7S4636C1D1Ev();
extern void _ZN7S4636C1D0Ev();
extern void _ZN7S4636C32v2Ev();
extern void _ZN7S4636C12v1Ev();
static  VTBL_ENTRY vtc_S4636C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4636C1[0]),
  (VTBL_ENTRY)&_ZN7S4636C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4636C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4636C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4636C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4636C1[];
extern  VTBL_ENTRY _ZTV7S4636C1[];
Class_Descriptor cd_S4636C1 = {  "S4636C1", // class name
  bases_S4636C1, 2,
  &(vtc_S4636C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S4636C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4636C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22072C1  {
  void *s22072c1f0[3];
  ::S3047C22_nt s22072c1f1;
  virtual  ~S22072C1(); // _ZN8S22072C1D1Ev
  virtual void  v1(); // _ZN8S22072C12v1Ev
  virtual void  v2(); // _ZN8S22072C12v2Ev
  virtual void  v3(); // _ZN8S22072C12v3Ev
  virtual void  v4(); // _ZN8S22072C12v4Ev
  virtual void  v5(); // _ZN8S22072C12v5Ev
  virtual void  v6(); // _ZN8S22072C12v6Ev
  virtual void  v7(); // _ZN8S22072C12v7Ev
  virtual void  v8(); // _ZN8S22072C12v8Ev
  virtual void  v9(); // _ZN8S22072C12v9Ev
  virtual void  v10(); // _ZN8S22072C13v10Ev
  virtual void  v11(); // _ZN8S22072C13v11Ev
  S22072C1(); // tgen
};
//SIG(1 S22072C1) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC2{ BC3{ vd v14 v15} vd v12 v13 FL}}


 S22072C1 ::~S22072C1(){ note_dtor("S22072C1", this);}
void  S22072C1 ::v1(){vfunc_called(this, "_ZN8S22072C12v1Ev");}
void  S22072C1 ::v2(){vfunc_called(this, "_ZN8S22072C12v2Ev");}
void  S22072C1 ::v3(){vfunc_called(this, "_ZN8S22072C12v3Ev");}
void  S22072C1 ::v4(){vfunc_called(this, "_ZN8S22072C12v4Ev");}
void  S22072C1 ::v5(){vfunc_called(this, "_ZN8S22072C12v5Ev");}
void  S22072C1 ::v6(){vfunc_called(this, "_ZN8S22072C12v6Ev");}
void  S22072C1 ::v7(){vfunc_called(this, "_ZN8S22072C12v7Ev");}
void  S22072C1 ::v8(){vfunc_called(this, "_ZN8S22072C12v8Ev");}
void  S22072C1 ::v9(){vfunc_called(this, "_ZN8S22072C12v9Ev");}
void  S22072C1 ::v10(){vfunc_called(this, "_ZN8S22072C13v10Ev");}
void  S22072C1 ::v11(){vfunc_called(this, "_ZN8S22072C13v11Ev");}
S22072C1 ::S22072C1(){ note_ctor("S22072C1", this);} // tgen

static void Test_S22072C1()
{
  extern Class_Descriptor cd_S22072C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S22072C1, buf);
    S22072C1 *dp, &lv = *(dp=new (buf) S22072C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S22072C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22072C1)");
    check_field_offset(lv, s22072c1f0, ABISELECT(8,4), "S22072C1.s22072c1f0");
    check_field_offset(lv, s22072c1f1, ABISELECT(32,16), "S22072C1.s22072c1f1");
    test_class_info(&lv, &cd_S22072C1);
    dp->~S22072C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22072C1(Test_S22072C1, "S22072C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S22072C1C1Ev();
extern void _ZN8S22072C1D1Ev();
Name_Map name_map_S22072C1[] = {
  NSPAIR(_ZN8S22072C1C1Ev),
  NSPAIR(_ZN8S22072C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S22072C1[];
extern void _ZN8S22072C1D1Ev();
extern void _ZN8S22072C1D0Ev();
extern void _ZN8S22072C12v1Ev();
extern void _ZN8S22072C12v2Ev();
extern void _ZN8S22072C12v3Ev();
extern void _ZN8S22072C12v4Ev();
extern void _ZN8S22072C12v5Ev();
extern void _ZN8S22072C12v6Ev();
extern void _ZN8S22072C12v7Ev();
extern void _ZN8S22072C12v8Ev();
extern void _ZN8S22072C12v9Ev();
extern void _ZN8S22072C13v10Ev();
extern void _ZN8S22072C13v11Ev();
static  VTBL_ENTRY vtc_S22072C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S22072C1[0]),
  (VTBL_ENTRY)&_ZN8S22072C1D1Ev,
  (VTBL_ENTRY)&_ZN8S22072C1D0Ev,
  (VTBL_ENTRY)&_ZN8S22072C12v1Ev,
  (VTBL_ENTRY)&_ZN8S22072C12v2Ev,
  (VTBL_ENTRY)&_ZN8S22072C12v3Ev,
  (VTBL_ENTRY)&_ZN8S22072C12v4Ev,
  (VTBL_ENTRY)&_ZN8S22072C12v5Ev,
  (VTBL_ENTRY)&_ZN8S22072C12v6Ev,
  (VTBL_ENTRY)&_ZN8S22072C12v7Ev,
  (VTBL_ENTRY)&_ZN8S22072C12v8Ev,
  (VTBL_ENTRY)&_ZN8S22072C12v9Ev,
  (VTBL_ENTRY)&_ZN8S22072C13v10Ev,
  (VTBL_ENTRY)&_ZN8S22072C13v11Ev,
};
extern VTBL_ENTRY _ZTI8S22072C1[];
extern  VTBL_ENTRY _ZTV8S22072C1[];
Class_Descriptor cd_S22072C1 = {  "S22072C1", // class name
  0,0,//no base classes
  &(vtc_S22072C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S22072C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S22072C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20205C2_nt  {
  int s20205c2f0;
  virtual void  v4(); // _ZN11S20205C2_nt2v4Ev
  virtual void  v5(); // _ZN11S20205C2_nt2v5Ev
  virtual void  v6(); // _ZN11S20205C2_nt2v6Ev
  virtual void  v7(); // _ZN11S20205C2_nt2v7Ev
  virtual void  v8(); // _ZN11S20205C2_nt2v8Ev
  virtual void  v9(); // _ZN11S20205C2_nt2v9Ev
  virtual void  v10(); // _ZN11S20205C2_nt3v10Ev
  virtual void  v11(); // _ZN11S20205C2_nt3v11Ev
  virtual void  v12(); // _ZN11S20205C2_nt3v12Ev
  ~S20205C2_nt(); // tgen
  S20205C2_nt(); // tgen
};
//SIG(-1 S20205C2_nt) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi}


void  S20205C2_nt ::v4(){vfunc_called(this, "_ZN11S20205C2_nt2v4Ev");}
void  S20205C2_nt ::v5(){vfunc_called(this, "_ZN11S20205C2_nt2v5Ev");}
void  S20205C2_nt ::v6(){vfunc_called(this, "_ZN11S20205C2_nt2v6Ev");}
void  S20205C2_nt ::v7(){vfunc_called(this, "_ZN11S20205C2_nt2v7Ev");}
void  S20205C2_nt ::v8(){vfunc_called(this, "_ZN11S20205C2_nt2v8Ev");}
void  S20205C2_nt ::v9(){vfunc_called(this, "_ZN11S20205C2_nt2v9Ev");}
void  S20205C2_nt ::v10(){vfunc_called(this, "_ZN11S20205C2_nt3v10Ev");}
void  S20205C2_nt ::v11(){vfunc_called(this, "_ZN11S20205C2_nt3v11Ev");}
void  S20205C2_nt ::v12(){vfunc_called(this, "_ZN11S20205C2_nt3v12Ev");}
S20205C2_nt ::~S20205C2_nt(){ note_dtor("S20205C2_nt", this);} // tgen
S20205C2_nt ::S20205C2_nt(){ note_ctor("S20205C2_nt", this);} // tgen

//skip512 S20205C2_nt

#else // __cplusplus

extern void _ZN11S20205C2_ntC1Ev();
extern void _ZN11S20205C2_ntD1Ev();
Name_Map name_map_S20205C2_nt[] = {
  NSPAIR(_ZN11S20205C2_ntC1Ev),
  NSPAIR(_ZN11S20205C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20205C2_nt[];
extern void _ZN11S20205C2_nt2v4Ev();
extern void _ZN11S20205C2_nt2v5Ev();
extern void _ZN11S20205C2_nt2v6Ev();
extern void _ZN11S20205C2_nt2v7Ev();
extern void _ZN11S20205C2_nt2v8Ev();
extern void _ZN11S20205C2_nt2v9Ev();
extern void _ZN11S20205C2_nt3v10Ev();
extern void _ZN11S20205C2_nt3v11Ev();
extern void _ZN11S20205C2_nt3v12Ev();
static  VTBL_ENTRY vtc_S20205C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20205C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S20205C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI11S20205C2_nt[];
VTBL_ENTRY *P__ZTI11S20205C2_nt = _ZTI11S20205C2_nt; 
extern  VTBL_ENTRY _ZTV11S20205C2_nt[];
Class_Descriptor cd_S20205C2_nt = {  "S20205C2_nt", // class name
  0,0,//no base classes
  &(vtc_S20205C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S20205C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20205C2_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  S20205C3_nt  {
  virtual void  v13(); // _ZN11S20205C3_nt3v13Ev
  virtual void  v14(); // _ZN11S20205C3_nt3v14Ev
  virtual void  v15(); // _ZN11S20205C3_nt3v15Ev
  ~S20205C3_nt(); // tgen
  S20205C3_nt(); // tgen
};
//SIG(-1 S20205C3_nt) C1{ v1 v2 v3}


void  S20205C3_nt ::v13(){vfunc_called(this, "_ZN11S20205C3_nt3v13Ev");}
void  S20205C3_nt ::v14(){vfunc_called(this, "_ZN11S20205C3_nt3v14Ev");}
void  S20205C3_nt ::v15(){vfunc_called(this, "_ZN11S20205C3_nt3v15Ev");}
S20205C3_nt ::~S20205C3_nt(){ note_dtor("S20205C3_nt", this);} // tgen
S20205C3_nt ::S20205C3_nt(){ note_ctor("S20205C3_nt", this);} // tgen

//skip512 S20205C3_nt

#else // __cplusplus

extern void _ZN11S20205C3_ntC1Ev();
extern void _ZN11S20205C3_ntD1Ev();
Name_Map name_map_S20205C3_nt[] = {
  NSPAIR(_ZN11S20205C3_ntC1Ev),
  NSPAIR(_ZN11S20205C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20205C3_nt[];
extern void _ZN11S20205C3_nt3v13Ev();
extern void _ZN11S20205C3_nt3v14Ev();
extern void _ZN11S20205C3_nt3v15Ev();
static  VTBL_ENTRY vtc_S20205C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20205C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20205C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S20205C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S20205C3_nt3v15Ev,
};
extern VTBL_ENTRY _ZTI11S20205C3_nt[];
VTBL_ENTRY *P__ZTI11S20205C3_nt = _ZTI11S20205C3_nt; 
extern  VTBL_ENTRY _ZTV11S20205C3_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20205C1  : virtual S20205C2_nt {
  int s20205c1f0:5;
  int s20205c1f1:2;
  ::S20205C3_nt s20205c1f2;
  virtual void  v1(); // _ZN8S20205C12v1Ev
  virtual void  v2(); // _ZN8S20205C12v2Ev
  virtual void  v3(); // _ZN8S20205C12v3Ev
  ~S20205C1(); // tgen
  S20205C1(); // tgen
};
//SIG(1 S20205C1) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10 v11 v12 Fi} v1 v2 v3 Fi:5 Fi:2 FC3{ v13 v14 v15}}


void  S20205C1 ::v1(){vfunc_called(this, "_ZN8S20205C12v1Ev");}
void  S20205C1 ::v2(){vfunc_called(this, "_ZN8S20205C12v2Ev");}
void  S20205C1 ::v3(){vfunc_called(this, "_ZN8S20205C12v3Ev");}
S20205C1 ::~S20205C1(){ note_dtor("S20205C1", this);} // tgen
S20205C1 ::S20205C1(){ note_ctor("S20205C1", this);} // tgen

static void Test_S20205C1()
{
  extern Class_Descriptor cd_S20205C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20205C1, buf);
    S20205C1 *dp, &lv = *(dp=new (buf) S20205C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20205C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20205C1)");
    check_base_class_offset(lv, (S20205C2_nt*), ABISELECT(24,12), "S20205C1");
    set_bf_and_test(lv, s20205c1f0, ABISELECT(8,4), 0, 5, 1, "S20205C1");
    set_bf_and_test(lv, s20205c1f0, ABISELECT(8,4), 0, 5, hide_sll(1LL<<4), "S20205C1");
    set_bf_and_test(lv, s20205c1f1, ABISELECT(8,4), 5, 2, 1, "S20205C1");
    set_bf_and_test(lv, s20205c1f1, ABISELECT(8,4), 5, 2, hide_sll(1LL<<1), "S20205C1");
    check_field_offset(lv, s20205c1f2, ABISELECT(16,8), "S20205C1.s20205c1f2");
    test_class_info(&lv, &cd_S20205C1);
    dp->~S20205C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20205C1(Test_S20205C1, "S20205C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20205C1C1Ev();
extern void _ZN8S20205C1D1Ev();
Name_Map name_map_S20205C1[] = {
  NSPAIR(_ZN8S20205C1C1Ev),
  NSPAIR(_ZN8S20205C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20205C2_nt;
extern VTBL_ENTRY _ZTI11S20205C2_nt[];
extern  VTBL_ENTRY _ZTV11S20205C2_nt[];
static Base_Class bases_S20205C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20205C2_nt,    ABISELECT(24,12), //bcp->offset
    6, //bcp->virtual_function_table_offset
    11, //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 _ZTI8S20205C1[];
extern void _ZN8S20205C12v1Ev();
extern void _ZN8S20205C12v2Ev();
extern void _ZN8S20205C12v3Ev();
extern void _ZN11S20205C2_nt2v4Ev();
extern void _ZN11S20205C2_nt2v5Ev();
extern void _ZN11S20205C2_nt2v6Ev();
extern void _ZN11S20205C2_nt2v7Ev();
extern void _ZN11S20205C2_nt2v8Ev();
extern void _ZN11S20205C2_nt2v9Ev();
extern void _ZN11S20205C2_nt3v10Ev();
extern void _ZN11S20205C2_nt3v11Ev();
extern void _ZN11S20205C2_nt3v12Ev();
static  VTBL_ENTRY vtc_S20205C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20205C1[0]),
  (VTBL_ENTRY)&_ZN8S20205C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20205C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20205C12v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20205C1[0]),
  (VTBL_ENTRY)&_ZN11S20205C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20205C2_nt3v12Ev,
};
extern VTBL_ENTRY _ZTV8S20205C1[];
static  VTT_ENTRY vtt_S20205C1[] = {
  {&(_ZTV8S20205C1[3]),  3,26},
  {&(_ZTV8S20205C1[17]),  17,26},
};
extern VTBL_ENTRY _ZTI8S20205C1[];
extern  VTBL_ENTRY _ZTV8S20205C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20205C1[];
Class_Descriptor cd_S20205C1 = {  "S20205C1", // class name
  bases_S20205C1, 1,
  &(vtc_S20205C1[0]), // expected_vtbl_contents
  &(vtt_S20205C1[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20205C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20205C1),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20205C1),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  S18057C2_nt  {
  int s18057c2f0[3];
  char s18057c2f1;
  int s18057c2f2:4;
  int s18057c2f3:4;
  unsigned char s18057c2f4:1;
  unsigned char s18057c2f5:1;
  unsigned char s18057c2f6:1;
  unsigned char s18057c2f7:1;
  int s18057c2f8:8;
  int s18057c2f9:4;
  void *s18057c2f10;
  int s18057c2f11;
  void  mf18057c2(); // _ZN11S18057C2_nt9mf18057c2Ev
  virtual  ~S18057C2_nt(); // _ZN11S18057C2_ntD1Ev
  S18057C2_nt(); // tgen
};
//SIG(-1 S18057C2_nt) C1{ vd m Fi[3] Fc Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fi:8 Fi:4 Fp Fi}


void  S18057C2_nt ::mf18057c2(){}
 S18057C2_nt ::~S18057C2_nt(){ note_dtor("S18057C2_nt", this);}
S18057C2_nt ::S18057C2_nt(){ note_ctor("S18057C2_nt", this);} // tgen

//skip512 S18057C2_nt

#else // __cplusplus

extern void _ZN11S18057C2_ntC1Ev();
extern void _ZN11S18057C2_ntD1Ev();
Name_Map name_map_S18057C2_nt[] = {
  NSPAIR(_ZN11S18057C2_ntC1Ev),
  NSPAIR(_ZN11S18057C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S18057C2_nt[];
extern void _ZN11S18057C2_ntD1Ev();
extern void _ZN11S18057C2_ntD0Ev();
static  VTBL_ENTRY vtc_S18057C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S18057C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S18057C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S18057C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S18057C2_nt[];
VTBL_ENTRY *P__ZTI11S18057C2_nt = _ZTI11S18057C2_nt; 
extern  VTBL_ENTRY _ZTV11S18057C2_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18057C1  {
  void *s18057c1f0[2];
  ::S18057C2_nt s18057c1f1;
  void  mf18057c1(); // _ZN8S18057C19mf18057c1Ev
};
//SIG(1 S18057C1) C1{ m Fp[2] FC2{ vd m Fi[3] Fc Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fi:8 Fi:4 Fp Fi}}


void  S18057C1 ::mf18057c1(){}

static void Test_S18057C1()
{
  {
    init_simple_test("S18057C1");
    static S18057C1 lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S18057C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18057C1)");
    check_field_offset(lv, s18057c1f0, 0, "S18057C1.s18057c1f0");
    check_field_offset(lv, s18057c1f1, ABISELECT(16,8), "S18057C1.s18057c1f1");
  }
}
static Arrange_To_Call_Me vS18057C1(Test_S18057C1, "S18057C1", ABISELECT(56,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4399C3_nt  {
  ::S2215C20_nt s4399c3f0;
  int s4399c3f1[2];
  char s4399c3f2;
  virtual  ~S4399C3_nt(); // _ZN10S4399C3_ntD1Ev
  virtual void  v2(); // _ZN10S4399C3_nt2v2Ev
  virtual void  v3(); // _ZN10S4399C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4399C3_nt2v4Ev
  S4399C3_nt(); // tgen
};
//SIG(-1 S4399C3_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4399C3_nt ::~S4399C3_nt(){ note_dtor("S4399C3_nt", this);}
void  S4399C3_nt ::v2(){vfunc_called(this, "_ZN10S4399C3_nt2v2Ev");}
void  S4399C3_nt ::v3(){vfunc_called(this, "_ZN10S4399C3_nt2v3Ev");}
void  S4399C3_nt ::v4(){vfunc_called(this, "_ZN10S4399C3_nt2v4Ev");}
S4399C3_nt ::S4399C3_nt(){ note_ctor("S4399C3_nt", this);} // tgen

//skip512 S4399C3_nt

#else // __cplusplus

extern void _ZN10S4399C3_ntC1Ev();
extern void _ZN10S4399C3_ntD1Ev();
Name_Map name_map_S4399C3_nt[] = {
  NSPAIR(_ZN10S4399C3_ntC1Ev),
  NSPAIR(_ZN10S4399C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4399C3_nt[];
extern void _ZN10S4399C3_ntD1Ev();
extern void _ZN10S4399C3_ntD0Ev();
extern void _ZN10S4399C3_nt2v2Ev();
extern void _ZN10S4399C3_nt2v3Ev();
extern void _ZN10S4399C3_nt2v4Ev();
static  VTBL_ENTRY vtc_S4399C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4399C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4399C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4399C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4399C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4399C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4399C3_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S4399C3_nt[];
VTBL_ENTRY *P__ZTI10S4399C3_nt = _ZTI10S4399C3_nt; 
extern  VTBL_ENTRY _ZTV10S4399C3_nt[];
Class_Descriptor cd_S4399C3_nt = {  "S4399C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4399C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S4399C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4399C3_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  S4399C2_nt  : S4399C3_nt {
  void *s4399c2f0;
  virtual void  v5(); // _ZN10S4399C2_nt2v5Ev
  virtual void  v6(); // _ZN10S4399C2_nt2v6Ev
  ~S4399C2_nt(); // tgen
  S4399C2_nt(); // tgen
};
//SIG(-1 S4399C2_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4399C2_nt ::v5(){vfunc_called(this, "_ZN10S4399C2_nt2v5Ev");}
void  S4399C2_nt ::v6(){vfunc_called(this, "_ZN10S4399C2_nt2v6Ev");}
S4399C2_nt ::~S4399C2_nt(){ note_dtor("S4399C2_nt", this);} // tgen
S4399C2_nt ::S4399C2_nt(){ note_ctor("S4399C2_nt", this);} // tgen

//skip512 S4399C2_nt

#else // __cplusplus

extern void _ZN10S4399C2_ntC1Ev();
extern void _ZN10S4399C2_ntD1Ev();
Name_Map name_map_S4399C2_nt[] = {
  NSPAIR(_ZN10S4399C2_ntC1Ev),
  NSPAIR(_ZN10S4399C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4399C3_nt;
extern VTBL_ENTRY _ZTI10S4399C3_nt[];
extern  VTBL_ENTRY _ZTV10S4399C3_nt[];
static Base_Class bases_S4399C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4399C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4399C2_nt[];
extern void _ZN10S4399C2_ntD1Ev();
extern void _ZN10S4399C2_ntD0Ev();
extern void _ZN10S4399C3_nt2v2Ev();
extern void _ZN10S4399C3_nt2v3Ev();
extern void _ZN10S4399C3_nt2v4Ev();
extern void _ZN10S4399C2_nt2v5Ev();
extern void _ZN10S4399C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S4399C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4399C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4399C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4399C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4399C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4399C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4399C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4399C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4399C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S4399C2_nt[];
VTBL_ENTRY *P__ZTI10S4399C2_nt = _ZTI10S4399C2_nt; 
extern  VTBL_ENTRY _ZTV10S4399C2_nt[];
Class_Descriptor cd_S4399C2_nt = {  "S4399C2_nt", // class name
  bases_S4399C2_nt, 1,
  &(vtc_S4399C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S4399C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4399C2_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  S4399C1  : S4399C2_nt {
  int s4399c1f0[2];
  void *s4399c1f1;
  virtual  ~S4399C1(); // _ZN7S4399C1D1Ev
  virtual void  v1(); // _ZN7S4399C12v1Ev
  S4399C1(); // tgen
};
//SIG(1 S4399C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fi[2] Fp}


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

static void Test_S4399C1()
{
  extern Class_Descriptor cd_S4399C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4399C1, buf);
    S4399C1 *dp, &lv = *(dp=new (buf) S4399C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4399C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4399C1)");
    check_base_class_offset(lv, (S4399C3_nt*)(S4399C2_nt*), 0, "S4399C1");
    check_base_class_offset(lv, (S4399C2_nt*), 0, "S4399C1");
    check_field_offset(lv, s4399c1f0, ABISELECT(48,32), "S4399C1.s4399c1f0");
    check_field_offset(lv, s4399c1f1, ABISELECT(56,40), "S4399C1.s4399c1f1");
    test_class_info(&lv, &cd_S4399C1);
    dp->~S4399C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4399C1(Test_S4399C1, "S4399C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4399C1C1Ev();
extern void _ZN7S4399C1D1Ev();
Name_Map name_map_S4399C1[] = {
  NSPAIR(_ZN7S4399C1C1Ev),
  NSPAIR(_ZN7S4399C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4399C3_nt;
extern VTBL_ENTRY _ZTI10S4399C3_nt[];
extern  VTBL_ENTRY _ZTV10S4399C3_nt[];
extern Class_Descriptor cd_S4399C2_nt;
extern VTBL_ENTRY _ZTI10S4399C2_nt[];
extern  VTBL_ENTRY _ZTV10S4399C2_nt[];
static Base_Class bases_S4399C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4399C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4399C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4399C1[];
extern void _ZN7S4399C1D1Ev();
extern void _ZN7S4399C1D0Ev();
extern void _ZN10S4399C3_nt2v2Ev();
extern void _ZN10S4399C3_nt2v3Ev();
extern void _ZN10S4399C3_nt2v4Ev();
extern void _ZN10S4399C2_nt2v5Ev();
extern void _ZN10S4399C2_nt2v6Ev();
extern void _ZN7S4399C12v1Ev();
static  VTBL_ENTRY vtc_S4399C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4399C1[0]),
  (VTBL_ENTRY)&_ZN7S4399C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4399C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4399C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4399C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4399C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4399C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4399C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S4399C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4399C1[];
extern  VTBL_ENTRY _ZTV7S4399C1[];
Class_Descriptor cd_S4399C1 = {  "S4399C1", // class name
  bases_S4399C1, 2,
  &(vtc_S4399C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4399C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4399C1),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  S391C4_nt  : S16567C15_nt {
};
//SIG(-1 S391C4_nt) C1{ BC2{ m Fi}}



//skip512 S391C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S391C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S391C4_nt[];
VTBL_ENTRY *P__ZTI9S391C4_nt = _ZTI9S391C4_nt; 
Class_Descriptor cd_S391C4_nt = {  "S391C4_nt", // class name
  bases_S391C4_nt, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI9S391C4_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  S391C3_nt  : S391C4_nt {
  virtual  ~S391C3_nt(); // _ZN9S391C3_ntD1Ev
  virtual void  v2(); // _ZN9S391C3_nt2v2Ev
  S391C3_nt(); // tgen
};
//SIG(-1 S391C3_nt) C1{ BC2{ BC3{ m Fi}} vd v1}


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

//skip512 S391C3_nt

#else // __cplusplus

extern void _ZN9S391C3_ntC1Ev();
extern void _ZN9S391C3_ntD1Ev();
Name_Map name_map_S391C3_nt[] = {
  NSPAIR(_ZN9S391C3_ntC1Ev),
  NSPAIR(_ZN9S391C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S391C4_nt;
extern VTBL_ENTRY _ZTI9S391C4_nt[];
static Base_Class bases_S391C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S391C4_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 _ZTI9S391C3_nt[];
extern void _ZN9S391C3_ntD1Ev();
extern void _ZN9S391C3_ntD0Ev();
extern void _ZN9S391C3_nt2v2Ev();
static  VTBL_ENTRY vtc_S391C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S391C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S391C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S391C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S391C3_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI9S391C3_nt[];
VTBL_ENTRY *P__ZTI9S391C3_nt = _ZTI9S391C3_nt; 
extern  VTBL_ENTRY _ZTV9S391C3_nt[];
Class_Descriptor cd_S391C3_nt = {  "S391C3_nt", // class name
  bases_S391C3_nt, 2,
  &(vtc_S391C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S391C3_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S391C3_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  S391C8_nt  {
  void *s391c8f0;
  int s391c8f1;
  void  mf391c8(); // _ZN9S391C8_nt7mf391c8Ev
};
//SIG(-1 S391C8_nt) C1{ m Fp Fi}


void  S391C8_nt ::mf391c8(){}

//skip512 S391C8_nt

#else // __cplusplus

Class_Descriptor cd_S391C8_nt = {  "S391C8_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  S391C7_nt  : S391C8_nt {
};
//SIG(-1 S391C7_nt) C1{ BC2{ m Fp Fi}}



//skip512 S391C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S391C8_nt;
static Base_Class bases_S391C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S391C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S391C6_nt  {
  int s391c6f0;
  ::S391C7_nt s391c6f1;
  void  mf391c6(); // _ZN9S391C6_nt7mf391c6Ev
};
//SIG(-1 S391C6_nt) C1{ m Fi FC2{ BC3{ m Fp Fi}}}


void  S391C6_nt ::mf391c6(){}

//skip512 S391C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S391C2  : S391C3_nt {
  ::S391C6_nt s391c2f0;
  virtual  ~S391C2(); // _ZN6S391C2D1Ev
  virtual void  v3(); // _ZN6S391C22v3Ev
  virtual void  v4(); // _ZN6S391C22v4Ev
  S391C2(); // tgen
};
//SIG(-1 S391C2) C1{ BC2{ BC3{ BC4{ m Fi}} vd v3} vd v1 v2 FC5{ m Fi FC6{ BC7{ m Fp Fi}}}}


 S391C2 ::~S391C2(){ note_dtor("S391C2", this);}
void  S391C2 ::v3(){vfunc_called(this, "_ZN6S391C22v3Ev");}
void  S391C2 ::v4(){vfunc_called(this, "_ZN6S391C22v4Ev");}
S391C2 ::S391C2(){ note_ctor("S391C2", this);} // tgen

static void Test_S391C2()
{
  extern Class_Descriptor cd_S391C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S391C2, buf);
    S391C2 *dp, &lv = *(dp=new (buf) S391C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S391C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S391C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S391C4_nt*)(S391C3_nt*), ABISELECT(8,4), "S391C2");
    check_base_class_offset(lv, (S391C4_nt*)(S391C3_nt*), ABISELECT(8,4), "S391C2");
    check_base_class_offset(lv, (S391C3_nt*), 0, "S391C2");
    check_field_offset(lv, s391c2f0, ABISELECT(16,8), "S391C2.s391c2f0");
    test_class_info(&lv, &cd_S391C2);
    dp->~S391C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS391C2(Test_S391C2, "S391C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN6S391C2C1Ev();
extern void _ZN6S391C2D1Ev();
Name_Map name_map_S391C2[] = {
  NSPAIR(_ZN6S391C2C1Ev),
  NSPAIR(_ZN6S391C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S391C4_nt;
extern VTBL_ENTRY _ZTI9S391C4_nt[];
extern Class_Descriptor cd_S391C3_nt;
extern VTBL_ENTRY _ZTI9S391C3_nt[];
extern  VTBL_ENTRY _ZTV9S391C3_nt[];
static Base_Class bases_S391C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S391C4_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S391C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S391C2[];
extern void _ZN6S391C2D1Ev();
extern void _ZN6S391C2D0Ev();
extern void _ZN9S391C3_nt2v2Ev();
extern void _ZN6S391C22v3Ev();
extern void _ZN6S391C22v4Ev();
static  VTBL_ENTRY vtc_S391C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S391C2[0]),
  (VTBL_ENTRY)&_ZN6S391C2D1Ev,
  (VTBL_ENTRY)&_ZN6S391C2D0Ev,
  (VTBL_ENTRY)&_ZN9S391C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN6S391C22v3Ev,
  (VTBL_ENTRY)&_ZN6S391C22v4Ev,
};
extern VTBL_ENTRY _ZTI6S391C2[];
extern  VTBL_ENTRY _ZTV6S391C2[];
Class_Descriptor cd_S391C2 = {  "S391C2", // class name
  bases_S391C2, 3,
  &(vtc_S391C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI6S391C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S391C2),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  S391C1  : S391C2 {
  virtual  ~S391C1(); // _ZN6S391C1D1Ev
  virtual void  v1(); // _ZN6S391C12v1Ev
  S391C1(); // tgen
};
//SIG(1 S391C1) C1{ BC2{ BC3{ BC4{ BC5{ m Fi}} vd v2} vd v3 v4 FC6{ m Fi FC7{ BC8{ m Fp Fi}}}} vd v1}


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

static void Test_S391C1()
{
  extern Class_Descriptor cd_S391C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S391C1, buf);
    S391C1 *dp, &lv = *(dp=new (buf) S391C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S391C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S391C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S391C4_nt*)(S391C3_nt*)(S391C2*), ABISELECT(8,4), "S391C1");
    check_base_class_offset(lv, (S391C4_nt*)(S391C3_nt*)(S391C2*), ABISELECT(8,4), "S391C1");
    check_base_class_offset(lv, (S391C3_nt*)(S391C2*), 0, "S391C1");
    check_base_class_offset(lv, (S391C2*), 0, "S391C1");
    test_class_info(&lv, &cd_S391C1);
    dp->~S391C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS391C1(Test_S391C1, "S391C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN6S391C1C1Ev();
extern void _ZN6S391C1D1Ev();
Name_Map name_map_S391C1[] = {
  NSPAIR(_ZN6S391C1C1Ev),
  NSPAIR(_ZN6S391C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S391C4_nt;
extern VTBL_ENTRY _ZTI9S391C4_nt[];
extern Class_Descriptor cd_S391C3_nt;
extern VTBL_ENTRY _ZTI9S391C3_nt[];
extern  VTBL_ENTRY _ZTV9S391C3_nt[];
extern Class_Descriptor cd_S391C2;
extern VTBL_ENTRY _ZTI6S391C2[];
extern  VTBL_ENTRY _ZTV6S391C2[];
static Base_Class bases_S391C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S391C4_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S391C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S391C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S391C1[];
extern void _ZN6S391C1D1Ev();
extern void _ZN6S391C1D0Ev();
extern void _ZN9S391C3_nt2v2Ev();
extern void _ZN6S391C22v3Ev();
extern void _ZN6S391C22v4Ev();
extern void _ZN6S391C12v1Ev();
static  VTBL_ENTRY vtc_S391C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S391C1[0]),
  (VTBL_ENTRY)&_ZN6S391C1D1Ev,
  (VTBL_ENTRY)&_ZN6S391C1D0Ev,
  (VTBL_ENTRY)&_ZN9S391C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN6S391C22v3Ev,
  (VTBL_ENTRY)&_ZN6S391C22v4Ev,
  (VTBL_ENTRY)&_ZN6S391C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S391C1[];
extern  VTBL_ENTRY _ZTV6S391C1[];
Class_Descriptor cd_S391C1 = {  "S391C1", // class name
  bases_S391C1, 4,
  &(vtc_S391C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI6S391C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S391C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5349C3  {
  virtual  ~S5349C3(); // _ZN7S5349C3D1Ev
  virtual void  v6(); // _ZN7S5349C32v6Ev
  virtual void  v7(); // _ZN7S5349C32v7Ev
  S5349C3(); // tgen
};
//SIG(-1 S5349C3) C1{ vd v1 v2}


 S5349C3 ::~S5349C3(){ note_dtor("S5349C3", this);}
void  S5349C3 ::v6(){vfunc_called(this, "_ZN7S5349C32v6Ev");}
void  S5349C3 ::v7(){vfunc_called(this, "_ZN7S5349C32v7Ev");}
S5349C3 ::S5349C3(){ note_ctor("S5349C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5349C3C1Ev();
extern void _ZN7S5349C3D1Ev();
Name_Map name_map_S5349C3[] = {
  NSPAIR(_ZN7S5349C3C1Ev),
  NSPAIR(_ZN7S5349C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5349C3[];
extern void _ZN7S5349C3D1Ev();
extern void _ZN7S5349C3D0Ev();
extern void _ZN7S5349C32v6Ev();
extern void _ZN7S5349C32v7Ev();
static  VTBL_ENTRY vtc_S5349C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5349C3[0]),
  (VTBL_ENTRY)&_ZN7S5349C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5349C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5349C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5349C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5349C3[];
extern  VTBL_ENTRY _ZTV7S5349C3[];
Class_Descriptor cd_S5349C3 = {  "S5349C3", // class name
  0,0,//no base classes
  &(vtc_S5349C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5349C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5349C3),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  S5349C2  : S5349C3 {
  int s5349c2f0[4];
  virtual  ~S5349C2(); // _ZN7S5349C2D1Ev
  virtual void  v8(); // _ZN7S5349C22v8Ev
  virtual void  v9(); // _ZN7S5349C22v9Ev
  S5349C2(); // tgen
};
//SIG(-1 S5349C2) C1{ BC2{ vd v3 v4} vd v1 v2 Fi[4]}


 S5349C2 ::~S5349C2(){ note_dtor("S5349C2", this);}
void  S5349C2 ::v8(){vfunc_called(this, "_ZN7S5349C22v8Ev");}
void  S5349C2 ::v9(){vfunc_called(this, "_ZN7S5349C22v9Ev");}
S5349C2 ::S5349C2(){ note_ctor("S5349C2", this);} // tgen

static void Test_S5349C2()
{
  extern Class_Descriptor cd_S5349C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S5349C2, buf);
    S5349C2 *dp, &lv = *(dp=new (buf) S5349C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S5349C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5349C2)");
    check_base_class_offset(lv, (S5349C3*), 0, "S5349C2");
    check_field_offset(lv, s5349c2f0, ABISELECT(8,4), "S5349C2.s5349c2f0");
    test_class_info(&lv, &cd_S5349C2);
    dp->~S5349C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5349C2(Test_S5349C2, "S5349C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S5349C2C1Ev();
extern void _ZN7S5349C2D1Ev();
Name_Map name_map_S5349C2[] = {
  NSPAIR(_ZN7S5349C2C1Ev),
  NSPAIR(_ZN7S5349C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5349C3;
extern VTBL_ENTRY _ZTI7S5349C3[];
extern  VTBL_ENTRY _ZTV7S5349C3[];
static Base_Class bases_S5349C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5349C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5349C2[];
extern void _ZN7S5349C2D1Ev();
extern void _ZN7S5349C2D0Ev();
extern void _ZN7S5349C32v6Ev();
extern void _ZN7S5349C32v7Ev();
extern void _ZN7S5349C22v8Ev();
extern void _ZN7S5349C22v9Ev();
static  VTBL_ENTRY vtc_S5349C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5349C2[0]),
  (VTBL_ENTRY)&_ZN7S5349C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5349C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5349C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5349C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5349C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5349C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S5349C2[];
extern  VTBL_ENTRY _ZTV7S5349C2[];
Class_Descriptor cd_S5349C2 = {  "S5349C2", // class name
  bases_S5349C2, 1,
  &(vtc_S5349C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S5349C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5349C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5349C1  : S5349C2 {
  ::S3047C22_nt s5349c1f0;
  virtual void  v1(); // _ZN7S5349C12v1Ev
  virtual void  v2(); // _ZN7S5349C12v2Ev
  virtual void  v3(); // _ZN7S5349C12v3Ev
  virtual void  v4(); // _ZN7S5349C12v4Ev
  virtual void  v5(); // _ZN7S5349C12v5Ev
  ~S5349C1(); // tgen
  S5349C1(); // tgen
};
//SIG(1 S5349C1) C1{ BC2{ BC3{ vd v6 v7} vd v8 v9 Fi[4]} v1 v2 v3 v4 v5 FC4{ BC5{ vd v12 v13} vd v10 v11 FL}}


void  S5349C1 ::v1(){vfunc_called(this, "_ZN7S5349C12v1Ev");}
void  S5349C1 ::v2(){vfunc_called(this, "_ZN7S5349C12v2Ev");}
void  S5349C1 ::v3(){vfunc_called(this, "_ZN7S5349C12v3Ev");}
void  S5349C1 ::v4(){vfunc_called(this, "_ZN7S5349C12v4Ev");}
void  S5349C1 ::v5(){vfunc_called(this, "_ZN7S5349C12v5Ev");}
S5349C1 ::~S5349C1(){ note_dtor("S5349C1", this);} // tgen
S5349C1 ::S5349C1(){ note_ctor("S5349C1", this);} // tgen

static void Test_S5349C1()
{
  extern Class_Descriptor cd_S5349C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S5349C1, buf);
    S5349C1 *dp, &lv = *(dp=new (buf) S5349C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S5349C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5349C1)");
    check_base_class_offset(lv, (S5349C3*)(S5349C2*), 0, "S5349C1");
    check_base_class_offset(lv, (S5349C2*), 0, "S5349C1");
    check_field_offset(lv, s5349c1f0, ABISELECT(24,20), "S5349C1.s5349c1f0");
    test_class_info(&lv, &cd_S5349C1);
    dp->~S5349C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5349C1(Test_S5349C1, "S5349C1", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S5349C1C1Ev();
extern void _ZN7S5349C1D1Ev();
Name_Map name_map_S5349C1[] = {
  NSPAIR(_ZN7S5349C1C1Ev),
  NSPAIR(_ZN7S5349C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5349C3;
extern VTBL_ENTRY _ZTI7S5349C3[];
extern  VTBL_ENTRY _ZTV7S5349C3[];
extern Class_Descriptor cd_S5349C2;
extern VTBL_ENTRY _ZTI7S5349C2[];
extern  VTBL_ENTRY _ZTV7S5349C2[];
static Base_Class bases_S5349C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5349C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5349C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S5349C1[];
extern void _ZN7S5349C1D1Ev();
extern void _ZN7S5349C1D0Ev();
extern void _ZN7S5349C32v6Ev();
extern void _ZN7S5349C32v7Ev();
extern void _ZN7S5349C22v8Ev();
extern void _ZN7S5349C22v9Ev();
extern void _ZN7S5349C12v1Ev();
extern void _ZN7S5349C12v2Ev();
extern void _ZN7S5349C12v3Ev();
extern void _ZN7S5349C12v4Ev();
extern void _ZN7S5349C12v5Ev();
static  VTBL_ENTRY vtc_S5349C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5349C1[0]),
  (VTBL_ENTRY)&_ZN7S5349C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5349C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5349C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5349C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5349C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5349C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5349C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5349C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5349C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5349C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5349C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S5349C1[];
extern  VTBL_ENTRY _ZTV7S5349C1[];
Class_Descriptor cd_S5349C1 = {  "S5349C1", // class name
  bases_S5349C1, 2,
  &(vtc_S5349C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S5349C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5349C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1039C3  : S16567C15_nt {
};
//SIG(-1 S1039C3) C1{ BC2{ m Fi}}



static void Test_S1039C3()
{
  extern Class_Descriptor cd_S1039C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1039C3, buf);
    S1039C3 &lv = *(new (buf) S1039C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1039C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1039C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1039C3");
    test_class_info(&lv, &cd_S1039C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1039C3(Test_S1039C3, "S1039C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1039C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1039C3[];
Class_Descriptor cd_S1039C3 = {  "S1039C3", // class name
  bases_S1039C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1039C3),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  S1039C2  : S1039C3 {
  virtual  ~S1039C2(); // _ZN7S1039C2D1Ev
  virtual void  v2(); // _ZN7S1039C22v2Ev
  S1039C2(); // tgen
};
//SIG(-1 S1039C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1039C2()
{
  extern Class_Descriptor cd_S1039C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1039C2, buf);
    S1039C2 *dp, &lv = *(dp=new (buf) S1039C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1039C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1039C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1039C3*), ABISELECT(8,4), "S1039C2");
    check_base_class_offset(lv, (S1039C3*), ABISELECT(8,4), "S1039C2");
    test_class_info(&lv, &cd_S1039C2);
    dp->~S1039C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1039C2(Test_S1039C2, "S1039C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1039C2C1Ev();
extern void _ZN7S1039C2D1Ev();
Name_Map name_map_S1039C2[] = {
  NSPAIR(_ZN7S1039C2C1Ev),
  NSPAIR(_ZN7S1039C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1039C3;
extern VTBL_ENTRY _ZTI7S1039C3[];
static Base_Class bases_S1039C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1039C3,    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 _ZTI7S1039C2[];
extern void _ZN7S1039C2D1Ev();
extern void _ZN7S1039C2D0Ev();
extern void _ZN7S1039C22v2Ev();
static  VTBL_ENTRY vtc_S1039C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1039C2[0]),
  (VTBL_ENTRY)&_ZN7S1039C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1039C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1039C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1039C2[];
extern  VTBL_ENTRY _ZTV7S1039C2[];
Class_Descriptor cd_S1039C2 = {  "S1039C2", // class name
  bases_S1039C2, 2,
  &(vtc_S1039C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1039C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1039C2),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  S1039C6_nt  {
  ::S770C9_nt s1039c6f0;
  void  mf1039c6(); // _ZN10S1039C6_nt8mf1039c6Ev
};
//SIG(-1 S1039C6_nt) C1{ m FC2{ m Fp}}


void  S1039C6_nt ::mf1039c6(){}

//skip512 S1039C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1039C5  {
  ::S1039C6_nt s1039c5f0;
  ::S1039C6_nt s1039c5f1;
  ::S1039C6_nt s1039c5f2;
  ::S1039C6_nt s1039c5f3;
  ::S1039C6_nt s1039c5f4;
  ::S1039C6_nt s1039c5f5;
  void  mf1039c5(); // _ZN7S1039C58mf1039c5Ev
};
//SIG(-1 S1039C5) C1{ m FC2{ m FC3{ m Fp}} FC2 FC2 FC2 FC2 FC2}


void  S1039C5 ::mf1039c5(){}

static void Test_S1039C5()
{
  {
    init_simple_test("S1039C5");
    S1039C5 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S1039C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1039C5)");
    check_field_offset(lv, s1039c5f0, 0, "S1039C5.s1039c5f0");
    check_field_offset(lv, s1039c5f1, ABISELECT(8,4), "S1039C5.s1039c5f1");
    check_field_offset(lv, s1039c5f2, ABISELECT(16,8), "S1039C5.s1039c5f2");
    check_field_offset(lv, s1039c5f3, ABISELECT(24,12), "S1039C5.s1039c5f3");
    check_field_offset(lv, s1039c5f4, ABISELECT(32,16), "S1039C5.s1039c5f4");
    check_field_offset(lv, s1039c5f5, ABISELECT(40,20), "S1039C5.s1039c5f5");
  }
}
static Arrange_To_Call_Me vS1039C5(Test_S1039C5, "S1039C5", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1039C1  : S1039C2 {
  ::S1039C5 s1039c1f0;
  virtual void  v1(); // _ZN7S1039C12v1Ev
  ~S1039C1(); // tgen
  S1039C1(); // tgen
};
//SIG(1 S1039C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 FC5{ m FC6{ m FC7{ m Fp}} FC6 FC6 FC6 FC6 FC6}}


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

static void Test_S1039C1()
{
  extern Class_Descriptor cd_S1039C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S1039C1, buf);
    S1039C1 *dp, &lv = *(dp=new (buf) S1039C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S1039C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1039C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1039C3*)(S1039C2*), ABISELECT(8,4), "S1039C1");
    check_base_class_offset(lv, (S1039C3*)(S1039C2*), ABISELECT(8,4), "S1039C1");
    check_base_class_offset(lv, (S1039C2*), 0, "S1039C1");
    check_field_offset(lv, s1039c1f0, ABISELECT(16,8), "S1039C1.s1039c1f0");
    test_class_info(&lv, &cd_S1039C1);
    dp->~S1039C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1039C1(Test_S1039C1, "S1039C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S1039C1C1Ev();
extern void _ZN7S1039C1D1Ev();
Name_Map name_map_S1039C1[] = {
  NSPAIR(_ZN7S1039C1C1Ev),
  NSPAIR(_ZN7S1039C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1039C3;
extern VTBL_ENTRY _ZTI7S1039C3[];
extern Class_Descriptor cd_S1039C2;
extern VTBL_ENTRY _ZTI7S1039C2[];
extern  VTBL_ENTRY _ZTV7S1039C2[];
static Base_Class bases_S1039C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1039C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1039C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1039C1[];
extern void _ZN7S1039C1D1Ev();
extern void _ZN7S1039C1D0Ev();
extern void _ZN7S1039C22v2Ev();
extern void _ZN7S1039C12v1Ev();
static  VTBL_ENTRY vtc_S1039C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1039C1[0]),
  (VTBL_ENTRY)&_ZN7S1039C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1039C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1039C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1039C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1039C1[];
extern  VTBL_ENTRY _ZTV7S1039C1[];
Class_Descriptor cd_S1039C1 = {  "S1039C1", // class name
  bases_S1039C1, 3,
  &(vtc_S1039C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S1039C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1039C1),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  S17523C1  {
  void *s17523c1f0;
  ::S770C13 s17523c1f1;
  char s17523c1f2[128];
  int s17523c1f3[2];
  void  mf17523c1(); // _ZN8S17523C19mf17523c1Ev
};
//SIG(1 S17523C1) C1{ m Fp FC2{ FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fc[52]} FC6{ Fc[128]}} Fc[128] Fi[2]}


void  S17523C1 ::mf17523c1(){}

static void Test_S17523C1()
{
  {
    init_simple_test("S17523C1");
    S17523C1 lv;
    check2(sizeof(lv), ABISELECT(360,356), "sizeof(S17523C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17523C1)");
    check_field_offset(lv, s17523c1f0, 0, "S17523C1.s17523c1f0");
    check_field_offset(lv, s17523c1f1, ABISELECT(8,4), "S17523C1.s17523c1f1");
    check_field_offset(lv, s17523c1f2, ABISELECT(224,220), "S17523C1.s17523c1f2");
    check_field_offset(lv, s17523c1f3, ABISELECT(352,348), "S17523C1.s17523c1f3");
  }
}
static Arrange_To_Call_Me vS17523C1(Test_S17523C1, "S17523C1", ABISELECT(360,356));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1038C3  : S16567C15_nt {
};
//SIG(-1 S1038C3) C1{ BC2{ m Fi}}



static void Test_S1038C3()
{
  extern Class_Descriptor cd_S1038C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1038C3, buf);
    S1038C3 &lv = *(new (buf) S1038C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1038C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1038C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1038C3");
    test_class_info(&lv, &cd_S1038C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1038C3(Test_S1038C3, "S1038C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1038C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1038C3[];
Class_Descriptor cd_S1038C3 = {  "S1038C3", // class name
  bases_S1038C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1038C3),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  S1038C2  : S1038C3 {
  virtual  ~S1038C2(); // _ZN7S1038C2D1Ev
  virtual void  v2(); // _ZN7S1038C22v2Ev
  S1038C2(); // tgen
};
//SIG(-1 S1038C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1038C2()
{
  extern Class_Descriptor cd_S1038C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1038C2, buf);
    S1038C2 *dp, &lv = *(dp=new (buf) S1038C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1038C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1038C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1038C3*), ABISELECT(8,4), "S1038C2");
    check_base_class_offset(lv, (S1038C3*), ABISELECT(8,4), "S1038C2");
    test_class_info(&lv, &cd_S1038C2);
    dp->~S1038C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1038C2(Test_S1038C2, "S1038C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1038C2C1Ev();
extern void _ZN7S1038C2D1Ev();
Name_Map name_map_S1038C2[] = {
  NSPAIR(_ZN7S1038C2C1Ev),
  NSPAIR(_ZN7S1038C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1038C3;
extern VTBL_ENTRY _ZTI7S1038C3[];
static Base_Class bases_S1038C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1038C3,    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 _ZTI7S1038C2[];
extern void _ZN7S1038C2D1Ev();
extern void _ZN7S1038C2D0Ev();
extern void _ZN7S1038C22v2Ev();
static  VTBL_ENTRY vtc_S1038C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1038C2[0]),
  (VTBL_ENTRY)&_ZN7S1038C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1038C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1038C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1038C2[];
extern  VTBL_ENTRY _ZTV7S1038C2[];
Class_Descriptor cd_S1038C2 = {  "S1038C2", // class name
  bases_S1038C2, 2,
  &(vtc_S1038C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1038C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1038C2),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  S1038C5  {
  char s1038c5f0;
  ::S1039C6_nt s1038c5f1;
  ::S1039C6_nt s1038c5f2;
  ::S1039C6_nt s1038c5f3;
  char s1038c5f4;
  void  mf1038c5(); // _ZN7S1038C58mf1038c5Ev
};
//SIG(-1 S1038C5) C1{ m Fc FC2{ m FC3{ m Fp}} FC2 FC2 Fc}


void  S1038C5 ::mf1038c5(){}

static void Test_S1038C5()
{
  {
    init_simple_test("S1038C5");
    S1038C5 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1038C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1038C5)");
    check_field_offset(lv, s1038c5f0, 0, "S1038C5.s1038c5f0");
    check_field_offset(lv, s1038c5f1, ABISELECT(8,4), "S1038C5.s1038c5f1");
    check_field_offset(lv, s1038c5f2, ABISELECT(16,8), "S1038C5.s1038c5f2");
    check_field_offset(lv, s1038c5f3, ABISELECT(24,12), "S1038C5.s1038c5f3");
    check_field_offset(lv, s1038c5f4, ABISELECT(32,16), "S1038C5.s1038c5f4");
  }
}
static Arrange_To_Call_Me vS1038C5(Test_S1038C5, "S1038C5", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1038C1  : S1038C2 {
  ::S1038C5 s1038c1f0;
  ::S1039C6_nt s1038c1f1;
  virtual void  v1(); // _ZN7S1038C12v1Ev
  ~S1038C1(); // tgen
  S1038C1(); // tgen
};
//SIG(1 S1038C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 FC5{ m Fc FC6{ m FC7{ m Fp}} FC6 FC6 Fc} FC6}


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

static void Test_S1038C1()
{
  extern Class_Descriptor cd_S1038C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S1038C1, buf);
    S1038C1 *dp, &lv = *(dp=new (buf) S1038C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S1038C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1038C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1038C3*)(S1038C2*), ABISELECT(8,4), "S1038C1");
    check_base_class_offset(lv, (S1038C3*)(S1038C2*), ABISELECT(8,4), "S1038C1");
    check_base_class_offset(lv, (S1038C2*), 0, "S1038C1");
    check_field_offset(lv, s1038c1f0, ABISELECT(16,8), "S1038C1.s1038c1f0");
    check_field_offset(lv, s1038c1f1, ABISELECT(56,28), "S1038C1.s1038c1f1");
    test_class_info(&lv, &cd_S1038C1);
    dp->~S1038C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1038C1(Test_S1038C1, "S1038C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S1038C1C1Ev();
extern void _ZN7S1038C1D1Ev();
Name_Map name_map_S1038C1[] = {
  NSPAIR(_ZN7S1038C1C1Ev),
  NSPAIR(_ZN7S1038C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1038C3;
extern VTBL_ENTRY _ZTI7S1038C3[];
extern Class_Descriptor cd_S1038C2;
extern VTBL_ENTRY _ZTI7S1038C2[];
extern  VTBL_ENTRY _ZTV7S1038C2[];
static Base_Class bases_S1038C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1038C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1038C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1038C1[];
extern void _ZN7S1038C1D1Ev();
extern void _ZN7S1038C1D0Ev();
extern void _ZN7S1038C22v2Ev();
extern void _ZN7S1038C12v1Ev();
static  VTBL_ENTRY vtc_S1038C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1038C1[0]),
  (VTBL_ENTRY)&_ZN7S1038C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1038C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1038C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1038C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1038C1[];
extern  VTBL_ENTRY _ZTV7S1038C1[];
Class_Descriptor cd_S1038C1 = {  "S1038C1", // class name
  bases_S1038C1, 3,
  &(vtc_S1038C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S1038C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1038C1),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  S9054C2  {
  virtual  ~S9054C2(); // _ZN7S9054C2D1Ev
  virtual void  v2(); // _ZN7S9054C22v2Ev
  S9054C2(); // tgen
};
//SIG(-1 S9054C2) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S9054C2C1Ev();
extern void _ZN7S9054C2D1Ev();
Name_Map name_map_S9054C2[] = {
  NSPAIR(_ZN7S9054C2C1Ev),
  NSPAIR(_ZN7S9054C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9054C2[];
extern void _ZN7S9054C2D1Ev();
extern void _ZN7S9054C2D0Ev();
extern void _ZN7S9054C22v2Ev();
static  VTBL_ENTRY vtc_S9054C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9054C2[0]),
  (VTBL_ENTRY)&_ZN7S9054C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9054C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9054C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9054C2[];
extern  VTBL_ENTRY _ZTV7S9054C2[];
Class_Descriptor cd_S9054C2 = {  "S9054C2", // class name
  0,0,//no base classes
  &(vtc_S9054C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9054C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9054C2),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  S9054C1  : S9054C2 {
  ::S3047C23_nt s9054c1f0;
  void *s9054c1f1;
  virtual  ~S9054C1(); // _ZN7S9054C1D1Ev
  virtual void  v1(); // _ZN7S9054C12v1Ev
  S9054C1(); // tgen
};
//SIG(1 S9054C1) C1{ BC2{ vd v2} vd v1 FC3{ BC4{ m Fp Fi[2] FC5{ m}} BC6{ vd v5 v6} vd v3 v4} Fp}


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

static void Test_S9054C1()
{
  extern Class_Descriptor cd_S9054C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S9054C1, buf);
    S9054C1 *dp, &lv = *(dp=new (buf) S9054C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S9054C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9054C1)");
    check_base_class_offset(lv, (S9054C2*), 0, "S9054C1");
    check_field_offset(lv, s9054c1f0, ABISELECT(8,4), "S9054C1.s9054c1f0");
    check_field_offset(lv, s9054c1f1, ABISELECT(40,24), "S9054C1.s9054c1f1");
    test_class_info(&lv, &cd_S9054C1);
    dp->~S9054C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9054C1(Test_S9054C1, "S9054C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S9054C1C1Ev();
extern void _ZN7S9054C1D1Ev();
Name_Map name_map_S9054C1[] = {
  NSPAIR(_ZN7S9054C1C1Ev),
  NSPAIR(_ZN7S9054C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9054C2;
extern VTBL_ENTRY _ZTI7S9054C2[];
extern  VTBL_ENTRY _ZTV7S9054C2[];
static Base_Class bases_S9054C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9054C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9054C1[];
extern void _ZN7S9054C1D1Ev();
extern void _ZN7S9054C1D0Ev();
extern void _ZN7S9054C22v2Ev();
extern void _ZN7S9054C12v1Ev();
static  VTBL_ENTRY vtc_S9054C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9054C1[0]),
  (VTBL_ENTRY)&_ZN7S9054C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9054C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9054C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9054C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9054C1[];
extern  VTBL_ENTRY _ZTV7S9054C1[];
Class_Descriptor cd_S9054C1 = {  "S9054C1", // class name
  bases_S9054C1, 1,
  &(vtc_S9054C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S9054C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9054C1),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  S1043C3  : S16567C15_nt {
};
//SIG(-1 S1043C3) C1{ BC2{ m Fi}}



static void Test_S1043C3()
{
  extern Class_Descriptor cd_S1043C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1043C3, buf);
    S1043C3 &lv = *(new (buf) S1043C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1043C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1043C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1043C3");
    test_class_info(&lv, &cd_S1043C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1043C3(Test_S1043C3, "S1043C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1043C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1043C3[];
Class_Descriptor cd_S1043C3 = {  "S1043C3", // class name
  bases_S1043C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1043C3),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  S1043C2  : S1043C3 {
  virtual  ~S1043C2(); // _ZN7S1043C2D1Ev
  virtual void  v2(); // _ZN7S1043C22v2Ev
  S1043C2(); // tgen
};
//SIG(-1 S1043C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1043C2()
{
  extern Class_Descriptor cd_S1043C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1043C2, buf);
    S1043C2 *dp, &lv = *(dp=new (buf) S1043C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1043C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1043C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1043C3*), ABISELECT(8,4), "S1043C2");
    check_base_class_offset(lv, (S1043C3*), ABISELECT(8,4), "S1043C2");
    test_class_info(&lv, &cd_S1043C2);
    dp->~S1043C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1043C2(Test_S1043C2, "S1043C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1043C2C1Ev();
extern void _ZN7S1043C2D1Ev();
Name_Map name_map_S1043C2[] = {
  NSPAIR(_ZN7S1043C2C1Ev),
  NSPAIR(_ZN7S1043C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1043C3;
extern VTBL_ENTRY _ZTI7S1043C3[];
static Base_Class bases_S1043C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1043C3,    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 _ZTI7S1043C2[];
extern void _ZN7S1043C2D1Ev();
extern void _ZN7S1043C2D0Ev();
extern void _ZN7S1043C22v2Ev();
static  VTBL_ENTRY vtc_S1043C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1043C2[0]),
  (VTBL_ENTRY)&_ZN7S1043C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1043C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1043C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1043C2[];
extern  VTBL_ENTRY _ZTV7S1043C2[];
Class_Descriptor cd_S1043C2 = {  "S1043C2", // class name
  bases_S1043C2, 2,
  &(vtc_S1043C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1043C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1043C2),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  S1043C1  : S1043C2 {
  ::S1039C6_nt s1043c1f0;
  ::S1039C6_nt s1043c1f1;
  ::S1039C6_nt s1043c1f2;
  ::S1039C6_nt s1043c1f3;
  ::S770C9_nt s1043c1f4;
  __tsi64 s1043c1f5;
  virtual void  v1(); // _ZN7S1043C12v1Ev
  ~S1043C1(); // tgen
  S1043C1(); // tgen
};
//SIG(1 S1043C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 FC5{ m FC6{ m Fp}} FC5 FC5 FC5 FC6 FL}


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

static void Test_S1043C1()
{
  extern Class_Descriptor cd_S1043C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S1043C1, buf);
    S1043C1 *dp, &lv = *(dp=new (buf) S1043C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S1043C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1043C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1043C3*)(S1043C2*), ABISELECT(8,4), "S1043C1");
    check_base_class_offset(lv, (S1043C3*)(S1043C2*), ABISELECT(8,4), "S1043C1");
    check_base_class_offset(lv, (S1043C2*), 0, "S1043C1");
    check_field_offset(lv, s1043c1f0, ABISELECT(16,8), "S1043C1.s1043c1f0");
    check_field_offset(lv, s1043c1f1, ABISELECT(24,12), "S1043C1.s1043c1f1");
    check_field_offset(lv, s1043c1f2, ABISELECT(32,16), "S1043C1.s1043c1f2");
    check_field_offset(lv, s1043c1f3, ABISELECT(40,20), "S1043C1.s1043c1f3");
    check_field_offset(lv, s1043c1f4, ABISELECT(48,24), "S1043C1.s1043c1f4");
    check_field_offset(lv, s1043c1f5, ABISELECT(56,28), "S1043C1.s1043c1f5");
    test_class_info(&lv, &cd_S1043C1);
    dp->~S1043C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1043C1(Test_S1043C1, "S1043C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S1043C1C1Ev();
extern void _ZN7S1043C1D1Ev();
Name_Map name_map_S1043C1[] = {
  NSPAIR(_ZN7S1043C1C1Ev),
  NSPAIR(_ZN7S1043C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1043C3;
extern VTBL_ENTRY _ZTI7S1043C3[];
extern Class_Descriptor cd_S1043C2;
extern VTBL_ENTRY _ZTI7S1043C2[];
extern  VTBL_ENTRY _ZTV7S1043C2[];
static Base_Class bases_S1043C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1043C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1043C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1043C1[];
extern void _ZN7S1043C1D1Ev();
extern void _ZN7S1043C1D0Ev();
extern void _ZN7S1043C22v2Ev();
extern void _ZN7S1043C12v1Ev();
static  VTBL_ENTRY vtc_S1043C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1043C1[0]),
  (VTBL_ENTRY)&_ZN7S1043C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1043C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1043C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1043C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1043C1[];
extern  VTBL_ENTRY _ZTV7S1043C1[];
Class_Descriptor cd_S1043C1 = {  "S1043C1", // class name
  bases_S1043C1, 3,
  &(vtc_S1043C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S1043C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1043C1),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  S390C4  : S16567C15_nt {
};
//SIG(-1 S390C4) C1{ BC2{ m Fi}}



static void Test_S390C4()
{
  extern Class_Descriptor cd_S390C4;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S390C4, buf);
    S390C4 &lv = *(new (buf) S390C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S390C4)");
    check2(__alignof__(lv), 4, "__alignof__(S390C4)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S390C4");
    test_class_info(&lv, &cd_S390C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS390C4(Test_S390C4, "S390C4", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S390C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S390C4[];
Class_Descriptor cd_S390C4 = {  "S390C4", // class name
  bases_S390C4, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI6S390C4),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  S390C3  : S390C4 {
  virtual  ~S390C3(); // _ZN6S390C3D1Ev
  virtual void  v2(); // _ZN6S390C32v2Ev
  S390C3(); // tgen
};
//SIG(-1 S390C3) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S390C3()
{
  extern Class_Descriptor cd_S390C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S390C3, buf);
    S390C3 *dp, &lv = *(dp=new (buf) S390C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S390C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S390C3)");
    check_base_class_offset(lv, (S16567C15_nt*)(S390C4*), ABISELECT(8,4), "S390C3");
    check_base_class_offset(lv, (S390C4*), ABISELECT(8,4), "S390C3");
    test_class_info(&lv, &cd_S390C3);
    dp->~S390C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS390C3(Test_S390C3, "S390C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S390C3C1Ev();
extern void _ZN6S390C3D1Ev();
Name_Map name_map_S390C3[] = {
  NSPAIR(_ZN6S390C3C1Ev),
  NSPAIR(_ZN6S390C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S390C4;
extern VTBL_ENTRY _ZTI6S390C4[];
static Base_Class bases_S390C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S390C4,    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 _ZTI6S390C3[];
extern void _ZN6S390C3D1Ev();
extern void _ZN6S390C3D0Ev();
extern void _ZN6S390C32v2Ev();
static  VTBL_ENTRY vtc_S390C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S390C3[0]),
  (VTBL_ENTRY)&_ZN6S390C3D1Ev,
  (VTBL_ENTRY)&_ZN6S390C3D0Ev,
  (VTBL_ENTRY)&_ZN6S390C32v2Ev,
};
extern VTBL_ENTRY _ZTI6S390C3[];
extern  VTBL_ENTRY _ZTV6S390C3[];
Class_Descriptor cd_S390C3 = {  "S390C3", // class name
  bases_S390C3, 2,
  &(vtc_S390C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S390C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV6S390C3),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  S390C7_nt  {
  void *s390c7f0;
  int s390c7f1[4];
  void  mf390c7(); // _ZN9S390C7_nt7mf390c7Ev
};
//SIG(-1 S390C7_nt) C1{ m Fp Fi[4]}


void  S390C7_nt ::mf390c7(){}

//skip512 S390C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S390C6_nt  {
  ::S390C7_nt s390c6f0;
  void  mf390c6(); // _ZN9S390C6_nt7mf390c6Ev
};
//SIG(-1 S390C6_nt) C1{ m FC2{ m Fp Fi[4]}}


void  S390C6_nt ::mf390c6(){}

//skip512 S390C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S390C2  : S390C3 {
  ::S390C6_nt s390c2f0;
  virtual  ~S390C2(); // _ZN6S390C2D1Ev
  virtual void  v3(); // _ZN6S390C22v3Ev
  virtual void  v4(); // _ZN6S390C22v4Ev
  S390C2(); // tgen
};
//SIG(-1 S390C2) C1{ BC2{ BC3{ BC4{ m Fi}} vd v3} vd v1 v2 FC5{ m FC6{ m Fp Fi[4]}}}


 S390C2 ::~S390C2(){ note_dtor("S390C2", this);}
void  S390C2 ::v3(){vfunc_called(this, "_ZN6S390C22v3Ev");}
void  S390C2 ::v4(){vfunc_called(this, "_ZN6S390C22v4Ev");}
S390C2 ::S390C2(){ note_ctor("S390C2", this);} // tgen

static void Test_S390C2()
{
  extern Class_Descriptor cd_S390C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S390C2, buf);
    S390C2 *dp, &lv = *(dp=new (buf) S390C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S390C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S390C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S390C4*)(S390C3*), ABISELECT(8,4), "S390C2");
    check_base_class_offset(lv, (S390C4*)(S390C3*), ABISELECT(8,4), "S390C2");
    check_base_class_offset(lv, (S390C3*), 0, "S390C2");
    check_field_offset(lv, s390c2f0, ABISELECT(16,8), "S390C2.s390c2f0");
    test_class_info(&lv, &cd_S390C2);
    dp->~S390C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS390C2(Test_S390C2, "S390C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S390C2C1Ev();
extern void _ZN6S390C2D1Ev();
Name_Map name_map_S390C2[] = {
  NSPAIR(_ZN6S390C2C1Ev),
  NSPAIR(_ZN6S390C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S390C4;
extern VTBL_ENTRY _ZTI6S390C4[];
extern Class_Descriptor cd_S390C3;
extern VTBL_ENTRY _ZTI6S390C3[];
extern  VTBL_ENTRY _ZTV6S390C3[];
static Base_Class bases_S390C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S390C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S390C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S390C2[];
extern void _ZN6S390C2D1Ev();
extern void _ZN6S390C2D0Ev();
extern void _ZN6S390C32v2Ev();
extern void _ZN6S390C22v3Ev();
extern void _ZN6S390C22v4Ev();
static  VTBL_ENTRY vtc_S390C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S390C2[0]),
  (VTBL_ENTRY)&_ZN6S390C2D1Ev,
  (VTBL_ENTRY)&_ZN6S390C2D0Ev,
  (VTBL_ENTRY)&_ZN6S390C32v2Ev,
  (VTBL_ENTRY)&_ZN6S390C22v3Ev,
  (VTBL_ENTRY)&_ZN6S390C22v4Ev,
};
extern VTBL_ENTRY _ZTI6S390C2[];
extern  VTBL_ENTRY _ZTV6S390C2[];
Class_Descriptor cd_S390C2 = {  "S390C2", // class name
  bases_S390C2, 3,
  &(vtc_S390C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S390C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S390C2),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  S390C1  : S390C2 {
  virtual  ~S390C1(); // _ZN6S390C1D1Ev
  virtual void  v1(); // _ZN6S390C12v1Ev
  S390C1(); // tgen
};
//SIG(1 S390C1) C1{ BC2{ BC3{ BC4{ BC5{ m Fi}} vd v2} vd v3 v4 FC6{ m FC7{ m Fp Fi[4]}}} vd v1}


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

static void Test_S390C1()
{
  extern Class_Descriptor cd_S390C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S390C1, buf);
    S390C1 *dp, &lv = *(dp=new (buf) S390C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S390C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S390C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S390C4*)(S390C3*)(S390C2*), ABISELECT(8,4), "S390C1");
    check_base_class_offset(lv, (S390C4*)(S390C3*)(S390C2*), ABISELECT(8,4), "S390C1");
    check_base_class_offset(lv, (S390C3*)(S390C2*), 0, "S390C1");
    check_base_class_offset(lv, (S390C2*), 0, "S390C1");
    test_class_info(&lv, &cd_S390C1);
    dp->~S390C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS390C1(Test_S390C1, "S390C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S390C1C1Ev();
extern void _ZN6S390C1D1Ev();
Name_Map name_map_S390C1[] = {
  NSPAIR(_ZN6S390C1C1Ev),
  NSPAIR(_ZN6S390C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S390C4;
extern VTBL_ENTRY _ZTI6S390C4[];
extern Class_Descriptor cd_S390C3;
extern VTBL_ENTRY _ZTI6S390C3[];
extern  VTBL_ENTRY _ZTV6S390C3[];
extern Class_Descriptor cd_S390C2;
extern VTBL_ENTRY _ZTI6S390C2[];
extern  VTBL_ENTRY _ZTV6S390C2[];
static Base_Class bases_S390C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S390C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S390C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S390C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S390C1[];
extern void _ZN6S390C1D1Ev();
extern void _ZN6S390C1D0Ev();
extern void _ZN6S390C32v2Ev();
extern void _ZN6S390C22v3Ev();
extern void _ZN6S390C22v4Ev();
extern void _ZN6S390C12v1Ev();
static  VTBL_ENTRY vtc_S390C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S390C1[0]),
  (VTBL_ENTRY)&_ZN6S390C1D1Ev,
  (VTBL_ENTRY)&_ZN6S390C1D0Ev,
  (VTBL_ENTRY)&_ZN6S390C32v2Ev,
  (VTBL_ENTRY)&_ZN6S390C22v3Ev,
  (VTBL_ENTRY)&_ZN6S390C22v4Ev,
  (VTBL_ENTRY)&_ZN6S390C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S390C1[];
extern  VTBL_ENTRY _ZTV6S390C1[];
Class_Descriptor cd_S390C1 = {  "S390C1", // class name
  bases_S390C1, 4,
  &(vtc_S390C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S390C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S390C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18204C2  {
  ::S3047C29_nt s18204c2f0;
  ::S2215C20_nt s18204c2f1;
  void  mf18204c2(); // _ZN8S18204C29mf18204c2Ev
};
//SIG(-1 S18204C2) C1{ m FC2{ m Fs[6] Fi[2] Fc Fs} FC3{ m Fp Fi FC4{ m}}}


void  S18204C2 ::mf18204c2(){}

static void Test_S18204C2()
{
  {
    init_simple_test("S18204C2");
    S18204C2 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S18204C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18204C2)");
    check_field_offset(lv, s18204c2f0, 0, "S18204C2.s18204c2f0");
    check_field_offset(lv, s18204c2f1, 24, "S18204C2.s18204c2f1");
  }
}
static Arrange_To_Call_Me vS18204C2(Test_S18204C2, "S18204C2", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18204C1  {
  void *s18204c1f0[3];
  ::S18204C2 s18204c1f1;
  char s18204c1f2[2];
  void  mf18204c1(); // _ZN8S18204C19mf18204c1Ev
};
//SIG(1 S18204C1) C1{ m Fp[3] FC2{ m FC3{ m Fs[6] Fi[2] Fc Fs} FC4{ m Fp Fi FC5{ m}}} Fc[2]}


void  S18204C1 ::mf18204c1(){}

static void Test_S18204C1()
{
  {
    init_simple_test("S18204C1");
    S18204C1 lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S18204C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18204C1)");
    check_field_offset(lv, s18204c1f0, 0, "S18204C1.s18204c1f0");
    check_field_offset(lv, s18204c1f1, ABISELECT(24,12), "S18204C1.s18204c1f1");
    check_field_offset(lv, s18204c1f2, ABISELECT(64,48), "S18204C1.s18204c1f2");
  }
}
static Arrange_To_Call_Me vS18204C1(Test_S18204C1, "S18204C1", ABISELECT(72,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9205C2  {
  ::S8454C3 s9205c2f0;
  int s9205c2f1;
  char s9205c2f2;
  __tsi64 s9205c2f3[2];
  int s9205c2f4;
  virtual  ~S9205C2(); // _ZN7S9205C2D1Ev
  virtual void  v3(); // _ZN7S9205C22v3Ev
  virtual void  v4(); // _ZN7S9205C22v4Ev
  virtual void  v5(); // _ZN7S9205C22v5Ev
  S9205C2(); // tgen
};
//SIG(-1 S9205C2) C1{ vd v1 v2 v3 FC2{ m Fc[160]} Fi Fc FL[2] Fi}


 S9205C2 ::~S9205C2(){ note_dtor("S9205C2", this);}
void  S9205C2 ::v3(){vfunc_called(this, "_ZN7S9205C22v3Ev");}
void  S9205C2 ::v4(){vfunc_called(this, "_ZN7S9205C22v4Ev");}
void  S9205C2 ::v5(){vfunc_called(this, "_ZN7S9205C22v5Ev");}
S9205C2 ::S9205C2(){ note_ctor("S9205C2", this);} // tgen

static void Test_S9205C2()
{
  extern Class_Descriptor cd_S9205C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,49)];
    init_test(&cd_S9205C2, buf);
    S9205C2 *dp, &lv = *(dp=new (buf) S9205C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,192), "sizeof(S9205C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9205C2)");
    check_field_offset(lv, s9205c2f0, ABISELECT(8,4), "S9205C2.s9205c2f0");
    check_field_offset(lv, s9205c2f1, ABISELECT(168,164), "S9205C2.s9205c2f1");
    check_field_offset(lv, s9205c2f2, ABISELECT(172,168), "S9205C2.s9205c2f2");
    check_field_offset(lv, s9205c2f3, ABISELECT(176,172), "S9205C2.s9205c2f3");
    check_field_offset(lv, s9205c2f4, ABISELECT(192,188), "S9205C2.s9205c2f4");
    test_class_info(&lv, &cd_S9205C2);
    dp->~S9205C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9205C2(Test_S9205C2, "S9205C2", ABISELECT(200,192));

#else // __cplusplus

extern void _ZN7S9205C2C1Ev();
extern void _ZN7S9205C2D1Ev();
Name_Map name_map_S9205C2[] = {
  NSPAIR(_ZN7S9205C2C1Ev),
  NSPAIR(_ZN7S9205C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9205C2[];
extern void _ZN7S9205C2D1Ev();
extern void _ZN7S9205C2D0Ev();
extern void _ZN7S9205C22v3Ev();
extern void _ZN7S9205C22v4Ev();
extern void _ZN7S9205C22v5Ev();
static  VTBL_ENTRY vtc_S9205C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9205C2[0]),
  (VTBL_ENTRY)&_ZN7S9205C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9205C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9205C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9205C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9205C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9205C2[];
extern  VTBL_ENTRY _ZTV7S9205C2[];
Class_Descriptor cd_S9205C2 = {  "S9205C2", // class name
  0,0,//no base classes
  &(vtc_S9205C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,192), // object size
  NSPAIRA(_ZTI7S9205C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9205C2),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  S9205C1  : S9205C2 {
  ::S770C9_nt s9205c1f0;
  virtual  ~S9205C1(); // _ZN7S9205C1D1Ev
  virtual void  v1(); // _ZN7S9205C12v1Ev
  virtual void  v2(); // _ZN7S9205C12v2Ev
  S9205C1(); // tgen
};
//SIG(1 S9205C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fc[160]} Fi Fc FL[2] Fi} vd v1 v2 FC4{ m Fp}}


 S9205C1 ::~S9205C1(){ note_dtor("S9205C1", this);}
void  S9205C1 ::v1(){vfunc_called(this, "_ZN7S9205C12v1Ev");}
void  S9205C1 ::v2(){vfunc_called(this, "_ZN7S9205C12v2Ev");}
S9205C1 ::S9205C1(){ note_ctor("S9205C1", this);} // tgen

static void Test_S9205C1()
{
  extern Class_Descriptor cd_S9205C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,50)];
    init_test(&cd_S9205C1, buf);
    S9205C1 *dp, &lv = *(dp=new (buf) S9205C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,196), "sizeof(S9205C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9205C1)");
    check_base_class_offset(lv, (S9205C2*), 0, "S9205C1");
    check_field_offset(lv, s9205c1f0, ABISELECT(200,192), "S9205C1.s9205c1f0");
    test_class_info(&lv, &cd_S9205C1);
    dp->~S9205C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9205C1(Test_S9205C1, "S9205C1", ABISELECT(208,196));

#else // __cplusplus

extern void _ZN7S9205C1C1Ev();
extern void _ZN7S9205C1D1Ev();
Name_Map name_map_S9205C1[] = {
  NSPAIR(_ZN7S9205C1C1Ev),
  NSPAIR(_ZN7S9205C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9205C2;
extern VTBL_ENTRY _ZTI7S9205C2[];
extern  VTBL_ENTRY _ZTV7S9205C2[];
static Base_Class bases_S9205C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9205C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9205C1[];
extern void _ZN7S9205C1D1Ev();
extern void _ZN7S9205C1D0Ev();
extern void _ZN7S9205C22v3Ev();
extern void _ZN7S9205C22v4Ev();
extern void _ZN7S9205C22v5Ev();
extern void _ZN7S9205C12v1Ev();
extern void _ZN7S9205C12v2Ev();
static  VTBL_ENTRY vtc_S9205C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9205C1[0]),
  (VTBL_ENTRY)&_ZN7S9205C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9205C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9205C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9205C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9205C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9205C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9205C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9205C1[];
extern  VTBL_ENTRY _ZTV7S9205C1[];
Class_Descriptor cd_S9205C1 = {  "S9205C1", // class name
  bases_S9205C1, 1,
  &(vtc_S9205C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,196), // object size
  NSPAIRA(_ZTI7S9205C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9205C1),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  S13753C3  {
  char s13753c3f0[4];
  int s13753c3f1[2];
  char s13753c3f2[1412];
};
//SIG(-1 S13753C3) C1{ Fc[4] Fi[2] Fc[1412]}



static void Test_S13753C3()
{
  {
    init_simple_test("S13753C3");
    S13753C3 lv;
    check2(sizeof(lv), 1424, "sizeof(S13753C3)");
    check2(__alignof__(lv), 4, "__alignof__(S13753C3)");
    check_field_offset(lv, s13753c3f0, 0, "S13753C3.s13753c3f0");
    check_field_offset(lv, s13753c3f1, 4, "S13753C3.s13753c3f1");
    check_field_offset(lv, s13753c3f2, 12, "S13753C3.s13753c3f2");
  }
}
static Arrange_To_Call_Me vS13753C3(Test_S13753C3, "S13753C3", 1424);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13753C1  {
  __tsi64 s13753c1f0;
  int s13753c1f1;
  ::S3047C29_nt s13753c1f2;
  ::S3047C29_nt s13753c1f3;
  ::S13753C3 s13753c1f4;
};
//SIG(1 S13753C1) C1{ FL Fi FC2{ m Fs[6] Fi[2] Fc Fs} FC2 FC3{ Fc[4] Fi[2] Fc[1412]}}



static void Test_S13753C1()
{
  {
    init_simple_test("S13753C1");
    S13753C1 lv;
    check2(sizeof(lv), ABISELECT(1488,1484), "sizeof(S13753C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13753C1)");
    check_field_offset(lv, s13753c1f0, 0, "S13753C1.s13753c1f0");
    check_field_offset(lv, s13753c1f1, 8, "S13753C1.s13753c1f1");
    check_field_offset(lv, s13753c1f2, 12, "S13753C1.s13753c1f2");
    check_field_offset(lv, s13753c1f3, 36, "S13753C1.s13753c1f3");
    check_field_offset(lv, s13753c1f4, 60, "S13753C1.s13753c1f4");
  }
}
static Arrange_To_Call_Me vS13753C1(Test_S13753C1, "S13753C1", ABISELECT(1488,1484));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9410C2  {
  ::S2215C20_nt s9410c2f0;
  int s9410c2f1[2];
  char s9410c2f2;
  virtual  ~S9410C2(); // _ZN7S9410C2D1Ev
  virtual void  v3(); // _ZN7S9410C22v3Ev
  virtual void  v4(); // _ZN7S9410C22v4Ev
  virtual void  v5(); // _ZN7S9410C22v5Ev
  S9410C2(); // tgen
};
//SIG(-1 S9410C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9410C2 ::~S9410C2(){ note_dtor("S9410C2", this);}
void  S9410C2 ::v3(){vfunc_called(this, "_ZN7S9410C22v3Ev");}
void  S9410C2 ::v4(){vfunc_called(this, "_ZN7S9410C22v4Ev");}
void  S9410C2 ::v5(){vfunc_called(this, "_ZN7S9410C22v5Ev");}
S9410C2 ::S9410C2(){ note_ctor("S9410C2", this);} // tgen

static void Test_S9410C2()
{
  extern Class_Descriptor cd_S9410C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9410C2, buf);
    S9410C2 *dp, &lv = *(dp=new (buf) S9410C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9410C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9410C2)");
    check_field_offset(lv, s9410c2f0, ABISELECT(8,4), "S9410C2.s9410c2f0");
    check_field_offset(lv, s9410c2f1, ABISELECT(24,16), "S9410C2.s9410c2f1");
    check_field_offset(lv, s9410c2f2, ABISELECT(32,24), "S9410C2.s9410c2f2");
    test_class_info(&lv, &cd_S9410C2);
    dp->~S9410C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9410C2(Test_S9410C2, "S9410C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9410C2C1Ev();
extern void _ZN7S9410C2D1Ev();
Name_Map name_map_S9410C2[] = {
  NSPAIR(_ZN7S9410C2C1Ev),
  NSPAIR(_ZN7S9410C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9410C2[];
extern void _ZN7S9410C2D1Ev();
extern void _ZN7S9410C2D0Ev();
extern void _ZN7S9410C22v3Ev();
extern void _ZN7S9410C22v4Ev();
extern void _ZN7S9410C22v5Ev();
static  VTBL_ENTRY vtc_S9410C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9410C2[0]),
  (VTBL_ENTRY)&_ZN7S9410C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9410C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9410C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9410C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9410C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9410C2[];
extern  VTBL_ENTRY _ZTV7S9410C2[];
Class_Descriptor cd_S9410C2 = {  "S9410C2", // class name
  0,0,//no base classes
  &(vtc_S9410C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9410C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9410C2),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  S9410C1  : S9410C2 {
  void *s9410c1f0[4];
  virtual  ~S9410C1(); // _ZN7S9410C1D1Ev
  virtual void  v1(); // _ZN7S9410C12v1Ev
  virtual void  v2(); // _ZN7S9410C12v2Ev
  S9410C1(); // tgen
};
//SIG(1 S9410C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp[4]}


 S9410C1 ::~S9410C1(){ note_dtor("S9410C1", this);}
void  S9410C1 ::v1(){vfunc_called(this, "_ZN7S9410C12v1Ev");}
void  S9410C1 ::v2(){vfunc_called(this, "_ZN7S9410C12v2Ev");}
S9410C1 ::S9410C1(){ note_ctor("S9410C1", this);} // tgen

static void Test_S9410C1()
{
  extern Class_Descriptor cd_S9410C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S9410C1, buf);
    S9410C1 *dp, &lv = *(dp=new (buf) S9410C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S9410C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9410C1)");
    check_base_class_offset(lv, (S9410C2*), 0, "S9410C1");
    check_field_offset(lv, s9410c1f0, ABISELECT(40,28), "S9410C1.s9410c1f0");
    test_class_info(&lv, &cd_S9410C1);
    dp->~S9410C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9410C1(Test_S9410C1, "S9410C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S9410C1C1Ev();
extern void _ZN7S9410C1D1Ev();
Name_Map name_map_S9410C1[] = {
  NSPAIR(_ZN7S9410C1C1Ev),
  NSPAIR(_ZN7S9410C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9410C2;
extern VTBL_ENTRY _ZTI7S9410C2[];
extern  VTBL_ENTRY _ZTV7S9410C2[];
static Base_Class bases_S9410C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9410C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9410C1[];
extern void _ZN7S9410C1D1Ev();
extern void _ZN7S9410C1D0Ev();
extern void _ZN7S9410C22v3Ev();
extern void _ZN7S9410C22v4Ev();
extern void _ZN7S9410C22v5Ev();
extern void _ZN7S9410C12v1Ev();
extern void _ZN7S9410C12v2Ev();
static  VTBL_ENTRY vtc_S9410C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9410C1[0]),
  (VTBL_ENTRY)&_ZN7S9410C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9410C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9410C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9410C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9410C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9410C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9410C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9410C1[];
extern  VTBL_ENTRY _ZTV7S9410C1[];
Class_Descriptor cd_S9410C1 = {  "S9410C1", // class name
  bases_S9410C1, 1,
  &(vtc_S9410C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S9410C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9410C1),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  S13033C1  {
  int s13033c1f0[2];
  char s13033c1f1[32];
  void *s13033c1f2;
  int s13033c1f3;
  ::S770C16_nt s13033c1f4;
  int s13033c1f5;
  char s13033c1f6[32];
  int s13033c1f7[2];
  void *s13033c1f8;
  int s13033c1f9;
  char s13033c1f10[24];
};
//SIG(1 S13033C1) C1{ Fi[2] Fc[32] Fp Fi FC2{ Fc[4]} Fi Fc[32] Fi[2] Fp Fi Fc[24]}



static void Test_S13033C1()
{
  {
    init_simple_test("S13033C1");
    S13033C1 lv;
    check2(sizeof(lv), ABISELECT(144,128), "sizeof(S13033C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13033C1)");
    check_field_offset(lv, s13033c1f0, 0, "S13033C1.s13033c1f0");
    check_field_offset(lv, s13033c1f1, 8, "S13033C1.s13033c1f1");
    check_field_offset(lv, s13033c1f2, 40, "S13033C1.s13033c1f2");
    check_field_offset(lv, s13033c1f3, ABISELECT(48,44), "S13033C1.s13033c1f3");
    check_field_offset(lv, s13033c1f4, ABISELECT(52,48), "S13033C1.s13033c1f4");
    check_field_offset(lv, s13033c1f5, ABISELECT(56,52), "S13033C1.s13033c1f5");
    check_field_offset(lv, s13033c1f6, ABISELECT(60,56), "S13033C1.s13033c1f6");
    check_field_offset(lv, s13033c1f7, ABISELECT(92,88), "S13033C1.s13033c1f7");
    check_field_offset(lv, s13033c1f8, ABISELECT(104,96), "S13033C1.s13033c1f8");
    check_field_offset(lv, s13033c1f9, ABISELECT(112,100), "S13033C1.s13033c1f9");
    check_field_offset(lv, s13033c1f10, ABISELECT(116,104), "S13033C1.s13033c1f10");
  }
}
static Arrange_To_Call_Me vS13033C1(Test_S13033C1, "S13033C1", ABISELECT(144,128));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13032C1  {
  int s13032c1f0[2];
  char s13032c1f1[32];
  void *s13032c1f2;
  int s13032c1f3;
  ::S770C16_nt s13032c1f4;
  int s13032c1f5;
  char s13032c1f6[32];
  int s13032c1f7[2];
  void *s13032c1f8;
  int s13032c1f9;
  char s13032c1f10[16];
};
//SIG(1 S13032C1) C1{ Fi[2] Fc[32] Fp Fi FC2{ Fc[4]} Fi Fc[32] Fi[2] Fp Fi Fc[16]}



static void Test_S13032C1()
{
  {
    init_simple_test("S13032C1");
    S13032C1 lv;
    check2(sizeof(lv), ABISELECT(136,120), "sizeof(S13032C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13032C1)");
    check_field_offset(lv, s13032c1f0, 0, "S13032C1.s13032c1f0");
    check_field_offset(lv, s13032c1f1, 8, "S13032C1.s13032c1f1");
    check_field_offset(lv, s13032c1f2, 40, "S13032C1.s13032c1f2");
    check_field_offset(lv, s13032c1f3, ABISELECT(48,44), "S13032C1.s13032c1f3");
    check_field_offset(lv, s13032c1f4, ABISELECT(52,48), "S13032C1.s13032c1f4");
    check_field_offset(lv, s13032c1f5, ABISELECT(56,52), "S13032C1.s13032c1f5");
    check_field_offset(lv, s13032c1f6, ABISELECT(60,56), "S13032C1.s13032c1f6");
    check_field_offset(lv, s13032c1f7, ABISELECT(92,88), "S13032C1.s13032c1f7");
    check_field_offset(lv, s13032c1f8, ABISELECT(104,96), "S13032C1.s13032c1f8");
    check_field_offset(lv, s13032c1f9, ABISELECT(112,100), "S13032C1.s13032c1f9");
    check_field_offset(lv, s13032c1f10, ABISELECT(116,104), "S13032C1.s13032c1f10");
  }
}
static Arrange_To_Call_Me vS13032C1(Test_S13032C1, "S13032C1", ABISELECT(136,120));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12135C1  {
  ::S2215C20_nt s12135c1f0;
  ::S2215C20_nt s12135c1f1;
  ::S3047C29_nt s12135c1f2;
  int s12135c1f3;
  char s12135c1f4[256];
};
//SIG(1 S12135C1) C1{ FC2{ m Fp Fi FC3{ m}} FC2 FC4{ m Fs[6] Fi[2] Fc Fs} Fi Fc[256]}



static void Test_S12135C1()
{
  {
    init_simple_test("S12135C1");
    S12135C1 lv;
    check2(sizeof(lv), ABISELECT(320,308), "sizeof(S12135C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12135C1)");
    check_field_offset(lv, s12135c1f0, 0, "S12135C1.s12135c1f0");
    check_field_offset(lv, s12135c1f1, ABISELECT(16,12), "S12135C1.s12135c1f1");
    check_field_offset(lv, s12135c1f2, ABISELECT(32,24), "S12135C1.s12135c1f2");
    check_field_offset(lv, s12135c1f3, ABISELECT(56,48), "S12135C1.s12135c1f3");
    check_field_offset(lv, s12135c1f4, ABISELECT(60,52), "S12135C1.s12135c1f4");
  }
}
static Arrange_To_Call_Me vS12135C1(Test_S12135C1, "S12135C1", ABISELECT(320,308));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12852C4  {
  void *s12852c4f0;
  void *s12852c4f1;
  int s12852c4f2;
  void *s12852c4f3;
  int s12852c4f4;
};
//SIG(-1 S12852C4) C1{ Fp[2] Fi Fp Fi}



static void Test_S12852C4()
{
  {
    init_simple_test("S12852C4");
    S12852C4 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S12852C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12852C4)");
    check_field_offset(lv, s12852c4f0, 0, "S12852C4.s12852c4f0");
    check_field_offset(lv, s12852c4f1, ABISELECT(8,4), "S12852C4.s12852c4f1");
    check_field_offset(lv, s12852c4f2, ABISELECT(16,8), "S12852C4.s12852c4f2");
    check_field_offset(lv, s12852c4f3, ABISELECT(24,12), "S12852C4.s12852c4f3");
    check_field_offset(lv, s12852c4f4, ABISELECT(32,16), "S12852C4.s12852c4f4");
  }
}
static Arrange_To_Call_Me vS12852C4(Test_S12852C4, "S12852C4", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12852C3  {
  int s12852c3f0;
  ::S12852C4 s12852c3f1;
};
//SIG(1 S12852C3) C1{ Fi FC2{ Fp[2] Fi Fp Fi}}



static void Test_S12852C3()
{
  {
    init_simple_test("S12852C3");
    S12852C3 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S12852C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12852C3)");
    check_field_offset(lv, s12852c3f0, 0, "S12852C3.s12852c3f0");
    check_field_offset(lv, s12852c3f1, ABISELECT(8,4), "S12852C3.s12852c3f1");
  }
}
static Arrange_To_Call_Me vS12852C3(Test_S12852C3, "S12852C3", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S12852C2  {
  ::S12852C3 s12852c2f0;
  ::S12852C3 s12852c2f1;
  ::S770C20_nt s12852c2f2;
};
//SIG(1 S12852C2) U1{ FC2{ Fi FC3{ Fp Fp Fi Fp Fi}} FC2 FC4{ Fi Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12852C1  {
  int s12852c1f0;
  ::S12852C2 s12852c1f1;
};
//SIG(1 S12852C1) C1{ Fi FU2{ FC3{ Fi FC4{ Fp Fp Fi Fp Fi}} FC3 FC5{ Fi Fi}}}



static void Test_S12852C1()
{
  {
    init_simple_test("S12852C1");
    S12852C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S12852C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12852C1)");
    check_field_offset(lv, s12852c1f0, 0, "S12852C1.s12852c1f0");
    check_field_offset(lv, s12852c1f1, ABISELECT(8,4), "S12852C1.s12852c1f1");
  }
}
static Arrange_To_Call_Me vS12852C1(Test_S12852C1, "S12852C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1073C3  : S16567C15_nt {
};
//SIG(-1 S1073C3) C1{ BC2{ m Fi}}



static void Test_S1073C3()
{
  extern Class_Descriptor cd_S1073C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1073C3, buf);
    S1073C3 &lv = *(new (buf) S1073C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1073C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1073C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1073C3");
    test_class_info(&lv, &cd_S1073C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1073C3(Test_S1073C3, "S1073C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1073C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1073C3[];
Class_Descriptor cd_S1073C3 = {  "S1073C3", // class name
  bases_S1073C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1073C3),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  S1073C2  : S1073C3 {
  virtual  ~S1073C2(); // _ZN7S1073C2D1Ev
  virtual void  v2(); // _ZN7S1073C22v2Ev
  S1073C2(); // tgen
};
//SIG(-1 S1073C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1073C2()
{
  extern Class_Descriptor cd_S1073C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1073C2, buf);
    S1073C2 *dp, &lv = *(dp=new (buf) S1073C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1073C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1073C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1073C3*), ABISELECT(8,4), "S1073C2");
    check_base_class_offset(lv, (S1073C3*), ABISELECT(8,4), "S1073C2");
    test_class_info(&lv, &cd_S1073C2);
    dp->~S1073C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1073C2(Test_S1073C2, "S1073C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1073C2C1Ev();
extern void _ZN7S1073C2D1Ev();
Name_Map name_map_S1073C2[] = {
  NSPAIR(_ZN7S1073C2C1Ev),
  NSPAIR(_ZN7S1073C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1073C3;
extern VTBL_ENTRY _ZTI7S1073C3[];
static Base_Class bases_S1073C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1073C3,    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 _ZTI7S1073C2[];
extern void _ZN7S1073C2D1Ev();
extern void _ZN7S1073C2D0Ev();
extern void _ZN7S1073C22v2Ev();
static  VTBL_ENTRY vtc_S1073C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1073C2[0]),
  (VTBL_ENTRY)&_ZN7S1073C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1073C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1073C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1073C2[];
extern  VTBL_ENTRY _ZTV7S1073C2[];
Class_Descriptor cd_S1073C2 = {  "S1073C2", // class name
  bases_S1073C2, 2,
  &(vtc_S1073C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1073C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1073C2),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  S1073C1  : S1073C2 {
  void *s1073c1f0;
  ::S390C6_nt s1073c1f1;
  virtual  ~S1073C1(); // _ZN7S1073C1D1Ev
  virtual void  v1(); // _ZN7S1073C12v1Ev
  S1073C1(); // tgen
};
//SIG(1 S1073C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} vd v1 Fp FC5{ m FC6{ m Fp Fi[4]}}}


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

static void Test_S1073C1()
{
  extern Class_Descriptor cd_S1073C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1073C1, buf);
    S1073C1 *dp, &lv = *(dp=new (buf) S1073C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1073C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1073C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1073C3*)(S1073C2*), ABISELECT(8,4), "S1073C1");
    check_base_class_offset(lv, (S1073C3*)(S1073C2*), ABISELECT(8,4), "S1073C1");
    check_base_class_offset(lv, (S1073C2*), 0, "S1073C1");
    check_field_offset(lv, s1073c1f0, ABISELECT(16,8), "S1073C1.s1073c1f0");
    check_field_offset(lv, s1073c1f1, ABISELECT(24,12), "S1073C1.s1073c1f1");
    test_class_info(&lv, &cd_S1073C1);
    dp->~S1073C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1073C1(Test_S1073C1, "S1073C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1073C1C1Ev();
extern void _ZN7S1073C1D1Ev();
Name_Map name_map_S1073C1[] = {
  NSPAIR(_ZN7S1073C1C1Ev),
  NSPAIR(_ZN7S1073C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1073C3;
extern VTBL_ENTRY _ZTI7S1073C3[];
extern Class_Descriptor cd_S1073C2;
extern VTBL_ENTRY _ZTI7S1073C2[];
extern  VTBL_ENTRY _ZTV7S1073C2[];
static Base_Class bases_S1073C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1073C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1073C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1073C1[];
extern void _ZN7S1073C1D1Ev();
extern void _ZN7S1073C1D0Ev();
extern void _ZN7S1073C22v2Ev();
extern void _ZN7S1073C12v1Ev();
static  VTBL_ENTRY vtc_S1073C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1073C1[0]),
  (VTBL_ENTRY)&_ZN7S1073C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1073C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1073C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1073C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1073C1[];
extern  VTBL_ENTRY _ZTV7S1073C1[];
Class_Descriptor cd_S1073C1 = {  "S1073C1", // class name
  bases_S1073C1, 3,
  &(vtc_S1073C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1073C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1073C1),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  S1031C3  : S16567C15_nt {
};
//SIG(-1 S1031C3) C1{ BC2{ m Fi}}



static void Test_S1031C3()
{
  extern Class_Descriptor cd_S1031C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1031C3, buf);
    S1031C3 &lv = *(new (buf) S1031C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1031C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1031C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1031C3");
    test_class_info(&lv, &cd_S1031C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1031C3(Test_S1031C3, "S1031C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1031C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1031C3[];
Class_Descriptor cd_S1031C3 = {  "S1031C3", // class name
  bases_S1031C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1031C3),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  S1031C2  : S1031C3 {
  virtual  ~S1031C2(); // _ZN7S1031C2D1Ev
  virtual void  v2(); // _ZN7S1031C22v2Ev
  S1031C2(); // tgen
};
//SIG(-1 S1031C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1031C2()
{
  extern Class_Descriptor cd_S1031C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1031C2, buf);
    S1031C2 *dp, &lv = *(dp=new (buf) S1031C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1031C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1031C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1031C3*), ABISELECT(8,4), "S1031C2");
    check_base_class_offset(lv, (S1031C3*), ABISELECT(8,4), "S1031C2");
    test_class_info(&lv, &cd_S1031C2);
    dp->~S1031C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1031C2(Test_S1031C2, "S1031C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1031C2C1Ev();
extern void _ZN7S1031C2D1Ev();
Name_Map name_map_S1031C2[] = {
  NSPAIR(_ZN7S1031C2C1Ev),
  NSPAIR(_ZN7S1031C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1031C3;
extern VTBL_ENTRY _ZTI7S1031C3[];
static Base_Class bases_S1031C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1031C3,    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 _ZTI7S1031C2[];
extern void _ZN7S1031C2D1Ev();
extern void _ZN7S1031C2D0Ev();
extern void _ZN7S1031C22v2Ev();
static  VTBL_ENTRY vtc_S1031C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1031C2[0]),
  (VTBL_ENTRY)&_ZN7S1031C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1031C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1031C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1031C2[];
extern  VTBL_ENTRY _ZTV7S1031C2[];
Class_Descriptor cd_S1031C2 = {  "S1031C2", // class name
  bases_S1031C2, 2,
  &(vtc_S1031C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1031C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1031C2),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  S1031C7  {
  int s1031c7f0;
  void *s1031c7f1[17];
};
//SIG(-1 S1031C7) C1{ Fi Fp[17]}



static void Test_S1031C7()
{
  {
    init_simple_test("S1031C7");
    S1031C7 lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S1031C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1031C7)");
    check_field_offset(lv, s1031c7f0, 0, "S1031C7.s1031c7f0");
    check_field_offset(lv, s1031c7f1, ABISELECT(8,4), "S1031C7.s1031c7f1");
  }
}
static Arrange_To_Call_Me vS1031C7(Test_S1031C7, "S1031C7", ABISELECT(144,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1031C6  {
  ::S1031C7 s1031c6f0;
  void  mf1031c6(); // _ZN7S1031C68mf1031c6Ev
};
//SIG(-1 S1031C6) C1{ m FC2{ Fi Fp[17]}}


void  S1031C6 ::mf1031c6(){}

static void Test_S1031C6()
{
  {
    init_simple_test("S1031C6");
    S1031C6 lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S1031C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1031C6)");
    check_field_offset(lv, s1031c6f0, 0, "S1031C6.s1031c6f0");
  }
}
static Arrange_To_Call_Me vS1031C6(Test_S1031C6, "S1031C6", ABISELECT(144,72));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S1031C5  : S1031C6 {
};
//SIG(-1 S1031C5) C1{ BC2{ m FC3{ Fi Fp[17]}}}



static void Test_S1031C5()
{
  extern Class_Descriptor cd_S1031C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[19];
    init_test(&cd_S1031C5, buf);
    S1031C5 &lv = *(new (buf) S1031C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S1031C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1031C5)");
    check_base_class_offset(lv, (S1031C6*), 0, "S1031C5");
    test_class_info(&lv, &cd_S1031C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1031C5(Test_S1031C5, "S1031C5", ABISELECT(144,72));

#else // __cplusplus

extern Class_Descriptor cd_S1031C6;
static Base_Class bases_S1031C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1031C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1031C5 = {  "S1031C5", // class name
  bases_S1031C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(144,72), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1031C1  : S1031C2 {
  ::S1031C5 s1031c1f0;
  virtual void  v1(); // _ZN7S1031C12v1Ev
  ~S1031C1(); // tgen
  S1031C1(); // tgen
};
//SIG(1 S1031C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 FC5{ BC6{ m FC7{ Fi Fp[17]}}}}


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

static void Test_S1031C1()
{
  extern Class_Descriptor cd_S1031C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[21];
    init_test(&cd_S1031C1, buf);
    S1031C1 *dp, &lv = *(dp=new (buf) S1031C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S1031C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1031C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1031C3*)(S1031C2*), ABISELECT(8,4), "S1031C1");
    check_base_class_offset(lv, (S1031C3*)(S1031C2*), ABISELECT(8,4), "S1031C1");
    check_base_class_offset(lv, (S1031C2*), 0, "S1031C1");
    check_field_offset(lv, s1031c1f0, ABISELECT(16,8), "S1031C1.s1031c1f0");
    test_class_info(&lv, &cd_S1031C1);
    dp->~S1031C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1031C1(Test_S1031C1, "S1031C1", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN7S1031C1C1Ev();
extern void _ZN7S1031C1D1Ev();
Name_Map name_map_S1031C1[] = {
  NSPAIR(_ZN7S1031C1C1Ev),
  NSPAIR(_ZN7S1031C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1031C3;
extern VTBL_ENTRY _ZTI7S1031C3[];
extern Class_Descriptor cd_S1031C2;
extern VTBL_ENTRY _ZTI7S1031C2[];
extern  VTBL_ENTRY _ZTV7S1031C2[];
static Base_Class bases_S1031C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1031C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1031C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1031C1[];
extern void _ZN7S1031C1D1Ev();
extern void _ZN7S1031C1D0Ev();
extern void _ZN7S1031C22v2Ev();
extern void _ZN7S1031C12v1Ev();
static  VTBL_ENTRY vtc_S1031C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1031C1[0]),
  (VTBL_ENTRY)&_ZN7S1031C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1031C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1031C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1031C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1031C1[];
extern  VTBL_ENTRY _ZTV7S1031C1[];
Class_Descriptor cd_S1031C1 = {  "S1031C1", // class name
  bases_S1031C1, 3,
  &(vtc_S1031C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI7S1031C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1031C1),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  S1045C3  : S16567C15_nt {
};
//SIG(-1 S1045C3) C1{ BC2{ m Fi}}



static void Test_S1045C3()
{
  extern Class_Descriptor cd_S1045C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1045C3, buf);
    S1045C3 &lv = *(new (buf) S1045C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1045C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1045C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1045C3");
    test_class_info(&lv, &cd_S1045C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1045C3(Test_S1045C3, "S1045C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1045C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1045C3[];
Class_Descriptor cd_S1045C3 = {  "S1045C3", // class name
  bases_S1045C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1045C3),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  S1045C2  : S1045C3 {
  virtual  ~S1045C2(); // _ZN7S1045C2D1Ev
  virtual void  v2(); // _ZN7S1045C22v2Ev
  S1045C2(); // tgen
};
//SIG(-1 S1045C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1045C2()
{
  extern Class_Descriptor cd_S1045C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1045C2, buf);
    S1045C2 *dp, &lv = *(dp=new (buf) S1045C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1045C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1045C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1045C3*), ABISELECT(8,4), "S1045C2");
    check_base_class_offset(lv, (S1045C3*), ABISELECT(8,4), "S1045C2");
    test_class_info(&lv, &cd_S1045C2);
    dp->~S1045C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1045C2(Test_S1045C2, "S1045C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1045C2C1Ev();
extern void _ZN7S1045C2D1Ev();
Name_Map name_map_S1045C2[] = {
  NSPAIR(_ZN7S1045C2C1Ev),
  NSPAIR(_ZN7S1045C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1045C3;
extern VTBL_ENTRY _ZTI7S1045C3[];
static Base_Class bases_S1045C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1045C3,    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 _ZTI7S1045C2[];
extern void _ZN7S1045C2D1Ev();
extern void _ZN7S1045C2D0Ev();
extern void _ZN7S1045C22v2Ev();
static  VTBL_ENTRY vtc_S1045C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1045C2[0]),
  (VTBL_ENTRY)&_ZN7S1045C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1045C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1045C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1045C2[];
extern  VTBL_ENTRY _ZTV7S1045C2[];
Class_Descriptor cd_S1045C2 = {  "S1045C2", // class name
  bases_S1045C2, 2,
  &(vtc_S1045C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1045C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1045C2),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  S1045C1  : S1045C2 {
  ::S1039C6_nt s1045c1f0;
  ::S770C9_nt s1045c1f1;
  virtual void  v1(); // _ZN7S1045C12v1Ev
  ~S1045C1(); // tgen
  S1045C1(); // tgen
};
//SIG(1 S1045C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 FC5{ m FC6{ m Fp}} FC6}


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

static void Test_S1045C1()
{
  extern Class_Descriptor cd_S1045C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1045C1, buf);
    S1045C1 *dp, &lv = *(dp=new (buf) S1045C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1045C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1045C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1045C3*)(S1045C2*), ABISELECT(8,4), "S1045C1");
    check_base_class_offset(lv, (S1045C3*)(S1045C2*), ABISELECT(8,4), "S1045C1");
    check_base_class_offset(lv, (S1045C2*), 0, "S1045C1");
    check_field_offset(lv, s1045c1f0, ABISELECT(16,8), "S1045C1.s1045c1f0");
    check_field_offset(lv, s1045c1f1, ABISELECT(24,12), "S1045C1.s1045c1f1");
    test_class_info(&lv, &cd_S1045C1);
    dp->~S1045C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1045C1(Test_S1045C1, "S1045C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1045C1C1Ev();
extern void _ZN7S1045C1D1Ev();
Name_Map name_map_S1045C1[] = {
  NSPAIR(_ZN7S1045C1C1Ev),
  NSPAIR(_ZN7S1045C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1045C3;
extern VTBL_ENTRY _ZTI7S1045C3[];
extern Class_Descriptor cd_S1045C2;
extern VTBL_ENTRY _ZTI7S1045C2[];
extern  VTBL_ENTRY _ZTV7S1045C2[];
static Base_Class bases_S1045C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1045C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1045C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1045C1[];
extern void _ZN7S1045C1D1Ev();
extern void _ZN7S1045C1D0Ev();
extern void _ZN7S1045C22v2Ev();
extern void _ZN7S1045C12v1Ev();
static  VTBL_ENTRY vtc_S1045C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1045C1[0]),
  (VTBL_ENTRY)&_ZN7S1045C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1045C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1045C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1045C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1045C1[];
extern  VTBL_ENTRY _ZTV7S1045C1[];
Class_Descriptor cd_S1045C1 = {  "S1045C1", // class name
  bases_S1045C1, 3,
  &(vtc_S1045C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1045C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1045C1),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  S1035C3  : S16567C15_nt {
};
//SIG(-1 S1035C3) C1{ BC2{ m Fi}}



static void Test_S1035C3()
{
  extern Class_Descriptor cd_S1035C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1035C3, buf);
    S1035C3 &lv = *(new (buf) S1035C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1035C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1035C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1035C3");
    test_class_info(&lv, &cd_S1035C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1035C3(Test_S1035C3, "S1035C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1035C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1035C3[];
Class_Descriptor cd_S1035C3 = {  "S1035C3", // class name
  bases_S1035C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1035C3),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  S1035C2  : S1035C3 {
  virtual  ~S1035C2(); // _ZN7S1035C2D1Ev
  virtual void  v2(); // _ZN7S1035C22v2Ev
  S1035C2(); // tgen
};
//SIG(-1 S1035C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1035C2()
{
  extern Class_Descriptor cd_S1035C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1035C2, buf);
    S1035C2 *dp, &lv = *(dp=new (buf) S1035C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1035C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1035C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1035C3*), ABISELECT(8,4), "S1035C2");
    check_base_class_offset(lv, (S1035C3*), ABISELECT(8,4), "S1035C2");
    test_class_info(&lv, &cd_S1035C2);
    dp->~S1035C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1035C2(Test_S1035C2, "S1035C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1035C2C1Ev();
extern void _ZN7S1035C2D1Ev();
Name_Map name_map_S1035C2[] = {
  NSPAIR(_ZN7S1035C2C1Ev),
  NSPAIR(_ZN7S1035C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1035C3;
extern VTBL_ENTRY _ZTI7S1035C3[];
static Base_Class bases_S1035C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1035C3,    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 _ZTI7S1035C2[];
extern void _ZN7S1035C2D1Ev();
extern void _ZN7S1035C2D0Ev();
extern void _ZN7S1035C22v2Ev();
static  VTBL_ENTRY vtc_S1035C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1035C2[0]),
  (VTBL_ENTRY)&_ZN7S1035C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1035C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1035C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1035C2[];
extern  VTBL_ENTRY _ZTV7S1035C2[];
Class_Descriptor cd_S1035C2 = {  "S1035C2", // class name
  bases_S1035C2, 2,
  &(vtc_S1035C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1035C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1035C2),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  S1035C6_nt  {
  __tsi64 s1035c6f0[2];
};
//SIG(-1 S1035C6_nt) C1{ FL[2]}



//skip512 S1035C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1035C5  {
  ::S1035C6_nt s1035c5f0;
  ::S1035C6_nt s1035c5f1;
};
//SIG(-1 S1035C5) C1{ FC2{ FL[2]} FC2}



static void Test_S1035C5()
{
  {
    init_simple_test("S1035C5");
    S1035C5 lv;
    check2(sizeof(lv), 32, "sizeof(S1035C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1035C5)");
    check_field_offset(lv, s1035c5f0, 0, "S1035C5.s1035c5f0");
    check_field_offset(lv, s1035c5f1, 16, "S1035C5.s1035c5f1");
  }
}
static Arrange_To_Call_Me vS1035C5(Test_S1035C5, "S1035C5", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1035C1  : S1035C2 {
  ::S1035C5 s1035c1f0;
  virtual void  v1(); // _ZN7S1035C12v1Ev
  ~S1035C1(); // tgen
  S1035C1(); // tgen
};
//SIG(1 S1035C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 FC5{ FC6{ FL[2]} FC6}}


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

static void Test_S1035C1()
{
  extern Class_Descriptor cd_S1035C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S1035C1, buf);
    S1035C1 *dp, &lv = *(dp=new (buf) S1035C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S1035C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1035C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1035C3*)(S1035C2*), ABISELECT(8,4), "S1035C1");
    check_base_class_offset(lv, (S1035C3*)(S1035C2*), ABISELECT(8,4), "S1035C1");
    check_base_class_offset(lv, (S1035C2*), 0, "S1035C1");
    check_field_offset(lv, s1035c1f0, ABISELECT(16,8), "S1035C1.s1035c1f0");
    test_class_info(&lv, &cd_S1035C1);
    dp->~S1035C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1035C1(Test_S1035C1, "S1035C1", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S1035C1C1Ev();
extern void _ZN7S1035C1D1Ev();
Name_Map name_map_S1035C1[] = {
  NSPAIR(_ZN7S1035C1C1Ev),
  NSPAIR(_ZN7S1035C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1035C3;
extern VTBL_ENTRY _ZTI7S1035C3[];
extern Class_Descriptor cd_S1035C2;
extern VTBL_ENTRY _ZTI7S1035C2[];
extern  VTBL_ENTRY _ZTV7S1035C2[];
static Base_Class bases_S1035C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1035C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1035C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1035C1[];
extern void _ZN7S1035C1D1Ev();
extern void _ZN7S1035C1D0Ev();
extern void _ZN7S1035C22v2Ev();
extern void _ZN7S1035C12v1Ev();
static  VTBL_ENTRY vtc_S1035C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1035C1[0]),
  (VTBL_ENTRY)&_ZN7S1035C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1035C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1035C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1035C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1035C1[];
extern  VTBL_ENTRY _ZTV7S1035C1[];
Class_Descriptor cd_S1035C1 = {  "S1035C1", // class name
  bases_S1035C1, 3,
  &(vtc_S1035C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S1035C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1035C1),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  S11991C1  {
  ::S292C18 s11991c1f0;
  ::S292C18 s11991c1f1;
};
//SIG(1 S11991C1) C1{ FC2{ m FC3{ m Fi[5]} Fi FC4{ m Fs[6] Fi[2] Fc Fs} Fc} FC2}



static void Test_S11991C1()
{
  {
    init_simple_test("S11991C1");
    S11991C1 lv;
    check2(sizeof(lv), 104, "sizeof(S11991C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11991C1)");
    check_field_offset(lv, s11991c1f0, 0, "S11991C1.s11991c1f0");
    check_field_offset(lv, s11991c1f1, 52, "S11991C1.s11991c1f1");
  }
}
static Arrange_To_Call_Me vS11991C1(Test_S11991C1, "S11991C1", 104);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1050C3  : S16567C15_nt {
};
//SIG(-1 S1050C3) C1{ BC2{ m Fi}}



static void Test_S1050C3()
{
  extern Class_Descriptor cd_S1050C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1050C3, buf);
    S1050C3 &lv = *(new (buf) S1050C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1050C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1050C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1050C3");
    test_class_info(&lv, &cd_S1050C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1050C3(Test_S1050C3, "S1050C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1050C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1050C3[];
Class_Descriptor cd_S1050C3 = {  "S1050C3", // class name
  bases_S1050C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1050C3),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  S1050C2  : S1050C3 {
  virtual  ~S1050C2(); // _ZN7S1050C2D1Ev
  virtual void  v2(); // _ZN7S1050C22v2Ev
  S1050C2(); // tgen
};
//SIG(-1 S1050C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1050C2()
{
  extern Class_Descriptor cd_S1050C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1050C2, buf);
    S1050C2 *dp, &lv = *(dp=new (buf) S1050C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1050C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1050C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1050C3*), ABISELECT(8,4), "S1050C2");
    check_base_class_offset(lv, (S1050C3*), ABISELECT(8,4), "S1050C2");
    test_class_info(&lv, &cd_S1050C2);
    dp->~S1050C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1050C2(Test_S1050C2, "S1050C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1050C2C1Ev();
extern void _ZN7S1050C2D1Ev();
Name_Map name_map_S1050C2[] = {
  NSPAIR(_ZN7S1050C2C1Ev),
  NSPAIR(_ZN7S1050C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1050C3;
extern VTBL_ENTRY _ZTI7S1050C3[];
static Base_Class bases_S1050C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1050C3,    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 _ZTI7S1050C2[];
extern void _ZN7S1050C2D1Ev();
extern void _ZN7S1050C2D0Ev();
extern void _ZN7S1050C22v2Ev();
static  VTBL_ENTRY vtc_S1050C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1050C2[0]),
  (VTBL_ENTRY)&_ZN7S1050C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1050C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1050C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1050C2[];
extern  VTBL_ENTRY _ZTV7S1050C2[];
Class_Descriptor cd_S1050C2 = {  "S1050C2", // class name
  bases_S1050C2, 2,
  &(vtc_S1050C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1050C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1050C2),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  S1050C1  : S1050C2 {
  int s1050c1f0[3];
  ::S770C9_nt s1050c1f1;
  ::S744C15_nt s1050c1f2;
  virtual void  v1(); // _ZN7S1050C12v1Ev
  ~S1050C1(); // tgen
  S1050C1(); // tgen
};
//SIG(1 S1050C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 Fi[3] FC5{ m Fp} FC6{ m Fp}}


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

static void Test_S1050C1()
{
  extern Class_Descriptor cd_S1050C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S1050C1, buf);
    S1050C1 *dp, &lv = *(dp=new (buf) S1050C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S1050C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1050C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1050C3*)(S1050C2*), ABISELECT(8,4), "S1050C1");
    check_base_class_offset(lv, (S1050C3*)(S1050C2*), ABISELECT(8,4), "S1050C1");
    check_base_class_offset(lv, (S1050C2*), 0, "S1050C1");
    check_field_offset(lv, s1050c1f0, ABISELECT(12,8), "S1050C1.s1050c1f0");
    check_field_offset(lv, s1050c1f1, ABISELECT(24,20), "S1050C1.s1050c1f1");
    check_field_offset(lv, s1050c1f2, ABISELECT(32,24), "S1050C1.s1050c1f2");
    test_class_info(&lv, &cd_S1050C1);
    dp->~S1050C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1050C1(Test_S1050C1, "S1050C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S1050C1C1Ev();
extern void _ZN7S1050C1D1Ev();
Name_Map name_map_S1050C1[] = {
  NSPAIR(_ZN7S1050C1C1Ev),
  NSPAIR(_ZN7S1050C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1050C3;
extern VTBL_ENTRY _ZTI7S1050C3[];
extern Class_Descriptor cd_S1050C2;
extern VTBL_ENTRY _ZTI7S1050C2[];
extern  VTBL_ENTRY _ZTV7S1050C2[];
static Base_Class bases_S1050C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1050C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1050C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1050C1[];
extern void _ZN7S1050C1D1Ev();
extern void _ZN7S1050C1D0Ev();
extern void _ZN7S1050C22v2Ev();
extern void _ZN7S1050C12v1Ev();
static  VTBL_ENTRY vtc_S1050C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1050C1[0]),
  (VTBL_ENTRY)&_ZN7S1050C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1050C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1050C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1050C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1050C1[];
extern  VTBL_ENTRY _ZTV7S1050C1[];
Class_Descriptor cd_S1050C1 = {  "S1050C1", // class name
  bases_S1050C1, 3,
  &(vtc_S1050C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S1050C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1050C1),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  S13308C1  {
  int s13308c1f0[3];
  char s13308c1f1[32];
  int s13308c1f2[7];
  ::S770C16_nt s13308c1f3;
  int s13308c1f4;
  char s13308c1f5[36];
  int s13308c1f6[3];
  char s13308c1f7[0];
};
//SIG(1 S13308C1) C1{ Fi[3] Fc[32] Fi[7] FC2{ Fc[4]} Fi Fc[36] Fi[3] Fc[0]}



static void Test_S13308C1()
{
  {
    init_simple_test("S13308C1");
    S13308C1 lv;
    check2(sizeof(lv), 128, "sizeof(S13308C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13308C1)");
    check_field_offset(lv, s13308c1f0, 0, "S13308C1.s13308c1f0");
    check_field_offset(lv, s13308c1f1, 12, "S13308C1.s13308c1f1");
    check_field_offset(lv, s13308c1f2, 44, "S13308C1.s13308c1f2");
    check_field_offset(lv, s13308c1f3, 72, "S13308C1.s13308c1f3");
    check_field_offset(lv, s13308c1f4, 76, "S13308C1.s13308c1f4");
    check_field_offset(lv, s13308c1f5, 80, "S13308C1.s13308c1f5");
    check_field_offset(lv, s13308c1f6, 116, "S13308C1.s13308c1f6");
    check_field_offset(lv, s13308c1f7, 128, "S13308C1.s13308c1f7");
  }
}
static Arrange_To_Call_Me vS13308C1(Test_S13308C1, "S13308C1", 128);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16832C1  {
  int s16832c1f0;
  ::S3047C29_nt s16832c1f1;
  int s16832c1f2;
  void *s16832c1f3;
  int s16832c1f4;
  void *s16832c1f5[2];
  int s16832c1f6;
  void *s16832c1f7;
  void  mf16832c1(); // _ZN8S16832C19mf16832c1Ev
};
//SIG(1 S16832C1) C1{ m Fi FC2{ m Fs[6] Fi[2] Fc Fs} Fi Fp Fi Fp[2] Fi Fp}


void  S16832C1 ::mf16832c1(){}

static void Test_S16832C1()
{
  {
    init_simple_test("S16832C1");
    S16832C1 lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S16832C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16832C1)");
    check_field_offset(lv, s16832c1f0, 0, "S16832C1.s16832c1f0");
    check_field_offset(lv, s16832c1f1, 4, "S16832C1.s16832c1f1");
    check_field_offset(lv, s16832c1f2, 28, "S16832C1.s16832c1f2");
    check_field_offset(lv, s16832c1f3, 32, "S16832C1.s16832c1f3");
    check_field_offset(lv, s16832c1f4, ABISELECT(40,36), "S16832C1.s16832c1f4");
    check_field_offset(lv, s16832c1f5, ABISELECT(48,40), "S16832C1.s16832c1f5");
    check_field_offset(lv, s16832c1f6, ABISELECT(64,48), "S16832C1.s16832c1f6");
    check_field_offset(lv, s16832c1f7, ABISELECT(72,52), "S16832C1.s16832c1f7");
  }
}
static Arrange_To_Call_Me vS16832C1(Test_S16832C1, "S16832C1", ABISELECT(80,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11041C1  {
  char s11041c1f0[98];
  int s11041c1f1;
  ::S770C19 s11041c1f2;
};
//SIG(1 S11041C1) C1{ Fc[98] Fi FU2{ FC3{ Fi Fi} FL FC4{ Fi Fi Fi Fc[128]}}}



static void Test_S11041C1()
{
  {
    init_simple_test("S11041C1");
    S11041C1 lv;
    check2(sizeof(lv), ABISELECT(248,244), "sizeof(S11041C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11041C1)");
    check_field_offset(lv, s11041c1f0, 0, "S11041C1.s11041c1f0");
    check_field_offset(lv, s11041c1f1, 100, "S11041C1.s11041c1f1");
    check_field_offset(lv, s11041c1f2, 104, "S11041C1.s11041c1f2");
  }
}
static Arrange_To_Call_Me vS11041C1(Test_S11041C1, "S11041C1", ABISELECT(248,244));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4035C2  : S4034C3_nt {
  int s4035c2f0[2];
  char s4035c2f1;
  virtual  ~S4035C2(); // _ZN7S4035C2D1Ev
  S4035C2(); // tgen
};
//SIG(-1 S4035C2) C1{ BC2{ vd m} vd Fi[2] Fc}


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

static void Test_S4035C2()
{
  extern Class_Descriptor cd_S4035C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4035C2, buf);
    S4035C2 *dp, &lv = *(dp=new (buf) S4035C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4035C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4035C2)");
    check_base_class_offset(lv, (S4034C3_nt*), 0, "S4035C2");
    check_field_offset(lv, s4035c2f0, ABISELECT(8,4), "S4035C2.s4035c2f0");
    check_field_offset(lv, s4035c2f1, ABISELECT(16,12), "S4035C2.s4035c2f1");
    test_class_info(&lv, &cd_S4035C2);
    dp->~S4035C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4035C2(Test_S4035C2, "S4035C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4035C2C1Ev();
extern void _ZN7S4035C2D1Ev();
Name_Map name_map_S4035C2[] = {
  NSPAIR(_ZN7S4035C2C1Ev),
  NSPAIR(_ZN7S4035C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4034C3_nt;
extern VTBL_ENTRY _ZTI10S4034C3_nt[];
extern  VTBL_ENTRY _ZTV10S4034C3_nt[];
static Base_Class bases_S4035C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4034C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4035C2[];
extern void _ZN7S4035C2D1Ev();
extern void _ZN7S4035C2D0Ev();
static  VTBL_ENTRY vtc_S4035C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4035C2[0]),
  (VTBL_ENTRY)&_ZN7S4035C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4035C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S4035C2[];
extern  VTBL_ENTRY _ZTV7S4035C2[];
Class_Descriptor cd_S4035C2 = {  "S4035C2", // class name
  bases_S4035C2, 1,
  &(vtc_S4035C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4035C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4035C2),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  S4035C1  : S4035C2 {
  int s4035c1f0;
  ::S770C9_nt s4035c1f1;
  char s4035c1f2[127];
  virtual  ~S4035C1(); // _ZN7S4035C1D1Ev
  S4035C1(); // tgen
};
//SIG(1 S4035C1) C1{ BC2{ BC3{ vd m} vd Fi[2] Fc} vd Fi FC4{ m Fp} Fc[127]}


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

static void Test_S4035C1()
{
  extern Class_Descriptor cd_S4035C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,39)];
    init_test(&cd_S4035C1, buf);
    S4035C1 *dp, &lv = *(dp=new (buf) S4035C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,152), "sizeof(S4035C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4035C1)");
    check_base_class_offset(lv, (S4034C3_nt*)(S4035C2*), 0, "S4035C1");
    check_base_class_offset(lv, (S4035C2*), 0, "S4035C1");
    check_field_offset(lv, s4035c1f0, ABISELECT(20,16), "S4035C1.s4035c1f0");
    check_field_offset(lv, s4035c1f1, ABISELECT(24,20), "S4035C1.s4035c1f1");
    check_field_offset(lv, s4035c1f2, ABISELECT(32,24), "S4035C1.s4035c1f2");
    test_class_info(&lv, &cd_S4035C1);
    dp->~S4035C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4035C1(Test_S4035C1, "S4035C1", ABISELECT(160,152));

#else // __cplusplus

extern void _ZN7S4035C1C1Ev();
extern void _ZN7S4035C1D1Ev();
Name_Map name_map_S4035C1[] = {
  NSPAIR(_ZN7S4035C1C1Ev),
  NSPAIR(_ZN7S4035C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4034C3_nt;
extern VTBL_ENTRY _ZTI10S4034C3_nt[];
extern  VTBL_ENTRY _ZTV10S4034C3_nt[];
extern Class_Descriptor cd_S4035C2;
extern VTBL_ENTRY _ZTI7S4035C2[];
extern  VTBL_ENTRY _ZTV7S4035C2[];
static Base_Class bases_S4035C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4034C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4035C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4035C1[];
extern void _ZN7S4035C1D1Ev();
extern void _ZN7S4035C1D0Ev();
static  VTBL_ENTRY vtc_S4035C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4035C1[0]),
  (VTBL_ENTRY)&_ZN7S4035C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4035C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S4035C1[];
extern  VTBL_ENTRY _ZTV7S4035C1[];
Class_Descriptor cd_S4035C1 = {  "S4035C1", // class name
  bases_S4035C1, 2,
  &(vtc_S4035C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,152), // object size
  NSPAIRA(_ZTI7S4035C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4035C1),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  S389C4  : S16567C15_nt {
};
//SIG(-1 S389C4) C1{ BC2{ m Fi}}



static void Test_S389C4()
{
  extern Class_Descriptor cd_S389C4;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S389C4, buf);
    S389C4 &lv = *(new (buf) S389C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S389C4)");
    check2(__alignof__(lv), 4, "__alignof__(S389C4)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S389C4");
    test_class_info(&lv, &cd_S389C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS389C4(Test_S389C4, "S389C4", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S389C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S389C4[];
Class_Descriptor cd_S389C4 = {  "S389C4", // class name
  bases_S389C4, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI6S389C4),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  S389C3  : S389C4 {
  virtual  ~S389C3(); // _ZN6S389C3D1Ev
  virtual void  v2(); // _ZN6S389C32v2Ev
  S389C3(); // tgen
};
//SIG(-1 S389C3) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S389C3()
{
  extern Class_Descriptor cd_S389C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S389C3, buf);
    S389C3 *dp, &lv = *(dp=new (buf) S389C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S389C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S389C3)");
    check_base_class_offset(lv, (S16567C15_nt*)(S389C4*), ABISELECT(8,4), "S389C3");
    check_base_class_offset(lv, (S389C4*), ABISELECT(8,4), "S389C3");
    test_class_info(&lv, &cd_S389C3);
    dp->~S389C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS389C3(Test_S389C3, "S389C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S389C3C1Ev();
extern void _ZN6S389C3D1Ev();
Name_Map name_map_S389C3[] = {
  NSPAIR(_ZN6S389C3C1Ev),
  NSPAIR(_ZN6S389C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S389C4;
extern VTBL_ENTRY _ZTI6S389C4[];
static Base_Class bases_S389C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S389C4,    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 _ZTI6S389C3[];
extern void _ZN6S389C3D1Ev();
extern void _ZN6S389C3D0Ev();
extern void _ZN6S389C32v2Ev();
static  VTBL_ENTRY vtc_S389C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S389C3[0]),
  (VTBL_ENTRY)&_ZN6S389C3D1Ev,
  (VTBL_ENTRY)&_ZN6S389C3D0Ev,
  (VTBL_ENTRY)&_ZN6S389C32v2Ev,
};
extern VTBL_ENTRY _ZTI6S389C3[];
extern  VTBL_ENTRY _ZTV6S389C3[];
Class_Descriptor cd_S389C3 = {  "S389C3", // class name
  bases_S389C3, 2,
  &(vtc_S389C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S389C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV6S389C3),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  S389C2  : S389C3 {
  ::S770C9_nt s389c2f0;
  __tsi64 s389c2f1;
  virtual  ~S389C2(); // _ZN6S389C2D1Ev
  S389C2(); // tgen
};
//SIG(-1 S389C2) C1{ BC2{ BC3{ BC4{ m Fi}} vd v1} vd FC5{ m Fp} FL}


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

static void Test_S389C2()
{
  extern Class_Descriptor cd_S389C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S389C2, buf);
    S389C2 *dp, &lv = *(dp=new (buf) S389C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S389C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S389C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S389C4*)(S389C3*), ABISELECT(8,4), "S389C2");
    check_base_class_offset(lv, (S389C4*)(S389C3*), ABISELECT(8,4), "S389C2");
    check_base_class_offset(lv, (S389C3*), 0, "S389C2");
    check_field_offset(lv, s389c2f0, ABISELECT(16,8), "S389C2.s389c2f0");
    check_field_offset(lv, s389c2f1, ABISELECT(24,12), "S389C2.s389c2f1");
    test_class_info(&lv, &cd_S389C2);
    dp->~S389C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS389C2(Test_S389C2, "S389C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN6S389C2C1Ev();
extern void _ZN6S389C2D1Ev();
Name_Map name_map_S389C2[] = {
  NSPAIR(_ZN6S389C2C1Ev),
  NSPAIR(_ZN6S389C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S389C4;
extern VTBL_ENTRY _ZTI6S389C4[];
extern Class_Descriptor cd_S389C3;
extern VTBL_ENTRY _ZTI6S389C3[];
extern  VTBL_ENTRY _ZTV6S389C3[];
static Base_Class bases_S389C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S389C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S389C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S389C2[];
extern void _ZN6S389C2D1Ev();
extern void _ZN6S389C2D0Ev();
extern void _ZN6S389C32v2Ev();
static  VTBL_ENTRY vtc_S389C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S389C2[0]),
  (VTBL_ENTRY)&_ZN6S389C2D1Ev,
  (VTBL_ENTRY)&_ZN6S389C2D0Ev,
  (VTBL_ENTRY)&_ZN6S389C32v2Ev,
};
extern VTBL_ENTRY _ZTI6S389C2[];
extern  VTBL_ENTRY _ZTV6S389C2[];
Class_Descriptor cd_S389C2 = {  "S389C2", // class name
  bases_S389C2, 3,
  &(vtc_S389C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI6S389C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S389C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S389C1  : S389C2 {
  virtual void  v1(); // _ZN6S389C12v1Ev
  ~S389C1(); // tgen
  S389C1(); // tgen
};
//SIG(1 S389C1) C1{ BC2{ BC3{ BC4{ BC5{ m Fi}} vd v2} vd FC6{ m Fp} FL} v1}


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

static void Test_S389C1()
{
  extern Class_Descriptor cd_S389C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S389C1, buf);
    S389C1 *dp, &lv = *(dp=new (buf) S389C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S389C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S389C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S389C4*)(S389C3*)(S389C2*), ABISELECT(8,4), "S389C1");
    check_base_class_offset(lv, (S389C4*)(S389C3*)(S389C2*), ABISELECT(8,4), "S389C1");
    check_base_class_offset(lv, (S389C3*)(S389C2*), 0, "S389C1");
    check_base_class_offset(lv, (S389C2*), 0, "S389C1");
    test_class_info(&lv, &cd_S389C1);
    dp->~S389C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS389C1(Test_S389C1, "S389C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN6S389C1C1Ev();
extern void _ZN6S389C1D1Ev();
Name_Map name_map_S389C1[] = {
  NSPAIR(_ZN6S389C1C1Ev),
  NSPAIR(_ZN6S389C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S389C4;
extern VTBL_ENTRY _ZTI6S389C4[];
extern Class_Descriptor cd_S389C3;
extern VTBL_ENTRY _ZTI6S389C3[];
extern  VTBL_ENTRY _ZTV6S389C3[];
extern Class_Descriptor cd_S389C2;
extern VTBL_ENTRY _ZTI6S389C2[];
extern  VTBL_ENTRY _ZTV6S389C2[];
static Base_Class bases_S389C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S389C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S389C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S389C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S389C1[];
extern void _ZN6S389C1D1Ev();
extern void _ZN6S389C1D0Ev();
extern void _ZN6S389C32v2Ev();
extern void _ZN6S389C12v1Ev();
static  VTBL_ENTRY vtc_S389C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S389C1[0]),
  (VTBL_ENTRY)&_ZN6S389C1D1Ev,
  (VTBL_ENTRY)&_ZN6S389C1D0Ev,
  (VTBL_ENTRY)&_ZN6S389C32v2Ev,
  (VTBL_ENTRY)&_ZN6S389C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S389C1[];
extern  VTBL_ENTRY _ZTV6S389C1[];
Class_Descriptor cd_S389C1 = {  "S389C1", // class name
  bases_S389C1, 4,
  &(vtc_S389C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI6S389C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S389C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10691C4_nt  {
  void *s10691c4f0;
};
//SIG(1 S10691C4_nt) C1{ Fp}



//skip512 S10691C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S10691C2  {
  ::S770C20_nt s10691c2f0;
  ::S10691C4_nt s10691c2f1;
  void *s10691c2f2;
};
//SIG(1 S10691C2) U1{ FC2{ Fi Fi} FC3{ Fp} Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S10691C1  {
  char s10691c1f0[2];
  short s10691c1f1;
  int s10691c1f2[2];
  void *s10691c1f3[2];
  ::S10691C2 s10691c1f4;
};
//SIG(1 S10691C1) C1{ Fc[2] Fs Fi[2] Fp[2] FU2{ FC3{ Fi Fi} FC4{ Fp} Fp}}



static void Test_S10691C1()
{
  {
    init_simple_test("S10691C1");
    S10691C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S10691C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10691C1)");
    check_field_offset(lv, s10691c1f0, 0, "S10691C1.s10691c1f0");
    check_field_offset(lv, s10691c1f1, 2, "S10691C1.s10691c1f1");
    check_field_offset(lv, s10691c1f2, 4, "S10691C1.s10691c1f2");
    check_field_offset(lv, s10691c1f3, ABISELECT(16,12), "S10691C1.s10691c1f3");
    check_field_offset(lv, s10691c1f4, ABISELECT(32,20), "S10691C1.s10691c1f4");
  }
}
static Arrange_To_Call_Me vS10691C1(Test_S10691C1, "S10691C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12034C1  {
  ::S294C18 s12034c1f0;
  ::S294C18 s12034c1f1;
  int s12034c1f2[2];
};
//SIG(1 S12034C1) C1{ FC2{ m Fi FC3{ m Fs[6] Fi[2] Fc Fs} Fc} FC2 Fi[2]}



static void Test_S12034C1()
{
  {
    init_simple_test("S12034C1");
    S12034C1 lv;
    check2(sizeof(lv), 72, "sizeof(S12034C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12034C1)");
    check_field_offset(lv, s12034c1f0, 0, "S12034C1.s12034c1f0");
    check_field_offset(lv, s12034c1f1, 32, "S12034C1.s12034c1f1");
    check_field_offset(lv, s12034c1f2, 64, "S12034C1.s12034c1f2");
  }
}
static Arrange_To_Call_Me vS12034C1(Test_S12034C1, "S12034C1", 72);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10383C3  {
  ::S3047C22_nt s10383c3f0;
  void  mf10383c3(); // _ZN8S10383C39mf10383c3Ev
};
//SIG(-1 S10383C3) C1{ m FC2{ BC3{ vd v3 v4} vd v1 v2 FL}}


void  S10383C3 ::mf10383c3(){}

static void Test_S10383C3()
{
  {
    init_simple_test("S10383C3");
    S10383C3 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S10383C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10383C3)");
    check_field_offset(lv, s10383c3f0, 0, "S10383C3.s10383c3f0");
  }
}
static Arrange_To_Call_Me vS10383C3(Test_S10383C3, "S10383C3", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10383C1  : S20176C3_nt {
  ::S10383C3 s10383c1f0;
  virtual  ~S10383C1(); // _ZN8S10383C1D1Ev
  S10383C1(); // tgen
};
//SIG(1 S10383C1) C1{ BC2{} vd FC3{ m FC4{ BC5{ vd v3 v4} vd v1 v2 FL}}}


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

static void Test_S10383C1()
{
  extern Class_Descriptor cd_S10383C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S10383C1, buf);
    S10383C1 *dp, &lv = *(dp=new (buf) S10383C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S10383C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10383C1)");
    check_base_class_offset(lv, (S20176C3_nt*), 0, "S10383C1");
    check_field_offset(lv, s10383c1f0, ABISELECT(8,4), "S10383C1.s10383c1f0");
    test_class_info(&lv, &cd_S10383C1);
    dp->~S10383C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10383C1(Test_S10383C1, "S10383C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S10383C1C1Ev();
extern void _ZN8S10383C1D1Ev();
Name_Map name_map_S10383C1[] = {
  NSPAIR(_ZN8S10383C1C1Ev),
  NSPAIR(_ZN8S10383C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20176C3_nt;
extern VTBL_ENTRY _ZTI11S20176C3_nt[];
static Base_Class bases_S10383C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20176C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10383C1[];
extern void _ZN8S10383C1D1Ev();
extern void _ZN8S10383C1D0Ev();
static  VTBL_ENTRY vtc_S10383C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10383C1[0]),
  (VTBL_ENTRY)&_ZN8S10383C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10383C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S10383C1[];
extern  VTBL_ENTRY _ZTV8S10383C1[];
Class_Descriptor cd_S10383C1 = {  "S10383C1", // class name
  bases_S10383C1, 1,
  &(vtc_S10383C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S10383C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10383C1),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  S5469C2  {
  char s5469c2f0;
  ::S770C16_nt s5469c2f1;
  char s5469c2f2[138];
  __tsi64 s5469c2f3;
  int s5469c2f4;
  char s5469c2f5[256];
};
//SIG(-1 S5469C2) C1{ Fc FC2{ Fc[4]} Fc[138] FL Fi Fc[256]}



static void Test_S5469C2()
{
  {
    init_simple_test("S5469C2");
    S5469C2 lv;
    check2(sizeof(lv), ABISELECT(416,412), "sizeof(S5469C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5469C2)");
    check_field_offset(lv, s5469c2f0, 0, "S5469C2.s5469c2f0");
    check_field_offset(lv, s5469c2f1, 1, "S5469C2.s5469c2f1");
    check_field_offset(lv, s5469c2f2, 5, "S5469C2.s5469c2f2");
    check_field_offset(lv, s5469c2f3, 144, "S5469C2.s5469c2f3");
    check_field_offset(lv, s5469c2f4, 152, "S5469C2.s5469c2f4");
    check_field_offset(lv, s5469c2f5, 156, "S5469C2.s5469c2f5");
  }
}
static Arrange_To_Call_Me vS5469C2(Test_S5469C2, "S5469C2", ABISELECT(416,412));

#else // __cplusplus

Class_Descriptor cd_S5469C2 = {  "S5469C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(416,412), // 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  S5469C1  : S5469C2 {
  int s5469c1f0;
  void *s5469c1f1;
};
//SIG(1 S5469C1) C1{ BC2{ Fc FC3{ Fc[4]} Fc[138] FL Fi Fc[256]} Fi Fp}



static void Test_S5469C1()
{
  extern Class_Descriptor cd_S5469C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,106)];
    init_test(&cd_S5469C1, buf);
    S5469C1 &lv = *(new (buf) S5469C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,420), "sizeof(S5469C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5469C1)");
    check_base_class_offset(lv, (S5469C2*), 0, "S5469C1");
    check_field_offset(lv, s5469c1f0, ABISELECT(416,412), "S5469C1.s5469c1f0");
    check_field_offset(lv, s5469c1f1, ABISELECT(424,416), "S5469C1.s5469c1f1");
    test_class_info(&lv, &cd_S5469C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5469C1(Test_S5469C1, "S5469C1", ABISELECT(432,420));

#else // __cplusplus

extern Class_Descriptor cd_S5469C2;
static Base_Class bases_S5469C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5469C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5469C1 = {  "S5469C1", // class name
  bases_S5469C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(432,420), // 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  S1046C3  : S16567C15_nt {
};
//SIG(-1 S1046C3) C1{ BC2{ m Fi}}



static void Test_S1046C3()
{
  extern Class_Descriptor cd_S1046C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1046C3, buf);
    S1046C3 &lv = *(new (buf) S1046C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1046C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1046C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1046C3");
    test_class_info(&lv, &cd_S1046C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1046C3(Test_S1046C3, "S1046C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1046C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1046C3[];
Class_Descriptor cd_S1046C3 = {  "S1046C3", // class name
  bases_S1046C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1046C3),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  S1046C2  : S1046C3 {
  virtual  ~S1046C2(); // _ZN7S1046C2D1Ev
  virtual void  v2(); // _ZN7S1046C22v2Ev
  S1046C2(); // tgen
};
//SIG(-1 S1046C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1046C2()
{
  extern Class_Descriptor cd_S1046C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1046C2, buf);
    S1046C2 *dp, &lv = *(dp=new (buf) S1046C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1046C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1046C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1046C3*), ABISELECT(8,4), "S1046C2");
    check_base_class_offset(lv, (S1046C3*), ABISELECT(8,4), "S1046C2");
    test_class_info(&lv, &cd_S1046C2);
    dp->~S1046C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1046C2(Test_S1046C2, "S1046C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1046C2C1Ev();
extern void _ZN7S1046C2D1Ev();
Name_Map name_map_S1046C2[] = {
  NSPAIR(_ZN7S1046C2C1Ev),
  NSPAIR(_ZN7S1046C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1046C3;
extern VTBL_ENTRY _ZTI7S1046C3[];
static Base_Class bases_S1046C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1046C3,    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 _ZTI7S1046C2[];
extern void _ZN7S1046C2D1Ev();
extern void _ZN7S1046C2D0Ev();
extern void _ZN7S1046C22v2Ev();
static  VTBL_ENTRY vtc_S1046C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1046C2[0]),
  (VTBL_ENTRY)&_ZN7S1046C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1046C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1046C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1046C2[];
extern  VTBL_ENTRY _ZTV7S1046C2[];
Class_Descriptor cd_S1046C2 = {  "S1046C2", // class name
  bases_S1046C2, 2,
  &(vtc_S1046C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1046C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1046C2),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  S1046C1  : S1046C2 {
  ::S1039C6_nt s1046c1f0;
  virtual void  v1(); // _ZN7S1046C12v1Ev
  ~S1046C1(); // tgen
  S1046C1(); // tgen
};
//SIG(1 S1046C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 FC5{ m FC6{ m Fp}}}


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

static void Test_S1046C1()
{
  extern Class_Descriptor cd_S1046C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1046C1, buf);
    S1046C1 *dp, &lv = *(dp=new (buf) S1046C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1046C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1046C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1046C3*)(S1046C2*), ABISELECT(8,4), "S1046C1");
    check_base_class_offset(lv, (S1046C3*)(S1046C2*), ABISELECT(8,4), "S1046C1");
    check_base_class_offset(lv, (S1046C2*), 0, "S1046C1");
    check_field_offset(lv, s1046c1f0, ABISELECT(16,8), "S1046C1.s1046c1f0");
    test_class_info(&lv, &cd_S1046C1);
    dp->~S1046C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1046C1(Test_S1046C1, "S1046C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1046C1C1Ev();
extern void _ZN7S1046C1D1Ev();
Name_Map name_map_S1046C1[] = {
  NSPAIR(_ZN7S1046C1C1Ev),
  NSPAIR(_ZN7S1046C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1046C3;
extern VTBL_ENTRY _ZTI7S1046C3[];
extern Class_Descriptor cd_S1046C2;
extern VTBL_ENTRY _ZTI7S1046C2[];
extern  VTBL_ENTRY _ZTV7S1046C2[];
static Base_Class bases_S1046C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1046C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1046C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1046C1[];
extern void _ZN7S1046C1D1Ev();
extern void _ZN7S1046C1D0Ev();
extern void _ZN7S1046C22v2Ev();
extern void _ZN7S1046C12v1Ev();
static  VTBL_ENTRY vtc_S1046C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1046C1[0]),
  (VTBL_ENTRY)&_ZN7S1046C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1046C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1046C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1046C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1046C1[];
extern  VTBL_ENTRY _ZTV7S1046C1[];
Class_Descriptor cd_S1046C1 = {  "S1046C1", // class name
  bases_S1046C1, 3,
  &(vtc_S1046C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1046C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1046C1),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  S10908C1  {
  char s10908c1f0[4];
  int s10908c1f1[2];
  ::S3047C29_nt s10908c1f2;
  char s10908c1f3[32];
};
//SIG(1 S10908C1) C1{ Fc[4] Fi[2] FC2{ m Fs[6] Fi[2] Fc Fs} Fc[32]}



static void Test_S10908C1()
{
  {
    init_simple_test("S10908C1");
    S10908C1 lv;
    check2(sizeof(lv), 68, "sizeof(S10908C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10908C1)");
    check_field_offset(lv, s10908c1f0, 0, "S10908C1.s10908c1f0");
    check_field_offset(lv, s10908c1f1, 4, "S10908C1.s10908c1f1");
    check_field_offset(lv, s10908c1f2, 12, "S10908C1.s10908c1f2");
    check_field_offset(lv, s10908c1f3, 36, "S10908C1.s10908c1f3");
  }
}
static Arrange_To_Call_Me vS10908C1(Test_S10908C1, "S10908C1", 68);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1066C3  : S16567C15_nt {
};
//SIG(-1 S1066C3) C1{ BC2{ m Fi}}



static void Test_S1066C3()
{
  extern Class_Descriptor cd_S1066C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1066C3, buf);
    S1066C3 &lv = *(new (buf) S1066C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1066C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1066C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1066C3");
    test_class_info(&lv, &cd_S1066C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1066C3(Test_S1066C3, "S1066C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1066C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1066C3[];
Class_Descriptor cd_S1066C3 = {  "S1066C3", // class name
  bases_S1066C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1066C3),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  S1066C2  : S1066C3 {
  virtual  ~S1066C2(); // _ZN7S1066C2D1Ev
  virtual void  v2(); // _ZN7S1066C22v2Ev
  S1066C2(); // tgen
};
//SIG(-1 S1066C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1066C2()
{
  extern Class_Descriptor cd_S1066C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1066C2, buf);
    S1066C2 *dp, &lv = *(dp=new (buf) S1066C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1066C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1066C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1066C3*), ABISELECT(8,4), "S1066C2");
    check_base_class_offset(lv, (S1066C3*), ABISELECT(8,4), "S1066C2");
    test_class_info(&lv, &cd_S1066C2);
    dp->~S1066C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1066C2(Test_S1066C2, "S1066C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1066C2C1Ev();
extern void _ZN7S1066C2D1Ev();
Name_Map name_map_S1066C2[] = {
  NSPAIR(_ZN7S1066C2C1Ev),
  NSPAIR(_ZN7S1066C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1066C3;
extern VTBL_ENTRY _ZTI7S1066C3[];
static Base_Class bases_S1066C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1066C3,    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 _ZTI7S1066C2[];
extern void _ZN7S1066C2D1Ev();
extern void _ZN7S1066C2D0Ev();
extern void _ZN7S1066C22v2Ev();
static  VTBL_ENTRY vtc_S1066C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1066C2[0]),
  (VTBL_ENTRY)&_ZN7S1066C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1066C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1066C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1066C2[];
extern  VTBL_ENTRY _ZTV7S1066C2[];
Class_Descriptor cd_S1066C2 = {  "S1066C2", // class name
  bases_S1066C2, 2,
  &(vtc_S1066C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1066C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1066C2),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  S1066C1  : S1066C2 {
  ::S3049C15_nt s1066c1f0;
  virtual  ~S1066C1(); // _ZN7S1066C1D1Ev
  virtual void  v1(); // _ZN7S1066C12v1Ev
  S1066C1(); // tgen
};
//SIG(1 S1066C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} vd v1 FC5{ m FL[4]}}


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

static void Test_S1066C1()
{
  extern Class_Descriptor cd_S1066C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S1066C1, buf);
    S1066C1 *dp, &lv = *(dp=new (buf) S1066C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S1066C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1066C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1066C3*)(S1066C2*), ABISELECT(8,4), "S1066C1");
    check_base_class_offset(lv, (S1066C3*)(S1066C2*), ABISELECT(8,4), "S1066C1");
    check_base_class_offset(lv, (S1066C2*), 0, "S1066C1");
    check_field_offset(lv, s1066c1f0, ABISELECT(16,8), "S1066C1.s1066c1f0");
    test_class_info(&lv, &cd_S1066C1);
    dp->~S1066C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1066C1(Test_S1066C1, "S1066C1", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S1066C1C1Ev();
extern void _ZN7S1066C1D1Ev();
Name_Map name_map_S1066C1[] = {
  NSPAIR(_ZN7S1066C1C1Ev),
  NSPAIR(_ZN7S1066C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1066C3;
extern VTBL_ENTRY _ZTI7S1066C3[];
extern Class_Descriptor cd_S1066C2;
extern VTBL_ENTRY _ZTI7S1066C2[];
extern  VTBL_ENTRY _ZTV7S1066C2[];
static Base_Class bases_S1066C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1066C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1066C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1066C1[];
extern void _ZN7S1066C1D1Ev();
extern void _ZN7S1066C1D0Ev();
extern void _ZN7S1066C22v2Ev();
extern void _ZN7S1066C12v1Ev();
static  VTBL_ENTRY vtc_S1066C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1066C1[0]),
  (VTBL_ENTRY)&_ZN7S1066C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1066C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1066C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1066C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1066C1[];
extern  VTBL_ENTRY _ZTV7S1066C1[];
Class_Descriptor cd_S1066C1 = {  "S1066C1", // class name
  bases_S1066C1, 3,
  &(vtc_S1066C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S1066C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1066C1),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  S18142C1  {
  void *s18142c1f0[3];
  ::S3047C22_nt s18142c1f1;
  char s18142c1f2[2];
  void  mf18142c1(); // _ZN8S18142C19mf18142c1Ev
};
//SIG(1 S18142C1) C1{ m Fp[3] FC2{ BC3{ vd v3 v4} vd v1 v2 FL} Fc[2]}


void  S18142C1 ::mf18142c1(){}

static void Test_S18142C1()
{
  {
    init_simple_test("S18142C1");
    S18142C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S18142C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18142C1)");
    check_field_offset(lv, s18142c1f0, 0, "S18142C1.s18142c1f0");
    check_field_offset(lv, s18142c1f1, ABISELECT(24,12), "S18142C1.s18142c1f1");
    check_field_offset(lv, s18142c1f2, ABISELECT(40,24), "S18142C1.s18142c1f2");
  }
}
static Arrange_To_Call_Me vS18142C1(Test_S18142C1, "S18142C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10410C2  {
  void *s10410c2f0;
  virtual  ~S10410C2(); // _ZN8S10410C2D1Ev
  virtual void  v2(); // _ZN8S10410C22v2Ev
  S10410C2(); // tgen
};
//SIG(-1 S10410C2) C1{ vd v1 Fp}


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

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

#else // __cplusplus

extern void _ZN8S10410C2C1Ev();
extern void _ZN8S10410C2D1Ev();
Name_Map name_map_S10410C2[] = {
  NSPAIR(_ZN8S10410C2C1Ev),
  NSPAIR(_ZN8S10410C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10410C2[];
extern void _ZN8S10410C2D1Ev();
extern void _ZN8S10410C2D0Ev();
extern void _ZN8S10410C22v2Ev();
static  VTBL_ENTRY vtc_S10410C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10410C2[0]),
  (VTBL_ENTRY)&_ZN8S10410C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10410C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10410C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S10410C2[];
extern  VTBL_ENTRY _ZTV8S10410C2[];
Class_Descriptor cd_S10410C2 = {  "S10410C2", // class name
  0,0,//no base classes
  &(vtc_S10410C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10410C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10410C2),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  S10410C1  : S10410C2 {
  int s10410c1f0[3];
  ::S770C15_nt s10410c1f1;
  int s10410c1f2;
  virtual  ~S10410C1(); // _ZN8S10410C1D1Ev
  virtual void  v1(); // _ZN8S10410C12v1Ev
  S10410C1(); // tgen
};
//SIG(1 S10410C1) C1{ BC2{ vd v2 Fp} vd v1 Fi[3] FC3{ Fc[128]} Fi}


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

static void Test_S10410C1()
{
  extern Class_Descriptor cd_S10410C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,39)];
    init_test(&cd_S10410C1, buf);
    S10410C1 *dp, &lv = *(dp=new (buf) S10410C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,152), "sizeof(S10410C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10410C1)");
    check_base_class_offset(lv, (S10410C2*), 0, "S10410C1");
    check_field_offset(lv, s10410c1f0, ABISELECT(16,8), "S10410C1.s10410c1f0");
    check_field_offset(lv, s10410c1f1, ABISELECT(28,20), "S10410C1.s10410c1f1");
    check_field_offset(lv, s10410c1f2, ABISELECT(156,148), "S10410C1.s10410c1f2");
    test_class_info(&lv, &cd_S10410C1);
    dp->~S10410C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10410C1(Test_S10410C1, "S10410C1", ABISELECT(160,152));

#else // __cplusplus

extern void _ZN8S10410C1C1Ev();
extern void _ZN8S10410C1D1Ev();
Name_Map name_map_S10410C1[] = {
  NSPAIR(_ZN8S10410C1C1Ev),
  NSPAIR(_ZN8S10410C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10410C2;
extern VTBL_ENTRY _ZTI8S10410C2[];
extern  VTBL_ENTRY _ZTV8S10410C2[];
static Base_Class bases_S10410C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10410C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10410C1[];
extern void _ZN8S10410C1D1Ev();
extern void _ZN8S10410C1D0Ev();
extern void _ZN8S10410C22v2Ev();
extern void _ZN8S10410C12v1Ev();
static  VTBL_ENTRY vtc_S10410C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10410C1[0]),
  (VTBL_ENTRY)&_ZN8S10410C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10410C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10410C22v2Ev,
  (VTBL_ENTRY)&_ZN8S10410C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S10410C1[];
extern  VTBL_ENTRY _ZTV8S10410C1[];
Class_Descriptor cd_S10410C1 = {  "S10410C1", // class name
  bases_S10410C1, 1,
  &(vtc_S10410C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,152), // object size
  NSPAIRA(_ZTI8S10410C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10410C1),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  S11024C1  {
  char s11024c1f0[80];
  int s11024c1f1;
  ::S3047C29_nt s11024c1f2;
  char s11024c1f3[256];
};
//SIG(1 S11024C1) C1{ Fc[80] Fi FC2{ m Fs[6] Fi[2] Fc Fs} Fc[256]}



static void Test_S11024C1()
{
  {
    init_simple_test("S11024C1");
    S11024C1 lv;
    check2(sizeof(lv), 364, "sizeof(S11024C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11024C1)");
    check_field_offset(lv, s11024c1f0, 0, "S11024C1.s11024c1f0");
    check_field_offset(lv, s11024c1f1, 80, "S11024C1.s11024c1f1");
    check_field_offset(lv, s11024c1f2, 84, "S11024C1.s11024c1f2");
    check_field_offset(lv, s11024c1f3, 108, "S11024C1.s11024c1f3");
  }
}
static Arrange_To_Call_Me vS11024C1(Test_S11024C1, "S11024C1", 364);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1074C3  : S16567C15_nt {
};
//SIG(-1 S1074C3) C1{ BC2{ m Fi}}



static void Test_S1074C3()
{
  extern Class_Descriptor cd_S1074C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1074C3, buf);
    S1074C3 &lv = *(new (buf) S1074C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1074C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1074C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1074C3");
    test_class_info(&lv, &cd_S1074C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1074C3(Test_S1074C3, "S1074C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1074C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1074C3[];
Class_Descriptor cd_S1074C3 = {  "S1074C3", // class name
  bases_S1074C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1074C3),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  S1074C2  : S1074C3 {
  virtual  ~S1074C2(); // _ZN7S1074C2D1Ev
  virtual void  v2(); // _ZN7S1074C22v2Ev
  S1074C2(); // tgen
};
//SIG(-1 S1074C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1074C2()
{
  extern Class_Descriptor cd_S1074C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1074C2, buf);
    S1074C2 *dp, &lv = *(dp=new (buf) S1074C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1074C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1074C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1074C3*), ABISELECT(8,4), "S1074C2");
    check_base_class_offset(lv, (S1074C3*), ABISELECT(8,4), "S1074C2");
    test_class_info(&lv, &cd_S1074C2);
    dp->~S1074C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1074C2(Test_S1074C2, "S1074C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1074C2C1Ev();
extern void _ZN7S1074C2D1Ev();
Name_Map name_map_S1074C2[] = {
  NSPAIR(_ZN7S1074C2C1Ev),
  NSPAIR(_ZN7S1074C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1074C3;
extern VTBL_ENTRY _ZTI7S1074C3[];
static Base_Class bases_S1074C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1074C3,    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 _ZTI7S1074C2[];
extern void _ZN7S1074C2D1Ev();
extern void _ZN7S1074C2D0Ev();
extern void _ZN7S1074C22v2Ev();
static  VTBL_ENTRY vtc_S1074C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1074C2[0]),
  (VTBL_ENTRY)&_ZN7S1074C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1074C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1074C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1074C2[];
extern  VTBL_ENTRY _ZTV7S1074C2[];
Class_Descriptor cd_S1074C2 = {  "S1074C2", // class name
  bases_S1074C2, 2,
  &(vtc_S1074C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1074C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1074C2),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  S1074C1  : S1074C2 {
  void *s1074c1f0;
  int s1074c1f1;
  void *s1074c1f2[2];
  virtual  ~S1074C1(); // _ZN7S1074C1D1Ev
  virtual void  v1(); // _ZN7S1074C12v1Ev
  S1074C1(); // tgen
};
//SIG(1 S1074C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} vd v1 Fp Fi Fp[2]}


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

static void Test_S1074C1()
{
  extern Class_Descriptor cd_S1074C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S1074C1, buf);
    S1074C1 *dp, &lv = *(dp=new (buf) S1074C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S1074C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1074C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1074C3*)(S1074C2*), ABISELECT(8,4), "S1074C1");
    check_base_class_offset(lv, (S1074C3*)(S1074C2*), ABISELECT(8,4), "S1074C1");
    check_base_class_offset(lv, (S1074C2*), 0, "S1074C1");
    check_field_offset(lv, s1074c1f0, ABISELECT(16,8), "S1074C1.s1074c1f0");
    check_field_offset(lv, s1074c1f1, ABISELECT(24,12), "S1074C1.s1074c1f1");
    check_field_offset(lv, s1074c1f2, ABISELECT(32,16), "S1074C1.s1074c1f2");
    test_class_info(&lv, &cd_S1074C1);
    dp->~S1074C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1074C1(Test_S1074C1, "S1074C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S1074C1C1Ev();
extern void _ZN7S1074C1D1Ev();
Name_Map name_map_S1074C1[] = {
  NSPAIR(_ZN7S1074C1C1Ev),
  NSPAIR(_ZN7S1074C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1074C3;
extern VTBL_ENTRY _ZTI7S1074C3[];
extern Class_Descriptor cd_S1074C2;
extern VTBL_ENTRY _ZTI7S1074C2[];
extern  VTBL_ENTRY _ZTV7S1074C2[];
static Base_Class bases_S1074C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1074C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1074C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1074C1[];
extern void _ZN7S1074C1D1Ev();
extern void _ZN7S1074C1D0Ev();
extern void _ZN7S1074C22v2Ev();
extern void _ZN7S1074C12v1Ev();
static  VTBL_ENTRY vtc_S1074C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1074C1[0]),
  (VTBL_ENTRY)&_ZN7S1074C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1074C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1074C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1074C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1074C1[];
extern  VTBL_ENTRY _ZTV7S1074C1[];
Class_Descriptor cd_S1074C1 = {  "S1074C1", // class name
  bases_S1074C1, 3,
  &(vtc_S1074C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S1074C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1074C1),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  S1068C3  : S16567C15_nt {
};
//SIG(-1 S1068C3) C1{ BC2{ m Fi}}



static void Test_S1068C3()
{
  extern Class_Descriptor cd_S1068C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1068C3, buf);
    S1068C3 &lv = *(new (buf) S1068C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1068C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1068C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1068C3");
    test_class_info(&lv, &cd_S1068C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1068C3(Test_S1068C3, "S1068C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1068C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1068C3[];
Class_Descriptor cd_S1068C3 = {  "S1068C3", // class name
  bases_S1068C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1068C3),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  S1068C2  : S1068C3 {
  virtual  ~S1068C2(); // _ZN7S1068C2D1Ev
  virtual void  v2(); // _ZN7S1068C22v2Ev
  S1068C2(); // tgen
};
//SIG(-1 S1068C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1068C2()
{
  extern Class_Descriptor cd_S1068C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1068C2, buf);
    S1068C2 *dp, &lv = *(dp=new (buf) S1068C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1068C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1068C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1068C3*), ABISELECT(8,4), "S1068C2");
    check_base_class_offset(lv, (S1068C3*), ABISELECT(8,4), "S1068C2");
    test_class_info(&lv, &cd_S1068C2);
    dp->~S1068C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1068C2(Test_S1068C2, "S1068C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1068C2C1Ev();
extern void _ZN7S1068C2D1Ev();
Name_Map name_map_S1068C2[] = {
  NSPAIR(_ZN7S1068C2C1Ev),
  NSPAIR(_ZN7S1068C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1068C3;
extern VTBL_ENTRY _ZTI7S1068C3[];
static Base_Class bases_S1068C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1068C3,    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 _ZTI7S1068C2[];
extern void _ZN7S1068C2D1Ev();
extern void _ZN7S1068C2D0Ev();
extern void _ZN7S1068C22v2Ev();
static  VTBL_ENTRY vtc_S1068C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1068C2[0]),
  (VTBL_ENTRY)&_ZN7S1068C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1068C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1068C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1068C2[];
extern  VTBL_ENTRY _ZTV7S1068C2[];
Class_Descriptor cd_S1068C2 = {  "S1068C2", // class name
  bases_S1068C2, 2,
  &(vtc_S1068C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1068C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1068C2),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  S1068C1  : S1068C2 {
  ::S770C9_nt s1068c1f0;
  virtual  ~S1068C1(); // _ZN7S1068C1D1Ev
  virtual void  v1(); // _ZN7S1068C12v1Ev
  S1068C1(); // tgen
};
//SIG(1 S1068C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} vd v1 FC5{ m Fp}}


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

static void Test_S1068C1()
{
  extern Class_Descriptor cd_S1068C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1068C1, buf);
    S1068C1 *dp, &lv = *(dp=new (buf) S1068C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1068C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1068C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1068C3*)(S1068C2*), ABISELECT(8,4), "S1068C1");
    check_base_class_offset(lv, (S1068C3*)(S1068C2*), ABISELECT(8,4), "S1068C1");
    check_base_class_offset(lv, (S1068C2*), 0, "S1068C1");
    check_field_offset(lv, s1068c1f0, ABISELECT(16,8), "S1068C1.s1068c1f0");
    test_class_info(&lv, &cd_S1068C1);
    dp->~S1068C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1068C1(Test_S1068C1, "S1068C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1068C1C1Ev();
extern void _ZN7S1068C1D1Ev();
Name_Map name_map_S1068C1[] = {
  NSPAIR(_ZN7S1068C1C1Ev),
  NSPAIR(_ZN7S1068C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1068C3;
extern VTBL_ENTRY _ZTI7S1068C3[];
extern Class_Descriptor cd_S1068C2;
extern VTBL_ENTRY _ZTI7S1068C2[];
extern  VTBL_ENTRY _ZTV7S1068C2[];
static Base_Class bases_S1068C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1068C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1068C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1068C1[];
extern void _ZN7S1068C1D1Ev();
extern void _ZN7S1068C1D0Ev();
extern void _ZN7S1068C22v2Ev();
extern void _ZN7S1068C12v1Ev();
static  VTBL_ENTRY vtc_S1068C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1068C1[0]),
  (VTBL_ENTRY)&_ZN7S1068C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1068C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1068C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1068C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1068C1[];
extern  VTBL_ENTRY _ZTV7S1068C1[];
Class_Descriptor cd_S1068C1 = {  "S1068C1", // class name
  bases_S1068C1, 3,
  &(vtc_S1068C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1068C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1068C1),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  S10596C1  {
  char s10596c1f0[1280];
  ::S3047C29_nt s10596c1f1;
  __tsi64 s10596c1f2;
  char s10596c1f3;
};
//SIG(1 S10596C1) C1{ Fc[1280] FC2{ m Fs[6] Fi[2] Fc Fs} FL Fc}



static void Test_S10596C1()
{
  {
    init_simple_test("S10596C1");
    S10596C1 lv;
    check2(sizeof(lv), ABISELECT(1320,1316), "sizeof(S10596C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10596C1)");
    check_field_offset(lv, s10596c1f0, 0, "S10596C1.s10596c1f0");
    check_field_offset(lv, s10596c1f1, 1280, "S10596C1.s10596c1f1");
    check_field_offset(lv, s10596c1f2, 1304, "S10596C1.s10596c1f2");
    check_field_offset(lv, s10596c1f3, 1312, "S10596C1.s10596c1f3");
  }
}
static Arrange_To_Call_Me vS10596C1(Test_S10596C1, "S10596C1", ABISELECT(1320,1316));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1069C3  : S16567C15_nt {
};
//SIG(-1 S1069C3) C1{ BC2{ m Fi}}



static void Test_S1069C3()
{
  extern Class_Descriptor cd_S1069C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1069C3, buf);
    S1069C3 &lv = *(new (buf) S1069C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1069C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1069C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1069C3");
    test_class_info(&lv, &cd_S1069C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1069C3(Test_S1069C3, "S1069C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1069C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1069C3[];
Class_Descriptor cd_S1069C3 = {  "S1069C3", // class name
  bases_S1069C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1069C3),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  S1069C2  : S1069C3 {
  virtual  ~S1069C2(); // _ZN7S1069C2D1Ev
  virtual void  v2(); // _ZN7S1069C22v2Ev
  S1069C2(); // tgen
};
//SIG(-1 S1069C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1069C2()
{
  extern Class_Descriptor cd_S1069C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1069C2, buf);
    S1069C2 *dp, &lv = *(dp=new (buf) S1069C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1069C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1069C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1069C3*), ABISELECT(8,4), "S1069C2");
    check_base_class_offset(lv, (S1069C3*), ABISELECT(8,4), "S1069C2");
    test_class_info(&lv, &cd_S1069C2);
    dp->~S1069C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1069C2(Test_S1069C2, "S1069C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1069C2C1Ev();
extern void _ZN7S1069C2D1Ev();
Name_Map name_map_S1069C2[] = {
  NSPAIR(_ZN7S1069C2C1Ev),
  NSPAIR(_ZN7S1069C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1069C3;
extern VTBL_ENTRY _ZTI7S1069C3[];
static Base_Class bases_S1069C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1069C3,    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 _ZTI7S1069C2[];
extern void _ZN7S1069C2D1Ev();
extern void _ZN7S1069C2D0Ev();
extern void _ZN7S1069C22v2Ev();
static  VTBL_ENTRY vtc_S1069C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1069C2[0]),
  (VTBL_ENTRY)&_ZN7S1069C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1069C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1069C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1069C2[];
extern  VTBL_ENTRY _ZTV7S1069C2[];
Class_Descriptor cd_S1069C2 = {  "S1069C2", // class name
  bases_S1069C2, 2,
  &(vtc_S1069C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1069C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1069C2),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  S1069C1  : S1069C2 {
  void *s1069c1f0;
  char s1069c1f1[5];
  virtual  ~S1069C1(); // _ZN7S1069C1D1Ev
  virtual void  v1(); // _ZN7S1069C12v1Ev
  S1069C1(); // tgen
};
//SIG(1 S1069C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} vd v1 Fp Fc[5]}


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

static void Test_S1069C1()
{
  extern Class_Descriptor cd_S1069C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1069C1, buf);
    S1069C1 *dp, &lv = *(dp=new (buf) S1069C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1069C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1069C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1069C3*)(S1069C2*), ABISELECT(8,4), "S1069C1");
    check_base_class_offset(lv, (S1069C3*)(S1069C2*), ABISELECT(8,4), "S1069C1");
    check_base_class_offset(lv, (S1069C2*), 0, "S1069C1");
    check_field_offset(lv, s1069c1f0, ABISELECT(16,8), "S1069C1.s1069c1f0");
    check_field_offset(lv, s1069c1f1, ABISELECT(24,12), "S1069C1.s1069c1f1");
    test_class_info(&lv, &cd_S1069C1);
    dp->~S1069C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1069C1(Test_S1069C1, "S1069C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1069C1C1Ev();
extern void _ZN7S1069C1D1Ev();
Name_Map name_map_S1069C1[] = {
  NSPAIR(_ZN7S1069C1C1Ev),
  NSPAIR(_ZN7S1069C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1069C3;
extern VTBL_ENTRY _ZTI7S1069C3[];
extern Class_Descriptor cd_S1069C2;
extern VTBL_ENTRY _ZTI7S1069C2[];
extern  VTBL_ENTRY _ZTV7S1069C2[];
static Base_Class bases_S1069C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1069C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1069C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1069C1[];
extern void _ZN7S1069C1D1Ev();
extern void _ZN7S1069C1D0Ev();
extern void _ZN7S1069C22v2Ev();
extern void _ZN7S1069C12v1Ev();
static  VTBL_ENTRY vtc_S1069C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1069C1[0]),
  (VTBL_ENTRY)&_ZN7S1069C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1069C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1069C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1069C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1069C1[];
extern  VTBL_ENTRY _ZTV7S1069C1[];
Class_Descriptor cd_S1069C1 = {  "S1069C1", // class name
  bases_S1069C1, 3,
  &(vtc_S1069C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1069C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1069C1),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  S1037C3  : S16567C15_nt {
};
//SIG(-1 S1037C3) C1{ BC2{ m Fi}}



static void Test_S1037C3()
{
  extern Class_Descriptor cd_S1037C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1037C3, buf);
    S1037C3 &lv = *(new (buf) S1037C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1037C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1037C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1037C3");
    test_class_info(&lv, &cd_S1037C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1037C3(Test_S1037C3, "S1037C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1037C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1037C3[];
Class_Descriptor cd_S1037C3 = {  "S1037C3", // class name
  bases_S1037C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1037C3),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  S1037C2  : S1037C3 {
  virtual  ~S1037C2(); // _ZN7S1037C2D1Ev
  virtual void  v2(); // _ZN7S1037C22v2Ev
  S1037C2(); // tgen
};
//SIG(-1 S1037C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1037C2()
{
  extern Class_Descriptor cd_S1037C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1037C2, buf);
    S1037C2 *dp, &lv = *(dp=new (buf) S1037C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1037C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1037C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1037C3*), ABISELECT(8,4), "S1037C2");
    check_base_class_offset(lv, (S1037C3*), ABISELECT(8,4), "S1037C2");
    test_class_info(&lv, &cd_S1037C2);
    dp->~S1037C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1037C2(Test_S1037C2, "S1037C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1037C2C1Ev();
extern void _ZN7S1037C2D1Ev();
Name_Map name_map_S1037C2[] = {
  NSPAIR(_ZN7S1037C2C1Ev),
  NSPAIR(_ZN7S1037C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1037C3;
extern VTBL_ENTRY _ZTI7S1037C3[];
static Base_Class bases_S1037C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1037C3,    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 _ZTI7S1037C2[];
extern void _ZN7S1037C2D1Ev();
extern void _ZN7S1037C2D0Ev();
extern void _ZN7S1037C22v2Ev();
static  VTBL_ENTRY vtc_S1037C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1037C2[0]),
  (VTBL_ENTRY)&_ZN7S1037C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1037C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1037C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1037C2[];
extern  VTBL_ENTRY _ZTV7S1037C2[];
Class_Descriptor cd_S1037C2 = {  "S1037C2", // class name
  bases_S1037C2, 2,
  &(vtc_S1037C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1037C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1037C2),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  S1037C1  : S1037C2 {
  ::S1035C6_nt s1037c1f0;
  virtual void  v1(); // _ZN7S1037C12v1Ev
  ~S1037C1(); // tgen
  S1037C1(); // tgen
};
//SIG(1 S1037C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 FC5{ FL[2]}}


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

static void Test_S1037C1()
{
  extern Class_Descriptor cd_S1037C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S1037C1, buf);
    S1037C1 *dp, &lv = *(dp=new (buf) S1037C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S1037C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1037C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1037C3*)(S1037C2*), ABISELECT(8,4), "S1037C1");
    check_base_class_offset(lv, (S1037C3*)(S1037C2*), ABISELECT(8,4), "S1037C1");
    check_base_class_offset(lv, (S1037C2*), 0, "S1037C1");
    check_field_offset(lv, s1037c1f0, ABISELECT(16,8), "S1037C1.s1037c1f0");
    test_class_info(&lv, &cd_S1037C1);
    dp->~S1037C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1037C1(Test_S1037C1, "S1037C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S1037C1C1Ev();
extern void _ZN7S1037C1D1Ev();
Name_Map name_map_S1037C1[] = {
  NSPAIR(_ZN7S1037C1C1Ev),
  NSPAIR(_ZN7S1037C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1037C3;
extern VTBL_ENTRY _ZTI7S1037C3[];
extern Class_Descriptor cd_S1037C2;
extern VTBL_ENTRY _ZTI7S1037C2[];
extern  VTBL_ENTRY _ZTV7S1037C2[];
static Base_Class bases_S1037C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1037C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1037C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1037C1[];
extern void _ZN7S1037C1D1Ev();
extern void _ZN7S1037C1D0Ev();
extern void _ZN7S1037C22v2Ev();
extern void _ZN7S1037C12v1Ev();
static  VTBL_ENTRY vtc_S1037C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1037C1[0]),
  (VTBL_ENTRY)&_ZN7S1037C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1037C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1037C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1037C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1037C1[];
extern  VTBL_ENTRY _ZTV7S1037C1[];
Class_Descriptor cd_S1037C1 = {  "S1037C1", // class name
  bases_S1037C1, 3,
  &(vtc_S1037C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S1037C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1037C1),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  S1049C3  : S16567C15_nt {
};
//SIG(-1 S1049C3) C1{ BC2{ m Fi}}



static void Test_S1049C3()
{
  extern Class_Descriptor cd_S1049C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1049C3, buf);
    S1049C3 &lv = *(new (buf) S1049C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1049C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1049C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1049C3");
    test_class_info(&lv, &cd_S1049C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1049C3(Test_S1049C3, "S1049C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1049C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1049C3[];
Class_Descriptor cd_S1049C3 = {  "S1049C3", // class name
  bases_S1049C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1049C3),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  S1049C2  : S1049C3 {
  virtual  ~S1049C2(); // _ZN7S1049C2D1Ev
  virtual void  v2(); // _ZN7S1049C22v2Ev
  S1049C2(); // tgen
};
//SIG(-1 S1049C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1049C2()
{
  extern Class_Descriptor cd_S1049C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1049C2, buf);
    S1049C2 *dp, &lv = *(dp=new (buf) S1049C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1049C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1049C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1049C3*), ABISELECT(8,4), "S1049C2");
    check_base_class_offset(lv, (S1049C3*), ABISELECT(8,4), "S1049C2");
    test_class_info(&lv, &cd_S1049C2);
    dp->~S1049C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1049C2(Test_S1049C2, "S1049C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1049C2C1Ev();
extern void _ZN7S1049C2D1Ev();
Name_Map name_map_S1049C2[] = {
  NSPAIR(_ZN7S1049C2C1Ev),
  NSPAIR(_ZN7S1049C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1049C3;
extern VTBL_ENTRY _ZTI7S1049C3[];
static Base_Class bases_S1049C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1049C3,    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 _ZTI7S1049C2[];
extern void _ZN7S1049C2D1Ev();
extern void _ZN7S1049C2D0Ev();
extern void _ZN7S1049C22v2Ev();
static  VTBL_ENTRY vtc_S1049C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1049C2[0]),
  (VTBL_ENTRY)&_ZN7S1049C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1049C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1049C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1049C2[];
extern  VTBL_ENTRY _ZTV7S1049C2[];
Class_Descriptor cd_S1049C2 = {  "S1049C2", // class name
  bases_S1049C2, 2,
  &(vtc_S1049C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1049C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1049C2),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  S1049C1  : S1049C2 {
  ::S770C9_nt s1049c1f0;
  virtual void  v1(); // _ZN7S1049C12v1Ev
  ~S1049C1(); // tgen
  S1049C1(); // tgen
};
//SIG(1 S1049C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 FC5{ m Fp}}


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

static void Test_S1049C1()
{
  extern Class_Descriptor cd_S1049C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1049C1, buf);
    S1049C1 *dp, &lv = *(dp=new (buf) S1049C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1049C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1049C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1049C3*)(S1049C2*), ABISELECT(8,4), "S1049C1");
    check_base_class_offset(lv, (S1049C3*)(S1049C2*), ABISELECT(8,4), "S1049C1");
    check_base_class_offset(lv, (S1049C2*), 0, "S1049C1");
    check_field_offset(lv, s1049c1f0, ABISELECT(16,8), "S1049C1.s1049c1f0");
    test_class_info(&lv, &cd_S1049C1);
    dp->~S1049C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1049C1(Test_S1049C1, "S1049C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1049C1C1Ev();
extern void _ZN7S1049C1D1Ev();
Name_Map name_map_S1049C1[] = {
  NSPAIR(_ZN7S1049C1C1Ev),
  NSPAIR(_ZN7S1049C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1049C3;
extern VTBL_ENTRY _ZTI7S1049C3[];
extern Class_Descriptor cd_S1049C2;
extern VTBL_ENTRY _ZTI7S1049C2[];
extern  VTBL_ENTRY _ZTV7S1049C2[];
static Base_Class bases_S1049C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1049C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1049C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1049C1[];
extern void _ZN7S1049C1D1Ev();
extern void _ZN7S1049C1D0Ev();
extern void _ZN7S1049C22v2Ev();
extern void _ZN7S1049C12v1Ev();
static  VTBL_ENTRY vtc_S1049C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1049C1[0]),
  (VTBL_ENTRY)&_ZN7S1049C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1049C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1049C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1049C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1049C1[];
extern  VTBL_ENTRY _ZTV7S1049C1[];
Class_Descriptor cd_S1049C1 = {  "S1049C1", // class name
  bases_S1049C1, 3,
  &(vtc_S1049C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1049C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1049C1),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  S12370C2_nt  {
  char s12370c2f0[8];
};
//SIG(-1 S12370C2_nt) C1{ Fc[8]}



//skip512 S12370C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12370C1  {
  int s12370c1f0;
  ::S12370C2_nt s12370c1f1;
  ::S770C15_nt s12370c1f2;
  ::S12370C2_nt s12370c1f3;
};
//SIG(1 S12370C1) C1{ Fi FC2{ Fc[8]} FC3{ Fc[128]} FC2}



static void Test_S12370C1()
{
  {
    init_simple_test("S12370C1");
    S12370C1 lv;
    check2(sizeof(lv), 148, "sizeof(S12370C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12370C1)");
    check_field_offset(lv, s12370c1f0, 0, "S12370C1.s12370c1f0");
    check_field_offset(lv, s12370c1f1, 4, "S12370C1.s12370c1f1");
    check_field_offset(lv, s12370c1f2, 12, "S12370C1.s12370c1f2");
    check_field_offset(lv, s12370c1f3, 140, "S12370C1.s12370c1f3");
  }
}
static Arrange_To_Call_Me vS12370C1(Test_S12370C1, "S12370C1", 148);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10411C2  {
  void *s10411c2f0;
  virtual  ~S10411C2(); // _ZN8S10411C2D1Ev
  virtual void  v2(); // _ZN8S10411C22v2Ev
  S10411C2(); // tgen
};
//SIG(-1 S10411C2) C1{ vd v1 Fp}


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

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

#else // __cplusplus

extern void _ZN8S10411C2C1Ev();
extern void _ZN8S10411C2D1Ev();
Name_Map name_map_S10411C2[] = {
  NSPAIR(_ZN8S10411C2C1Ev),
  NSPAIR(_ZN8S10411C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10411C2[];
extern void _ZN8S10411C2D1Ev();
extern void _ZN8S10411C2D0Ev();
extern void _ZN8S10411C22v2Ev();
static  VTBL_ENTRY vtc_S10411C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10411C2[0]),
  (VTBL_ENTRY)&_ZN8S10411C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10411C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10411C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S10411C2[];
extern  VTBL_ENTRY _ZTV8S10411C2[];
Class_Descriptor cd_S10411C2 = {  "S10411C2", // class name
  0,0,//no base classes
  &(vtc_S10411C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10411C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10411C2),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  S10411C1  : S10411C2 {
  int s10411c1f0[4];
  void *s10411c1f1[3];
  int s10411c1f2;
  virtual  ~S10411C1(); // _ZN8S10411C1D1Ev
  virtual void  v1(); // _ZN8S10411C12v1Ev
  S10411C1(); // tgen
};
//SIG(1 S10411C1) C1{ BC2{ vd v2 Fp} vd v1 Fi[4] Fp[3] Fi}


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

static void Test_S10411C1()
{
  extern Class_Descriptor cd_S10411C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S10411C1, buf);
    S10411C1 *dp, &lv = *(dp=new (buf) S10411C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S10411C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10411C1)");
    check_base_class_offset(lv, (S10411C2*), 0, "S10411C1");
    check_field_offset(lv, s10411c1f0, ABISELECT(16,8), "S10411C1.s10411c1f0");
    check_field_offset(lv, s10411c1f1, ABISELECT(32,24), "S10411C1.s10411c1f1");
    check_field_offset(lv, s10411c1f2, ABISELECT(56,36), "S10411C1.s10411c1f2");
    test_class_info(&lv, &cd_S10411C1);
    dp->~S10411C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10411C1(Test_S10411C1, "S10411C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S10411C1C1Ev();
extern void _ZN8S10411C1D1Ev();
Name_Map name_map_S10411C1[] = {
  NSPAIR(_ZN8S10411C1C1Ev),
  NSPAIR(_ZN8S10411C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10411C2;
extern VTBL_ENTRY _ZTI8S10411C2[];
extern  VTBL_ENTRY _ZTV8S10411C2[];
static Base_Class bases_S10411C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10411C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10411C1[];
extern void _ZN8S10411C1D1Ev();
extern void _ZN8S10411C1D0Ev();
extern void _ZN8S10411C22v2Ev();
extern void _ZN8S10411C12v1Ev();
static  VTBL_ENTRY vtc_S10411C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10411C1[0]),
  (VTBL_ENTRY)&_ZN8S10411C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10411C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10411C22v2Ev,
  (VTBL_ENTRY)&_ZN8S10411C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S10411C1[];
extern  VTBL_ENTRY _ZTV8S10411C1[];
Class_Descriptor cd_S10411C1 = {  "S10411C1", // class name
  bases_S10411C1, 1,
  &(vtc_S10411C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S10411C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10411C1),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  S12464C2_nt  {
  int s12464c2f0[3];
};
//SIG(-1 S12464C2_nt) C1{ Fi[3]}



//skip512 S12464C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12464C1  {
  int s12464c1f0;
  ::S12464C2_nt s12464c1f1;
  ::S12464C2_nt s12464c1f2;
  ::S770C16_nt s12464c1f3;
};
//SIG(1 S12464C1) C1{ Fi FC2{ Fi[3]} FC2 FC3{ Fc[4]}}



static void Test_S12464C1()
{
  {
    init_simple_test("S12464C1");
    S12464C1 lv;
    check2(sizeof(lv), 32, "sizeof(S12464C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12464C1)");
    check_field_offset(lv, s12464c1f0, 0, "S12464C1.s12464c1f0");
    check_field_offset(lv, s12464c1f1, 4, "S12464C1.s12464c1f1");
    check_field_offset(lv, s12464c1f2, 16, "S12464C1.s12464c1f2");
    check_field_offset(lv, s12464c1f3, 28, "S12464C1.s12464c1f3");
  }
}
static Arrange_To_Call_Me vS12464C1(Test_S12464C1, "S12464C1", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11106C2_nt  {
  char s11106c2f0[12];
};
//SIG(-1 S11106C2_nt) C1{ Fc[12]}



//skip512 S11106C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S11106C4_nt  {
  void *s11106c4f0;
  void *s11106c4f1;
};
//SIG(1 S11106C4_nt) U1{ Fp Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S11106C1  {
  ::S11106C2_nt s11106c1f0;
  ::S770C15_nt s11106c1f1;
  ::S11106C4_nt s11106c1f2;
};
//SIG(1 S11106C1) C1{ FC2{ Fc[12]} FC3{ Fc[128]} FU4{ Fp Fp}}



static void Test_S11106C1()
{
  {
    init_simple_test("S11106C1");
    S11106C1 lv;
    check2(sizeof(lv), ABISELECT(152,144), "sizeof(S11106C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11106C1)");
    check_field_offset(lv, s11106c1f0, 0, "S11106C1.s11106c1f0");
    check_field_offset(lv, s11106c1f1, 12, "S11106C1.s11106c1f1");
    check_field_offset(lv, s11106c1f2, ABISELECT(144,140), "S11106C1.s11106c1f2");
  }
}
static Arrange_To_Call_Me vS11106C1(Test_S11106C1, "S11106C1", ABISELECT(152,144));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14094C3_nt  {
  char s14094c3f0[6];
};
//SIG(-1 S14094C3_nt) C1{ Fc[6]}



//skip512 S14094C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14094C1  {
  void *s14094c1f0;
  ::S770C15_nt s14094c1f1;
  ::S14094C3_nt s14094c1f2;
  char s14094c1f3[6];
  __tsi64 s14094c1f4;
};
//SIG(1 S14094C1) C1{ Fp FC2{ Fc[128]} FC3{ Fc[6]} Fc[6] FL}



static void Test_S14094C1()
{
  {
    init_simple_test("S14094C1");
    S14094C1 lv;
    check2(sizeof(lv), ABISELECT(160,152), "sizeof(S14094C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14094C1)");
    check_field_offset(lv, s14094c1f0, 0, "S14094C1.s14094c1f0");
    check_field_offset(lv, s14094c1f1, ABISELECT(8,4), "S14094C1.s14094c1f1");
    check_field_offset(lv, s14094c1f2, ABISELECT(136,132), "S14094C1.s14094c1f2");
    check_field_offset(lv, s14094c1f3, ABISELECT(142,138), "S14094C1.s14094c1f3");
    check_field_offset(lv, s14094c1f4, ABISELECT(152,144), "S14094C1.s14094c1f4");
  }
}
static Arrange_To_Call_Me vS14094C1(Test_S14094C1, "S14094C1", ABISELECT(160,152));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1054C3  : S16567C15_nt {
};
//SIG(-1 S1054C3) C1{ BC2{ m Fi}}



static void Test_S1054C3()
{
  extern Class_Descriptor cd_S1054C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1054C3, buf);
    S1054C3 &lv = *(new (buf) S1054C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1054C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1054C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1054C3");
    test_class_info(&lv, &cd_S1054C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1054C3(Test_S1054C3, "S1054C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1054C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1054C3[];
Class_Descriptor cd_S1054C3 = {  "S1054C3", // class name
  bases_S1054C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1054C3),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  S1054C2  : S1054C3 {
  virtual  ~S1054C2(); // _ZN7S1054C2D1Ev
  virtual void  v2(); // _ZN7S1054C22v2Ev
  S1054C2(); // tgen
};
//SIG(-1 S1054C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1054C2()
{
  extern Class_Descriptor cd_S1054C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1054C2, buf);
    S1054C2 *dp, &lv = *(dp=new (buf) S1054C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1054C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1054C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1054C3*), ABISELECT(8,4), "S1054C2");
    check_base_class_offset(lv, (S1054C3*), ABISELECT(8,4), "S1054C2");
    test_class_info(&lv, &cd_S1054C2);
    dp->~S1054C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1054C2(Test_S1054C2, "S1054C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1054C2C1Ev();
extern void _ZN7S1054C2D1Ev();
Name_Map name_map_S1054C2[] = {
  NSPAIR(_ZN7S1054C2C1Ev),
  NSPAIR(_ZN7S1054C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1054C3;
extern VTBL_ENTRY _ZTI7S1054C3[];
static Base_Class bases_S1054C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1054C3,    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 _ZTI7S1054C2[];
extern void _ZN7S1054C2D1Ev();
extern void _ZN7S1054C2D0Ev();
extern void _ZN7S1054C22v2Ev();
static  VTBL_ENTRY vtc_S1054C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1054C2[0]),
  (VTBL_ENTRY)&_ZN7S1054C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1054C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1054C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1054C2[];
extern  VTBL_ENTRY _ZTV7S1054C2[];
Class_Descriptor cd_S1054C2 = {  "S1054C2", // class name
  bases_S1054C2, 2,
  &(vtc_S1054C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1054C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1054C2),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  S1054C1  : S1054C2 {
  void *s1054c1f0[3];
  virtual void  v1(); // _ZN7S1054C12v1Ev
  ~S1054C1(); // tgen
  S1054C1(); // tgen
};
//SIG(1 S1054C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 Fp[3]}


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

static void Test_S1054C1()
{
  extern Class_Descriptor cd_S1054C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1054C1, buf);
    S1054C1 *dp, &lv = *(dp=new (buf) S1054C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1054C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1054C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1054C3*)(S1054C2*), ABISELECT(8,4), "S1054C1");
    check_base_class_offset(lv, (S1054C3*)(S1054C2*), ABISELECT(8,4), "S1054C1");
    check_base_class_offset(lv, (S1054C2*), 0, "S1054C1");
    check_field_offset(lv, s1054c1f0, ABISELECT(16,8), "S1054C1.s1054c1f0");
    test_class_info(&lv, &cd_S1054C1);
    dp->~S1054C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1054C1(Test_S1054C1, "S1054C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S1054C1C1Ev();
extern void _ZN7S1054C1D1Ev();
Name_Map name_map_S1054C1[] = {
  NSPAIR(_ZN7S1054C1C1Ev),
  NSPAIR(_ZN7S1054C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1054C3;
extern VTBL_ENTRY _ZTI7S1054C3[];
extern Class_Descriptor cd_S1054C2;
extern VTBL_ENTRY _ZTI7S1054C2[];
extern  VTBL_ENTRY _ZTV7S1054C2[];
static Base_Class bases_S1054C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1054C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1054C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1054C1[];
extern void _ZN7S1054C1D1Ev();
extern void _ZN7S1054C1D0Ev();
extern void _ZN7S1054C22v2Ev();
extern void _ZN7S1054C12v1Ev();
static  VTBL_ENTRY vtc_S1054C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1054C1[0]),
  (VTBL_ENTRY)&_ZN7S1054C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1054C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1054C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1054C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1054C1[];
extern  VTBL_ENTRY _ZTV7S1054C1[];
Class_Descriptor cd_S1054C1 = {  "S1054C1", // class name
  bases_S1054C1, 3,
  &(vtc_S1054C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S1054C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1054C1),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  S1053C3  : S16567C15_nt {
};
//SIG(-1 S1053C3) C1{ BC2{ m Fi}}



static void Test_S1053C3()
{
  extern Class_Descriptor cd_S1053C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1053C3, buf);
    S1053C3 &lv = *(new (buf) S1053C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1053C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1053C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1053C3");
    test_class_info(&lv, &cd_S1053C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1053C3(Test_S1053C3, "S1053C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1053C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1053C3[];
Class_Descriptor cd_S1053C3 = {  "S1053C3", // class name
  bases_S1053C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1053C3),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  S1053C2  : S1053C3 {
  virtual  ~S1053C2(); // _ZN7S1053C2D1Ev
  virtual void  v2(); // _ZN7S1053C22v2Ev
  S1053C2(); // tgen
};
//SIG(-1 S1053C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1053C2()
{
  extern Class_Descriptor cd_S1053C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1053C2, buf);
    S1053C2 *dp, &lv = *(dp=new (buf) S1053C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1053C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1053C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1053C3*), ABISELECT(8,4), "S1053C2");
    check_base_class_offset(lv, (S1053C3*), ABISELECT(8,4), "S1053C2");
    test_class_info(&lv, &cd_S1053C2);
    dp->~S1053C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1053C2(Test_S1053C2, "S1053C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1053C2C1Ev();
extern void _ZN7S1053C2D1Ev();
Name_Map name_map_S1053C2[] = {
  NSPAIR(_ZN7S1053C2C1Ev),
  NSPAIR(_ZN7S1053C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1053C3;
extern VTBL_ENTRY _ZTI7S1053C3[];
static Base_Class bases_S1053C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1053C3,    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 _ZTI7S1053C2[];
extern void _ZN7S1053C2D1Ev();
extern void _ZN7S1053C2D0Ev();
extern void _ZN7S1053C22v2Ev();
static  VTBL_ENTRY vtc_S1053C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1053C2[0]),
  (VTBL_ENTRY)&_ZN7S1053C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1053C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1053C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1053C2[];
extern  VTBL_ENTRY _ZTV7S1053C2[];
Class_Descriptor cd_S1053C2 = {  "S1053C2", // class name
  bases_S1053C2, 2,
  &(vtc_S1053C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1053C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1053C2),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  S1053C1  : S1053C2 {
  void *s1053c1f0;
  __tsi64 s1053c1f1;
  virtual void  v1(); // _ZN7S1053C12v1Ev
  ~S1053C1(); // tgen
  S1053C1(); // tgen
};
//SIG(1 S1053C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 Fp FL}


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

static void Test_S1053C1()
{
  extern Class_Descriptor cd_S1053C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1053C1, buf);
    S1053C1 *dp, &lv = *(dp=new (buf) S1053C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1053C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1053C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1053C3*)(S1053C2*), ABISELECT(8,4), "S1053C1");
    check_base_class_offset(lv, (S1053C3*)(S1053C2*), ABISELECT(8,4), "S1053C1");
    check_base_class_offset(lv, (S1053C2*), 0, "S1053C1");
    check_field_offset(lv, s1053c1f0, ABISELECT(16,8), "S1053C1.s1053c1f0");
    check_field_offset(lv, s1053c1f1, ABISELECT(24,12), "S1053C1.s1053c1f1");
    test_class_info(&lv, &cd_S1053C1);
    dp->~S1053C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1053C1(Test_S1053C1, "S1053C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1053C1C1Ev();
extern void _ZN7S1053C1D1Ev();
Name_Map name_map_S1053C1[] = {
  NSPAIR(_ZN7S1053C1C1Ev),
  NSPAIR(_ZN7S1053C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1053C3;
extern VTBL_ENTRY _ZTI7S1053C3[];
extern Class_Descriptor cd_S1053C2;
extern VTBL_ENTRY _ZTI7S1053C2[];
extern  VTBL_ENTRY _ZTV7S1053C2[];
static Base_Class bases_S1053C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1053C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1053C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1053C1[];
extern void _ZN7S1053C1D1Ev();
extern void _ZN7S1053C1D0Ev();
extern void _ZN7S1053C22v2Ev();
extern void _ZN7S1053C12v1Ev();
static  VTBL_ENTRY vtc_S1053C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1053C1[0]),
  (VTBL_ENTRY)&_ZN7S1053C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1053C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1053C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1053C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1053C1[];
extern  VTBL_ENTRY _ZTV7S1053C1[];
Class_Descriptor cd_S1053C1 = {  "S1053C1", // class name
  bases_S1053C1, 3,
  &(vtc_S1053C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1053C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1053C1),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  S17114C1  {
  int s17114c1f0[2];
  ::S3047C29_nt s17114c1f1;
  void  mf17114c1(); // _ZN8S17114C19mf17114c1Ev
};
//SIG(1 S17114C1) C1{ m Fi[2] FC2{ m Fs[6] Fi[2] Fc Fs}}


void  S17114C1 ::mf17114c1(){}

static void Test_S17114C1()
{
  {
    init_simple_test("S17114C1");
    S17114C1 lv;
    check2(sizeof(lv), 32, "sizeof(S17114C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17114C1)");
    check_field_offset(lv, s17114c1f0, 0, "S17114C1.s17114c1f0");
    check_field_offset(lv, s17114c1f1, 8, "S17114C1.s17114c1f1");
  }
}
static Arrange_To_Call_Me vS17114C1(Test_S17114C1, "S17114C1", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16464C1  {
  ::S3047C29_nt s16464c1f0;
  char s16464c1f1[42];
  void  mf16464c1(); // _ZN8S16464C19mf16464c1Ev
};
//SIG(1 S16464C1) C1{ m FC2{ m Fs[6] Fi[2] Fc Fs} Fc[42]}


void  S16464C1 ::mf16464c1(){}

static void Test_S16464C1()
{
  {
    init_simple_test("S16464C1");
    S16464C1 lv;
    check2(sizeof(lv), 68, "sizeof(S16464C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16464C1)");
    check_field_offset(lv, s16464c1f0, 0, "S16464C1.s16464c1f0");
    check_field_offset(lv, s16464c1f1, 24, "S16464C1.s16464c1f1");
  }
}
static Arrange_To_Call_Me vS16464C1(Test_S16464C1, "S16464C1", 68);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16833C1  {
  int s16833c1f0;
  ::S3047C29_nt s16833c1f1;
  void *s16833c1f2;
  void  mf16833c1(); // _ZN8S16833C19mf16833c1Ev
};
//SIG(1 S16833C1) C1{ m Fi FC2{ m Fs[6] Fi[2] Fc Fs} Fp}


void  S16833C1 ::mf16833c1(){}

static void Test_S16833C1()
{
  {
    init_simple_test("S16833C1");
    S16833C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S16833C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16833C1)");
    check_field_offset(lv, s16833c1f0, 0, "S16833C1.s16833c1f0");
    check_field_offset(lv, s16833c1f1, 4, "S16833C1.s16833c1f1");
    check_field_offset(lv, s16833c1f2, ABISELECT(32,28), "S16833C1.s16833c1f2");
  }
}
static Arrange_To_Call_Me vS16833C1(Test_S16833C1, "S16833C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1030C3  : S16567C15_nt {
};
//SIG(-1 S1030C3) C1{ BC2{ m Fi}}



static void Test_S1030C3()
{
  extern Class_Descriptor cd_S1030C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1030C3, buf);
    S1030C3 &lv = *(new (buf) S1030C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1030C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1030C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1030C3");
    test_class_info(&lv, &cd_S1030C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1030C3(Test_S1030C3, "S1030C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1030C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1030C3[];
Class_Descriptor cd_S1030C3 = {  "S1030C3", // class name
  bases_S1030C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1030C3),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  S1030C2  : S1030C3 {
  virtual  ~S1030C2(); // _ZN7S1030C2D1Ev
  virtual void  v2(); // _ZN7S1030C22v2Ev
  S1030C2(); // tgen
};
//SIG(-1 S1030C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1030C2()
{
  extern Class_Descriptor cd_S1030C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1030C2, buf);
    S1030C2 *dp, &lv = *(dp=new (buf) S1030C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1030C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1030C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1030C3*), ABISELECT(8,4), "S1030C2");
    check_base_class_offset(lv, (S1030C3*), ABISELECT(8,4), "S1030C2");
    test_class_info(&lv, &cd_S1030C2);
    dp->~S1030C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1030C2(Test_S1030C2, "S1030C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1030C2C1Ev();
extern void _ZN7S1030C2D1Ev();
Name_Map name_map_S1030C2[] = {
  NSPAIR(_ZN7S1030C2C1Ev),
  NSPAIR(_ZN7S1030C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1030C3;
extern VTBL_ENTRY _ZTI7S1030C3[];
static Base_Class bases_S1030C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1030C3,    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 _ZTI7S1030C2[];
extern void _ZN7S1030C2D1Ev();
extern void _ZN7S1030C2D0Ev();
extern void _ZN7S1030C22v2Ev();
static  VTBL_ENTRY vtc_S1030C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1030C2[0]),
  (VTBL_ENTRY)&_ZN7S1030C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1030C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1030C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1030C2[];
extern  VTBL_ENTRY _ZTV7S1030C2[];
Class_Descriptor cd_S1030C2 = {  "S1030C2", // class name
  bases_S1030C2, 2,
  &(vtc_S1030C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1030C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1030C2),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  S1030C1  : S1030C2 {
  char s1030c1f0;
  virtual void  v1(); // _ZN7S1030C12v1Ev
  ~S1030C1(); // tgen
  S1030C1(); // tgen
};
//SIG(1 S1030C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 Fc}


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

static void Test_S1030C1()
{
  extern Class_Descriptor cd_S1030C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1030C1, buf);
    S1030C1 *dp, &lv = *(dp=new (buf) S1030C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1030C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1030C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1030C3*)(S1030C2*), ABISELECT(8,4), "S1030C1");
    check_base_class_offset(lv, (S1030C3*)(S1030C2*), ABISELECT(8,4), "S1030C1");
    check_base_class_offset(lv, (S1030C2*), 0, "S1030C1");
    check_field_offset(lv, s1030c1f0, ABISELECT(12,8), "S1030C1.s1030c1f0");
    test_class_info(&lv, &cd_S1030C1);
    dp->~S1030C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1030C1(Test_S1030C1, "S1030C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1030C1C1Ev();
extern void _ZN7S1030C1D1Ev();
Name_Map name_map_S1030C1[] = {
  NSPAIR(_ZN7S1030C1C1Ev),
  NSPAIR(_ZN7S1030C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1030C3;
extern VTBL_ENTRY _ZTI7S1030C3[];
extern Class_Descriptor cd_S1030C2;
extern VTBL_ENTRY _ZTI7S1030C2[];
extern  VTBL_ENTRY _ZTV7S1030C2[];
static Base_Class bases_S1030C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1030C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1030C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1030C1[];
extern void _ZN7S1030C1D1Ev();
extern void _ZN7S1030C1D0Ev();
extern void _ZN7S1030C22v2Ev();
extern void _ZN7S1030C12v1Ev();
static  VTBL_ENTRY vtc_S1030C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1030C1[0]),
  (VTBL_ENTRY)&_ZN7S1030C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1030C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1030C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1030C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1030C1[];
extern  VTBL_ENTRY _ZTV7S1030C1[];
Class_Descriptor cd_S1030C1 = {  "S1030C1", // class name
  bases_S1030C1, 3,
  &(vtc_S1030C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1030C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1030C1),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  S10409C2  {
  void *s10409c2f0;
  virtual  ~S10409C2(); // _ZN8S10409C2D1Ev
  virtual void  v2(); // _ZN8S10409C22v2Ev
  S10409C2(); // tgen
};
//SIG(-1 S10409C2) C1{ vd v1 Fp}


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

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

#else // __cplusplus

extern void _ZN8S10409C2C1Ev();
extern void _ZN8S10409C2D1Ev();
Name_Map name_map_S10409C2[] = {
  NSPAIR(_ZN8S10409C2C1Ev),
  NSPAIR(_ZN8S10409C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10409C2[];
extern void _ZN8S10409C2D1Ev();
extern void _ZN8S10409C2D0Ev();
extern void _ZN8S10409C22v2Ev();
static  VTBL_ENTRY vtc_S10409C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10409C2[0]),
  (VTBL_ENTRY)&_ZN8S10409C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10409C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10409C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S10409C2[];
extern  VTBL_ENTRY _ZTV8S10409C2[];
Class_Descriptor cd_S10409C2 = {  "S10409C2", // class name
  0,0,//no base classes
  &(vtc_S10409C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10409C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10409C2),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  S10409C1  : S10409C2 {
  int s10409c1f0[2];
  void *s10409c1f1;
  virtual  ~S10409C1(); // _ZN8S10409C1D1Ev
  virtual void  v1(); // _ZN8S10409C12v1Ev
  S10409C1(); // tgen
};
//SIG(1 S10409C1) C1{ BC2{ vd v2 Fp} vd v1 Fi[2] Fp}


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

static void Test_S10409C1()
{
  extern Class_Descriptor cd_S10409C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S10409C1, buf);
    S10409C1 *dp, &lv = *(dp=new (buf) S10409C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S10409C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10409C1)");
    check_base_class_offset(lv, (S10409C2*), 0, "S10409C1");
    check_field_offset(lv, s10409c1f0, ABISELECT(16,8), "S10409C1.s10409c1f0");
    check_field_offset(lv, s10409c1f1, ABISELECT(24,16), "S10409C1.s10409c1f1");
    test_class_info(&lv, &cd_S10409C1);
    dp->~S10409C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10409C1(Test_S10409C1, "S10409C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S10409C1C1Ev();
extern void _ZN8S10409C1D1Ev();
Name_Map name_map_S10409C1[] = {
  NSPAIR(_ZN8S10409C1C1Ev),
  NSPAIR(_ZN8S10409C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10409C2;
extern VTBL_ENTRY _ZTI8S10409C2[];
extern  VTBL_ENTRY _ZTV8S10409C2[];
static Base_Class bases_S10409C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10409C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10409C1[];
extern void _ZN8S10409C1D1Ev();
extern void _ZN8S10409C1D0Ev();
extern void _ZN8S10409C22v2Ev();
extern void _ZN8S10409C12v1Ev();
static  VTBL_ENTRY vtc_S10409C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10409C1[0]),
  (VTBL_ENTRY)&_ZN8S10409C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10409C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10409C22v2Ev,
  (VTBL_ENTRY)&_ZN8S10409C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S10409C1[];
extern  VTBL_ENTRY _ZTV8S10409C1[];
Class_Descriptor cd_S10409C1 = {  "S10409C1", // class name
  bases_S10409C1, 1,
  &(vtc_S10409C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S10409C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10409C1),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  S1055C3  : S16567C15_nt {
};
//SIG(-1 S1055C3) C1{ BC2{ m Fi}}



static void Test_S1055C3()
{
  extern Class_Descriptor cd_S1055C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1055C3, buf);
    S1055C3 &lv = *(new (buf) S1055C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1055C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1055C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1055C3");
    test_class_info(&lv, &cd_S1055C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1055C3(Test_S1055C3, "S1055C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1055C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1055C3[];
Class_Descriptor cd_S1055C3 = {  "S1055C3", // class name
  bases_S1055C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1055C3),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  S1055C2  : S1055C3 {
  virtual  ~S1055C2(); // _ZN7S1055C2D1Ev
  virtual void  v2(); // _ZN7S1055C22v2Ev
  S1055C2(); // tgen
};
//SIG(-1 S1055C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1055C2()
{
  extern Class_Descriptor cd_S1055C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1055C2, buf);
    S1055C2 *dp, &lv = *(dp=new (buf) S1055C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1055C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1055C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1055C3*), ABISELECT(8,4), "S1055C2");
    check_base_class_offset(lv, (S1055C3*), ABISELECT(8,4), "S1055C2");
    test_class_info(&lv, &cd_S1055C2);
    dp->~S1055C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1055C2(Test_S1055C2, "S1055C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1055C2C1Ev();
extern void _ZN7S1055C2D1Ev();
Name_Map name_map_S1055C2[] = {
  NSPAIR(_ZN7S1055C2C1Ev),
  NSPAIR(_ZN7S1055C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1055C3;
extern VTBL_ENTRY _ZTI7S1055C3[];
static Base_Class bases_S1055C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1055C3,    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 _ZTI7S1055C2[];
extern void _ZN7S1055C2D1Ev();
extern void _ZN7S1055C2D0Ev();
extern void _ZN7S1055C22v2Ev();
static  VTBL_ENTRY vtc_S1055C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1055C2[0]),
  (VTBL_ENTRY)&_ZN7S1055C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1055C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1055C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1055C2[];
extern  VTBL_ENTRY _ZTV7S1055C2[];
Class_Descriptor cd_S1055C2 = {  "S1055C2", // class name
  bases_S1055C2, 2,
  &(vtc_S1055C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1055C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1055C2),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  S1055C1  : S1055C2 {
  void *s1055c1f0;
  virtual void  v1(); // _ZN7S1055C12v1Ev
  ~S1055C1(); // tgen
  S1055C1(); // tgen
};
//SIG(1 S1055C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 Fp}


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

static void Test_S1055C1()
{
  extern Class_Descriptor cd_S1055C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1055C1, buf);
    S1055C1 *dp, &lv = *(dp=new (buf) S1055C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1055C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1055C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1055C3*)(S1055C2*), ABISELECT(8,4), "S1055C1");
    check_base_class_offset(lv, (S1055C3*)(S1055C2*), ABISELECT(8,4), "S1055C1");
    check_base_class_offset(lv, (S1055C2*), 0, "S1055C1");
    check_field_offset(lv, s1055c1f0, ABISELECT(16,8), "S1055C1.s1055c1f0");
    test_class_info(&lv, &cd_S1055C1);
    dp->~S1055C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1055C1(Test_S1055C1, "S1055C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1055C1C1Ev();
extern void _ZN7S1055C1D1Ev();
Name_Map name_map_S1055C1[] = {
  NSPAIR(_ZN7S1055C1C1Ev),
  NSPAIR(_ZN7S1055C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1055C3;
extern VTBL_ENTRY _ZTI7S1055C3[];
extern Class_Descriptor cd_S1055C2;
extern VTBL_ENTRY _ZTI7S1055C2[];
extern  VTBL_ENTRY _ZTV7S1055C2[];
static Base_Class bases_S1055C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1055C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1055C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1055C1[];
extern void _ZN7S1055C1D1Ev();
extern void _ZN7S1055C1D0Ev();
extern void _ZN7S1055C22v2Ev();
extern void _ZN7S1055C12v1Ev();
static  VTBL_ENTRY vtc_S1055C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1055C1[0]),
  (VTBL_ENTRY)&_ZN7S1055C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1055C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1055C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1055C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1055C1[];
extern  VTBL_ENTRY _ZTV7S1055C1[];
Class_Descriptor cd_S1055C1 = {  "S1055C1", // class name
  bases_S1055C1, 3,
  &(vtc_S1055C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1055C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1055C1),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  S1051C3  : S16567C15_nt {
};
//SIG(-1 S1051C3) C1{ BC2{ m Fi}}



static void Test_S1051C3()
{
  extern Class_Descriptor cd_S1051C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1051C3, buf);
    S1051C3 &lv = *(new (buf) S1051C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1051C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1051C3)");
    check_base_class_offset(lv, (S16567C15_nt*), 0, "S1051C3");
    test_class_info(&lv, &cd_S1051C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1051C3(Test_S1051C3, "S1051C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
static Base_Class bases_S1051C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1051C3[];
Class_Descriptor cd_S1051C3 = {  "S1051C3", // class name
  bases_S1051C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1051C3),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  S1051C2  : S1051C3 {
  virtual  ~S1051C2(); // _ZN7S1051C2D1Ev
  virtual void  v2(); // _ZN7S1051C22v2Ev
  S1051C2(); // tgen
};
//SIG(-1 S1051C2) C1{ BC2{ BC3{ m Fi}} vd v1}


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

static void Test_S1051C2()
{
  extern Class_Descriptor cd_S1051C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1051C2, buf);
    S1051C2 *dp, &lv = *(dp=new (buf) S1051C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1051C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1051C2)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1051C3*), ABISELECT(8,4), "S1051C2");
    check_base_class_offset(lv, (S1051C3*), ABISELECT(8,4), "S1051C2");
    test_class_info(&lv, &cd_S1051C2);
    dp->~S1051C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1051C2(Test_S1051C2, "S1051C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1051C2C1Ev();
extern void _ZN7S1051C2D1Ev();
Name_Map name_map_S1051C2[] = {
  NSPAIR(_ZN7S1051C2C1Ev),
  NSPAIR(_ZN7S1051C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1051C3;
extern VTBL_ENTRY _ZTI7S1051C3[];
static Base_Class bases_S1051C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1051C3,    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 _ZTI7S1051C2[];
extern void _ZN7S1051C2D1Ev();
extern void _ZN7S1051C2D0Ev();
extern void _ZN7S1051C22v2Ev();
static  VTBL_ENTRY vtc_S1051C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1051C2[0]),
  (VTBL_ENTRY)&_ZN7S1051C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1051C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1051C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S1051C2[];
extern  VTBL_ENTRY _ZTV7S1051C2[];
Class_Descriptor cd_S1051C2 = {  "S1051C2", // class name
  bases_S1051C2, 2,
  &(vtc_S1051C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1051C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1051C2),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  S1051C1  : S1051C2 {
  __tsi64 s1051c1f0;
  virtual void  v1(); // _ZN7S1051C12v1Ev
  ~S1051C1(); // tgen
  S1051C1(); // tgen
};
//SIG(1 S1051C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} v1 FL}


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

static void Test_S1051C1()
{
  extern Class_Descriptor cd_S1051C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1051C1, buf);
    S1051C1 *dp, &lv = *(dp=new (buf) S1051C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1051C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1051C1)");
    check_base_class_offset(lv, (S16567C15_nt*)(S1051C3*)(S1051C2*), ABISELECT(8,4), "S1051C1");
    check_base_class_offset(lv, (S1051C3*)(S1051C2*), ABISELECT(8,4), "S1051C1");
    check_base_class_offset(lv, (S1051C2*), 0, "S1051C1");
    check_field_offset(lv, s1051c1f0, ABISELECT(16,8), "S1051C1.s1051c1f0");
    test_class_info(&lv, &cd_S1051C1);
    dp->~S1051C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1051C1(Test_S1051C1, "S1051C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S1051C1C1Ev();
extern void _ZN7S1051C1D1Ev();
Name_Map name_map_S1051C1[] = {
  NSPAIR(_ZN7S1051C1C1Ev),
  NSPAIR(_ZN7S1051C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16567C15_nt;
extern VTBL_ENTRY _ZTI12S16567C15_nt[];
extern Class_Descriptor cd_S1051C3;
extern VTBL_ENTRY _ZTI7S1051C3[];
extern Class_Descriptor cd_S1051C2;
extern VTBL_ENTRY _ZTI7S1051C2[];
extern  VTBL_ENTRY _ZTV7S1051C2[];
static Base_Class bases_S1051C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16567C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1051C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1051C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1051C1[];
extern void _ZN7S1051C1D1Ev();
extern void _ZN7S1051C1D0Ev();
extern void _ZN7S1051C22v2Ev();
extern void _ZN7S1051C12v1Ev();
static  VTBL_ENTRY vtc_S1051C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1051C1[0]),
  (VTBL_ENTRY)&_ZN7S1051C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1051C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1051C22v2Ev,
  (VTBL_ENTRY)&_ZN7S1051C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1051C1[];
extern  VTBL_ENTRY _ZTV7S1051C1[];
Class_Descriptor cd_S1051C1 = {  "S1051C1", // class name
  bases_S1051C1, 3,
  &(vtc_S1051C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S1051C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1051C1),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  S16465C1  {
  ::S3047C29_nt s16465c1f0;
  int s16465c1f1;
  void  mf16465c1(); // _ZN8S16465C19mf16465c1Ev
};
//SIG(1 S16465C1) C1{ m FC2{ m Fs[6] Fi[2] Fc Fs} Fi}


void  S16465C1 ::mf16465c1(){}

static void Test_S16465C1()
{
  {
    init_simple_test("S16465C1");
    S16465C1 lv;
    check2(sizeof(lv), 28, "sizeof(S16465C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16465C1)");
    check_field_offset(lv, s16465c1f0, 0, "S16465C1.s16465c1f0");
    check_field_offset(lv, s16465c1f1, 24, "S16465C1.s16465c1f1");
  }
}
static Arrange_To_Call_Me vS16465C1(Test_S16465C1, "S16465C1", 28);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13972C2_nt  {
  void *s13972c2f0;
  __tsi64 s13972c2f1;
};
//SIG(-1 S13972C2_nt) C1{ Fp FL}



//skip512 S13972C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13972C1  {
  long s13972c1f0[3];
  ::S13972C2_nt s13972c1f1;
  ::S1035C6_nt s13972c1f2;
};
//SIG(1 S13972C1) C1{ Fl[3] FC2{ Fp FL} FC3{ FL[2]}}



static void Test_S13972C1()
{
  {
    init_simple_test("S13972C1");
    S13972C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S13972C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13972C1)");
    check_field_offset(lv, s13972c1f0, 0, "S13972C1.s13972c1f0");
    check_field_offset(lv, s13972c1f1, ABISELECT(24,12), "S13972C1.s13972c1f1");
    check_field_offset(lv, s13972c1f2, ABISELECT(40,24), "S13972C1.s13972c1f2");
  }
}
static Arrange_To_Call_Me vS13972C1(Test_S13972C1, "S13972C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16466C1  {
  ::S3047C29_nt s16466c1f0;
  void  mf16466c1(); // _ZN8S16466C19mf16466c1Ev
};
//SIG(1 S16466C1) C1{ m FC2{ m Fs[6] Fi[2] Fc Fs}}


void  S16466C1 ::mf16466c1(){}

static void Test_S16466C1()
{
  {
    init_simple_test("S16466C1");
    S16466C1 lv;
    check2(sizeof(lv), 24, "sizeof(S16466C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16466C1)");
    check_field_offset(lv, s16466c1f0, 0, "S16466C1.s16466c1f0");
  }
}
static Arrange_To_Call_Me vS16466C1(Test_S16466C1, "S16466C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12484C2_nt  {
  int s12484c2f0[64];
};
//SIG(-1 S12484C2_nt) C1{ Fi[64]}



//skip512 S12484C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12484C1  {
  int s12484c1f0;
  ::S12484C2_nt s12484c1f1;
  ::S770C18_nt s12484c1f2;
};
//SIG(1 S12484C1) C1{ Fi FC2{ Fi[64]} FC3{ Fc[64]}}



static void Test_S12484C1()
{
  {
    init_simple_test("S12484C1");
    S12484C1 lv;
    check2(sizeof(lv), 324, "sizeof(S12484C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12484C1)");
    check_field_offset(lv, s12484c1f0, 0, "S12484C1.s12484c1f0");
    check_field_offset(lv, s12484c1f1, 4, "S12484C1.s12484c1f1");
    check_field_offset(lv, s12484c1f2, 260, "S12484C1.s12484c1f2");
  }
}
static Arrange_To_Call_Me vS12484C1(Test_S12484C1, "S12484C1", 324);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14796C1  {
  short s14796c1f0;
  ::S1035C6_nt s14796c1f1;
  ::S1035C6_nt s14796c1f2;
  ::S1035C6_nt s14796c1f3;
  ::S1035C6_nt s14796c1f4;
};
//SIG(1 S14796C1) C1{ Fs FC2{ FL[2]} FC2 FC2 FC2}



static void Test_S14796C1()
{
  {
    init_simple_test("S14796C1");
    S14796C1 lv;
    check2(sizeof(lv), ABISELECT(72,68), "sizeof(S14796C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14796C1)");
    check_field_offset(lv, s14796c1f0, 0, "S14796C1.s14796c1f0");
    check_field_offset(lv, s14796c1f1, ABISELECT(8,4), "S14796C1.s14796c1f1");
    check_field_offset(lv, s14796c1f2, ABISELECT(24,20), "S14796C1.s14796c1f2");
    check_field_offset(lv, s14796c1f3, ABISELECT(40,36), "S14796C1.s14796c1f3");
    check_field_offset(lv, s14796c1f4, ABISELECT(56,52), "S14796C1.s14796c1f4");
  }
}
static Arrange_To_Call_Me vS14796C1(Test_S14796C1, "S14796C1", ABISELECT(72,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12250C1  {
  int s12250c1f0;
  char s12250c1f1[232];
  ::S11166C5 s12250c1f2;
};
//SIG(1 S12250C1) C1{ Fi Fc[232] FC2{ Fs Fc[2]}}



static void Test_S12250C1()
{
  {
    init_simple_test("S12250C1");
    S12250C1 lv;
    check2(sizeof(lv), 240, "sizeof(S12250C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12250C1)");
    check_field_offset(lv, s12250c1f0, 0, "S12250C1.s12250c1f0");
    check_field_offset(lv, s12250c1f1, 4, "S12250C1.s12250c1f1");
    check_field_offset(lv, s12250c1f2, 236, "S12250C1.s12250c1f2");
  }
}
static Arrange_To_Call_Me vS12250C1(Test_S12250C1, "S12250C1", 240);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16098C1  {
  ::S16567C15_nt s16098c1f0;
  ::S11166C5 s16098c1f1;
  void  mf16098c1(); // _ZN8S16098C19mf16098c1Ev
};
//SIG(1 S16098C1) C1{ m FC2{ m Fi} FC3{ Fs Fc[2]}}


void  S16098C1 ::mf16098c1(){}

static void Test_S16098C1()
{
  {
    init_simple_test("S16098C1");
    S16098C1 lv;
    check2(sizeof(lv), 8, "sizeof(S16098C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16098C1)");
    check_field_offset(lv, s16098c1f0, 0, "S16098C1.s16098c1f0");
    check_field_offset(lv, s16098c1f1, 4, "S16098C1.s16098c1f1");
  }
}
static Arrange_To_Call_Me vS16098C1(Test_S16098C1, "S16098C1", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6302C1  : S2215C30 {
  ::S292C17_nt s6302c1f0;
  int s6302c1f1;
  virtual  ~S6302C1(); // _ZN7S6302C1D1Ev
  S6302C1(); // tgen
};
//SIG(1 S6302C1) C1{ BC2{ m} vd FC3{ m Fi[5]} Fi}


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

static void Test_S6302C1()
{
  extern Class_Descriptor cd_S6302C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S6302C1, buf);
    S6302C1 *dp, &lv = *(dp=new (buf) S6302C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S6302C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6302C1)");
    check_base_class_offset(lv, (S2215C30*), 0, "S6302C1");
    check_field_offset(lv, s6302c1f0, ABISELECT(8,4), "S6302C1.s6302c1f0");
    check_field_offset(lv, s6302c1f1, ABISELECT(28,24), "S6302C1.s6302c1f1");
    test_class_info(&lv, &cd_S6302C1);
    dp->~S6302C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6302C1(Test_S6302C1, "S6302C1", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN7S6302C1C1Ev();
extern void _ZN7S6302C1D1Ev();
Name_Map name_map_S6302C1[] = {
  NSPAIR(_ZN7S6302C1C1Ev),
  NSPAIR(_ZN7S6302C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2215C30;
extern VTBL_ENTRY _ZTI8S2215C30[];
static Base_Class bases_S6302C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2215C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6302C1[];
extern void _ZN7S6302C1D1Ev();
extern void _ZN7S6302C1D0Ev();
static  VTBL_ENTRY vtc_S6302C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6302C1[0]),
  (VTBL_ENTRY)&_ZN7S6302C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6302C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S6302C1[];
extern  VTBL_ENTRY _ZTV7S6302C1[];
Class_Descriptor cd_S6302C1 = {  "S6302C1", // class name
  bases_S6302C1, 1,
  &(vtc_S6302C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI7S6302C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6302C1),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  S11107C1  {
  ::S11106C2_nt s11107c1f0;
  ::S770C15_nt s11107c1f1;
};
//SIG(1 S11107C1) C1{ FC2{ Fc[12]} FC3{ Fc[128]}}



static void Test_S11107C1()
{
  {
    init_simple_test("S11107C1");
    S11107C1 lv;
    check2(sizeof(lv), 140, "sizeof(S11107C1)");
    check2(__alignof__(lv), 1, "__alignof__(S11107C1)");
    check_field_offset(lv, s11107c1f0, 0, "S11107C1.s11107c1f0");
    check_field_offset(lv, s11107c1f1, 12, "S11107C1.s11107c1f1");
  }
}
static Arrange_To_Call_Me vS11107C1(Test_S11107C1, "S11107C1", 140);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13908C1  {
  long s13908c1f0[2];
  char s13908c1f1[17];
  ::S1035C6_nt s13908c1f2;
};
//SIG(1 S13908C1) C1{ Fl[2] Fc[17] FC2{ FL[2]}}



static void Test_S13908C1()
{
  {
    init_simple_test("S13908C1");
    S13908C1 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S13908C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13908C1)");
    check_field_offset(lv, s13908c1f0, 0, "S13908C1.s13908c1f0");
    check_field_offset(lv, s13908c1f1, ABISELECT(16,8), "S13908C1.s13908c1f1");
    check_field_offset(lv, s13908c1f2, ABISELECT(40,28), "S13908C1.s13908c1f2");
  }
}
static Arrange_To_Call_Me vS13908C1(Test_S13908C1, "S13908C1", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13880C1  {
  long s13880c1f0;
  short s13880c1f1[2];
  long s13880c1f2;
  ::S1035C6_nt s13880c1f3;
};
//SIG(1 S13880C1) C1{ Fl Fs[2] Fl FC2{ FL[2]}}



static void Test_S13880C1()
{
  {
    init_simple_test("S13880C1");
    S13880C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S13880C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13880C1)");
    check_field_offset(lv, s13880c1f0, 0, "S13880C1.s13880c1f0");
    check_field_offset(lv, s13880c1f1, ABISELECT(8,4), "S13880C1.s13880c1f1");
    check_field_offset(lv, s13880c1f2, ABISELECT(16,8), "S13880C1.s13880c1f2");
    check_field_offset(lv, s13880c1f3, ABISELECT(24,12), "S13880C1.s13880c1f3");
  }
}
static Arrange_To_Call_Me vS13880C1(Test_S13880C1, "S13880C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10702C1  {
  char s10702c1f0[2];
  short s10702c1f1[3];
  ::S1035C6_nt s10702c1f2;
};
//SIG(1 S10702C1) C1{ Fc[2] Fs[3] FC2{ FL[2]}}



static void Test_S10702C1()
{
  {
    init_simple_test("S10702C1");
    S10702C1 lv;
    check2(sizeof(lv), 24, "sizeof(S10702C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10702C1)");
    check_field_offset(lv, s10702c1f0, 0, "S10702C1.s10702c1f0");
    check_field_offset(lv, s10702c1f1, 2, "S10702C1.s10702c1f1");
    check_field_offset(lv, s10702c1f2, 8, "S10702C1.s10702c1f2");
  }
}
static Arrange_To_Call_Me vS10702C1(Test_S10702C1, "S10702C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6303C1  : S2215C30 {
  ::S292C17_nt s6303c1f0;
  virtual  ~S6303C1(); // _ZN7S6303C1D1Ev
  S6303C1(); // tgen
};
//SIG(1 S6303C1) C1{ BC2{ m} vd FC3{ m Fi[5]}}


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

static void Test_S6303C1()
{
  extern Class_Descriptor cd_S6303C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S6303C1, buf);
    S6303C1 *dp, &lv = *(dp=new (buf) S6303C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S6303C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6303C1)");
    check_base_class_offset(lv, (S2215C30*), 0, "S6303C1");
    check_field_offset(lv, s6303c1f0, ABISELECT(8,4), "S6303C1.s6303c1f0");
    test_class_info(&lv, &cd_S6303C1);
    dp->~S6303C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6303C1(Test_S6303C1, "S6303C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S6303C1C1Ev();
extern void _ZN7S6303C1D1Ev();
Name_Map name_map_S6303C1[] = {
  NSPAIR(_ZN7S6303C1C1Ev),
  NSPAIR(_ZN7S6303C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2215C30;
extern VTBL_ENTRY _ZTI8S2215C30[];
static Base_Class bases_S6303C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2215C30,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6303C1[];
extern void _ZN7S6303C1D1Ev();
extern void _ZN7S6303C1D0Ev();
static  VTBL_ENTRY vtc_S6303C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6303C1[0]),
  (VTBL_ENTRY)&_ZN7S6303C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6303C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S6303C1[];
extern  VTBL_ENTRY _ZTV7S6303C1[];
Class_Descriptor cd_S6303C1 = {  "S6303C1", // class name
  bases_S6303C1, 1,
  &(vtc_S6303C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S6303C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6303C1),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  S14871C1  {
  short s14871c1f0[2];
  ::S770C16_nt s14871c1f1[16];
};
//SIG(1 S14871C1) C1{ Fs[2] FC2{ Fc[4]}[16]}



static void Test_S14871C1()
{
  {
    init_simple_test("S14871C1");
    S14871C1 lv;
    check2(sizeof(lv), 68, "sizeof(S14871C1)");
    check2(__alignof__(lv), 2, "__alignof__(S14871C1)");
    check_field_offset(lv, s14871c1f0, 0, "S14871C1.s14871c1f0");
    check_field_offset(lv, s14871c1f1, 4, "S14871C1.s14871c1f1");
  }
}
static Arrange_To_Call_Me vS14871C1(Test_S14871C1, "S14871C1", 68);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11867C1  {
  ::S4871C4_nt s11867c1f0;
  ::S1035C6_nt s11867c1f1;
};
//SIG(1 S11867C1) C1{ FC2{ Fp[2]} FC3{ FL[2]}}



static void Test_S11867C1()
{
  {
    init_simple_test("S11867C1");
    S11867C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S11867C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11867C1)");
    check_field_offset(lv, s11867c1f0, 0, "S11867C1.s11867c1f0");
    check_field_offset(lv, s11867c1f1, ABISELECT(16,8), "S11867C1.s11867c1f1");
  }
}
static Arrange_To_Call_Me vS11867C1(Test_S11867C1, "S11867C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10929C1  {
  char s10929c1f0[40];
  ::S11166C5 s10929c1f1;
};
//SIG(1 S10929C1) C1{ Fc[40] FC2{ Fs Fc[2]}}



static void Test_S10929C1()
{
  {
    init_simple_test("S10929C1");
    S10929C1 lv;
    check2(sizeof(lv), 44, "sizeof(S10929C1)");
    check2(__alignof__(lv), 2, "__alignof__(S10929C1)");
    check_field_offset(lv, s10929c1f0, 0, "S10929C1.s10929c1f0");
    check_field_offset(lv, s10929c1f1, 40, "S10929C1.s10929c1f1");
  }
}
static Arrange_To_Call_Me vS10929C1(Test_S10929C1, "S10929C1", 44);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17713C1  {
  void *s17713c1f0;
  int s17713c1f1;
  ::S292C17_nt s17713c1f2;
  void  mf17713c1(); // _ZN8S17713C19mf17713c1Ev
};
//SIG(1 S17713C1) C1{ m Fp Fi FC2{ m Fi[5]}}


void  S17713C1 ::mf17713c1(){}

static void Test_S17713C1()
{
  {
    init_simple_test("S17713C1");
    S17713C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S17713C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17713C1)");
    check_field_offset(lv, s17713c1f0, 0, "S17713C1.s17713c1f0");
    check_field_offset(lv, s17713c1f1, ABISELECT(8,4), "S17713C1.s17713c1f1");
    check_field_offset(lv, s17713c1f2, ABISELECT(12,8), "S17713C1.s17713c1f2");
  }
}
static Arrange_To_Call_Me vS17713C1(Test_S17713C1, "S17713C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14928C1  {
  short s14928c1f0[3];
  long s14928c1f1;
  ::S1035C6_nt s14928c1f2;
};
//SIG(1 S14928C1) C1{ Fs[3] Fl FC2{ FL[2]}}



static void Test_S14928C1()
{
  {
    init_simple_test("S14928C1");
    S14928C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S14928C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14928C1)");
    check_field_offset(lv, s14928c1f0, 0, "S14928C1.s14928c1f0");
    check_field_offset(lv, s14928c1f1, 8, "S14928C1.s14928c1f1");
    check_field_offset(lv, s14928c1f2, ABISELECT(16,12), "S14928C1.s14928c1f2");
  }
}
static Arrange_To_Call_Me vS14928C1(Test_S14928C1, "S14928C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14785C1  {
  short s14785c1f0;
  char s14785c1f1[5];
  ::S1035C6_nt s14785c1f2;
};
//SIG(1 S14785C1) C1{ Fs Fc[5] FC2{ FL[2]}}



static void Test_S14785C1()
{
  {
    init_simple_test("S14785C1");
    S14785C1 lv;
    check2(sizeof(lv), 24, "sizeof(S14785C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14785C1)");
    check_field_offset(lv, s14785c1f0, 0, "S14785C1.s14785c1f0");
    check_field_offset(lv, s14785c1f1, 2, "S14785C1.s14785c1f1");
    check_field_offset(lv, s14785c1f2, 8, "S14785C1.s14785c1f2");
  }
}
static Arrange_To_Call_Me vS14785C1(Test_S14785C1, "S14785C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11739C1  {
  ::S1035C6_nt s11739c1f0;
  long s11739c1f1[5];
  void *s11739c1f2;
};
//SIG(1 S11739C1) C1{ FC2{ FL[2]} Fl[5] Fp}



static void Test_S11739C1()
{
  {
    init_simple_test("S11739C1");
    S11739C1 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S11739C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11739C1)");
    check_field_offset(lv, s11739c1f0, 0, "S11739C1.s11739c1f0");
    check_field_offset(lv, s11739c1f1, 16, "S11739C1.s11739c1f1");
    check_field_offset(lv, s11739c1f2, ABISELECT(56,36), "S11739C1.s11739c1f2");
  }
}
static Arrange_To_Call_Me vS11739C1(Test_S11739C1, "S11739C1", ABISELECT(64,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16769C1  {
  int s16769c1f0;
  ::S292C17_nt s16769c1f1;
  void  mf16769c1(); // _ZN8S16769C19mf16769c1Ev
};
//SIG(1 S16769C1) C1{ m Fi FC2{ m Fi[5]}}


void  S16769C1 ::mf16769c1(){}

static void Test_S16769C1()
{
  {
    init_simple_test("S16769C1");
    S16769C1 lv;
    check2(sizeof(lv), 24, "sizeof(S16769C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16769C1)");
    check_field_offset(lv, s16769c1f0, 0, "S16769C1.s16769c1f0");
    check_field_offset(lv, s16769c1f1, 4, "S16769C1.s16769c1f1");
  }
}
static Arrange_To_Call_Me vS16769C1(Test_S16769C1, "S16769C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13712C1  {
  long s13712c1f0;
  ::S1035C6_nt s13712c1f1;
  ::S1035C6_nt s13712c1f2;
};
//SIG(1 S13712C1) C1{ Fl FC2{ FL[2]} FC2}



static void Test_S13712C1()
{
  {
    init_simple_test("S13712C1");
    S13712C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S13712C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13712C1)");
    check_field_offset(lv, s13712c1f0, 0, "S13712C1.s13712c1f0");
    check_field_offset(lv, s13712c1f1, ABISELECT(8,4), "S13712C1.s13712c1f1");
    check_field_offset(lv, s13712c1f2, ABISELECT(24,20), "S13712C1.s13712c1f2");
  }
}
static Arrange_To_Call_Me vS13712C1(Test_S13712C1, "S13712C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14935C1  {
  short s14935c1f0[4];
  ::S1035C6_nt s14935c1f1;
};
//SIG(1 S14935C1) C1{ Fs[4] FC2{ FL[2]}}



static void Test_S14935C1()
{
  {
    init_simple_test("S14935C1");
    S14935C1 lv;
    check2(sizeof(lv), 24, "sizeof(S14935C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14935C1)");
    check_field_offset(lv, s14935c1f0, 0, "S14935C1.s14935c1f0");
    check_field_offset(lv, s14935c1f1, 8, "S14935C1.s14935c1f1");
  }
}
static Arrange_To_Call_Me vS14935C1(Test_S14935C1, "S14935C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14923C1  {
  short s14923c1f0[3];
  ::S1035C6_nt s14923c1f1;
};
//SIG(1 S14923C1) C1{ Fs[3] FC2{ FL[2]}}



static void Test_S14923C1()
{
  {
    init_simple_test("S14923C1");
    S14923C1 lv;
    check2(sizeof(lv), 24, "sizeof(S14923C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14923C1)");
    check_field_offset(lv, s14923c1f0, 0, "S14923C1.s14923c1f0");
    check_field_offset(lv, s14923c1f1, 8, "S14923C1.s14923c1f1");
  }
}
static Arrange_To_Call_Me vS14923C1(Test_S14923C1, "S14923C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14002C1  {
  long s14002c1f0[4];
  ::S1035C6_nt s14002c1f1;
};
//SIG(1 S14002C1) C1{ Fl[4] FC2{ FL[2]}}



static void Test_S14002C1()
{
  {
    init_simple_test("S14002C1");
    S14002C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S14002C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14002C1)");
    check_field_offset(lv, s14002c1f0, 0, "S14002C1.s14002c1f0");
    check_field_offset(lv, s14002c1f1, ABISELECT(32,16), "S14002C1.s14002c1f1");
  }
}
static Arrange_To_Call_Me vS14002C1(Test_S14002C1, "S14002C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16077C1  {
  ::S292C17_nt s16077c1f0;
  int s16077c1f1;
  void  mf16077c1(); // _ZN8S16077C19mf16077c1Ev
};
//SIG(1 S16077C1) C1{ m FC2{ m Fi[5]} Fi}


void  S16077C1 ::mf16077c1(){}

static void Test_S16077C1()
{
  {
    init_simple_test("S16077C1");
    S16077C1 lv;
    check2(sizeof(lv), 24, "sizeof(S16077C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16077C1)");
    check_field_offset(lv, s16077c1f0, 0, "S16077C1.s16077c1f0");
    check_field_offset(lv, s16077c1f1, 20, "S16077C1.s16077c1f1");
  }
}
static Arrange_To_Call_Me vS16077C1(Test_S16077C1, "S16077C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11187C1  {
  ::S770C16_nt s11187c1f0[16];
};
//SIG(1 S11187C1) C1{ FC2{ Fc[4]}[16]}



static void Test_S11187C1()
{
  {
    init_simple_test("S11187C1");
    S11187C1 lv;
    check2(sizeof(lv), 64, "sizeof(S11187C1)");
    check2(__alignof__(lv), 1, "__alignof__(S11187C1)");
    check_field_offset(lv, s11187c1f0, 0, "S11187C1.s11187c1f0");
  }
}
static Arrange_To_Call_Me vS11187C1(Test_S11187C1, "S11187C1", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14096C1  {
  void *s14096c1f0;
  ::S770C18_nt s14096c1f1;
};
//SIG(1 S14096C1) C1{ Fp FC2{ Fc[64]}}



static void Test_S14096C1()
{
  {
    init_simple_test("S14096C1");
    S14096C1 lv;
    check2(sizeof(lv), ABISELECT(72,68), "sizeof(S14096C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14096C1)");
    check_field_offset(lv, s14096c1f0, 0, "S14096C1.s14096c1f0");
    check_field_offset(lv, s14096c1f1, ABISELECT(8,4), "S14096C1.s14096c1f1");
  }
}
static Arrange_To_Call_Me vS14096C1(Test_S14096C1, "S14096C1", ABISELECT(72,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14797C1  {
  short s14797c1f0;
  ::S1035C6_nt s14797c1f1;
};
//SIG(1 S14797C1) C1{ Fs FC2{ FL[2]}}



static void Test_S14797C1()
{
  {
    init_simple_test("S14797C1");
    S14797C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S14797C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14797C1)");
    check_field_offset(lv, s14797c1f0, 0, "S14797C1.s14797c1f0");
    check_field_offset(lv, s14797c1f1, ABISELECT(8,4), "S14797C1.s14797c1f1");
  }
}
static Arrange_To_Call_Me vS14797C1(Test_S14797C1, "S14797C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11924C1  {
  ::S11166C5 s11924c1f0;
};
//SIG(1 S11924C1) C1{ FC2{ Fs Fc[2]}}



static void Test_S11924C1()
{
  {
    init_simple_test("S11924C1");
    S11924C1 lv;
    check2(sizeof(lv), 4, "sizeof(S11924C1)");
    check2(__alignof__(lv), 2, "__alignof__(S11924C1)");
    check_field_offset(lv, s11924c1f0, 0, "S11924C1.s11924c1f0");
  }
}
static Arrange_To_Call_Me vS11924C1(Test_S11924C1, "S11924C1", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15518C1  {
  ::S770C16_nt s15518c1f0;
  void  mf15518c1(); // _ZN8S15518C19mf15518c1Ev
};
//SIG(1 S15518C1) C1{ m FC2{ Fc[4]}}


void  S15518C1 ::mf15518c1(){}

static void Test_S15518C1()
{
  {
    init_simple_test("S15518C1");
    S15518C1 lv;
    check2(sizeof(lv), 4, "sizeof(S15518C1)");
    check2(__alignof__(lv), 1, "__alignof__(S15518C1)");
    check_field_offset(lv, s15518c1f0, 0, "S15518C1.s15518c1f0");
  }
}
static Arrange_To_Call_Me vS15518C1(Test_S15518C1, "S15518C1", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12103C1  {
  ::S292C17_nt s12103c1f0;
};
//SIG(1 S12103C1) C1{ FC2{ m Fi[5]}}



static void Test_S12103C1()
{
  {
    init_simple_test("S12103C1");
    S12103C1 lv;
    check2(sizeof(lv), 20, "sizeof(S12103C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12103C1)");
    check_field_offset(lv, s12103c1f0, 0, "S12103C1.s12103c1f0");
  }
}
static Arrange_To_Call_Me vS12103C1(Test_S12103C1, "S12103C1", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11742C1  {
  ::S1035C6_nt s11742c1f0;
  void *s11742c1f1;
};
//SIG(1 S11742C1) C1{ FC2{ FL[2]} Fp}



static void Test_S11742C1()
{
  {
    init_simple_test("S11742C1");
    S11742C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S11742C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11742C1)");
    check_field_offset(lv, s11742c1f0, 0, "S11742C1.s11742c1f0");
    check_field_offset(lv, s11742c1f1, 16, "S11742C1.s11742c1f1");
  }
}
static Arrange_To_Call_Me vS11742C1(Test_S11742C1, "S11742C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

